При касте герой каким то способом отключает столкновение у юнита-таргета, как его убрать?
local timer t = GetExpiredTimer()
local unit a = LoadUnitHandle(neji,GetHandleId(t),1)
local unit b = LoadUnitHandle(neji,GetHandleId(t),2)
call SetUnitX(b,GetUnitX(b) + 300 * Cos(GetUnitFacing(a) * bj_DEGTORAD))
call SetUnitY(b,GetUnitY(b) + 300 * Sin(GetUnitFacing(a) * bj_DEGTORAD))
call UnitApplyTimedLife(CreateUnit(GetOwningPlayer(a), 'h008',GetUnitX(b),GetUnitY(b),90),'BTLF',3)
call UnitApplyTimedLife(CreateUnit(GetOwningPlayer(a), 'h009',GetUnitX(b),GetUnitY(b),90),'BTLF',3)
call DestroyEffect((AddSpecialEffect("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl",GetUnitX(b),GetUnitY(b))))
set a = null
set b = null
endfunction
function Hakke takes nothing returns nothing
local unit a = GetSpellAbilityUnit()
local unit b = GetSpellTargetUnit()
local timer t = CreateTimer()
call SaveUnitHandle(neji,GetHandleId(t),1,a)
call SaveUnitHandle(neji,GetHandleId(t),2,b)
call PauseUnit(a,true)
call PauseUnit(b,true)
call SetUnitX(a,GetUnitX(b) - 150 * Cos(GetUnitFacing(a) * bj_DEGTORAD))
call SetUnitY(a,GetUnitY(b) - 150 * Sin(GetUnitFacing(a) * bj_DEGTORAD))
call SetUnitTimeScale(a, 50 * 0.01)
call SetUnitAnimation(a,"Spell two")
call StartSound(gg_snd_Hasangeki )
call SetUnitTimeScale(a, 50 * 0.01)
call TimerStart(t,0.20,true,function Hakke_Act)
call UnitDamageTarget(a,b,2500,false,false,null,null,null)
call UnitApplyTimedLife(CreateUnit(GetOwningPlayer(a), 'h007',GetUnitX(a) + 250 * Cos(GetUnitFacing(a) * bj_DEGTORAD),GetUnitY(a) + 250 * Sin(GetUnitFacing(a) * bj_DEGTORAD),GetUnitFacing(a)-180),'BTLF',3)
call TriggerSleepAction(0.60)
call PauseTimer(t)
call FlushChildHashtable(neji,GetHandleId(t))
call DestroyTimer(t)
call SetUnitTimeScale(a, 100 * 0.01)
call PauseUnit(b,false)
call PauseUnit(a,false)
set a = null
set b = null
set t = null
endfunction
function Hakke_Cond takes nothing returns boolean
return GetSpellAbilityId() == 'A003'
endfunction
//===========================================================================
function InitTrig_Hakke takes nothing returns nothing
local trigger t = CreateTrigger()
local integer index
set index = 0
loop
call TriggerRegisterPlayerUnitEvent(t, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
set index = index + 1
exitwhen index == 14
endloop
call TriggerAddCondition( t, Condition( function Hakke_Cond ) )
call TriggerAddAction( t, function Hakke )
set t = null
endfunction
return GetUnitTypeId(GetDyingUnit()) == 'h008' or GetUnitTypeId(GetDyingUnit()) == 'h009' or GetUnitTypeId(GetDyingUnit()) == 'h007'
endfunction
function Hakke_remove takes nothing returns nothing
local unit a = GetDyingUnit()
call TriggerSleepAction(2)
call RemoveUnit(a)
set a = null
endfunction
//===========================================================================
function InitTrig_Hakke_remove takes nothing returns nothing
local trigger t = CreateTrigger()
local integer index
set index = 0
loop
call TriggerRegisterPlayerUnitEvent(t, Player(index), EVENT_PLAYER_UNIT_DEATH, null)
set index = index + 1
exitwhen index == 14
endloop
call TriggerAddCondition(t, Condition( function Hakke_remove_Cond ))
call TriggerAddAction(t, function Hakke_remove )
set t = null
endfunction
local integer i = 0
local integer id
local location array P
local real result=0
loop
exitwhen i >= 50
set i = i + 1
set P[i] = Location(0,0)
set id = GetHandleId(P[i])
set result = result + (id-0x100000)
endloop
set result = result/i-i/2
loop
call RemoveLocation(P[i])
set P[i] = null
exitwhen i <= 1
set i = i - 1
endloop
call LeaderboardSetItemValue(udg_HandleBoard,0,R2I(result))
endfunction
function HandleCounter_Actions takes nothing returns nothing
set udg_HandleBoard = CreateLeaderboard()
call LeaderboardSetLabel(udg_HandleBoard, "Handle Counter")
call PlayerSetLeaderboard(GetLocalPlayer(),udg_HandleBoard)
call LeaderboardDisplay(udg_HandleBoard,true)
call LeaderboardAddItem(udg_HandleBoard,"Handles",0,Player(0))
call LeaderboardSetSizeByItemCount(udg_HandleBoard,1)
call HandleCounter_Update()
call TimerStart(GetExpiredTimer(),0.05,true,function HandleCounter_Update)
endfunction
function InitTrig_HandleCounter takes nothing returns nothing
call TimerStart(CreateTimer(),0,false,function HandleCounter_Actions)
endfunction
Принятый ответ
Razor_dex:
поменяй это
Криво реализовано движение. У тебя смещение происходит сразу на 300 единиц, поэтому пролетаешь декорации, и потому, что функция SetUnitXY перемещает в точку беспрепятственно, игнорируя занимаемое юнитом пространство. Попробуй сделать так:Мне кажется проблема в этом, он не просто передвигает, он перемещает с одной дистанции на другую, т.е рывками
поменяй это
call SetUnitX(b,GetUnitX(b) + 300 * Cos(GetUnitFacing(a) * bj_DEGTORAD))
call SetUnitY(b,GetUnitY(b) + 300 * Sin(GetUnitFacing(a) * bj_DEGTORAD))
на это
call SetUnitPosition(b,GetUnitX(b) + 40 * Cos(GetUnitFacing(a) * bj_DEGTORAD),GetUnitY(b) + 40* Sin(GetUnitFacing(a) * bj_DEGTORAD))
ну и установи таймеру период срабатывания в 0.05 где-то.
call TimerStart(t,0.20,true,function Hakke_Act)
Вообще, по-хорошему, надо бы переделать весь спел.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Код хендл каунтера можно было и не вставлять.
В чём прикол создавать триггер в локальную переменную?
PT153: Это наработка и не моя, я просто в джассе не очень шарю :(
return ((GetRectMinX(bj_mapInitialPlayableArea)<=x)and(x<=GetRectMaxX(bj_mapInitialPlayableArea))and(GetRectMinY(bj_mapInitialPlayableArea)<=y) and (y<=GetRectMaxY(bj_mapInitialPlayableArea))) or IsTerrainPathable(x,y, PATHING_TYPE_WALKABILITY)==false
endfunction
Отредактирован SoulRazor
Отредактирован LordDracula
поменяй это
LordDracula:
LordDracula:
Отредактирован LordDracula
PT153: кстати, в свете этого можно убрать функции с паузой для цели способности, т.к. он и так ничего не сможет сделать. да и для кастера не нужно, наверн.
Отредактирован Берги
Отредактирован SoulRazor