Ok so I ran into some strange problems (to me anyway) when coding the last part of my spell.
First of all, I get the strange error that says "data is not of a type that allows .syntax" and the normal "syntax error"
Also don't you call a function like this?
Whole code
First of all, I get the strange error that says "data is not of a type that allows .syntax" and the normal "syntax error"
JASS:
private function Effect takes nothing returns nothing
local real x
local real y
local real real1
set real x = data.x + 300 * Cos((real1+45)*bj_DEGTORAD) //Syntax error
set real y = data.y + 300 * Sin((real1+45)*bj_DEGTORAD) //Syntax error
call TriggerSleepAction (1.00)
call BJDebugMsg("works")
call PauseUnit (data.target,false) //data is not of a type that allows .syntax
call AddSpecialEffect("Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl",data.tx,data.ty) //data is not of a type that allows .syntax
endfunction
Also don't you call a function like this?
JASS:
call Effect
Whole code
JASS:
library HAILInit requires HAIL
//! runtextmacro HAIL_CreateProperty ("Data", "integer", "")
endlibrary
scope Lightnings initializer Lightning
globals
private constant integer raw = 039;AHtb039;
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 nothing returns nothing
local real x
local real y
set real x = data.x + 300 * Cos((real1+45)*bj_DEGTORAD)
set real y = data.y + 300 * Sin((real1+45)*bj_DEGTORAD)
call TriggerSleepAction (1.00)
call BJDebugMsg("works")
//call PauseUnit (data.target,false)
//call AddSpecialEffect("Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl",data.tx,data.ty)
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)
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 data.destroy ()
call ResetData (data.SlideTimer)
call DestroyTimer (data.SlideTimer)
call PauseUnit (data.target,true)
call Effect
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 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;h000039;,x,y,0)
call SetUnitPathing(data.dummy, false )
call PauseUnit (Unit, false)
call TimerStart (data.SlideTimer,0.1,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