- Joined
- Apr 17, 2017
- Messages
- 316
This includes both part 1 and 2
JASS:
scope Wanderer initializer init
globals
private hashtable h
endglobals
public function periodic takes nothing returns nothing
local timer t = GetExpiredTimer()
local group tempgroup = CreateGroup()
local real ang
local real dist
local real x
local real y
local unit tempunit
local integer id
local unit gryid
set x = LoadReal(h, GetHandleId(t), 0)
set y = LoadReal(h, GetHandleId(t), 1)
call GroupEnumUnitsInRange(tempgroup, x, y, 50.00, null)
loop
set tempunit = FirstOfGroup(tempgroup)
set id = GetHandleId(tempunit)
set gryid = LoadUnitHandle(h, GetHandleId(t), 2)
exitwhen tempunit == null
if tempunit == gryid then
call SetTerrainType(LoadReal(h, GetHandleId(t), 0), LoadReal(h, GetHandleId(t), 1), LoadInteger(h, GetHandleId(t), 4), LoadInteger(h, GetHandleId(t), 3), 1, 0)
set dist = GetRandomReal(500.00, 1500.00)
set ang = GetRandomReal(0.00, 360)*bj_PI/180
set x = GetUnitX(tempunit)+dist*Cos(ang)
set y = GetUnitY(tempunit)+dist*Sin(ang)
call IssuePointOrderById(tempunit, 851986, x, y)
call GroupRemoveUnit(tempgroup, tempunit)
call PauseTimer(t)
endif
endloop
call DestroyGroup(tempgroup)
set tempgroup = null
set tempunit = null
set t = null
endfunction
public function actions takes nothing returns boolean
local timer t
local integer order_id
local real orderx
local real ordery
local integer getrandomint
local integer terraintype
local real ang = GetRandomReal(0.00, 360)*bj_PI/180
local real dist = GetRandomReal(500.00, 1500.00)
local real a
local real b
set orderx = GetOrderPointX()
set ordery = GetOrderPointY()
if RectContainsCoords(GetPlayableMapRect(), orderx, ordery) == false then
call BJDebugMsg("Unit tried to move an area outside the map. Ordering unit to move again.")
set a = GetUnitX(GetTriggerUnit())+dist*Cos(ang)
set b = GetUnitY(GetTriggerUnit())+dist*Sin(ang)
call IssuePointOrderById(GetTriggerUnit(), 851986, a, b)
endif
set order_id = GetIssuedOrderId()
if order_id == 851986 then
set t = CreateTimer()
call SaveReal(h, GetHandleId(t), 0, orderx)
call SaveReal(h, GetHandleId(t), 1, ordery)
call SaveUnitHandle(h, GetHandleId(t), 2, GetTriggerUnit())
set getrandomint = GetRandomInt(0,2)
set terraintype = GetTerrainType(orderx, ordery)
call SaveInteger(h, GetHandleId(t), 3, getrandomint)
call SaveInteger(h, GetHandleId(t), 4, terraintype)
call SetTerrainType(LoadReal(h, GetHandleId(t), 0), LoadReal(h, GetHandleId(t), 1), 'Nsnw', getrandomint, 1, 0)
call TimerStart(t, 0.30, true, function periodic)
set t = null
endif
return false
endfunction
public function init takes nothing returns nothing
local real ang = GetRandomReal(0.00, 360)*bj_PI/180
local real dist = GetRandomReal(500.00, 1500.00)
local real a
local real b
local unit Gryphon
local trigger t
set h = InitHashtable()
set t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER)
call TriggerAddCondition(t, Condition(function actions))
set Gryphon = CreateUnit(Player(0), 'hgry', 0.00, 0.00, 0.00)
set a = GetUnitX(Gryphon)+dist*Cos(ang)
set b = GetUnitY(Gryphon)+dist*Sin(ang)
call IssuePointOrderById(Gryphon, 851986, a, b)
set Gryphon = null
set t = null
endfunction
endscope