Create
Return to post

Comparing difference between and

View raw
  • settings
  • {
  • main
  • {
  • Description: "Path node builder v1.2 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"
  • }
  • 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
  • {
  • enabled maps
  • {
  • }
  • }
  • Escort
  • {
  • enabled maps
  • {
  • }
  • }
  • Hybrid
  • {
  • enabled maps
  • {
  • }
  • }
  • Team Deathmatch
  • {
  • enabled maps
  • {
  • Workshop Expanse
  • }
  • }
  • 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
  • {
  • Quick Melee: Off
  • 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
  • }
  • 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: PathFindingResultPath
  • 44: PathFindingShortestDistance
  • 45: PathFindingCurrentDistance
  • 43: PathFindingNextNodeId
  • 46: PathFindingCurrentNodeId
  • 47: PathFindingBotId
  • 48: NodeTriggerRadius
  • 49: PathFindingStartPosition
  • 50: PathFindingTargetPosition
  • 51: OptimizedInspectorRecorder
  • 52: WorkshopSettingShowConnections
  • 125: NodePositions
  • 126: NodeConnections
  • 127: DistanceMatrix
  • player:
  • 0: BuilderModeInfoHudId
  • 119: BotLoopIterator1
  • 120: BotTempArray
  • 121: BotTargetPlayer
  • 122: BotTargetPosition
  • 123: BotTargetNodeId
  • 124: BotCurrentNodeId
  • 125: BotCurrentDistance
  • 126: BotShortestDistance
  • 109: BotTempVar1
  • 110: BotLoopCurrentNodeId
  • 111: BotCurrentDistanceInMeters
  • 112: BotShortestDistanceInMeters
  • 113: BotPrevNodeId
  • 114: BotMoveSpeedMultiplier
  • 115: BotCancelPathFinding
  • 116: BotLoopIterator1
  • 117: BotLoopConnectionArray
  • 118: BotTargetPlayer
  • 119: BotTargetPosition
  • 120: BotClosestNodeIdToTarget
  • 121: BotClosestNodeIdToBot
  • 122: BotTimestamp
  • 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: PathFindingGetShortestPath
  • 22: PathFindingDrawShortestPath
  • 23: PathFindingCreateBot
  • 24: PathFindingResetBot
  • 124: BotGetCurrentNodeId
  • 125: BotGetTargetNodeId
  • 126: BotGetNextNodeId
  • 127: BotResetPathFinding
  • 24: PathFindingTestBotReset
  • 122: BotResetPathFinding
  • 123: BotGetTargetNodeAndPosition
  • 124: BotGetNextNodeId
  • 125: BotGetNextPosition
  • 126: BotComputeTimestamp
  • 127: BotGetRightHandPartOfFloatNumber
  • }
  • 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("PATH NODES BUILDER V{0} BY HUKUTA94#2589", 0.630), Right, -1000,
  • Color(White), Color(White), Color(White), Visible To, Default Visibility);
  • 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.2 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);
  • }
  • }
  • disabled rule("=== EXPORT BLOCK START - COPY THESE RULES AND SUBROUTINES INTO YOUR MODE ===")
  • rule("=== PATH NODE BUILDER - EXPORT BLOCK START - COPY THESE RULES AND SUBROUTINES INTO YOUR MODE ===")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("MAP: WORKSHOP CHAMBER")
  • rule("MAP: AYUTTHAYA")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Current Map == Map(Workshop Chamber);
  • Current Map == Map(Ayutthaya);
  • }
  • actions
  • {
  • 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));
  • 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: WORKSHOP ISLAND")
  • rule("MAP: MALEVENTO (NODE POSITIONS)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Current Map == Map(Workshop Island);
  • Current Map == Map(Malevento);
  • }
  • 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(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));
  • 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));
  • }
  • }
  • rule("MAP: HAVANA")
  • rule("MAP: MALEVENTO (NODE CONNECTIONS)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Current Map == Map(Havana);
  • Current Map == Map(Malevento);
  • }
  • actions
  • {
  • Global.NodePositions = Array(Vector(126.542, 12.733, -63.277), 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(99.937,
  • 2.983, -67.099), Vector(113.039, 7.424, -37.337), Vector(106.552, 0.149, -53.045), Vector(120.953, 13.171, -58.443), 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));
  • Global.NodeConnections = Array(Array(7, 3, 6, 28), Array(5, 8, 27), Array(3, 9, 6, 10), Array(4, 7, 2, 6, 9, 10), Array(3, 5),
  • Array(4, 6, 1), Array(5, 3, 8, 10, 9, 2), Array(3, 0), Array(1, 6, 10, 26, 29), Array(10, 11, 2, 6, 3, 14, 17), Array(6, 8, 9,
  • 2, 3, 17), Array(9, 12), Array(11, 9, 13), Array(12, 10), Array(9, 16), Array(16, 18), Array(14, 15, 18), Array(9, 15), Array(
  • 15, 21, 27), Array(23, 31, 39), Array(22, 32), Array(18, 24, 30, 29, 33), Array(20, 30, 21, 33, 29), Array(19), Array(25, 21,
  • 29, 30, 34, 35, 38), Array(24, 27, 33, 34, 35, 37), Array(8, 18, 15), Array(18, 25), Array(0, 3, 6, 1), Array(24, 21, 8, 18,
  • 25, 30), Array(21, 24, 29, 32, 33), Array(19, 33, 34, 25, 35, 36), Array(30, 20, 31), Array(31, 30, 24, 25, 21, 34, 35), Array(
  • 33, 24, 25, 35), Array(25, 24, 34, 33, 36, 38), Array(37, 35, 38), Array(36, 25), Array(36, 35, 34, 24, 39, 41), Array(38, 19,
  • 40), Array(39, 38), Array(38), Array());
  • Global.DistanceMatrix = Array(Array(9999, 2, 2, 1, 2, 2, 1, 1, 2, 2, 2, 3, 4, 5, 3, 4, 4, 3, 4, 7, 6, 4, 7, 8, 4, 4, 3, 3, 1, 3, 4,
  • 6, 5, 5, 5, 5, 6, 5, 5, 6, 7, 6), Array(5, 9999, 3, 3, 2, 1, 2, 4, 1, 3, 2, 4, 5, 6, 4, 3, 4, 3, 2, 5, 5, 3, 6, 6, 3, 2, 2, 1,
  • 6, 2, 3, 4, 4, 3, 3, 3, 4, 3, 4, 5, 6, 5), Array(3, 3, 9999, 1, 2, 2, 1, 2, 2, 1, 1, 2, 3, 4, 2, 3, 3, 2, 4, 7, 6, 4, 7, 8, 4,
  • 4, 3, 4, 4, 3, 4, 6, 5, 5, 5, 5, 6, 5, 5, 6, 7, 6), Array(2, 3, 1, 9999, 1, 2, 1, 1, 2, 1, 1, 2, 3, 4, 2, 3, 3, 2, 4, 7, 6, 4,
  • 7, 8, 4, 4, 3, 4, 3, 3, 4, 6, 5, 5, 5, 5, 6, 5, 5, 6, 7, 6), Array(3, 2, 2, 1, 9999, 1, 2, 2, 3, 2, 2, 3, 4, 5, 3, 4, 4, 3, 4,
  • 7, 7, 5, 8, 8, 5, 4, 4, 3, 4, 4, 5, 6, 6, 5, 5, 5, 6, 5, 6, 7, 8, 7), Array(4, 1, 2, 2, 1, 9999, 1, 3, 2, 2, 2, 3, 4, 5, 3, 4,
  • 4, 3, 3, 6, 6, 4, 7, 7, 4, 3, 3, 2, 5, 3, 4, 5, 5, 4, 4, 4, 5, 4, 5, 6, 7, 6), Array(3, 2, 1, 1, 2, 1, 9999, 2, 1, 1, 1, 2, 3,
  • 4, 2, 3, 3, 2, 3, 6, 5, 3, 6, 7, 3, 3, 2, 3, 4, 2, 3, 5, 4, 4, 4, 4, 5, 4, 4, 5, 6, 5), Array(1, 3, 2, 1, 2, 3, 2, 9999, 3, 2,
  • 2, 3, 4, 5, 3, 4, 4, 3, 5, 8, 7, 5, 8, 9, 5, 5, 4, 4, 2, 4, 5, 7, 6, 6, 6, 6, 7, 6, 6, 7, 8, 7), Array(4, 1, 2, 2, 3, 2, 1, 3,
  • 9999, 2, 1, 3, 4, 5, 3, 2, 3, 2, 2, 5, 4, 2, 5, 6, 2, 2, 1, 2, 5, 1, 2, 4, 3, 3, 3, 3, 4, 3, 3, 4, 5, 4), Array(3, 3, 1, 1, 2,
  • 2, 1, 2, 2, 9999, 1, 1, 2, 3, 1, 2, 2, 1, 3, 7, 6, 4, 7, 8, 4, 4, 3, 4, 4, 3, 4, 6, 5, 5, 5, 5, 6, 5, 5, 6, 7, 6), Array(3, 2,
  • 1, 1, 2, 2, 1, 2, 1, 1, 9999, 2, 3, 4, 2, 2, 3, 1, 3, 6, 5, 3, 6, 7, 3, 3, 2, 3, 4, 2, 3, 5, 4, 4, 4, 4, 5, 4, 4, 5, 6, 5),
  • Array(4, 4, 2, 2, 3, 3, 2, 3, 3, 1, 2, 9999, 1, 2, 2, 3, 3, 2, 4, 8, 7, 5, 8, 9, 5, 5, 4, 5, 5, 4, 5, 7, 6, 6, 6, 6, 7, 6, 6,
  • 7, 8, 7), Array(4, 4, 2, 2, 3, 3, 2, 3, 3, 1, 2, 1, 9999, 1, 2, 3, 3, 2, 4, 8, 7, 5, 8, 9, 5, 5, 4, 5, 5, 4, 5, 7, 6, 6, 6, 6,
  • 7, 6, 6, 7, 8, 7), Array(4, 3, 2, 2, 3, 3, 2, 3, 2, 2, 1, 2, 1, 9999, 3, 3, 4, 2, 4, 7, 6, 4, 7, 8, 4, 4, 3, 4, 5, 3, 4, 6, 5,
  • 5, 5, 5, 6, 5, 5, 6, 7, 6), Array(4, 4, 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, 3, 5, 4,
  • 4, 5, 5, 4, 5, 5, 6, 5, 5, 6, 7, 6), Array(6, 5, 4, 4, 5, 5, 4, 5, 4, 3, 4, 4, 5, 6, 2, 9999, 1, 4, 1, 5, 5, 2, 6, 6, 3, 3, 5,
  • 2, 7, 3, 3, 4, 4, 3, 4, 4, 5, 4, 4, 5, 6, 5), Array(5, 5, 3, 3, 4, 4, 3, 4, 4, 2, 3, 3, 4, 5, 1, 1, 9999, 3, 1, 5, 5, 2, 6, 6,
  • 3, 3, 5, 2, 6, 3, 3, 4, 4, 3, 4, 4, 5, 4, 4, 5, 6, 5), Array(4, 4, 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, 3, 5, 4, 4, 5, 5, 4, 5, 5, 6, 5, 5, 6, 7, 6), Array(7, 4, 5, 5, 6, 5, 4, 6, 3, 4, 4, 5, 6, 7, 3, 1, 2, 5,
  • 9999, 4, 4, 1, 5, 5, 2, 2, 4, 1, 8, 2, 2, 3, 3, 2, 3, 3, 4, 3, 3, 4, 5, 4), Array(9, 6, 7, 7, 8, 7, 6, 8, 5, 7, 6, 8, 9, 10, 7,
  • 5, 6, 7, 4, 9999, 5, 3, 6, 1, 3, 2, 6, 3, 10, 4, 3, 1, 4, 2, 2, 2, 2, 3, 2, 1, 2, 3), Array(7, 4, 5, 5, 6, 5, 4, 6, 3, 5, 4, 6,
  • 7, 8, 6, 4, 5, 5, 3, 3, 9999, 2, 1, 4, 3, 3, 4, 4, 8, 2, 2, 2, 1, 2, 3, 3, 3, 4, 4, 4, 5, 5), Array(6, 3, 4, 4, 5, 4, 3, 5, 2,
  • 4, 3, 5, 6, 7, 4, 2, 3, 4, 1, 3, 3, 9999, 4, 4, 1, 2, 3, 2, 7, 1, 1, 2, 2, 1, 2, 2, 3, 3, 2, 3, 4, 3), Array(6, 3, 4, 4, 5, 4,
  • 3, 5, 2, 4, 3, 5, 6, 7, 5, 3, 4, 4, 2, 3, 1, 1, 9999, 4, 2, 2, 3, 3, 7, 1, 1, 2, 2, 1, 2, 2, 3, 3, 3, 4, 5, 4), Array(10, 7, 8,
  • 8, 9, 8, 7, 9, 6, 8, 7, 9, 10, 11, 8, 6, 7, 8, 5, 1, 6, 4, 7, 9999, 4, 3, 7, 4, 11, 5, 4, 2, 5, 3, 3, 3, 3, 4, 3, 2, 3, 4),
  • Array(6, 3, 4, 4, 5, 4, 3, 5, 2, 4, 3, 5, 6, 7, 5, 3, 4, 4, 2, 3, 3, 1, 4, 4, 9999, 1, 3, 2, 7, 1, 1, 3, 2, 2, 1, 1, 2, 2, 1,
  • 2, 3, 2), Array(7, 4, 5, 5, 6, 5, 4, 6, 3, 5, 4, 6, 7, 8, 5, 3, 4, 5, 2, 3, 4, 2, 5, 4, 1, 9999, 4, 1, 8, 2, 2, 2, 3, 1, 1, 1,
  • 2, 1, 2, 3, 4, 3), Array(5, 2, 3, 3, 4, 3, 2, 4, 1, 3, 2, 4, 5, 6, 3, 1, 2, 3, 1, 5, 5, 2, 6, 6, 3, 3, 9999, 2, 6, 2, 3, 4, 4,
  • 3, 4, 4, 5, 4, 4, 5, 6, 5), Array(8, 5, 6, 6, 7, 6, 5, 7, 4, 5, 5, 6, 7, 8, 4, 2, 3, 6, 1, 4, 5, 2, 6, 5, 2, 1, 5, 9999, 9, 3,
  • 3, 3, 4, 2, 2, 2, 3, 2, 3, 4, 5, 4), Array(1, 1, 2, 1, 2, 2, 1, 2, 2, 2, 2, 3, 4, 5, 3, 4, 4, 3, 3, 6, 6, 4, 7, 7, 4, 3, 3, 2,
  • 9999, 3, 4, 5, 5, 4, 4, 4, 5, 4, 5, 6, 7, 6), Array(5, 2, 3, 3, 4, 3, 2, 4, 1, 3, 2, 4, 5, 6, 4, 2, 3, 3, 1, 4, 3, 1, 4, 5, 1,
  • 1, 2, 2, 6, 9999, 1, 3, 2, 2, 2, 2, 3, 2, 2, 3, 4, 3), Array(6, 3, 4, 4, 5, 4, 3, 5, 2, 4, 3, 5, 6, 7, 5, 3, 4, 4, 2, 3, 2, 1,
  • 3, 4, 1, 2, 3, 3, 7, 1, 9999, 2, 1, 1, 2, 2, 3, 3, 2, 3, 4, 3), Array(8, 5, 6, 6, 7, 6, 5, 7, 4, 6, 5, 7, 8, 9, 6, 4, 5, 6, 3,
  • 1, 4, 2, 5, 2, 2, 1, 5, 2, 9, 3, 2, 9999, 3, 1, 1, 1, 1, 2, 2, 2, 3, 3), Array(7, 4, 5, 5, 6, 5, 4, 6, 3, 5, 4, 6, 7, 8, 6, 4,
  • 5, 5, 3, 2, 1, 2, 2, 3, 2, 2, 4, 3, 8, 2, 1, 1, 9999, 2, 2, 2, 2, 3, 3, 3, 4, 4), Array(7, 4, 5, 5, 6, 5, 4, 6, 3, 5, 4, 6, 7,
  • 8, 5, 3, 4, 5, 2, 2, 3, 1, 4, 3, 1, 1, 4, 2, 8, 2, 1, 1, 2, 9999, 1, 1, 2, 2, 2, 3, 4, 3), Array(7, 4, 5, 5, 6, 5, 4, 6, 3, 5,
  • 4, 6, 7, 8, 6, 4, 5, 5, 3, 3, 4, 2, 5, 4, 1, 1, 4, 2, 8, 2, 2, 2, 3, 1, 9999, 1, 2, 2, 2, 3, 4, 3), Array(7, 4, 5, 5, 6, 5, 4,
  • 6, 3, 5, 4, 6, 7, 8, 6, 4, 5, 5, 3, 3, 4, 2, 5, 4, 1, 1, 4, 2, 8, 2, 2, 2, 3, 1, 1, 9999, 1, 2, 1, 2, 3, 2), Array(8, 5, 6, 6,
  • 7, 6, 5, 7, 4, 6, 5, 7, 8, 9, 7, 5, 6, 6, 4, 3, 5, 3, 6, 4, 2, 2, 5, 3, 9, 3, 3, 3, 4, 2, 2, 1, 9999, 1, 1, 2, 3, 2), Array(8,
  • 5, 6, 6, 7, 6, 5, 7, 4, 6, 5, 7, 8, 9, 6, 4, 5, 6, 3, 4, 5, 3, 6, 5, 2, 1, 5, 2, 9, 3, 3, 3, 4, 2, 2, 2, 1, 9999, 2, 3, 4, 3),
  • Array(7, 4, 5, 5, 6, 5, 4, 6, 3, 5, 4, 6, 7, 8, 6, 4, 5, 5, 3, 2, 4, 2, 5, 3, 1, 2, 4, 3, 8, 2, 2, 3, 3, 2, 1, 1, 1, 2, 9999,
  • 1, 2, 1), Array(8, 5, 6, 6, 7, 6, 5, 7, 4, 6, 5, 7, 8, 9, 7, 5, 6, 6, 4, 1, 5, 3, 6, 2, 2, 3, 5, 4, 9, 3, 3, 2, 4, 3, 2, 2, 2,
  • 3, 1, 9999, 1, 2), Array(8, 5, 6, 6, 7, 6, 5, 7, 4, 6, 5, 7, 8, 9, 7, 5, 6, 6, 4, 2, 5, 3, 6, 3, 2, 3, 5, 4, 9, 3, 3, 3, 4, 3,
  • 2, 2, 2, 3, 1, 1, 9999, 2), Array(8, 5, 6, 6, 7, 6, 5, 7, 4, 6, 5, 7, 8, 9, 7, 5, 6, 6, 4, 3, 5, 3, 6, 4, 2, 3, 5, 4, 9, 3, 3,
  • 4, 4, 3, 2, 2, 2, 3, 1, 2, 3, 9999), 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, 0, 0, 0, 0, 9999));
  • 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("SUBROUTINE: BOT - RESET PATH FINDING")
  • rule("MAP: MALEVENTO (DISTANCE MATRIX)")
  • {
  • event
  • {
  • Subroutine;
  • BotResetPathFinding;
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Current Map == Map(Malevento);
  • }
  • actions
  • {
  • Event Player.BotTargetPlayer = -1;
  • Event Player.BotTargetNodeId = -1;
  • Event Player.BotTargetPosition = -1;
  • Event Player.BotIsPathFinding = False;
  • Stop Facing(Event Player);
  • Stop Throttle In Direction(Event Player);
  • 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("SUBROUTINE: BOT - GET NEXT NODE ID")
  • rule("MAP: EICHENWALDE (HALLOWEEN)")
  • {
  • event
  • {
  • Subroutine;
  • BotGetNextNodeId;
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Current Map == Map(Eichenwalde Halloween);
  • }
  • actions
  • {
  • Event Player.BotShortestDistance = 999;
  • Event Player.BotCurrentDistance = Event Player.BotShortestDistance;
  • Event Player.BotTempArray = Global.NodeConnections[Event Player.BotCurrentNodeId];
  • For Player Variable(Event Player, BotLoopIterator1, 0, Count Of(Event Player.BotTempArray), 1);
  • If(Event Player.BotTempArray[Event Player.BotLoopIterator1] == Event Player.BotTargetNodeId);
  • Event Player.BotCurrentNodeId = Event Player.BotTargetNodeId;
  • Break;
  • End;
  • Event Player.BotCurrentDistance = Global.DistanceMatrix[Event Player.BotTempArray[Event Player.BotLoopIterator1]][Event Player.BotTargetNodeId];
  • If(Event Player.BotCurrentDistance < Event Player.BotShortestDistance);
  • Event Player.BotShortestDistance = Event Player.BotCurrentDistance;
  • Event Player.BotCurrentNodeId = Event Player.BotTempArray[Event Player.BotLoopIterator1];
  • End;
  • End;
  • 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));
  • }
  • }
  • rule("SUBROUTINE: BOT - GET CURRENT NODE ID")
  • rule("MAP: WORKSHOP ISLAND")
  • {
  • event
  • {
  • Subroutine;
  • BotGetCurrentNodeId;
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Current Map == Map(Workshop Island);
  • }
  • actions
  • {
  • Event Player.BotCurrentNodeId = 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]);
  • 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));
  • }
  • }
  • rule("SUBROUTINE: BOT - GET TARGET NODE ID")
  • rule("MAP: DORADO")
  • {
  • event
  • {
  • Subroutine;
  • BotGetTargetNodeId;
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Current Map == Map(Dorado);
  • }
  • actions
  • {
  • Event Player.BotTargetPosition = Event Player.BotTargetPlayer != -1 ? Position Of(Event Player.BotTargetPlayer)
  • : Event Player.BotTargetPosition;
  • Event Player.BotTargetNodeId = 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]);
  • 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));
  • }
  • }
  • rule("MAP: HAVANA")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Current Map == Map(Havana);
  • }
  • 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));
  • }
  • }
  • rule("BOT: PATH FINDING - INIT")
  • {
  • event
  • {
  • Player Joined Match;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.BotMoveSpeedMultiplier = 1;
  • Call Subroutine(BotResetPathFinding);
  • }
  • }
  • 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.BotIsPathFinding == False;
  • Event Player.BotCancelPathFinding == False;
  • (Event Player.BotTargetPosition != -1 || Event Player.BotTargetPlayer != -1) == True;
  • }
  • actions
  • {
  • "GET CLOSSEST NODE ID NEAR BOT TO START PATH FINDING"
  • Call Subroutine(BotGetCurrentNodeId);
  • "GET CLOSSEST NODE ID NEAR TARGET POSITION"
  • Call Subroutine(BotGetTargetNodeId);
  • "SET MOVEMENT DIRECTION"
  • Start Throttle In Direction(Event Player, Direction Towards(Position Of(Event Player),
  • Global.NodePositions[Event Player.BotCurrentNodeId]), 1, To World, Replace existing throttle, Direction and Magnitude);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Global.NodePositions[Event Player.BotCurrentNodeId]), 500,
  • To World, Direction and Turn Rate);
  • 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));
  • }
  • }
  • rule("BOT: PATH FINDING - LOST THE CURRENT NODE")
  • rule("BOT: PATH FINDING - CANCEL")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.BotIsPathFinding == True;
  • (Is In Line of Sight(Position Of(Event Player) + Vector(0, 1.600, 0), Global.NodePositions[Event Player.BotCurrentNodeId] + Vector(
  • 0, 2.500, 0), Barriers Do Not Block LOS) == False && Speed Of In Direction(Event Player, Throttle Of(Event Player)) < 2)
  • == True;
  • Event Player.BotCancelPathFinding == True;
  • }
  • actions
  • {
  • Wait(0.650, Abort When False);
  • Call Subroutine(BotGetCurrentNodeId);
  • Start Throttle In Direction(Event Player, Direction Towards(Position Of(Event Player),
  • Global.NodePositions[Event Player.BotCurrentNodeId]), 1, To World, Replace existing throttle, Direction and Magnitude);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Global.NodePositions[Event Player.BotCurrentNodeId]), 500,
  • To World, Direction and Turn Rate);
  • Start Rule(BotResetPathFinding, Restart Rule);
  • }
  • }
  • rule("BOT: PATH FINDING - REACHED THE NODE")
  • rule("BOT: PATH FINDING - JUMP")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.BotIsPathFinding == True;
  • (Event Player.BotTargetNodeId >= 0 && Distance Between(Position Of(Event Player),
  • Global.NodePositions[Event Player.BotCurrentNodeId]) < 0.850) == True;
  • Is On Ground(Event Player) == True;
  • Speed Of(Event Player) < 3 * Event Player.BotMoveSpeedMultiplier;
  • }
  • actions
  • {
  • Call Subroutine(BotGetTargetNodeId);
  • "BOT REACHED THE TARGET NODE"
  • If(Event Player.BotCurrentNodeId == Event Player.BotTargetNodeId);
  • Call Subroutine(BotResetPathFinding);
  • Abort;
  • Press Button(Event Player, Button(Jump));
  • Press Button(Event Player, Button(Melee));
  • }
  • }
  • rule("BOT: PATH FINDING - TIMESTAMP TRIGGER")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • 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;
  • Call Subroutine(BotResetPathFinding);
  • Abort;
  • End;
  • End;
  • End;
  • Call Subroutine(BotGetNextNodeId);
  • Start Throttle In Direction(Event Player, Direction Towards(Position Of(Event Player),
  • Global.NodePositions[Event Player.BotCurrentNodeId]), 1, To World, Replace existing throttle, Direction and Magnitude);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Global.NodePositions[Event Player.BotCurrentNodeId]), 500,
  • To World, Direction and Turn Rate);
  • 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;
  • }
  • actions
  • {
  • 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);
  • "MOVE TO TARGET POSITION"
  • Event Player.BotNextNodePosition = Event Player.BotTargetPosition;
  • Abort;
  • 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 - EXPORT BLOCK END ===")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • disabled rule("=== EXPORT BLOCK END ===")
  • disabled rule("")
  • {
  • 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);
  • 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);
  • Global.WorkshopSettingShowConnections = Workshop Setting Toggle(Custom String("MOD PROPERTIES"), Custom String(
  • "SHOW CONNECTION EFFECTS WHEN SELECTED ONLY "), True, 0);
  • "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 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.2. HOLD 'INTERACT' BUTTON A FEW SECONDS TO RUN BUILD PROCESS"), False, -93);
  • "2. BUILD YOUR PROJECT WITH WEB APP"), False, -95);
  • Global.WorkshopSettingInstructions = Workshop Setting Toggle(Custom String("INSTRUCTIONS - HOW DOES IT WORKS"), Custom String(
  • " 2.3. WAIT WHEN THE PROCESS WILL BE FINISHED"), False, -92);
  • " 2.1. COPY ALL ACTUAL VAR VALUES FROM INSPECTOR ('X' BUTTON)"), False, -94);
  • Global.WorkshopSettingInstructions = Workshop Setting Toggle(Custom String("INSTRUCTIONS - HOW DOES IT WORKS"), Custom String(
  • " 2.3. OPEN WORKSHOP INSPECTOR AT LAST POSITION AND SELECT 'VARIABLE TARGET' = GLOBAL"), False, -91);
  • " 2.2. VISIT WEB APP 'PATH NODE BUILDER'"), False, -93);
  • Global.WorkshopSettingInstructions = Workshop Setting Toggle(Custom String("INSTRUCTIONS - HOW DOES IT WORKS"), Custom String(
  • " 2.4. CLICK (X) BUTTON TO COPY VALUES OF VARS TO CLIPBOARD AND PASTE IT IN ANY TEXT EDITOR"), False, -90);
  • " 2.3. PASTE COPIED VALUES IN FIRST FORM"), False, -92);
  • Global.WorkshopSettingInstructions = Workshop Setting Toggle(Custom String("INSTRUCTIONS - HOW DOES IT WORKS"), Custom String(
  • " 2.5 DELETE ALL VARS AND ACTIONS EXCEPT NEXT"), False, -89);
  • " 2.3. PRESS BUTTON 'COMPUTE DISTANCE MATRIX'"), False, -91);
  • 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);
  • " 2.4. PRESS BUTTON 'COPY TO CLIPBOARD'"), False, -90);
  • 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 AND BOT: NAVIGATION DEBUG INFO")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Create HUD Text(Event Player, Custom String("CLOSSEST NODE: {0}\r\nCLOSSEST 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("CURRENT NODE {1}", Null, Event Player.BotCurrentNodeId)), Null,
  • Null, Right, -1, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • }
  • }
  • 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(PathFindingResetBot);
  • 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("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);
  • 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);
  • 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 NODE {1}\r\n{2}", Input Binding String(Button(Primary Fire)),
  • Global.PathFindingStartNodeId, Custom String("{0} - SET END 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);
  • 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"
  • 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,
  • "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,
  • Global.BuilderHudColorBuildMode, Global.BuilderHudColorBuildMode, Visible To and Values, Default Visibility);
  • Global.BuilderProgressBarValue = 0;
  • Chase Global Variable Over Time(BuilderProgressBarValue, 100, 2, Destination and Duration);
  • disabled Global.BuilderProgressBarValue = 0;
  • disabled Chase Global Variable Over Time(BuilderProgressBarValue, 100, 2, Destination and Duration);
  • "HOLD BUTTON N SEC TO BEGIN PROCESS"
  • 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;
  • 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;
  • "RUN BUILD PROJECT"
  • Destroy All Progress Bar HUD Text;
  • Call Subroutine(BuilderBuildProject);
  • disabled Destroy All Progress Bar HUD Text;
  • disabled 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 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(Red), Global.NodePositions[Global.LoopIterator1], Global.NodeTriggerRadius,
  • Visible To);
  • Modify Global Variable(BuilderNodeEffectIdArray, Append To Array, Last Created Entity);
  • End;
  • Wait(0.050, Ignore Condition);
  • Wait(0.100, 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.030, Ignore Condition);
  • Wait(0.100, 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.030, Ignore Condition);
  • Wait(0.060, 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.030, Ignore Condition);
  • Wait(0.060, Ignore Condition);
  • }
  • }
  • rule("SUBROUTINE: COMPUTE DISTANCE MATRIX")
  • disabled rule("SUBROUTINE: BUILD PROJECT")
  • {
  • event
  • {
  • Subroutine;
  • BuilderBuildProject;
  • }
  • actions
  • {
  • "DISABLE INSPECTOR WHILE COMPILING (WRITE RESULT ONLY)"
  • Skip If(!Global.OptimizedInspectorRecorder, 1);
  • Disable Inspector Recording;
  • "BEGIN COMPILING"
  • 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;
  • Enable Inspector Recording;
  • }
  • }
  • disabled rule("SUBROUTINE: DELETE ALL EFFECTS")
  • {
  • event
  • {
  • Subroutine;
  • BuilderDeleteAllEffects;
  • }
  • actions
  • {
  • Destroy All Effects;
  • Destroy All In-World Text;
  • }
  • }
  • disabled rule("SUBROUTINE: OPTIMIZE DATA")
  • {
  • event
  • {
  • Subroutine;
  • BuilderOptimizeData;
  • }
  • actions
  • {
  • "PREPARE TO OPTIMAZE DATA"
  • 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;
  • "BEGIN PROCESS"
  • 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;
  • "ANTI-CRASH DELAY"
  • disabled Wait(0.030, Ignore Condition);
  • 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];
  • "WRITE ONLY RESULT INTO INSPECTOR"
  • Enable Inspector Recording;
  • Global.NodeConnections[Global.BuildProjectNewElementIndex] = Global.BuilderInnerArray;
  • Modify Global Variable(NodePositions, Append To Array, Global.BuilderNodePositions[Global.BuildProjectOldElementIndex]);
  • "DISABLE INSPECTOR WHILE COMPILING (WRITE RESULT ONLY)"
  • Skip If(!Global.OptimizedInspectorRecorder, 1);
  • Disable Inspector Recording;
  • "UPDATE INDEXES IN CONNECTION ARRAY"
  • If(Global.BuildProjectEmptySpace > 0 && Count Of(Global.NodeConnections) > 1);
  • Call Subroutine(BuilderUpdateConnectionIndexes);
  • End;
  • "ANTI-CRASH DELAY"
  • Wait(0.060, Ignore Condition);
  • End;
  • Destroy All Progress Bar HUD Text;
  • Enable Inspector Recording;
  • }
  • }
  • disabled 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"
  • "INIT DISTANCE MATRIX SIZE"
  • 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);
  • Wait(0.100, Ignore Condition);
  • End;
  • "REPLACE ZERO TO INF (9999)"
  • Global.BuilderInnerArray[Global.BuildProjectStartNodeId] = 9999;
  • "WRITE ONLY RESULT INTO INSPECTOR"
  • Enable Inspector Recording;
  • "ADD RESULT IN DISTANCE MATRIX"
  • Global.DistanceMatrix[Global.BuildProjectStartNodeId] = Global.BuilderInnerArray;
  • "DISABLE INSPECTOR WHILE COMPILING (WRITE RESULT ONLY)"
  • Skip If(!Global.OptimizedInspectorRecorder, 1);
  • Disable Inspector Recording;
  • 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;
  • disabled (Is Button Held(Event Player, Button(Primary Fire)) || Is Button Held(Event Player, Button(Secondary Fire)) || Is Button Held(
  • Event Player, Button(Ultimate))) == 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)));
  • "ANY NODE IN LINE OF SIGHT"
  • Call Subroutine(BuilderGetClossestNodeIdToCursor);
  • 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.400, Z Component Of(
  • 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
  • {
  • Abort If(Global.BuilderTrySelectNodeInLOS == -1);
  • 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 = Global.BuilderTrySelectNodeInLOS;
  • Global.PathFindingStartNodeEffectPos = Global.NodePositions[Global.BuilderTrySelectNodeInLOS];
  • If(Global.PathFindingStartNodeId == Global.PathFindingTargetNodeId);
  • Global.PathFindingTargetNodeId = -1;
  • Global.PathFindingTargetNodeEffectPos = Vector(0, -999, 0);
  • End;
  • 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 = Global.BuilderTrySelectNodeInLOS;
  • Global.PathFindingTargetNodeEffectPos = Global.NodePositions[Global.BuilderTrySelectNodeInLOS];
  • If(Global.PathFindingTargetNodeId == Global.PathFindingStartNodeId);
  • Global.PathFindingStartNodeId = -1;
  • Global.PathFindingStartNodeEffectPos = Vector(0, -999, 0);
  • End;
  • 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);
  • Call Subroutine(PathFindingGetShortestPath);
  • Call Subroutine(DeleteNodeBeams);
  • Call Subroutine(CreateNodeBeams);
  • disabled Call Subroutine(DeleteNodeBeams);
  • Call Subroutine(PathFindingDrawShortestPath);
  • disabled 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"));
  • 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;
  • 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;
  • 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;
  • }
  • }
  • rule("SUBROUTINE: PATH FINDING GET SHORTEST PATH")
  • disabled rule("SUBROUTINE: PATH FINDING DRAW SHORTEST PATH")
  • {
  • event
  • {
  • Subroutine;
  • PathFindingGetShortestPath;
  • PathFindingDrawShortestPath;
  • }
  • actions
  • {
  • Global.PathFindingResultPath = Empty Array;
  • Global.BuildProjectVisitedNodes = Empty Array;
  • 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.PathFindingCurrentNodeId = Global.PathFindingStartNodeId;
  • 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;
  • 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;
  • "ANTI-CRASH DELAY"
  • Wait(0.016, Ignore Condition);
  • Wait(0.020, 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 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.NodePositions[Global.PathFindingStartNodeId], Vector(0, 0, 0));
  • 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.NodePositions[Global.PathFindingStartNodeId]);
  • Teleport(Global.PathFindingBotId, Global.PathFindingStartPosition);
  • End;
  • Call Subroutine(PathFindingResetBot);
  • Call Subroutine(PathFindingTestBotReset);
  • "ANTI-BUG DELAY"
  • Wait(0.016, Ignore Condition);
  • Global.PathFindingBotId.BotTargetPosition = Global.NodePositions[Global.PathFindingTargetNodeId];
  • Wait(0.100, Ignore Condition);
  • Global.PathFindingBotId.BotTargetPosition = Global.PathFindingTargetPosition;
  • disabled Global.PathFindingBotId.BotTargetPlayer = Event Player;
  • }
  • }
  • disabled rule("=== TEST BOT ===")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("SUBROUTINE: RESET TEST BOT")
  • 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);
  • 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(
  • "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;
  • PathFindingResetBot;
  • PathFindingTestBotReset;
  • }
  • actions
  • {
  • Stop Throttle In Direction(Global.PathFindingBotId);
  • Stop Facing(Global.PathFindingBotId);
  • Global.PathFindingBotId.BotPrevNodeId = -1;
  • Global.PathFindingBotId.BotTargetPlayer = -1;
  • Global.PathFindingBotId.BotTargetPosition = -1;
  • Global.PathFindingBotId.BotTargetNodeId = -1;
  • Global.PathFindingBotId.BotIsPathFinding = False;
  • Global.PathFindingBotId.BotCancelPathFinding = False;
  • Stop Facing(Global.PathFindingBotId);
  • Stop Throttle In Direction(Global.PathFindingBotId);
  • }
  • }
Join the Workshop.codes Discord