custom script XD

demotry241

Don't Ever Categorize Yourself.
Reaction score
105
I recently at long last installed jass newgen pack 1.5a on secondary comp and will be learning later.

but for now.. i have a problem regarding this.

Code:
Untitled Trigger 001
    Events
        Time - Every 0.10 seconds of game time
    Conditions
    Actions
        Custom script:   local real x
        Custom script:   local real y
        Unit Group - Pick every unit in (Units in (Playable map area)) and do (Actions)
            Loop - Actions
                Set offset = ((Position of (Picked unit)) offset by 0.00 towards (Facing of (Picked unit)) degrees)
                Custom script:   set x = GetLocationX(udg_offset)
                Custom script:   set y = GetLocationY(udg_offset)
                Custom script:   call SetUnitX(GetEnumUnit(),x)
                Custom script:   call SetUnitY(GetEnumUnit(),y)

when I try to save it gives an error regarding

line 77: Undeclared variable x
line 78: Undeclared variable y


which i don't quite get... please help : )
 

demotry241

Don't Ever Categorize Yourself.
Reaction score
105
oh so the custom scripts below the action

local real x
and
local real y is forgotten then?
 

Expelliarmus

Where to change the sig?
Reaction score
48
woah.. srry wasn't looking properly..
Anyways, you don't need the locals...
Do
Custom script: call SetUnitX(GetEnumUnit(), GetLocationX(udg_offset))
Custom script: call SetUnitY(GetEnumUnit(), GetLocationY(udg_offset))
 

Expelliarmus

Where to change the sig?
Reaction score
48
Why local isn't declared?
Well when World Editor compiles the GUI code,
Unit Group - Pick every unit becomes to ForGroup(BJ).
ForGroup requires a code callback, a function, so
Set offset = Posi
set x = GetLocationX..
is in a new function. The compiled GUI code here should look something like this when purely converted

JASS:
function Trig_Untitled_Trigger_001_Func003A takes nothing returns nothing
    set udg_offset = PolarProjectionBJ(GetUnitLoc(GetEnumUnit()) , 0.00 , GetUnitFacing(GetEnumUnit()))
    set x = GetLocationX(udg_offset)
    set y = GetLocationY(udg_offset)
    call SetUnitX(GetEnumUnit() , x)
    call SetUnitY(GetEnumUnit() , y)
endfunction

function Trig_Untitled_Trigger_001_Actions takes nothing returns nothing
    local real x
    local real y
    call ForGroupBJ(GetUnitsInRectAll(GetPlayableMapRect()) , function Trig_Untitled_Trigger_001_Func003A)
endfunction


In Trig_Untitled_Trigger_001_Func003A, there is no local declaration.
 

demotry241

Don't Ever Categorize Yourself.
Reaction score
105
I see.. so since there was no declaration on the corresponding function, it will be nullified.


will your response in post #2 work then?

changing set x = to local real x =
 

Expelliarmus

Where to change the sig?
Reaction score
48
No, locals can only be declared at the top of a function. Remember you have set offset = ...? Either turn that one into a local or just use SetUnitx(Get...., GetLocationX)
 

demotry241

Don't Ever Categorize Yourself.
Reaction score
105
JASS:
function Trig_Untitled_Trigger_001_Func001A takes nothing returns nothing
    local real x
    local real y

    set udg_offset = PolarProjectionBJ(GetUnitLoc(GetEnumUnit()), 3.00, GetUnitFacing(GetEnumUnit()))
    set x = GetLocationX(udg_offset)
    set y = GetLocationY(udg_offset)
    call SetUnitX(GetEnumUnit(),x)
    call SetUnitY(GetEnumUnit(),y)
endfunction

function Trig_Untitled_Trigger_001_Actions takes nothing returns nothing
    call ForGroupBJ( GetUnitsInRectAll(GetPlayableMapRect()), function Trig_Untitled_Trigger_001_Func001A )
endfunction

//===========================================================================
function InitTrig_Untitled_Trigger_001 takes nothing returns nothing
    set gg_trg_Untitled_Trigger_001 = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Untitled_Trigger_001, 0.10 )
    call TriggerAddAction( gg_trg_Untitled_Trigger_001, function Trig_Untitled_Trigger_001_Actions )
endfunction


Expelliarmus, thank you. I tinkered my way at the moment and now it works :)
 

Expelliarmus

Where to change the sig?
Reaction score
48
JASS:
  local real x
    local real y

    set udg_offset = PolarProjectionBJ(GetUnitLoc(GetEnumUnit()), 3.00, GetUnitFacing(GetEnumUnit()))
    set x = GetLocationX(udg_offset)
    set y = GetLocationY(udg_offset)
    call SetUnitX(GetEnumUnit(),x)
    call SetUnitY(GetEnumUnit(),y)

JASS:
    //optimization... turning location into x, y (removing polarprojectionbj, getunitloc) will extend this even more. that's if you want it to ^_^
    local unit u = GetEnumUnit()
    local real offset = PolarProjectionBJ(GetUnitLoc(u), 3.00, GetUnitFacing(u)) 
    local real x = GetLocationX(offset)
    local real y = = GetLocationY(offset)
 
    call SetUnitX(u, x)
    call SetUnitY(u, y)
    set u = null

:)
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top