Flare
Stops copies me!
- Reaction score
- 662
you destroyed your struct before calling Effect so you can't use .tx, .ty or .target
if distance < 50 then
call BJDebugMsg ("If works")
call PauseTimer (data.SlideTimer)
//Move everything below the data.destroy () above it
//Or use an onDestroy method (-slightly- more complicated)
call data.destroy ()
call ResetData (data.SlideTimer)
call DestroyTimer (data.SlideTimer)
call PauseUnit (data.target,true)
call Effect(data.tx, data.ty, data.target)
endif
call BJDebugMsg ("If works")
call PauseTimer (data.SlideTimer)
call ResetData (data.SlideTimer)
call DestroyTimer (data.SlideTimer)
call PauseUnit (data.target,true)
call Effect(data.tx, data.ty, data.target)
call data.destroy ()
call data.destroy ()
call Effect(data.tx, data.ty, data.target)
library HAILInit requires HAIL
//! runtextmacro HAIL_CreateProperty ("Data", "integer", "")
endlibrary
scope Lightnings initializer Lightning
globals
private constant integer raw = 039;ANfl039;
endglobals
private struct TestStruct
unit dummy
unit caster
unit target
real tx
real ty
timer SlideTimer
endstruct
private function Conditions takes nothing returns boolean
return GetSpellAbilityId() == raw
endfunction
private function Effect takes real myX, real myY, unit Target returns nothing
local TestStruct data = TestStruct.create ()
local real x
local real y
local real x2
local real y2
local real real1 = 0
set x = myX + 300 * Cos((45) * bj_DEGTORAD)
set y = myY + 300 * Sin((45) * bj_DEGTORAD)
set x2 = myX + 300 * Cos((315) * bj_DEGTORAD)
set y2 = myY + 300 * Sin((315) * bj_DEGTORAD)
call TriggerSleepAction (1.00)
call TimedLightning ("CLPB", x2, y2, 0, myX, myY, 0, 2., true, 1, 0)
call TimedLightning ("CLPB", x, y, 0, myX, myY, 0, 2., true, 1, 0)
call BJDebugMsg("works")
call PauseUnit (Target,false)
call AddSpecialEffect("Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl",myX,myY)
endfunction
private function Slide takes nothing returns nothing
local TestStruct data = GetData (GetExpiredTimer ())
local real x = GetUnitX(data.dummy)
local real y = GetUnitY(data.dummy)
local real newX
local real newY
local real angle
local real distance
local real real1=45
local real x2
local real y2
set data.tx = GetUnitX(data.target)
set data.ty = GetUnitY(data.target)
set angle = Atan2(data.ty-y,data.tx-x)
set newX = x + 30 *Cos(angle)
set newY = y + 30 *Sin(angle)
call SetUnitPosition(data.dummy,newX,newY)
call AddSpecialEffect("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",newX,newY)
set distance=SquareRoot( (data.tx-x)*(data.tx-x) + (data.ty-y)*(data.ty-y) )
if distance < 50 then
call BJDebugMsg ("If works")
call PauseTimer (data.SlideTimer)
call ResetData (data.SlideTimer)
call DestroyTimer (data.SlideTimer)
call PauseUnit (data.target,true)
call Effect(data.tx, data.ty, data.target)
call data.destroy ()
endif
endfunction
private function Actions takes nothing returns nothing
local TestStruct data = TestStruct.create ()
local unit Unit = GetTriggerUnit()
local real real1 = GetUnitFacing(GetTriggerUnit())
local real x = GetUnitX(GetTriggerUnit())
local real y = GetUnitY(GetTriggerUnit())
local real x2 = x + 300 * Cos((real1+145)*bj_DEGTORAD)
local real y2 = y + 300 * Sin((real1+145)*bj_DEGTORAD)
local real x3 = x + 300 * Cos((real1+180)*bj_DEGTORAD)
local real y3 = y + 300 * Sin((real1+180)*bj_DEGTORAD)
local real x4 = x + 300 * Cos((real1+215)*bj_DEGTORAD)
local real y4 = y + 300 * Sin((real1+215)*bj_DEGTORAD)
set data.SlideTimer = CreateTimer()
set data.target = (GetSpellTargetUnit())
call AddSpecialEffect("Abilities\\Spells\\NightElf\\Starfall\\StarfallCaster.mdl",x,y)
call TriggerSleepAction (0.1)
call AddSpecialEffect("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",x2,y2)
call AddSpecialEffect("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",x3,y3)
call AddSpecialEffect("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",x4,y4)
call AddSpecialEffect("Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl",x,y)
call PauseUnit (Unit, true)
call TimedLightning ("CLPB", x, y, 0, x2, y2, 0, 2., true, 1, 0)
call TimedLightning ("CLPB", x, y, 0, x3, y3, 0, 2., true, 1, 0)
call TimedLightning ("CLPB", x, y, 0, x4, y4, 0, 2., true, 1, 0)
call TriggerSleepAction (1)
set data.dummy = CreateUnit (GetOwningPlayer(Unit),039;h001039;,x,y,0)
call SetUnitPathing(data.dummy, false )
call PauseUnit (Unit, false)
call TimerStart (data.SlideTimer,0.05,true, function Slide)
call SetData (data.SlideTimer, data)
set Unit = null
endfunction
//===========================================================================
private function SafeFilt takes nothing returns boolean
return true
endfunction
private function Lightning takes nothing returns nothing
local trigger trig = CreateTrigger()
local integer i = 0
loop
exitwhen i > 15
call TriggerRegisterPlayerUnitEvent(trig,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,Condition(function SafeFilt))
set i = i + 1
endloop
call TriggerAddCondition (trig, Condition (function Conditions ) )
call TriggerAddAction (trig, function Actions )
set trig = null
endfunction
endscope
local TestStruct data = TestStruct.create ()
2: It's there to declare the struct?
library Debug
globals
debug constant string debugtag = "|cffff0303DEBUG: "
debug constant string end = "|r"
endglobals
function DebugMSG takes string MSG returns nothing
debug call DisplayTimedTextToPlayer( GetLocalPlayer() , 0 , 0 , 60 , debugtag + MSG + end )
endfunction
function DebugTAG takes string MSG , real x , real y returns nothing
debug local texttag TAG = CreateTextTag()
debug set MSG = debugtag + MSG + end
debug call SetTextTagText ( TAG , MSG , 0.23 )
debug call SetTextTagVelocity ( TAG , 0 , 0.71 / 25 )
debug call SetTextTagPermanent( TAG , false )
debug call SetTextTagLifespan ( TAG , 40 )
debug call SetTextTagFadepoint( TAG , 35 )
debug call SetTextTagPos ( TAG , x , y , 0 )
debug set TAG = null
endfunction
//! textmacro DebugArray takes ARRAY , CONVERTER
function Debug$ARRAY$ takes integer start, integer end returns nothing
debug local integer iterator = start
debug loop
debug exitwhen iterator > end
debug call DebugMSG( $CONVERTER$( $ARRAY$[iterator] ) )
debug set iterator = iterator + 1
debug endloop
endfunction
//! endtextmacro
endlibrary
call DebugMSG( R2S( x ) )
set distance = SquareRoot( (data.tx-x)*(data.tx-x) + (data.ty-y)*(data.ty-y) )
set distance = SquareRoot( (x-data.tx)*(x-data.tx) + (y-data.ty)*(y-data.ty) )
Just a wildshot: Try to change the order of these ones:
JASS:set distance = SquareRoot( (data.tx-x)*(data.tx-x) + (data.ty-y)*(data.ty-y) )
To this:
JASS:set distance = SquareRoot( (x-data.tx)*(x-data.tx) + (y-data.ty)*(y-data.ty) )
Set UnitGroup = (Units within 512.00 of (Center of (Playable map area)) matching ((((Matching unit) is alive) Equal to True) and (((Matching unit) belongs to an enemy of Player 1 (Red)) Equal to True)))
call IssueImmediateOrderBJ( GetTriggerUnit(), "thunderclap" )
native IssueImmediateOrder takes unit whichUnit, string order returns boolean
function Trig_x_Func001002003001 takes nothing returns boolean
return ( IsUnitAliveBJ(GetFilterUnit()) == true )
endfunction
function Trig_x_Func001002003002 takes nothing returns boolean
return ( IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(GetTriggerUnit())) == true )
endfunction
function Trig_x_Func001002003 takes nothing returns boolean
return GetBooleanAnd( Trig_x_Func001002003001(), Trig_x_Func001002003002() )
endfunction
function Trig_x_Actions takes nothing returns nothing
set udg_z = GetUnitsInRangeOfLocMatching(512, GetUnitLoc(GetTriggerUnit()), Condition(function Trig_x_Func001002003))
endfunction
library HAILInit requires HAIL
//! runtextmacro HAIL_CreateProperty ("Data", "integer", "")
endlibrary
scope Lightnings initializer Lightning
globals
private constant integer raw = 039;A001039;
endglobals
private struct TestStruct
unit dummy
unit caster
unit target
real tx
real ty
timer SlideTimer
endstruct
private function Conditions takes nothing returns boolean
return GetSpellAbilityId() == raw
endfunction
//Here?
private function Effect takes real myX, real myY, unit Target returns nothing
local real x
local real y
local real x2
local real y2
local real real1 = 0
local unit dummy
set x = myX + 300 * Cos((45) * bj_DEGTORAD)
set y = myY + 300 * Sin((45) * bj_DEGTORAD)
set x2 = myX + 300 * Cos((315) * bj_DEGTORAD)
set y2 = myY + 300 * Sin((315) * bj_DEGTORAD)
call TimedLightning ("CLPB", x2, y2, 0, myX, myY, 0, 2., true, 1, 0)
call TimedLightning ("CLPB", x, y, 0, myX, myY, 0, 2., true, 1, 0)
set x = myX + 300 * Cos((125) * bj_DEGTORAD)
set y = myY + 300 * Sin((125) * bj_DEGTORAD)
set x2 = myX + 300 * Cos((225) * bj_DEGTORAD)
set y2 = myY + 300 * Sin((225) * bj_DEGTORAD)
call TimedLightning ("CLPB", x2, y2, 0, myX, myY, 0, 2., true, 1, 0)
call TimedLightning ("CLPB", x, y, 0, myX, myY, 0, 2., true, 1, 0)
call BJDebugMsg("wait works")
call PauseUnit(Target,false)
call AddSpecialEffect("Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl",myX,myY)
endfunction
local effect special1
set special1 = AddSpecialEffect("Abilities\\Spells\\NightElf\\Starfall\\StarfallCaster.mdl",x,y)
call DestroyEffect(udg_special1)