Если я не ошибаюсь в виде псевдокода.Отвлеклись, скажите про ai.obj, в каком он виде лежит в ПТС, в виде юинарника или так же в текстовом виде?
class 0 ai_boss06_baium_stone : default_npc
parameter_define_begin
int GM_ID 2
parameter_define_end
handler 12 11 // CREATED
variable_begin
"reply"
"i0"
"myself"
"_choiceN"
"_code"
"_from_choice"
variable_end
push_event // myself
push_const 784 //myself
add
fetch_i //i_ai0
push_const 1128 //i_ai0
add
push_reg_sp
fetch_i //expr =
push_const 0 //unary->INTEGER_CONST
assign
shift_sp -1
handler_end
ознакомился, для примера был выбран самый "потяжелее" AI xD чтобы как-то оправдывать бесполезность остальной массы файлов?Ага, а так же описание стадий, при каких условиях НПЦ использует умения, переход на след стадию и так далее и так далее, если вы не умеете читать код, это не означает что все не умеют.
Код:class ai_boss06_baium : default_npc { parameter: int GM_ID = 2; int pos_x = -105200; int pos_y = -253104; int pos_z = -15264; int TIMER_INTRO_STANBY = 2001; int TIMER_IDLE_COMBAT = 2002; int TIMER_CHECK_DMG_SOURCE = 2003; int TIMER_CHECK_POS_RESET = 9989; int different_level_9_attacked = 295895041; int different_level_9_see_spelled = 276234241; handler: EventHandler NO_DESIRE() { if(myself.GetLifeTime() > 9 && myself.i_ai3 == 1) { myself.AddMoveAroundDesire(5, 5); myself.LookNeighbor(300); } } EventHandler SCRIPT_EVENT(script_event_arg1, script_event_arg2, i0) { if(script_event_arg1 == 99999999) { myself.MPCC_SetMasterPartyRouting(script_event_arg2, myself.sm, 1); myself.int_list.Add(script_event_arg2); } else { myself.i_quest3 = 1; myself.sm.flag = 1; gg.InstantTeleportEx(myself.sm, 116033, 17447, 10107, -25348); myself.SetDBValue(myself.sm, 1); myself.sm.param1 = script_event_arg2; myself.AddTimerEx(2004, 11500); myself.AddTimerEx(2006, 2000); myself.AddTimerEx(TIMER_IDLE_COMBAT, 60000); myself.i_ai2 = myself.GetCurrentTick(); i0 = ((gg.Rand(3) + 2) + (60 * 1000)); myself.AddTimerEx(TIMER_CHECK_DMG_SOURCE, i0); myself.i_ai3 = 0; } } EventHandler CREATED(i0, reply) { myself.i_quest3 = 0; if(GM_ID != 0) { myself.RegisterGlobalMap(GM_ID, gg.GetIndexFromCreature(myself.sm)); myself.SetDBValue(myself.sm, 0); } if(reply == 0) { } else if(myself.InMyTerritory(myself.sm)) { myself.AddTimerEx(TIMER_INTRO_STANBY, 5000); myself.i_quest3 = 1; myself.SetDBValue(myself.sm, 1); myself.AddTimerEx(TIMER_IDLE_COMBAT, 60000); myself.i_ai2 = myself.GetCurrentTick(); i0 = ((gg.Rand(3) + 2) + (60 * 1000)); myself.AddTimerEx(TIMER_CHECK_DMG_SOURCE, i0); } myself.sm.flag = 1 myself.i_ai0 = 1 myself.i_ai1 = 1 myself.i_ai3 = 0 } EventHandler MY_DYING() { myself.EffectMusic(myself.sm, 6000, "BS01_D"); } EventHandler ATTACKED(attacker, damage, skill_name_id, i1, i2, c2) { if(myself.i_ai3 != 1) { return; } if(attacker.yongma_type == 1 && gg.GetAbnormalLevel(attacker, myself.Skill_GetAbnormalType(@s_anti_strider_slow)) <= 0) { if(myself.Skill_GetConsumeMP(@s_anti_strider_slow) < myself.sm.mp && myself.Skill_GetConsumeHP(@s_anti_strider_slow) < myself.sm.hp && myself.Skill_InReuseDelay(@s_anti_strider_slow) == 0) { myself.AddUseSkillDesire(attacker, @s_anti_strider_slow, 0, 1, 1000000); } } if(attacker.level > (myself.sm.level + 8)) { if(gg.GetAbnormalLevel(attacker, myself.Skill_GetAbnormalType(different_level_9_attacked)) == -1) { if(different_level_9_attacked == 295895041) { myself.CastBuffForQuestReward(attacker, different_level_9_attacked); myself.RemoveAttackDesire(attacker.id); return; } else { myself.CastBuffForQuestReward(attacker, different_level_9_attacked); } } } if(attacker.is_pc != 0 || myself.IsInCategory(12, attacker.class_id)) { if(attacker.is_pc == 1) { myself.i_ai0 = (myself.i_ai0 + damage); myself.i_ai2 = myself.GetCurrentTick(); if(skill_name_id == 0) { if(attacker == myself.c_quest0) { if(myself.i_quest0 < ((damage * 1000) + 1000)) { myself.i_quest0 = gg.FloatToInt(((damage * 1000) + gg.Rand(3000))); } } else if(attacker == myself.c_quest1) { if(myself.i_quest1 < ((damage * 1000) + 1000)) { myself.i_quest1 = gg.FloatToInt(((damage * 1000) + gg.Rand(3000))); } } else if(attacker == myself.c_quest2) { if(myself.i_quest2 < ((damage * 1000) + 1000)) { myself.i_quest2 = gg.FloatToInt(((damage * 1000) + gg.Rand(3000))); } } else if(myself.i_quest0 > myself.i_quest1) { i1 = 3; } else if(myself.i_quest0 == myself.i_quest1) { if(gg.Rand(100) < 50) { i1 = 2; } else { i1 = 3; } } else if(myself.i_quest0 < myself.i_quest1) { i1 = 2; } if(i1 == 2) { if(myself.i_quest0 > myself.i_quest2) { i1 = 4; } else if(myself.i_quest0 == myself.i_quest2) { if(gg.Rand(100) < 50) { i1 = 2; } else { i1 = 4; } } else if(myself.i_quest0 < myself.i_quest2) { i1 = 2; } } else if(i1 == 3) { if(myself.i_quest1 > myself.i_quest2) { i1 = 4; } else if(myself.i_quest1 == myself.i_quest2) { if(gg.Rand(100) < 50) { i1 = 3; } else { i1 = 4; } } else if(myself.i_quest1 < myself.i_quest2) { i1 = 3; } } select(i1) { case 2: myself.i_quest0 = gg.FloatToInt(((damage * 1000) + gg.Rand(3000))); myself.c_quest0 = attacker; break; case 3: myself.i_quest1 = gg.FloatToInt(((damage * 1000) + gg.Rand(3000))); myself.c_quest1 = attacker; break; case 4: myself.i_quest2 = gg.FloatToInt(((damage * 1000) + gg.Rand(3000))); myself.c_quest2 = attacker; break; } } else if(myself.sm.hp < ((myself.sm.max_hp * 1.000000) / 4.000000)) { if(attacker == myself.c_quest0) { if(myself.i_quest0 < (((damage / 30.000000) * 1000) + 1000)) { myself.i_quest0 = gg.FloatToInt((((damage / 30.000000) * 1000) + gg.Rand(3000))); } } else if(attacker == myself.c_quest1) { if(myself.i_quest1 < (((damage / 30.000000) * 1000) + 1000)) { myself.i_quest1 = gg.FloatToInt((((damage / 30.000000) * 1000) + gg.Rand(3000))); } } else if(attacker == myself.c_quest2) { if(myself.i_quest2 < (((damage / 30.000000) * 1000) + 1000)) { myself.i_quest2 = gg.FloatToInt((((damage / 30.000000) * 1000) + gg.Rand(3000))); } } else if(myself.i_quest0 > myself.i_quest1) { i1 = 3; } else if(myself.i_quest0 == myself.i_quest1) { if(gg.Rand(100) < 50) { i1 = 2; } else { i1 = 3; } } else if(myself.i_quest0 < myself.i_quest1) { i1 = 2; } if(i1 == 2) { if(myself.i_quest0 > myself.i_quest2) { i1 = 4; } else if(myself.i_quest0 == myself.i_quest2) { if(gg.Rand(100) < 50) { i1 = 2; } else { i1 = 4; } } else if(myself.i_quest0 < myself.i_quest2) { i1 = 2; } } else if(i1 == 3) { if(myself.i_quest1 > myself.i_quest2) { i1 = 4; } else if(myself.i_quest1 == myself.i_quest2) { if(gg.Rand(100) < 50) { i1 = 3; } else { i1 = 4; } } else if(myself.i_quest1 < myself.i_quest2) { i1 = 3; } } select(i1) { case 2: myself.i_quest0 = gg.FloatToInt((((damage / 30.000000) * 1000) + gg.Rand(3000))); myself.c_quest0 = attacker; break; case 3: myself.i_quest1 = gg.FloatToInt((((damage / 30.000000) * 1000) + gg.Rand(3000))); myself.c_quest1 = attacker; break; case 4: myself.i_quest2 = gg.FloatToInt((((damage / 30.000000) * 1000) + gg.Rand(3000))); myself.c_quest2 = attacker; break; } } else if(myself.sm.hp < ((myself.sm.max_hp * 2.000000) / 4.000000)) { if(attacker == myself.c_quest0) { if(myself.i_quest0 < (((damage / 50.000000) * 1000) + 1000)) { myself.i_quest0 = gg.FloatToInt((((damage / 50.000000) * 1000) + gg.Rand(3000))); } } else if(attacker == myself.c_quest1) { if(myself.i_quest1 < (((damage / 50.000000) * 1000) + 1000)) { myself.i_quest1 = gg.FloatToInt((((damage / 50.000000) * 1000) + gg.Rand(3000))); } } else if(attacker == myself.c_quest2) { if(myself.i_quest2 < (((damage / 50.000000) * 1000) + 1000)) { myself.i_quest2 = gg.FloatToInt((((damage / 50.000000) * 1000) + gg.Rand(3000))); } } else if(myself.i_quest0 > myself.i_quest1) { i1 = 3; } else if(myself.i_quest0 == myself.i_quest1) { if(gg.Rand(100) < 50) { i1 = 2; } else { i1 = 3; } } else if(myself.i_quest0 < myself.i_quest1) { i1 = 2; } if(i1 == 2) { if(myself.i_quest0 > myself.i_quest2) { i1 = 4; } else if(myself.i_quest0 == myself.i_quest2) { if(gg.Rand(100) < 50) { i1 = 2; } else { i1 = 4; } } else if(myself.i_quest0 < myself.i_quest2) { i1 = 2; } } else if(i1 == 3) { if(myself.i_quest1 > myself.i_quest2) { i1 = 4; } else if(myself.i_quest1 == myself.i_quest2) { if(gg.Rand(100) < 50) { i1 = 3; } else { i1 = 4; } } else if(myself.i_quest1 < myself.i_quest2) { i1 = 3; } } select(i1) { case 2: myself.i_quest0 = gg.FloatToInt((((damage / 50.000000) * 1000) + gg.Rand(3000))); myself.c_quest0 = attacker; break; case 3: myself.i_quest1 = gg.FloatToInt((((damage / 50.000000) * 1000) + gg.Rand(3000))); myself.c_quest1 = attacker; break; case 4: myself.i_quest2 = gg.FloatToInt((((damage / 50.000000) * 1000) + gg.Rand(3000))); myself.c_quest2 = attacker; break; } } else if(myself.sm.hp < ((myself.sm.max_hp * 3.000000) / 4.000000)) { if(attacker == myself.c_quest0) { if(myself.i_quest0 < (((damage / 100.000000) * 1000) + 1000)) { myself.i_quest0 = gg.FloatToInt((((damage / 100.000000) * 1000) + gg.Rand(3000))); } } else if(attacker == myself.c_quest1) { if(myself.i_quest1 < (((damage / 100.000000) * 1000) + 1000)) { myself.i_quest1 = gg.FloatToInt((((damage / 100.000000) * 1000) + gg.Rand(3000))); } } else if(attacker == myself.c_quest2) { if(myself.i_quest2 < (((damage / 100.000000) * 1000) + 1000)) { myself.i_quest2 = gg.FloatToInt((((damage / 100.000000) * 1000) + gg.Rand(3000))); } } else if(myself.i_quest0 > myself.i_quest1) { i1 = 3; } else if(myself.i_quest0 == myself.i_quest1) { if(gg.Rand(100) < 50) { i1 = 2; } else { i1 = 3; } } else if(myself.i_quest0 < myself.i_quest1) { i1 = 2; } if(i1 == 2) { if(myself.i_quest0 > myself.i_quest2) { i1 = 4; } else if(myself.i_quest0 == myself.i_quest2) { if(gg.Rand(100) < 50) { i1 = 2; } else { i1 = 4; } } else if(myself.i_quest0 < myself.i_quest2) { i1 = 2; } } else if(i1 == 3) { if(myself.i_quest1 > myself.i_quest2) { i1 = 4; } else if(myself.i_quest1 == myself.i_quest2) { if(gg.Rand(100) < 50) { i1 = 3; } else { i1 = 4; } } else if(myself.i_quest1 < myself.i_quest2) { i1 = 3; } } select(i1) { case 2: myself.i_quest0 = gg.FloatToInt((((damage / 100.000000) * 1000) + gg.Rand(3000))); myself.c_quest0 = attacker; break; case 3: myself.i_quest1 = gg.FloatToInt((((damage / 100.000000) * 1000) + gg.Rand(3000))); myself.c_quest1 = attacker; break; case 4: myself.i_quest2 = gg.FloatToInt((((damage / 100.000000) * 1000) + gg.Rand(3000))); myself.c_quest2 = attacker; break; } } else if(attacker == myself.c_quest0) { if(myself.i_quest0 < (((damage / 150.000000) * 1000) + 1000)) { myself.i_quest0 = gg.FloatToInt((((damage / 150.000000) * 1000) + gg.Rand(3000))); } } else if(attacker == myself.c_quest1) { if(myself.i_quest1 < (((damage / 150.000000) * 1000) + 1000)) { myself.i_quest1 = gg.FloatToInt((((damage / 150.000000) * 1000) + gg.Rand(3000))); } } else if(attacker == myself.c_quest2) { if(myself.i_quest2 < (((damage / 150.000000) * 1000) + 1000)) { myself.i_quest2 = gg.FloatToInt((((damage / 150.000000) * 1000) + gg.Rand(3000))); } } else if(myself.i_quest0 > myself.i_quest1) { i1 = 3; } else if(myself.i_quest0 == myself.i_quest1) { if(gg.Rand(100) < 50) { i1 = 2; } else { i1 = 3; } } else if(myself.i_quest0 < myself.i_quest1) { i1 = 2; } if(i1 == 2) { if(myself.i_quest0 > myself.i_quest2) { i1 = 4; } else if(myself.i_quest0 == myself.i_quest2) { if(gg.Rand(100) < 50) { i1 = 2; } else { i1 = 4; } } else if(myself.i_quest0 < myself.i_quest2) { i1 = 2; } } else if(i1 == 3) { if(myself.i_quest1 > myself.i_quest2) { i1 = 4; } else if(myself.i_quest1 == myself.i_quest2) { if(gg.Rand(100) < 50) { i1 = 3; } else { i1 = 4; } } else if(myself.i_quest1 < myself.i_quest2) { i1 = 3; } } select(i1) { case 2: myself.i_quest0 = gg.FloatToInt((((damage / 150.000000) * 1000) + gg.Rand(3000))); myself.c_quest0 = attacker; break; case 3: myself.i_quest1 = gg.FloatToInt((((damage / 150.000000) * 1000) + gg.Rand(3000))); myself.c_quest1 = attacker; break; case 4: myself.i_quest2 = gg.FloatToInt((((damage / 150.000000) * 1000) + gg.Rand(3000))); myself.c_quest2 = attacker; break; } } } else { myself.c_ai3 = attacker; } if(myself.i_ai3 != 0) { if(gg.Rand(100) < 10 && myself.IsNullCreature(myself.c_ai3) == 0 && myself.sm.flag == 0) { c2 = myself.c_ai3; } else if(myself.IsNullCreature(myself.c_quest0) == 0) { if(myself.DistFromMe(myself.c_quest0) > 9000 || myself.c_quest0.alive == 0) { myself.i_quest0 = 0; } } else { myself.i_quest0 = 0; } if(myself.IsNullCreature(myself.c_quest1) == 0) { if(myself.DistFromMe(myself.c_quest1) > 9000 || myself.c_quest1.alive == 0) { myself.i_quest1 = 0; } } else { myself.i_quest1 = 0; } if(myself.IsNullCreature(myself.c_quest2) == 0) { if(myself.DistFromMe(myself.c_quest2) > 9000 || myself.c_quest2.alive == 0) { myself.i_quest2 = 0; } } else { myself.i_quest2 = 0; } if(myself.i_quest0 > myself.i_quest1) { i1 = 0; i2 = myself.i_quest0; c2 = myself.c_quest0; } else { i1 = 1; i2 = myself.i_quest1; c2 = myself.c_quest1; } if(myself.i_quest2 > i2) { i1 = 2; i2 = myself.i_quest2; c2 = myself.c_quest2; } if(i2 > 0) { if(gg.Rand(100) < 70) { select(i1) { case 0: myself.i_quest0 = 500; break; case 1: myself.i_quest1 = 500; break; case 2: myself.i_quest2 = 500; break; } } } if(myself.IsNullCreature(c2) != 0 || i2 == 0) { c2 = myself.c_ai3; } if(myself.IsNullCreature(c2) == 0 && c2.alive) { if(myself.sm.hp > ((myself.sm.max_hp * 3.000000) / 4.000000)) { if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_energy_wave, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_earth_quake, 0, 1, 10000); } else { myself.AddUseSkillDesire(c2, @s_baium_normal_attack, 0, 1, 10000); } } else if(myself.sm.hp > ((myself.sm.max_hp * 2.000000) / 4.000000)) { if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_group_hold, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_energy_wave, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_earth_quake, 0, 1, 10000); } else { myself.AddUseSkillDesire(c2, @s_baium_normal_attack, 0, 1, 10000); } } else if(myself.sm.hp > ((myself.sm.max_hp * 1.000000) / 4.000000)) { if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_thunderbolt, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_group_hold, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_energy_wave, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_earth_quake, 0, 1, 10000); } else { myself.AddUseSkillDesire(c2, @s_baium_normal_attack, 0, 1, 10000); } } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_thunderbolt, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_group_hold, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_energy_wave, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_earth_quake, 0, 1, 10000); } else { myself.AddUseSkillDesire(c2, @s_baium_normal_attack, 0, 1, 10000); } } } } EventHandler PARTY_ATTACKED(attacker, private, damage) { if(private != myself.sm && attacker != myself.sm) { myself.i_ai1 = (myself.i_ai1 + damage); } } EventHandler SEE_CREATURE(creature, i1, i2, c2) { if(myself.InMyTerritory(creature) == 0) { return; } if(creature.is_pc && myself.GetLifeTime() < 10) { myself.c_ai1 = creature; } if(myself.IsInCategory(3, creature.occupation)) { if(myself.sm.hp < ((myself.sm.max_hp * 1.000000) / 4.000000)) { if(creature == myself.c_quest0) { if(myself.i_quest0 < ((10 * 1000) + 1000)) { myself.i_quest0 = gg.FloatToInt(((10 * 1000) + gg.Rand(3000))); } } else if(creature == myself.c_quest1) { if(myself.i_quest1 < ((10 * 1000) + 1000)) { myself.i_quest1 = gg.FloatToInt(((10 * 1000) + gg.Rand(3000))); } } else if(creature == myself.c_quest2) { if(myself.i_quest2 < ((10 * 1000) + 1000)) { myself.i_quest2 = gg.FloatToInt(((10 * 1000) + gg.Rand(3000))); } } else if(myself.i_quest0 > myself.i_quest1) { i1 = 3; } else if(myself.i_quest0 == myself.i_quest1) { if(gg.Rand(100) < 50) { i1 = 2; } else { i1 = 3; } } else if(myself.i_quest0 < myself.i_quest1) { i1 = 2; } if(i1 == 2) { if(myself.i_quest0 > myself.i_quest2) { i1 = 4; } else if(myself.i_quest0 == myself.i_quest2) { if(gg.Rand(100) < 50) { i1 = 2; } else { i1 = 4; } } else if(myself.i_quest0 < myself.i_quest2) { i1 = 2; } } else if(i1 == 3) { if(myself.i_quest1 > myself.i_quest2) { i1 = 4; } else if(myself.i_quest1 == myself.i_quest2) { if(gg.Rand(100) < 50) { i1 = 3; } else { i1 = 4; } } else if(myself.i_quest1 < myself.i_quest2) { i1 = 3; } } select(i1) { case 2: myself.i_quest0 = gg.FloatToInt(((10 * 1000) + gg.Rand(3000))); myself.c_quest0 = creature; break; case 3: myself.i_quest1 = gg.FloatToInt(((10 * 1000) + gg.Rand(3000))); myself.c_quest1 = creature; break; case 4: myself.i_quest2 = gg.FloatToInt(((10 * 1000) + gg.Rand(3000))); myself.c_quest2 = creature; break; } } else if(myself.sm.hp < ((myself.sm.max_hp * 2.000000) / 4.000000)) { if(creature == myself.c_quest0) { if(myself.i_quest0 < ((6 * 1000) + 1000)) { myself.i_quest0 = gg.FloatToInt(((6 * 1000) + gg.Rand(3000))); } } else if(creature == myself.c_quest1) { if(myself.i_quest1 < ((6 * 1000) + 1000)) { myself.i_quest1 = gg.FloatToInt(((6 * 1000) + gg.Rand(3000))); } } else if(creature == myself.c_quest2) { if(myself.i_quest2 < ((6 * 1000) + 1000)) { myself.i_quest2 = gg.FloatToInt(((6 * 1000) + gg.Rand(3000))); } } else if(myself.i_quest0 > myself.i_quest1) { i1 = 3; } else if(myself.i_quest0 == myself.i_quest1) { if(gg.Rand(100) < 50) { i1 = 2; } else { i1 = 3; } } else if(myself.i_quest0 < myself.i_quest1) { i1 = 2; } if(i1 == 2) { if(myself.i_quest0 > myself.i_quest2) { i1 = 4; } else if(myself.i_quest0 == myself.i_quest2) { if(gg.Rand(100) < 50) { i1 = 2; } else { i1 = 4; } } else if(myself.i_quest0 < myself.i_quest2) { i1 = 2; } } else if(i1 == 3) { if(myself.i_quest1 > myself.i_quest2) { i1 = 4; } else if(myself.i_quest1 == myself.i_quest2) { if(gg.Rand(100) < 50) { i1 = 3; } else { i1 = 4; } } else if(myself.i_quest1 < myself.i_quest2) { i1 = 3; } } select(i1) { case 2: myself.i_quest0 = gg.FloatToInt(((6 * 1000) + gg.Rand(3000))); myself.c_quest0 = creature; break; case 3: myself.i_quest1 = gg.FloatToInt(((6 * 1000) + gg.Rand(3000))); myself.c_quest1 = creature; break; case 4: myself.i_quest2 = gg.FloatToInt(((6 * 1000) + gg.Rand(3000))); myself.c_quest2 = creature; break; } } else if(myself.sm.hp < ((myself.sm.max_hp * 3.000000) / 4.000000)) { if(creature == myself.c_quest0) { if(myself.i_quest0 < ((3 * 1000) + 1000)) { myself.i_quest0 = gg.FloatToInt(((3 * 1000) + gg.Rand(3000))); } } else if(creature == myself.c_quest1) { if(myself.i_quest1 < ((3 * 1000) + 1000)) { myself.i_quest1 = gg.FloatToInt(((3 * 1000) + gg.Rand(3000))); } } else if(creature == myself.c_quest2) { if(myself.i_quest2 < ((3 * 1000) + 1000)) { myself.i_quest2 = gg.FloatToInt(((3 * 1000) + gg.Rand(3000))); } } else if(myself.i_quest0 > myself.i_quest1) { i1 = 3; } else if(myself.i_quest0 == myself.i_quest1) { if(gg.Rand(100) < 50) { i1 = 2; } else { i1 = 3; } } else if(myself.i_quest0 < myself.i_quest1) { i1 = 2; } if(i1 == 2) { if(myself.i_quest0 > myself.i_quest2) { i1 = 4; } else if(myself.i_quest0 == myself.i_quest2) { if(gg.Rand(100) < 50) { i1 = 2; } else { i1 = 4; } } else if(myself.i_quest0 < myself.i_quest2) { i1 = 2; } } else if(i1 == 3) { if(myself.i_quest1 > myself.i_quest2) { i1 = 4; } else if(myself.i_quest1 == myself.i_quest2) { if(gg.Rand(100) < 50) { i1 = 3; } else { i1 = 4; } } else if(myself.i_quest1 < myself.i_quest2) { i1 = 3; } } select(i1) { case 2: myself.i_quest0 = gg.FloatToInt(((3 * 1000) + gg.Rand(3000))); myself.c_quest0 = creature; break; case 3: myself.i_quest1 = gg.FloatToInt(((3 * 1000) + gg.Rand(3000))); myself.c_quest1 = creature; break; case 4: myself.i_quest2 = gg.FloatToInt(((3 * 1000) + gg.Rand(3000))); myself.c_quest2 = creature; break; } } else if(creature == myself.c_quest0) { if(myself.i_quest0 < ((2 * 1000) + 1000)) { myself.i_quest0 = gg.FloatToInt(((2 * 1000) + gg.Rand(3000))); } } else if(creature == myself.c_quest1) { if(myself.i_quest1 < ((2 * 1000) + 1000)) { myself.i_quest1 = gg.FloatToInt(((2 * 1000) + gg.Rand(3000))); } } else if(creature == myself.c_quest2) { if(myself.i_quest2 < ((2 * 1000) + 1000)) { myself.i_quest2 = gg.FloatToInt(((2 * 1000) + gg.Rand(3000))); } } else if(myself.i_quest0 > myself.i_quest1) { i1 = 3; } else if(myself.i_quest0 == myself.i_quest1) { if(gg.Rand(100) < 50) { i1 = 2; } else { i1 = 3; } } else if(myself.i_quest0 < myself.i_quest1) { i1 = 2; } if(i1 == 2) { if(myself.i_quest0 > myself.i_quest2) { i1 = 4; } else if(myself.i_quest0 == myself.i_quest2) { if(gg.Rand(100) < 50) { i1 = 2; } else { i1 = 4; } } else if(myself.i_quest0 < myself.i_quest2) { i1 = 2; } } else if(i1 == 3) { if(myself.i_quest1 > myself.i_quest2) { i1 = 4; } else if(myself.i_quest1 == myself.i_quest2) { if(gg.Rand(100) < 50) { i1 = 3; } else { i1 = 4; } } else if(myself.i_quest1 < myself.i_quest2) { i1 = 3; } } select(i1) { case 2: myself.i_quest0 = gg.FloatToInt(((2 * 1000) + gg.Rand(3000))); myself.c_quest0 = creature; break; case 3: myself.i_quest1 = gg.FloatToInt(((2 * 1000) + gg.Rand(3000))); myself.c_quest1 = creature; break; case 4: myself.i_quest2 = gg.FloatToInt(((2 * 1000) + gg.Rand(3000))); myself.c_quest2 = creature; break; } } else if(creature == myself.c_quest0) { if(myself.i_quest0 < ((1 * 1000) + 1000)) { myself.i_quest0 = gg.FloatToInt(((1 * 1000) + gg.Rand(3000))); } } else if(creature == myself.c_quest1) { if(myself.i_quest1 < ((1 * 1000) + 1000)) { myself.i_quest1 = gg.FloatToInt(((1 * 1000) + gg.Rand(3000))); } } else if(creature == myself.c_quest2) { if(myself.i_quest2 < ((1 * 1000) + 1000)) { myself.i_quest2 = gg.FloatToInt(((1 * 1000) + gg.Rand(3000))); } } else if(myself.i_quest0 > myself.i_quest1) { i1 = 3; } else if(myself.i_quest0 == myself.i_quest1) { if(gg.Rand(100) < 50) { i1 = 2; } else { i1 = 3; } } else if(myself.i_quest0 < myself.i_quest1) { i1 = 2; } if(i1 == 2) { if(myself.i_quest0 > myself.i_quest2) { i1 = 4; } else if(myself.i_quest0 == myself.i_quest2) { if(gg.Rand(100) < 50) { i1 = 2; } else { i1 = 4; } } else if(myself.i_quest0 < myself.i_quest2) { i1 = 2; } } else if(i1 == 3) { if(myself.i_quest1 > myself.i_quest2) { i1 = 4; } else if(myself.i_quest1 == myself.i_quest2) { if(gg.Rand(100) < 50) { i1 = 3; } else { i1 = 4; } } else if(myself.i_quest1 < myself.i_quest2) { i1 = 3; } } select(i1) { case 2: myself.i_quest0 = gg.FloatToInt(((1 * 1000) + gg.Rand(3000))); myself.c_quest0 = creature; break; case 3: myself.i_quest1 = gg.FloatToInt(((1 * 1000) + gg.Rand(3000))); myself.c_quest1 = creature; break; case 4: myself.i_quest2 = gg.FloatToInt(((1 * 1000) + gg.Rand(3000))); myself.c_quest2 = creature; break; } if(myself.i_ai3 != 0) { if(gg.Rand(100) < 10 && myself.IsNullCreature(myself.c_ai3) == 0 && myself.sm.flag == 0) { c2 = myself.c_ai3; } else if(myself.IsNullCreature(myself.c_quest0) == 0) { if(myself.DistFromMe(myself.c_quest0) > 9000 || myself.c_quest0.alive == 0) { myself.i_quest0 = 0; } } else { myself.i_quest0 = 0; } if(myself.IsNullCreature(myself.c_quest1) == 0) { if(myself.DistFromMe(myself.c_quest1) > 9000 || myself.c_quest1.alive == 0) { myself.i_quest1 = 0; } } else { myself.i_quest1 = 0; } if(myself.IsNullCreature(myself.c_quest2) == 0) { if(myself.DistFromMe(myself.c_quest2) > 9000 || myself.c_quest2.alive == 0) { myself.i_quest2 = 0; } } else { myself.i_quest2 = 0; } if(myself.i_quest0 > myself.i_quest1) { i1 = 0; i2 = myself.i_quest0; c2 = myself.c_quest0; } else { i1 = 1; i2 = myself.i_quest1; c2 = myself.c_quest1; } if(myself.i_quest2 > i2) { i1 = 2; i2 = myself.i_quest2; c2 = myself.c_quest2; } if(i2 > 0) { if(gg.Rand(100) < 70) { select(i1) { case 0: myself.i_quest0 = 500; break; case 1: myself.i_quest1 = 500; break; case 2: myself.i_quest2 = 500; break; } } } if(myself.IsNullCreature(c2) != 0 || i2 == 0) { c2 = myself.c_ai3; } if(myself.IsNullCreature(c2) == 0 && c2.alive) { if(myself.sm.hp > ((myself.sm.max_hp * 3.000000) / 4.000000)) { if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_energy_wave, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_earth_quake, 0, 1, 10000); } else { myself.AddUseSkillDesire(c2, @s_baium_normal_attack, 0, 1, 10000); } } else if(myself.sm.hp > ((myself.sm.max_hp * 2.000000) / 4.000000)) { if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_group_hold, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_energy_wave, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_earth_quake, 0, 1, 10000); } else { myself.AddUseSkillDesire(c2, @s_baium_normal_attack, 0, 1, 10000); } } else if(myself.sm.hp > ((myself.sm.max_hp * 1.000000) / 4.000000)) { if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_thunderbolt, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_group_hold, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_energy_wave, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_earth_quake, 0, 1, 10000); } else { myself.AddUseSkillDesire(c2, @s_baium_normal_attack, 0, 1, 10000); } } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_thunderbolt, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_group_hold, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_energy_wave, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_earth_quake, 0, 1, 10000); } else { myself.AddUseSkillDesire(c2, @s_baium_normal_attack, 0, 1, 10000); } } } } EventHandler USE_SKILL_FINISHED(i1, i2, c2) { if(myself.i_ai3 == 0) { return; } if(gg.Rand(100) < 10 && myself.IsNullCreature(myself.c_ai3) == 0 && myself.sm.flag == 0) { c2 = myself.c_ai3; } else if(myself.IsNullCreature(myself.c_quest0) == 0) { if(myself.DistFromMe(myself.c_quest0) > 9000 || myself.c_quest0.alive == 0) { myself.i_quest0 = 0; } } else { myself.i_quest0 = 0; } if(myself.IsNullCreature(myself.c_quest1) == 0) { if(myself.DistFromMe(myself.c_quest1) > 9000 || myself.c_quest1.alive == 0) { myself.i_quest1 = 0; } } else { myself.i_quest1 = 0; } if(myself.IsNullCreature(myself.c_quest2) == 0) { if(myself.DistFromMe(myself.c_quest2) > 9000 || myself.c_quest2.alive == 0) { myself.i_quest2 = 0; } } else { myself.i_quest2 = 0; } if(myself.i_quest0 > myself.i_quest1) { i1 = 0; i2 = myself.i_quest0; c2 = myself.c_quest0; } else { i1 = 1; i2 = myself.i_quest1; c2 = myself.c_quest1; } if(myself.i_quest2 > i2) { i1 = 2; i2 = myself.i_quest2; c2 = myself.c_quest2; } if(i2 > 0) { if(gg.Rand(100) < 70) { select(i1) { case 0: myself.i_quest0 = 500; break; case 1: myself.i_quest1 = 500; break; case 2: myself.i_quest2 = 500; break; } } } if(myself.IsNullCreature(c2) != 0 || i2 == 0) { c2 = myself.c_ai3; } if(myself.IsNullCreature(c2) == 0 && c2.alive) { if(myself.sm.hp > ((myself.sm.max_hp * 3.000000) / 4.000000)) { if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_energy_wave, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_earth_quake, 0, 1, 10000); } else { myself.AddUseSkillDesire(c2, @s_baium_normal_attack, 0, 1, 10000); } } else if(myself.sm.hp > ((myself.sm.max_hp * 2.000000) / 4.000000)) { if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_group_hold, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_energy_wave, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_earth_quake, 0, 1, 10000); } else { myself.AddUseSkillDesire(c2, @s_baium_normal_attack, 0, 1, 10000); } } else if(myself.sm.hp > ((myself.sm.max_hp * 1.000000) / 4.000000)) { if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_thunderbolt, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_group_hold, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_energy_wave, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_earth_quake, 0, 1, 10000); } else { myself.AddUseSkillDesire(c2, @s_baium_normal_attack, 0, 1, 10000); } } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_thunderbolt, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_group_hold, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_energy_wave, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_earth_quake, 0, 1, 10000); } else { myself.AddUseSkillDesire(c2, @s_baium_normal_attack, 0, 1, 10000); } } } EventHandler SEE_SPELL(speller, skill_name_id, i0, c0, i1, i2) { if(speller.level > (myself.sm.level + 8)) { if(gg.GetAbnormalLevel(speller, myself.Skill_GetAbnormalType(different_level_9_see_spelled)) == -1) { if(different_level_9_see_spelled == 295895041) { myself.CastBuffForQuestReward(speller, different_level_9_see_spelled); myself.RemoveAttackDesire(speller.id); return; } else { myself.CastBuffForQuestReward(speller, different_level_9_see_spelled); } } } } EventHandler TIMER_FIRED_EX(timer_id, i0, i1, c0, i2, c2, c3) { if(timer_id == TIMER_CHECK_POS_RESET) { if(myself.i_ai4 == 0) { if(gg.FloatToInt(myself.sm.x) == pos_x && gg.FloatToInt(myself.sm.y) == pos_y) { myself.i_ai4 == 1 myself.sm.AddLogByNpc2("ai_boss06_baium_TIMER_FIRED_EX", "CreateOnePrivateEx_Stone", 0, 0, 0, 0, 0, 0); } else { myself.RemoveAllDesire(); myself.StopMove(); gg.InstantTeleportEx(myself.sm, -105200, -253104, -15264, 0); myself.AddTimerEx(TIMER_CHECK_POS_RESET, 6000); } } } if(myself.i_quest3 == 0) { return; } if(timer_id == 2006) { myself.EarthQuakeByNPC(myself.sm, 40, 10, 1, 0, 0, 0); myself.EffectMusic(myself.sm, 6000, "BS02_A"); } if(timer_id == 2004) { myself.AddEffectActionDesire(myself.sm, 3, 7300, 10000000); myself.AddTimerEx(2005, 7300); } if(timer_id == 2005) { myself.AddEffectActionDesire(myself.sm, 1, 8000, 1000000); if(myself.sm.param1 != 0) { c0 = gg.GetCreatureFromIndex(myself.sm.param1); } if(myself.IsNullCreature(c0) == 0 && myself.sm.param1 != 0) { if(myself.DistFromMe(c0) < 16000) { myself.Say(c0.name + ", " + gg.MakeFString(22937, "", "", "", "", "")); myself.InstantTeleport(c0, 115910, 17337, 10105); if(myself.Skill_GetConsumeMP(@s_present_from_baium) < myself.sm.mp && myself.Skill_GetConsumeHP(@s_present_from_baium) < myself.sm.hp && myself.Skill_InReuseDelay(@s_present_from_baium) == 0) { myself.AddUseSkillDesire(c0, @s_present_from_baium, 0, 1, 2000000); } } } else if(myself.IsNullCreature(myself.c_ai1) == 0) { myself.Say(myself.c_ai1.name + ", " + gg.MakeFString(22937, "", "", "", "", "")); myself.InstantTeleport(myself.c_ai1, 115910, 17337, 10105); if(myself.Skill_GetConsumeMP(@s_present_from_baium) < myself.sm.mp && myself.Skill_GetConsumeHP(@s_present_from_baium) < myself.sm.hp && myself.Skill_InReuseDelay(@s_present_from_baium) == 0) { myself.AddUseSkillDesire(myself.c_ai1, @s_present_from_baium, 0, 1, 2000000); } } c3 = myself.FindNeighborHero(4000); if(myself.IsNullCreature(c3) == 0) { gg.BroadcastOnScreenMsgStr(myself.sm, 4000, 1, 0, 0, 0, 0, 0, 3000, 0, gg.MakeFString(1000521, c3.name, "", "", "", "")); } myself.AddTimerEx(TIMER_INTRO_STANBY, 8000); } if(timer_id == TIMER_INTRO_STANBY) { myself.i_ai3 = 1 if(gg.Rand(100) < 10 && myself.IsNullCreature(myself.c_ai3) == 0 && myself.sm.flag == 0) { c2 = myself.c_ai3; } else if(myself.IsNullCreature(myself.c_quest0) == 0) { if(myself.DistFromMe(myself.c_quest0) > 9000 || myself.c_quest0.alive == 0) { myself.i_quest0 = 0; } } else { myself.i_quest0 = 0; } if(myself.IsNullCreature(myself.c_quest1) == 0) { if(myself.DistFromMe(myself.c_quest1) > 9000 || myself.c_quest1.alive == 0) { myself.i_quest1 = 0; } } else { myself.i_quest1 = 0; } if(myself.IsNullCreature(myself.c_quest2) == 0) { if(myself.DistFromMe(myself.c_quest2) > 9000 || myself.c_quest2.alive == 0) { myself.i_quest2 = 0; } } else { myself.i_quest2 = 0; } if(myself.i_quest0 > myself.i_quest1) { i1 = 0; i2 = myself.i_quest0; c2 = myself.c_quest0; } else { i1 = 1; i2 = myself.i_quest1; c2 = myself.c_quest1; } if(myself.i_quest2 > i2) { i1 = 2; i2 = myself.i_quest2; c2 = myself.c_quest2; } if(i2 > 0) { if(gg.Rand(100) < 70) { select(i1) { case 0: myself.i_quest0 = 500; break; case 1: myself.i_quest1 = 500; break; case 2: myself.i_quest2 = 500; break; } } } if(myself.IsNullCreature(c2) != 0 || i2 == 0) { c2 = myself.c_ai3; } if(myself.IsNullCreature(c2) == 0 && c2.alive) { if(myself.sm.hp > ((myself.sm.max_hp * 3.000000) / 4.000000)) { if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_energy_wave, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_earth_quake, 0, 1, 10000); } else { myself.AddUseSkillDesire(c2, @s_baium_normal_attack, 0, 1, 10000); } } else if(myself.sm.hp > ((myself.sm.max_hp * 2.000000) / 4.000000)) { if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_group_hold, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_energy_wave, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_earth_quake, 0, 1, 10000); } else { myself.AddUseSkillDesire(c2, @s_baium_normal_attack, 0, 1, 10000); } } else if(myself.sm.hp > ((myself.sm.max_hp * 1.000000) / 4.000000)) { if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_thunderbolt, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_group_hold, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_energy_wave, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_earth_quake, 0, 1, 10000); } else { myself.AddUseSkillDesire(c2, @s_baium_normal_attack, 0, 1, 10000); } } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_thunderbolt, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_group_hold, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_energy_wave, 0, 1, 10000); } else if(gg.Rand(100) < 10) { myself.AddUseSkillDesire(c2, @s_earth_quake, 0, 1, 10000); } else { myself.AddUseSkillDesire(c2, @s_baium_normal_attack, 0, 1, 10000); } } } if(timer_id == TIMER_IDLE_COMBAT) { i0 = (myself.GetCurrentTick() - myself.i_ai2); if(i0 > (30 * 60)) { myself.MPCC_SetMasterPartyRouting(myself.int_list.Get(0), myself.sm, 0); myself.int_list.Clear(); myself.RemoveAllDesire(); myself.StopMove(); myself.SetDBValue(myself.sm, 0); myself.InstantTeleportInMyTerritory(120112, 18208, -5152, 900); gg.InstantTeleportEx(myself.sm, -105200, -253104, -15264, 0); myself.AddTimerEx(TIMER_CHECK_POS_RESET, 6000); myself.i_quest3 = 0; myself.i_ai3 = 0; myself.i_ai4 = 0; myself.sm.flag = 6; } else if(i0 > (5 * 60) && myself.sm.hp < ((myself.sm.max_hp * 3.000000) / 4.000000)) { myself.AddTimerEx(TIMER_IDLE_COMBAT, 60000); if(myself.Skill_GetConsumeMP(@s_heal_of_baium) < myself.sm.mp && myself.Skill_GetConsumeHP(@s_heal_of_baium) < myself.sm.hp && myself.Skill_InReuseDelay(@s_heal_of_baium) == 0) { myself.AddUseSkillDesire(myself.sm, @s_heal_of_baium, 1, 1, 1000000); } } else { myself.AddTimerEx(TIMER_IDLE_COMBAT, 60000); } } if(timer_id == TIMER_CHECK_DMG_SOURCE) { myself.i_ai1 = gg.FloatToInt((myself.i_ai1 * 2.730000)); i0 = (myself.i_ai0 + myself.i_ai1); if(myself.i_ai0 > myself.i_ai1) { i1 = (myself.i_ai0 - myself.i_ai1); } else { i1 = (myself.i_ai1 - myself.i_ai0); } if((i1 * 10) > (3 * i0)) { myself.sm.flag = 0; } else { myself.sm.flag = (1 + gg.Rand(4)); } i0 = ((gg.Rand(3) + 2) + (60 * 1000)); myself.AddTimerEx(TIMER_CHECK_DMG_SOURCE, 30000); myself.i_ai0 = 1; myself.i_ai1 = 1; } } }
в этом АИ нет тупой прокачки СА и так далее...
class ai_icequeen_freya_1st : default_npc
{
parameter:
float Attack_DecayRatio = 6.600000;
float UseSkill_DecayRatio = 66000.000000;
float Attack_BoostValue = 300.000000;
float UseSkill_BoostValue = 100000.000000;
int Eternal_Blizzard = 411172865;
int Eternal_Blizzard_Hard = 411238401;
int Ice_Ball = 411435009;
int Ice_Ball_Prob = 3333;
int Summon_Elemental = 411369473;
int Summon_Elemental_Prob = 800;
int Self_Nova = 411500545;
int Self_Nova_Prob = 1500;
int Death_Clack = 411566081;
int Death_Clack_Prob = 500;
int Death_Clack_Count = 2;
int Death_Clack_Count_Hard = 3;
int Freya_Anger = 411893761;
int ChangeWeapon = 15471;
int TIMER_randomize_desire = 2314101;
int TIMER_battle_check = 2314102;
int TIMER_eternal_blizzard = 2314103;
int TIMER_phase1_failed = 2314104;
int TIMER_start_moving = 2314105;
int TIMER_use_freya_buff = 2314106;
int TIMER_enable_death_clack = 2314107;
int TIMER_check_evade_speech = 2314108;
int TIMER_freya_voice_normal = 2314109;
int is_hard_mode = 0;
int Dispel_Debuff = 1;
int debug_mode = 0;
string MAKER_summoner = "schuttgart29_2314_05m1";
string MAKER_controller = "schuttgart29_2314_01m1";
string MAKER_ice_knight = "schuttgart29_2314_03m1";
handler:
EventHandler
CREATED(maker0, i0)
{
super;
if(is_hard_mode == 1)
{
if(myself.Skill_GetConsumeMP(Freya_Anger) < myself.sm.mp && myself.Skill_GetConsumeHP(Freya_Anger) < myself.sm.hp && myself.Skill_InReuseDelay(Freya_Anger) == 0)
{
myself.AddUseSkillDesire(myself.sm, Freya_Anger, 1, 1, 1000000);
}
myself.AddTimerEx(TIMER_start_moving, 3000);
}
else
{
myself.ChangeMoveType(0);
}
myself.SetMaxHateListSize(50);
myself.i_ai0 = 0;
myself.i_ai1 = 0;
myself.i_ai2 = 0;
myself.i_ai3 = 0;
myself.i_ai4 = 0;
myself.i_ai5 = 0;
myself.i_ai6 = 0;
myself.i_ai7 = 0;
myself.i_ai8 = 0;
i0 = myself.InstantZone_GetId();
maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_ice_knight);
if(gg.IsNull(maker0) == 0)
{
gg.SendMakerScriptEvent(maker0, 23140013, gg.GetIndexFromCreature(myself.sm), 0);
}
}
EventHandler
NO_DESIRE()
{
if(myself.i_ai1 == 1)
{
if((myself.GetCurrentTick() - myself.i_ai2) > 300)
{
if(debug_mode)
{
myself.Shout("전투 시작 후 긴 시간 공격받지 않아 phase1 실패처리");
}
myself.i_ai1 = 2;
myself.AddTimerEx(TIMER_phase1_failed, 1);
}
}
else if(myself.i_ai1 == 3)
{
}
}
EventHandler
DESIRE_MANIPULATION(speller, desire)
{
myself.MakeAttackEvent(speller, desire, 0);
}
EventHandler
ATTACKED(attacker, damage, c0, i0, i1, h0, maker0)
{
if(myself.sm.hp < (myself.sm.max_hp * 0.020000))
{
if(myself.i_ai6 == 0)
{
myself.i_ai6 = 1;
if(myself.i_ai1 != 2)
{
if(debug_mode)
{
myself.Shout("my_dying. phase1 성공.");
}
i0 = myself.InstantZone_GetId();
maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller);
if(gg.IsNull(maker0) == 0)
{
gg.SendMakerScriptEvent(maker0, 23140016, 1, 0);
}
myself.i_ai1 = 3;
}
myself.SetVisible(0);
myself.StopMove();
myself.RemoveAllDesire();
myself.Despawn();
}
}
else if(attacker.is_pc == 1 || myself.IsInCategory(12, attacker.class_id) == 1 || myself.IsInCategory(123, attacker.class_id) == 1)
{
myself.AddHateInfo(attacker, gg.FloatToInt(damage), 0, 1, 1);
if(myself.i_ai1 == 0 && myself.i_ai3 == 0)
{
if(debug_mode)
{
myself.Shout("first_attack");
}
myself.AddTimerEx(TIMER_start_moving, 100);
myself.i_ai1 = 1;
myself.i_ai3 = 1;
myself.AddTimerEx(TIMER_randomize_desire, (30 * 1000));
if(is_hard_mode == 1)
{
myself.AddTimerEx(TIMER_use_freya_buff, (15 * 1000));
}
i0 = myself.InstantZone_GetId();
maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller);
if(gg.IsNull(maker0) == 0)
{
gg.SendMakerScriptEvent(maker0, 23140014, 0, 0);
}
myself.BroadcastScriptEvent(23140010, gg.GetIndexFromCreature(attacker), 4000);
}
if(myself.i_ai5 == 0)
{
myself.i_ai5 = myself.GetCurrentTick();
}
myself.i_ai2 = myself.GetCurrentTick();
if(gg.Rand(100) < 50)
{
myself.BroadcastScriptEvent(23140010, gg.GetIndexFromCreature(attacker), 4000);
}
if(attacker.yongma_type == 1 && gg.GetAbnormalLevel(attacker, myself.Skill_GetAbnormalType(@s_anti_strider_slow)) <= 0)
{
if(myself.Skill_GetConsumeMP(@s_anti_strider_slow) < myself.sm.mp && myself.Skill_GetConsumeHP(@s_anti_strider_slow) < myself.sm.hp && myself.Skill_InReuseDelay(@s_anti_strider_slow) == 0)
{
myself.AddUseSkillDesire(attacker, @s_anti_strider_slow, 0, 1, 1000000);
}
}
if(myself.i_ai0 == 0)
{
if(Ice_Ball != 458752001)
{
if(gg.Rand(10000) < Ice_Ball_Prob)
{
if(myself.DistFromMe(attacker) <= 800)
{
if(myself.Skill_GetConsumeMP(Ice_Ball) < myself.sm.mp && myself.Skill_GetConsumeHP(Ice_Ball) < myself.sm.hp && myself.Skill_InReuseDelay(Ice_Ball) == 0)
{
myself.AddUseSkillDesire(attacker, Ice_Ball, 0, 0, 1000000);
}
}
}
}
if(Summon_Elemental != 458752001)
{
if(gg.Rand(10000) < Summon_Elemental_Prob)
{
if(myself.DistFromMe(attacker) <= 800)
{
if(myself.Skill_GetConsumeMP(Summon_Elemental) < myself.sm.mp && myself.Skill_GetConsumeHP(Summon_Elemental) < myself.sm.hp && myself.Skill_InReuseDelay(Summon_Elemental) == 0)
{
myself.AddUseSkillDesire(attacker, Summon_Elemental, 0, 0, 1000000);
}
myself.i_ai4 = gg.GetIndexFromCreature(attacker);
}
}
}
if(myself.DistFromMe(attacker) < 350 || (myself.GetCurrentTick() - myself.i_ai5) > (60 * 3))
{
if(myself.i_ai0 == 0)
{
myself.i_ai0 = 1;
myself.c_ai0 = attacker;
myself.AddTimerEx(TIMER_start_moving, 1);
}
}
}
else if(myself.i_ai0 == 1)
{
myself.AddAttackDesire(attacker, 1, damage);
if(Ice_Ball != 458752001)
{
if(gg.Rand(10000) < Ice_Ball_Prob)
{
if(myself.IsNullCreature(myself.top_desire_target) == 0)
{
if(gg.Rand(10000) < 5000)
{
if(myself.Skill_GetConsumeMP(Ice_Ball) < myself.sm.mp && myself.Skill_GetConsumeHP(Ice_Ball) < myself.sm.hp && myself.Skill_InReuseDelay(Ice_Ball) == 0)
{
myself.AddUseSkillDesire(attacker, Ice_Ball, 0, 1, 1000000);
}
}
else if(myself.Skill_GetConsumeMP(Ice_Ball) < myself.sm.mp && myself.Skill_GetConsumeHP(Ice_Ball) < myself.sm.hp && myself.Skill_InReuseDelay(Ice_Ball) == 0)
{
myself.AddUseSkillDesire(myself.top_desire_target, Ice_Ball, 0, 1, 1000000);
}
}
}
}
if(Summon_Elemental != 458752001)
{
if(gg.Rand(10000) < Summon_Elemental_Prob)
{
if(myself.IsNullCreature(myself.top_desire_target) == 0)
{
if(gg.Rand(10000) < 5000)
{
if(myself.Skill_GetConsumeMP(Summon_Elemental) < myself.sm.mp && myself.Skill_GetConsumeHP(Summon_Elemental) < myself.sm.hp && myself.Skill_InReuseDelay(Summon_Elemental) == 0)
{
myself.AddUseSkillDesire(attacker, Summon_Elemental, 0, 1, 1000000);
}
myself.i_ai4 = gg.GetIndexFromCreature(attacker);
}
else if(myself.Skill_GetConsumeMP(Summon_Elemental) < myself.sm.mp && myself.Skill_GetConsumeHP(Summon_Elemental) < myself.sm.hp && myself.Skill_InReuseDelay(Summon_Elemental) == 0)
{
myself.AddUseSkillDesire(myself.top_desire_target, Summon_Elemental, 0, 1, 1000000);
}
myself.i_ai4 = gg.GetIndexFromCreature(myself.top_desire_target);
}
}
}
if(Self_Nova != 458752001)
{
if(gg.Rand(10000) < Self_Nova_Prob)
{
if(myself.Skill_GetConsumeMP(Self_Nova) < myself.sm.mp && myself.Skill_GetConsumeHP(Self_Nova) < myself.sm.hp && myself.Skill_InReuseDelay(Self_Nova) == 0)
{
myself.AddUseSkillDesire(myself.sm, Self_Nova, 0, 1, 1000000);
}
}
}
if(Death_Clack != 458752001)
{
if(gg.Rand(10000) < Death_Clack_Prob)
{
if(myself.i_ai7 == 0)
{
myself.i_ai7 = 1;
myself.AddTimerEx(TIMER_enable_death_clack, (15 * 1000));
h0 = myself.GetMaxHateInfo(0);
if(myself.IsNullCreature(h0.x) == 0)
{
if(debug_mode)
{
myself.Say("죽음의 선고. " + h0.x.name);
}
myself.AddUseSkillDesire(h0.x, Death_Clack, 0, 1, 10000000);
}
if(is_hard_mode != 1)
{
i0 = Death_Clack_Count;
}
else
{
i0 = Death_Clack_Count_Hard;
}
select(i0)
{
case 2:
if(myself.GetHateInfoCount() >= 2)
{
(gg.Rand(9) + 1) = 0.GetNthHateInfo()
if(myself.IsNullHateInfo(h0) == 0)
{
if(myself.IsNullCreature(h0.x) == 0)
{
if(debug_mode)
{
myself.Say("죽음의 선고. " + h0.x.name);
}
myself.AddUseSkillDesire(h0.x, Death_Clack, 0, 1, 10000000);
}
}
}
break;
case 3:
if(myself.GetHateInfoCount() >= 3)
{
(gg.Rand(4) + 1) = 0.GetNthHateInfo()
if(myself.IsNullHateInfo(h0) == 0)
{
if(myself.IsNullCreature(h0.x) == 0)
{
if(debug_mode)
{
myself.Say("죽음의 선고. " + h0.x.name);
}
myself.AddUseSkillDesire(h0.x, Death_Clack, 0, 1, 10000000);
}
}
(gg.Rand((myself.GetHateInfoCount() - 1)) + 1) = 0.GetNthHateInfo()
if(myself.IsNullHateInfo(h0) == 0)
{
if(myself.IsNullCreature(h0.x) == 0)
{
if(debug_mode)
{
myself.Say("죽음의 선고. " + h0.x.name);
}
myself.AddUseSkillDesire(h0.x, Death_Clack, 0, 1, 10000000);
}
}
}
break;
}
}
}
}
}
}
}
EventHandler
USE_SKILL_FINISHED(target, skill_name_id, i0, maker0)
{
if(skill_name_id == Summon_Elemental)
{
i0 = myself.InstantZone_GetId();
maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_summoner);
if(gg.IsNull(maker0) == 0)
{
if(myself.IsNullCreature(target) == 0)
{
gg.SendMakerScriptEvent(maker0, 23140012, gg.GetIndexFromCreature(target), gg.GetIndexFromCreature(target));
}
}
}
else if(skill_name_id == Eternal_Blizzard || skill_name_id == Eternal_Blizzard_Hard)
{
if(debug_mode)
{
myself.Shout("Use Skill Finished - Eternal Blizzard");
}
myself.RemoveAbsoluteDesire();
if(myself.i_ai8 == 0)
{
myself.AddTimerEx(TIMER_check_evade_speech, (10 * 1000));
}
else if(gg.Rand(2) == 1)
{
if(debug_mode)
{
myself.Say("일반 대사 timer on");
}
myself.AddTimerEx(TIMER_freya_voice_normal, ((gg.Rand(15) + 10) * 1000));
}
}
}
EventHandler
CLAN_ATTACKED(attacker, victim, damage)
{
if(attacker.is_pc == 1 || myself.IsInCategory(12, attacker.class_id) == 1 || myself.IsInCategory(123, attacker.class_id) == 1)
{
myself.AddHateInfo(attacker, gg.FloatToInt(damage), 0, 1, 1);
if(myself.i_ai0 == 0)
{
if(gg.Rand(10000) < 500)
{
if(myself.DistFromMe(attacker) <= 800)
{
if(Ice_Ball != 458752001)
{
if(myself.Skill_GetConsumeMP(Ice_Ball) < myself.sm.mp && myself.Skill_GetConsumeHP(Ice_Ball) < myself.sm.hp && myself.Skill_InReuseDelay(Ice_Ball) == 0)
{
myself.AddUseSkillDesire(attacker, Ice_Ball, 0, 0, 1000000);
}
}
}
}
if(gg.Rand(10000) < 500)
{
if(myself.DistFromMe(attacker) <= 800)
{
if(Summon_Elemental != 458752001)
{
if(myself.Skill_GetConsumeMP(Summon_Elemental) < myself.sm.mp && myself.Skill_GetConsumeHP(Summon_Elemental) < myself.sm.hp && myself.Skill_InReuseDelay(Summon_Elemental) == 0)
{
myself.AddUseSkillDesire(attacker, Summon_Elemental, 0, 1, 1000000);
}
myself.i_ai4 = gg.GetIndexFromCreature(attacker);
}
}
}
}
}
}
EventHandler
SEE_CREATURE(creature)
{
if(myself.i_ai0 == 1)
{
if(creature.is_pc == 0 && myself.IsInCategory(12, creature.class_id) == 0)
{
return;
}
}
if(creature.is_pc == 1 || myself.IsInCategory(12, creature.class_id) == 1 || myself.IsInCategory(123, creature.class_id) == 1)
{
myself.AddHateInfo(creature, 100, 0, 1, 1);
myself.MakeAttackEvent(creature, 200, 0);
}
}
EventHandler
SEE_SPELL(speller)
{
if(speller.is_pc == 1 || myself.IsInCategory(12, speller.class_id) == 1 || myself.IsInCategory(123, speller.class_id))
{
myself.AddHateInfo(speller, 50, 0, 1, 1);
}
}
EventHandler
SCRIPT_EVENT(script_event_arg1, script_event_arg2, i0, c0, h0)
{
if(script_event_arg1 == 23140044)
{
myself.AddTimerEx(TIMER_start_moving, 1);
}
else if(script_event_arg1 == 23140046)
{
c0 = gg.GetCreatureFromIndex(script_event_arg2);
if(myself.IsNullCreature(c0) == 0)
{
h0 = myself.GetMaxHateInfo(0);
if(myself.IsNullHateInfo(h0) == 0)
{
if(myself.IsNullCreature(h0.x) == 0)
{
gg.SendScriptEvent(c0, 23140047, gg.GetIndexFromCreature(h0.x));
}
}
}
}
else if(script_event_arg1 == 23140020)
{
myself.Despawn();
}
}
EventHandler
TIMER_FIRED_EX(timer_id, i0, i1, i2, maker0, h0)
{
super;
if(timer_id == TIMER_randomize_desire)
{
if(gg.Rand(2) == 1)
{
myself.RandomizeAttackDesire();
}
myself.AddTimerEx(TIMER_randomize_desire, (30 * 1000));
}
if(timer_id == TIMER_eternal_blizzard)
{
i0 = myself.InstantZone_GetId();
maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller);
if(gg.IsNull(maker0) == 0)
{
gg.SendMakerScriptEvent(maker0, 23140070, 0, 0);
gg.SendMakerScriptEvent(maker0, 23140067, 0, 0);
}
if(is_hard_mode == 1)
{
if(debug_mode)
{
myself.Say("하드모드 타이머");
}
myself.AddUseSkillDesire(myself.sm, Eternal_Blizzard_Hard, 0, 1, -1);
myself.AddTimerEx(TIMER_eternal_blizzard, ((gg.Rand(5) + 40) * 1000));
}
else if(debug_mode)
{
myself.Say("일반모드 타이머");
}
myself.AddUseSkillDesire(myself.sm, Eternal_Blizzard, 0, 1, -1);
myself.AddTimerEx(TIMER_eternal_blizzard, ((gg.Rand(5) + 55) * 1000));
}
if(timer_id == TIMER_phase1_failed)
{
if(debug_mode)
{
myself.Shout("phase1 실패.");
}
i0 = myself.InstantZone_GetId();
maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller);
if(gg.IsNull(maker0) == 0)
{
gg.SendMakerScriptEvent(maker0, 23140016, 2, 0);
}
myself.sm.absolute_defence = 1;
myself.sm.no_attack_damage = 1;
}
if(timer_id == TIMER_start_moving)
{
if(myself.i_ai0 == 0)
{
myself.RemoveAllDesire();
if(myself.IsNullCreature(myself.c_ai0) == 0)
{
myself.AddAttackDesire(myself.c_ai0, 1, 1000);
}
myself.AddMoveToDesire(114730, -114805, -11200, 50);
myself.i_ai0 = 1;
myself.AddTimerEx(TIMER_eternal_blizzard, (60 * 1000));
gg.BroadcastOnScreenMsgStr(myself.sm, 4000, 5, 1, 0, 0, 0, 1, 5000, 0, gg.MakeFString(1801097, "", "", "", "", ""));
}
}
if(timer_id == TIMER_use_freya_buff)
{
myself.BroadcastScriptEvent(23140062, 0, 1000);
myself.AddTimerEx(TIMER_use_freya_buff, (15 * 1000));
}
if(timer_id == TIMER_enable_death_clack)
{
myself.i_ai7 = 0;
}
if(timer_id == TIMER_check_evade_speech)
{
if(myself.i_ai8 == 0)
{
h0 = myself.GetMaxHateInfo(0);
if(myself.IsNullHateInfo(h0) == 0)
{
if(myself.IsNullCreature(h0.x) == 0)
{
if(gg.GetAbnormalLevel(h0.x, myself.Skill_GetAbnormalType(@s_freya_pillar_of_frozen1)) != 2)
{
if(debug_mode)
{
myself.Say("이터널 블리자드 회피!");
}
myself.i_ai8 = 1;
i0 = myself.InstantZone_GetId();
maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller);
if(gg.IsNull(maker0) == 0)
{
gg.SendMakerScriptEvent(maker0, 23140066, 0, 0);
}
}
else if(debug_mode)
{
myself.Say("이터널 블리자드 강타!");
}
}
}
}
}
if(timer_id == TIMER_freya_voice_normal)
{
i0 = myself.InstantZone_GetId();
maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller);
if(gg.IsNull(maker0) == 0)
{
gg.SendMakerScriptEvent(maker0, 23140068, 0, 0);
}
}
}
EventHandler
MY_DYING(i0, i1, c0, c1, maker0, i2, c2)
{
if(myself.i_ai1 != 2)
{
if(debug_mode)
{
myself.Shout("my_dying. phase1 성공.");
}
i0 = myself.InstantZone_GetId();
maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller);
if(gg.IsNull(maker0) == 0)
{
gg.SendMakerScriptEvent(maker0, 23140016, 1, 0);
}
myself.i_ai1 = 3;
}
}
EventHandler
DEBUG_AI(creature, reply)
{
if(reply == 1)
{
if(debug_mode)
{
myself.Say("1 : 패배");
myself.AddTimerEx(TIMER_phase1_failed, 1000);
}
}
}
}
Ну да оправдывайся теперь, а теперь глянь в свой скрипт бая и помолчи...ознакомился, для примера был выбран самый "потяжелее" AI xD чтобы как-то оправдывать бесполезность остальной массы файлов?
В нем описаны элементарные вещи и общие принципы, которые давно известны, а также указатели на информацию, которая не имеет конечных понятных значений.
например таймеры пробуждения/слипа и т.п.
int TIMER_INTRO_STANBY = 2001;
int TIMER_IDLE_COMBAT = 2002;
int TIMER_CHECK_DMG_SOURCE = 2003;
int TIMER_CHECK_POS_RESET = 9989;
что тут удивительного по скилам? использования скилов взависимости от кол-ва хп босса?
else if(myself.sm.hp > ((myself.sm.max_hp * 1.000000) / 4.000000))
{
if(gg.Rand(100) < 10)
{
myself.AddUseSkillDesire(c2, @s_thunderbolt, 0, 1, 10000);
}
Весомость твоих аргументов стала таять на глазах, и чтобы её как-то компенсировать в ход пошли примитивные саркастические уколы?)Также если мало доказательств "Гуру", который помогает корейцам писать скрипты и ему не нужен офф источник...
Вот скрипт 1 стадии фреи.
Код:class ai_icequeen_freya_1st : default_npc { parameter: float Attack_DecayRatio = 6.600000; float UseSkill_DecayRatio = 66000.000000; float Attack_BoostValue = 300.000000; float UseSkill_BoostValue = 100000.000000; int Eternal_Blizzard = 411172865; int Eternal_Blizzard_Hard = 411238401; int Ice_Ball = 411435009; int Ice_Ball_Prob = 3333; int Summon_Elemental = 411369473; int Summon_Elemental_Prob = 800; int Self_Nova = 411500545; int Self_Nova_Prob = 1500; int Death_Clack = 411566081; int Death_Clack_Prob = 500; int Death_Clack_Count = 2; int Death_Clack_Count_Hard = 3; int Freya_Anger = 411893761; int ChangeWeapon = 15471; int TIMER_randomize_desire = 2314101; int TIMER_battle_check = 2314102; int TIMER_eternal_blizzard = 2314103; int TIMER_phase1_failed = 2314104; int TIMER_start_moving = 2314105; int TIMER_use_freya_buff = 2314106; int TIMER_enable_death_clack = 2314107; int TIMER_check_evade_speech = 2314108; int TIMER_freya_voice_normal = 2314109; int is_hard_mode = 0; int Dispel_Debuff = 1; int debug_mode = 0; string MAKER_summoner = "schuttgart29_2314_05m1"; string MAKER_controller = "schuttgart29_2314_01m1"; string MAKER_ice_knight = "schuttgart29_2314_03m1"; handler: EventHandler CREATED(maker0, i0) { super; if(is_hard_mode == 1) { if(myself.Skill_GetConsumeMP(Freya_Anger) < myself.sm.mp && myself.Skill_GetConsumeHP(Freya_Anger) < myself.sm.hp && myself.Skill_InReuseDelay(Freya_Anger) == 0) { myself.AddUseSkillDesire(myself.sm, Freya_Anger, 1, 1, 1000000); } myself.AddTimerEx(TIMER_start_moving, 3000); } else { myself.ChangeMoveType(0); } myself.SetMaxHateListSize(50); myself.i_ai0 = 0; myself.i_ai1 = 0; myself.i_ai2 = 0; myself.i_ai3 = 0; myself.i_ai4 = 0; myself.i_ai5 = 0; myself.i_ai6 = 0; myself.i_ai7 = 0; myself.i_ai8 = 0; i0 = myself.InstantZone_GetId(); maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_ice_knight); if(gg.IsNull(maker0) == 0) { gg.SendMakerScriptEvent(maker0, 23140013, gg.GetIndexFromCreature(myself.sm), 0); } } EventHandler NO_DESIRE() { if(myself.i_ai1 == 1) { if((myself.GetCurrentTick() - myself.i_ai2) > 300) { if(debug_mode) { myself.Shout("전투 시작 후 긴 시간 공격받지 않아 phase1 실패처리"); } myself.i_ai1 = 2; myself.AddTimerEx(TIMER_phase1_failed, 1); } } else if(myself.i_ai1 == 3) { } } EventHandler DESIRE_MANIPULATION(speller, desire) { myself.MakeAttackEvent(speller, desire, 0); } EventHandler ATTACKED(attacker, damage, c0, i0, i1, h0, maker0) { if(myself.sm.hp < (myself.sm.max_hp * 0.020000)) { if(myself.i_ai6 == 0) { myself.i_ai6 = 1; if(myself.i_ai1 != 2) { if(debug_mode) { myself.Shout("my_dying. phase1 성공."); } i0 = myself.InstantZone_GetId(); maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller); if(gg.IsNull(maker0) == 0) { gg.SendMakerScriptEvent(maker0, 23140016, 1, 0); } myself.i_ai1 = 3; } myself.SetVisible(0); myself.StopMove(); myself.RemoveAllDesire(); myself.Despawn(); } } else if(attacker.is_pc == 1 || myself.IsInCategory(12, attacker.class_id) == 1 || myself.IsInCategory(123, attacker.class_id) == 1) { myself.AddHateInfo(attacker, gg.FloatToInt(damage), 0, 1, 1); if(myself.i_ai1 == 0 && myself.i_ai3 == 0) { if(debug_mode) { myself.Shout("first_attack"); } myself.AddTimerEx(TIMER_start_moving, 100); myself.i_ai1 = 1; myself.i_ai3 = 1; myself.AddTimerEx(TIMER_randomize_desire, (30 * 1000)); if(is_hard_mode == 1) { myself.AddTimerEx(TIMER_use_freya_buff, (15 * 1000)); } i0 = myself.InstantZone_GetId(); maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller); if(gg.IsNull(maker0) == 0) { gg.SendMakerScriptEvent(maker0, 23140014, 0, 0); } myself.BroadcastScriptEvent(23140010, gg.GetIndexFromCreature(attacker), 4000); } if(myself.i_ai5 == 0) { myself.i_ai5 = myself.GetCurrentTick(); } myself.i_ai2 = myself.GetCurrentTick(); if(gg.Rand(100) < 50) { myself.BroadcastScriptEvent(23140010, gg.GetIndexFromCreature(attacker), 4000); } if(attacker.yongma_type == 1 && gg.GetAbnormalLevel(attacker, myself.Skill_GetAbnormalType(@s_anti_strider_slow)) <= 0) { if(myself.Skill_GetConsumeMP(@s_anti_strider_slow) < myself.sm.mp && myself.Skill_GetConsumeHP(@s_anti_strider_slow) < myself.sm.hp && myself.Skill_InReuseDelay(@s_anti_strider_slow) == 0) { myself.AddUseSkillDesire(attacker, @s_anti_strider_slow, 0, 1, 1000000); } } if(myself.i_ai0 == 0) { if(Ice_Ball != 458752001) { if(gg.Rand(10000) < Ice_Ball_Prob) { if(myself.DistFromMe(attacker) <= 800) { if(myself.Skill_GetConsumeMP(Ice_Ball) < myself.sm.mp && myself.Skill_GetConsumeHP(Ice_Ball) < myself.sm.hp && myself.Skill_InReuseDelay(Ice_Ball) == 0) { myself.AddUseSkillDesire(attacker, Ice_Ball, 0, 0, 1000000); } } } } if(Summon_Elemental != 458752001) { if(gg.Rand(10000) < Summon_Elemental_Prob) { if(myself.DistFromMe(attacker) <= 800) { if(myself.Skill_GetConsumeMP(Summon_Elemental) < myself.sm.mp && myself.Skill_GetConsumeHP(Summon_Elemental) < myself.sm.hp && myself.Skill_InReuseDelay(Summon_Elemental) == 0) { myself.AddUseSkillDesire(attacker, Summon_Elemental, 0, 0, 1000000); } myself.i_ai4 = gg.GetIndexFromCreature(attacker); } } } if(myself.DistFromMe(attacker) < 350 || (myself.GetCurrentTick() - myself.i_ai5) > (60 * 3)) { if(myself.i_ai0 == 0) { myself.i_ai0 = 1; myself.c_ai0 = attacker; myself.AddTimerEx(TIMER_start_moving, 1); } } } else if(myself.i_ai0 == 1) { myself.AddAttackDesire(attacker, 1, damage); if(Ice_Ball != 458752001) { if(gg.Rand(10000) < Ice_Ball_Prob) { if(myself.IsNullCreature(myself.top_desire_target) == 0) { if(gg.Rand(10000) < 5000) { if(myself.Skill_GetConsumeMP(Ice_Ball) < myself.sm.mp && myself.Skill_GetConsumeHP(Ice_Ball) < myself.sm.hp && myself.Skill_InReuseDelay(Ice_Ball) == 0) { myself.AddUseSkillDesire(attacker, Ice_Ball, 0, 1, 1000000); } } else if(myself.Skill_GetConsumeMP(Ice_Ball) < myself.sm.mp && myself.Skill_GetConsumeHP(Ice_Ball) < myself.sm.hp && myself.Skill_InReuseDelay(Ice_Ball) == 0) { myself.AddUseSkillDesire(myself.top_desire_target, Ice_Ball, 0, 1, 1000000); } } } } if(Summon_Elemental != 458752001) { if(gg.Rand(10000) < Summon_Elemental_Prob) { if(myself.IsNullCreature(myself.top_desire_target) == 0) { if(gg.Rand(10000) < 5000) { if(myself.Skill_GetConsumeMP(Summon_Elemental) < myself.sm.mp && myself.Skill_GetConsumeHP(Summon_Elemental) < myself.sm.hp && myself.Skill_InReuseDelay(Summon_Elemental) == 0) { myself.AddUseSkillDesire(attacker, Summon_Elemental, 0, 1, 1000000); } myself.i_ai4 = gg.GetIndexFromCreature(attacker); } else if(myself.Skill_GetConsumeMP(Summon_Elemental) < myself.sm.mp && myself.Skill_GetConsumeHP(Summon_Elemental) < myself.sm.hp && myself.Skill_InReuseDelay(Summon_Elemental) == 0) { myself.AddUseSkillDesire(myself.top_desire_target, Summon_Elemental, 0, 1, 1000000); } myself.i_ai4 = gg.GetIndexFromCreature(myself.top_desire_target); } } } if(Self_Nova != 458752001) { if(gg.Rand(10000) < Self_Nova_Prob) { if(myself.Skill_GetConsumeMP(Self_Nova) < myself.sm.mp && myself.Skill_GetConsumeHP(Self_Nova) < myself.sm.hp && myself.Skill_InReuseDelay(Self_Nova) == 0) { myself.AddUseSkillDesire(myself.sm, Self_Nova, 0, 1, 1000000); } } } if(Death_Clack != 458752001) { if(gg.Rand(10000) < Death_Clack_Prob) { if(myself.i_ai7 == 0) { myself.i_ai7 = 1; myself.AddTimerEx(TIMER_enable_death_clack, (15 * 1000)); h0 = myself.GetMaxHateInfo(0); if(myself.IsNullCreature(h0.x) == 0) { if(debug_mode) { myself.Say("죽음의 선고. " + h0.x.name); } myself.AddUseSkillDesire(h0.x, Death_Clack, 0, 1, 10000000); } if(is_hard_mode != 1) { i0 = Death_Clack_Count; } else { i0 = Death_Clack_Count_Hard; } select(i0) { case 2: if(myself.GetHateInfoCount() >= 2) { (gg.Rand(9) + 1) = 0.GetNthHateInfo() if(myself.IsNullHateInfo(h0) == 0) { if(myself.IsNullCreature(h0.x) == 0) { if(debug_mode) { myself.Say("죽음의 선고. " + h0.x.name); } myself.AddUseSkillDesire(h0.x, Death_Clack, 0, 1, 10000000); } } } break; case 3: if(myself.GetHateInfoCount() >= 3) { (gg.Rand(4) + 1) = 0.GetNthHateInfo() if(myself.IsNullHateInfo(h0) == 0) { if(myself.IsNullCreature(h0.x) == 0) { if(debug_mode) { myself.Say("죽음의 선고. " + h0.x.name); } myself.AddUseSkillDesire(h0.x, Death_Clack, 0, 1, 10000000); } } (gg.Rand((myself.GetHateInfoCount() - 1)) + 1) = 0.GetNthHateInfo() if(myself.IsNullHateInfo(h0) == 0) { if(myself.IsNullCreature(h0.x) == 0) { if(debug_mode) { myself.Say("죽음의 선고. " + h0.x.name); } myself.AddUseSkillDesire(h0.x, Death_Clack, 0, 1, 10000000); } } } break; } } } } } } } EventHandler USE_SKILL_FINISHED(target, skill_name_id, i0, maker0) { if(skill_name_id == Summon_Elemental) { i0 = myself.InstantZone_GetId(); maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_summoner); if(gg.IsNull(maker0) == 0) { if(myself.IsNullCreature(target) == 0) { gg.SendMakerScriptEvent(maker0, 23140012, gg.GetIndexFromCreature(target), gg.GetIndexFromCreature(target)); } } } else if(skill_name_id == Eternal_Blizzard || skill_name_id == Eternal_Blizzard_Hard) { if(debug_mode) { myself.Shout("Use Skill Finished - Eternal Blizzard"); } myself.RemoveAbsoluteDesire(); if(myself.i_ai8 == 0) { myself.AddTimerEx(TIMER_check_evade_speech, (10 * 1000)); } else if(gg.Rand(2) == 1) { if(debug_mode) { myself.Say("일반 대사 timer on"); } myself.AddTimerEx(TIMER_freya_voice_normal, ((gg.Rand(15) + 10) * 1000)); } } } EventHandler CLAN_ATTACKED(attacker, victim, damage) { if(attacker.is_pc == 1 || myself.IsInCategory(12, attacker.class_id) == 1 || myself.IsInCategory(123, attacker.class_id) == 1) { myself.AddHateInfo(attacker, gg.FloatToInt(damage), 0, 1, 1); if(myself.i_ai0 == 0) { if(gg.Rand(10000) < 500) { if(myself.DistFromMe(attacker) <= 800) { if(Ice_Ball != 458752001) { if(myself.Skill_GetConsumeMP(Ice_Ball) < myself.sm.mp && myself.Skill_GetConsumeHP(Ice_Ball) < myself.sm.hp && myself.Skill_InReuseDelay(Ice_Ball) == 0) { myself.AddUseSkillDesire(attacker, Ice_Ball, 0, 0, 1000000); } } } } if(gg.Rand(10000) < 500) { if(myself.DistFromMe(attacker) <= 800) { if(Summon_Elemental != 458752001) { if(myself.Skill_GetConsumeMP(Summon_Elemental) < myself.sm.mp && myself.Skill_GetConsumeHP(Summon_Elemental) < myself.sm.hp && myself.Skill_InReuseDelay(Summon_Elemental) == 0) { myself.AddUseSkillDesire(attacker, Summon_Elemental, 0, 1, 1000000); } myself.i_ai4 = gg.GetIndexFromCreature(attacker); } } } } } } EventHandler SEE_CREATURE(creature) { if(myself.i_ai0 == 1) { if(creature.is_pc == 0 && myself.IsInCategory(12, creature.class_id) == 0) { return; } } if(creature.is_pc == 1 || myself.IsInCategory(12, creature.class_id) == 1 || myself.IsInCategory(123, creature.class_id) == 1) { myself.AddHateInfo(creature, 100, 0, 1, 1); myself.MakeAttackEvent(creature, 200, 0); } } EventHandler SEE_SPELL(speller) { if(speller.is_pc == 1 || myself.IsInCategory(12, speller.class_id) == 1 || myself.IsInCategory(123, speller.class_id)) { myself.AddHateInfo(speller, 50, 0, 1, 1); } } EventHandler SCRIPT_EVENT(script_event_arg1, script_event_arg2, i0, c0, h0) { if(script_event_arg1 == 23140044) { myself.AddTimerEx(TIMER_start_moving, 1); } else if(script_event_arg1 == 23140046) { c0 = gg.GetCreatureFromIndex(script_event_arg2); if(myself.IsNullCreature(c0) == 0) { h0 = myself.GetMaxHateInfo(0); if(myself.IsNullHateInfo(h0) == 0) { if(myself.IsNullCreature(h0.x) == 0) { gg.SendScriptEvent(c0, 23140047, gg.GetIndexFromCreature(h0.x)); } } } } else if(script_event_arg1 == 23140020) { myself.Despawn(); } } EventHandler TIMER_FIRED_EX(timer_id, i0, i1, i2, maker0, h0) { super; if(timer_id == TIMER_randomize_desire) { if(gg.Rand(2) == 1) { myself.RandomizeAttackDesire(); } myself.AddTimerEx(TIMER_randomize_desire, (30 * 1000)); } if(timer_id == TIMER_eternal_blizzard) { i0 = myself.InstantZone_GetId(); maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller); if(gg.IsNull(maker0) == 0) { gg.SendMakerScriptEvent(maker0, 23140070, 0, 0); gg.SendMakerScriptEvent(maker0, 23140067, 0, 0); } if(is_hard_mode == 1) { if(debug_mode) { myself.Say("하드모드 타이머"); } myself.AddUseSkillDesire(myself.sm, Eternal_Blizzard_Hard, 0, 1, -1); myself.AddTimerEx(TIMER_eternal_blizzard, ((gg.Rand(5) + 40) * 1000)); } else if(debug_mode) { myself.Say("일반모드 타이머"); } myself.AddUseSkillDesire(myself.sm, Eternal_Blizzard, 0, 1, -1); myself.AddTimerEx(TIMER_eternal_blizzard, ((gg.Rand(5) + 55) * 1000)); } if(timer_id == TIMER_phase1_failed) { if(debug_mode) { myself.Shout("phase1 실패."); } i0 = myself.InstantZone_GetId(); maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller); if(gg.IsNull(maker0) == 0) { gg.SendMakerScriptEvent(maker0, 23140016, 2, 0); } myself.sm.absolute_defence = 1; myself.sm.no_attack_damage = 1; } if(timer_id == TIMER_start_moving) { if(myself.i_ai0 == 0) { myself.RemoveAllDesire(); if(myself.IsNullCreature(myself.c_ai0) == 0) { myself.AddAttackDesire(myself.c_ai0, 1, 1000); } myself.AddMoveToDesire(114730, -114805, -11200, 50); myself.i_ai0 = 1; myself.AddTimerEx(TIMER_eternal_blizzard, (60 * 1000)); gg.BroadcastOnScreenMsgStr(myself.sm, 4000, 5, 1, 0, 0, 0, 1, 5000, 0, gg.MakeFString(1801097, "", "", "", "", "")); } } if(timer_id == TIMER_use_freya_buff) { myself.BroadcastScriptEvent(23140062, 0, 1000); myself.AddTimerEx(TIMER_use_freya_buff, (15 * 1000)); } if(timer_id == TIMER_enable_death_clack) { myself.i_ai7 = 0; } if(timer_id == TIMER_check_evade_speech) { if(myself.i_ai8 == 0) { h0 = myself.GetMaxHateInfo(0); if(myself.IsNullHateInfo(h0) == 0) { if(myself.IsNullCreature(h0.x) == 0) { if(gg.GetAbnormalLevel(h0.x, myself.Skill_GetAbnormalType(@s_freya_pillar_of_frozen1)) != 2) { if(debug_mode) { myself.Say("이터널 블리자드 회피!"); } myself.i_ai8 = 1; i0 = myself.InstantZone_GetId(); maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller); if(gg.IsNull(maker0) == 0) { gg.SendMakerScriptEvent(maker0, 23140066, 0, 0); } } else if(debug_mode) { myself.Say("이터널 블리자드 강타!"); } } } } } if(timer_id == TIMER_freya_voice_normal) { i0 = myself.InstantZone_GetId(); maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller); if(gg.IsNull(maker0) == 0) { gg.SendMakerScriptEvent(maker0, 23140068, 0, 0); } } } EventHandler MY_DYING(i0, i1, c0, c1, maker0, i2, c2) { if(myself.i_ai1 != 2) { if(debug_mode) { myself.Shout("my_dying. phase1 성공."); } i0 = myself.InstantZone_GetId(); maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller); if(gg.IsNull(maker0) == 0) { gg.SendMakerScriptEvent(maker0, 23140016, 1, 0); } myself.i_ai1 = 3; } } EventHandler DEBUG_AI(creature, reply) { if(reply == 1) { if(debug_mode) { myself.Say("1 : 패배"); myself.AddTimerEx(TIMER_phase1_failed, 1000); } } } }
Мне перед тобой не нужно оправдаваться нон, то что у меня - мне известно, в твоей колхозной оценке это не нуждается. ДНу да оправдывайся теперь, а теперь глянь в свой скрипт бая и помолчи...
П.С. Уважаемый, вы же выпилились с данного форума... Или вам просто деваться уже некуда, с вашим характером, вас уже везде забанили...
Давай лучше расмотрим полезность остальных 95% файлов
Весомость твоих аргументов стала таять на глазах, и чтобы её как-то компенсировать в ход пошли примитивные саркастические уколы?)
А давай посмотрим также на остальные 95% файлов и определим их степень полезности, которые имеют примерны вид:
//***********************************************************************
//*| SauDecompiler | Ported to С# CjlaBuK, Keeper | Design Rage | ©2012*
//***********************************************************************
class a_o_g_fort_doorman_a : fortress_doorkeeper
{
}
Да мне известно и про родителей и про бабушек, и про наследство, но их тут нет в твоем паке. А следовательно никакой информации из этого не извлеч. А то что тут видно - уже давно известно и давно реализовано. Отсюда вывод - полезность данной информации чуть меньше чем 0.Вам видимо не известно что такое наследование.... Корейцы такой народ что каждому НПЦ делают свой АИ, пусть в нем не будет смысловой нагрузки, вся механика данного НПЦ описана в классе fortress_doorkeeper или его родителе.
Видимо вы слепой...Да мне известно и про родителей и про бабушек, но их тут нет в твоем паке. А следовательно никакой информации из этого не извлеч. А то что тут видно - уже давно известно и давно реализовано. Отсюда вывод - полезность данной информации чуть меньше чем 0.
class fortress_doorkeeper : doorkeeper
{
parameter:
string DoorName3 = "";
string DoorName4 = "";
int dominion_id = 81;
handler:
EventHandler
TALKED(talker)
{
if(myself.IsMyLord(talker) || (myself.HavePledgePower(talker, 16) && myself.Castle_GetPledgeId() == talker.pledge_id && talker.pledge_id != 0))
{
if(myself.Castle_IsUnderSiege() || gg.GetDominionWarState(dominion_id) == 5)
{
myself.ShowPage(talker, fnUnderSiege);
}
else
{
myself.ShowPage(talker, fnHi);
}
}
else
{
myself.ShowPage(talker, fnNotMyLord);
}
}
EventHandler
MENU_SELECTED(talker, ask, reply, fhtml0)
{
if(ask == -201)
{
if(myself.IsMyLord(talker) || (myself.HavePledgePower(talker, 16) && myself.Castle_GetPledgeId() == talker.pledge_id && talker.pledge_id != 0))
{
if(myself.Castle_IsUnderSiege() || gg.GetDominionWarState(dominion_id) == 5)
{
myself.ShowPage(talker, fnUnderSiege);
}
else
{
select(reply)
{
case 1:
gg.Castle_GateOpenClose2(DoorName1, 0);
gg.Castle_GateOpenClose2(DoorName2, 0);
if(myself.IsNullString(DoorName3) == 0)
{
gg.Castle_GateOpenClose2(DoorName3, 0);
}
if(myself.IsNullString(DoorName4) == 0)
{
gg.Castle_GateOpenClose2(DoorName4, 0);
}
break;
case 2:
gg.Castle_GateOpenClose2(DoorName1, 1);
gg.Castle_GateOpenClose2(DoorName2, 1);
if(myself.IsNullString(DoorName3) == 0)
{
gg.Castle_GateOpenClose2(DoorName3, 1);
}
if(myself.IsNullString(DoorName4) == 0)
{
gg.Castle_GateOpenClose2(DoorName4, 1);
}
break;
}
}
}
else
{
myself.ShowPage(talker, fnNotMyLord);
}
}
if(ask == -202)
{
if(myself.IsMyLord(talker) || myself.Castle_GetPledgeState(talker) == 2 || (myself.HavePledgePower(talker, 16) && myself.Castle_GetPledgeId() == talker.pledge_id && talker.pledge_id != 0))
{
select(reply)
{
case 1:
myself.InstantTeleport(talker, pos_x01, pos_y01, pos_z01);
break;
case 2:
myself.InstantTeleport(talker, pos_x02, pos_y02, pos_z02);
break;
}
}
else
{
myself.ShowPage(talker, fnNotMyLord);
}
}
}
}
class doorkeeper : citizen
{
parameter:
string DoorName1 = "";
string DoorName2 = "";
string fnHi = "gludio_outter_doorman001.htm";
string fnNotMyLord = "gludio_outter_doorman002.htm";
string fnUnderSiege = "gludio_outter_doorman003.htm";
int pos_x01 = 1;
int pos_y01 = 1;
int pos_z01 = 1;
int pos_x02 = 1;
int pos_y02 = 1;
int pos_z02 = 1;
int dominion_id = 81;
handler:
EventHandler
TALKED(talker)
{
if(myself.IsMyLord(talker) || (myself.HavePledgePower(talker, 16) && myself.Castle_GetPledgeId() == talker.pledge_id && talker.pledge_id != 0))
{
if(myself.Castle_IsUnderSiege() || gg.GetDominionWarState(dominion_id) == 5)
{
if(myself.IsMyLord(talker) || myself.Castle_GetPledgeState(talker) == 2 || (myself.Castle_GetPledgeId() == talker.pledge_id && talker.pledge_id != 0))
{
myself.ShowPage(talker, fnHi);
}
else
{
myself.ShowPage(talker, fnUnderSiege);
}
}
else
{
myself.ShowPage(talker, fnHi);
}
}
else
{
myself.ShowPage(talker, fnNotMyLord);
}
}
EventHandler
MENU_SELECTED(talker, ask, reply, fhtml0)
{
if(ask == -201)
{
if(myself.IsMyLord(talker) || (myself.HavePledgePower(talker, 16) && myself.Castle_GetPledgeId() == talker.pledge_id && talker.pledge_id != 0))
{
if(myself.Castle_IsUnderSiege() || gg.GetDominionWarState(dominion_id) == 5)
{
myself.ShowPage(talker, fnUnderSiege);
}
else
{
select(reply)
{
case 1:
gg.Castle_GateOpenClose2(DoorName1, 0);
gg.Castle_GateOpenClose2(DoorName2, 0);
break;
case 2:
gg.Castle_GateOpenClose2(DoorName1, 1);
gg.Castle_GateOpenClose2(DoorName2, 1);
break;
}
}
}
else
{
myself.ShowPage(talker, fnNotMyLord);
}
}
if(ask == -202)
{
if(myself.IsMyLord(talker) || myself.Castle_GetPledgeState(talker) == 2 || (myself.HavePledgePower(talker, 16) && myself.Castle_GetPledgeId() == talker.pledge_id && talker.pledge_id != 0))
{
select(reply)
{
case 1:
myself.InstantTeleport(talker, pos_x01, pos_y01, pos_z01);
break;
case 2:
myself.InstantTeleport(talker, pos_x02, pos_y02, pos_z02);
break;
}
}
else
{
myself.ShowPage(talker, fnNotMyLord);
}
}
}
}
class citizen : default_npc
{
parameter:
string fnHi = "chi.htm";
string fnFeudInfo = "defaultfeudinfo.htm";
string fnNoFeudInfo = "nofeudinfo.htm";
string fnBracketL = "[";
string fnBracketR = "]";
string fnFlagMan = "flagman.htm";
int MoveAroundSocial = 0;
int MoveAroundSocial1 = 0;
string ai_type = "pet_around_pet_manager";
int HavePet = 0;
int silhouette = 1020130;
int FriendShip1 = 0;
int FriendShip2 = 0;
int FriendShip3 = 0;
int FriendShip4 = 0;
int FriendShip5 = 0;
string fnNoFriend = "citizen_html";
int NoFnHi = 0;
handler:
EventHandler
TALKED(talker)
{
if(NoFnHi == 1)
{
return;
}
if(FriendShip1 == 0)
{
myself.ShowPage(talker, fnHi);
}
else if(gg.OwnItemCount(talker, @gludio_feud_flag) > 0 || gg.OwnItemCount(talker, @dion_feud_flag) > 0 || gg.OwnItemCount(talker, @giran_feud_flag) > 0 || gg.OwnItemCount(talker, @oren_feud_flag) > 0 || gg.OwnItemCount(talker, @aden_feud_flag) > 0 || gg.OwnItemCount(talker, @innadrille_feud_flag) > 0 || gg.OwnItemCount(talker, @godad_feud_flag) > 0 || gg.OwnItemCount(talker, @rune_feud_flag) > 0 || gg.OwnItemCount(talker, @schuttgart_feud_flag) > 0)
{
myself.ShowPage(talker, fnFlagMan);
}
else if(gg.OwnItemCount(talker, FriendShip1) > 0 || gg.OwnItemCount(talker, FriendShip2) > 0 || gg.OwnItemCount(talker, FriendShip3) > 0 || gg.OwnItemCount(talker, FriendShip4) > 0 || gg.OwnItemCount(talker, FriendShip5) > 0)
{
myself.ShowPage(talker, fnHi);
}
else
{
myself.ShowPage(talker, fnNoFriend);
}
}
EventHandler
CREATED()
{
if(MoveAroundSocial > 0 || MoveAroundSocial1 > 0)
{
myself.AddTimerEx(1671, 10000);
}
if(HavePet == 1)
{
}
super;
}
EventHandler
TIMER_FIRED_EX(timer_id)
{
if(timer_id == 1671)
{
if(myself.sm.hp > (myself.sm.max_hp * 0.400000) && myself.sm.alive != 0 && myself.p_state != 3)
{
if(MoveAroundSocial > 0 || MoveAroundSocial1 > 0)
{
if(MoveAroundSocial > 0 && gg.Rand(100) < 40)
{
myself.AddEffectActionDesire(myself.sm, 3, ((MoveAroundSocial * 1000) / 30), 50);
}
else if(MoveAroundSocial1 > 0 && gg.Rand(100) < 40)
{
myself.AddEffectActionDesire(myself.sm, 2, ((MoveAroundSocial1 * 1000) / 30), 50);
}
}
}
myself.AddTimerEx(1671, 10000);
}
super;
}
EventHandler
MENU_SELECTED(talker, ask, reply, fhtml0)
{
if(ask == -1000)
{
select(reply)
{
case 0:
myself.ShowPage(talker, fnHi);
break;
case 1:
if(myself.sm.residence_id > 0)
{
if(myself.Castle_GetPledgeId())
{
myself.FHTML_SetFileName(fhtml0, fnFeudInfo);
myself.FHTML_SetStr(fhtml0, "my_pledge_name", myself.Castle_GetPledgeName());
myself.FHTML_SetStr(fhtml0, "my_owner_name", myself.Castle_GetOwnerName());
myself.FHTML_SetInt(fhtml0, "current_tax_rate", myself.Residence_GetTaxRateCurrent());
}
else
{
myself.FHTML_SetFileName(fhtml0, fnNoFeudInfo);
}
if(myself.sm.residence_id < 7)
{
myself.FHTML_SetStr(fhtml0, "kingdom_name", gg.MakeFString(1001000, "", "", "", "", ""));
}
else
{
myself.FHTML_SetStr(fhtml0, "kingdom_name", gg.MakeFString(1001100, "", "", "", "", ""));
}
myself.FHTML_SetStr(fhtml0, "feud_name", gg.MakeFString((1001000 + myself.sm.residence_id), "", "", "", "", ""));
myself.ShowFHTML(talker, fhtml0);
}
break;
}
}
else if(ask == -303)
{
if(reply == 579)
{
if(talker.level >= 40 && talker.level < 46)
{
if(talker.race == 5)
{
myself.ShowMultisell(603, talker);
}
else
{
myself.ShowMultisell(reply, talker);
}
}
}
else if(reply == 580)
{
if(talker.level >= 46 && talker.level < 52)
{
if(talker.race == 5)
{
myself.ShowMultisell(604, talker);
}
else
{
myself.ShowMultisell(reply, talker);
}
}
}
else if(reply == 581)
{
if(talker.level >= 52)
{
if(talker.race == 5)
{
myself.ShowMultisell(605, talker);
}
else
{
myself.ShowMultisell(reply, talker);
}
}
}
else
{
myself.ShowMultisell(reply, talker);
}
}
else if(ask == -503)
{
if(reply == 100)
{
myself.ShowVariationMakeWindow(talker);
}
else if(reply == 200)
{
myself.ShowVariationCancelWindow(talker);
}
}
else if(ask == -601)
{
if(reply == 0)
{
if(gg.OwnItemCount(talker, @welcome_l2_ticket_weapon) <= 0 && gg.OwnItemCount(talker, @welcome_l2_ticket_armor) <= 0 && gg.OwnItemCount(talker, @welcome_l2_ticket_etc) <= 0)
{
myself.ShowPage(talker, "welcomeback003.htm");
}
else
{
myself.ShowPage(talker, "welcomeback004.htm");
}
}
else if(reply == 1)
{
if(gg.OwnItemCount(talker, @welcome_l2_ticket_weapon) <= 0 && gg.OwnItemCount(talker, @welcome_l2_ticket_armor) <= 0 && gg.OwnItemCount(talker, @welcome_l2_ticket_etc) <= 0)
{
myself.ShowPage(talker, "welcome_lin2_cat002.htm");
}
else
{
myself.ShowPage(talker, "welcome_lin2_cat004.htm");
}
}
else if(reply == 2)
{
if(talker.level < 20)
{
myself.ShowMultisell(583, talker);
}
else if(talker.level >= 20 && talker.level < 40)
{
myself.ShowMultisell(584, talker);
}
else if(talker.level >= 40 && talker.level < 52)
{
myself.ShowMultisell(585, talker);
}
else if(talker.level >= 52 && talker.level < 61)
{
myself.ShowMultisell(586, talker);
}
else if(talker.level >= 61 && talker.level < 76)
{
myself.ShowMultisell(587, talker);
}
else if(talker.level >= 76)
{
myself.ShowMultisell(588, talker);
}
}
else if(reply == 3)
{
if(talker.level < 20)
{
myself.ShowMultisell(589, talker);
}
else if(talker.level >= 20 && talker.level < 40)
{
myself.ShowMultisell(590, talker);
}
else if(talker.level >= 40 && talker.level < 52)
{
myself.ShowMultisell(591, talker);
}
else if(talker.level >= 52 && talker.level < 61)
{
myself.ShowMultisell(592, talker);
}
else if(talker.level >= 61 && talker.level < 76)
{
myself.ShowMultisell(593, talker);
}
else if(talker.level >= 76)
{
myself.ShowMultisell(594, talker);
}
}
else if(reply == 4)
{
if(talker.level < 20)
{
myself.ShowMultisell(595, talker);
}
else if(talker.level >= 20 && talker.level < 40)
{
myself.ShowMultisell(596, talker);
}
else if(talker.level >= 40 && talker.level < 52)
{
myself.ShowMultisell(597, talker);
}
else if(talker.level >= 52 && talker.level < 61)
{
myself.ShowMultisell(598, talker);
}
else if(talker.level >= 61 && talker.level < 76)
{
myself.ShowMultisell(601, talker);
}
else if(talker.level >= 76)
{
myself.ShowMultisell(600, talker);
}
}
}
}
}
привязка к лорду, проверка осадного состояния, проверка прав на пользование, показ пары хтмлок и телепорт по координатом.Видимо вы слепой...
Код:class fortress_doorkeeper : doorkeeper { parameter: string DoorName3 = ""; string DoorName4 = ""; int dominion_id = 81; handler: EventHandler TALKED(talker) { if(myself.IsMyLord(talker) || (myself.HavePledgePower(talker, 16) && myself.Castle_GetPledgeId() == talker.pledge_id && talker.pledge_id != 0)) { if(myself.Castle_IsUnderSiege() || gg.GetDominionWarState(dominion_id) == 5) { myself.ShowPage(talker, fnUnderSiege); } else { myself.ShowPage(talker, fnHi); } } else { myself.ShowPage(talker, fnNotMyLord); } } EventHandler MENU_SELECTED(talker, ask, reply, fhtml0) { if(ask == -201) { if(myself.IsMyLord(talker) || (myself.HavePledgePower(talker, 16) && myself.Castle_GetPledgeId() == talker.pledge_id && talker.pledge_id != 0)) { if(myself.Castle_IsUnderSiege() || gg.GetDominionWarState(dominion_id) == 5) { myself.ShowPage(talker, fnUnderSiege); } else { select(reply) { case 1: gg.Castle_GateOpenClose2(DoorName1, 0); gg.Castle_GateOpenClose2(DoorName2, 0); if(myself.IsNullString(DoorName3) == 0) { gg.Castle_GateOpenClose2(DoorName3, 0); } if(myself.IsNullString(DoorName4) == 0) { gg.Castle_GateOpenClose2(DoorName4, 0); } break; case 2: gg.Castle_GateOpenClose2(DoorName1, 1); gg.Castle_GateOpenClose2(DoorName2, 1); if(myself.IsNullString(DoorName3) == 0) { gg.Castle_GateOpenClose2(DoorName3, 1); } if(myself.IsNullString(DoorName4) == 0) { gg.Castle_GateOpenClose2(DoorName4, 1); } break; } } } else { myself.ShowPage(talker, fnNotMyLord); } } if(ask == -202) { if(myself.IsMyLord(talker) || myself.Castle_GetPledgeState(talker) == 2 || (myself.HavePledgePower(talker, 16) && myself.Castle_GetPledgeId() == talker.pledge_id && talker.pledge_id != 0)) { select(reply) { case 1: myself.InstantTeleport(talker, pos_x01, pos_y01, pos_z01); break; case 2: myself.InstantTeleport(talker, pos_x02, pos_y02, pos_z02); break; } } else { myself.ShowPage(talker, fnNotMyLord); } } } }
Меня умоляли вернуться, когда увидили что ты тут начал со своими ПТСами творить.П.С. Уважаемый, вы же выпилились с данного форума... Или вам просто деваться уже некуда, с вашим характером, вас уже везде забанили...
Все с вами ясно, вы один из тех людей который кричат "У нас все по офу" хотя в глаза не видели ПТС скрипты... Я вам дал лишь пример того чего вы не нашли, а ценность не ценность "данного" кода не вам оценивать.showMultisell
showHtml
teleportPosition
xD
Примерный состав всего этого xD
Это давно известно, давно реализовано. Никакой ценности не представляет.
Я нечего с ними не творил, просто взял себе на заметку инфу. где можно глянуть что не нужно.Меня умоляли вернуться, когда увидили что ты тут начал со своими ПТСами творить.
Ясно так ясно. Ты опубликовал для кого? - Для пользователей. Я пользователь, я оценил. Я с 2008 года в этой теме, и видел все что существует. То что ты мне показал файлы, их ценность не увиличивает, в них нет полезной информации, обо всем этом давно известно и все это давно реализовано.Все с вами ясно, вы один из тех людей который кричат "У нас все по офу" хотя в глаза не видели ПТС скрипты... Я вам дал лишь пример того чего вы не нашли, а ценность не ценность "данного" кода не вам оценивать.
Ну выпилят и [А по щам?] с ним, я от этого никак не страдаю. А вот тот факт, что у многих это мечта - доставляет некое удовлетворение.Чувствую скоро и отсюда вас выпилят.
Вы не думали что люди, которые это пилили в 2008, опирались на данные скрипты? И людям которые пилят всякие плюшки "аля конфиг\кб\тогл автоцп и тд" конечно нечего тут смотреть.Ясно так ясно. Ты опубликовал для кого? - Для пользователей. Я пользователь, я оценил. Я с 2008 года в этой теме, и видел все что существует. То что ты мне показал файлы, их ценность не увиличивает, в них нет полезной информации, обо всем этом давно известно и все это давно реализовано.
Возможно из-за того что я не проявляю симпатии к людям которые ставят себя выше всех... Если вам это не интересно, или вы не умеете нечего кроме запиливания ПВП плюх, то не означает что тут нет нечего полезного и некому это не интересно.У тебя же это мечта? Чтобы меня выпилили? Иначе мне не понятно, зачем ты в каждый свой пост стал вставлять это xD
Конечно, мне об этом известно. Мы какой вопрос рассматриваем сейчас? Мы сейчас рассматриваем вопрос о "полезности" данных файлов.Вы не думали что люди, которые это пилили в 2008, опирались на данные скрипты? И людям которые пилят всякие плюшки "аля конфиг\кб\тогл автоцп и тд" конечно нечего тут смотреть.
Почему я должен ставить себя ниже тех, кого я выше? Я не садомазахист xDВозможно из-за того что я не проявляю симпатии к людям которые ставят себя выше всех...
Этот функционал мог браться из скриптов ИТ, и не факт что в хрониках Фрея он не изменился... Так же есть инфа которой нет в Финале\ИТ.Конечно, мне об этом известно. Мы какой вопрос рассматриваем сейчас? Мы сейчас рассматриваем вопрос о "полезности" данных файлов.
Если в 2008 году на них опирались, то с чего вдруг их ценность как-то сейчас измениться? На данном этапе развития эмуляторов эти файлы НИКАКОЙ ценности не представляют, т.к. этот функционал давно реализован. И ценность эмулятора сейчас кокраз составляет дополнительный контент, гибкость настроек и обилие раличного кастомизирующего функционала.
А чем вы выше любого пользователя на этом форуме? Своим ЭГО?Почему я должен ставить себя ниже тех, кого я выше? Я не садомазахист xD
Я где-то говорил что я выше любого пользователя? Только определенных. Зачем так коверкать ситуацию. Можем рассмотреть на конкретном примере, на твоем например и например в этой сфере я выше тебя потому что:А чем вы выше любого пользователя на этом форуме? Своим ЭГО?
Я где-то говорил что я выше любого пользователя? Только определенных. Зачем так коверкать ситуацию. Можем рассмотреть на конкретном примере, на твоем например и например в этой сфере я выше тебя потому что:
1. Самостоятельно, в одиночку, реализовал и обслуживал проекты тысячники (l2nova.com, linerage.ru, mistworld.ru, lineage2.club).
2. Уже несколько лет веду собственную разработку и имею хорошую базу клиентов.
3. На данном этапе мой эмулятор самый реализованный, самый стабильный, самый безопасный и с наибольшим кол-вом дополнительного качественного и реально уникального контента.
4. Я дипломированный специалист, два высших образования МГАПИ (Инженер по специальности вычислительные машины, комплексы, системы и сети) и РАНХиГС (государственное и муниципальное управление).
5. Обладаю грамотно построенной речью и аналитическим складом ума.
xD
1. В гугл зайди и ютуб.1. Тут я промолчу, не в курсе.
2. И что тут такого? Я тоже веду собственную разработку уже несколько лет.
3. Пруфы?
4. Не показатель.
5. Аналитическое мышление у вас храмает.
Сразу ответ на вопрос: "Ты кто? Человек-интерлюд с крыльями?", нет я человек-"Дракон ветра" с крыльями.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?