Ghost456 | Дата: Четверг, 15 Декабря 2011, 10:37:17 | Сообщение # 1 |
6 уровень
Группа: Проверенные
Сообщений: 246
Награды: 0
Репутация: 217
Блокировки:
| как сделать такой спелл чтобы герой подпрыгивал на небольшое расстояние вперёд и наносил урон всем окружающим его врагам?
|
|
|
|
Ty3uK | Дата: Четверг, 15 Декабря 2011, 10:38:37 | Сообщение # 2 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Ghost456, могу кинуть свой пример на жассе, подойдет?
|
|
|
|
Ghost456 | Дата: Четверг, 15 Декабря 2011, 10:43:16 | Сообщение # 3 |
6 уровень
Группа: Проверенные
Сообщений: 246
Награды: 0
Репутация: 217
Блокировки:
| Quote (Ty3uK) могу кинуть свой пример на жассе, подойдет? давай
|
|
|
|
Ty3uK | Дата: Четверг, 15 Декабря 2011, 10:49:05 | Сообщение # 4 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Code function Trig_Jumping_Filter takes nothing returns boolean local timer t = GetExpiredTimer() local integer hid = GetHandleId(t) local unit caster = LoadUnitHandle(udg_Hashtable, hid, 0) local unit target = GetFilterUnit() local real angle = 57.295 * Atan2(GetWidgetY(target) - GetWidgetY(caster), GetWidgetX(target) - GetWidgetX(caster)) local integer d = GetUnitAbilityLevel(caster, 'A01Q') * 50 + 30 //Урон, кратный уровню спелла if IsUnitEnemy(caster, GetOwningPlayer(target)) then call UnitDamageTarget(caster, target, d, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS) endif set caster = null set target = null set t = null return false endfunction
function Trig_Jumping_Timer takes nothing returns nothing local timer t = GetExpiredTimer() local integer hid = GetHandleId(t) local unit caster = LoadUnitHandle(udg_Hashtable, hid, 0) local real d = LoadReal(udg_Hashtable, hid, 1) local real z = LoadReal(udg_Hashtable, hid, 2) local real angle = LoadReal(udg_Hashtable, hid, 3) local real dm = LoadReal(udg_Hashtable, hid, 4) local real x = GetWidgetX(caster) local real y = GetWidgetY(caster) if d <= dm / 2 then set x = x + 10. * Cos(angle * bj_DEGTORAD) set y = y + 10. * Sin(angle * bj_DEGTORAD) set z = z + 25. call SetUnitPosition(caster, x, y) call SetUnitFlyHeight(caster, z, 0.) else set x = x + 10. * Cos(angle * .017) set y = y + 10. * Sin(angle * .017) set z = z - 25. call SetUnitPosition(caster, x, y) call SetUnitFlyHeight(caster, z, 0.) endif call SaveReal(udg_Hashtable, hid, 1, d + 10.) call SaveReal(udg_Hashtable, hid, 2, z) if z <= 0. then call GroupEnumUnitsInRange(LoadGroupHandle(udg_Hashtable, hid, 6), x, y, 350., Filter(function Trig_Jumping_Filter)) call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl", x, y)) call DestroyEffect(LoadEffectHandle(udg_Hashtable, hid, 5)) call PauseTimer(t) call DestroyTimer(t) call PauseUnit(caster, false) call FlushChildHashtable(udg_Hashtable, hid) endif set caster = null set t = null endfunction
function Trig_Jumping_Conditions takes nothing returns boolean local timer t local integer hid local unit caster = GetTriggerUnit() local real z = 10. local real angle = 57.295 * Atan2(GetSpellTargetY() - GetWidgetY(caster), GetSpellTargetX() - GetWidgetX(caster)) if GetSpellAbilityId() == 'A01Q' then //Рав код твоей абилки set t = CreateTimer() set hid = GetHandleId(t) call SaveUnitHandle(udg_Hashtable, hid, 0, caster) call SaveReal(udg_Hashtable, hid, 2, z) call SaveReal(udg_Hashtable, hid, 3, angle) call SaveReal(udg_Hashtable, hid, 4, VectorGetLenght(GetWidgetX(caster), GetWidgetY(caster), 0., GetSpellTargetX(), GetSpellTargetY(), 0.)) call SaveEffectHandle(udg_Hashtable, hid, 5, AddSpecialEffectTarget("Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile_mini.mdl", caster, "origin")) call SaveGroupHandle(udg_Hashtable, hid, 6, CreateGroup()) if UnitAddAbility(caster, 'Amrf') then call UnitRemoveAbility(caster, 'Amrf') endif call PauseUnit(caster, true) call SetUnitAnimation(caster, "slam") call TimerStart(t, .01, true, function Trig_Jumping_Timer) endif set caster = null set t = null return false endfunction
function InitTrig_Jumping takes nothing returns nothing set gg_trg_Jumping = CreateTrigger() call TriggerRegisterAnyUnitEventBJ(gg_trg_Jumping, EVENT_PLAYER_UNIT_SPELL_EFFECT) call TriggerAddCondition(gg_trg_Jumping, Condition(function Trig_Jumping_Conditions)) endfunction триггер должен называться Jumping, для работы нужна инициализированная хэштаблица Hashtable
|
|
|
|
Extremator | Дата: Четверг, 15 Декабря 2011, 11:10:20 | Сообщение # 5 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| хе-хе... вот примерчик от меня - Тык
|
|
|
|