Hello, me and my friend are creating a map together, but when we tested it out now just recently we noticed that he got disconnected when some of the triggers ran. We tested several times and it was always the same trigger that caused it. (+ one more at the ending of our tests.)
This is the trigger that causes most of our problems:
The trigger does everything it's supposed to do, except that it disconnects other players. Is there anything in the code that might cause this?
This is the trigger that causes most of our problems:
JASS:
scope OrcShieldSlam initializer Lightning
//! runtextmacro HAIL_CreateProperty ("Data", "integer", "private")
globals
private constant integer raw = 039;A011039;
private constant integer offset = 20
private constant integer RD = 200 flyger iväg
private constant real Arc = 1.3
private constant integer damage = 200
private constant real aoe = 400
endglobals
private struct TestStruct
timer Timer
unit caster
real angle
group z
integer counter
effect special1
unit dummy
location EP
real distance
effect fire1
integer traveled
endstruct
private function Conditions takes nothing returns boolean
return GetSpellAbilityId() == raw
endfunction
private function Parabola takes real dist, real maxdist returns real
local real t = (dist*2)/maxdist-1
return (-t*t+1)*(maxdist/Arc)
endfunction
function Trig_OrcShieldSlam_FilterCondition takes nothing returns boolean
return UnitHasBuffBJ(GetFilterUnit(),039;B005039;) == true
endfunction
private function Knockback takes nothing returns nothing
local TestStruct data = GetData (GetExpiredTimer ())
local unit Unit = data.caster
local group g = CreateGroup()
local unit affected
local real tx
local real ty
local real cx = GetUnitX(Unit)
local real cy = GetUnitY(Unit)
local real nx
local real ny
local real angle
//call BJDebugMsg(I2S(CountUnitsInGroup(data.z)))
call GroupEnumUnitsInRange(g,cx,cy,aoe*2,Condition(function Trig_OrcShieldSlam_FilterCondition))
set data.traveled = data.traveled + offset
if data.traveled >= RD + I2R(GetHeroStr(udg_PlayerHero[GetConvertedPlayerId(GetOwningPlayer(Unit))],true)) then
call PauseTimer (data.Timer)
call ResetData (data.Timer)
call DestroyTimer (data.Timer)
call DestroyGroup(data.z)
else
//call BJDebugMsg(I2S(CountUnitsInGroup(g)))
//call BJDebugMsg("endif")
loop
set affected = FirstOfGroup(g)
exitwhen affected == null
//call BJDebugMsg("boom")
set tx = GetUnitX(affected)
set ty = GetUnitY(affected)
set angle = Atan2(ty-cy,tx-cx)
set nx = tx + offset * Cos(angle)
set ny = ty + offset * Sin(angle)
call SetUnitX(affected,nx)
call SetUnitY(affected,ny)
call GroupRemoveUnit(g,affected)
endloop
// call ForGroup(z,function slide(p))
endif
endfunction
private function Actions takes nothing returns nothing
local sound SimError
local TestStruct data = TestStruct.create ()
local unit Unit = GetTriggerUnit()
local location CP = GetUnitLoc(Unit)
local real cx = GetUnitX(Unit)
local real cy = GetUnitY(Unit)
set data.caster = Unit
set triggering = Unit
set data.z = CreateGroup()
call GroupEnumUnitsInRange(data.z,cx,cy,aoe,Condition(function Trig_OrcShieldSlam_FilterCondition))
set data.Timer = CreateTimer()
call TimerStart (data.Timer,0.03,true, function Knockback)
call SetData (data.Timer, data)
endfunction
//===========================================================================
private function SafeFilt takes nothing returns boolean
return true
endfunction
private function Lightning takes nothing returns nothing
local trigger trig = CreateTrigger()
call TriggerRegisterPlayerUnitEvent(trig,GetLocalPlayer(),EVENT_PLAYER_UNIT_SPELL_EFFECT,Condition(function SafeFilt))
call TriggerAddCondition (trig, Condition (function Conditions ) )
call TriggerAddAction (trig, function Actions )
endfunction
endscope
The trigger does everything it's supposed to do, except that it disconnects other players. Is there anything in the code that might cause this?