Подскажите пожалуйста как искуственно создать снаряд. То есть мне необходимо что бы при запуске способности в цель уходил снаряд, а после того как снаряд настиг цель или же время его полёта привысил некоторый лимит то снаряд взрывался. Попытка создать снаряд при помощи юнита оказалась провально, так как при запуске снаряда под углом свыше 10% это сильно бросается в глаза, так как снаряд всегда неподвижен по оси "вверх \ вниз". Пожалуйста помогите.
nekron_013, я делал абилку на запуск снаряда через даммика, все норм. Чтобы сделать движение по оси Z добавь способность превращения в ворона и сразу же удали ее.
function Trig_Angelic_Gun_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 damage = 15.00 * I2R(GetHeroInt(caster, true)) if IsUnitEnemy(target, GetOwningPlayer(caster)) then call UnitDamageTarget(caster, target, damage, 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_Angelic_Gun_Timer takes nothing returns nothing local timer t = GetExpiredTimer() local integer hid = GetHandleId(t) local unit dummy = LoadUnitHandle(udg_Hashtable, hid, 1) local real max = LoadReal(udg_Hashtable, hid, 2) local real range = LoadReal(udg_Hashtable, hid, 3) local real angle = GetUnitFacing(dummy) local group g = CreateGroup() local filterfunc f = Filter(function Trig_Angelic_Gun_Filter) if range < max then local real x = GetWidgetX(dummy) + 12. * Cos(angle * bj_DEGTORAD) local real y = GetWidgetY(dummy) + 12. * Sin(angle * bj_DEGTORAD) call SetUnitPosition(dummy, x, y) call SaveReal(udg_Hashtable, hid, 3, range + 10.) else call GroupEnumUnitsInRange(g, GetWidgetX(dummy), GetWidgetY(dummy), 600.00, f) call DestroyEffect(AddSpecialEffect("kamehameexplode.mdx", GetWidgetX(dummy), GetWidgetY(dummy))) call RemoveUnit(dummy) call PauseTimer(t) call DestroyTimer(t) call FlushChildHashtable(udg_Hashtable, hid) endif call DestroyGroup(g) call DestroyFilter(f) set t = null set g = null set t = null set dummy = null endfunction
function Trig_Angelic_Gun_Actions takes nothing returns nothing local timer t = CreateTimer() local integer hid = GetHandleId(t) local unit caster = GetTriggerUnit() local unit dummy = CreateUnit(GetOwningPlayer(caster), 'e006', GetUnitX(caster), GetUnitY(caster), GetUnitFacing(caster)) local group g = CreateGroup() local real dx = (GetWidgetX(caster) - GetSpellTargetX()) local real dy = (GetWidgetY(caster) - GetSpellTargetY()) call UnitAddAbility(dummy, 'Amrf') call SetUnitFlyHeight(dummy, 100., 0.) call PauseUnit(dummy, true) call SaveUnitHandle(udg_Hashtable, hid, 0, caster) call SaveUnitHandle(udg_Hashtable, hid, 1, dummy) call SaveReal(udg_Hashtable, hid, 2, SquareRoot(dx * dx + dy * dy)) call SaveReal(udg_Hashtable, hid, 3, 0.) call TimerStart(t, 0.01, true, function Trig_Angelic_Gun_Timer) set caster = null set dummy = null endfunction
//=========================================================================== function InitTrig_Angelic_Gun takes nothing returns nothing set gg_trg_Angelic_Gun = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_Angelic_Gun, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_Angelic_Gun, Condition( function Trig_Angelic_Gun_Conditions ) ) call TriggerAddAction( gg_trg_Angelic_Gun, function Trig_Angelic_Gun_Actions ) endfunction
Я эотот код подключить не могу... Дамми создал, индификаторы заменил, глобалку создал, а всё равно ошибок море. Так что буду признателен если всё это чудо буде сразу на карте.
Там все просто, я же говорю- у меня очень мало свободного времени. Если нет силы ждать дам совет- через периодический таймер проверяй пройденное расстояние- если меньше половины от кастера до цели- поднимать снаряд, если больше- опускать