Добавлен Dragonear
В теории когда крип юзает способность, то на всех вражеских героев вокруг него должны создаваться дамми юниты, которые пускают артиллерийский снаряд который летит в точку героя. Прикол в том, что все дамми юниты почему-то атакуют область только одного героя. Не могу понять почему.
Код триггера
function SpellGroupForCreepConditionEnemy takes nothing returns boolean
return (IsPlayerEnemy(GetOwningPlayer(GetTriggerUnit()), GetOwningPlayer(GetFilterUnit()))==true)
endfunction
function SpellGolemFireStone takes nothing returns nothing
local real f = bj_RADTODEG * Atan2(GetLocationY(GetUnitLoc(GetEnumUnit())) - GetLocationY(GetUnitLoc(GetTriggerUnit())), GetLocationX(GetUnitLoc(GetEnumUnit())) - GetLocationX(GetUnitLoc(GetTriggerUnit())))
local unit u = CreateUnit(GetOwningPlayer(GetTriggerUnit()), 'e004', GetLocationX(GetUnitLoc(GetTriggerUnit())), GetLocationY(GetUnitLoc(GetTriggerUnit())), f)
call IssuePointOrderLoc(u, "attackground", GetUnitLoc(GetEnumUnit()))
call UnitApplyTimedLife (u, 'BTLF', 3)
set u = null
set f = 0
endfunction
function CreepSpellActions takes nothing returns nothing
local unit TriggerUnit = GetTriggerUnit()
local location LocationTriggerUnit = GetUnitLoc(GetTriggerUnit())
local real LocationTriggerUnitX = GetLocationX(LocationTriggerUnit)
local real LocationTriggerUnitY = GetLocationY(LocationTriggerUnit)
local group SpellGroup = CreateGroup()
if (GetUnitUserData(GetTriggerUnit()) == 1 and GetSpellAbilityId() == 'A002') then
call GroupEnumUnitsInRangeOfLoc(SpellGroup, LocationTriggerUnit, 1500, function SpellGolemFireStone)
call ForGroup(SpellGroup,function SpellGolemFireStone)
call DestroyBoolExpr(function SpellGroupForCreepConditionEnemy)
endif
set TriggerUnit = null
set LocationTriggerUnit = null
set LocationTriggerUnitX = 0
set LocationTriggerUnitY = 0
set SpellGroup = null
endfunction
//===========================================================================
function InitTrig_CreepSpell takes nothing returns nothing
set gg_trg_CreepSpell = CreateTrigger()
call TriggerRegisterPlayerUnitEvent(gg_trg_CreepSpell, Player(10), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
call TriggerAddAction( gg_trg_CreepSpell, function CreepSpellActions )
endfunction
Принятый ответ
Вместо
function InitTrig_CreepSpell takes nothing returns nothing
set gg_trg_CreepSpell = CreateTrigger()
call TriggerRegisterPlayerUnitEvent(gg_trg_CreepSpell, Player(1), EVENT_PLAYER_UNIT_SPELL_EFFECT, function CreepSpellFilter)
call TriggerAddAction(gg_trg_CreepSpell, function CreepSpellActivation)
endfunction
сделай так:
function InitTrig_CreepSpell takes nothing returns nothing
set gg_trg_CreepSpell = CreateTrigger()
call TriggerRegisterPlayerUnitEvent(gg_trg_CreepSpell, Player(1), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) //function CreepSpellFilter
call TriggerAddCondition(gg_trg_CreepSpell, Condition(function CreepSpellFilter))
call TriggerAddAction(gg_trg_CreepSpell, function CreepSpellActivation)
endfunction
и вот здесь:
if IsUnitEnemy(GetFilterUnit(), Player(10)) then
set Dummy = CreateUnit(Player(1), 'e004', CasterX, CasterY, bj_RADTODEG*Atan2(TargetY - CasterY, TargetX - CasterX))
call IssuePointOrder(Dummy, "attackground", TargetX, TargetY)
call UnitApplyTimedLife(Dummy, 'BTLF', 3)
set Dummy = null
endif
поменяй местами IssuePointOrder и UnitApplyTimedLife, чтобы было вот так:
if IsUnitEnemy(GetFilterUnit(), Player(10)) then
set Dummy = CreateUnit(Player(1), 'e004', CasterX, CasterY, bj_RADTODEG*Atan2(TargetY - CasterY, TargetX - CasterX))
call UnitApplyTimedLife(Dummy, 'BTLF', 3)
call IssuePointOrder(Dummy, "attackground", TargetX, TargetY)
set Dummy = null
endif
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Но суть уловил, они у тебя они стреляют в первого добавленого групу героя. Поэтому удаляй героя из группы после выстрела по нему
Я не заметил в условиях выбор героя, только враги, стоило б проверить.
Отредактирован MpW
Отредактирован Clamp
Sergarr, я в шоке. Сделал так, как вы посоветовали и все отлично работает. Можете пожалуйста пояснить, ваш совет. Чтобы я понял в собственно была ошибка. Ваш ответ однозначно будет лучшим.
Отредактирован Sergarr
Со вторым - UnitApplyTimedLife(Dummy, 'BTLF', 3) сбивает ранее выданные приказы (почему - черт его знает). Дамми юниты палили в одну цель не по приказу из триггера, а из-за своей собственной авто-атаки.