рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж
, рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдХреИрд╕реЗ Warcraft рдиреЗ рдореЗрд░реА рдорджрдж рдХреАред рдореИрдВ рдХрд╛рдлреА рд╕рдордп рд╕реЗ Warcraft 3 рдХреЗ рд▓рд┐рдП рдореИрдкрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╢рд╛рдпрдж рдПрдХ рд░рд╣рд╕реНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдмреНрд▓рд┐рдЬрд╝рд╛рд░реНрдб, рдЬрд┐рд╕рдиреЗ рдЧреЗрдо рдЬрд╛рд░реА рдХрд┐рдпрд╛, рдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рдлреА рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдорд╛рдирдЪрд┐рддреНрд░ рд╕рдВрдкрд╛рджрдХ рджрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдЙрдиреНрд╣реЛрдВрдиреЗ
JASS (рдЕрдзрд┐рдХ
рд╡рд┐рдХрд┐ рдкрд░ ) рдХрд╣рд╛ред
ред рдмрд░реНрдлрд╝реАрд▓рд╛ рддреВрдлрд╝рд╛рди рдХреЗ "рд╡рд░реНрд▓реНрдб рдПрдбрд┐рдЯрд░" рдиреЗ "рдмреБрд░реНрдЬреБрдЖ" рдореИрдк рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд┐рдпрд╛, рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕рдХрд╛ рд╣реИрдХ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ
JNGP (Jass New Gen Pack) рдХрд╣рд╛ рдЧрдпрд╛: рд╣реИрдХ рдиреЗ рд╡рд┐рднрд┐рдиреНрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд┐рдпрд╛ рдФрд░ рд╡рд┐рднрд┐рдиреНрди
рдЕрдЪреНрдЫрд╛рдЗрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ - рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ, рдирдХреНрд╢реЗ рдкрд░ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реАрдорд╛ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ред рдкрд╛рд░реНрд╕рд░ (рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗ)ред
рдореВрд▓ рд╡рд┐рд╢реНрд╡рд╡рд╛рд╕реА рдЗрд╕ рднрд╛рд╖рд╛ рдореЗрдВ рдХрд╛рдлреА рд╡рд░реНрдмреЛрдЬрд╝ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ, рд╕рд╛рде рд╣реА рдПрдХ рдШрдЯрдирд╛-рдЙрдиреНрдореБрдЦ рд╕рдВрд░рдЪрдирд╛ рднреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреЛ рдкреНрд░рд╕рд┐рджреНрдз (рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ) рд▓реЛрдЧреЛрдВ рдиреЗ рднрд╛рд╖рд╛ рдХреЗ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдмрдирд╛рдП, рдЬреЛ рд╡рд┐рдХрд┐ рдкрд░ рднреА рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдкрд╣рд▓рд╛ -
vJass (v - рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдЙрдкрдирд╛рдо рд╕реЗ -
рд╡реЗрдХреНрд╕реЛрд░рд┐рдпрди ) рдиреЗ JASS рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдФрд░ рд╕рднреА рдкрд░рд┐рдгрд╛рдореА
рдЕрдЪреНрдЫрд╛рдЗрдпреЛрдВ (рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди, рдЖрджрд┐) рдХреЛ рдЬреЛрдбрд╝рд╛ред рд░реВрд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдмрд╛рдж
ADOLF рдиреЗ рдЕрдкрдирд╛ рдкрд╛рд░реНрд╕рд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛, рдЬрд┐рд╕рдиреЗ рдПрдХ рдирдИ рдмреЛрд▓реА
рдмрдирд╛рдИ- cJass , Parser рдиреЗ MASM рдореЗрдВ рд▓рд┐рдЦрд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ JASS рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдХреНрд▓рд╛рд╕рд┐рдХ рд╕реА рдХреА рддрд░рд╣ рдмрдирд╛рдпрд╛, рдФрд░ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ (рдПрдиреБрдорд░реЗрд╢рдиреНрд╕, рдореИрдХреНрд░реЛрдЬрд╝, рдмрд╛рд╣рд░реА рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ, рд╣реИрдВрдбрд▓рд░, рдЗрдиреНрдХреНрд░реАрдореЗрдВрдЯ, рдбреЗрдХреНрд░рд┐рдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░, рд╢реЙрд░реНрдЯрд╣реИрдВрдб рдХреИрд▓рдХреБрд▓реЗрд╢рди (+ =, - = =, * =)) рдФрд░ рд╕реЗ рднреА рдЬреЛрдбрд╝рд╛ред рдмрд╣реБрдд рдЕрдзрд┐рдХ)ред рдиреАрдЪреЗ рдЙрджрд╛рд╣рд░рдг:
рдХреЛрдбfunction test takes nothing returns integer local integer i = 0 set i = i + 1 return i
int test() { int i = 0; return ++i;
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдорд╛рдирдЪрд┐рддреНрд░ рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдХреЗ рд╕рд░реНрдХрд▓ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдЬрд╛рдирдХрд╛рд░ рдЕрд╕реЗрдВрдмрд▓рд░ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВред
рдПрдХ рдмрд╛рд░, рдпрд╣ рдореЗрд░реЗ рдЕрдкрдиреЗ рдкрд╛рд░реНрд╕рд░ рдХреА рд░рдЪрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдЖред рдЪреВрдВрдХрд┐ рдореИрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд╕рдордЭрддрд╛, рдЗрд╕рд▓рд┐рдП рдореЗрд░реА рдкрд╕рдВрдж
рдбреЗрд▓реНрдлреА рдкрд░ рдЖ рдЧрдИред рдкрд╛рд░реНрд╕рд░ рдХреЛ рдПрдХ рддреБрдЪреНрдЫ рдирд╛рдо (
JASP - рдЬрд╕реНрдЯ рдЕрджрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░) рджреЗрддреЗ рд╣реБрдП, рдореИрдВ рдмрдиреНрд╕ рдХреА рд░рдЪрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрда рдЧрдпрд╛ред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбрд╛рдпрдирд╛рдорд┐рдХ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╡реИрд░рд┐рдПрдмрд▓ (рдЬреИрд╕реЗ
C # ) рдореЗрдВ рдЧреНрд▓реЛрдмрд▓ рд╡реИрд░рд┐рдПрдмрд▓реНрд╕, рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдЖрджрд┐ рдХрд╛ рдПрдХ рд╣реА рдРрд▓рд╛рди рд╣реИ, рдЬрд┐рд╕рдореЗрдВ
vJass рдФрд░ cJass рдХреА рдХрдореА рдереАред рдкрд╛рд░реНрд╕рд░ рдХреЗ рдкрд╣рд▓реЗ рджреЛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рдЗрди рд╕рднреА рдЫреЛрдЯреЗ рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧреА рдмрдиреНрд╕ (рдЙрдиреНрд╣реЗрдВ
рдореИрдиреБрдЕрд▓ рдореЗрдВ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ) рдХреЛ рдЬреЛрдбрд╝рд╛, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореЗрд░реА рдкрд╕рдВрдж C # рдкрд░ рдЧрд┐рд░ рдЧрдИ, рдФрд░ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдкрд░рд┐рд╖реНрдХрд░рдг) рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг 0.3, рд╕рдордп-рд╕рдордп рдкрд░ рд╡рд┐рд╖рдпрдЧрдд рдордВрдЪреЛрдВ рдкрд░ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдореЗрд░реЗ
рдиреЛрдЯреНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рднрд░рдирд╛ред рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд╣реА JASS рдЬрд┐рд╕реЗ рдореЗрд░реЗ рдкрд┐рддрд╛ рдиреЗ рд▓рд╛рдбрд╝ рдХрд╣рд╛ рдерд╛, рдиреЗ рдореБрдЭреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рд╕рд┐рдЦрд╛рдИрдВ рдФрд░ рдореБрдЭреЗ рдбреЗрд▓реНрдлреА рд╕реЗ рд╢рд╛рд░реНрдк рддрдХ рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА, рдЬреЛ рдореБрдЭреЗ рдЦреБрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЖрдк рд╕рднреА рдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдЕрд░реЗ рд╣рд╛рдБ, рд╣рд┐рдд рдХреЗ рд▓рд┐рдП, рд╕рднреА рддреАрди JASS рдмреЛрд▓рд┐рдпреЛрдВ рдореЗрдВ рдордВрддреНрд░: scope FreezingShoot { #define { <trigger gg_trg_Freezing_Shoot = null>; private isEnemy(t, u) = IsUnitEnemy(t, GetOwningPlayer(u)) && GetWidgetLife(u) > .405; } #include "cj_types_priv.j"; private struct FS { unit caster; unit array dummy[3]; static constant int count = 3; real dist = 0.; static void Timer() { var t = GetExpiredTimer(); FS s = LoadInteger(hash, GetHandleId(t), 0); real x, y; if (s.dist <= 750.) { for (int i = 0; i < s.count; i++) { var angle = GetUnitFacing(s.dummy[i]) * .0174532; x = GetWidgetX(s.dummy[i]) + 25. * Cos(angle); y = GetWidgetY(s.dummy[i]) + 25. * Sin(angle); SetUnitPosition(s.dummy[i], x, y); for (unit target; UnitsInRange(x, y, 80.) use temp) { if (isEnemy(s.caster, target)) { UnitDamageTarget(s.caster, target, 100., true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS); delete AddSpecialEffect("Abilities\\Weapons\\FrostWyrmMissile\\FrostWyrmMissile.mdl", x, y); DummycastToTarget(s.caster, target, 'A001', 852075); RemoveDummy(s.dummy[i]); } } } s.dist += 25.; } elseif (s.dist > 750. || s.count <= 0) { for (int i = 0; i < s.count; i++) { if (s.dummy[i] != null) { x = GetWidgetX(s.dummy[i]); y = GetWidgetY(s.dummy[i]); delete AddSpecialEffect("Abilities\\Weapons\\FrostWyrmMissile\\FrostWyrmMissile.mdl", x, y); RemoveDummy(s.dummy[i]); } } FlushChildHashtable(hash, GetHandleId(t)); PauseTimer(t); delete t, s; } flush t; } static void Init(unit caster, real tX, real tY) { new FS s, timer t; s.caster = GetTriggerUnit(); var angle = Atan2(tY - GetWidgetY(s.caster), tX - GetWidgetX(s.caster)) * 57.295; var x = GetWidgetX(s.caster); var y = GetWidgetY(s.caster); for (int i = 0; i < s.count; i++) { s.dummy[i] = CreateDummy(GetOwningPlayer(caster), "Abilities\\Weapons\\ColdArrow\\ColdArrowMissile.mdl", .7, x, y, 100., angle); angle -= 20.; } SaveInteger(hash, GetHandleId(t), 0, s); TimerStart(t, .04, true, function thistype.Timer); flush t; } } callback onUnitSpellEffect('A000') { FS.Init(GetTriggerUnit(), GetSpellTargetX(), GetSpellTargetY()); } }