function ChallengeOne_Timer takes nothing returns nothing
local integer i = 0
local integer ki
local player p
local location l
loop
exitwhen i > 10
set p = Player(i)
if udg_chall1[i] == true then
set udg_rr[i] = udg_rr[i] - 0.05
if udg_rr[i] <= 0 then
if udg_chall1check[i] == true then
set udg_chall1check[i] = false
set udg_chall1lev[i] = udg_chall1lev[i] + 1
if udg_kicon[i] == false then
set udg_chall1in[i] = udg_chall1in[i] - 1
if udg_chall1in[i] == 0 then
set udg_Lives[i] = udg_Lives[i] - 1
call DisplayTimedTextToPlayer(p,0,0,10,"Challenge Failed! -1 Life")
set udg_chall1[i] = false
call PauseUnit(udg_Hero[i],false)
set l = GetRandomLocInRect(gg_rct_Maze_2_Start)
call SetUnitPositionLoc(udg_Hero[i],l)
set udg_chp[i] = gg_rct_Maze_2_Start
call UnitRemoveAbility(udg_Hero[i],'A001')
call UnitRemoveAbility(udg_Hero[i],'A002')
call UnitRemoveAbility(udg_Hero[i],'A003')
call UnitRemoveAbility(udg_Hero[i],'A004')
call PanCameraToForPlayer(Player(i),GetLocationX(l),GetLocationY(l))
call RemoveLocation(l)
call TriggerSleepAction(2.00)
call PauseUnit(udg_Hero[i],false)
endif
if udg_kicon2[i] == true then
else
call DisplayTimedTextToPlayer(p,0,0,3,"Failed!")
call PauseUnit(udg_Hero[i],true)
endif
endif
endif
if udg_chall1lev[i] == 9 and udg_chall1[i] == true then
set udg_chall1[i] = false
call DisplayTimedTextToPlayer(p,0,0,20,"Challenge Success!")
call SetHeroLevel(udg_Hero[i],GetHeroLevel(udg_Hero[i])+1,true)
call PauseUnit(udg_Hero[i],false)
set l = GetRandomLocInRect(gg_rct_Maze_2_Start)
call SetUnitPositionLoc(udg_Hero[i],l)
set udg_chp[i] = gg_rct_Maze_2_Start
call UnitRemoveAbility(udg_Hero[i],'A001')
call UnitRemoveAbility(udg_Hero[i],'A002')
call UnitRemoveAbility(udg_Hero[i],'A003')
call UnitRemoveAbility(udg_Hero[i],'A004')
call PanCameraToForPlayer(Player(i),GetLocationX(l),GetLocationY(l))
call RemoveLocation(l)
call TriggerSleepAction(2.00)
call PauseUnit(udg_Hero[i],false)
endif
set udg_rrest[i] = udg_rrest[i] - 0.05
if udg_rrest[i] <= 0 and udg_chall1[i] == true then
call ClearTextMessagesBJ(GetForceOfPlayer(Player(i)))
call PauseUnit(udg_Hero[i],false)
set ki = GetRandomInt(1,4)
if ki == 1 then
set udg_kibase[i] = ki
call DisplayTimedTextToPlayer(Player(i),0,0,2,"Press M")
elseif ki == 2 then
set udg_kibase[i] = ki
call DisplayTimedTextToPlayer(Player(i),0,0,2,"Press W")
elseif ki == 3 then
set udg_kibase[i] = ki
call DisplayTimedTextToPlayer(Player(i),0,0,2,"Press C")
elseif ki == 4 then
set udg_kibase[i] = ki
call DisplayTimedTextToPlayer(Player(i),0,0,2,"Press U")
endif
set udg_rr[i] = 2. - (0.2 * I2R(udg_chall1lev[i]))
set udg_rrest[i] = 2.
set udg_kicon[i] = false
set udg_kicon2[i] = false
set udg_chall1check[i] = true
endif
endif
endif
set i = i + 1
set p = null
set l = null
endloop
endfunction
//-----------------------------------------------------------------------------------------------------------------
function Jumping takes nothing returns nothing
local integer i = 1
local location l
local real r = 25.5
local real r2
if udg_JumpInt == 0 then
return
endif
loop
exitwhen i > udg_JumpInt
set udg_JumpTm[i] = udg_JumpTm[i] + 0.05
set l = PolarProjectionBJ(GetUnitLoc(udg_JumpUn[i]),r,udg_JumpDr[i])
call SetUnitPositionLoc(udg_JumpUn[i],l)
call RemoveLocation(l)
set l = null
if udg_JumpTm[i] == 0.5 then
call SetUnitInvulnerable(udg_JumpUn[i],false)
set udg_OnMaze[GetPlayerId(GetOwningPlayer(udg_JumpUn[i]))] = true
set udg_JumpDr[i] = udg_JumpDr[udg_JumpInt]
set udg_JumpUn[i] = udg_JumpUn[udg_JumpInt]
set udg_JumpTm[i] = udg_JumpTm[udg_JumpInt]
set udg_JumpUn[udg_JumpInt] = null
set udg_JumpInt = udg_JumpInt - 1
set i = i - 1
endif
set i = i + 1
endloop
endfunction
//--------------------------------------------------------------------------------------------------------------------
function Challenge2Loop takes nothing returns nothing
local rect p = gg_rct_Challenge_2
local real array x
local real array y
local integer i = 0
local integer i2 = 1
local unit u
local location l
loop
exitwhen i > 10
if udg_chall2[i] == true then
if GetUnitState(udg_Hero[i],UNIT_STATE_LIFE) > 0 then
set udg_chall2tm[i] = udg_chall2tm[i] + 1
call DisplayTimedTextToPlayer(Player(i),0,0,3,I2S(udg_chall2tm[i])+"/55")
if udg_chall2tm[i] >= 55 then
set udg_chall2[i] = false
set udg_chp[i] = gg_rct_Maze_3_Start
set l = GetRandomLocInRect(gg_rct_Maze_3_Start)
call SetUnitPositionLoc(udg_Hero[i],l)
call PanCameraToForPlayer(Player(i),GetLocationX(l),GetLocationY(l))
call RemoveLocation(l)
call BlzSetUnitAbilityCooldown(udg_Hero[i],'A005',0,0.9)
call SetHeroLevel(udg_Hero[i],GetHeroLevel(udg_Hero[i])+1,true)
call DisplayTimedTextToPlayer(Player(i),0,0,15,"Challenge Success!")
endif
endif
endif
set i = i + 1
endloop
set i = 1
loop
exitwhen i > 5
set x[i2] = GetRectMinX(p)
set y[i2] = GetRandomReal(GetRectMinY(p),GetRectMaxY(p))
set i = i + 1
set i2 = i2 + 1
endloop
set i = 1
set i2 = 11
loop
exitwhen i > 5
set x[i2] = GetRectMaxX(p)
set y[i2] = GetRandomReal(GetRectMinY(p),GetRectMaxY(p))
set i = i + 1
set i2 = i2 + 1
endloop
set i = 1
set i2 = 21
loop
exitwhen i > 4
set x[i2] = GetRandomReal(GetRectMinX(p),GetRectMaxX(p))
set y[i2] = GetRectMinY(p)
set i = i + 1
set i2 = i2 + 1
endloop
set i = 1
set i2 = 31
loop
exitwhen i > 4
set x[i2] = GetRandomReal(GetRectMinX(p),GetRectMaxX(p))
set y[i2] = GetRectMaxY(p)
set i = i + 1
set i2 = i2 + 1
endloop
set i = 1
loop
exitwhen i > 5
set u = CreateUnit(Player(11),'e001',x[i],y[i],0)
call IssuePointOrder(u,"move",x[11],y[GetRandomInt(11,15)])
call UnitApplyTimedLife(u,'BTLF',6.0)
set i = i + 1
endloop
set i = 11
loop
exitwhen i > 15
set u = CreateUnit(Player(11),'e001',x[i],y[i],0)
call IssuePointOrder(u,"move",x[1],y[GetRandomInt(1,5)])
call UnitApplyTimedLife(u,'BTLF',6.0)
set i = i + 1
endloop
set i = 21
loop
exitwhen i > 24
set u = CreateUnit(Player(11),'e001',x[i],y[i],0)
call IssuePointOrder(u,"move",x[GetRandomInt(31,34)],y[31])
call UnitApplyTimedLife(u,'BTLF',6.0)
set i = i + 1
endloop
set i = 31
loop
exitwhen i > 34
set u = CreateUnit(Player(11),'e001',x[i],y[i],0)
call IssuePointOrder(u,"move",x[GetRandomInt(21,24)],y[21])
call UnitApplyTimedLife(u,'BTLF',6.0)
set i = i + 1
endloop
set p = null
set u = null
set l = null
endfunction
//------------------------------------------------------------------------------------------------------
function chall4loop takes nothing returns nothing
local integer i = 0
local unit u
loop
exitwhen i > 10
if udg_chall4[i] == true and udg_chall4tm[i] < 60 then
set udg_chall4tm[i] = udg_chall4tm[i] + 1
if udg_chall4tm[i] >= 60 then
call DestroyTimerDialog(udg_chall4tim[i])
set u = CreateUnit(Player(11),'hcth',GetRectCenterX(udg_spawn[i]),GetRectCenterY(udg_spawn[i]),0)
call IssuePointOrder(u,"move",GetRectCenterX(udg_end[i]),GetRectCenterY(udg_end[i]))
endif
endif
set i = i + 1
endloop
set u = null
endfunction
//-------------------------------------------------------------------------------------------------------------------
function fireTrig takes nothing returns nothing
local integer i = 0
local unit u
loop
exitwhen i > fi2
set u = CreateUnitAtLoc(Player(11),'h007',fire[i],0)
call UnitApplyTimedLife(u,'BTLF',1)
set i = i + 1
endloop
set u = null
endfunction
//---------------------------------------------------------------------------------------------------------------------
function multiboarding takes nothing returns nothing
local integer i = 0
loop
exitwhen i > 10
call MultiboardSetItemValue(mpl[i],"|c006969FF"+I2S(udg_Lives[i]))
call MultiboardSetItemValue(mph[i],"|c00FF7F00"+I2S(GetHeroLevel(udg_Hero[i])))
if udg_Lives[i] <= 0 and udg_Hero[i] != null then
if finish[i] == true then
call MultiboardSetItemValue(mpc[i],"|c0096FF96Finished|r/|c00FF0000Lost")
else
call MultiboardSetItemValue(mpc[i],"|c00FF0000Lost")
endif
endif
if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_EMPTY or GetPlayerController(Player(i)) == MAP_CONTROL_COMPUTER then
call MultiboardSetItemValue(mpc[i],"|c00FF0000Not Playing")
endif
set i = i + 1
endloop
endfunction
//---------------------------------------------------------------------------------------------------
function gtime takes nothing returns nothing
set time = time + 1
set sec = sec + 1
if sec >= 60 then
set sec = 0
set min = min + 1
endif
call MultiboardSetTitleText(mb,"Time Elapsed: "+I2S(min)+":"+I2S(sec))
endfunction
Name | Type | is_array | initial_value |
boolean1 | boolean | No | |
boolean2 | boolean | No | |
boolean3 | boolean | No | |
chall1 | boolean | Yes | |
chall1check | boolean | Yes | |
chall1in | integer | Yes | 3 |
chall1lev | integer | Yes | |
chall2 | boolean | Yes | |
chall2in | integer | Yes | |
chall2tm | integer | Yes | |
chall4 | boolean | Yes | |
chall4tim | timerdialog | Yes | |
chall4tm | integer | Yes | |
chp | rect | Yes | |
end | rect | Yes | |
EndDirection | integer | Yes | |
Hero | unit | Yes | |
ii | integer | No | |
JumpDr | real | Yes | |
JumpInt | integer | No | |
JumpTm | real | Yes | |
JumpUn | unit | Yes | |
kiattempt | integer | Yes | |
kibase | integer | Yes | |
kicon | boolean | Yes | |
kicon2 | boolean | Yes | |
Lives | integer | Yes | |
Matrix | hashtable | Yes | |
NumberOfRegions | integer | No | |
OnMaze | boolean | Yes | |
ParamEnd | integer | No | |
ParamIndex | integer | No | |
ParamRegion | rect | No | |
ParamStart | integer | No | |
PathBlockEvent | real | No | |
PathBlockUnit | unit | No | |
PathCoordinates | integer | Yes | |
ProgressIndex | integer | No | |
Progressing | boolean | No | |
ProgressPath | integer | Yes | |
ProgressStatus | integer | Yes | |
ProgressUnit | unit | Yes | |
Region | rect | Yes | |
RegionHeight | integer | Yes | |
RegionWidth | integer | Yes | |
ReviveTimer | real | Yes | |
rr | real | Yes | |
rrest | real | Yes | |
spawn | rect | Yes | |
StartDirection | integer | Yes | |
udg_chall4tim | timerdialog | Yes | |
unit | unit | No |
globals
string array color
endglobals
function Mazing_Actions takes nothing returns nothing
local integer i = 0
local location l
local location l2 = null
local unit u
loop
exitwhen i > 10
set u = udg_Hero[i]
if GetUnitState( u, UNIT_STATE_LIFE) <= 0 and u != null then
set udg_ReviveTimer[i] = udg_ReviveTimer[i] + 0.05
if udg_ReviveTimer[i] >= 5 then
if udg_chall2[i] == true then
set udg_chall2in[i] = udg_chall2in[i] - 1
call DisplayTimedTextToPlayer(Player(i),0,0,10,"1 chance lost. Remaining: "+I2S(udg_chall2in[i]))
set l2 = GetRandomLocInRect(gg_rct_Challenge_2)
call ReviveHeroLoc(u, l2, true)
call PanCameraToTimedForPlayer(Player(i),GetLocationX(l2),GetLocationY(l2),0.1)
set udg_ReviveTimer[i] = 0
if udg_chall2in[i] == 0 then
set udg_Lives[i] = udg_Lives[i] - 1
call DisplayTimedTextToPlayer(Player(i),0,0,15,"You lost the challenge. Lost 1 life")
call BlzSetUnitAbilityCooldown(udg_Hero[i],'A005',0,0.9)
set udg_chp[i] = gg_rct_Maze_3_Start
call SetUnitPositionLoc(u, GetRandomLocInRect(udg_chp[i]))
set udg_ReviveTimer[i] = 0
set udg_chall2[i] = false
if udg_Lives[i] == 0 then
call DisplayTimedTextToPlayer(Player(i),0,0,60,"You have lost the game! However, you can continue playing!|n join RC discord to see when the next one is hosted and get another chance! https://discord.gg/NxNqhQm")
endif
call RemoveLocation(l2)
endif
else
set l2 = GetRandomLocInRect(udg_chp[i])
call ReviveHeroLoc(u, l2, true)
set udg_ReviveTimer[i] = 0
call PanCameraToForPlayer(Player(i),GetLocationX(l2),GetLocationY(l2))
endif
endif
elseif udg_OnMaze[i] == true then
set l = GetUnitLoc(udg_Hero[i])
if GetTerrainTypeBJ(l) == 'Ydrt' then
call KillUnit(u)
set udg_Lives[i] = udg_Lives[i] - 1
if udg_Lives[i] >= 0 then
call DisplayTimedTextToPlayer(Player(i),0,0,15,"Lost 1 life!")
endif
if udg_Lives[i] == 0 then
call DisplayTimedTextToPlayer(Player(i),0,0,60,"You have lost the game! However, you can continue playing! join RC discord to see when the next one is hosted and get another chance! https://discord.gg/NxNqhQm")
endif
endif
call RemoveLocation(l)
endif
set i = i + 1
endloop
set l = null
set l2 = null
set u = null
endfunction
globals
multiboard mb
multiboarditem array mpp
multiboarditem array mpl
multiboarditem array mph
multiboarditem array mpc
multiboarditem array mp3
endglobals
function GameStartAc takes nothing returns nothing
local integer i = 0
call CinematicModeBJ(true,bj_FORCE_ALL_PLAYERS)
call CameraSetupApply(gg_cam_RC,true,false)
call TriggerSleepAction(8)
call SetCinematicScene('Hart',null,"|cff00ff00Game|r","|cffffff00Welcome to|r |cffff0000Reforged Creations|r |cffffff00Challenge Map I!|r",8,8)
call TriggerSleepAction(8)
call SetCinematicScene('Hart',null,"|cff00ff00Game|r","|cffd45e19This is a maze map with 3 different challenges. Challenges require fast reaction and good thinking. The maze needs accuracy and patience.|r",15,15)
call TriggerSleepAction(15)
call SetCinematicScene('Hvwd',null,"|cffffff00Game|r","|cff80ff80You start with |cff00ffff5|r |cff80ff80lives. If you die or fail a challenge, you lose |r|cff00ffff1|r|cff80ff80 life. Losing all lives results in losing the game|r,|cff00ffff however you can continue playing.|r|r",15,15)
call TriggerSleepAction(15)
call SetCinematicScene('Hvwd',null,"|cffffff00Game|r","|cff00ffffThis event will last for 2 weeks. Only 2 players can win the map each time. Winners from past games don't count. There's a maximum of 10 winners in general. Wins won't count in the absense of any Event Leaders (as Deadreyo)|r",18,18)
call TriggerSleepAction(18)
call SetCinematicScene('Usyl',null,"|cffd45e19Game|r","|cff00ff00Winning is not only determined by reaching first. It is also determined by Lives left and hero level. Winners get a special role in discord. When there are 10 winners, there will be a round to determine the ultimate winner (Top #1). |r",18,18)
call TriggerSleepAction(18)
call SetCinematicScene('Usyl',null,"|cffd45e19Game|r","Commands: -cam1 , -cam2 , -cam3 ",8,8)
call TriggerSleepAction(8)
call CameraSetupApply(gg_cam_GLHF,true,false)
call SetCinematicScene('Huth',null,"|cffd45e19Game|r","|cffff0000Now, let's start the game! GL HF|r",8,8)
call TriggerSleepAction(8)
call ResetToGameCamera(4)
call PanCameraTo(0,-8564)
call CinematicModeBJ(false,bj_FORCE_ALL_PLAYERS)
set bj_cineSceneBeingSkipped = null
call TimerStart(CreateTimer(), 0.05, true, function Mazing_Actions)
set mb = CreateMultiboardBJ(5,12,"Players' Stats")
call MultiboardSetItemWidth(MultiboardGetItem(mb,0,0),0.06)
call MultiboardSetItemWidth(MultiboardGetItem(mb,0,1),0.04)
call MultiboardSetItemWidth(MultiboardGetItem(mb,0,2),0.04)
call MultiboardSetItemWidth(MultiboardGetItem(mb,0,3),0.06)
call MultiboardSetItemWidth(MultiboardGetItem(mb,0,4),0.06)
call MultiboardSetItemStyle(MultiboardGetItem(mb,0,0),true,false)
call MultiboardSetItemStyle(MultiboardGetItem(mb,0,1),true,false)
call MultiboardSetItemStyle(MultiboardGetItem(mb,0,2),true,false)
call MultiboardSetItemStyle(MultiboardGetItem(mb,0,3),true,false)
call MultiboardSetItemStyle(MultiboardGetItem(mb,0,4),true,false)
call MultiboardSetItemValue(MultiboardGetItem(mb,0,0),"Players")
call MultiboardSetItemValue(MultiboardGetItem(mb,0,1),"Lives")
call MultiboardSetItemValue(MultiboardGetItem(mb,0,2),"Levels")
call MultiboardSetItemValue(MultiboardGetItem(mb,0,3),"Ch3 Score")
call MultiboardSetItemValue(MultiboardGetItem(mb,0,4),"Condition")
loop
exitwhen i > 10
set mpp[i] = MultiboardGetItem(mb,i+1,0)
set mpl[i] = MultiboardGetItem(mb,i+1,1)
set mph[i] = MultiboardGetItem(mb,i+1,2)
set mp3[i] = MultiboardGetItem(mb,i+1,3)
set mpc[i] = MultiboardGetItem(mb,i+1,4)
call MultiboardSetItemWidth(mpp[i],0.06)
call MultiboardSetItemWidth(mpl[i],0.04)
call MultiboardSetItemWidth(mph[i],0.04)
call MultiboardSetItemWidth(mp3[i],0.06)
call MultiboardSetItemWidth(mpc[i],0.06)
call MultiboardSetItemStyle(mpp[i],true,false)
call MultiboardSetItemStyle(mpl[i],true,false)
call MultiboardSetItemStyle(mph[i],true,false)
call MultiboardSetItemStyle(mp3[i],true,false)
call MultiboardSetItemStyle(mpc[i],true,false)
call MultiboardSetItemValue(mpp[i],color[i]+GetPlayerName(Player(i))+"|r")
call MultiboardSetItemValue(mpl[i],"5")
call MultiboardSetItemValue(mph[i],"1")
call MultiboardSetItemValue(mpc[i],"Playing")
set i = i + 1
endloop
call MultiboardDisplay(mb,false)
call MultiboardDisplay(mb, true)
call MultiboardMinimize(mb,false)
call TimerStart(CreateTimer(), 2, true, function multiboarding)
call BJDebugMsg("|c00FF0000Warning: Be careful from edges, they are buggy!")
endfunction
function InitTrig_GameStart takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterTimerEvent(t,1,false)
call TriggerAddAction(t,function GameStartAc)
set t = null
endfunction
globals
multiboard mb
multiboarditem array mpp
multiboarditem array mpl
multiboarditem array mph
multiboarditem array mpc
multiboarditem array mp3
endglobals
function GameStartAc takes nothing returns nothing
local integer i = 0
call TimerStart(CreateTimer(), 0.05, true, function Mazing_Actions)
set mb = CreateMultiboardBJ(5,12,"Players' Stats")
call MultiboardSetItemWidth(MultiboardGetItem(mb,0,0),0.06)
call MultiboardSetItemWidth(MultiboardGetItem(mb,0,1),0.04)
call MultiboardSetItemWidth(MultiboardGetItem(mb,0,2),0.04)
call MultiboardSetItemWidth(MultiboardGetItem(mb,0,3),0.06)
call MultiboardSetItemWidth(MultiboardGetItem(mb,0,4),0.06)
call MultiboardSetItemStyle(MultiboardGetItem(mb,0,0),true,false)
call MultiboardSetItemStyle(MultiboardGetItem(mb,0,1),true,false)
call MultiboardSetItemStyle(MultiboardGetItem(mb,0,2),true,false)
call MultiboardSetItemStyle(MultiboardGetItem(mb,0,3),true,false)
call MultiboardSetItemStyle(MultiboardGetItem(mb,0,4),true,false)
call MultiboardSetItemValue(MultiboardGetItem(mb,0,0),"Players")
call MultiboardSetItemValue(MultiboardGetItem(mb,0,1),"Lives")
call MultiboardSetItemValue(MultiboardGetItem(mb,0,2),"Levels")
call MultiboardSetItemValue(MultiboardGetItem(mb,0,3),"Ch3 Score")
call MultiboardSetItemValue(MultiboardGetItem(mb,0,4),"Condition")
loop
exitwhen i > 10
set mpp[i] = MultiboardGetItem(mb,i+1,0)
set mpl[i] = MultiboardGetItem(mb,i+1,1)
set mph[i] = MultiboardGetItem(mb,i+1,2)
set mp3[i] = MultiboardGetItem(mb,i+1,3)
set mpc[i] = MultiboardGetItem(mb,i+1,4)
call MultiboardSetItemWidth(mpp[i],0.06)
call MultiboardSetItemWidth(mpl[i],0.04)
call MultiboardSetItemWidth(mph[i],0.04)
call MultiboardSetItemWidth(mp3[i],0.06)
call MultiboardSetItemWidth(mpc[i],0.06)
call MultiboardSetItemStyle(mpp[i],true,false)
call MultiboardSetItemStyle(mpl[i],true,false)
call MultiboardSetItemStyle(mph[i],true,false)
call MultiboardSetItemStyle(mp3[i],true,false)
call MultiboardSetItemStyle(mpc[i],true,false)
call MultiboardSetItemValue(mpp[i],color[i]+"Player "+I2S(i+1)+"|r")
call MultiboardSetItemValue(mpl[i],"5")
call MultiboardSetItemValue(mph[i],"1")
call MultiboardSetItemValue(mpc[i],"Playing")
set i = i + 1
endloop
call MultiboardDisplay(mb,false)
call MultiboardDisplay(mb, true)
call MultiboardMinimize(mb,false)
call TimerStart(CreateTimer(), 2, true, function multiboarding)
call BJDebugMsg("|c00FF0000Warning: Be careful from edges, they are buggy!")
endfunction
function InitTrig_GameStart_Copy takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterTimerEvent(t,1,false)
call TriggerAddAction(t,function GameStartAc)
set t = null
endfunction
globals
integer fi = 0
unit array fu
location array fl
location array fire
integer fi2 = 0
integer time = 0
integer min = 0
integer sec = 0
endglobals
function Trig_Initialization_Actions takes nothing returns nothing
local integer i = 0
local group g
local unit u
set udg_spawn[0] = gg_rct_chall4sum0
set udg_spawn[1] = gg_rct_chall4sum1
set udg_spawn[2] = gg_rct_chall4sum2
set udg_spawn[3] = gg_rct_chall4sum3
set udg_spawn[4] = gg_rct_chall4sum4
set udg_spawn[5] = gg_rct_chall4sum5
set udg_spawn[6] = gg_rct_chall4sum6
set udg_spawn[7] = gg_rct_chall4sum7
set udg_spawn[8] = gg_rct_chall4sum8
set udg_spawn[9] = gg_rct_chall4sum9
set udg_spawn[10] = gg_rct_chall4sum10
set color[0] = "|c00FF0000"
set color[1] = "|c000042FF"
set color[2] = "|c001CE6B9"
set color[3] = "|c00540081"
set color[4] = "|c00FFFC01"
set color[5] = "|c00fEBA0E"
set color[7] = "|c00E55BB0"
set color[8] = "|c00959697"
set color[9] = "|c007EBFF1"
set color[10] = "|c00106246"
call IssuePointOrder(gg_unit_hfoo_0027,"patrol",8805,-6190)
call IssuePointOrder(gg_unit_hfoo_0030,"patrol",8829,-6007)
call IssuePointOrder(gg_unit_hfoo_0031,"patrol",8693,-5286)
call IssuePointOrder(gg_unit_hfoo_0045,"patrol",8704,-5176)
call IssuePointOrder(gg_unit_hfoo_0046,"patrol",8699,-5077)
call IssuePointOrder(gg_unit_hfoo_0057,"patrol",8816,-5500)
call IssuePointOrder(gg_unit_hfoo_0081,"patrol",9232,-5785)
call IssuePointOrder(gg_unit_hfoo_0049,"patrol",9230,-6392)
call IssuePointOrder(gg_unit_hfoo_0050,"patrol",8214,-6988)
call IssuePointOrder(gg_unit_hfoo_0048,"patrol",8686,-6349)
call IssuePointOrder(gg_unit_hfoo_0047,"patrol",8803,-6614)
call IssuePointOrder(gg_unit_hfoo_0051,"patrol",7781,-6749)
call IssuePointOrder(gg_unit_hfoo_0052,"patrol",8069,-6536)
call IssuePointOrder(gg_unit_hfoo_0056,"patrol",7720,-6177)
call IssuePointOrder(gg_unit_hfoo_0050,"patrol",7887,-5751)
call IssuePointOrder(gg_unit_hfoo_0081,"patrol",8124,-5511)
call IssuePointOrder(gg_unit_hfoo_0055,"patrol",8176,-4953)
call IssuePointOrder(gg_unit_hfoo_0053,"patrol",8117,-5369)
call IssuePointOrder(gg_unit_hfoo_0054,"patrol",8258,-4442)
call IssuePointOrder(gg_unit_hfoo_0060,"patrol",9343,-4334)
call IssuePointOrder(gg_unit_hfoo_0059,"patrol",9354,-2960)
call IssuePointOrder(gg_unit_hfoo_0058,"patrol",9352,-3022)
call IssuePointOrder(gg_unit_hfoo_0061,"patrol",8321,-2965)
call IssuePointOrder(gg_unit_hfoo_0062,"patrol",8320,-4029)
call IssuePointOrder(gg_unit_hfoo_0063,"patrol",8045,-3726)
call IssuePointOrder(gg_unit_hfoo_0064,"patrol",7617,-4133)
call IssuePointOrder(gg_unit_hfoo_0065,"patrol",7543,-4219)
call IssuePointOrder(gg_unit_hfoo_0066,"patrol",7521,-4823)
call IssuePointOrder(gg_unit_hfoo_0067,"patrol",7247,-4950)
call IssuePointOrder(gg_unit_hfoo_0068,"patrol",7317,-5063)
call IssuePointOrder(gg_unit_hfoo_0069,"patrol",7239,-5125)
call IssuePointOrder(gg_unit_hfoo_0070,"patrol",7115,-5234)
call IssuePointOrder(gg_unit_hfoo_0071,"patrol",7059,-5340)
call IssuePointOrder(gg_unit_hfoo_0072,"patrol",7460,-6277)
call IssuePointOrder(gg_unit_hfoo_0074,"patrol",7377,-6012)
call IssuePointOrder(gg_unit_hfoo_0073,"patrol",6936,-6579)
call IssuePointOrder(gg_unit_hfoo_0082,"patrol",6886,-6505)
call IssuePointOrder(gg_unit_hfoo_0075,"patrol",7770,-6839)
call IssuePointOrder(gg_unit_hfoo_0077,"patrol",7364,-7682)
call IssuePointOrder(gg_unit_hfoo_0078,"patrol",7586,-7389)
call IssuePointOrder(gg_unit_hfoo_0076,"patrol",7524,-7240)
call IssuePointOrder(gg_unit_hfoo_0083,"patrol",7332,-7383)
call IssuePointOrder(gg_unit_hfoo_0084,"patrol",7262,-7447)
call IssuePointOrder(gg_unit_hfoo_0085,"patrol",7206,-7514)
call IssuePointOrder(gg_unit_hfoo_0150,"patrol",3239,-3959)
call IssuePointOrder(gg_unit_hfoo_0151,"patrol",4134,-4341)
call IssuePointOrder(gg_unit_hfoo_0174,"patrol",4990,-2541)
call IssuePointOrder(gg_unit_hfoo_0175,"patrol",4973,-2684)
call IssuePointOrder(gg_unit_hfoo_0179,"patrol",5526,-2153)
call IssuePointOrder(gg_unit_hfoo_0180,"patrol",5613,-1518)
call IssuePointOrder(gg_unit_hfoo_0181,"patrol",5729,-1518)
call IssuePointOrder(gg_unit_hfoo_0182,"patrol",5853,-1518)
call IssuePointOrder(gg_unit_hfoo_0183,"patrol",5969,-1518)
call IssuePointOrder(gg_unit_hfoo_0233,"patrol",2909,1067)
call IssuePointOrder(gg_unit_hfoo_0232,"patrol",3551,662)
call IssuePointOrder(gg_unit_hfoo_0258,"patrol",-2978,6589)
call IssuePointOrder(gg_unit_hfoo_0259,"patrol",-3074,8471)
call IssuePointOrder(gg_unit_hfoo_0260,"patrol",-3060,6998)
call IssuePointOrder(gg_unit_h006_0087,"patrol",6283,-7030)
call IssuePointOrder(gg_unit_h006_0088,"patrol",6259,-6579)
call IssuePointOrder(gg_unit_h006_0089,"patrol",6153,-5851)
call IssuePointOrder(gg_unit_h006_0090,"patrol",5685,-5520)
call IssuePointOrder(gg_unit_h006_0091,"patrol",5534,-5570)
call IssuePointOrder(gg_unit_h006_0092,"patrol",5282,-5539)
call IssuePointOrder(gg_unit_h006_0093,"patrol",4952,-6104)
call IssuePointOrder(gg_unit_h006_0094,"patrol",4939,-6383)
call IssuePointOrder(gg_unit_h006_0095,"patrol",4992,-5915)
call IssuePointOrder(gg_unit_h006_0096,"patrol",6405,-5605)
call IssuePointOrder(gg_unit_h006_0097,"patrol",6315,-4856)
call IssuePointOrder(gg_unit_h006_0098,"patrol",6971,-4870)
call IssuePointOrder(gg_unit_h006_0099,"patrol",7081,-3756)
call IssuePointOrder(gg_unit_h006_0100,"patrol",7562,-3664)
call IssuePointOrder(gg_unit_h006_0101,"patrol",6929,-4474)
call IssuePointOrder(gg_unit_h006_0102,"patrol",7984,-3676)
call IssuePointOrder(gg_unit_h006_0103,"patrol",7844,-3714)
call IssuePointOrder(gg_unit_h006_0104,"patrol",6492,-3469)
call IssuePointOrder(gg_unit_h006_0105,"patrol",8044,-3290)
call IssuePointOrder(gg_unit_h006_0108,"patrol",9347,1799)
call IssuePointOrder(gg_unit_h006_0109,"patrol",9303,2691)
call IssuePointOrder(gg_unit_h006_0110,"patrol",8172,2677)
call IssuePointOrder(gg_unit_h006_0111,"patrol",7952,2219)
call IssuePointOrder(gg_unit_h006_0113,"patrol",9346,3031)
call IssuePointOrder(gg_unit_h006_0114,"patrol",9215,7174)
call IssuePointOrder(gg_unit_h006_0115,"patrol",9178,8989)
call IssuePointOrder(gg_unit_h006_0154,"patrol",4462,-3620)
call IssuePointOrder(gg_unit_h006_0156,"patrol",3705,-2927)
call IssuePointOrder(gg_unit_h006_0158,"patrol",3343,-3148)
call IssuePointOrder(gg_unit_h006_0159,"patrol",2985,-2598)
call IssuePointOrder(gg_unit_h006_0169,"patrol",4082,-1923)
call IssuePointOrder(gg_unit_h006_0170,"patrol",2304,-1917)
call IssuePointOrder(gg_unit_h006_0171,"patrol",2197,-2039)
call IssuePointOrder(gg_unit_h006_0172,"patrol",3897,-2033)
call IssuePointOrder(gg_unit_h006_0187,"patrol",4846,-1149)
call IssuePointOrder(gg_unit_h006_0195,"patrol",-2174,-2537)
call IssuePointOrder(gg_unit_h006_0202,"patrol",-1941,-297)
call IssuePointOrder(gg_unit_h006_0203,"patrol",-2306,901)
call IssuePointOrder(gg_unit_h006_0211,"patrol",-1197,643)
call IssuePointOrder(gg_unit_h006_0212,"patrol",-1660,988)
call IssuePointOrder(gg_unit_h006_0213,"patrol",-1144,84)
call IssuePointOrder(gg_unit_h006_0214,"patrol",-391,490)
call IssuePointOrder(gg_unit_h006_0215,"patrol",-452,-60)
call IssuePointOrder(gg_unit_h006_0216,"patrol",433,262)
call IssuePointOrder(gg_unit_h006_0217,"patrol",374,381)
call IssuePointOrder(gg_unit_h006_0219,"patrol",1556,-35)
call IssuePointOrder(gg_unit_h006_0220,"patrol",1314,-22)
call IssuePointOrder(gg_unit_h006_0222,"patrol",1534,-100)
call IssuePointOrder(gg_unit_h006_0223,"patrol",2181,884)
call IssuePointOrder(gg_unit_h006_0225,"patrol",2084,423)
call IssuePointOrder(gg_unit_h006_0227,"patrol",3301,-218)
call IssuePointOrder(gg_unit_h006_0230,"patrol",2656,129)
call IssuePointOrder(gg_unit_h006_0231,"patrol",2671,393)
call IssuePointOrder(gg_unit_h006_0235,"patrol",3578,2001)
call IssuePointOrder(gg_unit_h006_0244,"patrol",3426,7684)
call IssuePointOrder(gg_unit_h006_0245,"patrol",2667,7859)
call IssuePointOrder(gg_unit_h006_0246,"patrol",2501,7884)
call IssuePointOrder(gg_unit_h006_0247,"patrol",2258,7881)
call IssuePointOrder(gg_unit_h006_0110,"patrol",7913,2514)
call IssuePointOrder(gg_unit_h006_0111,"patrol",7954,2925)
call IssuePointOrder(gg_unit_h006_0112,"patrol",9347,3707)
call IssuePointOrder(gg_unit_hfow_0107,"move",6548,-7412)
call IssuePointOrder(gg_unit_hfow_0086,"move",5635,-7985)
call IssuePointOrder(gg_unit_hfow_0106,"move",8035,-3599)
call IssuePointOrder(gg_unit_hfow_0132,"move",6014,5890)
call IssuePointOrder(gg_unit_hfow_0155,"move",4119,-3811)
call IssuePointOrder(gg_unit_hfow_0161,"move",2942,-2295)
call IssuePointOrder(gg_unit_hfow_0185,"move",6377,-1543)
call IssuePointOrder(gg_unit_hfow_0240,"move",3597,1780)
call IssuePointOrder(gg_unit_hfow_0238,"move",3597,1780)
call IssuePointOrder(gg_unit_hfow_0241,"move",3597,1780)
call IssuePointOrder(gg_unit_hfow_0249,"move",2027,8074)
call IssuePointOrder(gg_unit_hfow_0250,"move",2027,8074)
call IssuePointOrder(gg_unit_hfow_0251,"move",2245,5637)
call IssuePointOrder(gg_unit_hfow_0252,"move",2245,5637)
call IssuePointOrder(gg_unit_hfow_0253,"move",2245,5637)
call IssuePointOrder(gg_unit_hfow_0193,"move",-768,-2851)
call IssuePointOrder(gg_unit_hfow_0194,"move",-1365,-997)
call IssuePointOrder(gg_unit_hfow_0197,"move",-2130,-2790)
call IssuePointOrder(gg_unit_hfow_0199,"move",-2431,-669)
call IssuePointOrder(gg_unit_hfow_0200,"move",-88,-397)
call IssuePointOrder(gg_unit_hfow_0205,"move",-2532,861)
call IssuePointOrder(gg_unit_hfow_0206,"move",-2532,861)
call IssuePointOrder(gg_unit_hmtm_0130,"attackground",6527,-6381)
call IssuePointOrder(gg_unit_hmtm_0129,"attackground",5009,-6496)
call IssuePointOrder(gg_unit_hmtm_0128,"attackground",5923,-4551)
call IssuePointOrder(gg_unit_hmtm_0131,"attackground",8576,1802)
call IssuePointOrder(gg_unit_hmtm_0133,"attackground",9316,-2982)
call IssuePointOrder(gg_unit_hmtm_0122,"attackground",8196,4616)
call IssuePointOrder(gg_unit_hmtm_0123,"attackground",8187,4226)
call IssuePointOrder(gg_unit_hmtm_0126,"attackground",7677,4214)
call IssuePointOrder(gg_unit_hmtm_0121,"attackground",7181,4093)
call IssuePointOrder(gg_unit_hmtm_0124,"attackground",7160,4472)
call IssuePointOrder(gg_unit_hmtm_0120,"attackground",6914,4484)
call IssuePointOrder(gg_unit_hmtm_0119,"attackground",6439,4857)
call IssuePointOrder(gg_unit_hmtm_0125,"attackground",6907,4991)
call IssuePointOrder(gg_unit_hmtm_0146,"attackground",7674,4861)
call IssuePointOrder(gg_unit_hmtm_0147,"attackground",7934,4609)
call IssuePointOrder(gg_unit_hmtm_0148,"attackground",6147,4101)
call IssuePointOrder(gg_unit_hmtm_0149,"attackground",5879,4494)
call IssuePointOrder(gg_unit_hmtm_0162,"attackground",2430,-3575)
call IssuePointOrder(gg_unit_hmtm_0163,"attackground",2175,-3581)
call IssuePointOrder(gg_unit_hmtm_0164,"attackground",1918,-3581)
call IssuePointOrder(gg_unit_hmtm_0165,"attackground",1666,-3575)
call IssuePointOrder(gg_unit_hmtm_0166,"attackground",1664,-3319)
call IssuePointOrder(gg_unit_hmtm_0167,"attackground",1664,-3062)
call IssuePointOrder(gg_unit_hmtm_0176,"attackground",5632,-2939)
call IssuePointOrder(gg_unit_hmtm_0177,"attackground",6139,-2936)
call IssuePointOrder(gg_unit_hmtm_0118,"attackground",9210,6391)
call IssuePointOrder(gg_unit_hmtm_0116,"attackground",9091,7434)
call IssuePointOrder(gg_unit_hmtm_0117,"attackground",8960,8451)
call IssuePointOrder(gg_unit_hmtm_0127,"attackground",7931,8956)
call TimerStart(CreateTimer(),1.0,true,function gtime)
set g = GetUnitsOfTypeIdAll('h007')
loop
exitwhen CountUnitsInGroup(g) == 0
set u = FirstOfGroup(g)
set fire[i] = GetUnitLoc(u)
set fi2 = fi2 + 1
set i = i + 1
call GroupRemoveUnit(g,u)
call RemoveUnit(u)
endloop
call DestroyGroup(g)
call TimerStart(CreateTimer(),4,true,function fireTrig)
set i = 0
set g = GetUnitsOfTypeIdAll('hfow')
loop
exitwhen CountUnitsInGroup(g) == 0
set u = FirstOfGroup(g)
set fu[i] = u
set fl[i] = GetUnitLoc(u)
set fi = fi + 1
set i = i + 1
call GroupRemoveUnit(g,u)
endloop
call DestroyGroup(g)
set g = null
set u = null
endfunction
//===========================================================================
function InitTrig_Initialization takes nothing returns nothing
set gg_trg_Initialization = CreateTrigger( )
call TriggerAddAction( gg_trg_Initialization, function Trig_Initialization_Actions )
endfunction
function MobsKillAc takes nothing returns nothing
local integer i = GetPlayerId(GetOwningPlayer(GetDyingUnit()))
set udg_Lives[i] = udg_Lives[i] - 1
call DisplayTimedTextToPlayer(Player(i),0,0,15,"Lost 1 life!")
if udg_Lives[i] == 0 then
call DisplayTimedTextToPlayer(Player(i),0,0,60,"You have lost the game! However, you can continue playing!|n join RC discord to see when the next one is hosted and get another chance! https://discord.gg/NxNqhQm")
endif
endfunction
function MobsKillCo takes nothing returns boolean
if GetUnitTypeId(GetKillingUnit()) == 'hfoo' then
return true
endif
if GetUnitTypeId(GetKillingUnit()) == 'hfow' then
return true
endif
if GetUnitTypeId(GetKillingUnit()) == 'h006' then
return true
endif
if GetUnitTypeId(GetKillingUnit()) == 'hmtm' then
return true
endif
return false
endfunction
function InitTrig_MobsKill takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_DEATH)
call TriggerAddCondition(t, Condition(function MobsKillCo))
call TriggerAddAction(t, function MobsKillAc)
set t = null
endfunction
function TavernPurchase_Actions takes nothing returns nothing
local unit u
local location l = GetRandomLocInRect(gg_rct_Tavern_Spawn)
if GetItemTypeId(GetSoldItem()) == 'Huma' then
set u = CreateUnitAtLoc(GetOwningPlayer(GetBuyingUnit()), 'H003', l, 90.00)
endif
if GetItemTypeId(GetSoldItem()) == 'I001' then
set u = CreateUnitAtLoc(GetOwningPlayer(GetBuyingUnit()), 'H000', l, 90.00)
endif
if GetItemTypeId(GetSoldItem()) == 'I000' then
set u = CreateUnitAtLoc(GetOwningPlayer(GetBuyingUnit()), 'H004', l, 90.00)
endif
if GetItemTypeId(GetSoldItem()) == 'I003' then
set u = CreateUnitAtLoc(GetOwningPlayer(GetBuyingUnit()), 'H002', l, 90.00)
endif
if GetItemTypeId(GetSoldItem()) == 'I002' then
set u = CreateUnitAtLoc(GetOwningPlayer(GetBuyingUnit()), 'H001', l, 90.00)
endif
call RemoveUnit(GetBuyingUnit())
set udg_Hero[GetPlayerId(GetOwningPlayer(GetBuyingUnit()))] = u
set udg_chp[GetPlayerId(GetOwningPlayer(GetBuyingUnit()))] = gg_rct_Maze_1_Start
set udg_Lives[GetPlayerId(GetOwningPlayer(GetBuyingUnit()))] = 8
call PanCameraToForPlayer(GetOwningPlayer(GetBuyingUnit()),GetLocationX(l),GetLocationY(l))
set u = null
call RemoveLocation(l)
set l = null
endfunction
function InitTrig_TavernPurchase takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SELL_ITEM)
call TriggerAddAction( t, function TavernPurchase_Actions)
set t = null
endfunction
function MazeOneIn_Actions takes nothing returns nothing
local location l = GetRandomLocInRect(gg_rct_Maze_1_Start)
call SetUnitPositionLoc(GetEnteringUnit(), l)
set udg_OnMaze[GetPlayerId(GetOwningPlayer(GetEnteringUnit()))] = true
call PanCameraToForPlayer(GetOwningPlayer(GetEnteringUnit()),GetLocationX(l),GetLocationY(l))
call RemoveLocation(l)
set l = null
endfunction
function InitTrig_MazeOneIn takes nothing returns nothing
local trigger t = CreateTrigger( )
call TriggerRegisterEnterRectSimple( t, gg_rct_Tavern_Out)
call TriggerAddAction( t, function MazeOneIn_Actions )
endfunction
function MazeOneDoor_Condition takes nothing returns boolean
return GetManipulatedItem() == gg_item_I004_0043
endfunction
function MazeOneDoor_Actions takes nothing returns nothing
call KillDestructable(gg_dest_ATg1_0000)
endfunction
function InitTrig_MazeOneDoor takes nothing returns nothing
set gg_trg_MazeOneDoor = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ(gg_trg_MazeOneDoor,EVENT_PLAYER_UNIT_PICKUP_ITEM)
call TriggerAddCondition( gg_trg_MazeOneDoor, Condition(function MazeOneDoor_Condition))
call TriggerAddAction( gg_trg_MazeOneDoor, function MazeOneDoor_Actions )
endfunction
function MazeOneEnd_Actions takes nothing returns nothing
local unit u = GetEnteringUnit()
local location l = GetRandomLocInRect(gg_rct_Challenge_1)
call SetHeroLevel(u, GetHeroLevel(u) + 1,true)
call SetUnitPositionLoc(u,l)
call PanCameraToForPlayer(GetOwningPlayer(u),GetLocationX(l),GetLocationY(l))
call CinematicModeBJ(true,GetForceOfPlayer(GetOwningPlayer(u)))
call TransmissionFromUnitTypeWithNameBJ( GetForceOfPlayer(GetOwningPlayer(GetTriggerUnit())), Player(0), 'Etyr', "TRIGSTR_093", l, null, "TRIGSTR_094", bj_TIMETYPE_ADD, 20.00, true )
call TriggerSleepAction(20)
call CinematicModeBJ(false,GetForceOfPlayer(GetOwningPlayer(u)))
call RemoveLocation(l)
set u = null
set l = null
endfunction
//===========================================================================
function InitTrig_MazeOneEnd takes nothing returns nothing
local trigger t = CreateTrigger( )
call TriggerRegisterEnterRectSimple( t, gg_rct_MazeOneEnd)
call TriggerAddAction( t, function MazeOneEnd_Actions )
set t = null
endfunction
globals
trigger array UnitInRangeTrig
endglobals
function ChallengeOne_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local trigger t = GetTriggeringTrigger()
local player p = GetTriggerPlayer()
local integer ki
local integer i = GetPlayerId(GetOwningPlayer(GetTriggerUnit()))
if (t != UnitInRangeTrig[GetPlayerId(p)]) then
return
endif
call UnitAddAbility(u,'A001')
call UnitAddAbility(u,'A002')
call UnitAddAbility(u,'A003')
call UnitAddAbility(u,'A004')
set ki = GetRandomInt(1,4)
if ki == 1 then
set udg_kibase[i] = ki
call DisplayTimedTextToPlayer(Player(i),0,0,2,"Press M")
elseif ki == 2 then
set udg_kibase[i] = ki
call DisplayTimedTextToPlayer(Player(i),0,0,2,"Press W")
elseif ki == 3 then
set udg_kibase[i] = ki
call DisplayTimedTextToPlayer(Player(i),0,0,2,"Press C")
elseif ki == 4 then
set udg_kibase[i] = ki
call DisplayTimedTextToPlayer(Player(i),0,0,2,"Press U")
endif
call TriggerSleepAction(2.0)
call PauseUnit(u,true)
set udg_chall1check[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] = true
set udg_chall1[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] = true
set udg_chall1in[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] = 3
call TimerStart(CreateTimer(),0.05,true,function ChallengeOne_Timer)
set udg_rr[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] = 2
set udg_rrest[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] = 2
set u = null
endfunction
function InitTrig_ChallengeOne takes nothing returns nothing
local trigger t
local integer i = 0
local unit array u
set u[0] = gg_unit_n000_0014
set u[1] = gg_unit_n000_0015
set u[2] = gg_unit_n000_0016
set u[3] = gg_unit_n000_0017
set u[4] = gg_unit_n000_0018
set u[6] = gg_unit_n000_0019
set u[7] = gg_unit_n000_0020
set u[8] = gg_unit_n000_0021
set u[9] = gg_unit_n000_0022
set u[10] = gg_unit_n000_0023
set u[11] = gg_unit_n000_0024
loop
exitwhen i >11
set udg_unit = u[i]
set t = CreateTrigger()
set UnitInRangeTrig[i] = t
call TriggerRegisterUnitInRange( t, u[i], 64, null)
set udg_ii = i
call TriggerAddAction(t, function ChallengeOne_Actions)
set u[i] = null
set i = i + 1
endloop
set t = null
endfunction
function ChallengeOne_KeyORCon takes nothing returns boolean
if GetSpellAbilityId() == 'A001' then
set udg_kiattempt[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] = 1
return true
endif
if GetSpellAbilityId() == 'A002' then
set udg_kiattempt[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] = 2
return true
endif
if GetSpellAbilityId() == 'A003' then
set udg_kiattempt[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] = 3
return true
endif
if GetSpellAbilityId() == 'A004' then
set udg_kiattempt[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] = 4
return true
endif
return false
endfunction
function ChallengeOne_KeyAction takes nothing returns nothing
local player p = GetOwningPlayer(GetTriggerUnit())
call ClearTextMessagesBJ(GetForceOfPlayer(p))
if udg_kiattempt[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] == udg_kibase[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] then
call DisplayTimedTextToPlayer(p,0,0,3,"Success!")
set udg_kicon[GetPlayerId(p)] = true
else
call DisplayTimedTextToPlayer(p,0,0,3,"Failed!")
set udg_kicon[GetPlayerId(p)] = false
set udg_kicon2[GetPlayerId(p)] = true
endif
set udg_kibase[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] = 0
call TriggerSleepAction(0.10)
call PauseUnit(udg_Hero[GetPlayerId(p)],true)
set p = null
endfunction
function ChallengeOne_KeyOR takes nothing returns boolean
return ChallengeOne_KeyORCon()
endfunction
function InitTrig_ChallengeOne_Key takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(t,Condition( function ChallengeOne_KeyOR))
call TriggerAddAction(t, function ChallengeOne_KeyAction)
set t = null
endfunction
function Lever_Actions takes nothing returns nothing
local group g
local unit u
local real x = GetRectCenterX(gg_rct_Maze_2_Jump_Out)
local real y = GetRectCenterY(gg_rct_Maze_2_Jump_Out)
call TriggerRegisterEnterRectSimple(gg_trg_MazeTwoJump,gg_rct_Maze_2_Jump_In)
call CreateDestructable('B000',x,y,0,1,0)
set x = GetRectCenterX(gg_rct_Maze_2_Jump_In)
set y = GetRectCenterY(gg_rct_Maze_2_Jump_In)
call CreateDestructable( 'B000',x,y,0,1,0)
set g = CreateGroup()
call GroupEnumUnitsInRange(g,6295,-5215,200,null)
set u = FirstOfGroup(g)
call SetHeroLevel(u,GetHeroLevel(u)+1,true)
call DestroyGroup(g)
set g = null
set u = null
endfunction
function InitTrig_Lever takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterDeathEvent(t,gg_dest_DTlv_0002)
call TriggerAddAction(t,function Lever_Actions)
set t = null
endfunction
function Trig_MazeTwoJump_Actions takes nothing returns nothing
local real x = GetRectCenterX(gg_rct_Maze_2_Jump_Out)
local real y = GetRectCenterY(gg_rct_Maze_2_Jump_Out)
call SetUnitPosition(GetTriggerUnit(),x,y)
endfunction
//===========================================================================
function InitTrig_MazeTwoJump takes nothing returns nothing
set gg_trg_MazeTwoJump = CreateTrigger( )
call TriggerAddAction( gg_trg_MazeTwoJump, function Trig_MazeTwoJump_Actions )
endfunction
function Jump_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A005'
endfunction
function Jump_Actions takes nothing returns nothing
set udg_JumpInt = udg_JumpInt + 1
set udg_JumpUn[udg_JumpInt] = GetTriggerUnit()
set udg_JumpDr[udg_JumpInt] = AngleBetweenPoints(GetUnitLoc(GetTriggerUnit()),GetSpellTargetLoc())
set udg_JumpTm[udg_JumpInt] = 0
set udg_OnMaze[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] = false
call SetUnitInvulnerable(GetTriggerUnit(),true)
if udg_boolean1 == false then
call TimerStart(CreateTimer(),0.05,true, function Jumping)
set udg_boolean1 = true
endif
endfunction
function InitTrig_Jump takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(t, function Jump_Conditions)
call TriggerAddAction(t,function Jump_Actions)
set t = null
endfunction
function Die_Actions takes nothing returns nothing
local integer i = GetPlayerId(GetTriggerPlayer())
if finish[i] == false then
call KillUnit(udg_Hero[i])
endif
endfunction
function InitTrig_Die takes nothing returns nothing
local integer i = 0
local trigger t = CreateTrigger()
loop
exitwhen i > 10
call TriggerRegisterPlayerChatEvent(t,Player(i),"-die",true)
set i = i + 1
endloop
call TriggerAddAction(t,function Die_Actions)
set t = null
endfunction
function Checkpoint1_Actions takes nothing returns nothing
set udg_chp[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] = gg_rct_Maze_1_Checkpoint
call DisplayTimedTextToPlayer(GetOwningPlayer(GetTriggerUnit()),0,0,20,"Checkpoint Reached!")
endfunction
function InitTrig_Checkpoint1 takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterEnterRectSimple(t,gg_rct_Maze_1_Checkpoint)
call TriggerAddAction(t,function Checkpoint1_Actions)
endfunction
function Checkpoint2_Actions takes nothing returns nothing
set udg_chp[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] = gg_rct_Maze_2_Checkpoint
call DisplayTimedTextToPlayer(GetOwningPlayer(GetTriggerUnit()),0,0,20,"Checkpoint Reached!")
call UnitAddAbility(GetTriggerUnit(),'A005')
endfunction
function InitTrig_Checkpoint2 takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterEnterRectSimple(t,gg_rct_Maze_2_Checkpoint)
call TriggerAddAction(t,function Checkpoint2_Actions)
endfunction
function MazeTwoDoor_Conditions takes nothing returns boolean
return GetManipulatedItem() == gg_item_I004_0044
endfunction
function MazeTwoDoor_Actions takes nothing returns nothing
call KillDestructable(gg_dest_ATg1_0001)
endfunction
function InitTrig_MazeTwoDoor takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_PICKUP_ITEM)
call TriggerAddCondition(t, Condition(function MazeTwoDoor_Conditions))
call TriggerAddAction(t,function MazeTwoDoor_Actions)
set t = null
endfunction
function MazeTwoEnd_Actions takes nothing returns nothing
local rect p = gg_rct_Challenge_2
local real x = GetRandomReal(GetRectMinX(p),GetRectMaxX(p))
local real y = GetRandomReal(GetRectMinY(p),GetRectMaxY(p))
call CinematicModeBJ(true,GetForceOfPlayer(GetOwningPlayer(GetTriggerUnit())))
call SetCinematicScene('Ekgg',null,"|cff6f2583Game|r","|cffff00ffChallenge #2: |rDodging.|cffff00ff You will be teleported into a room with many wandering spirits. Spirits will damage you if they come close so dodge them. Survive for 55 seconds to win.|r",20,20)
call TriggerSleepAction(20)
call CinematicModeBJ(false,GetForceOfPlayer(GetOwningPlayer(GetTriggerUnit())))
call SetUnitPosition(GetTriggerUnit(),x,y)
call PanCameraToTimedForPlayer(GetOwningPlayer(GetTriggerUnit()),x,y,0.1)
call SetHeroLevel(GetTriggerUnit(),GetHeroLevel(GetTriggerUnit()) +1,true)
call BlzSetUnitAbilityCooldown(GetTriggerUnit(),'A005',0,3.0)
if udg_boolean2 == false then
call TimerStart(CreateTimer(),1,true,function Challenge2Loop)
set udg_boolean2 = true
endif
set udg_chall2[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] = true
set udg_chall2in[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] = 3
set p = null
endfunction
function InitTrig_MazeTwoEnd takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterEnterRectSimple(t,gg_rct_Maze_2_End)
call TriggerAddAction(t,function MazeTwoEnd_Actions)
set t = null
endfunction
function MazeThreeEndAc takes nothing returns nothing
local integer i = GetPlayerId(GetOwningPlayer(GetTriggerUnit()))
local rect array r
local timer t
set r[0] = gg_rct_Chall31
set r[1] = gg_rct_Chall32
set r[2] = gg_rct_Chall33
set r[3] = gg_rct_Chall34
set r[4] = gg_rct_Chall35
set r[5] = gg_rct_Chall36
set r[6] = gg_rct_Chall37
set r[7] = gg_rct_Chall38
set r[8] = gg_rct_Chall39
set r[9] = gg_rct_Chall310
set r[10] = gg_rct_Chall311
call PauseUnit(GetTriggerUnit(),true)
call CreateUnit(Player(i),'h005',GetRectCenterX(r[i]),GetRectCenterY(r[i]),90)
call PanCameraToForPlayer(GetOwningPlayer(GetTriggerUnit()),GetRectCenterX(r[i]),GetRectCenterY(r[i]))
call CinematicModeBJ(true,GetForceOfPlayer(GetOwningPlayer(GetTriggerUnit())))
call SetCinematicScene('Hvsh',null,"|cff6f2583Game|r","|cffff00ffChallenge #3: |rTD Maze.|cffff00ff You are required to build a good maze with the towers to hold off the enemy as much time as possible. You can't fully block the path. Your towers increase the damage of the enemy and your score is equivalent to the final damage. You summon towers so you don't need to wait till it has finished building.|r",30,30)
call TriggerSleepAction(30)
call CinematicModeBJ(false,GetForceOfPlayer(GetOwningPlayer(GetTriggerUnit())))
set udg_chall4[i] = true
call DisplayTimedTextToPlayer(Player(i),0,0,15,"You got 60 seconds to build your maze")
set t = CreateTimer()
set udg_chall4tim[i] = CreateTimerDialogBJ(t,"Remaining Time")
call TimerStart(t,60,false,null)
if udg_boolean3 == false then
call TimerStart(CreateTimer(),1,true,function chall4loop)
set udg_boolean3 = false
endif
//call SetUnitPosition(GetTriggerUnit(),GetRectCenterX(r[i]),GetRectCenterY(r[i]))
//call UnitAddAbility(GetTriggerUnit(),'Ahrp')
set i = 0
loop
exitwhen i > 10
set r[i] = null
set i = i + 1
endloop
endfunction
function InitTrig_MazeThreeEnd takes nothing returns nothing
local trigger t
set t = CreateTrigger()
call TriggerRegisterEnterRectSimple(t,gg_rct_Maze_3_End)
call TriggerAddAction(t,function MazeThreeEndAc)
set t = null
endfunction
function DamageTowerCo takes nothing returns boolean
return GetUnitTypeId(GetEventDamageSource()) == 'k000'
endfunction
function DamageTowerAc takes nothing returns nothing
call BlzSetUnitBaseDamage(GetTriggerUnit(),BlzGetUnitBaseDamage(GetTriggerUnit(),0)+1,0)
call BlzSetEventDamage(0)
endfunction
function InitTrig_DamageTower takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_DAMAGED)
call TriggerAddCondition(t, Condition(function DamageTowerCo))
call TriggerAddAction( t, function DamageTowerAc)
set t = null
endfunction
globals
trigger array chall4endt
real array chall4sc
endglobals
function chall4endCo takes nothing returns boolean
return GetUnitTypeId(GetTriggerUnit()) == 'hcth'
endfunction
function chall4endAc takes nothing returns nothing
local trigger t = GetTriggeringTrigger()
local integer i = 0
loop
exitwhen i > 10
if t == chall4endt[i] then
set chall4sc[i] = BlzGetUnitBaseDamage(GetTriggerUnit(),0)
call BJDebugMsg(GetPlayerName(Player(i))+" (Player "+I2S(i+1)+") has got a score of "+R2S(chall4sc[i]))
call MultiboardSetItemValue(mp3[i],R2S(chall4sc[i]))
call RemoveUnit(GetTriggerUnit())
call SetUnitPosition(udg_Hero[i],GetRectCenterX(gg_rct_Maze_4_Start),GetRectCenterY(gg_rct_Maze_4_Start))
set udg_chp[i] = gg_rct_Maze_4_Start
call PauseUnit(udg_Hero[i],false)
call UnitRemoveAbility(udg_Hero[i],'A005')
set t = null
return
endif
set i = i + 1
endloop
endfunction
function InitTrig_chall4end takes nothing returns nothing
local integer i = 0
local trigger t
set udg_end[0] = gg_rct_chall4end0
set udg_end[1] = gg_rct_chall4end1
set udg_end[2] = gg_rct_chall4end2
set udg_end[3] = gg_rct_chall4end3
set udg_end[4] = gg_rct_chall4end4
set udg_end[5] = gg_rct_chall4end5
set udg_end[6] = gg_rct_chall4end6
set udg_end[7] = gg_rct_chall4end7
set udg_end[8] = gg_rct_chall4end8
set udg_end[9] = gg_rct_chall4end9
set udg_end[10] = gg_rct_chall4end10
loop
exitwhen i > 10
set t = CreateTrigger()
call TriggerRegisterEnterRectSimple(t,udg_end[i])
call TriggerAddCondition(t, Condition(function chall4endCo))
call TriggerAddAction(t, function chall4endAc)
set chall4endt[i] = t
set i = i + 1
endloop
set t = null
endfunction
globals
boolean array finish
endglobals
function EndGameAc takes nothing returns nothing
local integer i = GetPlayerId(GetOwningPlayer(GetTriggerUnit()))
if top == null then
set top = Player(i)
endif
set udg_OnMaze[i] = false
call SetUnitInvulnerable(udg_Hero[i],true)
set finishtime[i] = time
call SetUnitPosition(GetTriggerUnit(),GetRandomReal(GetRectMinX(gg_rct_RC),GetRectMaxX(gg_rct_RC)),GetRandomReal(GetRectMinY(gg_rct_RC),GetRectMaxY(gg_rct_RC)))
if udg_Lives[i] > 0 then
call BJDebugMsg(GetPlayerName(Player(i))+" has finished the trial and won!")
call MultiboardSetItemValue(mpc[i],"|c0096FF96Finished|r")
else
call DisplayTimedTextToPlayer(Player(i),0,0,60,"You have reached the end! Try to do it again next time with more lives!")
call MultiboardSetItemValue(mpc[i],"|c0096FF96Finished|r/|c00FF0000Lost")
endif
set finish[i] = true
endfunction
function InitTrig_EndGame takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterEnterRectSimple(t,gg_rct_EndGame)
call TriggerAddAction(t, function EndGameAc)
set t = null
endfunction
function fireballco takes nothing returns boolean
return GetUnitTypeId(GetTriggerUnit()) == 'hfow'
endfunction
function fireballac takes nothing returns nothing
local integer i = 0
loop
exitwhen i > fi
if fu[i] == GetTriggerUnit() then
call SetUnitX(GetTriggerUnit(),GetLocationX(fl[i]))
call SetUnitY(GetTriggerUnit(),GetLocationY(fl[i]))
endif
set i = i + 1
endloop
endfunction
function InitTrig_fireball takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterEnterRectSimple(t,gg_rct_firebolt_1)
call TriggerRegisterEnterRectSimple(t,gg_rct_firebolt_2)
call TriggerRegisterEnterRectSimple(t,gg_rct_firebolt_3)
call TriggerRegisterEnterRectSimple(t,gg_rct_firebolt_4)
call TriggerRegisterEnterRectSimple(t,gg_rct_firebolt_5)
call TriggerRegisterEnterRectSimple(t,gg_rct_firebolt_6)
call TriggerRegisterEnterRectSimple(t,gg_rct_firebolt_7)
call TriggerRegisterEnterRectSimple(t,gg_rct_firebolt_8)
call TriggerRegisterEnterRectSimple(t,gg_rct_firebolt_9)
call TriggerRegisterEnterRectSimple(t,gg_rct_firebolt_10)
call TriggerRegisterEnterRectSimple(t,gg_rct_firebolt_11)
call TriggerRegisterEnterRectSimple(t,gg_rct_firebolt_12)
call TriggerRegisterEnterRectSimple(t,gg_rct_firebolt_13)
call TriggerRegisterEnterRectSimple(t,gg_rct_firebolt_14)
call TriggerRegisterEnterRectSimple(t,gg_rct_firebolt_15)
call TriggerRegisterEnterRectSimple(t,gg_rct_firebolt_16)
call TriggerAddCondition(t, Condition(function fireballco))
call TriggerAddAction(t,function fireballac)
set t = null
endfunction
function Rewindco takes nothing returns boolean
return GetSpellAbilityId() == 'A00A'
endfunction
function Rewindac takes nothing returns nothing
local integer i = GetPlayerId(GetOwningPlayer(GetTriggerUnit()))
if udg_chall1[i] == true then
return
endif
if udg_chall2[i] == true then
return
endif
call SetUnitPositionLoc(GetTriggerUnit(),GetRandomLocInRect(udg_chp[i]))
endfunction
function InitTrig_Rewind takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_SPELL_FINISH)
call TriggerAddCondition(t,Condition(function Rewindco))
call TriggerAddAction(t, function Rewindac)
set t = null
endfunction
globals
integer array finishtime
player top = null
endglobals
function CalculateAc takes nothing returns nothing
local integer i = 0
local real array s
loop
exitwhen i > 10
if finish[i] == true and udg_Lives[i] > 0 then
set s[i] = udg_Lives[i] * 3
set s[i] = s[i] + GetHeroLevel(udg_Hero[i])*1.5
set s[i] = s[i] + chall4sc[i]/100
if finishtime[i] <= (21*60) then
set s[i] = s[i] + 4.5
elseif finishtime[i] <= 31*60 then
set s[i] = s[i] + 3
endif
if Player(i) == top then
set s[i] = s[i] + 2
endif
call BJDebugMsg(color[i]+"Player ("+I2S(i+1)+")|r got "+R2S(s[i])+" score!")
endif
set i = i + 1
endloop
endfunction
function InitTrig_Calculate takes nothing returns nothing
local integer i = 0
local trigger t = CreateTrigger()
loop
exitwhen i > 14
call TriggerRegisterPlayerChatEvent(t,Player(i),"-calculate",true)
set i = i + 1
endloop
call TriggerAddAction(t,function CalculateAc)
endfunction
function Trig_Configuration_Actions takes nothing returns nothing
// ParamStart is the start edge of the region
// ParamStart is the end edge of the region
// the path is calculated from start to end edge
// 0 -> right
// 1 -> top
// 2 -> left
// 3 -> bottom
// ParamRegion is the region in which the path is calculated
// After setting these three parameters run AddRegion
local integer i = 0
local rect array r
set r[0] = gg_rct_Chall31
set r[1] = gg_rct_Chall32
set r[2] = gg_rct_Chall33
set r[3] = gg_rct_Chall34
set r[4] = gg_rct_Chall35
set r[5] = gg_rct_Chall36
set r[6] = gg_rct_Chall37
set r[7] = gg_rct_Chall38
set r[8] = gg_rct_Chall39
set r[9] = gg_rct_Chall310
set r[10] = gg_rct_Chall311
loop
exitwhen i > 10
set udg_ParamStart = 2
set udg_ParamEnd = 0
set udg_ParamRegion = r[i]
call ConditionalTriggerExecute( gg_trg_AddRegion )
set i = i + 1
endloop
endfunction
//===========================================================================
function InitTrig_Configuration takes nothing returns nothing
set gg_trg_Configuration = CreateTrigger( )
call TriggerAddAction( gg_trg_Configuration, function Trig_Configuration_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
function Trig_AddRegion_Actions takes nothing returns nothing
local integer i = 0
local integer j = 0
set udg_NumberOfRegions = ( udg_NumberOfRegions + 1 )
set udg_Region[udg_NumberOfRegions] = udg_ParamRegion
set udg_Matrix[udg_NumberOfRegions] = InitHashtable()
set udg_EndDirection[udg_NumberOfRegions] = udg_ParamEnd
set udg_RegionWidth[udg_NumberOfRegions] = R2I((GetRectMaxX(udg_ParamRegion) - GetRectMinX(udg_ParamRegion) ) /64)
set udg_RegionHeight[udg_NumberOfRegions] = R2I((GetRectMaxY(udg_ParamRegion) - GetRectMinY(udg_ParamRegion) ) /64)
set udg_StartDirection[udg_NumberOfRegions] = udg_ParamStart
//call BJDebugMsg(I2S(udg_RegionWidth[udg_NumberOfRegions])+"|"+I2S(udg_RegionHeight[udg_NumberOfRegions]))
loop
exitwhen i >= udg_RegionHeight[udg_NumberOfRegions]
set j = 0
loop
exitwhen j >= udg_RegionWidth[udg_NumberOfRegions]
call SaveInteger(udg_Matrix[udg_NumberOfRegions],j,i,1)
set j = j + 1
endloop
set i = i + 1
endloop
endfunction
//===========================================================================
function InitTrig_AddRegion takes nothing returns nothing
set gg_trg_AddRegion = CreateTrigger( )
call TriggerAddAction( gg_trg_AddRegion, function Trig_AddRegion_Actions )
endfunction
//TESH.scrollpos=19
//TESH.alwaysfold=0
function Trig_AddEntry_Actions takes nothing returns nothing
local integer i = 1
local real x
local real y
local unit u
set u = GetConstructingStructure()
//call BJDebugMsg(GetUnitName(u))
set x = GetUnitX(u)
set y = GetUnitY(u)
loop
exitwhen i > udg_NumberOfRegions
if(GetRectMinX(udg_Region[i])<x and GetRectMaxX(udg_Region[i])>x and GetRectMinY(udg_Region[i])<y and GetRectMaxY(udg_Region[i])>y ) then
exitwhen true
endif
set i = i +1
endloop
if(i>udg_NumberOfRegions) then
return
endif
// i = index
//call BJDebugMsg(I2S(R2I((x-GetRectMinX(udg_Region[i]))/64))+" / "+I2S(R2I((GetRectMaxY(udg_Region[i])-y)/64)))
call SaveInteger(udg_Matrix[i],-1+R2I((x-GetRectMinX(udg_Region[i]))/64),R2I((GetRectMaxY(udg_Region[i])-y)/64),2)
call SaveInteger(udg_Matrix[i],-1+R2I((x-GetRectMinX(udg_Region[i]))/64),-1+R2I((GetRectMaxY(udg_Region[i])-y)/64),2)
call SaveInteger(udg_Matrix[i],R2I((x-GetRectMinX(udg_Region[i]))/64),-1+R2I((GetRectMaxY(udg_Region[i])-y)/64),2)
call SaveInteger(udg_Matrix[i],R2I((x-GetRectMinX(udg_Region[i]))/64),R2I((GetRectMaxY(udg_Region[i])-y)/64),2)
//call BJDebugMsg(I2S(i))
set udg_ProgressIndex = ( udg_ProgressIndex + 1 )
set udg_ProgressStatus[udg_ProgressIndex] = 0
set udg_ProgressPath[udg_ProgressIndex] = i
set udg_ProgressUnit[udg_ProgressIndex] = u
set udg_Progressing = true
endfunction
//===========================================================================
function InitTrig_AddEntry takes nothing returns nothing
set gg_trg_AddEntry = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_AddEntry, EVENT_PLAYER_UNIT_CONSTRUCT_START )
call TriggerAddAction( gg_trg_AddEntry, function Trig_AddEntry_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
function Trig_RemoveEntry_Actions takes nothing returns nothing
local integer i = 1
local real x
local real y
local unit u
set u = GetTriggerUnit()
//call BJDebugMsg(GetUnitName(u))
set x = GetUnitX(u)
set y = GetUnitY(u)
loop
exitwhen i > udg_NumberOfRegions
if(GetRectMinX(udg_Region[i])<x and GetRectMaxX(udg_Region[i])>x and GetRectMinY(udg_Region[i])<y and GetRectMaxY(udg_Region[i])>y ) then
exitwhen true
endif
set i = i +1
endloop
if(i>udg_NumberOfRegions) then
return
endif
// i = index
//call BJDebugMsg(I2S(R2I((x-GetRectMinX(udg_Region[i]))/64))+" / "+I2S(R2I((GetRectMaxY(udg_Region[i])-y)/64)))
call SaveInteger(udg_Matrix[i],-1+R2I((x-GetRectMinX(udg_Region[i]))/64),R2I((GetRectMaxY(udg_Region[i])-y)/64),1)
call SaveInteger(udg_Matrix[i],-1+R2I((x-GetRectMinX(udg_Region[i]))/64),-1+R2I((GetRectMaxY(udg_Region[i])-y)/64),1)
call SaveInteger(udg_Matrix[i],R2I((x-GetRectMinX(udg_Region[i]))/64),-1+R2I((GetRectMaxY(udg_Region[i])-y)/64),1)
call SaveInteger(udg_Matrix[i],R2I((x-GetRectMinX(udg_Region[i]))/64),R2I((GetRectMaxY(udg_Region[i])-y)/64),1)
endfunction
//===========================================================================
function InitTrig_RemoveEntry takes nothing returns nothing
set gg_trg_RemoveEntry = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_RemoveEntry, EVENT_PLAYER_UNIT_DEATH )
call TriggerAddAction( gg_trg_RemoveEntry, function Trig_RemoveEntry_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
function Trig_Progress_Actions takes nothing returns nothing
local integer i
set i = 1
loop
exitwhen i > udg_ProgressIndex
//call BJDebugMsg(I2S(udg_ProgressStatus[i]))
if(udg_ProgressStatus[i] == 1) then
//call BJDebugMsg("path found")
set udg_ProgressStatus[i] = udg_ProgressStatus[udg_ProgressIndex]
set udg_ProgressUnit[i] = udg_ProgressUnit[udg_ProgressIndex]
set udg_ProgressPath[i] = udg_ProgressPath[udg_ProgressIndex]
set udg_ProgressIndex = udg_ProgressIndex - 1
set i = i -1
elseif(udg_ProgressStatus[i] == -1) then
set udg_PathBlockUnit = udg_ProgressUnit[i]
set udg_PathBlockEvent = 0.00
set udg_PathBlockEvent = 1.00
set udg_PathBlockEvent = 0.00
set udg_ProgressStatus[i] = udg_ProgressStatus[udg_ProgressIndex]
set udg_ProgressUnit[i] = udg_ProgressUnit[udg_ProgressIndex]
set udg_ProgressPath[i] = udg_ProgressPath[udg_ProgressIndex]
set udg_ProgressIndex = udg_ProgressIndex - 1
set i = i -1
elseif(udg_ProgressStatus[i] == 0) then
//call BJDebugMsg("error")
set udg_ParamIndex = i
call TriggerExecute(gg_trg_EvaluatePath)
endif
set i = i + 1
endloop
endfunction
//===========================================================================
function InitTrig_Progress takes nothing returns nothing
set gg_trg_Progress = CreateTrigger( )
call TriggerRegisterTimerEventPeriodic( gg_trg_Progress, 0.01 )
call TriggerAddAction( gg_trg_Progress, function Trig_Progress_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
function EvaluatePathFromTo takes integer k, integer x1, integer y1, integer x2, integer y2 returns boolean
// matrix:
// 1 pathable
// 2 blocked
// 3 used(algorithm)
// 4 leads to goal/is goal(algorithm)
// after algorithm 3,4 -> 1
local integer currentX = x1
local integer currentY = y1
local integer tempX
local integer tempY
local integer pathing
if(LoadInteger(udg_Matrix[k],x1,y1)==2 or LoadInteger(udg_Matrix[k],x2,y2)==2 or LoadInteger(udg_Matrix[k],x1,y1)==3) then
//call BJDebugMsg("instant false")
return false
endif
if(LoadInteger(udg_Matrix[k],x1,y1)==4) then
//call BJDebugMsg("true")
//call BJDebugMsg("CCCCCCCCCCCCCCCCCCCCCCCCCCC")
return true
endif
call SaveInteger(udg_Matrix[k],currentX,currentY,3)
//call BJDebugMsg(I2S(x1)+","+I2S(y1)+" -> "+I2S(x2)+","+I2S(y2))
set tempX = currentX+1
set tempY = currentY
set pathing = LoadInteger(udg_Matrix[k],tempX,tempY)
if(pathing==4) then
call SaveInteger(udg_Matrix[k],currentX,currentY,4)
//call BJDebugMsg("BBBBBBBBBBBBBBBBBBBBBBBBBBB")
return true
endif
if(pathing==1) then
if( EvaluatePathFromTo(k,tempX,tempY,x2,y2)) then
call SaveInteger(udg_Matrix[k],currentX,currentY,4)
//call BJDebugMsg("BBBBBBBBBBBBBBBBBBBBBBBBBBB")
return true
endif
endif
set tempX = currentX
set tempY = currentY+1
set pathing = LoadInteger(udg_Matrix[k],tempX,tempY)
if(pathing==4) then
call SaveInteger(udg_Matrix[k],currentX,currentY,4)
//call BJDebugMsg("BBBBBBBBBBBBBBBBBBBBBBBBBBB")
return true
endif
if(pathing==1) then
if( EvaluatePathFromTo(k,tempX,tempY,x2,y2)) then
call SaveInteger(udg_Matrix[k],currentX,currentY,4)
//call BJDebugMsg("BBBBBBBBBBBBBBBBBBBBBBBBBBB")
return true
endif
endif
set tempX = currentX
set tempY = currentY-1
set pathing = LoadInteger(udg_Matrix[k],tempX,tempY)
if(pathing==4) then
call SaveInteger(udg_Matrix[k],currentX,currentY,4)
//call BJDebugMsg("BBBBBBBBBBBBBBBBBBBBBBBBBBB")
return true
endif
if(pathing==1) then
if( EvaluatePathFromTo(k,tempX,tempY,x2,y2)) then
call SaveInteger(udg_Matrix[k],currentX,currentY,4)
//call BJDebugMsg("BBBBBBBBBBBBBBBBBBBBBBBBBBB")
return true
endif
endif
set tempX = currentX-1
set tempY = currentY
set pathing = LoadInteger(udg_Matrix[k],tempX,tempY)
if(pathing==4) then
call SaveInteger(udg_Matrix[k],currentX,currentY,4)
//call BJDebugMsg("BBBBBBBBBBBBBBBBBBBBBBBBBBB")
return true
endif
if(pathing==1) then
if( EvaluatePathFromTo(k,tempX,tempY,x2,y2)) then
call SaveInteger(udg_Matrix[k],currentX,currentY,4)
//call BJDebugMsg("BBBBBBBBBBBBBBBBBBBBBBBBBBB")
return true
endif
endif
//call BJDebugMsg("end of func")
return false
endfunction
function EvaluatePathAlorithm takes integer k returns boolean
// locals
local integer start = udg_StartDirection[k]
local integer end = udg_EndDirection[k]
local integer i
local integer j
local integer pathingStart
local integer pathingEnd
local integer array startX
local integer array startY
local integer array endX
local integer array endY
local integer endPoints
local integer startPoints
local boolean finished = false
// corners
if((start == 0 and end == 1) or (start == 1 and end == 0)) then
if(LoadInteger(udg_Matrix[k],udg_RegionWidth[k]-1,0)!=2) then
return true
endif
endif
if((start == 1 and end == 2) or (start == 2 and end == 1)) then
if(LoadInteger(udg_Matrix[k],0,0)!=2) then
return true
endif
endif
if((start == 2 and end == 3) or (start == 3 and end == 2)) then
if(LoadInteger(udg_Matrix[k],0,udg_RegionHeight[k]-1)!=2) then
return true
endif
endif
if((start == 3 and end == 0) or (start == 0 and end == 3)) then
if(LoadInteger(udg_Matrix[k],udg_RegionWidth[k]-1,udg_RegionHeight[k]-1)!=2) then
return true
endif
endif
if(start==end) then
//call BJDebugMsg("start == end")
endif
set i = 0
if(end==0) then
loop
exitwhen i >= udg_RegionHeight[k]
set endX[i]=udg_RegionWidth[k]-1
set endY[i]=i
set i = i +1
endloop
elseif(end==1) then
loop
exitwhen i >= udg_RegionWidth[k]
set endX[i]=i
set endY[i]=0
set i = i +1
endloop
elseif(end==2) then
loop
exitwhen i >= udg_RegionHeight[k]
set endX[i]=0
set endY[i]=i
set i = i +1
endloop
elseif(end==3) then
loop
exitwhen i >= udg_RegionWidth[k]
set endX[i]=i
set endY[i]=udg_RegionHeight[k]-1
set i = i +1
endloop
endif
set endPoints = i
set i = 0
if(start==0) then
loop
exitwhen i >= udg_RegionHeight[k]
set startX[i]=udg_RegionWidth[k]-1
set startY[i]=i
set i = i +1
endloop
elseif(start==1) then
loop
exitwhen i >= udg_RegionWidth[k]
set startX[i]=i
set startY[i]=0
set i = i +1
endloop
elseif(start==2) then
loop
exitwhen i >= udg_RegionHeight[k]
set startX[i]=0
set startY[i]=i
set i = i +1
endloop
elseif(start==3) then
loop
exitwhen i >= udg_RegionWidth[k]
set startX[i]=i
set startY[i]=udg_RegionHeight[k]-1
set i = i +1
endloop
endif
set startPoints = i
// setup
//call BJDebugMsg(I2S(endPoints))
//call BJDebugMsg(I2S(startPoints))
set i = 0
loop
exitwhen i >= endPoints
//call BJDebugMsg(I2S(i))
//call BJDebugMsg(I2S(endX[i])+"|"+I2S(endY[i]))
if(LoadInteger(udg_Matrix[k],endX[i],endY[i])!=2) then
call SaveInteger(udg_Matrix[k],endX[i],endY[i],4)
endif
set i = i +1
endloop
// algorithm
set i = 0
loop
set j = 0
exitwhen i >= startPoints
loop
exitwhen j >= endPoints
set pathingStart = LoadInteger(udg_Matrix[k],startX[i],startY[i])
set pathingEnd = LoadInteger(udg_Matrix[k],endX[j],endY[j])
if(pathingStart==4) then
//call BJDebugMsg("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")
set finished = true
endif
if(pathingStart == 1 and pathingEnd == 4) then
//call BJDebugMsg("evaluate")
set finished = EvaluatePathFromTo(k,startX[i],startY[i],endX[j],endY[j])
if(finished) then
//call BJDebugMsg("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")
endif
endif
exitwhen finished
set j = j +1
endloop
exitwhen finished
set i = i+1
endloop
// revert matrix
if(FALSE) then
loop
exitwhen k > udg_NumberOfRegions
set i = 0
loop
set j = 0
exitwhen i >= udg_RegionHeight[k]
loop
exitwhen j >= udg_RegionWidth[k]
if(LoadInteger(udg_Matrix[k],j,i)>=3) then
call SaveInteger(udg_Matrix[k],j,i,1)
endif
set j = j + 1
endloop
set i = i + 1
endloop
set k = k + 1
endloop
endif
if(finished) then
//call BJDebugMsg("finished: true")
else
//call BJDebugMsg("finished: false")
endif
return finished
endfunction
function revertMatrix takes nothing returns nothing
local integer k
local integer j
local integer i
set k = udg_ProgressPath[udg_ParamIndex]
//call BJDebugMsg("revert"+I2S(k))
set i = 0
loop
set j = 0
exitwhen i >= udg_RegionHeight[k]
loop
exitwhen j >= udg_RegionWidth[k]
if(LoadInteger(udg_Matrix[k],j,i)>=3) then
call SaveInteger(udg_Matrix[k],j,i,1)
endif
set j = j + 1
endloop
set i = i + 1
endloop
endfunction
function Trig_EvaluatePath_Actions takes nothing returns nothing
local boolean b
set b = EvaluatePathAlorithm(udg_ProgressPath[udg_ParamIndex])
if( b) then
set udg_ProgressStatus[udg_ParamIndex] = 1
//call BJDebugMsg("true"+I2S(udg_ProgressPath[udg_ParamIndex]))
call revertMatrix()
endif
if(not b) then
set udg_ProgressStatus[udg_ParamIndex] = -1
//call BJDebugMsg("false"+I2S(udg_ProgressPath[udg_ParamIndex]))
call revertMatrix()
endif
endfunction
//===========================================================================
function InitTrig_EvaluatePath takes nothing returns nothing
set gg_trg_EvaluatePath = CreateTrigger( )
call TriggerAddAction( gg_trg_EvaluatePath, function Trig_EvaluatePath_Actions )
endfunction
//TESH.scrollpos=10
//TESH.alwaysfold=0
function Trig_toString_Actions takes nothing returns nothing
local integer k = 1
local string s = ""
local integer i = 0
local integer j = 0
loop
exitwhen k > udg_NumberOfRegions
call BJDebugMsg("Region:"+I2S(k))
set i = 0
loop
set s = " "
set j = 0
exitwhen i >= udg_RegionHeight[k]
loop
exitwhen j >= udg_RegionWidth[k]
if(LoadInteger(udg_Matrix[k],j,i)==1) then
set s = s+" o"
elseif(LoadInteger(udg_Matrix[k],j,i)==2) then
set s = s+" x"
elseif(LoadInteger(udg_Matrix[k],j,i)==3) then
set s = s+" -"
elseif(LoadInteger(udg_Matrix[k],j,i)==4) then
set s = s+" +"
endif
set j = j + 1
endloop
call BJDebugMsg(s)
set i = i + 1
endloop
set k = k + 1
endloop
endfunction
//===========================================================================
function InitTrig_toString takes nothing returns nothing
set gg_trg_toString = CreateTrigger( )
call TriggerAddAction( gg_trg_toString, function Trig_toString_Actions )
endfunction