2 questions

Sonic

New Member
Reaction score
10
1 What is handle attach system is?
2 How to check that the unit is not moving or moving?
 

Ayanami

칼리
Reaction score
288
1) I don't quite understand what you're trying to ask.

2) Using X Y would be the easiest method. Periodically, just get the Unit X and Y then store it in a variable or a hashtable, or whatever. Then, check if the current X and Y are equal. If not, then the unit moved. If it's equal, then the unit is stationary.
 

Sonic

New Member
Reaction score
10
Yes I know how to store the x and y, but how to check the current position in periodic event trigger. Using wait actions?
 

Laiev

Hey Listen!!
Reaction score
188
1 What is handle attach system is?
2 How to check that the unit is not moving or moving?

Handle attach system is basic a way to save handle, for example in a periodic trigger which you need restore some point/unit, you can use the system to save then when the spell/map initialize and then restore then when you need

is basically a hashtable

Yes I know how to store the x and y, but how to check the current position in periodic event trigger. Using wait actions?

using struct you can save the default value when you create the struct, then, just check periodic, something like this:

JASS:
struct data
    real x
    real y
    unit u
endstruct

function callback takes nothing returns boolean
    local data d = KT_GetData()

    if d.x != GetUnitX(d.u) and d.y != GetUnitY(d.u) then
        call d.destroy()
        return true
    endif

    return false
endfunction
function init takes nothing returns nothing
    local data d = data.create()
    set d.u = GetTriggerUnit()
    set d.x = GetUnitX(d.u)
    set d.y = GetUnitY(d.u)
    call KT_Add(function callback, d, .05)
endfunciton
 

Ayanami

칼리
Reaction score
288
Yes I know how to store the x and y, but how to check the current position in periodic event trigger. Using wait actions?

Periodically, like every 0.10 seconds, check the unit's X and Y by using GetUnitX and GetUnitY. Store this value in a hashtable or a variable. Then just compare the X and Y periodically. Something like this. You would need to initialize a hashtable called "Hash". You need a unit variable, "MyUnit".
Trigger:
  • Trigger
    • Events
      • Time - Every 0.10 seconds of game time
    • Conditions
    • Actions
      • Custom script: local real Id
      • Custom script: local real array X
      • Custom script: local real array Y
      • Set MyUnit = <Your unit>
      • Custom script: set Id = GetHandleId(udg_MyUnit)
      • Custom script: if not HaveSavedReal(udg_Hash, Id, 0) then
      • Custom script: set X[0] = GetUnitX(udg_MyUnit)
      • Custom script: set Y[0] = GetUnitY(udg_MyUnit)
      • Custom script: else
      • Custom script: set X[0] = LoadReal(udg_Hash, Id, 0)
      • Custom script: set Y[0] = LoadReal(udg_Hash, Id, 0)
      • Custom script: endif
      • Custom script: set X[1] = GetUnitX(udg_MyUnit)
      • Custom script: set Y[1] = GetUnitY(udg_MyUnit)
      • Custom script: if X[0] == X[1] and Y[0] == Y[1] then
      • <Insert actions here for if the unit is stationary>
      • Custom script: else
      • <Insert actions here for if the unit moved>
      • Custom script: endif
      • Custom script: call SaveReal(udg_Hash, Id, 0, X[1])
      • Custom script: call SaveReal(udg_Hash, Id, 1, Y[1])


Just use this action after you're done with checking movement speed.

Trigger:
  • Custom script: call FlushChildHashtable(udg_Hash, Id)


But seriously, this looks really ugly in GUI. Might as well do it in JASS like given above.
 
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