Return to post
settings
{
main
{
Description: "Path node builder v1.3 CODE: QRD5A Use this tool to create path nodes for your PvE modes. Build project into EXPORT VARS, copy it and paste in your mode. Read more instructions in WORKSHOP SETTINGS"
Mode Name: "PATH NODE BUILDER"
Description: "Path node builder v0.7 CODE: QRD5A Use this tool to create path nodes for your PvE modes. Build project into EXPORT VARS, copy it and paste in your mode. Read more instructions in WORKSHOP SETTINGS"
}
lobby
{
Data Center Preference: France
Map Rotation: After A Game
Max Spectators: 4
Max Team 1 Players: 1
Max Team 2 Players: 1
Return To Lobby: Never
}
modes
{
Capture the Flag
Assault
{
enabled maps
{
}
}
Control
{
enabled maps
{
}
}
Escort
{
enabled maps
{
Havana
}
}
Hybrid
{
enabled maps
{
}
}
Team Deathmatch
{
enabled maps
{
}
}
General
{
Enemy Health Bars: Off
Game Mode Start: Manual
Hero Limit: Off
Kill Cam: Off
Kill Feed: Off
Respawn Time Scalar: 0%
Skins: Off
Spawn Health Packs: Disabled
}
}
heroes
{
General
{
Ultimate Ability: Off
enabled heroes
{
Zenyatta
}
}
}
workshop
{
PLAYER MOVEMENT SPEED: 180
SHOW CONNECTION EFFECTS WHEN SELECTED ONLY : Off
WRITE INTO INSPECTOR REQUIRED VARS ONLY : Off
SPAWN ROOM: [2]
}
extensions
{
Play More Effects
}
}
variables
{
global:
0: WorkshopSettingInstructions
1: PropertySpawnRoomIndex
2: PropertyPlayerMovementSpeed
3: PropertyBotMovementSpeed
4: PropertyFreeCamera
5: BuilderHudColorCurrent
6: BuilderHudColorBuildMode
7: BuilderHudColorEditMode
8: BuilderHudColorPathFindingMode
9: BuilderMode
10: LoopIterator1
11: LoopIterator2
12: LoopIterator3
13: StringConcatNodeId
14: StringConcatResult
15: StringConcatCountOfElements
16: BuilderRayCastHitPosition
17: BuilderNodePositions
18: BuilderNodeConnections
19: BuilderNodeEffectIdArray
20: BuilderNodeConnectionEffectsId
21: BuilderNodeWorldTextIdArray
22: BuilderSelectedNodeEffectPos
23: BuilderTrySelectNodeInLOS
24: BuilderSelectedNodeId
25: BuilderInnerArray
26: BuilderIsNodeHaveConnection
27: IsBuildingProject
28: BuilderProgressBarValue
29: BuilderProgressBarValueStep
30: BuildProjectEmptySpace
31: BuildProjectNewElementIndex
32: BuildProjectOldElementIndex
33: BuildProjectQueueArray
34: BuildProjectVisitedNodes
35: BuildProjectCurrentNodeId
36: BuildProjectStartNodeId
37: BuildProjectNeighborNodeId
38: PathFindingStartNodeEffectPos
39: PathFindingTargetNodeEffectPos
40: BeamEffects
41: PathFindingStartNodeId
42: PathFindingTargetNodeId
43: PathFindingNextNodeId
43: PathFindingResultPath
44: PathFindingShortestDistance
45: PathFindingCurrentDistance
46: PathFindingCurrentNodeId
47: PathFindingBotId
48: NodeTriggerRadius
49: PathFindingStartPosition
50: PathFindingTargetPosition
51: OptimizedInspectorRecorder
52: WorkshopSettingShowConnections
125: NodePositions
126: NodeConnections
127: DistanceMatrix
player:
0: BuilderModeInfoHudId
108: BotIsFollowTargetConstantly
109: BotTempVar1
110: BotLoopCurrentNodeId
111: BotCurrentDistanceInMeters
112: BotShortestDistanceInMeters
113: BotPrevNodeId
114: BotMoveSpeedMultiplier
115: BotCancelPathFinding
116: BotLoopIterator1
117: BotLoopConnectionArray
117: BotTempArray
118: BotTargetPlayer
119: BotTargetPosition
120: BotClosestNodeIdToTarget
121: BotClosestNodeIdToBot
122: BotTimestamp
122: BotPrevNodeId
123: BotNextNodeId
124: BotNextNodePosition
125: BotCurrentDistanceToTarget
126: BotShortestDistanceToTarget
127: BotIsPathFinding
}
subroutines
{
0: BuilderSwitchMode
1: BuilderEditModeSelectNode
2: BuilderEditModeDeleteNode
3: BuilderConcatStringConnections
4: BuilderDeleteConnectionsOfNode
5: BuilderConnectDisconnectSelector
6: BuilderConnectNodeBackendLogic
7: BuilderConnectNodeBeamEffect
8: BuilderDisconnectNode
9: BuilderBuildModeCreateNewNode
10: BuilderDeleteAllEffects
11: BuilderBuildProject
12: BuilderOptimizeData
13: BuilderUpdateConnectionIndexes
14: BuilderInitModEffects
15: BuilderBuildPreparedPathNodes
16: BuilderComputeDistanceMatrix
17: BuilderGetClossestNodeIdToCursor
18: PathFindingModeSelectNode
19: PathFindingModeReset
20: DeleteNodeBeams
21: CreateNodeBeams
22: PathFindingDrawShortestPath
22: PathFindingGetShortestPath
23: PathFindingCreateBot
24: PathFindingTestBotReset
122: BotResetPathFinding
123: BotGetTargetNodeAndPosition
124: BotGetNextNodeId
125: BotGetNextPosition
126: BotComputeTimestamp
127: BotGetRightHandPartOfFloatNumber
124: BotStartPathFinding
125: BotGetClosestNodeIdToTarget
126: BotGetNextNodeIdAndPosition
127: BotResetPathFinding
}
rule("=== PATH NODE BUILDER BY HUKUTA94#2589 ===")
{
event
{
Ongoing - Global;
}
actions
{
disabled Disable Inspector Recording;
Create HUD Text(All Players(All Teams), Null, Null, Custom String(
"WEB APP IS OPEN SOURCE PROJECT:\r\ngithub.com/HuKuTa94/path-node-builder"), Right, -1000, Color(White), Color(White), Color(
White), Visible To, Default Visibility);
Create HUD Text(All Players(All Teams), Null, Null, Custom String("PATH NODE BUILDER V1.3 BY HUKUTA94#2589"), Right, -999, Color(
White), Color(White), Color(White), Visible To, Default Visibility);
Create HUD Text(All Players(All Teams), Custom String(
"TO COMPUTE DISTANCE MATRIX USE WEB APP\r\n peaceful-cove-76019.herokuapp.com"), Null, Null, Top, -99, Color(Orange), Color(
White), Color(White), Visible To and String, Default Visibility);
}
}
rule("=== PATH NODE BUILDER QRD5A - EXPORT BLOCK START - COPY THESE RULES AND SUBROUTINES INTO YOUR MODE ===")
{
event
{
Ongoing - Global;
}
}
rule("MAP: AYUTTHAYA")
{
event
{
Ongoing - Global;
}
conditions
{
Current Map == Map(Ayutthaya);
}
actions
{
Global.NodePositions = Array(Vector(-6.651, 5.425, 13.629), Vector(-10.881, 4.425, 8.373), Vector(16.012, 1.425, 22.821), Vector(
20.097, 0.425, 14.688), Vector(12.073, 0.425, 14.524), Vector(37.780, -0.575, 20.159), Vector(37.938, -2.575, 27.722), Vector(
1.993, -2.575, 28.895), Vector(2.196, -1.575, 22.262), Vector(-5.931, 5.425, 21.822), Vector(30.731, -2.575, 28.813), Vector(
40.258, 6.425, 46.573), Vector(40.250, 6.425, 35.155), Vector(40.442, 6.425, 24.787), Vector(33.741, 6.425, 22.676), Vector(
16.022, 6.425, 21.885), Vector(33.485, 0.425, 13.716), Vector(34.029, 5.425, 10.129), Vector(23.958, 3.425, 10.030), Vector(
0.506, 0.426, -7.211), Vector(33.909, 0.425, -6.433), Vector(30.936, 0.425, -19.278), Vector(10.683, -0.577, -1.908), Vector(
3.361, 0.428, 5.628), Vector(22.625, -0.575, -2.360), Vector(22.632, -0.575, -12.587), Vector(11.042, -0.575, -12.389), Vector(
10.044, 3.425, -23.823), Vector(45.752, 4.425, -21.864), Vector(40.346, 5.420, -26.974), Vector(0.367, 0.425, -28.522), Vector(
14.458, 0.425, -28.321), Vector(21.565, 0.425, -28.369), Vector(-0.068, 5.425, -23.937), Vector(18.093, 1.425, -36.987),
Vector(-3.805, -0.575, -33.903), Vector(31.927, -1.575, -36.096), Vector(31.941, -2.575, -43), Vector(4.376, -2.575, -42.417),
Vector(39.708, 3.425, -46.896), Vector(17.903, 1.425, -51.176), Vector(9.704, 1.425, -73.848), Vector(-6.654, 6.425, -49.481),
Vector(-6.911, 6.425, -37.334), Vector(1.157, 6.425, -36.046), Vector(39.635, 5.425, -36.130), Vector(-3.512, 3.425, 60.161),
Vector(-4.188, -2.575, -42.257), Vector(18.225, -2.575, -44.040), Vector(16.055, 1.432, 30.092), Vector(15.956, -2.575,
30.017), Vector(26.010, 1.425, -73.337), Vector(39.345, 3.425, -58.965), Vector(9.497, 1.425, -62.521), Vector(26.565, 1.425,
-60.700), Vector(43.557, 3.425, -58.977), Vector(43.575, -2.575, -43.810), Vector(-8.771, 3.425, 44.467), Vector(-9.616,
-2.575, 29.053), Vector(24.040, 1.425, 59.225), Vector(7.967, 1.425, 59.527), Vector(24.504, 1.425, 49.171), Vector(6.510,
1.425, 48.371), Vector(-4.986, 3.425, 32.198));
Global.NodeConnections = Array(Array(9, 1, 4), Array(0, 23), Array(5, 8, 4, 3, 49), Array(2, 4, 16, 22), Array(3, 2, 23, 24),
Array(2, 6), Array(5, 10), Array(8, 50, 58), Array(2, 7), Array(0, 15, 63), Array(6, 50, 61), Array(12, 61), Array(13, 11),
Array(14, 12), Array(13, 17, 15), Array(9, 14, 4, 3, 49), Array(3, 20), Array(14, 18, 20), Array(17, 3, 24), Array(26, 22, 23,
30), Array(24, 25, 21, 16), Array(25, 28, 20, 32), Array(26, 19, 23, 24, 3), Array(1, 19, 4, 22), Array(18, 22, 20, 25, 4),
Array(26, 21, 20, 24, 31), Array(19, 25, 22, 27, 32), Array(26, 33), Array(29, 21), Array(28, 45), Array(31, 19), Array(32, 30,
34, 25), Array(31, 21, 34, 26), Array(27, 44, 19), Array(35, 36, 32, 31, 40), Array(34, 47), Array(34, 37), Array(36, 48, 56),
Array(47, 48), Array(45, 52), Array(34, 54, 53), Array(51, 53), Array(43), Array(44, 42), Array(43, 33), Array(39, 29), Array(
57, 60), Array(35, 38), Array(37), Array(2, 7, 10, 61, 62), Array(7, 10), Array(41, 54), Array(54, 39, 55), Array(41, 40, 54),
Array(53, 40, 51, 52), Array(52, 56), Array(55, 37), Array(58, 62, 63, 46), Array(7, 57), Array(60, 61), Array(59, 62, 46),
Array(11, 59, 10, 62), Array(61, 60, 49, 57, 63), Array(62, 57, 9));
Global.DistanceMatrix = Array(Array(1.001, 2.004, 2.004, 1.003, 3.005, 4.006, 4.005, 3.005, 1.001, 4.005, 5.005, 5.005, 4.004,
3.003, 2.002, 3.005, 4.004, 3.005, 3.003, 3.005, 4.006, 3.003, 2.002, 2.004, 3.005, 4.004, 5.005, 5.007, 6.008, 4.004, 4.005,
5.005, 6.004, 5.006, 6.007, 6.007, 7.008, 8.009, 8.010, 6.007, 8.009, 9.007, 8.006, 7.005, 7.009, 4.004, 7.008, 8.009, 3.004,
5.006, 8.009, 8.009, 7.008, 7.008, 9.010, 8.009, 3.003, 4.004, 5.005, 4.004, 4.004, 3.003, 2.002), Array(3.003, 3.003, 2.002,
4.004, 5.005, 5.005, 4.004, 2.002, 5.006, 6.006, 6.006, 5.005, 4.004, 3.003, 4.004, 5.005, 4.004, 2.002, 4.004, 5.005, 2.002,
1.001, 3.003, 4.004, 3.003, 4.004, 6.006, 7.007, 3.003, 4.004, 4.004, 5.003, 5.005, 6.006, 6.006, 7.007, 8.008, 9.009, 6.006,
8.008, 8.006, 7.005, 6.004, 8.008, 5.005, 7.007, 8.008, 4.004, 6.006, 8.008, 8.008, 7.007, 7.007, 9.009, 8.008, 4.004, 5.005,
6.006, 5.005, 5.005, 4.004, 3.003), Array(1.001, 1.001, 1.001, 2.002, 2.002, 1.001, 4.003, 2.003, 3.004, 4.005, 5.004, 5.003,
5.002, 2.002, 4.003, 3.002, 3.003, 3.003, 4.004, 2.002, 2.002, 2.002, 3.003, 3.003, 4.004, 5.005, 6.006, 4.004, 4.004, 4.004,
5.004, 5.005, 6.006, 6.006, 7.007, 8.008, 8.008, 6.006, 8.008, 8.007, 7.006, 6.005, 7.007, 4.004, 7.007, 8.008, 1.001, 3.003,
8.008, 8.008, 7.007, 7.007, 9.009, 8.008, 3.003, 3.003, 3.004, 3.003, 2.003, 2.002, 3.003), Array(1.001, 2.002, 3.003, 3.003,
2.002, 5.002, 3.004, 4.005, 5.004, 6.003, 5.002, 6.001, 1.001, 4.002, 3.001, 2.002, 2.002, 3.003, 1.001, 2.002, 2.002, 3.003,
2.002, 3.003, 4.004, 5.005, 3.003, 4.004, 3.003, 4.003, 4.004, 5.005, 5.005, 6.006, 7.007, 7.007, 5.005, 7.007, 7.006, 6.005,
5.004, 6.006, 5.005, 6.006, 7.007, 2.002, 4.004, 7.007, 7.007, 6.006, 6.006, 8.008, 7.007, 4.004, 4.004, 4.005, 4.004, 3.004,
3.003, 4.003), Array(2.002, 3.003, 3.003, 2.002, 4.002, 3.004, 4.005, 5.004, 5.003, 4.002, 5.001, 2.002, 3.003, 2.002, 2.002,
2.002, 3.003, 2.002, 1.001, 1.001, 2.002, 3.003, 4.004, 4.004, 5.005, 3.003, 3.003, 4.004, 5.003, 4.004, 5.005, 5.005, 6.006,
7.007, 7.007, 5.005, 7.007, 8.006, 7.005, 6.004, 6.006, 5.005, 6.006, 7.007, 2.002, 4.004, 7.007, 7.007, 6.006, 6.006, 8.008,
7.007, 4.004, 4.004, 4.005, 4.004, 3.004, 3.003, 4.003), Array(1.001, 3.003, 2.002, 5.004, 2.002, 4.004, 5.005, 6.005, 6.004,
6.003, 3.003, 5.004, 4.003, 4.004, 4.004, 5.005, 3.003, 3.003, 3.003, 4.004, 4.004, 5.005, 6.006, 7.007, 5.005, 5.005, 5.005,
6.005, 6.006, 7.007, 7.007, 8.008, 9.009, 9.009, 7.007, 9.009, 9.008, 8.007, 7.006, 8.008, 5.005, 8.008, 9.009, 2.002, 3.003,
9.009, 9.009, 8.008, 8.008, 10.010, 9.009, 4.004, 4.004, 4.004, 4.004, 3.003, 3.003, 4.004), Array(3.003, 3.003, 5.004, 1.001,
3.003, 4.004, 5.005, 6.004, 6.003, 4.004, 6.005, 5.004, 5.005, 5.005, 6.006, 4.004, 4.004, 4.004, 5.005, 5.005, 6.006, 7.007,
8.008, 6.006, 6.006, 6.006, 7.006, 7.007, 8.008, 8.008, 9.009, 10.010, 10.010, 8.008, 10.010, 10.009, 9.008, 8.007, 9.009,
5.005, 9.009, 10.010, 3.002, 2.002, 10.010, 10.010, 9.009, 9.009, 11.011, 10.010, 4.004, 4.004, 3.003, 4.004, 2.002, 3.003,
4.004), Array(1.001, 4.003, 2.002, 4.004, 5.005, 6.004, 6.003, 5.002, 4.004, 6.004, 5.004, 5.005, 5.005, 6.006, 4.004, 4.004,
4.004, 5.005, 5.005, 6.006, 7.007, 8.008, 6.006, 6.006, 6.006, 7.006, 7.007, 8.008, 8.008, 9.009, 10.010, 10.010, 8.008,
10.010, 10.009, 9.008, 8.007, 9.009, 3.003, 9.009, 10.010, 3.001, 1.001, 10.010, 10.010, 9.009, 9.009, 11.011, 10.010, 2.002,
1.001, 4.004, 4.003, 3.003, 3.002, 3.003), Array(5.004, 3.003, 4.005, 5.006, 6.005, 6.004, 6.003, 3.003, 5.004, 4.003, 4.004,
4.004, 5.005, 3.003, 3.003, 3.003, 4.004, 4.004, 5.005, 6.006, 7.007, 5.005, 5.005, 5.005, 6.005, 6.006, 7.007, 7.007, 8.008,
9.009, 9.009, 7.007, 9.009, 9.008, 8.007, 7.006, 8.008, 4.004, 8.008, 9.009, 2.002, 2.002, 9.009, 9.009, 8.008, 8.008, 10.010,
9.009, 3.003, 2.002, 4.005, 4.004, 3.004, 3.003, 4.004), Array(3.004, 4.004, 4.004, 3.003, 2.002, 1.001, 3.006, 3.003, 4.004,
4.004, 4.006, 5.007, 3.004, 3.003, 3.005, 4.006, 4.005, 5.006, 6.008, 7.009, 5.005, 5.006, 5.006, 6.005, 6.007, 7.008, 7.008,
8.009, 9.010, 9.011, 7.008, 9.010, 9.008, 8.007, 7.006, 8.010, 3.003, 8.009, 9.010, 2.003, 4.005, 9.010, 9.010, 8.009, 8.009,
10.011, 9.010, 2.002, 3.003, 4.004, 3.003, 3.003, 2.002, 1.001), Array(2.002, 3.003, 4.004, 5.003, 5.002, 5.004, 6.004, 6.004,
6.005, 6.005, 7.006, 5.004, 5.004, 5.004, 6.005, 6.005, 7.006, 8.007, 9.008, 7.006, 7.006, 7.006, 8.006, 8.007, 9.008, 9.008,
10.009, 11.010, 11.010, 9.008, 11.010, 11.009, 10.008, 9.007, 10.009, 4.004, 10.009, 11.010, 3.001, 1.001, 11.010, 11.010,
10.009, 10.009, 12.011, 11.010, 3.003, 3.003, 2.002, 3.003, 1.001, 2.002, 3.003), Array(1.001, 2.002, 3.003, 4.003, 6.005,
4.004, 5.005, 7.006, 5.006, 6.007, 6.005, 6.005, 6.005, 6.006, 7.006, 8.007, 7.008, 8.009, 8.007, 7.007, 7.007, 9.007, 8.008,
9.009, 9.009, 10.010, 11.011, 10.011, 9.009, 11.011, 12.010, 11.009, 10.008, 9.010, 4.004, 10.010, 11.011, 3.002, 3.003,
11.011, 11.011, 10.010, 10.010, 12.012, 11.011, 3.003, 4.004, 2.002, 3.003, 1.001, 2.002, 3.003), Array(1.001, 2.002, 3.003,
5.006, 3.003, 4.004, 6.007, 4.006, 5.007, 5.006, 5.006, 5.005, 5.006, 6.007, 7.008, 6.008, 7.009, 7.008, 6.007, 6.008, 8.008,
7.008, 8.009, 8.009, 9.010, 10.011, 9.011, 8.009, 10.011, 11.011, 10.010, 9.009, 8.010, 5.005, 9.010, 10.011, 4.003, 4.004,
10.011, 10.011, 9.010, 9.010, 11.012, 10.011, 4.004, 5.005, 3.003, 4.004, 2.002, 3.003, 4.004), Array(1.001, 2.002, 4.006,
2.002, 3.003, 5.006, 3.005, 4.006, 4.005, 4.006, 4.004, 4.005, 5.006, 6.007, 5.007, 6.008, 6.007, 5.006, 5.007, 7.007, 6.007,
7.008, 7.008, 8.009, 9.010, 8.010, 7.008, 9.010, 10.010, 9.009, 8.008, 7.009, 6.006, 8.009, 9.010, 3.004, 5.005, 9.010, 9.010,
8.009, 8.009, 10.011, 9.010, 5.005, 5.006, 4.004, 5.005, 3.003, 4.004, 4.004), Array(1.001, 3.005, 1.001, 2.002, 4.005, 2.004,
3.005, 3.004, 3.005, 3.003, 3.004, 4.005, 5.006, 4.006, 5.007, 5.006, 4.005, 4.006, 6.006, 5.006, 6.007, 6.007, 7.008, 8.009,
7.009, 6.007, 8.009, 9.009, 8.008, 7.007, 6.008, 5.005, 7.008, 8.009, 2.005, 4.006, 8.009, 8.009, 7.008, 7.008, 9.010, 8.009,
4.004, 4.005, 4.005, 4.005, 3.004, 3.004, 3.003), Array(2.006, 2.002, 3.003, 3.005, 3.005, 4.006, 2.005, 2.004, 2.004, 3.005,
3.006, 4.007, 5.007, 6.008, 4.006, 4.006, 4.007, 5.006, 5.007, 6.008, 6.008, 7.009, 8.010, 8.010, 6.008, 8.010, 8.009, 7.008,
6.007, 7.009, 4.004, 7.009, 8.010, 1.004, 3.006, 8.010, 8.010, 7.009, 7.009, 9.011, 8.010, 3.003, 3.004, 3.005, 3.004, 2.004,
2.003, 2.002), Array(4.002, 3.002, 3.003, 1.001, 2.002, 2.002, 3.003, 2.002, 2.002, 3.003, 4.004, 3.003, 4.004, 4.004, 3.003,
3.003, 5.004, 4.004, 5.005, 5.005, 6.006, 7.007, 6.006, 5.005, 7.007, 8.007, 7.006, 6.005, 5.005, 6.006, 6.006, 7.007, 3.003,
5.005, 7.007, 7.007, 6.006, 6.006, 8.008, 7.007, 5.005, 5.005, 5.006, 5.005, 4.005, 4.004, 5.004), Array(1.001, 4.004, 1.003,
2.004, 3.003, 4.004, 2.002, 2.003, 3.004, 4.005, 3.005, 4.006, 4.005, 3.004, 3.005, 5.005, 4.005, 5.006, 5.006, 6.007, 7.008,
6.008, 5.006, 7.008, 8.008, 7.007, 6.006, 5.007, 6.006, 6.007, 7.008, 3.005, 5.007, 7.008, 7.008, 6.007, 6.007, 8.009, 7.008,
5.005, 5.006, 5.006, 5.006, 4.005, 4.005, 4.004), Array(3.003, 2.002, 3.003, 2.002, 3.003, 1.001, 2.002, 3.003, 4.004, 4.004,
5.005, 4.004, 3.003, 4.004, 5.004, 4.004, 5.005, 5.005, 6.006, 7.007, 7.007, 5.005, 7.007, 8.007, 7.006, 6.005, 6.006, 6.007,
6.006, 7.007, 3.004, 5.006, 7.007, 7.007, 6.006, 6.006, 8.008, 7.007, 5.006, 5.006, 5.007, 5.006, 4.006, 4.005, 5.005), Array(
3.003, 3.003, 1.001, 1.001, 2.002, 2.002, 1.001, 2.002, 4.004, 5.005, 1.001, 2.002, 2.002, 3.001, 3.003, 4.004, 4.004, 5.005,
6.006, 7.007, 4.004, 6.006, 6.004, 5.003, 4.002, 6.006, 7.007, 5.005, 6.006, 4.004, 6.006, 6.006, 6.006, 5.005, 5.005, 7.007,
6.006, 6.006, 6.006, 6.007, 6.006, 5.006, 5.005, 5.005), Array(1.001, 2.002, 3.003, 1.001, 1.001, 2.002, 3.003, 2.002, 3.003,
3.003, 2.002, 2.002, 4.004, 3.003, 4.004, 4.004, 5.005, 6.006, 5.005, 4.004, 6.006, 7.007, 6.006, 5.005, 4.004, 7.007, 5.005,
6.006, 4.004, 6.006, 6.006, 6.006, 5.005, 5.005, 7.007, 6.006, 6.006, 6.006, 6.007, 6.006, 5.006, 5.005, 6.005), Array(3.003,
4.004, 2.002, 1.001, 2.002, 3.003, 1.001, 2.002, 3.003, 2.002, 1.001, 4.004, 2.002, 3.003, 3.003, 4.004, 5.005, 4.004, 3.003,
5.005, 7.007, 6.006, 5.005, 3.003, 8.008, 4.004, 5.005, 5.005, 7.007, 5.005, 5.005, 4.004, 4.004, 6.006, 5.005, 7.007, 7.007,
7.008, 7.007, 6.007, 6.006, 7.006), Array(1.001, 1.001, 2.002, 1.001, 2.002, 4.004, 5.005, 2.002, 3.003, 2.002, 3.002, 3.003,
4.004, 4.004, 5.005, 6.006, 7.007, 4.004, 6.006, 6.005, 5.004, 4.003, 6.006, 6.006, 5.005, 6.006, 3.003, 5.005, 6.006, 6.006,
5.005, 5.005, 7.007, 6.006, 5.005, 5.005, 5.006, 5.005, 4.005, 4.004, 5.004), Array(2.002, 3.003, 2.002, 3.003, 5.005, 6.006,
2.002, 3.003, 3.003, 4.002, 4.004, 5.005, 5.005, 6.006, 7.007, 8.008, 5.005, 7.007, 7.005, 6.004, 5.003, 7.007, 6.006, 6.006,
7.007, 3.003, 5.005, 7.007, 7.007, 6.006, 6.006, 8.008, 7.007, 5.005, 5.005, 5.006, 5.005, 4.005, 4.004, 4.004), Array(1.001,
2.002, 3.003, 3.003, 4.004, 3.003, 2.002, 3.003, 4.003, 3.003, 4.004, 4.004, 5.005, 6.006, 6.006, 4.004, 6.006, 7.006, 6.005,
5.004, 5.005, 6.006, 5.005, 6.006, 3.003, 5.005, 6.006, 6.006, 5.005, 5.005, 7.007, 6.006, 5.005, 5.005, 5.006, 5.005, 4.005,
4.004, 5.004), Array(1.001, 2.002, 2.002, 3.003, 2.002, 1.001, 2.002, 3.003, 2.002, 3.003, 3.003, 4.004, 5.005, 5.005, 3.003,
5.005, 6.006, 5.005, 4.004, 4.004, 7.007, 4.004, 5.005, 4.004, 6.006, 5.005, 5.005, 4.004, 4.004, 6.006, 5.005, 6.006, 6.006,
6.007, 6.006, 5.006, 5.005, 6.005), Array(1.001, 3.003, 4.004, 2.002, 2.002, 1.001, 2.002, 2.002, 3.003, 3.003, 4.004, 5.005,
6.006, 3.003, 5.005, 5.005, 4.004, 3.003, 5.005, 7.007, 4.004, 5.005, 4.004, 6.006, 5.005, 5.005, 4.004, 4.004, 6.006, 5.005,
6.006, 6.006, 6.007, 6.006, 5.006, 5.005, 6.005), Array(4.004, 5.005, 3.003, 3.003, 2.002, 1.001, 3.003, 4.004, 4.004, 5.005,
6.006, 7.007, 4.004, 6.006, 4.004, 3.003, 2.002, 6.006, 8.008, 5.005, 6.006, 5.005, 7.007, 6.006, 6.006, 5.005, 5.005, 7.007,
6.006, 7.007, 7.007, 7.008, 7.007, 6.007, 6.006, 7.006), Array(1.001, 4.004, 3.003, 2.002, 5.005, 3.003, 4.004, 4.004, 5.005,
6.006, 3.003, 4.004, 6.006, 8.008, 7.007, 6.006, 2.002, 9.009, 5.005, 6.006, 6.006, 8.008, 6.006, 4.004, 5.005, 5.005, 5.005,
6.006, 8.008, 8.008, 8.009, 8.008, 7.008, 7.007, 8.007), Array(5.005, 4.004, 3.003, 6.006, 4.004, 5.005, 5.005, 6.006, 7.007,
2.002, 5.005, 6.006, 9.009, 8.008, 7.007, 1.001, 10.010, 6.006, 7.007, 7.007, 9.009, 5.005, 3.003, 5.005, 4.004, 4.004, 5.005,
9.009, 9.009, 9.010, 9.009, 8.009, 8.008, 9.008), Array(1.001, 2.002, 4.002, 2.002, 3.003, 3.003, 4.004, 5.005, 6.006, 3.003,
5.005, 7.005, 6.004, 5.003, 6.006, 8.008, 4.004, 5.005, 5.005, 7.007, 5.005, 5.005, 4.004, 4.004, 6.006, 5.005, 7.007, 7.007,
7.008, 7.007, 6.007, 6.006, 6.006), Array(1.001, 4.003, 1.001, 2.002, 2.002, 3.003, 4.004, 5.005, 2.002, 4.004, 7.006, 6.005,
5.004, 5.005, 8.008, 3.003, 4.004, 5.005, 7.007, 4.004, 4.004, 3.003, 3.003, 5.005, 4.004, 7.007, 7.007, 7.008, 7.007, 6.007,
6.006, 7.006), Array(3.003, 1.001, 2.002, 2.002, 3.003, 4.004, 5.005, 2.002, 4.004, 6.006, 5.005, 4.004, 4.004, 8.008, 3.003,
4.004, 5.005, 7.007, 4.004, 4.004, 3.003, 3.003, 5.005, 4.004, 7.007, 7.007, 7.008, 7.007, 6.007, 6.006, 7.006), Array(4.004,
5.005, 5.005, 6.006, 7.007, 8.008, 5.005, 7.007, 3.003, 2.002, 1.001, 7.007, 8.009, 6.006, 7.007, 5.006, 7.008, 7.007, 7.007,
6.006, 6.006, 8.008, 7.007, 7.008, 7.008, 7.009, 7.008, 6.008, 6.007, 6.007), Array(1.001, 1.001, 2.002, 3.003, 4.004, 1.001,
3.003, 7.007, 6.006, 5.005, 5.005, 9.009, 2.002, 3.003, 6.006, 8.008, 3.003, 3.003, 2.002, 2.002, 4.004, 3.003, 8.008, 8.008,
8.009, 8.008, 7.008, 7.007, 8.007), Array(2.002, 3.003, 2.002, 5.005, 2.002, 4.004, 8.008, 7.007, 6.006, 6.006, 10.010, 1.001,
3.004, 7.007, 9.009, 4.004, 4.004, 3.003, 3.003, 5.005, 4.004, 9.009, 9.009, 9.010, 9.009, 8.009, 8.008, 9.008), Array(1.001,
4.003, 5.005, 2.002, 4.004, 8.008, 7.007, 6.006, 6.006, 10.010, 3.003, 2.002, 7.007, 9.009, 4.004, 4.004, 3.003, 3.003, 3.003,
2.002, 9.009, 9.009, 9.010, 9.009, 8.009, 8.008, 9.008), Array(5.002, 4.004, 3.003, 5.005, 9.009, 8.008, 7.007, 5.005, 11.011,
4.003, 1.001, 8.008, 10.010, 5.005, 3.003, 4.004, 4.004, 2.002, 1.001, 10.010, 10.010, 10.011, 10.010, 9.010, 9.009, 10.009),
Array(6.007, 4.004, 6.006, 10.010, 9.009, 8.008, 7.008, 12.012, 1.001, 1.006, 9.009, 11.011, 6.006, 5.006, 5.005, 5.005, 4.007,
3.006, 11.011, 11.011, 11.012, 11.011, 10.011, 10.010, 11.010), Array(3.003, 4.004, 11.011, 10.010, 9.009, 1.001, 12.012,
6.006, 5.005, 9.009, 11.011, 3.003, 1.001, 3.003, 2.002, 2.002, 3.003, 11.011, 11.011, 11.012, 11.011, 10.011, 10.010, 11.010),
Array(2.002, 8.008, 7.007, 6.006, 4.004, 10.010, 3.003, 4.004, 7.007, 9.009, 2.002, 2.002, 1.001, 1.001, 3.003, 4.004, 9.009,
9.009, 9.010, 9.009, 8.009, 8.008, 9.008), Array(10.010, 9.009, 8.008, 5.005, 12.012, 5.005, 6.006, 9.009, 11.011, 1.001,
3.003, 1.001, 2.002, 4.004, 5.005, 11.011, 11.011, 11.012, 11.011, 10.011, 10.010, 11.010), Array(1.001, 2.002, 10.010, 11.012,
9.009, 10.010, 8.009, 10.011, 10.010, 10.010, 9.009, 9.009, 11.011, 10.010, 10.011, 10.011, 10.012, 10.011, 9.011, 9.010,
9.010), Array(1.001, 9.009, 10.011, 8.008, 9.009, 7.008, 9.010, 9.009, 9.009, 8.008, 8.008, 10.010, 9.009, 9.010, 9.010, 9.011,
9.010, 8.010, 8.009, 8.009), Array(8.008, 9.010, 7.007, 8.008, 6.007, 8.009, 8.008, 8.008, 7.007, 7.007, 9.009, 8.008, 8.009,
8.009, 8.010, 8.009, 7.009, 7.008, 7.008), Array(11.011, 7.007, 6.006, 8.008, 10.010, 4.004, 2.002, 4.004, 3.003, 3.003, 4.004,
10.010, 10.010, 10.011, 10.010, 9.010, 9.009, 10.009), Array(11.011, 12.012, 3.003, 4.004, 12.012, 12.012, 11.011, 11.011,
13.013, 12.012, 1.001, 2.002, 2.002, 1.001, 3.003, 2.002, 2.002), Array(2.005, 8.008, 10.010, 5.005, 5.005, 4.004, 4.004,
5.006, 4.005, 10.010, 10.010, 10.011, 10.010, 9.010, 9.009, 10.009), Array(9.009, 11.011, 6.006, 4.004, 5.005, 5.005, 3.003,
2.002, 11.011, 11.011, 11.012, 11.011, 10.011, 10.010, 11.010), Array(2.004, 9.009, 9.009, 8.008, 8.008, 10.010, 9.009, 2.002,
2.003, 2.003, 2.002, 1.002, 1.001, 2.002), Array(11.011, 11.011, 10.010, 10.010, 12.012, 11.011, 3.003, 2.002, 3.003, 4.004,
2.002, 3.003, 4.004), Array(2.002, 2.002, 1.001, 3.003, 4.004, 11.011, 11.011, 11.012, 11.011, 10.011, 10.010, 11.010), Array(
2.002, 1.001, 1.001, 2.002, 11.011, 11.011, 11.012, 11.011, 10.011, 10.010, 11.010), Array(1.001, 3.003, 4.004, 10.010, 10.010,
10.011, 10.010, 9.010, 9.009, 10.009), Array(2.002, 3.003, 10.010, 10.010, 10.011, 10.010, 9.010, 9.009, 10.009), Array(1.001,
12.012, 12.012, 12.013, 12.012, 11.012, 11.011, 12.011), Array(11.011, 11.011, 11.012, 11.011, 10.011, 10.010, 11.010), Array(
1.001, 3.003, 2.002, 2.002, 1.001, 1.001), Array(4.004, 3.003, 3.003, 2.002, 2.002), Array(1.001, 1.001, 2.002, 3.003), Array(
2.002, 1.001, 2.002), Array(1.001, 2.002), Array(1.001));
}
}
rule("MAP: MALEVENTO (NODE POSITIONS)")
{
event
{
Ongoing - Global;
}
conditions
{
Current Map == Map(Malevento);
}
actions
{
Global.NodePositions = Array(Vector(-10.738, 4.425, 15.041), Vector(-17.895, 0.425, 15.639), Vector(-20.018, 1.954, 5.175), Vector(
-26.129, 0.327, 33.507), Vector(1.810, -3.075, -30.681), Vector(11.101, -0.575, -24.641), Vector(-2.351, -0.575, -16.396),
Vector(-9.130, 0.925, -12.307), Vector(0.002, 0.425, -3.019), Vector(16.802, 1.425, -0.295), Vector(22.166, 1.425, -1.879),
Vector(25.401, 2.438, -25.223), Vector(12.473, 3.925, 21.989), Vector(18.785, 3.425, 12.436), Vector(0.021, 1.427, 3.387),
Vector(-6.597, 1.427, 2.906), Vector(6.538, 1.427, 3.209), Vector(-7.694, 2.425, 42.764), Vector(-0.011, 2.178, 33.968),
Vector(-5.701, 7.714, 31.977), Vector(-24.570, 0.465, 43.852), Vector(-11.885, 2.425, 35.959), Vector(-20.395, 1.561, 25.748),
Vector(-6.042, 2.427, 19.931), Vector(-0.110, 2.427, 18.298), Vector(-32.363, -0.575, 18.321), Vector(-27.042, -0.575, 15.239),
Vector(-2.834, 2.785, 33.362), Vector(-2.595, 3.579, 39.484), Vector(13.931, 4.425, 34.748), Vector(4.923, 5.430, 34.610),
Vector(4.717, 6.328, 28.384), Vector(43.372, 7.425, 20.411), Vector(34.158, 5.795, 1.844), Vector(23.450, 3.425, -12.552),
Vector(24.162, 4.425, 36), Vector(24.309, 3.425, 25.555), Vector(20.168, 2.358, -20.795), Vector(31.210, 3.425, -16.262),
Vector(-12.573, 0.425, -1.478), Vector(-24.265, -2.569, -2.175), Vector(-21.261, -2.575, -21.570), Vector(-31.615, -2.399,
-4.360), Vector(3.017, -0.575, -10.994), Vector(9.487, 1.425, -2.375), Vector(-15.759, -2.575, -19.416), Vector(-2.674, 5.426,
-19.696), Vector(48.610, 4.425, 25.857), Vector(29.400, 3.425, 19.662), Vector(17.004, 6.889, 4.152), Vector(5.291, 6.224,
21.467), Vector(11.113, 3.425, -17.689), Vector(-26.146, 4.425, 14.513), Vector(-26.757, 3.435, -1.682), Vector(-18.687, 2.425,
-16.740), Vector(0.475, 5.448, -26.518), Vector(-13.700, -2.205, -27.259), Vector(0.148, 3.097, 45.533), Vector(-0.093, 9.434,
40.244), Vector(-6.460, 5.927, 3.853), Vector(6.328, 5.925, 3.277), Vector(2.876, -3.080, -34.798), Vector(27.016, 6.425,
12.268), Vector(-36.013, 5.071, 21.851), Vector(-30.072, 5.071, 28.407), Vector(-34.556, 5.142, 27.572), Vector(-16.872,
-2.575, -31.658), Vector(38.964, 5, 22.877), Vector(22.370, 6.425, 2.101), Vector(38.279, 7.425, 28.325), Vector(34.339, 7.710,
22.006), Vector(-0.094, 10.474, 25.453), Vector(-28.951, -1.544, 7.626), Vector(-26.961, 4.425, 8.740), Vector(-30.851, 5.157,
19.324), Vector(-22.499, -2.575, -12.800), Vector(-14.980, 2.460, 44.680), Vector(-0.482, -1.575, -22.684));
Create HUD Text(All Players(All Teams), Null, Null, Custom String("PATH NODES BUILDER V{0} BY HUKUTA94#2589", 0.700), Right, -1000,
Color(White), Color(White), Color(White), Visible To, Default Visibility);
}
}
rule("MAP: MALEVENTO (NODE CONNECTIONS)")
disabled rule("=== EXPORT BLOCK START - COPY THESE RULES AND SUBROUTINES INTO YOUR MODE ===")
{
event
{
Ongoing - Global;
}
conditions
{
Current Map == Map(Malevento);
}
actions
{
Global.NodeConnections = Array(Array(39, 52), Array(2, 22, 26, 39), Array(1, 39, 53), Array(20, 21, 22, 25), Array(5, 61, 66, 77),
Array(4, 37, 11, 43), Array(7, 8, 45, 43, 77), Array(6, 8, 39, 54, 45), Array(7, 6, 14, 39, 43, 44), Array(10, 13, 44), Array(
9, 34), Array(37, 5, 38), Array(13, 24, 29, 36, 48), Array(12, 9, 36, 48), Array(8, 15, 16), Array(14, 24), Array(14, 24),
Array(21, 57, 76), Array(58, 71), Array(31, 58), Array(3, 76), Array(3, 17, 22, 27), Array(3, 21, 1, 23, 52), Array(22, 24,
59), Array(23, 12, 27, 18, 16, 15), Array(26, 3), Array(1, 25, 72), Array(21, 24, 18, 28), Array(27, 30), Array(12, 30, 35,
57), Array(28, 29, 31), Array(30, 19, 50), Array(33, 47, 69, 70), Array(32, 34, 48, 62, 68), Array(33, 10, 37, 38), Array(29,
36, 69), Array(12, 13, 35, 48), Array(34, 11, 51, 5), Array(11, 34, 68), Array(40, 8, 7, 0, 2, 1), Array(39, 42, 45, 75),
Array(42, 45, 56, 66, 75), Array(41, 40, 72, 75), Array(6, 5, 8, 44), Array(43, 8, 9, 51), Array(41, 6, 56, 7, 66, 75, 40),
Array(6, 45, 51, 55, 56), Array(32, 67), Array(36, 12, 33, 13, 62, 67), Array(13, 60, 68), Array(12, 31, 24, 60), Array(44, 43,
46, 37, 5), Array(22, 0, 25, 73, 74), Array(39, 2, 42, 54, 73), Array(45, 41, 42, 53, 7), Array(46, 56, 61), Array(55, 46, 41,
45, 66), Array(17, 29), Array(19, 57), Array(60, 24, 23), Array(49, 24, 50, 59), Array(4), Array(33, 48, 13), Array(65, 25, 3,
74), Array(65, 3, 25), Array(63, 64, 3, 25), Array(41, 45, 56, 4), Array(47, 48), Array(38, 33, 49), Array(35, 32, 70), Array(
69, 32, 48, 36), Array(50, 23, 24, 19, 31), Array(26, 42), Array(52, 53), Array(52, 63), Array(45, 42, 40, 41), Array(20, 17),
Array(6, 4));
}
}
rule("MAP: MALEVENTO (DISTANCE MATRIX)")
{
event
{
Ongoing - Global;
}
conditions
{
Current Map == Map(Malevento);
}
actions
{
Global.DistanceMatrix = Array(Array(2.002, 2.002, 3.003, 5.005, 4.004, 3.003, 2.002, 2.002, 4.004, 5.005, 5.005, 5.005, 5.005,
3.003, 4.004, 4.004, 4.004, 5.005, 7.007, 4.004, 3.003, 2.002, 3.003, 4.004, 2.004, 3.003, 4.004, 5.005, 6.006, 6.006, 7.006,
8.008, 7.007, 6.006, 7.007, 6.006, 5.005, 6.006, 1.001, 2.002, 4.004, 3.003, 3.003, 3.003, 3.003, 5.004, 8.008, 6.006, 6.006,
6.005, 4.004, 1.001, 3.002, 3.003, 5.005, 4.004, 5.005, 6.006, 4.004, 5.005, 6.006, 7.006, 3.003, 5.004, 4.004, 4.004, 7.007,
7.007, 8.008, 9.007, 6.004, 4.004, 2.002, 2.002, 3.003, 5.005, 4.004), Array(1.001, 2.002, 5.005, 4.004, 3.003, 2.002, 2.002,
4.004, 5.005, 5.005, 4.004, 5.005, 3.003, 4.004, 4.004, 3.003, 4.004, 6.006, 3.003, 2.002, 1.001, 2.002, 3.003, 2.002, 1.001,
3.003, 4.004, 5.005, 5.005, 6.005, 7.007, 6.006, 6.006, 6.006, 5.005, 5.005, 6.006, 1.001, 2.002, 4.004, 3.003, 3.003, 3.003,
3.003, 5.004, 7.007, 5.005, 5.005, 5.004, 4.004, 2.002, 2.002, 3.003, 5.005, 4.004, 4.004, 5.005, 3.003, 4.004, 6.006, 6.006,
4.003, 6.003, 5.003, 4.004, 6.006, 6.006, 7.007, 8.006, 5.003, 2.002, 3.003, 3.003, 3.003, 4.004, 4.004), Array(3.003, 5.005,
4.004, 3.003, 2.002, 2.002, 4.004, 5.005, 5.005, 5.005, 5.005, 3.003, 4.004, 4.004, 4.004, 5.005, 7.007, 4.004, 3.003, 2.002,
3.003, 4.004, 3.003, 2.002, 4.004, 5.005, 6.006, 6.006, 7.006, 8.008, 7.007, 6.006, 7.007, 6.006, 5.005, 6.006, 1.001, 2.002,
3.004, 2.003, 3.003, 3.003, 3.003, 5.004, 8.008, 6.006, 6.006, 6.005, 4.004, 3.003, 1.001, 2.002, 5.005, 4.004, 5.005, 6.006,
4.004, 5.005, 6.006, 7.006, 5.004, 7.004, 6.004, 4.004, 7.007, 7.007, 8.008, 9.007, 6.004, 3.003, 2.002, 4.004, 3.003, 5.005,
4.004), Array(7.007, 6.006, 5.005, 4.004, 4.004, 6.006, 7.007, 7.007, 4.004, 5.005, 5.005, 4.004, 4.004, 2.002, 3.004, 5.005,
1.001, 1.001, 1.001, 2.002, 3.003, 1.001, 2.002, 2.002, 3.003, 4.004, 4.004, 5.005, 7.007, 6.006, 7.007, 5.005, 5.005, 7.007,
7.007, 3.003, 4.004, 5.005, 4.004, 5.005, 5.005, 5.005, 7.006, 7.007, 5.005, 5.005, 5.004, 6.006, 2.002, 4.004, 5.005, 7.007,
6.006, 3.003, 4.004, 3.003, 4.004, 8.008, 6.006, 4.001, 6.001, 5.001, 6.006, 6.006, 6.006, 6.006, 7.006, 4.003, 3.003, 3.003,
3.002, 5.005, 2.002, 6.006), Array(1.001, 2.002, 3.003, 3.003, 4.004, 4.004, 2.002, 6.006, 5.005, 4.004, 5.005, 5.005, 8.008,
7.008, 9.009, 8.008, 7.007, 6.006, 7.007, 6.006, 6.006, 5.005, 7.007, 8.008, 7.007, 8.008, 8.008, 5.005, 4.004, 3.003, 7.007,
6.006, 2.002, 3.003, 4.004, 3.003, 2.002, 3.003, 2.002, 3.003, 2.002, 3.003, 6.006, 5.005, 5.005, 7.007, 3.002, 6.006, 5.004,
4.003, 3.002, 2.002, 8.008, 8.009, 7.007, 6.006, 1.001, 5.005, 8.007, 10.007, 9.007, 1.001, 6.006, 4.004, 6.006, 6.006, 8.007,
4.004, 6.005, 7.007, 3.003, 9.009, 1.001), Array(2.002, 3.003, 2.002, 3.003, 3.003, 1.001, 5.005, 4.004, 3.003, 4.004, 4.004,
7.007, 6.007, 8.008, 7.007, 6.006, 5.005, 6.006, 5.005, 6.006, 5.005, 6.006, 7.007, 6.006, 7.007, 7.007, 4.004, 3.003, 2.002,
6.006, 5.005, 1.001, 2.002, 3.003, 4.004, 3.003, 4.004, 1.001, 2.002, 3.003, 3.002, 5.005, 4.004, 4.004, 6.006, 2.001, 5.005,
5.004, 4.004, 4.003, 3.003, 7.007, 7.008, 6.006, 5.005, 2.002, 4.004, 7.007, 9.007, 8.007, 2.002, 5.005, 3.003, 5.005, 5.005,
7.006, 5.005, 6.005, 6.006, 4.004, 8.008, 2.002), Array(1.001, 1.001, 3.003, 4.004, 3.003, 5.005, 4.004, 2.002, 3.003, 3.003,
6.006, 5.006, 7.007, 6.006, 5.005, 4.004, 5.005, 4.004, 5.005, 4.004, 5.005, 6.006, 6.006, 7.007, 7.006, 6.006, 5.005, 4.004,
6.006, 5.005, 3.003, 4.004, 2.002, 2.002, 2.002, 3.003, 1.001, 2.002, 1.001, 3.001, 7.007, 5.005, 6.005, 7.005, 3.002, 4.004,
3.003, 2.002, 3.002, 2.002, 7.007, 6.008, 6.005, 7.005, 3.003, 6.005, 6.006, 8.006, 7.006, 2.002, 6.006, 5.005, 7.007, 7.006,
6.005, 4.004, 4.004, 5.005, 2.002, 7.007, 1.001), Array(1.001, 3.003, 4.004, 4.004, 5.005, 4.004, 2.002, 3.003, 3.003, 5.005,
5.006, 7.007, 5.005, 4.004, 3.003, 4.004, 4.004, 4.004, 3.003, 5.005, 6.006, 6.006, 7.007, 7.006, 7.007, 6.006, 5.005, 6.006,
5.005, 4.004, 5.005, 1.001, 2.002, 2.002, 2.003, 2.002, 2.002, 1.001, 3.002, 7.007, 5.005, 7.005, 7.005, 3.003, 3.003, 2.002,
1.001, 3.003, 2.002, 6.006, 6.007, 5.005, 6.005, 4.004, 6.005, 5.005, 7.005, 6.005, 2.002, 6.006, 6.006, 7.007, 8.006, 6.005,
3.004, 3.003, 4.004, 2.002, 6.006, 2.002), Array(2.002, 3.003, 3.003, 4.004, 3.003, 1.001, 2.002, 2.002, 5.005, 4.005, 6.006,
5.005, 4.004, 3.003, 4.004, 3.003, 4.004, 3.003, 4.004, 5.005, 5.005, 6.006, 6.005, 6.006, 5.005, 4.004, 5.005, 4.004, 3.003,
4.004, 1.001, 2.002, 3.003, 3.003, 1.001, 1.001, 2.002, 3.002, 6.006, 4.004, 6.004, 6.004, 2.002, 3.003, 3.002, 2.002, 4.003,
3.003, 6.006, 5.007, 5.004, 6.004, 4.004, 5.004, 5.005, 7.005, 6.005, 3.003, 5.005, 5.005, 6.006, 7.005, 5.004, 4.004, 4.003,
4.004, 3.003, 6.006, 2.002), Array(1.001, 4.004, 2.002, 1.001, 3.003, 4.004, 4.004, 5.005, 4.005, 6.005, 7.007, 5.005, 5.005,
4.004, 3.003, 6.006, 5.005, 4.004, 5.005, 3.003, 4.004, 5.004, 4.004, 3.003, 2.002, 3.003, 2.002, 3.003, 3.003, 3.003, 4.004,
5.005, 5.005, 2.002, 1.001, 4.004, 3.003, 4.004, 2.002, 5.002, 6.003, 2.002, 5.005, 5.004, 4.004, 4.004, 4.004, 4.004, 5.005,
5.004, 6.003, 5.005, 3.002, 7.007, 9.007, 8.007, 5.005, 3.003, 4.003, 4.004, 5.003, 5.004, 6.006, 6.005, 6.006, 5.005, 6.006,
4.004), Array(3.003, 3.003, 2.002, 4.004, 5.005, 5.005, 6.006, 5.006, 7.006, 8.008, 6.006, 6.006, 5.005, 4.004, 7.007, 6.006,
5.005, 6.006, 4.004, 5.005, 6.005, 3.003, 2.002, 1.001, 4.004, 3.003, 2.002, 2.002, 4.004, 5.005, 6.006, 6.006, 3.003, 2.002,
5.005, 4.004, 4.004, 3.003, 4.003, 6.004, 3.003, 6.006, 6.005, 5.005, 5.005, 5.005, 5.005, 6.006, 6.005, 5.004, 5.005, 3.003,
8.008, 10.008, 9.008, 5.005, 4.004, 3.003, 4.004, 4.004, 6.005, 7.007, 7.006, 7.007, 6.006, 7.007, 5.005), Array(5.005, 4.005,
4.004, 5.005, 5.005, 8.008, 6.007, 7.007, 8.008, 7.007, 6.006, 6.006, 5.006, 7.007, 6.006, 6.007, 7.008, 6.006, 7.007, 6.006,
4.004, 3.003, 2.002, 6.006, 5.005, 1.001, 1.001, 4.004, 5.005, 4.004, 5.005, 2.002, 3.003, 4.004, 3.003, 5.005, 4.004, 3.003,
5.005, 2.002, 6.006, 6.005, 5.005, 4.004, 4.004, 7.007, 7.008, 5.005, 4.004, 3.003, 4.004, 8.008, 10.008, 9.008, 3.003, 5.005,
2.002, 5.005, 5.005, 7.006, 6.006, 7.006, 7.007, 5.005, 9.009, 3.003), Array(1.001, 3.003, 2.002, 2.002, 3.003, 2.003, 4.003,
5.005, 3.003, 3.003, 2.002, 1.001, 5.005, 5.005, 2.002, 3.003, 1.001, 2.002, 3.002, 3.003, 2.002, 3.003, 2.002, 1.001, 4.004,
4.004, 5.005, 6.006, 7.007, 7.007, 4.004, 3.003, 6.006, 5.005, 3.003, 1.001, 4.002, 4.001, 4.004, 4.004, 6.006, 6.006, 6.006,
6.006, 2.002, 3.003, 3.002, 4.002, 7.007, 2.002, 6.005, 8.005, 7.005, 7.007, 2.002, 3.003, 3.003, 4.002, 3.002, 6.006, 5.005,
5.005, 7.007, 4.004, 6.006), Array(4.004, 3.003, 3.003, 4.004, 3.004, 5.004, 6.006, 4.004, 4.004, 3.003, 2.002, 6.006, 6.006,
3.003, 4.004, 2.002, 3.003, 4.003, 3.003, 2.002, 3.003, 2.002, 1.001, 4.004, 4.003, 4.004, 5.005, 6.006, 6.006, 3.003, 2.002,
5.005, 4.004, 3.003, 1.001, 4.001, 5.002, 3.003, 5.005, 6.005, 5.005, 5.005, 5.005, 3.003, 4.004, 4.003, 5.002, 6.006, 2.001,
7.006, 9.006, 8.006, 6.006, 2.002, 3.002, 3.003, 4.002, 4.003, 7.007, 6.006, 6.006, 6.006, 5.005, 5.005), Array(1.001, 1.001,
5.005, 3.004, 5.005, 6.006, 4.004, 4.004, 3.003, 2.002, 5.005, 4.004, 3.003, 4.004, 4.004, 5.005, 5.004, 6.006, 5.005, 5.005,
5.005, 4.004, 4.004, 5.005, 2.002, 3.003, 4.004, 4.004, 2.002, 2.002, 3.003, 4.003, 6.006, 4.004, 6.004, 5.003, 3.003, 4.004,
4.003, 3.003, 5.004, 4.004, 5.005, 4.006, 4.003, 5.003, 5.005, 5.005, 6.006, 8.006, 7.006, 4.004, 5.005, 6.005, 6.006, 7.005,
4.003, 5.005, 5.004, 5.005, 4.004, 6.006, 3.003), Array(2.002, 4.004, 2.003, 4.004, 5.005, 3.003, 3.003, 2.002, 1.001, 5.005,
5.005, 2.002, 3.003, 3.003, 4.004, 4.003, 5.005, 4.004, 5.005, 4.004, 3.003, 5.005, 6.005, 3.003, 4.004, 5.005, 5.005, 3.003,
3.003, 4.004, 5.004, 5.005, 3.003, 5.003, 4.002, 4.004, 4.004, 5.004, 4.004, 6.005, 5.005, 4.004, 3.005, 3.002, 4.002, 6.006,
4.004, 6.005, 8.005, 7.005, 5.005, 4.004, 5.004, 5.005, 6.004, 3.002, 6.006, 5.005, 5.005, 5.005, 5.005, 4.004), Array(4.004,
2.003, 4.004, 5.005, 3.003, 3.003, 2.002, 1.001, 5.005, 5.005, 2.002, 3.003, 3.003, 4.004, 4.003, 5.005, 4.004, 5.005, 4.004,
3.003, 5.005, 6.005, 3.003, 4.004, 5.005, 5.005, 3.003, 3.003, 4.004, 5.004, 5.005, 3.003, 5.003, 4.002, 4.004, 4.004, 5.004,
4.004, 6.005, 5.005, 4.004, 3.005, 3.002, 4.002, 6.006, 4.004, 6.005, 8.005, 7.005, 5.005, 4.004, 5.004, 5.005, 6.004, 3.002,
6.006, 5.005, 5.005, 5.005, 5.005, 4.004), Array(3.003, 5.003, 2.002, 1.001, 2.002, 3.003, 3.003, 3.003, 4.004, 2.002, 3.003,
2.002, 3.003, 4.004, 5.005, 5.005, 6.006, 3.003, 4.004, 7.007, 7.007, 4.004, 5.005, 7.007, 6.006, 6.006, 6.006, 6.006, 8.007,
6.006, 4.004, 6.005, 5.004, 7.007, 3.003, 5.005, 6.006, 8.008, 7.007, 1.001, 4.002, 4.004, 5.004, 9.009, 5.005, 5.003, 7.003,
6.003, 7.007, 5.005, 6.006, 4.004, 5.005, 4.004, 5.005, 4.004, 4.004, 6.006, 1.001, 7.007), Array(2.004, 5.004, 4.002, 3.003,
2.002, 2.001, 5.004, 5.005, 3.001, 4.002, 3.003, 3.003, 2.003, 6.005, 5.004, 6.005, 4.004, 4.003, 7.006, 6.005, 5.005, 6.006,
8.007, 7.007, 6.005, 6.005, 7.006, 8.006, 6.005, 4.003, 4.003, 2.002, 7.006, 4.004, 6.006, 7.006, 9.007, 8.007, 2.004, 1.005,
3.002, 3.002, 9.008, 5.004, 6.004, 8.004, 7.004, 8.007, 5.004, 5.004, 5.005, 6.004, 1.002, 6.006, 5.005, 5.005, 7.007, 4.004,
7.006), Array(5.006, 4.004, 5.005, 4.004, 3.003, 6.006, 7.007, 4.003, 3.003, 3.003, 2.002, 1.001, 6.006, 5.006, 6.007, 4.004,
4.005, 7.008, 6.006, 7.007, 8.008, 9.009, 9.009, 7.007, 6.007, 8.008, 8.008, 6.007, 4.005, 4.004, 2.002, 7.008, 6.006, 8.008,
8.008, 9.009, 9.009, 2.004, 1.001, 4.004, 3.003, 10.010, 5.006, 8.006, 10.006, 9.006, 9.009, 5.006, 5.005, 5.005, 6.006, 5.001,
8.008, 7.007, 7.007, 9.009, 4.006, 8.008), Array(2.002, 2.002, 3.003, 4.004, 2.002, 3.003, 3.003, 4.004, 4.004, 5.005, 6.006,
7.007, 7.007, 8.008, 5.005, 6.006, 8.008, 8.008, 4.004, 5.005, 6.006, 5.005, 6.006, 6.006, 6.006, 8.007, 8.008, 6.006, 6.006,
6.005, 7.007, 3.003, 5.005, 6.006, 8.008, 7.007, 3.003, 5.004, 4.004, 5.005, 9.009, 7.007, 5.002, 7.002, 6.002, 7.007, 7.007,
7.007, 6.006, 7.007, 5.004, 4.004, 4.004, 4.003, 6.006, 1.001, 7.007), Array(1.001, 2.002, 2.002, 2.002, 3.003, 1.001, 2.002,
3.003, 3.003, 4.004, 6.006, 5.005, 6.006, 4.004, 4.004, 7.007, 7.006, 3.003, 4.004, 6.006, 5.005, 5.005, 5.005, 5.005, 7.006,
6.006, 4.004, 5.004, 4.003, 6.006, 2.002, 4.004, 5.005, 7.007, 6.006, 2.002, 3.003, 3.003, 4.003, 8.008, 5.005, 4.002, 6.002,
5.002, 6.006, 5.005, 6.005, 5.005, 6.005, 3.003, 4.004, 3.003, 3.003, 5.005, 2.002, 6.006), Array(1.001, 2.002, 2.002, 2.002,
2.002, 3.003, 4.004, 4.004, 5.004, 6.006, 5.005, 6.006, 5.005, 4.004, 6.006, 6.006, 2.002, 3.003, 5.005, 4.004, 4.004, 4.004,
4.004, 6.005, 6.006, 4.004, 4.004, 4.003, 5.005, 1.001, 3.003, 4.004, 6.006, 5.005, 3.003, 4.004, 2.002, 3.003, 7.007, 5.005,
3.002, 5.002, 4.002, 5.005, 5.005, 5.005, 6.006, 7.005, 4.002, 3.003, 2.002, 2.002, 4.004, 3.003, 5.005), Array(1.001, 3.003,
3.003, 2.002, 3.003, 3.003, 4.004, 4.003, 5.005, 4.004, 5.005, 4.004, 3.003, 6.006, 5.005, 3.003, 4.004, 6.006, 5.005, 5.005,
5.005, 5.005, 7.006, 5.005, 3.003, 3.003, 3.002, 6.006, 2.002, 4.004, 5.005, 7.007, 6.006, 4.004, 3.005, 1.001, 2.002, 8.008,
4.004, 4.003, 6.003, 5.003, 6.006, 4.004, 4.004, 5.005, 6.004, 3.001, 4.004, 3.003, 3.003, 5.005, 4.004, 6.006), Array(4.004,
4.004, 1.001, 2.002, 2.002, 3.003, 3.002, 4.004, 3.003, 4.004, 3.003, 2.002, 5.005, 5.004, 4.004, 5.005, 6.006, 6.006, 4.004,
4.004, 5.005, 6.005, 4.004, 2.002, 4.002, 3.001, 5.005, 3.003, 5.005, 5.005, 7.006, 6.006, 3.003, 2.004, 2.001, 3.001, 7.007,
3.003, 5.004, 7.004, 6.004, 6.006, 3.003, 4.003, 4.004, 5.003, 2.001, 5.005, 4.004, 4.004, 6.006, 4.004, 5.005), Array(1.001,
3.003, 4.004, 5.005, 5.005, 6.006, 8.008, 7.007, 8.008, 6.006, 6.006, 7.007, 8.008, 3.003, 4.004, 4.004, 3.003, 5.005, 5.005,
5.005, 6.006, 8.008, 6.006, 6.006, 6.005, 6.006, 3.001, 4.003, 5.004, 6.006, 5.005, 4.004, 5.005, 4.004, 5.005, 7.007, 7.007,
5.001, 7.001, 6.001, 5.005, 7.007, 7.007, 7.007, 8.007, 5.004, 2.002, 4.002, 4.002, 4.004, 3.003, 6.006), Array(4.004, 5.005,
6.006, 6.006, 7.006, 8.008, 7.007, 7.007, 7.007, 6.006, 6.006, 7.007, 2.002, 3.003, 3.003, 2.002, 4.004, 4.004, 4.004, 5.005,
8.008, 6.006, 6.006, 6.005, 5.005, 3.002, 3.003, 4.003, 5.005, 4.004, 5.005, 6.006, 4.004, 5.005, 6.006, 7.007, 5.002, 7.002,
6.002, 4.004, 7.007, 7.007, 8.008, 9.007, 6.004, 1.001, 4.003, 4.003, 3.003, 4.004, 5.005), Array(1.001, 3.003, 2.002, 3.003,
5.005, 4.004, 5.005, 4.004, 3.003, 6.006, 6.005, 4.004, 5.005, 7.007, 6.006, 5.005, 5.005, 6.006, 7.006, 5.005, 3.003, 5.003,
3.002, 6.006, 3.003, 5.005, 6.006, 8.007, 7.007, 3.003, 2.004, 3.002, 4.002, 8.008, 4.004, 5.003, 7.003, 6.003, 7.007, 4.004,
5.004, 5.005, 6.004, 2.002, 5.005, 4.004, 4.004, 6.006, 3.003, 6.006), Array(2.002, 1.001, 2.002, 5.005, 5.005, 6.006, 3.003,
4.004, 7.007, 7.006, 5.005, 6.006, 8.008, 7.007, 6.006, 6.006, 7.007, 8.007, 6.006, 4.004, 5.004, 3.003, 7.007, 4.004, 6.006,
7.007, 9.008, 8.008, 3.003, 3.004, 4.003, 4.003, 9.009, 5.005, 6.004, 8.004, 7.004, 8.008, 5.005, 6.005, 4.004, 5.005, 3.003,
6.006, 5.005, 5.005, 7.007, 4.004, 7.007), Array(1.001, 2.002, 3.003, 3.003, 4.004, 1.001, 2.002, 5.005, 5.005, 6.006, 7.007,
8.008, 8.008, 5.005, 4.004, 7.007, 6.006, 4.004, 2.002, 5.003, 3.002, 5.005, 5.005, 7.007, 7.007, 7.007, 7.007, 1.001, 4.002,
4.003, 4.003, 8.008, 3.003, 7.005, 9.005, 8.005, 8.008, 3.003, 4.004, 2.002, 3.003, 4.003, 7.007, 6.006, 6.006, 8.008, 3.003,
7.007), Array(1.001, 4.004, 4.004, 5.005, 2.002, 3.003, 6.006, 6.006, 6.006, 7.007, 9.009, 8.008, 6.006, 5.005, 8.008, 7.007,
5.005, 3.003, 4.004, 2.002, 6.006, 5.005, 7.007, 8.008, 8.008, 8.008, 2.002, 3.003, 4.004, 3.003, 9.009, 4.004, 7.005, 9.005,
8.005, 9.009, 4.004, 5.005, 3.003, 4.004, 4.002, 7.007, 6.006, 6.006, 8.008, 4.004, 8.008), Array(5.005, 4.005, 5.006, 3.003,
3.004, 6.007, 5.005, 6.007, 7.008, 8.009, 8.009, 6.007, 5.006, 7.008, 7.008, 5.006, 3.004, 3.003, 1.001, 6.007, 5.006, 7.008,
7.008, 8.009, 8.009, 3.003, 2.002, 3.003, 2.002, 9.009, 4.005, 7.006, 9.006, 8.006, 8.009, 4.005, 4.004, 4.004, 5.005, 4.001,
7.008, 6.007, 6.007, 8.009, 5.005, 7.008), Array(1.001, 2.002, 2.002, 2.003, 3.003, 3.003, 7.007, 7.008, 7.007, 8.008, 5.005,
5.005, 6.007, 5.005, 1.001, 2.002, 3.003, 5.004, 4.004, 7.007, 9.008, 8.008, 6.006, 6.006, 4.004, 6.005, 5.005, 4.004, 6.006,
2.002, 9.008, 11.008, 10.008, 6.006, 2.002, 2.002, 1.001, 1.001, 6.005, 9.009, 8.008, 8.008, 7.008, 6.006, 6.006), Array(1.001,
3.003, 2.002, 2.002, 2.002, 6.006, 6.007, 6.006, 7.007, 4.004, 4.004, 5.006, 4.004, 2.002, 1.001, 2.002, 4.003, 3.003, 6.006,
8.007, 7.007, 5.005, 5.005, 4.004, 5.005, 4.004, 3.003, 5.005, 1.001, 8.007, 10.007, 9.007, 5.005, 2.002, 1.001, 2.002, 2.002,
5.004, 8.008, 7.007, 7.007, 6.007, 6.006, 5.005), Array(4.004, 3.003, 1.001, 1.001, 5.005, 5.006, 5.005, 6.006, 3.003, 3.003,
4.005, 3.003, 3.003, 2.002, 3.003, 5.004, 2.002, 7.007, 7.006, 6.006, 4.004, 4.004, 5.005, 6.006, 5.005, 4.004, 4.004, 2.002,
9.008, 11.008, 10.008, 4.004, 3.003, 2.002, 3.003, 3.003, 6.005, 7.007, 8.007, 8.008, 5.006, 7.007, 4.004), Array(1.001, 5.005,
5.005, 6.006, 7.007, 8.008, 8.008, 5.005, 4.004, 7.007, 6.006, 3.003, 2.002, 5.003, 4.003, 5.005, 6.006, 8.007, 7.007, 7.007,
7.007, 2.002, 5.003, 5.004, 5.004, 8.008, 3.003, 8.006, 10.006, 9.006, 8.008, 3.003, 4.004, 1.001, 2.002, 5.004, 8.008, 7.007,
7.007, 8.008, 4.004, 7.007), Array(4.004, 4.004, 5.005, 6.006, 7.007, 7.007, 4.004, 3.003, 6.006, 5.005, 3.003, 1.001, 4.002,
5.002, 4.004, 5.005, 7.006, 6.006, 6.006, 6.006, 3.003, 4.004, 4.003, 5.003, 7.007, 2.002, 7.006, 9.006, 8.006, 7.007, 2.002,
3.003, 2.002, 3.001, 4.003, 7.007, 6.006, 6.006, 7.007, 5.005, 6.006), Array(2.002, 4.004, 4.005, 4.004, 5.005, 2.002, 2.002,
3.004, 2.002, 4.004, 3.003, 4.004, 6.005, 1.001, 6.006, 6.005, 5.005, 3.003, 3.003, 6.006, 7.007, 6.006, 5.005, 3.003, 3.003,
8.008, 10.008, 9.008, 3.003, 4.004, 3.003, 4.004, 4.004, 7.006, 6.006, 7.006, 7.007, 4.005, 8.008, 3.003), Array(5.005, 6.006,
5.005, 6.006, 3.003, 4.004, 5.005, 4.004, 4.004, 3.003, 2.002, 4.004, 3.003, 7.007, 7.006, 6.006, 5.005, 5.005, 6.006, 6.007,
4.004, 3.003, 4.004, 3.003, 9.008, 11.008, 10.008, 4.004, 4.004, 1.001, 4.004, 4.004, 6.005, 7.007, 8.007, 8.008, 6.006, 8.008,
4.004), Array(1.001, 3.003, 2.002, 2.002, 2.002, 2.002, 4.003, 7.007, 5.005, 6.005, 6.005, 3.003, 2.002, 2.001, 2.002, 4.004,
3.003, 5.005, 6.006, 4.004, 5.005, 5.005, 6.005, 4.004, 6.004, 5.004, 3.003, 6.006, 6.006, 7.007, 8.006, 6.004, 3.003, 3.002,
3.003, 2.002, 5.005, 3.003), Array(2.002, 1.001, 3.003, 3.003, 1.001, 3.002, 8.008, 6.006, 7.006, 7.006, 4.003, 3.003, 3.002,
3.002, 3.003, 2.002, 6.006, 7.007, 5.005, 6.006, 4.004, 7.006, 5.005, 7.005, 6.005, 2.002, 7.007, 7.007, 8.008, 9.007, 7.005,
2.002, 4.003, 4.004, 1.001, 6.006, 3.003), Array(1.001, 3.003, 4.004, 1.001, 2.002, 8.008, 7.007, 7.007, 9.007, 3.003, 5.004,
4.002, 3.001, 2.002, 1.001, 8.008, 8.009, 7.007, 8.007, 3.003, 7.007, 7.005, 9.005, 8.005, 1.001, 8.008, 6.006, 8.008, 8.008,
8.007, 2.002, 5.003, 6.005, 1.001, 7.007, 3.003), Array(4.004, 4.004, 2.002, 3.003, 9.009, 7.007, 8.007, 8.007, 4.004, 4.003,
4.001, 4.001, 3.003, 2.002, 7.007, 8.008, 6.006, 7.007, 4.004, 8.007, 6.004, 8.004, 7.004, 2.002, 8.008, 7.007, 9.009, 9.008,
8.006, 1.001, 5.002, 5.004, 1.001, 6.006, 4.004), Array(1.001, 2.002, 3.002, 6.006, 4.004, 5.004, 7.005, 2.001, 4.004, 4.003,
3.003, 4.003, 3.003, 6.006, 6.007, 6.005, 6.005, 3.003, 5.004, 6.006, 8.006, 7.006, 3.003, 5.005, 4.004, 6.006, 6.005, 6.005,
5.005, 5.004, 5.005, 3.003, 7.007, 2.002), Array(3.003, 2.002, 5.005, 3.003, 6.003, 7.004, 1.001, 4.004, 4.003, 3.003, 3.003,
3.003, 5.005, 6.006, 6.005, 7.004, 4.004, 4.003, 6.006, 8.006, 7.006, 4.004, 4.004, 5.004, 5.005, 6.004, 6.005, 5.005, 5.004,
5.005, 4.004, 7.007, 3.003), Array(2.001, 8.007, 6.006, 7.006, 8.006, 3.002, 4.004, 3.002, 2.001, 2.002, 1.001, 7.007, 7.008,
6.006, 7.006, 3.003, 7.006, 6.006, 8.006, 7.006, 1.001, 7.007, 6.006, 8.007, 8.007, 7.006, 3.003, 4.003, 5.005, 1.001, 7.007,
2.002), Array(6.006, 5.005, 6.005, 8.006, 1.001, 5.006, 4.004, 3.003, 1.001, 1.001, 7.007, 7.008, 7.007, 7.006, 2.004, 5.005,
7.007, 9.007, 8.007, 2.002, 6.006, 5.005, 6.006, 6.006, 7.007, 4.004, 5.005, 6.007, 2.003, 8.009, 2.004), Array(2.002, 4.004,
6.004, 5.005, 7.007, 9.008, 8.008, 7.007, 7.007, 5.005, 6.006, 6.005, 5.005, 7.007, 3.003, 9.008, 11.008, 10.008, 7.007, 1.001,
3.003, 2.002, 2.002, 6.005, 9.009, 8.008, 8.008, 8.009, 7.007, 7.007), Array(3.002, 5.002, 4.004, 5.005, 7.006, 6.006, 6.006,
6.006, 3.003, 4.004, 4.003, 4.003, 6.006, 1.001, 7.006, 9.006, 8.006, 6.006, 1.001, 2.002, 3.002, 3.001, 4.003, 7.007, 6.006,
6.006, 7.007, 5.005, 6.006), Array(2.002, 4.005, 5.005, 7.007, 6.008, 6.007, 6.007, 4.006, 4.005, 2.002, 1.001, 6.006, 3.003,
7.006, 9.006, 8.006, 6.006, 3.004, 1.001, 4.004, 4.004, 4.003, 7.007, 6.006, 6.006, 7.008, 6.007, 6.006), Array(5.007, 4.005,
6.007, 6.008, 7.009, 7.009, 3.004, 3.003, 2.002, 1.001, 8.008, 3.005, 6.006, 8.006, 7.006, 7.008, 3.006, 3.003, 4.005, 5.006,
3.001, 6.007, 5.006, 5.006, 7.008, 5.006, 6.008), Array(5.005, 5.004, 4.004, 2.002, 2.002, 6.006, 7.007, 7.006, 6.005, 3.004,
4.004, 7.007, 9.007, 8.007, 3.003, 5.005, 4.004, 5.005, 5.005, 7.006, 5.005, 6.005, 6.006, 3.004, 8.008, 3.004), Array(2.002,
3.003, 6.006, 5.005, 4.004, 5.005, 3.003, 4.004, 7.007, 6.006, 2.002, 4.003, 3.003, 5.005, 6.006, 6.006, 7.007, 8.006, 5.003,
3.004, 1.001, 1.001, 4.004, 4.004, 5.005), Array(1.001, 4.005, 3.004, 6.006, 7.007, 5.005, 6.006, 5.006, 7.007, 4.004, 6.005,
5.005, 3.004, 7.008, 7.008, 8.009, 9.008, 7.005, 2.004, 1.001, 3.003, 2.004, 6.006, 4.004), Array(3.004, 2.003, 7.007, 7.008,
6.006, 7.006, 4.005, 7.006, 5.005, 7.006, 6.006, 2.003, 7.007, 7.007, 8.008, 9.007, 7.006, 2.005, 2.002, 4.004, 2.003, 7.007,
3.003), Array(1.001, 8.008, 8.009, 8.008, 8.007, 1.004, 6.006, 8.007, 10.007, 9.007, 2.002, 7.007, 6.006, 7.007, 7.007, 8.008,
4.004, 6.005, 7.007, 3.003, 9.009, 3.004), Array(8.008, 8.009, 7.007, 8.007, 2.003, 6.006, 7.006, 9.006, 8.006, 1.001, 7.007,
6.006, 7.007, 7.007, 8.007, 3.003, 5.004, 6.006, 2.002, 8.008, 3.003), Array(5.001, 5.004, 5.004, 9.009, 4.004, 6.004, 8.004,
7.004, 8.008, 4.004, 5.005, 3.003, 4.004, 5.003, 6.006, 5.005, 5.005, 7.007, 2.002, 8.008), Array(5.003, 4.003, 10.009, 5.005,
7.005, 9.005, 8.005, 9.008, 5.005, 6.005, 4.006, 5.005, 6.002, 7.007, 6.006, 6.006, 8.008, 3.005, 9.007), Array(1.001, 8.008,
4.005, 5.004, 7.004, 6.004, 7.007, 4.005, 3.003, 5.006, 6.005, 3.002, 5.005, 4.004, 4.004, 6.006, 5.005, 6.007), Array(7.007,
4.004, 6.005, 8.005, 7.005, 7.007, 4.005, 2.002, 5.005, 5.005, 3.002, 6.006, 5.005, 5.005, 7.007, 5.006, 6.007), Array(6.006,
9.008, 11.008, 10.008, 2.002, 7.007, 5.005, 7.007, 7.007, 9.008, 5.005, 7.006, 8.008, 4.004, 10.010, 2.002), Array(8.007,
10.007, 9.007, 6.006, 2.002, 2.002, 3.003, 3.002, 5.004, 8.008, 7.007, 7.007, 7.008, 6.006, 6.006), Array(2.002, 1.001, 6.007,
7.008, 7.008, 7.009, 8.008, 5.005, 3.006, 3.003, 1.001, 5.006, 3.006, 7.007), Array(1.001, 6.009, 7.010, 7.010, 7.011, 8.010,
5.007, 3.008, 4.005, 3.003, 5.008, 3.008, 7.009), Array(6.008, 7.009, 7.009, 7.010, 8.009, 5.006, 3.007, 4.004, 2.002, 5.007,
3.007, 7.008), Array(7.007, 5.005, 7.007, 7.007, 8.007, 3.003, 5.004, 6.006, 2.002, 8.008, 2.002), Array(3.003, 3.003, 3.002,
5.004, 8.008, 7.007, 7.007, 8.008, 6.006, 7.007), Array(3.003, 3.003, 5.004, 8.008, 7.007, 7.007, 7.007, 7.007, 5.005), Array(
1.001, 6.005, 9.009, 8.008, 8.008, 8.009, 5.005, 7.007), Array(5.006, 8.010, 7.009, 7.009, 8.009, 6.006, 7.007), Array(5.007,
4.006, 4.006, 6.008, 5.005, 6.007), Array(5.003, 5.004, 2.002, 5.005, 5.005), Array(2.002, 3.005, 5.005, 5.005), Array(5.005,
4.005, 6.006), Array(7.007, 3.003), Array(8.008));
}
}
rule("MAP: EICHENWALDE (HALLOWEEN)")
rule("MAP: WORKSHOP CHAMBER")
{
event
{
Ongoing - Global;
}
conditions
{
Current Map == Map(Eichenwalde Halloween);
Current Map == Map(Workshop Chamber);
}
actions
{
Global.NodePositions = Array(Vector(-26.553, 1.425, -2.579), Vector(-27.111, -1.417, -14.037), Vector(-33.168, 2.368, -34.783),
Vector(-9.291, 0.972, -17.324), Vector(-0.337, 0.446, -9.841), Vector(8.453, 1.356, -7.307), Vector(14.221, 4.449, -21.979),
Vector(17.176, 4.425, -12.711), Vector(0.707, 1.425, -19.641), Vector(23.820, 6.425, -15.402), Vector(20.043, 9.425, -24.407),
Vector(29.181, 1.416, -12.051), Vector(-8.080, 2.252, -27.034), Vector(-18.858, 2.392, -34.532), Vector(-6.629, 2.425,
-37.146), Vector(8.297, 4.459, -34.978), Vector(7.354, 4.235, -27.385), Vector(13.519, 4.300, -27.258), Vector(21.499, 4.426,
-29.046), Vector(19.728, 4.433, -33.540), Vector(26.413, 4.301, -26.033), Vector(29.061, 4.440, -33.519), Vector(13.265, 4.606,
-40.179), Vector(24.483, 5.425, -42.156), Vector(9.342, 5.264, -47.028), Vector(-1.869, 6.425, -48.129), Vector(-3.153, 7.425,
-42.316), Vector(12.638, 10.133, -40.233), Vector(21.501, 5.425, -48.852), Vector(37.324, 9.925, -51.131), Vector(29.283,
11.489, -70.455), Vector(22.276, 11.425, -72.760), Vector(0.373, 6.287, -56.703), Vector(-8.824, 5.425, -54.902), Vector(
-4.668, 6.424, -65.014), Vector(-11.094, 3.480, -72.167), Vector(-4.574, 3.995, -85.822), Vector(11.095, 6.425, -59.560),
Vector(22.209, 5.242, -61.770), Vector(15.451, 6.242, -70.038), Vector(3.435, 6.161, -80.397), Vector(6.210, 6.244, -68.303),
Vector(18.899, 6.423, -76.885), Vector(12.777, 6.436, -85.539), Vector(19.536, 9.436, -97.787), Vector(12.275, 11.436,
-100.472), Vector(11.093, 11.436, -90.444), Vector(10.714, 11.436, -84.402), Vector(7.314, 5.420, -95.630));
Global.NodeConnections = Array(Array(1), Array(0, 2, 3), Array(1, 13), Array(1, 4, 12), Array(8, 3, 5), Array(7, 11), Array(7, 8,
17), Array(5, 6, 9, 11), Array(4, 6), Array(10, 7, 11, 20), Array(9, 20, 18), Array(5, 20), Array(13, 3, 14, 16), Array(2, 12),
Array(12, 15), Array(14, 16, 17, 22, 19), Array(15, 12), Array(16, 15, 6, 18, 22), Array(20, 17, 19), Array(18, 22, 21, 15),
Array(18, 11, 21), Array(23, 19, 20), Array(15, 19, 17, 23, 24, 28), Array(21, 22, 28), Array(25, 22, 28, 32, 38), Array(26,
24, 32), Array(25, 27), Array(26, 19, 15, 24, 28), Array(23, 22, 24, 29, 38), Array(30, 28), Array(31, 29), Array(30, 42, 39),
Array(24, 33, 34, 37, 25), Array(32, 35), Array(32, 35, 40, 41), Array(33, 36), Array(35, 40, 48), Array(32, 38, 39, 41),
Array(37, 28, 24, 39), Array(38, 37, 41, 42, 40), Array(34, 36, 41, 43, 42, 39), Array(37, 34, 39, 40), Array(39, 43, 40),
Array(42, 40, 44, 48), Array(43, 45), Array(44, 46), Array(45, 47), Array(46, 40, 36, 42), Array(36, 43));
Global.DistanceMatrix = Array(Array(1.001, 2.002, 2.002, 3.003, 4.007, 5.005, 5.006, 4.004, 6.007, 7.007, 5.008, 3.003, 3.003,
4.004, 5.005, 4.004, 6.005, 7.006, 6.006, 6.007, 7.007, 6.006, 7.007, 7.007, 8.008, 9.007, 10.006, 7.007, 8.008, 9.009, 10.010,
8.008, 9.009, 9.009, 10.010, 11.011, 9.009, 8.008, 9.009, 10.010, 10.010, 10.010, 11.011, 12.012, 13.013, 14.012, 15.011,
12.012), Array(1.001, 1.001, 2.002, 3.006, 4.004, 4.005, 3.003, 5.006, 6.006, 4.007, 2.002, 2.002, 3.003, 4.004, 3.003, 5.004,
6.005, 5.005, 5.006, 6.006, 5.005, 6.006, 6.006, 7.007, 8.006, 9.005, 6.006, 7.007, 8.008, 9.009, 7.007, 8.008, 8.008, 9.009,
10.010, 8.008, 7.007, 8.008, 9.009, 9.009, 9.009, 10.010, 11.011, 12.012, 13.011, 14.010, 11.011), Array(2.002, 3.003, 4.007,
5.005, 5.006, 4.004, 6.007, 7.006, 5.007, 2.002, 1.001, 3.003, 4.004, 3.003, 5.004, 6.005, 5.005, 6.006, 6.006, 5.005, 6.006,
6.006, 7.007, 8.006, 9.005, 6.006, 7.007, 8.008, 9.009, 7.007, 8.008, 8.008, 9.009, 10.010, 8.008, 7.007, 8.008, 9.009, 9.009,
9.009, 10.010, 11.011, 12.012, 13.011, 14.010, 11.011), Array(1.001, 2.005, 3.003, 3.004, 2.002, 4.005, 5.005, 3.006, 1.001,
2.002, 2.002, 3.003, 2.002, 4.003, 5.004, 4.004, 4.005, 5.005, 4.004, 5.005, 5.005, 6.006, 7.005, 8.004, 5.005, 6.006, 7.007,
8.008, 6.006, 7.007, 7.007, 8.008, 9.009, 7.007, 6.006, 7.007, 8.008, 8.008, 8.008, 9.009, 10.010, 11.011, 12.010, 13.009,
10.010), Array(1.004, 2.002, 2.003, 1.001, 3.004, 4.005, 2.005, 2.002, 3.003, 3.003, 4.004, 3.003, 3.003, 4.004, 5.005, 3.005,
4.006, 4.004, 5.005, 5.005, 6.006, 7.006, 8.005, 5.005, 6.006, 7.007, 8.008, 6.006, 7.007, 7.007, 8.008, 9.009, 7.007, 6.006,
7.007, 8.008, 8.008, 8.008, 9.009, 10.010, 11.011, 12.010, 13.009, 10.010), Array(2.002, 1.001, 3.002, 2.002, 3.003, 1.001,
5.003, 6.004, 5.004, 4.004, 4.004, 3.003, 3.003, 4.004, 2.002, 3.003, 4.004, 4.004, 5.005, 6.006, 7.006, 8.005, 5.005, 6.006,
7.007, 8.008, 6.006, 7.007, 7.007, 8.008, 9.009, 7.007, 6.006, 7.007, 8.008, 8.008, 8.008, 9.009, 10.010, 11.011, 12.010,
13.009, 10.010), Array(1.001, 1.001, 2.002, 3.003, 2.003, 3.004, 4.005, 3.003, 2.002, 2.003, 1.001, 2.002, 3.003, 3.003, 4.004,
2.002, 3.003, 3.003, 4.004, 5.004, 6.003, 3.003, 4.004, 5.005, 6.006, 4.004, 5.005, 5.005, 6.006, 7.007, 5.005, 4.004, 5.005,
6.006, 6.006, 6.006, 7.007, 8.008, 9.009, 10.008, 11.007, 8.008), Array(2.002, 1.001, 2.002, 1.002, 4.004, 5.005, 4.004, 3.003,
3.004, 2.002, 3.003, 4.004, 2.003, 3.004, 3.003, 4.004, 4.004, 5.005, 6.005, 7.004, 4.004, 5.005, 6.006, 7.007, 5.005, 6.006,
6.006, 7.007, 8.008, 6.006, 5.005, 6.006, 7.007, 7.007, 7.007, 8.008, 9.009, 10.010, 11.009, 12.008, 9.009), Array(3.003,
4.004, 3.004, 3.003, 4.004, 4.004, 3.003, 3.004, 2.002, 3.003, 4.004, 4.004, 5.005, 3.003, 4.004, 4.004, 5.005, 6.005, 7.004,
4.004, 5.005, 6.006, 7.007, 5.005, 6.006, 6.006, 7.007, 8.008, 6.006, 5.005, 6.006, 7.007, 7.007, 7.007, 8.008, 9.009, 10.010,
11.009, 12.008, 9.009), Array(1.001, 1.003, 5.005, 6.006, 5.005, 4.004, 4.005, 3.003, 2.004, 3.005, 1.004, 2.005, 4.004, 3.005,
5.005, 6.006, 7.006, 8.005, 4.005, 5.006, 6.007, 7.008, 6.006, 7.007, 7.007, 8.008, 8.009, 6.007, 5.006, 6.007, 7.008, 7.008,
7.008, 8.009, 9.010, 10.011, 11.010, 12.009, 9.010), Array(2.004, 4.006, 5.007, 4.006, 3.005, 3.006, 2.004, 1.005, 2.006,
1.005, 2.006, 3.005, 3.006, 4.006, 5.007, 6.007, 7.006, 4.006, 5.007, 6.008, 7.009, 5.007, 6.008, 6.008, 7.009, 8.010, 6.008,
5.007, 6.008, 7.009, 7.009, 7.009, 8.010, 9.011, 10.012, 11.011, 12.010, 9.011), Array(5.004, 6.005, 5.005, 4.004, 4.005,
3.003, 2.002, 3.003, 1.001, 2.002, 4.004, 3.003, 5.005, 6.006, 7.005, 8.004, 4.004, 5.005, 6.006, 7.007, 6.006, 7.007, 7.007,
8.008, 8.008, 6.006, 5.005, 6.006, 7.007, 7.007, 7.007, 8.008, 9.009, 10.010, 11.009, 12.008, 9.009), Array(1.001, 1.001,
2.002, 1.001, 3.002, 4.003, 3.003, 5.004, 4.004, 3.003, 4.004, 4.004, 5.005, 6.004, 7.003, 4.004, 5.005, 6.006, 7.007, 5.005,
6.006, 6.006, 7.007, 8.008, 6.006, 5.005, 6.006, 7.007, 7.007, 7.007, 8.008, 9.009, 10.010, 11.009, 12.008, 9.009), Array(
2.002, 3.003, 2.002, 4.003, 5.004, 4.004, 6.005, 5.005, 4.004, 5.005, 5.005, 6.006, 7.005, 8.004, 5.005, 6.006, 7.007, 8.008,
6.006, 7.007, 7.007, 8.008, 9.009, 7.007, 6.006, 7.007, 8.008, 8.008, 8.008, 9.009, 10.010, 11.011, 12.010, 13.009, 10.010),
Array(1.001, 2.002, 2.002, 3.003, 2.002, 4.004, 3.003, 2.002, 3.003, 3.003, 4.004, 5.003, 6.002, 3.003, 4.004, 5.005, 6.006,
4.004, 5.005, 5.005, 6.006, 7.007, 5.005, 4.004, 5.005, 6.006, 6.006, 6.006, 7.007, 8.008, 9.009, 10.008, 11.007, 8.008),
Array(1.001, 1.001, 2.002, 1.001, 3.003, 2.002, 1.001, 2.002, 2.002, 3.003, 4.002, 5.001, 2.002, 3.003, 4.004, 5.005, 3.003,
4.004, 4.004, 5.005, 6.006, 4.004, 3.003, 4.004, 5.005, 5.005, 5.005, 6.006, 7.007, 8.008, 9.007, 10.006, 7.007), Array(2.001,
3.002, 2.002, 4.003, 3.003, 2.002, 3.003, 3.003, 4.004, 5.003, 6.002, 3.003, 4.004, 5.005, 6.006, 4.004, 5.005, 5.005, 6.006,
7.007, 5.005, 4.004, 5.005, 6.006, 6.006, 6.006, 7.007, 8.008, 9.009, 10.008, 11.007, 8.008), Array(1.001, 2.002, 2.002, 3.003,
1.001, 2.002, 2.002, 3.003, 4.003, 5.002, 2.002, 3.003, 4.004, 5.005, 3.003, 4.004, 4.004, 5.005, 6.006, 4.004, 3.003, 4.004,
5.005, 5.005, 5.005, 6.006, 7.007, 8.008, 9.007, 10.006, 7.007), Array(1.001, 1.001, 2.002, 2.002, 3.003, 3.003, 4.004, 5.003,
6.002, 3.003, 4.004, 5.005, 6.006, 4.004, 5.005, 5.005, 6.006, 7.007, 5.005, 4.004, 5.005, 6.006, 6.006, 6.006, 7.007, 8.008,
9.009, 10.008, 11.007, 8.008), Array(2.002, 1.001, 1.001, 2.002, 2.002, 3.003, 4.002, 5.001, 2.002, 3.003, 4.004, 5.005, 3.003,
4.004, 4.004, 5.005, 6.006, 4.004, 3.003, 4.004, 5.005, 5.005, 5.005, 6.006, 7.007, 8.008, 9.007, 10.006, 7.007), Array(1.001,
3.003, 2.002, 4.004, 5.005, 6.004, 7.003, 3.003, 4.004, 5.005, 6.006, 5.005, 6.006, 6.006, 7.007, 7.007, 5.005, 4.004, 5.005,
6.006, 6.006, 6.006, 7.007, 8.008, 9.009, 10.008, 11.007, 8.008), Array(2.002, 1.001, 3.003, 4.004, 5.003, 6.002, 2.002, 3.003,
4.004, 5.005, 4.004, 5.005, 5.005, 6.006, 6.006, 4.004, 3.003, 4.004, 5.005, 5.005, 5.005, 6.006, 7.007, 8.008, 9.007, 10.006,
7.007), Array(1.001, 1.001, 2.002, 3.003, 4.002, 1.001, 2.002, 3.003, 4.004, 2.002, 3.003, 3.003, 4.004, 5.005, 3.003, 2.002,
3.003, 4.004, 4.004, 4.004, 5.005, 6.006, 7.007, 8.006, 9.005, 6.006), Array(2.002, 3.003, 4.003, 5.002, 1.001, 2.002, 3.003,
4.004, 3.003, 4.004, 4.004, 5.005, 5.005, 3.003, 2.002, 3.003, 4.004, 4.004, 4.004, 5.005, 6.006, 7.007, 8.006, 9.005, 6.006),
Array(1.001, 2.002, 3.001, 1.001, 2.002, 3.003, 4.003, 1.001, 2.002, 2.002, 3.003, 4.004, 2.002, 1.001, 2.002, 3.003, 3.003,
3.003, 4.004, 5.005, 6.006, 7.005, 8.004, 5.005), Array(1.001, 2.002, 2.002, 3.003, 4.004, 5.004, 1.001, 2.002, 2.002, 3.003,
4.004, 2.002, 2.002, 3.003, 3.003, 3.003, 4.004, 4.004, 5.005, 6.006, 7.005, 8.004, 5.005), Array(1.001, 2.003, 3.004, 4.005,
5.005, 2.002, 3.003, 3.003, 4.004, 5.005, 3.003, 3.003, 4.004, 4.004, 4.004, 5.005, 5.005, 6.006, 7.007, 8.006, 9.005, 6.006),
Array(1.004, 2.005, 3.006, 4.006, 2.003, 3.004, 3.004, 4.005, 5.006, 3.004, 2.004, 3.005, 4.005, 4.005, 4.006, 5.006, 6.007,
7.008, 8.007, 9.006, 6.007), Array(1.001, 2.002, 3.003, 2.002, 3.003, 3.003, 4.004, 4.004, 2.002, 1.001, 2.002, 3.003, 3.003,
3.003, 4.004, 5.005, 6.006, 7.005, 8.004, 5.005), Array(1.001, 2.002, 3.003, 4.004, 4.004, 5.005, 5.005, 3.003, 2.002, 3.003,
4.004, 4.004, 3.004, 4.005, 5.006, 6.007, 7.006, 8.005, 5.006), Array(1.001, 4.004, 5.005, 4.005, 5.006, 4.006, 3.004, 3.003,
2.004, 3.005, 3.005, 2.005, 3.006, 4.007, 5.008, 6.007, 7.006, 4.007), Array(3.005, 4.006, 3.006, 4.007, 3.007, 2.005, 2.004,
1.005, 2.006, 2.006, 1.006, 2.007, 3.008, 4.009, 5.008, 6.007, 3.008), Array(1.001, 1.001, 2.002, 3.003, 1.001, 2.002, 2.002,
2.002, 2.002, 3.003, 3.003, 4.004, 5.005, 6.004, 7.003, 4.004), Array(2.002, 1.001, 2.002, 2.002, 3.003, 3.003, 3.003, 3.003,
4.004, 4.004, 5.005, 6.005, 7.004, 8.003, 3.003), Array(1.003, 2.002, 2.002, 3.003, 2.002, 1.001, 1.001, 2.002, 2.002, 3.003,
4.004, 5.003, 6.002, 3.003), Array(1.001, 3.003, 4.004, 3.003, 2.002, 3.002, 3.003, 3.003, 4.004, 5.004, 6.003, 7.002, 2.002),
Array(3.003, 3.003, 2.002, 1.001, 2.002, 2.002, 2.002, 3.003, 4.003, 5.002, 6.001, 1.001), Array(1.001, 1.001, 2.002, 1.001,
2.002, 3.003, 4.004, 5.005, 6.004, 7.003, 4.004), Array(1.001, 2.002, 2.002, 2.002, 3.003, 4.004, 5.005, 6.004, 7.003, 4.004),
Array(1.001, 1.001, 1.001, 2.002, 3.003, 4.004, 5.003, 6.002, 3.003), Array(1.001, 1.001, 1.001, 2.002, 3.003, 4.002, 5.001,
2.002), Array(2.002, 2.002, 3.003, 4.004, 5.003, 6.002, 3.003), Array(1.001, 2.002, 3.003, 4.002, 5.001, 2.002), Array(1.001,
2.002, 3.003, 4.002, 1.001), Array(1.001, 2.002, 3.003, 2.002), Array(1.001, 2.002, 3.003), Array(1.001, 3.004), Array(2.005));
Global.NodePositions = Array(Vector(-0.252, 0.425, -0.037), Vector(15.690, 0.425, 16.016), Vector(-15.527, 0.425, 15.911), Vector(
15.794, 0.425, -15.756), Vector(-15.781, 0.425, -15.775), Vector(-15.802, 0.425, -0.052), Vector(-0.262, 0.425, -15.790),
Vector(15.637, 0.425, -0.001), Vector(0.197, 0.425, 15.665), Vector(-8.102, 0.425, -7.910), Vector(8.013, 0.425, -7.859),
Vector(7.978, 0.425, 8.089), Vector(-8.046, 0.425, 8.175));
Global.NodeConnections = Array(Array(6, 5, 7, 11, 8, 12, 9, 10), Array(7, 11, 8), Array(8, 12, 5), Array(10, 6, 7), Array(9, 6, 5),
Array(2, 12, 9, 4), Array(9, 4, 10, 3), Array(10, 3, 11, 1), Array(1, 11, 12, 2, 0), Array(6, 4, 5, 0), Array(6, 3, 7, 0),
Array(8, 7, 1, 0), Array(2, 5, 8, 0));
Global.DistanceMatrix = Array(Array(9999, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1), Array(2, 9999, 2, 2, 4, 3, 3, 1, 1, 3, 2, 1, 2),
Array(2, 2, 9999, 4, 2, 1, 3, 3, 1, 2, 3, 2, 1), Array(2, 2, 4, 9999, 2, 3, 1, 1, 3, 2, 1, 2, 3), Array(2, 4, 2, 2, 9999, 1, 1,
3, 3, 1, 2, 3, 2), Array(2, 3, 1, 3, 1, 9999, 2, 3, 2, 1, 3, 3, 1), Array(2, 3, 3, 1, 1, 2, 9999, 2, 3, 1, 1, 3, 3), Array(2,
1, 3, 1, 3, 3, 2, 9999, 2, 3, 1, 1, 3), Array(1, 1, 1, 3, 3, 2, 2, 2, 9999, 2, 2, 1, 1), Array(1, 3, 2, 2, 1, 1, 1, 2, 2, 9999,
2, 2, 2), Array(1, 2, 3, 1, 2, 2, 1, 1, 2, 2, 9999, 2, 2), Array(1, 1, 2, 2, 3, 2, 2, 1, 1, 2, 2, 9999, 2), Array(1, 2, 1, 3,
2, 1, 2, 2, 1, 2, 2, 2, 9999));
}
}
rule("MAP: WORKSHOP ISLAND")
{
event
{
Ongoing - Global;
}
conditions
{
Current Map == Map(Workshop Island);
}
actions
{
Global.NodePositions = Array(Vector(-16.004, 0.350, -15.965), Vector(-15.994, 0.350, -0.043), Vector(-15.981, 0.350, 15.908),
Vector(15.941, 0.350, 16.021), Vector(15.980, 0.350, -15.878), Vector(-1.423, 0.350, -16.035), Vector(-1.225, 0.350, 4.747),
Vector(7.259, 0.350, -0.358));
Global.NodeConnections = Array(Array(5, 1, 6), Array(0, 2), Array(3, 1), Array(2, 6, 4), Array(5, 3, 7), Array(4, 0, 7), Array(0,
3, 7), Array(6, 5, 4));
Global.DistanceMatrix = Array(Array(1, 2, 2, 2, 1, 1, 2), Array(1, 2, 3, 2, 2, 3), Array(1, 2, 3, 2, 3), Array(1, 2, 1, 2), Array(
1, 2, 1), Array(2, 1), Array(1));
Global.DistanceMatrix = Array(Array(9999, 1, 2, 2, 2, 1, 1, 2), Array(1, 9999, 1, 2, 3, 2, 2, 3), Array(2, 1, 9999, 1, 2, 3, 2, 3),
Array(2, 2, 1, 9999, 1, 2, 1, 2), Array(2, 3, 2, 1, 9999, 1, 2, 1), Array(1, 2, 3, 2, 1, 9999, 2, 1), Array(1, 2, 2, 1, 2, 2,
9999, 1), Array(2, 3, 3, 2, 1, 1, 1, 9999));
}
}
rule("MAP: DORADO")
rule("MAP: HAVANA")
{
event
{
Ongoing - Global;
}
conditions
{
Current Map == Map(Dorado);
Current Map == Map(Havana);
}
actions
{
Global.NodePositions = Array(Vector(8.401, 0.380, -9.799), Vector(7.707, 0.435, 3.016), Vector(17.426, 1.429, 2.343), Vector(
22.510, 1.253, 2.704), Vector(23.883, 3.942, -8.587), Vector(14.201, 1.425, -9.417), Vector(20.981, 9.925, -2.967), Vector(
30.046, 1.446, 9.573), Vector(20.292, 1.253, 8.606), Vector(23.575, 1.445, 12.834), Vector(29.855, 1.446, 13.274), Vector(
29.878, 1.447, 18.947), Vector(16.222, 9.925, 15.902), Vector(21.425, -1.535, 20.537), Vector(13.137, -1.555, 24.317), Vector(
3.130, -1.555, 22.100), Vector(3.211, 0.235, 9.522), Vector(32.481, 4.275, -16.174), Vector(32.284, 3.372, -6.845), Vector(
39.109, 3.425, -6.159), Vector(38.998, 2.425, 2.612), Vector(39.023, 2.437, 10.992), Vector(46.661, 2.425, 3.847), Vector(
46.120, 2.425, 11.185), Vector(46.853, 2.425, 18.897), Vector(32.909, 10.846, 22.342), Vector(54.779, 5.425, 14.219), Vector(
55.102, 9.425, 3.700), Vector(60.248, 9.425, 9.405), Vector(36.684, 10.861, -7.802), Vector(38.819, 9.425, 2.853));
Global.NodeConnections = Array(Array(5, 1), Array(0, 2, 16), Array(5, 1, 3, 8), Array(4, 2, 8, 7, 18), Array(5, 3, 18, 17), Array(
0, 2, 4), Array(4, 3, 8, 7, 18), Array(10, 8, 3, 18), Array(9, 3, 7, 2, 16), Array(8, 10), Array(11, 9, 7), Array(13, 10, 24),
Array(8, 9, 11), Array(14, 11), Array(15, 13), Array(16, 14), Array(15, 8, 1), Array(18, 4), Array(7, 3, 4, 17, 19), Array(18,
20), Array(22, 19, 21), Array(20, 23), Array(20, 23), Array(21, 22, 24), Array(11, 23, 26), Array(10, 24, 11), Array(27, 24,
23), Array(30, 23, 26, 28), Array(27, 26, 23), Array(18, 30), Array(29, 27));
Global.DistanceMatrix = Array(Array(1.001, 2.002, 3.003, 2.002, 1.001, 0.003, 4.004, 3.003, 4.004, 5.005, 6.006, 0.004, 5.005,
4.004, 3.003, 2.002, 3.003, 3.003, 4.004, 5.005, 6.006, 6.006, 7.007, 7.007, 0.006, 8.007, 9.006, 10.007, 11.004, 10.005),
Array(1.001, 2.002, 3.003, 2.002, 0.003, 3.003, 2.002, 3.003, 4.004, 5.005, 0.003, 4.004, 3.003, 2.002, 1.001, 4.004, 3.003,
4.004, 5.005, 6.006, 6.006, 7.007, 6.006, 0.005, 7.007, 8.006, 9.007, 10.004, 9.005), Array(1.001, 2.002, 1.001, 0.002, 2.002,
1.001, 2.002, 3.003, 4.004, 0.002, 5.005, 4.004, 3.003, 2.002, 3.003, 2.002, 3.003, 4.004, 5.005, 5.005, 6.006, 5.005, 0.004,
6.006, 7.005, 8.006, 9.003, 8.004), Array(1.001, 2.002, 0.001, 1.001, 1.001, 2.002, 2.002, 3.003, 0.002, 4.004, 4.004, 3.003,
2.002, 2.002, 1.001, 2.002, 3.003, 4.004, 4.004, 5.005, 4.004, 0.003, 5.005, 6.004, 7.005, 8.002, 7.003), Array(1.001, 0.001,
2.002, 2.002, 3.003, 3.003, 4.004, 0.003, 5.005, 5.005, 4.004, 3.003, 1.001, 1.001, 2.002, 3.003, 4.004, 4.004, 5.005, 5.005,
0.004, 6.005, 7.004, 8.005, 9.002, 8.003), Array(0.002, 3.003, 2.002, 3.003, 4.004, 5.005, 0.003, 6.006, 5.005, 4.004, 3.003,
2.002, 2.002, 3.003, 4.004, 5.005, 5.005, 6.006, 6.006, 0.005, 7.006, 8.005, 9.006, 10.003, 9.004), Array(1, 1, 2, 2, 3, 0, 4,
4, 3, 2, 2, 1, 2, 3, 4, 4, 5, 4, 0, 5, 6, 7, 8, 7), Array(1.001, 2.002, 1.001, 2.002, 0.002, 3.003, 4.004, 3.003, 2.002, 2.002,
1.001, 2.002, 3.003, 4.004, 4.004, 4.004, 3.003, 0.002, 4.004, 5.004, 6.005, 7.002, 6.003), Array(1.001, 2.002, 3.003, 0.001,
4.004, 3.003, 2.002, 1.001, 3.003, 2.002, 3.003, 4.004, 5.005, 5.005, 5.005, 4.004, 0.003, 5.005, 6.005, 7.006, 8.003, 7.004),
Array(1.001, 2.002, 0.001, 3.003, 4.004, 3.003, 2.002, 4.004, 3.003, 4.004, 5.005, 5.005, 5.005, 4.004, 3.003, 0.002, 4.004,
5.005, 6.005, 7.004, 6.005), Array(1.001, 0.002, 2.002, 3.003, 4.004, 3.003, 3.003, 2.002, 3.003, 4.004, 4.004, 4.004, 3.003,
2.002, 0.001, 3.003, 4.004, 5.004, 6.003, 5.004), Array(0.001, 1.001, 2.002, 3.003, 4.004, 4.004, 3.003, 4.004, 4.004, 3.003,
3.003, 2.002, 1.001, 0.001, 2.002, 3.003, 4.003, 5.004, 4.004), Array(2, 3, 3, 2, 4, 3, 4, 5, 4, 4, 3, 2, 0, 3, 4, 5, 6, 5),
Array(1.001, 2.002, 3.003, 5.005, 4.004, 5.005, 5.005, 4.004, 4.004, 3.003, 2.002, 0.002, 3.003, 4.004, 5.004, 6.005, 5.005),
Array(1.001, 2.002, 6.006, 5.005, 6.006, 6.006, 5.005, 5.005, 4.004, 3.003, 0.003, 4.004, 5.005, 6.005, 7.006, 6.006), Array(
1.001, 5.005, 4.004, 5.005, 6.006, 6.006, 6.006, 5.005, 4.004, 0.004, 5.005, 6.006, 7.006, 8.005, 7.006), Array(4.004, 3.003,
4.004, 5.005, 6.006, 6.006, 6.006, 5.005, 0.004, 6.006, 7.006, 8.007, 9.004, 8.005), Array(1.001, 2.002, 3.003, 4.004, 4.004,
5.005, 5.005, 0.004, 6.005, 7.004, 8.005, 9.002, 8.003), Array(1.001, 2.002, 3.003, 3.003, 4.004, 4.004, 0.003, 5.004, 6.003,
7.004, 8.001, 7.002), Array(1.001, 2.002, 2.002, 3.003, 4.004, 0.004, 5.004, 6.004, 7.004, 8.002, 7.003), Array(1.001, 1.001,
2.002, 3.003, 0.004, 4.003, 5.003, 6.003, 7.003, 6.004), Array(2.002, 1.001, 2.002, 0.003, 3.002, 4.002, 5.002, 6.004, 5.003),
Array(1.001, 2.002, 0.003, 3.002, 4.002, 5.002, 6.004, 5.003), Array(1.001, 0.002, 2.001, 3.001, 4.001, 5.003, 4.002), Array(
0.001, 1.001, 2.002, 3.002, 4.004, 3.003), Array(2, 3, 4, 5, 4), Array(1.001, 2.001, 3.003, 2.002), Array(1.001, 2.002, 1.001),
Array(3.003, 2.002), Array(1.001));
Global.NodePositions = Array(Vector(113.402, 7.319, -57.302), Vector(147.588, 6.425, -46.749), Vector(136.181, 6.425, -57.159),
Vector(130.189, 6.425, -63.781), Vector(123.305, 6.425, -57.983), Vector(125.678, 6.504, -46.633), Vector(146.311, 9.444,
-61.382), Vector(114.485, 7.471, -46.699), Vector(138.743, 6.425, -32.974), Vector(126.498, 6.425, -39.920), Vector(148.529,
9.425, -28.549), Vector(134.970, 10.396, -27.167), Vector(124.572, 10.434, -34.300), Vector(138.605, 5.359, -18.647), Vector(
119.009, 2.331, -31.024), Vector(121.138, 5.228, -19.933), Vector(126.722, 6.425, -29.505), Vector(102.762, 3.157, -33.609),
Vector(76.030, 7.418, -74.087), Vector(83.720, 9.425, -33.744), Vector(97.439, 7.238, -42.379), Vector(86.252, 12.416,
-47.261), Vector(65.178, 11.425, -73.187), Vector(97.466, 7.269, -50.596), Vector(113.039, 7.424, -37.337), Vector(106.179,
7.450, -46.143), Vector(90.086, 7.411, -44.653), Vector(78.752, 7.418, -62.140), Vector(82.124, 7.428, -44.229), Vector(90.675,
7.231, -51.234), Vector(85.717, 4.692, -63.446), Vector(90.830, 4.330, -70.697), Vector(95.569, 3.646, -79.682), Vector(
102.425, 2.387, -72.817), Vector(81.443, 4.425, -81.648), Vector(70.743, 6.418, -81.495), Vector(69.738, 6.419, -96.344),
Vector(78.682, 5.418, -96.160), Vector(153.887, 18.628, -22.387), Vector(127.586, 12.643, -63.344), Vector(118.911, 13.468,
-58.008), Vector(102.885, 1.092, -56.579), Vector(100.009, 2.967, -67.139), Vector(106.703, 0.465, -44.628), Vector(81.695,
7.418, -52.140), Vector(125.118, 12.445, -57.134));
Global.NodeConnections = Array(Array(4, 7, 41), Array(2, 8, 5, 9), Array(3, 6, 1, 5, 8, 9), Array(2, 4), Array(3, 5, 1), Array(4,
2, 7, 9, 8, 1), Array(2, 39), Array(5, 9, 24, 25, 23), Array(9, 10, 1, 5, 2, 13, 16), Array(5, 7, 8, 1, 2, 16), Array(8, 11),
Array(10, 8, 12), Array(11, 9), Array(8, 15), Array(15, 17), Array(13, 14, 17), Array(8, 14), Array(14, 20, 43), Array(22, 27,
35), Array(21, 28), Array(17, 23, 26, 25, 29, 7), Array(19, 26, 20, 29, 25), Array(18), Array(20, 25, 26, 30, 31, 42, 29, 7),
Array(7, 17, 14), Array(23, 20, 7, 17, 26, 41), Array(20, 23, 25, 28, 29), Array(18, 29, 30), Array(26, 19, 44), Array(27, 26,
23, 20, 30, 31, 42, 44), Array(29, 23, 31, 42, 34), Array(23, 30, 29, 32, 34, 42), Array(33, 31, 34), Array(32, 42, 41), Array(
32, 31, 30, 35, 37), Array(34, 18, 36), Array(35, 34), Array(34), Array(), Array(6, 40, 45), Array(39, 41, 45), Array(42, 43,
33), Array(33, 23, 29, 31, 30, 41), Array(17, 41), Array(29, 27, 28), Array(39, 40, 5, 2, 1, 8));
Global.DistanceMatrix = Array(Array(9999, 2, 3, 2, 1, 2, 4, 1, 3, 2, 4, 5, 6, 4, 3, 4, 3, 3, 5, 5, 3, 6, 6, 2, 2, 2, 3, 4, 4, 3, 3,
3, 3, 2, 4, 5, 6, 5, 0, 5, 6, 1, 2, 2, 4, 6), Array(0, 9999, 1, 2, 2, 1, 2, 2, 1, 1, 2, 3, 4, 2, 3, 3, 2, 4, 6, 6, 4, 7, 7, 3,
3, 3, 4, 5, 5, 4, 4, 4, 5, 5, 5, 6, 7, 6, 0, 3, 4, 4, 4, 5, 5, 4), Array(0, 1, 9999, 1, 2, 1, 1, 2, 1, 1, 2, 3, 4, 2, 3, 3, 2,
4, 6, 6, 4, 7, 7, 3, 3, 3, 4, 5, 5, 4, 4, 4, 5, 5, 5, 6, 7, 6, 0, 2, 3, 4, 4, 5, 5, 3), Array(0, 2, 1, 9999, 1, 2, 2, 3, 2, 2,
3, 4, 5, 3, 4, 4, 3, 5, 7, 7, 5, 8, 8, 4, 4, 4, 5, 6, 6, 5, 5, 5, 6, 6, 6, 7, 8, 7, 0, 3, 4, 5, 5, 6, 6, 4), Array(0, 1, 2, 1,
9999, 1, 3, 2, 2, 2, 3, 4, 5, 3, 4, 4, 3, 4, 6, 6, 4, 7, 7, 3, 3, 3, 4, 5, 5, 4, 4, 4, 5, 5, 5, 6, 7, 6, 0, 4, 5, 4, 4, 5, 5,
5), Array(0, 1, 1, 2, 1, 9999, 2, 1, 1, 1, 2, 3, 4, 2, 3, 3, 2, 3, 5, 5, 3, 6, 6, 2, 2, 2, 3, 4, 4, 3, 3, 3, 4, 4, 4, 5, 6, 5,
0, 3, 4, 3, 3, 4, 4, 4), Array(0, 2, 1, 2, 3, 2, 9999, 3, 2, 2, 3, 4, 5, 3, 4, 4, 3, 5, 7, 7, 5, 8, 8, 4, 4, 4, 5, 6, 6, 5, 5,
5, 5, 4, 6, 7, 8, 7, 0, 1, 2, 3, 4, 4, 6, 2), Array(0, 2, 2, 3, 2, 1, 3, 9999, 2, 1, 3, 4, 5, 3, 2, 3, 2, 2, 4, 4, 2, 5, 5, 1,
1, 1, 2, 3, 3, 2, 2, 2, 3, 3, 3, 4, 5, 4, 0, 4, 5, 2, 2, 3, 3, 5), Array(0, 1, 1, 2, 2, 1, 2, 2, 9999, 1, 1, 2, 3, 1, 2, 2, 1,
3, 6, 6, 4, 7, 7, 3, 3, 3, 4, 5, 5, 4, 4, 4, 5, 5, 5, 6, 7, 6, 0, 3, 4, 4, 4, 4, 5, 4), Array(0, 1, 1, 2, 2, 1, 2, 1, 1, 9999,
2, 3, 4, 2, 2, 3, 1, 3, 5, 5, 3, 6, 6, 2, 2, 2, 3, 4, 4, 3, 3, 3, 4, 4, 4, 5, 6, 5, 0, 3, 4, 3, 3, 4, 4, 4), Array(0, 2, 2, 3,
3, 2, 3, 3, 1, 2, 9999, 1, 2, 2, 3, 3, 2, 4, 7, 7, 5, 8, 8, 4, 4, 4, 5, 6, 6, 5, 5, 5, 6, 6, 6, 7, 8, 7, 0, 4, 5, 5, 5, 5, 6,
5), Array(0, 2, 2, 3, 3, 2, 3, 3, 1, 2, 1, 9999, 1, 2, 3, 3, 2, 4, 7, 7, 5, 8, 8, 4, 4, 4, 5, 6, 6, 5, 5, 5, 6, 6, 6, 7, 8, 7,
0, 4, 5, 5, 5, 5, 6, 5), Array(0, 2, 2, 3, 3, 2, 3, 2, 2, 1, 2, 1, 9999, 3, 3, 4, 2, 4, 6, 6, 4, 7, 7, 3, 3, 3, 4, 5, 5, 4, 4,
4, 5, 5, 5, 6, 7, 6, 0, 4, 5, 4, 4, 5, 5, 5), Array(0, 2, 2, 3, 3, 2, 3, 3, 1, 2, 2, 3, 4, 9999, 2, 1, 2, 2, 6, 6, 3, 7, 7, 4,
4, 4, 4, 5, 5, 4, 5, 5, 6, 5, 6, 7, 8, 7, 0, 4, 5, 4, 5, 3, 5, 5), Array(0, 4, 4, 5, 5, 4, 5, 3, 3, 4, 4, 5, 6, 2, 9999, 1, 4,
1, 5, 5, 2, 6, 6, 3, 4, 3, 3, 4, 4, 3, 4, 4, 5, 4, 5, 6, 7, 6, 0, 6, 7, 3, 4, 2, 4, 7), Array(0, 3, 3, 4, 4, 3, 4, 3, 2, 3, 3,
4, 5, 1, 1, 9999, 3, 1, 5, 5, 2, 6, 6, 3, 4, 3, 3, 4, 4, 3, 4, 4, 5, 4, 5, 6, 7, 6, 0, 5, 6, 3, 4, 2, 4, 6), Array(0, 2, 2, 3,
3, 2, 3, 3, 1, 2, 2, 3, 4, 2, 1, 2, 9999, 2, 6, 6, 3, 7, 7, 4, 4, 4, 4, 5, 5, 4, 5, 5, 6, 5, 6, 7, 8, 7, 0, 4, 5, 4, 5, 3, 5,
5), Array(0, 4, 4, 5, 4, 3, 5, 2, 4, 3, 5, 6, 7, 3, 1, 2, 4, 9999, 4, 4, 1, 5, 5, 2, 3, 2, 2, 3, 3, 2, 3, 3, 4, 3, 4, 5, 6, 5,
0, 6, 7, 2, 3, 1, 3, 7), Array(0, 6, 6, 7, 6, 5, 7, 4, 6, 5, 7, 8, 9, 7, 5, 6, 6, 4, 9999, 5, 3, 6, 1, 3, 5, 4, 3, 1, 4, 2, 2,
3, 3, 4, 2, 1, 2, 3, 0, 8, 9, 4, 3, 5, 3, 9), Array(0, 5, 5, 6, 5, 4, 6, 3, 5, 4, 6, 7, 8, 6, 4, 5, 5, 3, 4, 9999, 2, 1, 5, 3,
4, 2, 2, 3, 1, 2, 3, 3, 4, 4, 4, 5, 6, 5, 0, 7, 8, 3, 3, 4, 2, 8), Array(0, 3, 3, 4, 3, 2, 4, 1, 3, 2, 4, 5, 6, 4, 2, 3, 3, 1,
3, 3, 9999, 4, 4, 1, 2, 1, 1, 2, 2, 1, 2, 2, 3, 3, 3, 4, 5, 4, 0, 5, 6, 2, 2, 2, 2, 6), Array(0, 4, 4, 5, 4, 3, 5, 2, 4, 3, 5,
6, 7, 5, 3, 4, 4, 2, 3, 1, 1, 9999, 4, 2, 3, 1, 1, 2, 2, 1, 2, 2, 3, 3, 3, 4, 5, 4, 0, 6, 7, 2, 2, 3, 2, 7), Array(0, 7, 7, 8,
7, 6, 8, 5, 7, 6, 8, 9, 10, 8, 6, 7, 7, 5, 1, 6, 4, 7, 9999, 4, 6, 5, 4, 2, 5, 3, 3, 4, 4, 5, 3, 2, 3, 4, 0, 9, 10, 5, 4, 6, 4,
10), Array(0, 3, 3, 4, 3, 2, 4, 1, 3, 2, 4, 5, 6, 4, 3, 4, 3, 2, 3, 3, 1, 4, 4, 9999, 2, 1, 1, 2, 2, 1, 1, 1, 2, 2, 2, 3, 4, 3,
0, 5, 6, 2, 1, 3, 2, 6), Array(0, 3, 3, 4, 3, 2, 4, 1, 3, 2, 4, 5, 6, 3, 1, 2, 3, 1, 5, 5, 2, 6, 6, 2, 9999, 2, 3, 4, 4, 3, 3,
3, 4, 4, 4, 5, 6, 5, 0, 5, 6, 3, 3, 2, 4, 6), Array(0, 3, 3, 4, 3, 2, 4, 1, 3, 2, 4, 5, 6, 4, 2, 3, 3, 1, 4, 3, 1, 4, 5, 1, 2,
9999, 1, 3, 2, 2, 2, 2, 3, 2, 3, 4, 5, 4, 0, 5, 6, 1, 2, 2, 3, 6), Array(0, 4, 4, 5, 4, 3, 5, 2, 4, 3, 5, 6, 7, 5, 3, 4, 4, 2,
3, 2, 1, 3, 4, 1, 3, 1, 9999, 2, 1, 1, 2, 2, 3, 3, 3, 4, 5, 4, 0, 6, 7, 2, 2, 3, 2, 7), Array(0, 5, 5, 6, 5, 4, 6, 3, 5, 4, 6,
7, 8, 6, 4, 5, 5, 3, 1, 4, 2, 5, 2, 2, 4, 3, 2, 9999, 3, 1, 1, 2, 3, 3, 2, 2, 3, 3, 0, 7, 8, 3, 2, 4, 2, 8), Array(0, 5, 5, 6,
5, 4, 6, 3, 5, 4, 6, 7, 8, 6, 4, 5, 5, 3, 3, 1, 2, 2, 4, 2, 4, 2, 1, 2, 9999, 2, 3, 3, 4, 4, 4, 4, 5, 5, 0, 7, 8, 3, 3, 4, 1,
8), Array(0, 4, 4, 5, 4, 3, 5, 2, 4, 3, 5, 6, 7, 5, 3, 4, 4, 2, 2, 3, 1, 4, 3, 1, 3, 2, 1, 1, 2, 9999, 1, 1, 2, 2, 2, 3, 4, 3,
0, 6, 7, 2, 1, 3, 1, 7), Array(0, 4, 4, 5, 4, 3, 5, 2, 4, 3, 5, 6, 7, 5, 4, 5, 4, 3, 3, 4, 2, 5, 4, 1, 3, 2, 2, 2, 3, 1, 9999,
1, 2, 2, 1, 2, 3, 2, 0, 6, 7, 2, 1, 3, 2, 7), Array(0, 4, 4, 5, 4, 3, 5, 2, 4, 3, 5, 6, 7, 5, 4, 5, 4, 3, 3, 4, 2, 5, 4, 1, 3,
2, 2, 2, 3, 1, 1, 9999, 1, 2, 1, 2, 3, 2, 0, 6, 7, 2, 1, 3, 2, 7), Array(0, 5, 5, 6, 5, 4, 6, 3, 5, 4, 6, 7, 8, 6, 5, 6, 5, 4,
3, 5, 3, 6, 4, 2, 4, 3, 3, 3, 4, 2, 2, 1, 9999, 1, 1, 2, 3, 2, 0, 7, 8, 2, 2, 3, 3, 8), Array(0, 5, 5, 6, 5, 4, 6, 3, 5, 4, 6,
7, 8, 6, 4, 5, 5, 3, 4, 5, 3, 6, 5, 2, 4, 3, 3, 3, 4, 2, 2, 2, 1, 9999, 2, 3, 4, 3, 0, 7, 8, 1, 1, 2, 3, 8), Array(0, 5, 5, 6,
5, 4, 6, 3, 5, 4, 6, 7, 8, 6, 5, 6, 5, 4, 2, 5, 3, 6, 3, 2, 4, 3, 3, 3, 4, 2, 1, 1, 1, 2, 9999, 1, 2, 1, 0, 7, 8, 3, 2, 4, 3,
8), Array(0, 6, 6, 7, 6, 5, 7, 4, 6, 5, 7, 8, 9, 7, 6, 7, 6, 5, 1, 6, 4, 7, 2, 3, 5, 4, 4, 2, 5, 3, 2, 2, 2, 3, 1, 9999, 1, 2,
0, 8, 9, 4, 3, 5, 4, 9), Array(0, 6, 6, 7, 6, 5, 7, 4, 6, 5, 7, 8, 9, 7, 6, 7, 6, 5, 2, 6, 4, 7, 3, 3, 5, 4, 4, 3, 5, 3, 2, 2,
2, 3, 1, 1, 9999, 2, 0, 8, 9, 4, 3, 5, 4, 9), Array(0, 6, 6, 7, 6, 5, 7, 4, 6, 5, 7, 8, 9, 7, 6, 7, 6, 5, 3, 6, 4, 7, 4, 3, 5,
4, 4, 4, 5, 3, 2, 2, 2, 3, 1, 2, 3, 9999, 0, 8, 9, 4, 3, 5, 4, 9), Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9999), Array(0, 2, 2, 3, 3, 2, 1, 3, 2, 3, 3, 4, 5, 3, 4, 4, 3, 4,
6, 7, 5, 8, 7, 4, 4, 4, 5, 5, 6, 4, 4, 4, 4, 3, 5, 6, 7, 6, 0, 9999, 1, 2, 3, 3, 5, 1), Array(0, 2, 2, 3, 3, 2, 2, 3, 2, 3, 3,
4, 5, 3, 4, 4, 3, 3, 5, 6, 4, 7, 6, 3, 4, 4, 4, 4, 5, 3, 3, 3, 3, 2, 4, 5, 6, 5, 0, 1, 9999, 1, 2, 2, 4, 1), Array(0, 5, 5, 6,
5, 4, 6, 3, 5, 4, 6, 7, 8, 5, 3, 4, 5, 2, 4, 5, 3, 6, 5, 2, 4, 3, 3, 3, 4, 2, 2, 2, 2, 1, 3, 4, 5, 4, 0, 7, 8, 9999, 1, 1, 3,
8), Array(0, 4, 4, 5, 4, 3, 5, 2, 4, 3, 5, 6, 7, 5, 4, 5, 4, 3, 3, 4, 2, 5, 4, 1, 3, 2, 2, 2, 3, 1, 1, 1, 2, 1, 2, 3, 4, 3, 0,
6, 7, 1, 9999, 2, 2, 7), Array(0, 5, 5, 6, 5, 4, 6, 3, 5, 4, 6, 7, 8, 4, 2, 3, 5, 1, 5, 5, 2, 6, 6, 3, 4, 3, 3, 4, 4, 3, 3, 3,
3, 2, 4, 5, 6, 5, 0, 7, 8, 1, 2, 9999, 4, 8), Array(0, 5, 5, 6, 5, 4, 6, 3, 5, 4, 6, 7, 8, 6, 4, 5, 5, 3, 2, 2, 2, 3, 3, 2, 4,
3, 2, 1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 0, 7, 8, 3, 2, 4, 9999, 8), Array(0, 1, 1, 2, 2, 1, 2, 2, 1, 2, 2, 3, 4, 2, 3, 3, 2, 4,
6, 6, 4, 7, 7, 3, 3, 3, 4, 5, 5, 4, 4, 4, 4, 3, 5, 6, 7, 6, 0, 1, 1, 2, 3, 3, 5, 9999));
}
}
rule("MAP: HAVANA")
rule("SUBROUTINE: BOT - RESET PATH FINDING")
{
event
{
Ongoing - Global;
}
conditions
{
Current Map == Map(Havana);
Subroutine;
BotResetPathFinding;
}
actions
{
Global.NodePositions = Array(Vector(147.588, 6.425, -46.749), Vector(136.181, 6.425, -57.159), Vector(130.189, 6.425, -63.781),
Vector(123.305, 6.425, -57.983), Vector(125.678, 6.504, -46.633), Vector(114.485, 7.471, -46.699), Vector(138.743, 6.425,
-32.974), Vector(126.498, 6.425, -39.920), Vector(124.572, 10.434, -34.300), Vector(138.605, 5.359, -18.647), Vector(119.009,
2.331, -31.024), Vector(121.138, 5.228, -19.933), Vector(126.722, 6.425, -29.505), Vector(102.762, 3.157, -33.609), Vector(
76.030, 7.418, -74.087), Vector(83.720, 9.425, -33.744), Vector(97.439, 7.238, -42.379), Vector(86.252, 12.416, -47.261),
Vector(65.178, 11.425, -73.187), Vector(97.466, 7.269, -50.596), Vector(113.039, 7.424, -37.337), Vector(106.179, 7.450,
-46.143), Vector(90.086, 7.411, -44.653), Vector(78.752, 7.418, -62.140), Vector(82.124, 7.428, -44.229), Vector(90.675, 7.231,
-51.234), Vector(85.717, 4.692, -63.446), Vector(90.830, 4.330, -70.697), Vector(102.425, 2.387, -72.817), Vector(81.443,
4.425, -81.648), Vector(70.743, 6.418, -81.495), Vector(69.738, 6.419, -96.344), Vector(127.586, 12.643, -63.344), Vector(
118.911, 13.468, -58.008), Vector(102.885, 1.092, -56.579), Vector(100.009, 2.967, -67.139), Vector(106.703, 0.465, -44.628),
Vector(81.695, 7.418, -52.140), Vector(126.979, 12.393, -55.079), Vector(133.043, 10.425, -26.625), Vector(114.646, 7.278,
-57.336), Vector(95.160, 3.688, -81.194), Vector(78.456, 5.418, -93.581), Vector(75.455, 5.418, -101.492), Vector(148.071,
9.432, -32.123), Vector(146.706, 9.425, -27.858), Vector(144.273, 9.445, -63.119), Vector(144.278, 9.454, -58.447));
Global.NodeConnections = Array(Array(1, 6, 4, 7), Array(2, 1, 4, 6, 7, 0, 47), Array(1, 3), Array(2, 4, 40), Array(3, 1, 5, 7, 6,
1, 0), Array(4, 7, 20, 21, 19, 16, 40), Array(7, 1, 4, 1, 9, 12, 0, 44), Array(4, 5, 6, 1, 1, 12, 0), Array(7, 39), Array(6,
11), Array(11, 13), Array(9, 10, 13), Array(6, 7, 10), Array(10, 16, 36), Array(18, 23, 30), Array(17, 24), Array(13, 19, 22,
21, 25, 5), Array(15, 22, 25, 23), Array(14), Array(16, 21, 22, 26, 27, 35, 25, 5), Array(5, 13, 10), Array(19, 16, 5, 13, 22,
34), Array(16, 19, 21, 24, 25), Array(14, 25, 26, 37), Array(22, 15, 37), Array(23, 22, 19, 16, 26, 27, 35, 37), Array(25, 19,
27, 35, 29), Array(19, 26, 25, 29, 35, 41), Array(35, 34, 41), Array(27, 26, 30, 41, 42), Array(29, 14, 31), Array(30, 29, 43),
Array(33, 38, 1, 46), Array(32, 38, 40), Array(35, 36, 28), Array(28, 19, 25, 27, 26, 34), Array(13, 34), Array(25, 23, 24),
Array(5, 4, 1, 6, 1, 32, 33, 0), Array(6, 8, 45, 44), Array(3, 5, 34), Array(28, 27, 29, 42), Array(29, 41, 43), Array(42, 31),
Array(6, 45), Array(44, 39), Array(47, 32), Array(1, 0, 6, 46));
Global.DistanceMatrix = Array(Array(1.001, 2.002, 2.002, 1.001, 2.002, 1.001, 1.001, 5.002, 2.002, 3.004, 3.003, 2.002, 4.004,
6.006, 6.006, 3.003, 7.005, 7.007, 3.003, 3.003, 3.003, 4.004, 5.005, 5.005, 4.004, 4.004, 4.004, 5.005, 5.005, 6.006, 7.006,
4.002, 5.002, 4.005, 4.004, 5.005, 5.005, 5.001, 4.002, 3.003, 5.005, 6.006, 7.007, 2.002, 3.003, 3.002, 2.001), Array(1.001,
2.002, 1.001, 2.002, 1.001, 1.001, 5.002, 2.002, 3.004, 3.003, 2.002, 4.004, 6.006, 6.006, 3.003, 7.005, 7.007, 3.003, 3.003,
3.003, 4.004, 5.005, 5.005, 4.004, 4.004, 4.004, 5.005, 5.005, 6.006, 7.006, 3.001, 4.002, 4.005, 4.004, 5.005, 5.005, 4.001,
4.002, 3.003, 5.005, 6.006, 7.007, 2.002, 3.003, 2.002, 1.001), Array(1.001, 2.002, 3.003, 2.002, 2.002, 6.003, 3.003, 4.005,
4.004, 3.003, 5.005, 7.007, 7.007, 4.004, 8.006, 8.008, 4.004, 4.004, 4.004, 5.005, 6.006, 6.006, 5.005, 5.005, 5.005, 4.006,
6.006, 7.007, 8.007, 4.002, 5.003, 3.006, 4.005, 4.006, 6.006, 5.002, 5.003, 2.002, 5.006, 6.007, 7.008, 3.003, 4.004, 3.003,
2.002), Array(1.001, 2.002, 2.002, 2.002, 6.003, 3.003, 4.005, 4.004, 3.003, 4.004, 6.006, 6.006, 3.003, 7.005, 7.007, 3.003,
3.003, 3.003, 4.004, 5.005, 5.005, 4.004, 4.004, 4.004, 3.005, 5.005, 6.006, 7.006, 5.003, 6.002, 2.005, 3.004, 3.005, 5.005,
6.002, 5.003, 1.001, 4.005, 5.006, 6.007, 3.003, 4.004, 4.004, 3.003), Array(1.001, 1.001, 1.001, 5.002, 2.002, 3.004, 3.003,
2.002, 3.003, 5.005, 5.005, 2.002, 6.004, 6.006, 2.002, 2.002, 2.002, 3.003, 4.004, 4.004, 3.003, 3.003, 3.003, 4.004, 4.004,
5.005, 6.005, 4.002, 5.002, 3.004, 3.003, 4.004, 4.004, 5.001, 4.002, 2.002, 4.004, 5.005, 6.006, 2.002, 3.003, 3.003, 2.002),
Array(2.002, 1.001, 6.002, 3.003, 2.003, 3.003, 2.002, 2.002, 4.004, 4.004, 1.001, 5.003, 5.005, 1.001, 1.001, 1.001, 2.002,
3.003, 3.003, 2.002, 2.002, 2.002, 3.003, 3.003, 4.004, 5.004, 5.002, 6.002, 2.003, 2.002, 3.003, 3.003, 6.001, 5.003, 1.001,
3.003, 4.004, 5.005, 3.003, 4.004, 4.003, 3.003), Array(1.001, 4.002, 1.001, 2.003, 2.002, 1.001, 3.004, 6.006, 6.006, 3.003,
7.005, 7.007, 3.003, 3.003, 3.003, 4.004, 5.005, 5.005, 4.004, 4.004, 4.004, 5.005, 5.005, 6.006, 7.006, 4.002, 5.002, 4.005,
4.004, 4.005, 5.005, 5.001, 3.001, 3.003, 5.005, 6.006, 7.007, 1.001, 2.002, 3.002, 2.001), Array(5.001, 2.002, 2.004, 3.003,
1.001, 3.003, 5.005, 5.005, 2.002, 6.004, 6.006, 2.002, 2.002, 2.002, 3.003, 4.004, 4.004, 3.003, 3.003, 3.003, 4.004, 4.004,
5.005, 6.005, 4.002, 5.003, 3.004, 3.003, 4.004, 4.004, 5.002, 4.002, 2.002, 4.004, 5.005, 6.006, 2.002, 3.003, 3.003, 2.002),
Array(3.005, 3.007, 4.006, 2.005, 4.008, 6.010, 6.010, 3.007, 7.009, 7.011, 3.007, 3.007, 3.007, 4.008, 5.009, 5.009, 4.008,
4.008, 4.008, 5.009, 5.009, 6.010, 7.010, 5.006, 6.006, 4.009, 4.008, 5.009, 5.009, 6.005, 1.001, 3.007, 5.009, 6.010, 7.011,
2.003, 2.002, 4.006, 3.005), Array(2.002, 1.001, 2.002, 2.003, 6.007, 6.007, 3.004, 7.006, 7.008, 4.004, 4.003, 4.004, 4.005,
5.006, 5.006, 4.005, 5.005, 5.005, 5.006, 6.006, 7.007, 8.007, 5.003, 6.003, 4.005, 5.005, 3.004, 5.006, 6.002, 4.002, 4.004,
6.006, 7.007, 8.008, 2.002, 3.003, 4.003, 3.002), Array(1.001, 4.001, 1.001, 5.005, 5.005, 2.002, 6.004, 6.006, 3.003, 4.001,
3.002, 3.003, 4.004, 4.004, 3.003, 4.004, 4.004, 4.004, 5.005, 6.006, 7.006, 7.004, 8.004, 3.003, 4.004, 2.002, 4.004, 8.003,
6.003, 4.003, 5.005, 6.006, 7.007, 4.003, 5.004, 6.004, 5.003), Array(3.002, 1.002, 5.006, 5.006, 2.003, 6.005, 6.007, 3.004,
4.002, 3.003, 3.004, 4.005, 4.005, 3.004, 4.005, 4.005, 4.005, 5.006, 6.007, 7.007, 6.004, 7.004, 3.004, 4.005, 2.003, 4.005,
7.003, 5.003, 4.004, 5.006, 6.007, 7.008, 3.003, 4.004, 5.004, 4.003), Array(2.004, 6.006, 6.006, 3.003, 7.005, 7.007, 3.003,
3.003, 3.003, 4.004, 5.005, 5.005, 4.004, 4.004, 4.004, 5.005, 5.005, 6.006, 7.006, 5.003, 6.003, 4.005, 4.004, 3.005, 5.005,
6.002, 4.002, 3.003, 5.005, 6.006, 7.007, 2.002, 3.003, 4.003, 3.002), Array(4.004, 4.004, 1.001, 5.003, 5.005, 2.002, 3.001,
2.001, 2.002, 3.003, 3.003, 2.002, 3.003, 3.003, 3.003, 4.004, 5.005, 6.005, 7.004, 8.004, 2.002, 3.003, 1.001, 3.003, 8.003,
7.004, 3.003, 4.004, 5.005, 6.006, 5.004, 6.005, 6.005, 5.004), Array(4.003, 3.003, 5.002, 1.001, 3.003, 5.005, 4.004, 3.003,
1.001, 3.003, 2.002, 2.003, 3.003, 4.004, 2.002, 1.001, 2.002, 9.006, 10.006, 4.004, 3.003, 5.005, 2.002, 10.005, 9.007, 5.005,
3.003, 3.003, 3.003, 7.007, 8.008, 8.007, 7.007), Array(3.003, 1.001, 4.005, 3.003, 5.005, 3.003, 2.002, 2.003, 1.001, 2.003,
3.004, 3.004, 4.005, 4.005, 4.005, 5.006, 9.006, 10.006, 4.005, 3.004, 5.005, 2.002, 10.005, 9.007, 5.005, 4.005, 5.006, 6.007,
7.007, 8.008, 8.007, 7.007), Array(4.002, 4.004, 1.001, 2.002, 1.001, 1.001, 2.002, 2.002, 1.001, 2.002, 2.002, 3.003, 3.003,
4.004, 5.004, 6.003, 7.003, 2.003, 2.002, 2.002, 2.002, 7.002, 6.004, 2.002, 3.003, 4.004, 5.005, 4.004, 5.005, 5.004, 4.004),
Array(3.006, 2.004, 4.006, 2.004, 1.003, 1.004, 2.002, 1.004, 2.005, 2.005, 3.006, 3.006, 3.006, 4.007, 8.007, 9.007, 3.006,
2.005, 4.006, 2.003, 9.006, 8.008, 4.006, 3.006, 4.007, 5.008, 6.008, 7.009, 7.008, 6.008), Array(4.004, 6.006, 5.005, 4.004,
2.002, 4.004, 3.003, 3.004, 4.004, 5.005, 3.003, 2.002, 3.003, 10.007, 11.007, 5.005, 4.004, 6.006, 3.003, 11.006, 10.008,
6.006, 4.004, 4.004, 4.004, 8.008, 9.009, 9.008, 8.008), Array(2.002, 1.001, 1.001, 2.002, 2.002, 1.001, 1.001, 1.001, 2.002,
2.002, 3.003, 4.003, 6.003, 7.003, 2.002, 1.001, 3.003, 2.002, 7.002, 6.004, 2.002, 2.002, 3.003, 4.004, 4.004, 5.005, 5.004,
4.004), Array(2.002, 3.003, 4.004, 4.004, 3.003, 3.003, 3.003, 4.004, 4.004, 5.005, 6.005, 6.003, 7.003, 3.004, 3.003, 2.004,
4.004, 7.002, 6.004, 2.002, 4.004, 5.005, 6.006, 4.004, 5.005, 5.004, 4.004), Array(1.001, 3.003, 2.002, 2.002, 2.002, 2.002,
2.003, 3.003, 4.004, 5.004, 6.003, 7.003, 1.003, 2.002, 2.003, 3.003, 7.002, 6.004, 2.002, 3.003, 4.004, 5.005, 4.004, 5.005,
5.004, 4.004), Array(2.002, 1.001, 1.001, 2.002, 2.002, 3.003, 3.003, 4.004, 5.004, 7.004, 8.004, 2.003, 2.002, 3.003, 2.002,
8.003, 7.005, 3.003, 3.003, 4.004, 5.005, 5.005, 6.006, 6.005, 5.005), Array(2.002, 1.001, 1.002, 2.002, 3.003, 2.003, 2.002,
3.003, 8.005, 9.005, 3.003, 2.002, 4.004, 1.001, 9.004, 8.006, 4.004, 3.003, 3.004, 4.004, 6.006, 7.007, 7.006, 6.006), Array(
2.002, 3.003, 3.003, 4.004, 4.004, 4.004, 5.005, 8.005, 9.005, 3.004, 3.003, 4.004, 1.001, 9.004, 8.006, 4.004, 4.004, 5.005,
6.006, 6.006, 7.007, 7.006, 6.006), Array(1.001, 1.001, 2.002, 2.002, 3.003, 4.003, 7.004, 8.004, 2.002, 1.001, 3.003, 1.001,
8.003, 7.005, 3.003, 2.002, 3.003, 4.004, 5.005, 6.006, 6.005, 5.005), Array(1.001, 2.002, 1.001, 2.002, 3.002, 7.004, 8.004,
2.002, 1.001, 3.003, 2.002, 8.003, 7.005, 3.003, 2.002, 2.002, 3.003, 5.005, 6.006, 6.005, 5.005), Array(2.002, 1.001, 2.002,
3.002, 7.004, 8.004, 2.002, 1.001, 3.003, 2.002, 8.003, 7.005, 3.003, 1.001, 2.002, 3.003, 5.005, 6.006, 6.005, 5.005), Array(
2.002, 3.003, 4.003, 8.004, 9.003, 1.001, 1.001, 2.002, 3.003, 9.004, 8.006, 4.002, 1.001, 2.002, 3.003, 6.006, 7.007, 7.005,
6.006), Array(1.001, 2.001, 8.005, 9.005, 3.003, 2.002, 4.004, 3.003, 9.004, 8.006, 4.004, 1.001, 1.001, 2.002, 6.006, 7.007,
7.006, 6.006), Array(1.001, 9.006, 10.006, 4.004, 3.003, 5.005, 3.003, 10.005, 9.007, 5.005, 2.002, 2.002, 2.002, 7.007, 8.008,
8.007, 7.007), Array(9.007, 10.007, 4.005, 3.004, 5.006, 4.004, 10.006, 9.008, 5.006, 2.003, 2.002, 1.001, 7.008, 8.009, 8.008,
7.008), Array(1.001, 3.008, 4.007, 4.008, 5.008, 1.001, 5.005, 2.006, 5.008, 6.009, 7.010, 3.005, 4.006, 1.001, 2.002), Array(
2.009, 3.008, 3.009, 5.009, 1.001, 5.006, 1.007, 4.009, 5.010, 6.011, 3.006, 4.007, 2.002, 3.003), Array(1.001, 1.001, 3.003,
9.003, 8.005, 4.001, 2.002, 3.003, 4.004, 6.005, 7.006, 7.004, 6.005), Array(2.002, 2.002, 8.003, 7.005, 3.002, 2.002, 3.003,
4.004, 5.005, 6.006, 6.005, 5.005), Array(4.004, 9.004, 8.005, 4.002, 3.003, 4.004, 5.005, 6.005, 7.006, 7.005, 6.005), Array(
9.004, 8.006, 4.004, 3.003, 4.004, 5.005, 6.006, 7.007, 7.006, 6.006), Array(4.006, 2.007, 4.009, 5.010, 6.011, 2.006, 3.007,
2.002, 2.003), Array(4.006, 6.008, 7.009, 8.010, 1.002, 1.001, 4.005, 3.004), Array(3.004, 4.005, 5.006, 4.004, 5.005, 5.003,
4.004), Array(1.001, 2.002, 6.006, 7.007, 7.006, 6.006), Array(1.001, 7.007, 8.008, 8.007, 7.007), Array(8.008, 9.009, 9.008,
8.008), Array(1.001, 4.003, 3.002), Array(5.004, 4.003), Array(1.001));
Event Player.BotTargetPlayer = -1;
Event Player.BotTargetPosition = -1;
Event Player.BotPrevNodeId = -1;
Event Player.BotClosestNodeIdToTarget = -1;
Event Player.BotNextNodeId = -1;
Event Player.BotNextNodePosition = -1;
Event Player.BotIsPathFinding = False;
Stop Throttle In Direction(Event Player);
disabled Stop Facing(Event Player);
}
}
disabled rule("MAP: HAVANA (CORNER PATHS TESTING)")
rule("SUBROUTINE: BOT - START PATH FINDING")
{
event
{
Ongoing - Global;
Subroutine;
BotStartPathFinding;
}
actions
{
Global.NodePositions = Array(Vector(34.082, 12.395, -61.509), Vector(27.589, 12.398, -61.675), Vector(27.676, 10.425, -86.929),
Vector(22.777, 10.425, -86.830), Vector(32.685, 10.425, -86.942), Vector(46.841, 11.412, -61.289), Vector(46.882, 11.394,
-67.083), Vector(46.929, 6.488, -80.426), Vector(23.014, 10.425, -96.716), Vector(10.330, 6.425, -97.088), Vector(10.321,
6.425, -101.361));
Global.NodeConnections = Array(Array(1, 5), Array(0, 2), Array(4, 3, 1), Array(2, 8), Array(2), Array(0, 6), Array(5, 7), Array(6),
Array(9, 3), Array(10, 8), Array(9));
Global.DistanceMatrix = Array(Array(1.001, 2.002, 3.003, 3.003, 1.001, 2.002, 3.003, 4.004, 5.005, 6.006), Array(1.001, 2.002,
2.002, 2.002, 3.003, 4.004, 3.003, 4.004, 5.005), Array(1.001, 1.001, 3.003, 4.004, 5.005, 2.002, 3.003, 4.004), Array(2.002,
4.004, 5.005, 6.006, 1.001, 2.002, 3.003), Array(4.004, 5.005, 6.006, 3.003, 4.004, 5.005), Array(1.001, 2.002, 5.005, 6.006,
7.007), Array(1.001, 6.006, 7.007, 8.008), Array(7.007, 8.008, 9.009), Array(1.001, 2.002), Array(1.001));
Abort If(Event Player.BotIsPathFinding == True);
disabled Call Subroutine(BotGetClosestNodeIdToTarget);
Call Subroutine(BotGetNextNodeIdAndPosition);
Start Facing(Event Player, Direction Towards(Position Of(Event Player), Event Player.BotNextNodePosition), 360, To World,
Direction and Turn Rate);
Start Throttle In Direction(Event Player, Direction Towards(Position Of(Event Player), Event Player.BotNextNodePosition), 1,
To World, Replace existing throttle, Direction and Magnitude);
Event Player.BotIsPathFinding = True;
}
}
rule("BOT: PATH FINDING - INIT")
rule("SUBROUTINE: BOT - GET CLOSEST NODE ID TO TARGET")
{
event
{
Player Joined Match;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Subroutine;
BotGetClosestNodeIdToTarget;
}
actions
{
Event Player.BotMoveSpeedMultiplier = 1;
Call Subroutine(BotResetPathFinding);
Event Player.BotTargetPosition = Event Player.BotTargetPlayer != -1 ? Position Of(Event Player.BotTargetPlayer)
: Event Player.BotTargetPosition;
Event Player.BotClosestNodeIdToTarget = Index Of Array Value(Global.NodePositions, Sorted Array(Filtered Array(
Global.NodePositions, Is In Line of Sight(Event Player.BotTargetPosition + Vector(0, 2, 0), Current Array Element,
Barriers Do Not Block LOS) == True), Distance Between(Event Player.BotTargetPosition, Current Array Element))[0]);
}
}
rule("BOT: PATH FINDING - START")
rule("SUBROUTINE: BOT - GET NEXT NODE ID AND POSITION")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Has Spawned(Event Player) == True;
Event Player.BotIsPathFinding == False;
Event Player.BotCancelPathFinding == False;
(Event Player.BotTargetPosition != -1 || Event Player.BotTargetPlayer != -1) == True;
Subroutine;
BotGetNextNodeIdAndPosition;
}
actions
{
Event Player.BotIsPathFinding = True;
Call Subroutine(BotGetTargetNodeAndPosition);
Call Subroutine(BotGetNextNodeId);
Call Subroutine(BotGetNextPosition);
Call Subroutine(BotComputeTimestamp);
"FACING AND MOVEMENT DIRECTION"
Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Event Player.BotNextNodePosition + Vector(0, 1, 0)), 450,
To World, Direction and Turn Rate);
Start Throttle In Direction(Event Player, Direction Towards(Position Of(Event Player), Event Player.BotNextNodePosition), 1,
To World, Replace existing throttle, Direction and Magnitude);
Log To Inspector(Custom String("PATH FINDING ({0}): BEGIN PATH FINDING FROM NODE #{1} TO NODE #{2}", Event Player,
Event Player.BotNextNodeId, Event Player.BotClosestNodeIdToTarget));
"BOT JUST START FOLLOW PATH OR LOST NEXT NODE"
If(Event Player.BotPrevNodeId == -1);
Log To Inspector(Custom String("PATH FINDING ({0}): BEGIN PATH FINDING", Event Player));
Event Player.BotClosestNodeIdToBot = Index Of Array Value(Global.NodePositions, Sorted Array(Filtered Array(Global.NodePositions,
Is In Line of Sight(Position Of(Event Player) + Vector(0, 2, 0), Current Array Element, Barriers Do Not Block LOS) == True),
Distance Between(Position Of(Event Player), Current Array Element))[0]);
Call Subroutine(BotGetClosestNodeIdToTarget);
End;
"I. FIND NEXT NODE IN PATH"
Log To Inspector(Custom String("PATH FINDING ({0}): BEGIN FIND NEXT NODE FROM NODE #{1}", Event Player,
Event Player.BotClosestNodeIdToBot));
"ALWAYS UPDATE CLOSEST NODE TO TARGET IF TARGET IS PLAYER (TARGET POSITION CAN CHANGE)"
If(Event Player.BotTargetPlayer != -1);
Event Player.BotTargetPosition = Position Of(Event Player.BotTargetPlayer);
Call Subroutine(BotGetClosestNodeIdToTarget);
Log To Inspector(Custom String("PATH FINDING ({0}): TARGET IS PLAYER {2}, SET TARGET NODE #{1}", Event Player,
Event Player.BotClosestNodeIdToTarget, Event Player.BotTargetPlayer));
End;
"NEXT NODE IS TARGET (DISTANCE TO TARGET NODE = 1)"
If(Global.DistanceMatrix[Event Player.BotClosestNodeIdToBot][Event Player.BotClosestNodeIdToTarget] == 1);
Log To Inspector(Custom String("PATH FINDING ({0}): NEXT NODE #{1} IS TARGET ", Event Player,
Event Player.BotClosestNodeIdToTarget));
Event Player.BotNextNodeId = Event Player.BotClosestNodeIdToTarget;
"CHECK CONNECTIONS OF REACHED NODE"
Else;
Log To Inspector(Custom String("PATH FINDING ({0}): (BEGIN LOOP) CHECK CONNECTIONS FROM NODE #{1} TO TARGET NODE #{2}",
Event Player, Event Player.BotClosestNodeIdToBot, Event Player.BotClosestNodeIdToTarget));
Event Player.BotShortestDistanceToTarget = 999;
Event Player.BotCurrentDistanceToTarget = Event Player.BotShortestDistanceToTarget;
Event Player.BotTempArray = Global.NodeConnections[Event Player.BotClosestNodeIdToBot];
For Player Variable(Event Player, BotLoopIterator1, 0, Count Of(Event Player.BotTempArray), 1);
Event Player.BotCurrentDistanceToTarget = Global.DistanceMatrix[Event Player.BotTempArray[Event Player.BotLoopIterator1]][Event Player.BotClosestNodeIdToTarget];
Log To Inspector(Custom String("PATH FINDING ({0}): NODE #{1}; DISTANCE TO TARGET = {2}", Event Player,
Event Player.BotTempArray[Event Player.BotLoopIterator1], Event Player.BotCurrentDistanceToTarget));
If(Event Player.BotCurrentDistanceToTarget < Event Player.BotShortestDistanceToTarget);
Event Player.BotShortestDistanceToTarget = Event Player.BotCurrentDistanceToTarget;
Event Player.BotNextNodeId = Event Player.BotTempArray[Event Player.BotLoopIterator1];
Log To Inspector(Custom String("PATH FINDING ({0}): SET NEXT NODE #{1}", Event Player, Event Player.BotNextNodeId));
End;
End;
Log To Inspector(Custom String("PATH FINDING ({0}): (END LOOP) NEXT NODE #{1}, DISTANCE TO TARGET NODE = {2}", Event Player,
Event Player.BotNextNodeId, Event Player.BotShortestDistanceToTarget));
End;
"II. AVAILABILITY CHECKING OF NEXT NODE"
Log To Inspector(Custom String("PATH FINDING ({0}): BEGIN AVAILABILITY CHECKING OF NEXT NODE #{1}", Event Player,
Event Player.BotNextNodeId));
"Y-ORD DIFF BETWEEN BOT POS AND NEXT NODE POS"
Log To Inspector(Custom String("PATH FINDING ({0}): Y-ORD DIFF BETWEEN BOT POS AND NEXT NODE POS = {1}", Event Player,
Y Component Of(Position Of(Event Player)) - Y Component Of(Global.NodePositions[Event Player.BotNextNodeId])));
"NEXT NODE IS HIGHER THAN BOT AND BOT DIDN'T REACH CLOSEST NODE"
If(Y Component Of(Position Of(Event Player)) - Y Component Of(Global.NodePositions[Event Player.BotNextNodeId])
< -3 && Event Player.BotPrevNodeId != Event Player.BotClosestNodeIdToBot);
Log To Inspector(Custom String("PATH FINDING ({0}): NEXT NODE {1} IS HIGHER THAN BOT, SET CLOSEST NODE #{2} TO BOT AS NEXT",
Event Player, Event Player.BotNextNodeId, Event Player.BotClosestNodeIdToBot));
Event Player.BotPrevNodeId = Event Player.BotClosestNodeIdToBot;
Event Player.BotNextNodeId = Event Player.BotClosestNodeIdToBot;
"BOT CAN SEE TARGET POSITION AND NEXT NODE IS TARGET"
Else If(
Global.DistanceMatrix[Event Player.BotClosestNodeIdToBot][Event Player.BotClosestNodeIdToTarget] == 1 && Is In Line of Sight(
Position Of(Event Player) + Vector(0, 1.600, 0), Event Player.BotTargetPosition + Vector(0, 2, 0), Barriers Do Not Block LOS));
Log To Inspector(Custom String(
"PATH FINDING ({0}): CAN SEE TARGET POSITION {1} AND DISTANCE TO TARGET NODE = 1, MOVE TO TARGET POSITION", Event Player,
Event Player.BotTargetPosition));
Event Player.BotNextNodePosition = Event Player.BotTargetPosition;
Abort;
"BOT CAN'T SEE NEXT NODE OR NODE IS LOWER THAN BOT"
disabled Else If(Is In Line of Sight(Position Of(Event Player) + Vector(0, 1.600, 0),
Global.NodePositions[Event Player.BotNextNodeId] + Vector(0, 2, 0), Barriers Do Not Block LOS) == False);
"BOT CAN'T SEE NEXT NODE AND PREV NODE != REACHED NODE"
Else If(Is In Line of Sight(Position Of(Event Player) + Vector(0, 1.600, 0),
Global.NodePositions[Event Player.BotNextNodeId] + Vector(0, 2, 0), Barriers Do Not Block LOS)
== False && Event Player.BotPrevNodeId != Event Player.BotClosestNodeIdToBot);
Log To Inspector(Custom String("PATH FINDING ({0}): CAN'T SEE NODE #{1}, SET CLOSEST NODE #{2} AS NEXT", Event Player,
Event Player.BotNextNodeId, Event Player.BotClosestNodeIdToBot));
Event Player.BotPrevNodeId = Event Player.BotClosestNodeIdToBot;
Event Player.BotNextNodeId = Event Player.BotClosestNodeIdToBot;
End;
Event Player.BotNextNodePosition = Global.NodePositions[Event Player.BotNextNodeId];
Log To Inspector(Custom String("PATH FINDING ({0}): MOVE TO NEXT NODE #{1}", Event Player, Event Player.BotNextNodeId));
Log To Inspector(Custom String("PATH FINDING ({0}): END FIND NEXT NODE", Event Player, Event Player.BotNextNodeId));
}
}
rule("BOT: PATH FINDING - CANCEL")
rule("BOT: PATH FINDING - START")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Has Spawned(Event Player) == True;
Event Player.BotCancelPathFinding == True;
(Event Player.BotTargetPosition != -1 || Event Player.BotTargetPlayer != -1) == True;
}
actions
{
Start Rule(BotResetPathFinding, Restart Rule);
Start Rule(BotStartPathFinding, Restart Rule);
}
}
rule("BOT: PATH FINDING - JUMP")
rule("BOT: PATH FINDING - REACHED THE NODE")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Has Spawned(Event Player) == True;
Event Player.BotIsPathFinding == True;
Is On Ground(Event Player) == True;
Speed Of(Event Player) < 3 * Event Player.BotMoveSpeedMultiplier;
(Event Player.BotClosestNodeIdToTarget >= 0 && Distance Between(Position Of(Event Player), Event Player.BotNextNodePosition)
< 0.850) == True;
}
actions
{
Press Button(Event Player, Button(Jump));
Press Button(Event Player, Button(Melee));
Event Player.BotPrevNodeId = Event Player.BotNextNodeId;
Event Player.BotClosestNodeIdToBot = Event Player.BotNextNodeId;
Event Player.BotCurrentDistanceToTarget = Distance Between(Position Of(Event Player), Event Player.BotTargetPosition);
Log To Inspector(Custom String("PATH FINDING ({0}): REACHED NODE #{1}", Event Player, Event Player.BotNextNodeId));
"BOT REACHED THE TARGET NODE OR TARGET POSITION"
If(Event Player.BotNextNodeId == Event Player.BotClosestNodeIdToTarget || Event Player.BotCurrentDistanceToTarget <= 0.850);
"BOT DIDN'T REACH TARGET POSITION"
If(Event Player.BotCurrentDistanceToTarget > 0.850);
Event Player.BotNextNodePosition = Event Player.BotTargetPosition;
Skip(5);
End;
"BOT REACHED TARGET POSITION"
Call Subroutine(BotResetPathFinding);
Abort;
End;
"CONTINUE FOLLOW PATH"
Call Subroutine(BotGetNextNodeIdAndPosition);
Start Facing(Event Player, Direction Towards(Position Of(Event Player), Event Player.BotNextNodePosition), 360, To World,
Direction and Turn Rate);
Start Throttle In Direction(Event Player, Direction Towards(Position Of(Event Player), Event Player.BotNextNodePosition), 1,
To World, Replace existing throttle, Direction and Magnitude);
}
}
rule("BOT: PATH FINDING - TIMESTAMP TRIGGER")
rule("BOT: PATH FINDING - LOST THE NODE")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Has Spawned(Event Player) == True;
Event Player.BotIsPathFinding == True;
Event Player.BotIsPathFinding == True;
Total Time Elapsed >= Event Player.BotTimestamp;
}
actions
{
Call Subroutine(BotGetTargetNodeAndPosition);
"BOT DIDNT REACH NODE - TRIGGERED TIMESTAMP"
If(Distance Between(Position Of(Event Player), Event Player.BotNextNodePosition) > 1.500);
"RESET CLOSEST NODE ID TO FIND A NEW"
Event Player.BotClosestNodeIdToBot = -1;
"BOT REACHED NODE"
Else;
Event Player.BotPrevNodeId = Event Player.BotNextNodeId;
"REACHED NODE IS NOT TARGET"
If(Event Player.BotNextNodeId != Event Player.BotClosestNodeIdToTarget);
Event Player.BotClosestNodeIdToBot = Event Player.BotNextNodeId;
"REACHED NODE IS TARGET"
Else;
"BUT BOT DIDN'T REACH TARGET POSITION"
If(Distance Between(Position Of(Event Player), Event Player.BotTargetPosition) > (Event Player.BotTargetPlayer != -1 ? 2 : 1.500));
Event Player.BotNextNodePosition = Event Player.BotTargetPosition;
Call Subroutine(BotComputeTimestamp);
Abort;
"BOT REACHED TARGET POSITION"
Else;
If(!Event Player.BotIsFollowTargetConstantly);
Call Subroutine(BotResetPathFinding);
Abort;
"BOT MUST FOLLOW TARGET CONSTANTLY"
Else;
Event Player.BotNextNodePosition = Event Player.BotTargetPosition;
Call Subroutine(BotComputeTimestamp);
Abort;
End;
End;
End;
End;
Call Subroutine(BotGetNextNodeId);
Call Subroutine(BotGetNextPosition);
Call Subroutine(BotComputeTimestamp);
}
}
rule("BOT: DEAD")
{
event
{
Player Died;
All;
All;
}
actions
{
Call Subroutine(BotResetPathFinding);
}
}
rule("SUBROUTINE: BOT - RESET PATH FINDING")
{
event
{
Subroutine;
BotResetPathFinding;
(Is In Line of Sight(Position Of(Event Player) + Vector(0, 1.600, 0), Event Player.BotNextNodePosition + Vector(0, 2.500, 0),
Barriers Do Not Block LOS) == False && Speed Of In Direction(Event Player, Throttle Of(Event Player)) < 2) == True;
}
actions
{
Wait(0.500, Abort When False);
Log To Inspector(Custom String("PATH FINDING ({0}): LOST NEXT NODE FROM SIGHT, BEGIN FIND CLOSEST NODE TO BOT AND NEW NEXT NODE",
Event Player));
"RESET PREV NODE ID TO INFORM BOT THAT IT LOST NEXT NODE"
Event Player.BotPrevNodeId = -1;
Event Player.BotNextNodeId = -1;
Event Player.BotTargetPlayer = -1;
Event Player.BotTargetPosition = -1;
Event Player.BotClosestNodeIdToBot = -1;
Event Player.BotClosestNodeIdToTarget = -1;
Event Player.BotIsPathFinding = False;
Event Player.BotCancelPathFinding = False;
Stop Facing(Event Player);
Stop Throttle In Direction(Event Player);
}
}
rule("SUBROUTINE: BOT - GET TARGET NODE AND POSITION")
{
event
{
Subroutine;
BotGetTargetNodeAndPosition;
}
actions
{
"DONT UPDATE TARGET IF THE TARGET IS A POSITION"
Abort If(Event Player.BotTargetPlayer == -1 && Event Player.BotClosestNodeIdToTarget != -1);
Event Player.BotTargetPosition = Event Player.BotTargetPlayer != -1 ? Position Of(Event Player.BotTargetPlayer)
: Event Player.BotTargetPosition;
Event Player.BotClosestNodeIdToTarget = Index Of Array Value(Global.NodePositions, Sorted Array(Filtered Array(
Global.NodePositions, Is In Line of Sight(Event Player.BotTargetPosition + Vector(0, 0.700, 0), Current Array Element,
Barriers Do Not Block LOS) == True), Distance Between(Event Player.BotTargetPosition, Current Array Element))[0]);
}
}
rule("SUBROUTINE: BOT - GET NEXT NODE ID")
{
event
{
Subroutine;
BotGetNextNodeId;
}
actions
{
Skip If(Event Player.BotClosestNodeIdToBot != -1, 1);
"FIND CLOSEST NODE TO BEGIN PATH FINDING"
Event Player.BotClosestNodeIdToBot = Index Of Array Value(Global.NodePositions, Sorted Array(Filtered Array(Global.NodePositions,
Is In Line of Sight(Position Of(Event Player) + Vector(0, 0.700, 0), Current Array Element, Barriers Do Not Block LOS)
== True), Distance Between(Position Of(Event Player), Current Array Element))[0]);
"CHECK CONNECTIONS OF REACHED NODE"
Log To Inspector(Custom String("PATH FINDING ({0}): (BEGIN LOOP) CHECK CONNECTIONS FROM NODE #{1} TO TARGET NODE #{2}",
Event Player, Event Player.BotClosestNodeIdToBot, Event Player.BotClosestNodeIdToTarget));
Event Player.BotLoopConnectionArray = Global.NodeConnections[Event Player.BotClosestNodeIdToBot];
"CONNECTION ARRAY CONTAINS TARGET NODE ID"
If(Event Player.BotClosestNodeIdToBot == Event Player.BotClosestNodeIdToTarget || Array Contains(
Event Player.BotLoopConnectionArray, Event Player.BotClosestNodeIdToTarget));
Event Player.BotNextNodeId = Event Player.BotClosestNodeIdToTarget;
"CHECK CONNECTIONS OF REACHED NODE"
Log To Inspector(Custom String("PATH FINDING ({0}): (END LOOP) CONNECTION ARRAY CONTAINS TARGET NODE #{2}", Event Player, Null,
Event Player.BotClosestNodeIdToTarget));
Abort;
End;
"REMOVE PREV NODE ID"
Modify Player Variable(Event Player, BotLoopConnectionArray, Remove From Array By Value, Event Player.BotPrevNodeId);
Event Player.BotShortestDistanceToTarget = 999;
Event Player.BotCurrentDistanceToTarget = 999;
Event Player.BotShortestDistanceInMeters = 999;
Event Player.BotCurrentDistanceInMeters = 999;
"FIND NEXT NODE ID"
For Player Variable(Event Player, BotLoopIterator1, 0, Count Of(Event Player.BotLoopConnectionArray), 1);
"OPTIMIZED DISTANCE MATRIX ALGORITHM"
Event Player.BotLoopCurrentNodeId = Event Player.BotLoopConnectionArray[Event Player.BotLoopIterator1];
"LOWER DIAGONAL"
If(Event Player.BotLoopCurrentNodeId > Event Player.BotClosestNodeIdToTarget);
Event Player.BotCurrentDistanceToTarget = Global.DistanceMatrix[Event Player.BotClosestNodeIdToTarget][Event Player.BotLoopCurrentNodeId - Event Player.BotClosestNodeIdToTarget - 1];
Call Subroutine(BotGetRightHandPartOfFloatNumber);
Log To Inspector(Custom String("PATH FINDING ({0}): LOWER DIAGONAL", Event Player,
Event Player.BotLoopConnectionArray[Event Player.BotLoopIterator1], Event Player.BotCurrentDistanceToTarget));
"UPPER DIAGONAL"
Else;
Event Player.BotCurrentDistanceToTarget = Global.DistanceMatrix[Event Player.BotLoopCurrentNodeId][Event Player.BotClosestNodeIdToTarget - Event Player.BotLoopCurrentNodeId - 1];
Log To Inspector(Custom String("PATH FINDING ({0}): UPPER DIAGONAL", Event Player,
Event Player.BotLoopConnectionArray[Event Player.BotLoopIterator1], Event Player.BotCurrentDistanceToTarget));
End;
Log To Inspector(Custom String("PATH FINDING ({0}): NODE #{1}; DISTANCE TO TARGET = {2}", Event Player,
Event Player.BotLoopCurrentNodeId, Event Player.BotCurrentDistanceToTarget));
If(Event Player.BotCurrentDistanceToTarget < Event Player.BotShortestDistanceToTarget);
Event Player.BotShortestDistanceToTarget = Event Player.BotCurrentDistanceToTarget;
Event Player.BotNextNodeId = Event Player.BotLoopCurrentNodeId;
"ONE MORE NODE HAS SAME UNIT DISTANCE TO TARGET"
Else If(Event Player.BotCurrentDistanceToTarget == Event Player.BotShortestDistanceToTarget);
"ONCE CALCULATE DISTANCE FROM NEXT NODE TO TARGET NODE"
If(Event Player.BotShortestDistanceInMeters == 999);
Event Player.BotShortestDistanceInMeters = Distance Between(Global.NodePositions[Event Player.BotNextNodeId],
Event Player.BotTargetPosition);
Log To Inspector(Custom String("PATH FINDING ({0}): DISTANCE (METERS) FROM NODE #{1} TO TARGET: {2}", Event Player,
Event Player.BotNextNodeId, Event Player.BotShortestDistanceInMeters));
End;
Event Player.BotCurrentDistanceInMeters = Distance Between(Global.NodePositions[Event Player.BotLoopCurrentNodeId],
Event Player.BotTargetPosition);
Log To Inspector(Custom String("PATH FINDING ({0}): DISTANCE (METERS) FROM NODE #{1} TO TARGET: {2}", Event Player,
Event Player.BotLoopCurrentNodeId, Event Player.BotCurrentDistanceInMeters));
If(Event Player.BotCurrentDistanceInMeters < Event Player.BotShortestDistanceInMeters);
Event Player.BotShortestDistanceInMeters = Event Player.BotCurrentDistanceInMeters;
Event Player.BotNextNodeId = Event Player.BotLoopCurrentNodeId;
End;
End;
Log To Inspector(Custom String("PATH FINDING ({0}): SET NEXT NODE #{1}", Event Player, Event Player.BotNextNodeId));
End;
Log To Inspector(Custom String("PATH FINDING ({0}): (END LOOP) NEXT NODE #{1}, DISTANCE TO TARGET NODE = {2}", Event Player,
Event Player.BotNextNodeId, Event Player.BotShortestDistanceToTarget));
}
}
rule("SUBROUTINE: BOT - GET NEXT POSITION")
{
event
{
Subroutine;
BotGetNextPosition;
}
actions
{
Event Player.BotNextNodePosition = Global.NodePositions[Event Player.BotNextNodeId];
"NEXT NODE IS TARGET AND BOT CAN SEE TARGET POSITION"
If(Event Player.BotNextNodeId == Event Player.BotClosestNodeIdToTarget && Is In Line of Sight(Position Of(Event Player) + Vector(0,
0.700, 0), Event Player.BotTargetPosition + Vector(0, 0.700, 0), Barriers Do Not Block LOS));
"POSITION OF TARGET NODE IS NOT HIGHER THAN BOT POSITION"
If(Y Component Of(Event Player.BotNextNodePosition) - Y Component Of(Position Of(Event Player)) < 2.100);
"AVERAGE POSITION BETWEEN PRELAST AND LAST POSITION"
Event Player.BotTempVar1 = (Global.NodePositions[Event Player.BotClosestNodeIdToBot] + Event Player.BotTargetPosition + Vector(0,
2, 0)) / 2;
"PIT DETECTION BETWEEN POSITIONS"
If(Distance Between(Event Player.BotTempVar1, Ray Cast Hit Position(Event Player.BotTempVar1, Event Player.BotTempVar1 + Vector(0,
-5, 0), Null, Event Player, False)) < 0.500);
"MOVE TO TARGET POSITION"
Event Player.BotNextNodePosition = Event Player.BotTargetPosition;
Abort;
End;
End;
"2D BOT POSITION"
Event Player.BotTempVar1 = Vector(X Component Of(Position Of(Event Player)), 0, Z Component Of(Position Of(Event Player)));
"TARGET POSITION IS CLOSER THAN NEXT NODE POSITION"
If(Distance Between(Event Player.BotTempVar1, Vector(X Component Of(Event Player.BotTargetPosition), 0, Z Component Of(
Event Player.BotTargetPosition))) < Distance Between(Event Player.BotTempVar1, Vector(X Component Of(
Global.NodePositions[Event Player.BotClosestNodeIdToTarget]), 0, Z Component Of(
Global.NodePositions[Event Player.BotClosestNodeIdToTarget]))));
"MOVE TO TARGET POSITION"
Event Player.BotNextNodePosition = Event Player.BotTargetPosition;
Abort;
End;
"FIRST NODE IN PATH"
Else If(Event Player.BotPrevNodeId == -1);
"BOT CAN'T SEE NEXT NODE POSITION"
If(!Is In Line of Sight(Position Of(Event Player) + Vector(0, 0.700, 0), Event Player.BotNextNodePosition + Vector(0, 0.700, 0),
Barriers Do Not Block LOS));
"MOVE TO CLOSEST NODE TO BOT"
Event Player.BotNextNodeId = Event Player.BotClosestNodeIdToBot;
Event Player.BotNextNodePosition = Global.NodePositions[Event Player.BotNextNodeId];
Abort;
"BOT CAN SEE NEXT NODE POSITION"
Else;
"NEXT NODE IS HIGHER THAN BOT POSITION"
If(Y Component Of(Event Player.BotNextNodePosition) - Y Component Of(Position Of(Event Player)) > 1.300);
"MOVE TO CLOSEST NODE TO BOT"
Event Player.BotNextNodeId = Event Player.BotClosestNodeIdToBot;
Event Player.BotNextNodePosition = Global.NodePositions[Event Player.BotNextNodeId];
End;
End;
End;
}
}
rule("SUBROUTINE: BOT - COMPUTE TIMESTAMP")
{
event
{
Subroutine;
BotComputeTimestamp;
}
actions
{
"COMPUTE PATH TIME TO NEXT NODE"
disabled Event Player.BotTimestamp = Distance Between(Position Of(Event Player), Event Player.BotNextNodePosition) / (
5.400 * Event Player.BotMoveSpeedMultiplier);
"NODE IS HIGHER (NEED MORE TIME FOR JUMPS)"
disabled If(Y Component Of(Event Player.BotNextNodePosition) - Y Component Of(Position Of(Event Player)) > 1);
"COMPUTE PATH TIME TO NEXT NODE (2D DISTANCE)"
disabled Event Player.BotTimestamp = Distance Between(Vector(X Component Of(Position Of(Event Player)), 0, Z Component Of(Position Of(
Event Player))), Vector(X Component Of(Event Player.BotNextNodePosition), 0, Z Component Of(Event Player.BotNextNodePosition)))
/ (4.500 * Event Player.BotMoveSpeedMultiplier);
"NODE IS LOWER"
disabled Else;
"COMPUTE PATH TIME TO NEXT NODE (2D DISTANCE)"
Event Player.BotTimestamp = Distance Between(Vector(X Component Of(Position Of(Event Player)), 0, Z Component Of(Position Of(
Event Player))), Vector(X Component Of(Event Player.BotNextNodePosition), 0, Z Component Of(Event Player.BotNextNodePosition)))
/ (5.400 * Event Player.BotMoveSpeedMultiplier);
disabled End;
Event Player.BotTimestamp = Total Time Elapsed + Event Player.BotTimestamp;
Log To Inspector(Custom String("PATH FINDING ({0}): {2} TIMESTAMP WHEN BOT MUST REACH THE NODE #{1}", Event Player,
Event Player.BotNextNodeId, Event Player.BotTimestamp));
}
}
rule("SUBROUTINE: BOT - GET RIGHT-HAND OF FLOAT NUMBER")
{
event
{
Subroutine;
BotGetRightHandPartOfFloatNumber;
}
actions
{
Log To Inspector(Custom String("PATH FINDING ({0}): RIGHT-HAND OF FLOAT NUMBER, INPUT: {1}", Event Player,
Event Player.BotCurrentDistanceToTarget));
Event Player.BotCurrentDistanceToTarget = Event Player.BotCurrentDistanceToTarget % 1 * 1000;
Log To Inspector(Custom String("PATH FINDING ({0}): RIGHT-HAND OF FLOAT NUMBER, RESULT: {1}", Event Player,
Event Player.BotCurrentDistanceToTarget));
}
}
rule("=== PATH NODE BUILDER QRD5A - EXPORT BLOCK END ===")
{
event
{
Ongoing - Global;
"TRY FIND NEW NEXT NODE"
Call Subroutine(BotGetNextNodeIdAndPosition);
Start Facing(Event Player, Direction Towards(Position Of(Event Player), Event Player.BotNextNodeId), 360, To World,
Direction and Turn Rate);
Start Throttle In Direction(Event Player, Direction Towards(Position Of(Event Player), Event Player.BotNextNodePosition), 1,
To World, Replace existing throttle, Direction and Magnitude);
}
}
disabled rule("=== MOD INIT ===")
disabled rule("=== EXPORT BLOCK END ===")
{
event
{
Ongoing - Global;
}
}
rule("GLOBAL: INIT MOD")
{
event
{
Ongoing - Global;
}
actions
{
Global.OptimizedInspectorRecorder = Workshop Setting Toggle(Custom String("MOD PROPERTIES"), Custom String(
"WRITE INTO INSPECTOR REQUIRED VARS ONLY "), True, 0);
Skip If(!Global.OptimizedInspectorRecorder, 1);
Disable Inspector Recording;
Global.IsBuildingProject = False;
Global.BuilderNodePositions = Empty Array;
Global.BuilderNodeConnections = Empty Array;
Global.BuilderNodeEffectIdArray = Empty Array;
Global.BuilderNodeWorldTextIdArray = Empty Array;
Global.BuilderNodeConnectionEffectsId = Empty Array;
Global.NodeTriggerRadius = 0.850;
Global.BeamEffects = Empty Array;
Global.NodeTriggerRadius = Workshop Setting Real(Custom String("PATH FINDING"), Custom String("NODE TRIGGER RADIUS"), 0.850, 0.500,
1.500, 0);
Global.PropertySpawnRoomIndex = Workshop Setting Combo(Custom String("MOD PROPERTIES"), Custom String("SPAWN ROOM"), 0, Array(
Custom String("1"), Custom String("2"), Custom String("3")), 0);
Global.PropertyFreeCamera = Workshop Setting Toggle(Custom String("MOD PROPERTIES"), Custom String("FREE FLY CAMERA"), True, 1);
Global.PropertyPlayerMovementSpeed = Workshop Setting Integer(Custom String("MOD PROPERTIES"), Custom String(
"PLAYER MOVEMENT SPEED"), 150, 50, 200, 2);
Global.PropertyBotMovementSpeed = Workshop Setting Integer(Custom String("MOD PROPERTIES"), Custom String(
"TEST BOT MOVEMENT SPEED"), 100, 50, 200, 3);
Start Forcing Spawn Room(All Teams, Global.PropertySpawnRoomIndex);
Global.WorkshopSettingShowConnections = Workshop Setting Toggle(Custom String("MOD PROPERTIES"), Custom String(
"SHOW CONNECTION EFFECTS WHEN SELECTED ONLY "), True, 0);
Create HUD Text(All Players(All Teams), Custom String(""), Null, Null, Left, 0, Color(White), Color(White), Color(White),
Visible To and String, Default Visibility);
"VALUES: \"EDIT\" - EDIT EXISTING NODES; \"BUILD\"- CREATE NEW NODES; \"PATH FINDING\" - TEST COMPUTING PATHS"
Global.BuilderMode = Custom String("PATH FINDING");
Global.BuilderHudColorEditMode = Color(Yellow);
Global.BuilderHudColorBuildMode = Color(Red);
Global.BuilderHudColorPathFindingMode = Color(Purple);
Global.PathFindingStartNodeId = -1;
Global.PathFindingTargetNodeId = -1;
"SELECTED NODE EFFECT"
Call Subroutine(BuilderInitModEffects);
If(Global.NodePositions != Null);
Call Subroutine(BuilderBuildPreparedPathNodes);
End;
}
}
rule("GLOBAL: WORKSHOP SETTINGS INSTRUCTION")
{
event
{
Ongoing - Global;
}
actions
{
Global.WorkshopSettingInstructions = Workshop Setting Toggle(Custom String("INSTRUCTIONS - HOW DOES IT WORKS"), Custom String(
"1. PLACE NODES AND CONNECT THEM HOW YOU NEED BY USING BUILDER MODES BELOW"), False, -99);
Global.WorkshopSettingInstructions = Workshop Setting Toggle(Custom String("INSTRUCTIONS - HOW DOES IT WORKS"), Custom String(
" 1.1. BUILD MODE - CREATES AND PLACES NEW NODE IN CROSSHAIR'S POSITION"), False, -98);
Global.WorkshopSettingInstructions = Workshop Setting Toggle(Custom String("INSTRUCTIONS - HOW DOES IT WORKS"), Custom String(
" 1.2. EDIT MODE - SELECTS EXISTING NODE AND ALLOWS CONNECT IT TO OTHER NODES"), False, -97);
Global.WorkshopSettingInstructions = Workshop Setting Toggle(Custom String("INSTRUCTIONS - HOW DOES IT WORKS"), Custom String(
" 1.3. PATH FINDING MODE - SETS START AND TARGET NODES TO TEST ROUTE"), False, -96);
Global.WorkshopSettingInstructions = Workshop Setting Toggle(Custom String("INSTRUCTIONS - HOW DOES IT WORKS"), Custom String(
"2. BUILD YOUR PROJECT WITH WEB APP"), False, -95);
"2. BUILD YOUR PROJECT TO GET EXPORT VARS"), False, -95);
Global.WorkshopSettingInstructions = Workshop Setting Toggle(Custom String("INSTRUCTIONS - HOW DOES IT WORKS"), Custom String(
" 2.1. SWITCH TO BUILD MODE"), False, -94);
Global.WorkshopSettingInstructions = Workshop Setting Toggle(Custom String("INSTRUCTIONS - HOW DOES IT WORKS"), Custom String(
" 2.1. COPY ALL ACTUAL VAR VALUES FROM INSPECTOR ('X' BUTTON)"), False, -94);
" 2.2. HOLD 'INTERACT' BUTTON A FEW SECONDS TO RUN BUILD PROCESS"), False, -93);
Global.WorkshopSettingInstructions = Workshop Setting Toggle(Custom String("INSTRUCTIONS - HOW DOES IT WORKS"), Custom String(
" 2.2. VISIT WEB APP 'PATH NODE BUILDER'"), False, -93);
" 2.3. WAIT WHEN THE PROCESS WILL BE FINISHED"), False, -92);
Global.WorkshopSettingInstructions = Workshop Setting Toggle(Custom String("INSTRUCTIONS - HOW DOES IT WORKS"), Custom String(
" 2.3. PASTE COPIED VALUES IN FIRST FORM"), False, -92);
" 2.3. OPEN WORKSHOP INSPECTOR AT LAST POSITION AND SELECT 'VARIABLE TARGET' = GLOBAL"), False, -91);
Global.WorkshopSettingInstructions = Workshop Setting Toggle(Custom String("INSTRUCTIONS - HOW DOES IT WORKS"), Custom String(
" 2.3. PRESS BUTTON 'COMPUTE DISTANCE MATRIX'"), False, -91);
" 2.4. CLICK (X) BUTTON TO COPY VALUES OF VARS TO CLIPBOARD AND PASTE IT IN ANY TEXT EDITOR"), False, -90);
Global.WorkshopSettingInstructions = Workshop Setting Toggle(Custom String("INSTRUCTIONS - HOW DOES IT WORKS"), Custom String(
" 2.4. PRESS BUTTON 'COPY TO CLIPBOARD'"), False, -90);
" 2.5 DELETE ALL VARS AND ACTIONS EXCEPT NEXT"), False, -89);
Global.WorkshopSettingInstructions = Workshop Setting Toggle(Custom String("INSTRUCTIONS - HOW DOES IT WORKS"), Custom String(
" Global.NodePositions, Global.NodeConnections, Global.DistanceMatrix"), False, -88);
Global.WorkshopSettingInstructions = Workshop Setting Toggle(Custom String("INSTRUCTIONS - HOW DOES IT WORKS"), Custom String(
" 2.6 COPY ALL LINES FROM TEXT EDITOR INTO CLIPBOARD"), False, -87);
Global.WorkshopSettingInstructions = Workshop Setting Toggle(Custom String("INSTRUCTIONS - HOW DOES IT WORKS"), Custom String(
"3. CREATE NEW MAP RULE INSIDE OF 'EXPORT BLOCK' AND PASTE COPIED VALUES FROM CLIPBOARD"), False, -86);
Global.WorkshopSettingInstructions = Workshop Setting Toggle(Custom String("INSTRUCTIONS - HOW DOES IT WORKS"), Custom String(
"4. COPY ALL RULES INSIDE OF 'EXPORT BLOCK' AND PUT THEM IN YOUR GAME MODE"), False, -85);
Global.WorkshopSettingInstructions = Workshop Setting Toggle(Custom String("INSTRUCTIONS - HOW DOES IT WORKS"), Custom String(
"5. PROFIT!"), False, -84);
}
}
rule("SUBROUTINE: INIT MOD EFFECTS")
{
event
{
Subroutine;
BuilderInitModEffects;
}
actions
{
"SELECTED NODE EFFECT"
Global.BuilderSelectedNodeEffectPos = Vector(0, -999, 0);
Create Effect(All Players(All Teams), Sphere, Global.BuilderHudColorEditMode, Global.BuilderSelectedNodeEffectPos,
Global.NodeTriggerRadius, Visible To Position and Radius);
"PATH FINDING EFFECTS"
Global.PathFindingStartNodeEffectPos = Vector(0, -999, 0);
Global.PathFindingTargetNodeEffectPos = Vector(0, -999, 0);
Create Effect(All Players(All Teams), Light Shaft, Global.BuilderHudColorPathFindingMode, Global.PathFindingStartNodeEffectPos,
Global.NodeTriggerRadius, Visible To Position and Radius);
Create Effect(All Players(All Teams), Light Shaft, Global.BuilderHudColorPathFindingMode, Global.PathFindingTargetNodeEffectPos,
Global.NodeTriggerRadius, Visible To Position and Radius);
}
}
disabled rule("=== PLAYER ===")
{
event
{
Ongoing - Global;
}
}
rule("PLAYER: INIT")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == False;
Host Player == True;
Has Spawned(Event Player) == True;
}
actions
{
Start Forcing Player To Be Hero(Event Player, Hero(Zenyatta));
Disable Movement Collision With Environment(Event Player, False);
Call Subroutine(BuilderSwitchMode);
disabled Disable Text Chat(Event Player);
disabled Disable Hero HUD(Event Player);
Disable Game Mode HUD(Event Player);
Set Ability 1 Enabled(Event Player, False);
Set Ability 2 Enabled(Event Player, False);
Set Primary Fire Enabled(Event Player, False);
Set Secondary Fire Enabled(Event Player, False);
Set Ultimate Ability Enabled(Event Player, False);
Set Move Speed(Event Player, Global.PropertyPlayerMovementSpeed);
Set Status(Event Player, Null, Phased Out, 9999);
If(Global.PropertyFreeCamera == True);
Set Gravity(Event Player, 0);
Start Accelerating(Event Player, Velocity Of(Event Player) * -1, Speed Of(Event Player) * 2, 10, To World,
Direction Rate and Max Speed);
Set Move Speed(Event Player, Global.PropertyPlayerMovementSpeed * 1.300);
End;
}
}
rule("PLAYER: FREE CAMERA")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.PropertyFreeCamera == True;
Host Player == True;
Has Spawned(Event Player) == True;
(Is Button Held(Event Player, Button(Jump)) || Is Button Held(Event Player, Button(Crouch))) == True;
}
actions
{
If(Is Button Held(Event Player, Button(Jump)));
Apply Impulse(Event Player, Up, 0.640, To World, Incorporate Contrary Motion);
Wait(False, Ignore Condition);
Loop If Condition Is True;
Else If(Is Button Held(Event Player, Button(Crouch)));
Apply Impulse(Event Player, Down, 0.640, To World, Incorporate Contrary Motion);
Wait(False, Ignore Condition);
Loop If Condition Is True;
End;
}
}
rule("PLAYER: SWITCH BUILDER MODE")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == False;
Host Player == True;
Has Spawned(Event Player) == True;
Global.IsBuildingProject == False;
Is Button Held(Event Player, Button(Reload)) == True;
}
actions
{
Call Subroutine(BuilderSwitchMode);
}
}
rule("SUBROUTINE: SWITCH MODE")
{
event
{
Subroutine;
BuilderSwitchMode;
}
actions
{
Destroy HUD Text(Event Player.BuilderModeInfoHudId);
If(Global.BuilderMode == Custom String("PATH FINDING"));
Global.BuilderMode = Custom String("BUILD");
Call Subroutine(PathFindingModeReset);
Global.BuilderHudColorCurrent = Global.BuilderHudColorBuildMode;
Create HUD Text(All Players(All Teams), Custom String("[{0}] - MODE: {1}\r\n{2}", Input Binding String(Button(Reload)),
Global.BuilderMode, Custom String("{0} - CREATE NODE", Input Binding String(Button(Primary Fire)))), Null, Null, Left, -999,
Global.BuilderHudColorCurrent, Color(White), Color(White), Visible To and String, Default Visibility);
Global.BuilderMode, Custom String("HOLD {1} - BUILD PROJECT\r\n{0} - CREATE NODE", Input Binding String(Button(Primary Fire)),
Input Binding String(Button(Interact)))), Null, Null, Left, -999, Global.BuilderHudColorCurrent, Color(White), Color(White),
Visible To and String, Default Visibility);
Else If(Global.BuilderMode == Custom String("BUILD"));
Global.BuilderMode = Custom String("EDIT");
Global.BuilderHudColorCurrent = Global.BuilderHudColorEditMode;
Create HUD Text(All Players(All Teams), Custom String("[{0}] - MODE: {1}\r\n{2}", Input Binding String(Button(Reload)),
Global.BuilderMode, Custom String("SELECTED NODE - {0}\r\n{1} - SELECT\r\n{2}",
Global.BuilderSelectedNodeId < 0 ? Custom String("NONE") : Global.BuilderSelectedNodeId, Input Binding String(Button(
Primary Fire)), Custom String("{0} - CONNECT/DISCONNECT\r\n{1} - DELETE", Input Binding String(Button(Secondary Fire)),
Input Binding String(Button(Interact))))), Null, Null, Left, -999, Global.BuilderHudColorCurrent, Color(White), Color(White),
Visible To and String, Default Visibility);
Else If(Global.BuilderMode == Custom String("EDIT"));
Global.BuilderMode = Custom String("PATH FINDING");
Call Subroutine(DeleteNodeBeams);
Global.BuilderHudColorCurrent = Global.BuilderHudColorPathFindingMode;
Create HUD Text(All Players(All Teams), Custom String("[{0}] - MODE: {1}\r\n{2}", Input Binding String(Button(Reload)),
Global.BuilderMode, Custom String("{0} - SET START POS (CLOSEST NODE {1})\r\n{2}", Input Binding String(Button(Primary Fire)),
Global.PathFindingStartNodeId, Custom String("{0} - SET TARGET POS (CLOSEST NODE {1})\r\n{2}", Input Binding String(Button(
Secondary Fire)), Global.PathFindingTargetNodeId, Custom String("{0} - TEST WITH BOT\r\n{1} - BOOP BOT", Input Binding String(
Button(Ultimate)), Input Binding String(Button(Interact)))))), Null, Null, Left, -999, Global.BuilderHudColorCurrent, Color(
White), Color(White), Visible To and String, Default Visibility);
End;
Event Player.BuilderModeInfoHudId = Last Text ID;
Global.BuilderSelectedNodeEffectPos = Vector(0, -999, 0);
Global.BuilderSelectedNodeId = -1;
}
}
rule("SUBROUTINE: GET CLOSSEST NODE ID TO CURSOR")
{
event
{
Subroutine;
BuilderGetClossestNodeIdToCursor;
}
actions
{
"ANY NODE IN LINE OF SIGHT"
Global.BuilderTrySelectNodeInLOS = Filtered Array(Global.BuilderNodePositions, Current Array Element != False && Dot Product(
Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Current Array Element))
>= 0.990 && Is In Line of Sight(Eye Position(Event Player), Current Array Element, Barriers Do Not Block LOS));
If(Global.BuilderTrySelectNodeInLOS != Empty Array);
Global.BuilderTrySelectNodeInLOS = Index Of Array Value(Global.BuilderNodePositions, Global.BuilderTrySelectNodeInLOS[0]);
Else;
Global.BuilderTrySelectNodeInLOS = -1;
End;
}
}
disabled rule("=== EDIT MODE ===")
{
event
{
Ongoing - Global;
}
}
rule("PLAYER: EDIT MODE")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == False;
Host Player == True;
Has Spawned(Event Player) == True;
(Is Button Held(Event Player, Button(Primary Fire)) || Is Button Held(Event Player, Button(Secondary Fire)) || Is Button Held(
Event Player, Button(Interact))) == True;
Global.BuilderMode == Custom String("EDIT");
}
actions
{
"ANY NODE IN LINE OF SIGHT"
Call Subroutine(BuilderGetClossestNodeIdToCursor);
"SELECT NODE"
If(Is Button Held(Event Player, Button(Primary Fire)));
Call Subroutine(BuilderEditModeSelectNode);
"CONNECT/DISCONNECT NODE"
Else If(Is Button Held(Event Player, Button(Secondary Fire)) && Global.BuilderSelectedNodeId != -1);
Call Subroutine(BuilderConnectDisconnectSelector);
"DELETE NODE"
Else If(Is Button Held(Event Player, Button(Interact)) && Global.BuilderSelectedNodeId != -1);
Call Subroutine(BuilderEditModeDeleteNode);
End;
}
}
rule("SUBROUTINE: SELECT NODE")
{
event
{
Subroutine;
BuilderEditModeSelectNode;
}
actions
{
If(Global.BuilderTrySelectNodeInLOS != -1);
Global.BuilderSelectedNodeEffectPos = Global.BuilderNodePositions[Global.BuilderTrySelectNodeInLOS];
Else;
Global.BuilderSelectedNodeEffectPos = Vector(0, -999, 0);
Call Subroutine(DeleteNodeBeams);
End;
Global.BuilderSelectedNodeId = Global.BuilderTrySelectNodeInLOS;
Call Subroutine(DeleteNodeBeams);
"DRAW CONNECTED BEAMS"
If(Count Of(Global.BuilderNodeConnections[Global.BuilderSelectedNodeId]) > 0);
Call Subroutine(CreateNodeBeams);
End;
}
}
rule("SUBROUTINE: DELETE NODE")
{
event
{
Subroutine;
BuilderEditModeDeleteNode;
}
actions
{
If(Global.BuilderTrySelectNodeInLOS == -1 || Global.BuilderTrySelectNodeInLOS != Global.BuilderSelectedNodeId);
Small Message(All Players(All Teams), Custom String("LOOK AT NODE {0} TO DELETE IT", Global.BuilderSelectedNodeId));
Abort;
End;
Small Message(All Players(All Teams), Custom String("NODE DELETED"));
Call Subroutine(DeleteNodeBeams);
Play Effect(Event Player, Debuff Impact Sound, Color(White), Event Player, 60);
Destroy Effect(Global.BuilderNodeEffectIdArray[Global.BuilderSelectedNodeId]);
Destroy In-World Text(Global.BuilderNodeWorldTextIdArray[Global.BuilderSelectedNodeId]);
Skip If(!Global.OptimizedInspectorRecorder, 1);
Enable Inspector Recording;
Global.BuilderNodePositions[Global.BuilderTrySelectNodeInLOS] = False;
Skip If(!Global.OptimizedInspectorRecorder, 1);
Disable Inspector Recording;
Global.BuilderSelectedNodeEffectPos = Vector(0, -999, 0);
Call Subroutine(BuilderDeleteConnectionsOfNode);
Global.BuilderSelectedNodeId = -1;
}
}
rule("SUBROUTINE: DELETE ALL CONNECTIONS OF DELETED NODE")
{
event
{
Subroutine;
BuilderDeleteConnectionsOfNode;
}
actions
{
"DELETE ALL CONNECTIONS OF THE DELETED NODE"
For Global Variable(LoopIterator1, 0, Count Of(Global.BuilderNodeConnections[Global.BuilderSelectedNodeId]), 1);
Destroy Effect(
Global.BuilderNodeConnectionEffectsId[Global.BuilderSelectedNodeId][Global.BuilderNodeConnections[Global.BuilderSelectedNodeId][Global.LoopIterator1]]);
End;
"CHECK OTHER NODES FOR CONNECTION WITH DELETED NODE"
For Global Variable(LoopIterator1, 0, Count Of(Global.BuilderNodePositions), 1);
disabled Global.BuilderTrySelectNodeInLOS = Global.BuilderNodeConnections[Global.LoopIterator1][Global.LoopIterator2];
If(Array Contains(Global.BuilderNodeConnections[Global.LoopIterator1], Global.BuilderSelectedNodeId));
"DELETE BEAM EFFECT"
Destroy Effect(Global.BuilderNodeConnectionEffectsId[Global.LoopIterator1][Global.BuilderSelectedNodeId]);
Global.BuilderInnerArray = Global.BuilderNodeConnectionEffectsId[Global.LoopIterator1];
Global.BuilderInnerArray[Global.BuilderSelectedNodeId] = False;
Global.BuilderNodeConnectionEffectsId[Global.LoopIterator1] = Global.BuilderInnerArray;
"REMOVE DELETED NODE FROM CONNECTION ARRAY"
Global.BuilderInnerArray = Global.BuilderNodeConnections[Global.LoopIterator1];
Modify Global Variable(BuilderInnerArray, Remove From Array By Value, Global.BuilderSelectedNodeId);
Global.BuilderNodeConnections[Global.LoopIterator1] = Global.BuilderInnerArray;
"UPDATE IN-WORLD TEXT OF NODE"
Global.StringConcatNodeId = Global.LoopIterator1;
Call Subroutine(BuilderConcatStringConnections);
End;
End;
Skip If(!Global.OptimizedInspectorRecorder, 1);
Enable Inspector Recording;
Global.BuilderNodeConnections[Global.BuilderSelectedNodeId] = False;
Skip If(!Global.OptimizedInspectorRecorder, 1);
Disable Inspector Recording;
Global.BuilderNodeConnectionEffectsId[Global.BuilderSelectedNodeId] = False;
}
}
rule("SUBROUTINE: CONNECT DISCONNECT SELECTOR")
{
event
{
Subroutine;
BuilderConnectDisconnectSelector;
}
actions
{
If(
Global.BuilderSelectedNodeId == -1 || Global.BuilderTrySelectNodeInLOS == -1 || Global.BuilderSelectedNodeId == Global.BuilderTrySelectNodeInLOS);
Small Message(All Players(All Teams), Custom String("LOOK AT OTHER NODE TO CONNECT/DISCONNECT IT"));
Abort;
End;
Global.BuilderIsNodeHaveConnection = Array Contains(Global.BuilderNodeConnections[Global.BuilderSelectedNodeId],
Global.BuilderTrySelectNodeInLOS);
If(!Global.BuilderIsNodeHaveConnection);
Small Message(All Players(All Teams), Custom String("NODE CONNECTED"));
Call Subroutine(BuilderConnectNodeBackendLogic);
Call Subroutine(DeleteNodeBeams);
Call Subroutine(CreateNodeBeams);
Else;
Small Message(All Players(All Teams), Custom String("NODE DISCONNECTED"));
Call Subroutine(BuilderDisconnectNode);
Call Subroutine(DeleteNodeBeams);
Call Subroutine(CreateNodeBeams);
End;
"UPDATE IN-WORLD TEXT OF CONNECTED NODE"
Global.StringConcatNodeId = Global.BuilderSelectedNodeId;
Call Subroutine(BuilderConcatStringConnections);
}
}
rule("SUBROUTINE: CONNECT NODE (BACK-END LOGIC)")
{
event
{
Subroutine;
BuilderConnectNodeBackendLogic;
}
actions
{
"GET CONNECTION ARRAY FOR SELECTED NODE AND ADD NEW CONNECTION"
If(Count Of(Global.BuilderNodeConnections[Global.BuilderSelectedNodeId]) > 0);
Global.BuilderInnerArray = Global.BuilderNodeConnections[Global.BuilderSelectedNodeId];
Modify Global Variable(BuilderInnerArray, Append To Array, Global.BuilderTrySelectNodeInLOS);
"OR CREATE NEW CONNECTION ARRAY FOR SELECTED NODE"
Else;
Global.BuilderInnerArray = Empty Array;
Global.BuilderInnerArray[0] = Global.BuilderTrySelectNodeInLOS;
End;
Skip If(!Global.OptimizedInspectorRecorder, 1);
Enable Inspector Recording;
"ADD CONNECTION ARRAY OF SELECTED NODE IN MATRIX 2X2 OF ALL CONNECTIONS"
Global.BuilderNodeConnections[Global.BuilderSelectedNodeId] = Global.BuilderInnerArray;
Skip If(!Global.OptimizedInspectorRecorder, 1);
Disable Inspector Recording;
Play Effect(All Players(All Teams), Buff Impact Sound, Color(White), Event Player, 60);
Call Subroutine(BuilderConnectNodeBeamEffect);
}
}
rule("SUBROUTINE: CONNECT NODE (BEAM EFFECT)")
{
event
{
Subroutine;
BuilderConnectNodeBeamEffect;
}
actions
{
Abort If(Global.WorkshopSettingShowConnections);
"'BEAM' EFFECT IS EXIST BETWEEN THESE NODES"
Abort If(Entity Exists(Global.BuilderNodeConnectionEffectsId[Global.BuilderTrySelectNodeInLOS][Global.BuilderSelectedNodeId]));
Abort If(Entity Exists(Global.BuilderNodeConnectionEffectsId[Global.BuilderSelectedNodeId][Global.BuilderTrySelectNodeInLOS]));
"VISUAL EFFECT OF CONNECTION"
Create Beam Effect(All Players(All Teams), Grapple Beam, Global.BuilderNodePositions[Global.BuilderSelectedNodeId],
Global.BuilderNodePositions[Global.BuilderTrySelectNodeInLOS], Color(White), Visible To);
"ARRAY LIKE HASH MAP (KEY : VALUE) - KEY - INDEX OF NODE, VALUE - EFFECT ID"
If(Count Of(Global.BuilderNodeConnectionEffectsId[Global.BuilderSelectedNodeId]) > 0);
Global.BuilderInnerArray = Global.BuilderNodeConnectionEffectsId[Global.BuilderSelectedNodeId];
Else;
Global.BuilderInnerArray = Empty Array;
End;
Global.BuilderInnerArray[Global.BuilderTrySelectNodeInLOS] = Last Created Entity;
"ADD BEAM EFFECT ARRAY IN MATRIX 2X2 OF ALL CONNECTION EFFECTS"
Global.BuilderNodeConnectionEffectsId[Global.BuilderSelectedNodeId] = Global.BuilderInnerArray;
}
}
rule("SUBROUTINE: DISCONNECT NODE")
{
event
{
Subroutine;
BuilderDisconnectNode;
}
actions
{
Play Effect(Event Player, Debuff Impact Sound, Color(White), Event Player, 60);
"GET CONNECTION ARRAY FOR SELECTED NODE"
Global.BuilderInnerArray = Global.BuilderNodeConnections[Global.BuilderSelectedNodeId];
Modify Global Variable(BuilderInnerArray, Remove From Array By Value, Global.BuilderTrySelectNodeInLOS);
"REMOVE CONNECTION ARRAY OF SELECTED NODE IN MATRIX 2X2 OF ALL CONNECTIONS"
Global.BuilderNodeConnections[Global.BuilderSelectedNodeId] = Global.BuilderInnerArray;
"DESTROY BEAM EFFECT"
Abort If(Array Contains(Global.BuilderNodeConnections[Global.BuilderTrySelectNodeInLOS], Global.BuilderSelectedNodeId));
Destroy Effect(Global.BuilderNodeConnectionEffectsId[Global.BuilderSelectedNodeId][Global.BuilderTrySelectNodeInLOS]);
Destroy Effect(Global.BuilderNodeConnectionEffectsId[Global.BuilderTrySelectNodeInLOS][Global.BuilderSelectedNodeId]);
Global.BuilderInnerArray = Global.BuilderNodeConnectionEffectsId[Global.BuilderSelectedNodeId];
Global.BuilderInnerArray[Global.BuilderTrySelectNodeInLOS] = Null;
Global.BuilderNodeConnectionEffectsId[Global.BuilderSelectedNodeId] = Global.BuilderInnerArray;
Global.BuilderInnerArray = Global.BuilderNodeConnectionEffectsId[Global.BuilderTrySelectNodeInLOS];
Global.BuilderInnerArray[Global.BuilderSelectedNodeId] = Null;
Skip If(!Global.OptimizedInspectorRecorder, 1);
Enable Inspector Recording;
Global.BuilderNodeConnectionEffectsId[Global.BuilderTrySelectNodeInLOS] = Global.BuilderInnerArray;
Skip If(!Global.OptimizedInspectorRecorder, 1);
Disable Inspector Recording;
}
}
rule("SUBROUTINE: CONCAT STRING CONNECTIONS")
{
event
{
Subroutine;
BuilderConcatStringConnections;
}
actions
{
Destroy In-World Text(Global.BuilderNodeWorldTextIdArray[Global.StringConcatNodeId]);
Global.StringConcatCountOfElements = Count Of(Global.BuilderNodeConnections[Global.StringConcatNodeId]);
If(Global.StringConcatCountOfElements > 0);
For Global Variable(LoopIterator3, 0, Global.StringConcatCountOfElements, 1);
"FIRST ELEMENT"
If(Global.LoopIterator3 == 0);
Global.StringConcatResult = Custom String("{1}", Null,
Global.BuilderNodeConnections[Global.StringConcatNodeId][Global.LoopIterator3]);
"ADD \",\" SYMBOL BETWEEN ELEMENTS"
Else;
Global.StringConcatResult = Custom String("{0}{2}{1}", Global.StringConcatResult,
Global.BuilderNodeConnections[Global.StringConcatNodeId][Global.LoopIterator3],
Global.LoopIterator3 != Global.StringConcatCountOfElements ? Custom String(", ") : Custom String(" "));
End;
End;
Create In-World Text(All Players(All Teams), Custom String("NODE {0}\r\n[ {1} ]", Global.StringConcatNodeId,
Global.StringConcatResult), Global.BuilderNodePositions[Global.StringConcatNodeId], 1.200, Do Not Clip, Visible To, Color(
White), Default Visibility);
Else;
Create In-World Text(All Players(All Teams), Custom String("NODE {0}", Global.StringConcatNodeId),
Global.BuilderNodePositions[Global.StringConcatNodeId], 1.300, Do Not Clip, Visible To, Color(White), Default Visibility);
End;
Global.BuilderNodeWorldTextIdArray[Global.StringConcatNodeId] = Last Text ID;
}
}
disabled rule("=== BUILD MODE ===")
{
event
{
Ongoing - Global;
}
}
rule("PLAYER: BUILD MODE")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == False;
Host Player == True;
Has Spawned(Event Player) == True;
(Is Button Held(Event Player, Button(Primary Fire)) || Is Button Held(Event Player, Button(Interact))) == True;
Global.BuilderMode == Custom String("BUILD");
}
actions
{
"CREATE NEW NODE"
If(Is Button Held(Event Player, Button(Primary Fire)));
Call Subroutine(BuilderBuildModeCreateNewNode);
"OPTIMIZE DATA"
disabled Else If(Is Button Held(Event Player, Button(Interact)));
disabled Create Progress Bar HUD Text(Event Player, Global.BuilderProgressBarValue, Custom String("PREPARING TO BUILD PROJECT"), Top, 1,
"OPTIMIZE DATA"
Else If(Is Button Held(Event Player, Button(Interact)));
Create Progress Bar HUD Text(Event Player, Global.BuilderProgressBarValue, Custom String("PREPARING TO BUILD PROJECT"), Top, 1,
Global.BuilderHudColorBuildMode, Global.BuilderHudColorBuildMode, Visible To and Values, Default Visibility);
disabled Global.BuilderProgressBarValue = 0;
disabled Chase Global Variable Over Time(BuilderProgressBarValue, 100, 2, Destination and Duration);
Global.BuilderProgressBarValue = 0;
Chase Global Variable Over Time(BuilderProgressBarValue, 100, 2, Destination and Duration);
"HOLD BUTTON N SEC TO BEGIN PROCESS"
disabled While(Global.BuilderProgressBarValue != 100);
disabled Wait(0.100, Ignore Condition);
disabled If(Is Button Held(Event Player, Button(Interact)) == False);
disabled Destroy All Progress Bar HUD Text;
disabled Abort;
disabled End;
disabled End;
While(Global.BuilderProgressBarValue != 100);
Wait(0.100, Ignore Condition);
If(Is Button Held(Event Player, Button(Interact)) == False);
Destroy All Progress Bar HUD Text;
Abort;
End;
End;
"RUN BUILD PROJECT"
disabled Destroy All Progress Bar HUD Text;
disabled Call Subroutine(BuilderBuildProject);
Destroy All Progress Bar HUD Text;
Call Subroutine(BuilderBuildProject);
End;
}
}
rule("SUBROUTINE: CREATE NEW NODE")
{
event
{
Subroutine;
BuilderBuildModeCreateNewNode;
}
actions
{
Global.BuilderRayCastHitPosition = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player)
+ Facing Direction Of(Event Player) * 1000, Null, Event Player, False);
"NODE'S OFFSET"
Global.BuilderRayCastHitPosition += Ray Cast Hit Normal(Eye Position(Event Player), Eye Position(Event Player)
+ Facing Direction Of(Event Player) * 999, Null, Event Player, False) * (Global.NodeTriggerRadius / 2);
"OTHER NODE IS VERY CLOSE"
If(Is True For Any(Filtered Array(Global.BuilderNodePositions, Current Array Element != False), Distance Between(
Current Array Element, Global.BuilderRayCastHitPosition) < Global.NodeTriggerRadius * 3));
Small Message(Event Player, Custom String("OTHER NODE VERY CLOSE!"));
Abort;
End;
Skip If(!Global.OptimizedInspectorRecorder, 1);
Enable Inspector Recording;
"CREATE NEW NODE"
Modify Global Variable(BuilderNodePositions, Append To Array, Global.BuilderRayCastHitPosition);
Global.BuilderInnerArray = Empty Array;
Global.BuilderNodeConnections[Index Of Array Value(Global.BuilderNodePositions, Global.BuilderRayCastHitPosition)
] = Global.BuilderInnerArray;
Skip If(!Global.OptimizedInspectorRecorder, 1);
Disable Inspector Recording;
Create Effect(All Players(All Teams), Sphere, Color(Red), Global.BuilderRayCastHitPosition, Global.NodeTriggerRadius, Visible To);
Modify Global Variable(BuilderNodeEffectIdArray, Append To Array, Last Created Entity);
Create In-World Text(All Players(All Teams), Custom String("NODE {0}", Index Of Array Value(Global.BuilderNodePositions,
Global.BuilderRayCastHitPosition)), Global.BuilderRayCastHitPosition, 1.300, Do Not Clip, Visible To, Color(White),
Default Visibility);
Modify Global Variable(BuilderNodeWorldTextIdArray, Append To Array, Last Text ID);
Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 60);
}
}
disabled rule("=== BUILD COMPUTED IN WEB-APP PATH ===")
disabled rule("=== BUILD PROJECT ===")
{
event
{
Ongoing - Global;
}
}
rule("SUBROUTINE: BUILD PROJECT")
{
event
{
Subroutine;
BuilderBuildProject;
}
actions
{
Global.IsBuildingProject = True;
Call Subroutine(BuilderDeleteAllEffects);
Call Subroutine(BuilderOptimizeData);
Wait(0.050, Ignore Condition);
"SELECTED NODE EFFECT"
Call Subroutine(BuilderInitModEffects);
Wait(0.050, Ignore Condition);
Call Subroutine(BuilderBuildPreparedPathNodes);
Call Subroutine(BuilderComputeDistanceMatrix);
Global.IsBuildingProject = False;
}
}
rule("SUBROUTINE: DELETE ALL EFFECTS")
{
event
{
Subroutine;
BuilderDeleteAllEffects;
}
actions
{
Destroy All Effects;
Destroy All In-World Text;
}
}
rule("SUBROUTINE: OPTIMIZE DATA")
{
event
{
Subroutine;
BuilderOptimizeData;
}
actions
{
Destroy All Progress Bar HUD Text;
Global.BuilderProgressBarValue = 0;
Create Progress Bar HUD Text(Event Player, Global.BuilderProgressBarValue, Custom String("OPTIMIZING DATA"), Top, 1, Color(Green),
Color(Green), Visible To and Values, Default Visibility);
Global.BuilderProgressBarValueStep = 100 / Count Of(Global.BuilderNodePositions);
Global.NodePositions = Empty Array;
Global.DistanceMatrix = Empty Array;
Global.NodeConnections = Empty Array;
Global.BuildProjectEmptySpace = 0;
Global.BuildProjectOldElementIndex = 0;
Global.BuildProjectNewElementIndex = 0;
For Global Variable(LoopIterator1, 0, Count Of(Global.BuilderNodePositions), 1);
Global.BuilderProgressBarValue += Global.BuilderProgressBarValueStep;
"SKIP DELETED NODE (ACCUMULATE SPACE BETWEEN INDEXES)"
If(Global.BuilderNodePositions[Global.LoopIterator1] == False);
Global.BuildProjectEmptySpace += 1;
Continue;
End;
Global.BuildProjectOldElementIndex = Global.LoopIterator1;
Global.BuildProjectNewElementIndex = Global.BuildProjectEmptySpace == 0 ? Global.LoopIterator1 : Global.LoopIterator1 - Global.BuildProjectEmptySpace;
"CONNECTIONS OF CURRENT NODE"
Global.BuilderInnerArray = Global.BuilderNodeConnections[Global.BuildProjectOldElementIndex];
Global.NodeConnections[Global.BuildProjectNewElementIndex] = Global.BuilderInnerArray;
Modify Global Variable(NodePositions, Append To Array, Global.BuilderNodePositions[Global.BuildProjectOldElementIndex]);
"UPDATE INDEXES IN CONNECTION ARRAY"
If(Global.BuildProjectEmptySpace > 0 && Count Of(Global.NodeConnections) > 1);
Call Subroutine(BuilderUpdateConnectionIndexes);
End;
"ANTI-CRASH DELAY"
Wait(0.020, Ignore Condition);
End;
Destroy All Progress Bar HUD Text;
}
}
rule("SUBROUTINE: UPDATE CONNECTION INDEXES")
{
event
{
Subroutine;
BuilderUpdateConnectionIndexes;
}
actions
{
"UPDATE CONNECTION INDEXES IN FINAL (OPTIMIZED) ARRAY"
For Global Variable(LoopIterator2, 0, Count Of(Global.NodeConnections), 1);
Global.BuilderInnerArray = Global.NodeConnections[Global.LoopIterator2];
For Global Variable(LoopIterator3, 0, Count Of(Global.BuilderInnerArray), 1);
If(Global.BuilderInnerArray[Global.LoopIterator3] == Global.BuildProjectOldElementIndex);
Global.BuilderInnerArray[Global.LoopIterator3] = Global.BuildProjectNewElementIndex;
End;
End;
"ANTI-CRASH DELAY"
Wait(0.050, Ignore Condition);
"WRITE ONLY RESULT INTO INSPECTOR"
Enable Inspector Recording;
Global.NodeConnections[Global.LoopIterator2] = Global.BuilderInnerArray;
"DISABLE INSPECTOR WHILE COMPILING (WRITE RESULT ONLY)"
Skip If(!Global.OptimizedInspectorRecorder, 1);
Disable Inspector Recording;
End;
"UPDATE NEXT CONNECTION INDEXES IN INPUT ARRAY"
For Global Variable(LoopIterator2, Global.LoopIterator1 + 1, Count Of(Global.BuilderNodeConnections), 1);
Global.BuilderInnerArray = Global.BuilderNodeConnections[Global.LoopIterator2];
For Global Variable(LoopIterator3, 0, Count Of(Global.BuilderInnerArray), 1);
If(Global.BuilderInnerArray[Global.LoopIterator3] == Global.BuildProjectOldElementIndex);
Global.BuilderInnerArray[Global.LoopIterator3] = Global.BuildProjectNewElementIndex;
End;
End;
"ANTI-CRASH DELAY"
Wait(0.050, Ignore Condition);
"WRITE ONLY RESULT INTO INSPECTOR"
Enable Inspector Recording;
Global.BuilderNodeConnections[Global.LoopIterator2] = Global.BuilderInnerArray;
"DISABLE INSPECTOR WHILE COMPILING (WRITE RESULT ONLY)"
Skip If(!Global.OptimizedInspectorRecorder, 1);
Disable Inspector Recording;
End;
}
}
rule("SUBROUTINE: BUILD PREPARED PATH NODES")
{
event
{
Subroutine;
BuilderBuildPreparedPathNodes;
}
actions
{
Abort If(Count Of(Global.NodePositions) == 0);
Global.BuilderNodeEffectIdArray = Empty Array;
Global.BuilderNodeWorldTextIdArray = Empty Array;
Global.BuilderNodeConnectionEffectsId = Empty Array;
Skip If(!Global.OptimizedInspectorRecorder, 1);
Enable Inspector Recording;
Global.BuilderNodePositions = Global.NodePositions;
Global.BuilderNodeConnections = Empty Array;
Skip If(!Global.OptimizedInspectorRecorder, 1);
Disable Inspector Recording;
"CREATE NODE EFFECTS"
For Global Variable(LoopIterator1, 0, Count Of(Global.NodePositions), 1);
Create Effect(All Players(All Teams), Sphere, Color(Purple), Global.NodePositions[Global.LoopIterator1], Global.NodeTriggerRadius,
Create Effect(All Players(All Teams), Sphere, Color(Red), Global.NodePositions[Global.LoopIterator1], Global.NodeTriggerRadius,
Visible To);
Modify Global Variable(BuilderNodeEffectIdArray, Append To Array, Last Created Entity);
End;
Wait(0.100, Ignore Condition);
Wait(0.050, Ignore Condition);
"COPY FROM NodeConnections TO BuilderNodeConnections"
For Global Variable(LoopIterator1, 0, Count Of(Global.NodeConnections), 1);
Global.BuilderInnerArray = Global.NodeConnections[Global.LoopIterator1];
Skip If(!Global.OptimizedInspectorRecorder, 1);
Enable Inspector Recording;
Global.BuilderNodeConnections[Global.LoopIterator1] = Global.BuilderInnerArray;
Skip If(!Global.OptimizedInspectorRecorder, 1);
Disable Inspector Recording;
End;
"ANTI-CRASH DELAY"
Wait(0.100, Ignore Condition);
Wait(0.030, Ignore Condition);
"CREATE BEAM EFFECTS (CONNECTIONS)"
For Global Variable(LoopIterator1, 0, Count Of(Global.BuilderNodeConnections), 1);
Global.BuilderSelectedNodeId = Global.LoopIterator1;
For Global Variable(LoopIterator2, 0, Count Of(Global.BuilderNodeConnections[Global.LoopIterator1]), 1);
Global.BuilderTrySelectNodeInLOS = Global.BuilderNodeConnections[Global.LoopIterator1][Global.LoopIterator2];
Call Subroutine(BuilderConnectNodeBeamEffect);
End;
End;
"ANTI-CRASH DELAY"
Wait(0.060, Ignore Condition);
Wait(0.030, Ignore Condition);
"CREATE NODE WORLD TEXTS"
For Global Variable(LoopIterator1, 0, Count Of(Global.NodeConnections), 1);
"UPDATE IN-WORLD TEXT OF CONNECTED NODE"
Global.StringConcatNodeId = Global.LoopIterator1;
Call Subroutine(BuilderConcatStringConnections);
End;
"ANTI-CRASH DELAY"
Wait(0.060, Ignore Condition);
Wait(0.030, Ignore Condition);
}
}
rule("SUBROUTINE: COMPUTE DISTANCE MATRIX")
{
event
{
Subroutine;
BuilderComputeDistanceMatrix;
}
actions
{
"INIT PROGRESS BAR"
Destroy All Progress Bar HUD Text;
Create Progress Bar HUD Text(All Players(All Teams), Global.BuilderProgressBarValue, Custom String("COMPUTING DISTANCE MATRIX..."),
Top, 1, Color(Purple), Color(Purple), Visible To and Values, Default Visibility);
Global.BuilderProgressBarValue = 0;
Global.BuilderProgressBarValueStep = 100 / Count Of(Global.NodeConnections);
"INIT DISTANCE MATRIX"
Global.DistanceMatrix[Count Of(Global.NodeConnections) - 1] = 0;
"CALCULATE ALL DISTANCES FOR EACH NODE"
For Global Variable(BuildProjectStartNodeId, 0, Count Of(Global.NodeConnections), 1);
"ALL DISTANCES FROM START NODE TO OTHERS"
Global.BuilderInnerArray = Empty Array;
Global.BuilderInnerArray[0] = 0;
"CLEAR QUEUE AND VISITED ARRAYES FOR EACH NODE"
Global.BuildProjectQueueArray = Empty Array;
Global.BuildProjectVisitedNodes = Empty Array;
"PUT THE START NODE IN QUEUE AND MAKE IT VISITED"
Modify Global Variable(BuildProjectQueueArray, Append To Array, Global.BuildProjectStartNodeId);
Modify Global Variable(BuildProjectVisitedNodes, Append To Array, Global.BuildProjectStartNodeId);
"VISIT ALL NODES"
While(Count Of(Global.BuildProjectQueueArray) > 0);
"POP FIRST NODE FROM QUEUE"
Global.BuildProjectCurrentNodeId = Global.BuildProjectQueueArray[0];
Modify Global Variable(BuildProjectQueueArray, Remove From Array By Index, 0);
"VISIT NEIGHBOR NODES"
For Global Variable(LoopIterator1, 0, Count Of(Global.NodeConnections[Global.BuildProjectCurrentNodeId]), 1);
Global.BuildProjectNeighborNodeId = Global.NodeConnections[Global.BuildProjectCurrentNodeId][Global.LoopIterator1];
If(!Array Contains(Global.BuildProjectVisitedNodes, Global.BuildProjectNeighborNodeId));
"ADD NEIGHBOR IN QUEUE AND MARK IT AS VISITED"
Modify Global Variable(BuildProjectQueueArray, Append To Array, Global.BuildProjectNeighborNodeId);
Modify Global Variable(BuildProjectVisitedNodes, Append To Array, Global.BuildProjectNeighborNodeId);
"ACCUMULATE DISTANCE TO NEIGHBOR"
Global.BuilderInnerArray[Global.BuildProjectNeighborNodeId] = Global.BuilderInnerArray[Global.BuildProjectCurrentNodeId] + 1;
End;
End;
"ANTI-CRASH DELAY"
Wait(0.016, Ignore Condition);
End;
"REPLACE ZERO TO INF (9999)"
Global.BuilderInnerArray[Global.BuildProjectStartNodeId] = 9999;
"ADD RESULT IN DISTANCE MATRIX"
Global.DistanceMatrix[Global.BuildProjectStartNodeId] = Global.BuilderInnerArray;
Global.BuilderProgressBarValue += Global.BuilderProgressBarValueStep;
End;
Destroy All Progress Bar HUD Text;
}
}
disabled rule("=== PATH FINDING MODE ===")
{
event
{
Ongoing - Global;
}
}
rule("PLAYER: PATH FINDING MODE")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == False;
Host Player == True;
Has Spawned(Event Player) == True;
(Is Button Held(Event Player, Button(Primary Fire)) || Is Button Held(Event Player, Button(Secondary Fire)) || Is Button Held(
Event Player, Button(Ultimate)) || Is Button Held(Event Player, Button(Interact))) == True;
Global.BuilderMode == Custom String("PATH FINDING");
}
actions
{
"SET START OR TARGET NODE"
If(Is Button Held(Event Player, Button(Primary Fire)) || Is Button Held(Event Player, Button(Secondary Fire)));
Call Subroutine(PathFindingModeSelectNode);
"CREATE TEST BOT"
Else If(Is Button Held(Event Player, Button(Ultimate)));
If(Global.PathFindingStartNodeId != -1 && Global.PathFindingTargetNodeId != -1);
Call Subroutine(PathFindingCreateBot);
End;
"BOOP TEST BOT"
Else If(Is Button Held(Event Player, Button(Interact)));
Apply Impulse(Global.PathFindingBotId, Vector(X Component Of(Facing Direction Of(Event Player)), 0.200, Z Component Of(
Facing Direction Of(Event Player))), 20, To World, Cancel Contrary Motion);
End;
}
}
rule("SUBROUTINE: PATH FINDING SELECT NODE")
{
event
{
Subroutine;
PathFindingModeSelectNode;
}
actions
{
disabled Abort If(Global.BuilderTrySelectNodeInLOS == -1);
Global.BuilderRayCastHitPosition = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player)
+ Facing Direction Of(Event Player) * 999, Null, Event Player, False);
"SET START NODE"
If(Is Button Held(Event Player, Button(Primary Fire)));
Global.PathFindingStartNodeId = Index Of Array Value(Global.NodePositions, Sorted Array(Filtered Array(Global.NodePositions,
Is In Line of Sight(Global.BuilderRayCastHitPosition + Vector(0, 2, 0), Current Array Element, Barriers Do Not Block LOS)
== True), Distance Between(Global.BuilderRayCastHitPosition, Current Array Element))[0]);
Global.PathFindingStartPosition = Global.BuilderRayCastHitPosition;
Global.PathFindingStartNodeEffectPos = Global.PathFindingStartPosition;
"SET TARGET NODE"
Else If(Is Button Held(Event Player, Button(Secondary Fire)));
Global.PathFindingTargetNodeId = Index Of Array Value(Global.NodePositions, Sorted Array(Filtered Array(Global.NodePositions,
Is In Line of Sight(Global.BuilderRayCastHitPosition + Vector(0, 2, 0), Current Array Element, Barriers Do Not Block LOS)
== True), Distance Between(Global.BuilderRayCastHitPosition, Current Array Element))[0]);
Global.PathFindingTargetPosition = Global.BuilderRayCastHitPosition;
Global.PathFindingTargetNodeEffectPos = Global.PathFindingTargetPosition;
End;
"DRAW PATH"
If(Global.PathFindingStartNodeId != -1 && Global.PathFindingTargetNodeId != -1);
disabled Call Subroutine(DeleteNodeBeams);
Call Subroutine(PathFindingDrawShortestPath);
disabled Call Subroutine(CreateNodeBeams);
Call Subroutine(PathFindingGetShortestPath);
Call Subroutine(DeleteNodeBeams);
Call Subroutine(CreateNodeBeams);
"CLEAR PATH"
Else If(Global.PathFindingStartNodeId == -1 || Global.PathFindingTargetNodeId == -1);
Call Subroutine(DeleteNodeBeams);
End;
}
}
disabled rule("SUBROUTINE: PATH FINDING SELECT NODE !!!OLD")
{
event
{
Subroutine;
PathFindingModeSelectNode;
}
actions
{
disabled Abort If(Global.BuilderTrySelectNodeInLOS == -1);
"SET START NODE"
If(Is Button Held(Event Player, Button(Primary Fire)));
Global.PathFindingStartPosition = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player)
+ Facing Direction Of(Event Player) * 999, Null, Event Player, False);
Global.PathFindingStartNodeId = Global.BuilderTrySelectNodeInLOS;
"BIND EFFECT TO NODE"
disabled Global.PathFindingStartNodeEffectPos = Global.NodePositions[Global.BuilderTrySelectNodeInLOS];
"BIND EFFECT TO RAY CAST POS"
Global.PathFindingStartNodeEffectPos = Global.PathFindingStartPosition;
If(Global.PathFindingStartNodeId == Global.PathFindingTargetNodeId);
Global.PathFindingTargetNodeId = -1;
Global.PathFindingTargetNodeEffectPos = Vector(0, -999, 0);
End;
"SET TARGET NODE"
Else If(Is Button Held(Event Player, Button(Secondary Fire)));
Global.PathFindingTargetPosition = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player)
+ Facing Direction Of(Event Player) * 999, Null, Event Player, False);
Global.PathFindingTargetNodeId = Global.BuilderTrySelectNodeInLOS;
"BIND EFFECT TO NODE"
disabled Global.PathFindingTargetNodeEffectPos = Global.NodePositions[Global.BuilderTrySelectNodeInLOS];
"BIND EFFECT TO RAY CAST POS"
Global.PathFindingTargetNodeEffectPos = Global.PathFindingTargetPosition;
If(Global.PathFindingTargetNodeId == Global.PathFindingStartNodeId);
Global.PathFindingStartNodeId = -1;
Global.PathFindingStartNodeEffectPos = Vector(0, -999, 0);
End;
End;
"DRAW PATH"
If(Global.PathFindingStartNodeId != -1 && Global.PathFindingTargetNodeId != -1);
Call Subroutine(PathFindingGetShortestPath);
Call Subroutine(DeleteNodeBeams);
Call Subroutine(CreateNodeBeams);
"CLEAR PATH"
Else If(Global.PathFindingStartNodeId == -1 || Global.PathFindingTargetNodeId == -1);
Call Subroutine(DeleteNodeBeams);
End;
}
}
rule("SUBROUTINE: PATH FINDING MODE RESET")
{
event
{
Subroutine;
PathFindingModeReset;
}
actions
{
Global.PathFindingStartNodeId = -1;
Global.PathFindingTargetNodeId = -1;
Global.PathFindingStartNodeEffectPos = Vector(0, -999, 0);
Global.PathFindingTargetNodeEffectPos = Vector(0, -999, 0);
Call Subroutine(DeleteNodeBeams);
}
}
rule("SUBROUTINE: DELETE NODE BEAM EFFECTS")
{
event
{
Subroutine;
DeleteNodeBeams;
}
actions
{
If(Count Of(Global.BeamEffects) > 0);
For Global Variable(LoopIterator1, 0, Count Of(Global.BeamEffects), 1);
Destroy Effect(Global.BeamEffects[Global.LoopIterator1]);
End;
Global.BeamEffects = Empty Array;
End;
}
}
rule("SUBROUTINE: CREATE NODE BEAM EFFECTS")
{
event
{
Subroutine;
CreateNodeBeams;
}
actions
{
If(Global.BuilderMode == Custom String("PATH FINDING"));
disabled For Global Variable(LoopIterator1, 0, Count Of(Global.PathFindingNextNodeId) - 1, 1);
disabled Create Beam Effect(All Players(All Teams), Bad Beam, Global.NodePositions[Global.PathFindingNextNodeId[Global.LoopIterator1]],
Global.NodePositions[Global.PathFindingNextNodeId[Global.LoopIterator1 + 1]], Global.BuilderHudColorCurrent, Visible To);
disabled Modify Global Variable(BeamEffects, Append To Array, Last Created Entity);
disabled End;
For Global Variable(LoopIterator1, 0, Count Of(Global.PathFindingResultPath) - 1, 1);
Create Beam Effect(All Players(All Teams), Bad Beam, Global.NodePositions[Global.PathFindingResultPath[Global.LoopIterator1]],
Global.NodePositions[Global.PathFindingResultPath[Global.LoopIterator1 + 1]], Global.BuilderHudColorCurrent, Visible To);
Modify Global Variable(BeamEffects, Append To Array, Last Created Entity);
End;
Else If(Global.BuilderMode == Custom String("EDIT"));
For Global Variable(LoopIterator1, 0, Count Of(Global.BuilderNodeConnections[Global.BuilderSelectedNodeId]), 1);
Create Beam Effect(All Players(All Teams), Good Beam, Global.BuilderNodePositions[Global.BuilderSelectedNodeId],
Global.BuilderNodePositions[Global.BuilderNodeConnections[Global.BuilderSelectedNodeId][Global.LoopIterator1]],
Global.BuilderHudColorEditMode, Visible To);
Modify Global Variable(BeamEffects, Append To Array, Last Created Entity);
End;
End;
}
}
disabled rule("SUBROUTINE: PATH FINDING DRAW SHORTEST PATH (MAYBE I WILL REPAIR THIS FEATURE IN NEXT UPDATES, BUT NOW ITS BROKEN)")
rule("SUBROUTINE: PATH FINDING GET SHORTEST PATH")
{
event
{
Subroutine;
PathFindingDrawShortestPath;
PathFindingGetShortestPath;
}
actions
{
Call Subroutine(DeleteNodeBeams);
Global.BeamEffects = Empty Array;
Create Beam Effect(All Players(All Teams), Good Beam, Global.PathFindingStartNodeEffectPos,
Global.NodePositions[Global.PathFindingStartNodeId], Color(Purple), Visible To);
Modify Global Variable(BeamEffects, Append To Array, Last Created Entity);
Call Subroutine(BotResetPathFinding);
Global.PathFindingResultPath = Empty Array;
Global.BuildProjectVisitedNodes = Empty Array;
Global.PathFindingCurrentNodeId = Global.PathFindingStartNodeId;
Event Player.BotClosestNodeIdToBot = Global.PathFindingStartNodeId;
Event Player.BotClosestNodeIdToTarget = Global.PathFindingTargetNodeId;
While(Global.PathFindingCurrentNodeId != Event Player.BotClosestNodeIdToTarget);
Event Player.BotPrevNodeId = Global.PathFindingCurrentNodeId;
Call Subroutine(BotGetNextNodeId);
Create Beam Effect(All Players(All Teams), Good Beam, Global.NodePositions[Global.PathFindingCurrentNodeId],
Global.NodePositions[Event Player.BotNextNodeId], Color(Purple), Visible To);
Modify Global Variable(BeamEffects, Append To Array, Last Created Entity);
Global.PathFindingCurrentNodeId = Event Player.BotNextNodeId;
Event Player.BotClosestNodeIdToBot = Event Player.BotNextNodeId;
While(Global.PathFindingCurrentNodeId != Global.PathFindingTargetNodeId);
Modify Global Variable(PathFindingResultPath, Append To Array, Global.PathFindingCurrentNodeId);
Global.PathFindingShortestDistance = 999;
Global.BuilderInnerArray = Global.NodeConnections[Global.PathFindingCurrentNodeId];
For Global Variable(LoopIterator1, 0, Count Of(Global.BuilderInnerArray), 1);
If(Array Contains(Global.PathFindingResultPath, Global.BuilderInnerArray[Global.LoopIterator1]));
Continue;
Else If(Global.BuilderInnerArray[Global.LoopIterator1] == Global.PathFindingTargetNodeId);
Modify Global Variable(PathFindingResultPath, Append To Array, Global.PathFindingTargetNodeId);
Global.PathFindingCurrentNodeId = Global.PathFindingTargetNodeId;
Break;
End;
Global.PathFindingCurrentDistance = Global.DistanceMatrix[Global.BuilderInnerArray[Global.LoopIterator1]][Global.PathFindingTargetNodeId];
If(Global.PathFindingCurrentDistance < Global.PathFindingShortestDistance);
Global.PathFindingShortestDistance = Global.PathFindingCurrentDistance;
Global.PathFindingCurrentNodeId = Global.BuilderInnerArray[Global.LoopIterator1];
End;
End;
"IMPOSSIBLE TO REACH TARGET NODE"
If(Count Of(Global.PathFindingResultPath) > 1 && Global.PathFindingResultPath[Count Of(Global.PathFindingResultPath)
- 1] == Global.PathFindingResultPath[Count Of(Global.PathFindingResultPath) - 2]);
Small Message(All Players(All Teams), Custom String("IMPOSSIBLE TO REACH TARGET NODE {0}", Global.PathFindingTargetNodeId));
Global.PathFindingResultPath = Empty Array;
Abort;
End;
"ANTI-CRASH DELAY"
Wait(0.020, Ignore Condition);
Wait(0.016, Ignore Condition);
End;
Create Beam Effect(All Players(All Teams), Good Beam, Global.NodePositions[Event Player.BotClosestNodeIdToTarget],
Global.PathFindingTargetNodeEffectPos, Color(Purple), Visible To);
Modify Global Variable(BeamEffects, Append To Array, Last Created Entity);
}
}
rule("SUBROUTINE: PATH FINDING CREATE BOT")
rule("SUBROUTINE: PATH FINDING CREATE TEST BOT")
{
event
{
Subroutine;
PathFindingCreateBot;
}
actions
{
If(!Entity Exists(Global.PathFindingBotId));
Create Dummy Bot(Random Value In Array(All Heroes), Opposite Team Of(Team Of(Event Player)), -1, Global.PathFindingStartPosition,
Vector(0, 0, 0));
Global.PathFindingBotId = Last Created Entity;
Set Move Speed(Global.PathFindingBotId, Global.PropertyBotMovementSpeed);
Start Forcing Dummy Bot Name(Global.PathFindingBotId, Custom String("TEST BOT"));
Else;
Start Forcing Player To Be Hero(Global.PathFindingBotId, Random Value In Array(All Heroes));
Teleport(Global.PathFindingBotId, Global.PathFindingStartPosition);
End;
Call Subroutine(PathFindingTestBotReset);
"ANTI-BUG DELAY"
Wait(0.200, Ignore Condition);
Wait(0.100, Ignore Condition);
Global.PathFindingBotId.BotTargetPosition = Global.PathFindingTargetPosition;
"FOLLOW PLAYER CONSTANTLY"
disabled Global.PathFindingBotId.BotTargetPlayer = Event Player;
disabled Global.PathFindingBotId.BotIsFollowTargetConstantly = True;
}
}
disabled rule("=== TEST BOT ===")
{
event
{
Ongoing - Global;
}
}
rule("BOT: INIT")
{
event
{
Player Joined Match;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == True;
}
actions
{
Call Subroutine(BotResetPathFinding);
"LINE OF SIGHT TO NEXT NODE"
Create Beam Effect(All Players(All Teams), Good Beam, Update Every Frame(Position Of(Event Player) + Vector(0, 0.700, 0)),
Update Every Frame(Event Player.BotNextNodePosition + Vector(0, 0.700, 0)), Color(Green), Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Green), Event Player.BotNextNodePosition + Vector(0, 0.700, 0), 0.150,
Visible To Position and Radius);
"PIT DETECTOR"
Create Beam Effect(All Players(All Teams), Bad Beam, Event Player.BotTempVar1[0], Ray Cast Hit Position(
Event Player.BotTempVar1[0], Event Player.BotTempVar1[0] + Vector(0, -5, 0), Null, Event Player, False), Color(Orange),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Bad Beam, Event Player.BotTempVar1[1], Ray Cast Hit Position(
Event Player.BotTempVar1[1], Event Player.BotTempVar1[1] + Vector(0, -5, 0), Null, Event Player, False), Color(Orange),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Good Beam, Update Every Frame(Position Of(Event Player) + Vector(0, 1.600, 0)),
Update Every Frame(Event Player.BotNextNodePosition + Vector(0, 2, 0)), Color(Green), Visible To Position and Radius);
"Y DIFF BETWEEN BOT POS AND NODE POS"
Create Beam Effect(All Players(All Teams), Good Beam, Update Every Frame(Position Of(Event Player)), Update Every Frame(
Position Of(Event Player) + Vector(0, 2, 0)), Color(Red), Visible To Position and Radius);
Create HUD Text(All Players(All Teams), Custom String("TEST BOT INFO\r\nCLOSEST NODE: {0}\r\nCLOSEST NODE IN LOS: {1}\r\n{2}",
Index Of Array Value(Global.NodePositions, Sorted Array(Global.NodePositions, Distance Between(Position Of(Event Player),
Current Array Element))[0]), Index Of Array Value(Global.NodePositions, Sorted Array(Filtered Array(Global.NodePositions,
Is In Line of Sight(Eye Position(Event Player), Current Array Element, Barriers Do Not Block LOS) == True), Distance Between(
Position Of(Event Player), Current Array Element))[0]), Custom String("PREV NODE {0}\r\nNEXT NODE {1}\r\n{2}",
Global.PathFindingBotId.BotTimestamp, Global.PathFindingBotId.BotNextNodeId, Custom String(
Global.PathFindingBotId.BotPrevNodeId, Global.PathFindingBotId.BotNextNodeId, Custom String(
"TARGET NODE {0}\r\nY DIFF {1}\r\nSEE NEXT NODE {2}", Event Player.BotClosestNodeIdToTarget, Y Component Of(Position Of(
Event Player)) - Y Component Of(Global.NodePositions[Event Player.BotNextNodeId]), Is In Line of Sight(Position Of(
Event Player) + Vector(0, 1.600, 0), Global.NodePositions[Event Player.BotNextNodeId] + Vector(0, 2, 0),
Barriers Do Not Block LOS)))), Null, Null, Right, -1, Color(Purple), Color(White), Color(White), Visible To and String,
Default Visibility);
}
}
rule("SUBROUTINE: TEST BOT RESET")
{
event
{
Subroutine;
PathFindingTestBotReset;
}
actions
{
Global.PathFindingBotId.BotPrevNodeId = -1;
Global.PathFindingBotId.BotNextNodeId = -1;
Global.PathFindingBotId.BotTargetPlayer = -1;
Global.PathFindingBotId.BotTargetPosition = -1;
Global.PathFindingBotId.BotClosestNodeIdToBot = -1;
Global.PathFindingBotId.BotPrevNodeId = -1;
Global.PathFindingBotId.BotClosestNodeIdToTarget = -1;
Global.PathFindingBotId.BotNextNodeId = -1;
Global.PathFindingBotId.BotNextNodePosition = -1;
Global.PathFindingBotId.BotIsPathFinding = False;
Global.PathFindingBotId.BotCancelPathFinding = False;
Stop Facing(Global.PathFindingBotId);
Stop Throttle In Direction(Global.PathFindingBotId);
}
}