diff --git a/Sources/epoch_code/Data/EpochLogo.paa b/Sources/epoch_code/Data/EpochLogo.paa
new file mode 100644
index 00000000..7b20f3c0
Binary files /dev/null and b/Sources/epoch_code/Data/EpochLogo.paa differ
diff --git a/Sources/epoch_code/Data/Member.paa b/Sources/epoch_code/Data/Member.paa
new file mode 100644
index 00000000..4751ca96
Binary files /dev/null and b/Sources/epoch_code/Data/Member.paa differ
diff --git a/Sources/epoch_code/Data/Mod.paa b/Sources/epoch_code/Data/Mod.paa
new file mode 100644
index 00000000..da2cfda6
Binary files /dev/null and b/Sources/epoch_code/Data/Mod.paa differ
diff --git a/Sources/epoch_code/Data/Owner.paa b/Sources/epoch_code/Data/Owner.paa
new file mode 100644
index 00000000..e822b5bb
Binary files /dev/null and b/Sources/epoch_code/Data/Owner.paa differ
diff --git a/Sources/epoch_code/Data/UI/UIBG_ca.paa b/Sources/epoch_code/Data/UI/UIBG_ca.paa
new file mode 100644
index 00000000..34a0baa8
Binary files /dev/null and b/Sources/epoch_code/Data/UI/UIBG_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/battery_ca.paa b/Sources/epoch_code/Data/UI/battery_ca.paa
new file mode 100644
index 00000000..edd6d504
Binary files /dev/null and b/Sources/epoch_code/Data/UI/battery_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/bleeding_ca.paa b/Sources/epoch_code/Data/UI/bleeding_ca.paa
new file mode 100644
index 00000000..57717267
Binary files /dev/null and b/Sources/epoch_code/Data/UI/bleeding_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/broken_ca.paa b/Sources/epoch_code/Data/UI/broken_ca.paa
new file mode 100644
index 00000000..03ad6452
Binary files /dev/null and b/Sources/epoch_code/Data/UI/broken_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/cc_ca.paa b/Sources/epoch_code/Data/UI/cc_ca.paa
new file mode 100644
index 00000000..9450b359
Binary files /dev/null and b/Sources/epoch_code/Data/UI/cc_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/defineCommonGrids.inc b/Sources/epoch_code/Data/UI/defineCommonGrids.inc
new file mode 100644
index 00000000..188b2079
--- /dev/null
+++ b/Sources/epoch_code/Data/UI/defineCommonGrids.inc
@@ -0,0 +1,321 @@
+///////////////////////////////////////////////////////////////////////////
+/// GUI
+///////////////////////////////////////////////////////////////////////////
+
+//--- Hack to avoid too large display upon first startup (fixed in engine)
+//#define GUI_GRID_OLD_WAbs ((safezoneW / ((floor (safezoneW / safezoneH)) max 1)) min 1.2)
+
+//--- New grid for new A3 displays
+#define GUI_GRID_WAbs ((safezoneW / safezoneH) min 1.2)
+#define GUI_GRID_HAbs (GUI_GRID_WAbs / 1.2)
+#define GUI_GRID_W (GUI_GRID_WAbs / 40)
+#define GUI_GRID_H (GUI_GRID_HAbs / 25)
+#define GUI_GRID_X (safezoneX)
+#define GUI_GRID_Y (safezoneY + safezoneH - GUI_GRID_HAbs)
+
+//--- MUF - Test grid used in MP
+#define GUI_GRID_MP_WAbs GUI_GRID_WAbs
+#define GUI_GRID_MP_HAbs GUI_GRID_HAbs
+#define GUI_GRID_MP_W GUI_GRID_W
+#define GUI_GRID_MP_H GUI_GRID_H
+#define GUI_GRID_MP_X (SafezoneX)
+#define GUI_GRID_MP_Y (safezoneY)
+
+//--- Screen Center
+#define GUI_GRID_CENTER_WAbs GUI_GRID_WAbs
+#define GUI_GRID_CENTER_HAbs GUI_GRID_HAbs
+#define GUI_GRID_CENTER_W GUI_GRID_W
+#define GUI_GRID_CENTER_H GUI_GRID_H
+#define GUI_GRID_CENTER_X (safezoneX + (safezoneW - GUI_GRID_CENTER_WAbs)/2)
+#define GUI_GRID_CENTER_Y (safezoneY + (safezoneH - GUI_GRID_CENTER_HAbs)/2)
+
+//--- 2D Editor - TEST A3
+#define GUI_GRID_EDITOR_WAbs GUI_GRID_CENTER_WAbs
+#define GUI_GRID_EDITOR_HAbs GUI_GRID_CENTER_HAbs
+#define GUI_GRID_EDITOR_W GUI_GRID_CENTER_W
+#define GUI_GRID_EDITOR_H GUI_GRID_CENTER_H
+#define GUI_GRID_EDITOR_X (safezoneX)
+#define GUI_GRID_EDITOR_Y (safezoneY)
+
+//--- Diary
+#define GUI_GRID_DIARY_WAbs GUI_GRID_WAbs
+#define GUI_GRID_DIARY_HAbs GUI_GRID_HAbs
+#define GUI_GRID_DIARY_W GUI_GRID_W
+#define GUI_GRID_DIARY_H GUI_GRID_H
+#define GUI_GRID_DIARY_X (safezoneX)
+#define GUI_GRID_DIARY_Y (safezoneY)
+
+//--- Top left
+#define GUI_GRID_TOPLEFT_WAbs GUI_GRID_WAbs
+#define GUI_GRID_TOPLEFT_HAbs GUI_GRID_HAbs
+#define GUI_GRID_TOPLEFT_W GUI_GRID_W
+#define GUI_GRID_TOPLEFT_H GUI_GRID_H
+#define GUI_GRID_TOPLEFT_X (safezoneX)
+#define GUI_GRID_TOPLEFT_Y (safezoneY)
+
+
+///////////////////////////////////////////////////////////////////////////
+/// iGUI
+///////////////////////////////////////////////////////////////////////////
+
+//--- IGUI Vehicle
+#define IGUI_GRID_VEHICLE_WAbs (10 * GUI_GRID_W)
+#define IGUI_GRID_VEHICLE_HAbs (4.5 * GUI_GRID_H)
+#define IGUI_GRID_VEHICLE_XDef (safezoneX + 0.5 * GUI_GRID_W)
+#define IGUI_GRID_VEHICLE_YDef (safezoneY + 0.5 * GUI_GRID_H)
+#define IGUI_GRID_VEHICLE_X (profilenamespace getvariable ["IGUI_GRID_VEHICLE_X",IGUI_GRID_VEHICLE_XDef])
+#define IGUI_GRID_VEHICLE_Y (profilenamespace getvariable ["IGUI_GRID_VEHICLE_Y",IGUI_GRID_VEHICLE_YDef])
+#define IGUI_GRID_VEHICLE_W GUI_GRID_W
+#define IGUI_GRID_VEHICLE_H GUI_GRID_H
+
+//--- IGUI Radar
+#define IGUI_GRID_RADAR_WAbs (5.6 * GUI_GRID_W)
+#define IGUI_GRID_RADAR_HAbs (5.6 * GUI_GRID_H)
+#define IGUI_GRID_RADAR_XDef (safezoneX + safezoneW / 2 - 2.8 * GUI_GRID_W)
+#define IGUI_GRID_RADAR_YDef (safezoneY + 0.5 * GUI_GRID_H)
+#define IGUI_GRID_RADAR_X (profilenamespace getvariable ["IGUI_GRID_RADAR_X",IGUI_GRID_RADAR_XDef])
+#define IGUI_GRID_RADAR_Y (profilenamespace getvariable ["IGUI_GRID_RADAR_Y",IGUI_GRID_RADAR_YDef])
+#define IGUI_GRID_RADAR_W GUI_GRID_W
+#define IGUI_GRID_RADAR_H GUI_GRID_H
+
+//--- IGUI Weapon
+#define IGUI_GRID_WEAPON_WAbs (12.4 * GUI_GRID_W)
+#define IGUI_GRID_WEAPON_HAbs (4.5 * GUI_GRID_H)
+#define IGUI_GRID_WEAPON_XDef ((safezoneX + safezoneW) - IGUI_GRID_WEAPON_WAbs - 0.5 * GUI_GRID_W)
+#define IGUI_GRID_WEAPON_YDef (safezoneY + 0.5 * GUI_GRID_H)
+#define IGUI_GRID_WEAPON_X (profilenamespace getvariable ["IGUI_GRID_WEAPON_X",IGUI_GRID_WEAPON_XDef])
+#define IGUI_GRID_WEAPON_Y (profilenamespace getvariable ["IGUI_GRID_WEAPON_Y",IGUI_GRID_WEAPON_YDef])
+#define IGUI_GRID_WEAPON_W GUI_GRID_W
+#define IGUI_GRID_WEAPON_H GUI_GRID_H
+
+//--- IGUI Notification
+#define IGUI_GRID_NOTIFICATION_WAbs (12 * GUI_GRID_W)
+#define IGUI_GRID_NOTIFICATION_HAbs (6 * GUI_GRID_H)
+#define IGUI_GRID_NOTIFICATION_XDef (0.5 - 6 * GUI_GRID_W)
+#define IGUI_GRID_NOTIFICATION_YDef (safezoneY + 6.5 * GUI_GRID_H)
+#define IGUI_GRID_NOTIFICATION_X (profilenamespace getvariable ["IGUI_GRID_NOTIFICATION_X",IGUI_GRID_NOTIFICATION_XDef])
+#define IGUI_GRID_NOTIFICATION_Y (profilenamespace getvariable ["IGUI_GRID_NOTIFICATION_Y",IGUI_GRID_NOTIFICATION_YDef])
+#define IGUI_GRID_NOTIFICATION_W GUI_GRID_W
+#define IGUI_GRID_NOTIFICATION_H GUI_GRID_H
+
+//--- IGUI Action / Command Menu
+#define IGUI_GRID_MENU_WAbs (4.5 * GUI_GRID_W)
+#define IGUI_GRID_MENU_HAbs (10 * (IGUI_TEXT_SIZE_MEDIUM * 1.3))
+#define IGUI_GRID_MENU_XDef (1.5 * GUI_GRID_W + safezoneX)
+#define IGUI_GRID_MENU_YDef (5 * GUI_GRID_H + safezoneY)
+#define IGUI_GRID_MENU_X (profilenamespace getvariable ["IGUI_GRID_MENU_X",IGUI_GRID_MENU_XDef])
+#define IGUI_GRID_MENU_Y (profilenamespace getvariable ["IGUI_GRID_MENU_Y",IGUI_GRID_MENU_YDef])
+#define IGUI_GRID_MENU_W GUI_GRID_W
+#define IGUI_GRID_MENU_H GUI_GRID_H
+
+//--- IGUI Communication menu icons
+#define IGUI_GRID_COMM_WAbs (1.5 * GUI_GRID_W)
+#define IGUI_GRID_COMM_HAbs (15 * GUI_GRID_H)
+#define IGUI_GRID_COMM_XDef (0 * GUI_GRID_W + safezoneX)
+#define IGUI_GRID_COMM_YDef (5 * GUI_GRID_H + safezoneY)
+#define IGUI_GRID_COMM_X (profilenamespace getvariable ["IGUI_GRID_COMM_X",IGUI_GRID_COMM_XDef])
+#define IGUI_GRID_COMM_Y (profilenamespace getvariable ["IGUI_GRID_COMM_Y",IGUI_GRID_COMM_YDef])
+#define IGUI_GRID_COMM_W GUI_GRID_W
+#define IGUI_GRID_COMM_H GUI_GRID_H
+
+//--- IGUI Hint
+#define IGUI_GRID_HINT_WAbs (12 * GUI_GRID_W)
+#define IGUI_GRID_HINT_HAbs (8 * GUI_GRID_H)
+#define IGUI_GRID_HINT_XDef ((safezoneX + safezoneW) - IGUI_GRID_HINT_WAbs - 1 * GUI_GRID_W)
+#define IGUI_GRID_HINT_YDef (safezoneY + 6 * GUI_GRID_H)
+#define IGUI_GRID_HINT_X (profilenamespace getvariable ["IGUI_GRID_HINT_X",IGUI_GRID_HINT_XDef])
+#define IGUI_GRID_HINT_Y (profilenamespace getvariable ["IGUI_GRID_HINT_Y",IGUI_GRID_HINT_YDef])
+#define IGUI_GRID_HINT_W GUI_GRID_W
+#define IGUI_GRID_HINT_H GUI_GRID_H
+
+//--- IGUI GPS
+#define IGUI_GRID_GPS_XDef (safezoneX + safezoneW - 10.5 * GUI_GRID_W)
+#define IGUI_GRID_GPS_YDef (safezoneY + safezoneH - 15.5 * GUI_GRID_H)
+#define IGUI_GRID_GPS_WDef (10 * GUI_GRID_W)
+#define IGUI_GRID_GPS_HDef (10 * GUI_GRID_H)
+#define IGUI_GRID_GPS_X (profilenamespace getvariable ['IGUI_GRID_GPS_X',IGUI_GRID_GPS_XDef])
+#define IGUI_GRID_GPS_Y (profilenamespace getvariable ['IGUI_GRID_GPS_Y',IGUI_GRID_GPS_YDef])
+#define IGUI_GRID_GPS_WAbs (profilenamespace getvariable ['IGUI_GRID_GPS_W',IGUI_GRID_GPS_WDef])
+#define IGUI_GRID_GPS_HAbs (profilenamespace getvariable ['IGUI_GRID_GPS_H',IGUI_GRID_GPS_HDef])
+
+//--- IGUI AV Camera
+#define IGUI_GRID_AVCAMERA_XDef (safezoneX + safezoneW - 11.1 * GUI_GRID_W)
+#define IGUI_GRID_AVCAMERA_YDef (13.5 * GUI_GRID_H + GUI_GRID_Y)
+#define IGUI_GRID_AVCAMERA_WDef (10.6 * GUI_GRID_W)
+#define IGUI_GRID_AVCAMERA_HDef (6.7 * GUI_GRID_H)
+#define IGUI_GRID_AVCAMERA_X (profilenamespace getvariable ['IGUI_GRID_AVCAMERA_X',IGUI_GRID_AVCAMERA_XDef])
+#define IGUI_GRID_AVCAMERA_Y (profilenamespace getvariable ['IGUI_GRID_AVCAMERA_Y',IGUI_GRID_AVCAMERA_YDef])
+#define IGUI_GRID_AVCAMERA_WAbs (profilenamespace getvariable ['IGUI_GRID_AVCAMERA_W',IGUI_GRID_AVCAMERA_WDef])
+#define IGUI_GRID_AVCAMERA_HAbs (profilenamespace getvariable ['IGUI_GRID_AVCAMERA_H',IGUI_GRID_AVCAMERA_HDef])
+
+//--- IGUI IGUI Chat Log
+#define IGUI_GRID_CHAT_XDef (safezoneX + 1 * GUI_GRID_W)
+#define IGUI_GRID_CHAT_YDef (safezoneY + safezoneH - 10.5 * GUI_GRID_H)
+#define IGUI_GRID_CHAT_WDef (20 * GUI_GRID_W)
+#define IGUI_GRID_CHAT_HDef (5 * GUI_GRID_H)
+#define IGUI_GRID_CHAT_X (profilenamespace getvariable ["IGUI_GRID_CHAT_X",IGUI_GRID_CHAT_XDef])
+#define IGUI_GRID_CHAT_Y (profilenamespace getvariable ["IGUI_GRID_CHAT_Y",IGUI_GRID_CHAT_YDef])
+#define IGUI_GRID_CHAT_WAbs (profilenamespace getvariable ["IGUI_GRID_CHAT_W",IGUI_GRID_CHAT_WDef])
+#define IGUI_GRID_CHAT_HAbs (profilenamespace getvariable ["IGUI_GRID_CHAT_H",IGUI_GRID_CHAT_HDef])
+
+//--- IGUI Command Bar
+#define IGUI_GRID_BAR_WAbs (36 * GUI_GRID_W)
+#define IGUI_GRID_BAR_HAbs (4 * GUI_GRID_H)
+#define IGUI_GRID_BAR_XDef (safezoneX + 1 * GUI_GRID_W)
+#define IGUI_GRID_BAR_YDef (safezoneY + safezoneH - 4.5 * GUI_GRID_H)
+#define IGUI_GRID_BAR_X (profilenamespace getvariable ["IGUI_GRID_BAR_X",IGUI_GRID_BAR_XDef])
+#define IGUI_GRID_BAR_Y (profilenamespace getvariable ["IGUI_GRID_BAR_Y",IGUI_GRID_BAR_YDef])
+#define IGUI_GRID_BAR_W GUI_GRID_W
+#define IGUI_GRID_BAR_H GUI_GRID_H
+
+//--- IGUI MP Progress
+#define IGUI_GRID_MP_WAbs (2.5 * GUI_GRID_W)
+#define IGUI_GRID_MP_HAbs (15 * GUI_GRID_H)
+#define IGUI_GRID_MP_XDef (safezoneX + safezoneW - 2 * GUI_GRID_W)
+#define IGUI_GRID_MP_YDef (5 * GUI_GRID_H + safezoneY)
+#define IGUI_GRID_MP_X (profilenamespace getvariable ["IGUI_GRID_MP_X",IGUI_GRID_MP_XDef])
+#define IGUI_GRID_MP_Y (profilenamespace getvariable ["IGUI_GRID_MP_Y",IGUI_GRID_MP_YDef])
+#define IGUI_GRID_MP_W GUI_GRID_W
+#define IGUI_GRID_MP_H GUI_GRID_H
+
+
+///////////////////////////////////////////////////////////////////////////
+/// Old
+///////////////////////////////////////////////////////////////////////////
+
+//--- Old grid, that is used for old A3 and TKOH displays
+#define GUI_GRID_OLD_WAbs ((safezoneW / safezoneH) min 1.2)
+#define GUI_GRID_OLD_HAbs (GUI_GRID_OLD_WAbs / 1.2)
+#define GUI_GRID_OLD_W (GUI_GRID_OLD_WAbs / 32)
+#define GUI_GRID_OLD_H (GUI_GRID_OLD_HAbs / 20)
+#define GUI_GRID_OLD_X (safezoneX)
+#define GUI_GRID_OLD_Y (safezoneY + safezoneH - GUI_GRID_OLD_HAbs)
+
+//--- Centered
+//#define GUI_GRID_OLD_X (safezoneX + (safezoneW - GUI_GRID_OLD_CENTER_WAbs)/2)
+//--- Dark magic
+//#define GUI_GRID_OLD_X (profilenamespace getvariable ['GUI_GRID_OLD_X',(safezoneX + (safezoneW - GUI_GRID_OLD_CENTER_WAbs)/2)])
+//#define GUI_GRID_OLD_Y (profilenamespace getvariable ['GUI_GRID_OLD_Y',(safezoneY + safezoneH - GUI_GRID_OLD_HAbs)])
+
+//MUF-TEST: Anchor near the right edge of the screen - when changing Interface size, this point doesn't change its X position
+#define GUI_ANCHOR_RIGHT (0.983 * safezoneW + safezoneX)
+#define GUI_ANCHOR_LEFT 0
+
+//--- Screen Center
+#define GUI_GRID_OLD_CENTER_WAbs GUI_GRID_OLD_WAbs
+#define GUI_GRID_OLD_CENTER_HAbs GUI_GRID_OLD_HAbs
+#define GUI_GRID_OLD_CENTER_W GUI_GRID_OLD_W
+#define GUI_GRID_OLD_CENTER_H GUI_GRID_OLD_H
+#define GUI_GRID_OLD_CENTER_X (safezoneX + (safezoneW - GUI_GRID_OLD_CENTER_WAbs)/2)
+#define GUI_GRID_OLD_CENTER_Y (safezoneY + (safezoneH - GUI_GRID_OLD_CENTER_HAbs)/2)
+
+//--- 2D Editor
+#define GUI_GRID_OLD_EDITOR_WAbs GUI_GRID_OLD_CENTER_WAbs
+#define GUI_GRID_OLD_EDITOR_HAbs GUI_GRID_OLD_CENTER_HAbs
+#define GUI_GRID_OLD_EDITOR_W GUI_GRID_OLD_CENTER_W
+#define GUI_GRID_OLD_EDITOR_H GUI_GRID_OLD_CENTER_H
+#define GUI_GRID_OLD_EDITOR_X GUI_GRID_OLD_CENTER_X
+#define GUI_GRID_OLD_EDITOR_Y (safezoneY)
+
+//--- Debug console (center down)
+#define GUI_GRID_OLD_DEBUG_WAbs GUI_GRID_OLD_WAbs
+#define GUI_GRID_OLD_DEBUG_HAbs GUI_GRID_OLD_HAbs
+#define GUI_GRID_OLD_DEBUG_W GUI_GRID_OLD_W
+#define GUI_GRID_OLD_DEBUG_H GUI_GRID_OLD_H
+#define GUI_GRID_OLD_DEBUG_X (safezoneX + (safezoneW - GUI_GRID_OLD_DEBUG_WAbs)/2)
+#define GUI_GRID_OLD_DEBUG_Y (safezoneY + safezoneH - GUI_GRID_OLD_DEBUG_HAbs)
+
+//--- IGUI Common
+#define IGUI_GRID_OLD_WAbs GUI_GRID_OLD_WAbs
+#define IGUI_GRID_OLD_HAbs GUI_GRID_OLD_HAbs
+#define IGUI_GRID_OLD_W GUI_GRID_OLD_W
+#define IGUI_GRID_OLD_H GUI_GRID_OLD_H
+#define IGUI_GRID_OLD_X (safezoneX + (safezoneW - IGUI_GRID_OLD_WAbs) / 2)
+#define IGUI_GRID_OLD_Y (safezoneY + safezoneH - IGUI_GRID_OLD_HAbs)
+
+//--- IGUI Bottom
+#define IGUI_GRID_OLD_BOTTOM_WAbs IGUI_GRID_OLD_WAbs
+#define IGUI_GRID_OLD_BOTTOM_HAbs IGUI_GRID_OLD_HAbs
+#define IGUI_GRID_OLD_BOTTOM_W IGUI_GRID_OLD_W
+#define IGUI_GRID_OLD_BOTTOM_H IGUI_GRID_OLD_H
+#define IGUI_GRID_OLD_BOTTOM_X (safezoneX + (safezoneW - IGUI_GRID_OLD_BOTTOM_WAbs) / 2)
+#define IGUI_GRID_OLD_BOTTOM_Y (safezoneY + safezoneH - IGUI_GRID_OLD_BOTTOM_HAbs)
+
+//--- IGUI Analogue Gauges
+#define IGUI_GRID_OLD_GAUGES_WAbs (30 * IGUI_GRID_OLD_BOTTOM_W)
+#define IGUI_GRID_OLD_GAUGES_HAbs (6 * IGUI_GRID_OLD_BOTTOM_H)
+#define IGUI_GRID_OLD_GAUGES_XDef (1 * IGUI_GRID_OLD_BOTTOM_W + IGUI_GRID_OLD_BOTTOM_X)
+#define IGUI_GRID_OLD_GAUGES_YDef (13.5 * IGUI_GRID_OLD_BOTTOM_H + IGUI_GRID_OLD_BOTTOM_Y)
+#define IGUI_GRID_OLD_GAUGES_X IGUI_GRID_OLD_GAUGES_XDef
+#define IGUI_GRID_OLD_GAUGES_Y IGUI_GRID_OLD_GAUGES_YDef
+#define IGUI_GRID_OLD_GAUGES_W IGUI_GRID_OLD_W
+#define IGUI_GRID_OLD_GAUGES_H IGUI_GRID_OLD_H
+
+//--- IGUI Action / Command Menu
+#define IGUI_GRID_OLD_MENU_WAbs (4.5 * IGUI_GRID_OLD_W)
+#define IGUI_GRID_OLD_MENU_HAbs (10 * (IGUI_TEXT_SIZE_MEDIUM * 1.3))
+#define IGUI_GRID_OLD_MENU_XDef (1 * IGUI_GRID_OLD_W + safezoneX)
+#define IGUI_GRID_OLD_MENU_YDef (5 * IGUI_GRID_OLD_H + safezoneY)
+#define IGUI_GRID_OLD_MENU_X (profilenamespace getvariable ["IGUI_GRID_OLD_MENU_X",IGUI_GRID_OLD_MENU_XDef])
+#define IGUI_GRID_OLD_MENU_Y (profilenamespace getvariable ["IGUI_GRID_OLD_MENU_Y",IGUI_GRID_OLD_MENU_YDef])
+#define IGUI_GRID_OLD_MENU_W IGUI_GRID_OLD_W
+#define IGUI_GRID_OLD_MENU_H IGUI_GRID_OLD_H
+
+//--- E3
+/*
+#define IGUI_GRID_OLD_MENU_WAbs (4.5 * IGUI_GRID_OLD_W)
+#define IGUI_GRID_OLD_MENU_HAbs (10 * (IGUI_TEXT_SIZE_MEDIUM * 1.3))
+#define IGUI_GRID_OLD_MENU_XDef (0.6)
+#define IGUI_GRID_OLD_MENU_YDef (0.55)
+#define IGUI_GRID_OLD_MENU_X (profilenamespace getvariable ["IGUI_GRID_OLD_MENU_X",IGUI_GRID_OLD_MENU_XDef])
+#define IGUI_GRID_OLD_MENU_Y (profilenamespace getvariable ["IGUI_GRID_OLD_MENU_Y",IGUI_GRID_OLD_MENU_YDef])
+#define IGUI_GRID_OLD_MENU_W IGUI_GRID_OLD_W
+#define IGUI_GRID_OLD_MENU_H IGUI_GRID_OLD_H
+*/
+
+//--- IGUI Task
+#define IGUI_GRID_OLD_TASK_WAbs (12 * IGUI_GRID_OLD_W)
+#define IGUI_GRID_OLD_TASK_HAbs (2 * IGUI_GRID_OLD_H)
+#define IGUI_GRID_OLD_TASK_XDef (10 * IGUI_GRID_OLD_W + IGUI_GRID_OLD_X)
+#define IGUI_GRID_OLD_TASK_YDef (1 * IGUI_GRID_OLD_H + safezoneY)
+#define IGUI_GRID_OLD_TASK_X IGUI_GRID_OLD_TASK_XDef
+#define IGUI_GRID_OLD_TASK_Y IGUI_GRID_OLD_TASK_YDef
+#define IGUI_GRID_OLD_TASK_W IGUI_GRID_OLD_W
+#define IGUI_GRID_OLD_TASK_H IGUI_GRID_OLD_H
+
+//--- IGUI PIP
+#define IGUI_GRID_OLD_PIP_XDef (safezoneX + safezoneW - 6.5 * IGUI_GRID_OLD_W)
+#define IGUI_GRID_OLD_PIP_YDef (9 * IGUI_GRID_OLD_H + IGUI_GRID_OLD_Y)
+#define IGUI_GRID_OLD_PIP_WDef (6 * IGUI_GRID_OLD_W)
+#define IGUI_GRID_OLD_PIP_HDef (IGUI_GRID_OLD_PIP_WDef)
+//#define IGUI_GRID_OLD_PIP_X (profilenamespace getvariable ['IGUI_GRID_OLD_PIP_X',IGUI_GRID_OLD_PIP_XDef])
+//#define IGUI_GRID_OLD_PIP_Y (profilenamespace getvariable ['IGUI_GRID_OLD_PIP_Y',IGUI_GRID_OLD_PIP_YDef])
+//#define IGUI_GRID_OLD_PIP_WAbs (profilenamespace getvariable ['IGUI_GRID_OLD_PIP_W',IGUI_GRID_OLD_PIP_WDef])
+#define IGUI_GRID_OLD_PIP_X IGUI_GRID_OLD_PIP_XDef
+#define IGUI_GRID_OLD_PIP_Y IGUI_GRID_OLD_PIP_YDef
+#define IGUI_GRID_OLD_PIP_WAbs IGUI_GRID_OLD_PIP_WDef
+#define IGUI_GRID_OLD_PIP_HAbs (IGUI_GRID_OLD_PIP_WAbs)
+
+
+//--- MUF - experimental optics grid
+// #define GUI_GRID_OLD_OPTICS_X (SafezoneX + ((SafezoneW - SafezoneH) / 2))
+// #define GUI_GRID_OLD_OPTICS_Y (SafezoneY)
+// #define GUI_GRID_OLD_OPTICS_W (0.01875)
+// #define GUI_GRID_OLD_OPTICS_H (0.025)
+// #define GUI_GRID_OLD_OPTICS_WAbs ((SafezoneX + ((SafezoneW - SafezoneH) / 2)) / 0.01875)
+// #define GUI_GRID_OLD_OPTICS_HAbs (SafezoneH / 0.01875)
+
+#define GUI_GRID_OLD_OPTICS_X (SafezoneX + ((SafezoneW - SafezoneH) / 2))
+#define GUI_GRID_OLD_OPTICS_Y (SafezoneY)
+#define GUI_GRID_OLD_OPTICS_W (0.01875 * SafezoneH)
+#define GUI_GRID_OLD_OPTICS_H (0.025 * SafezoneH)
+#define GUI_GRID_OLD_OPTICS_WAbs (SafezoneH)
+#define GUI_GRID_OLD_OPTICS_HAbs (SafezoneH)
+
+//--- MUF - experimental AV Terminal grid
+#define GUI_GRID_OLD_AV_TERMINAL_X (safezoneX)
+#define GUI_GRID_OLD_AV_TERMINAL_Y (safezoneY)
+#define GUI_GRID_OLD_AV_TERMINAL_W (safezoneW / 64)
+#define GUI_GRID_OLD_AV_TERMINAL_H (safezoneH / 40)
+#define GUI_GRID_OLD_AV_TERMINAL_WAbs (safezoneW)
+#define GUI_GRID_OLD_AV_TERMINAL_HAbs (safezoneH)
\ No newline at end of file
diff --git a/Sources/epoch_code/Data/UI/has_electricity_ca.paa b/Sources/epoch_code/Data/UI/has_electricity_ca.paa
new file mode 100644
index 00000000..53542d8f
Binary files /dev/null and b/Sources/epoch_code/Data/UI/has_electricity_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/has_fire_ca.paa b/Sources/epoch_code/Data/UI/has_fire_ca.paa
new file mode 100644
index 00000000..d777cd1c
Binary files /dev/null and b/Sources/epoch_code/Data/UI/has_fire_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/has_fuel_ca.paa b/Sources/epoch_code/Data/UI/has_fuel_ca.paa
new file mode 100644
index 00000000..754efade
Binary files /dev/null and b/Sources/epoch_code/Data/UI/has_fuel_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/has_water_ca.paa b/Sources/epoch_code/Data/UI/has_water_ca.paa
new file mode 100644
index 00000000..d3086b5b
Binary files /dev/null and b/Sources/epoch_code/Data/UI/has_water_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/hazzard_ca.paa b/Sources/epoch_code/Data/UI/hazzard_ca.paa
new file mode 100644
index 00000000..ef9479fd
Binary files /dev/null and b/Sources/epoch_code/Data/UI/hazzard_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/heart_ca.paa b/Sources/epoch_code/Data/UI/heart_ca.paa
new file mode 100644
index 00000000..f1b39749
Binary files /dev/null and b/Sources/epoch_code/Data/UI/heart_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/hunger_ca.paa b/Sources/epoch_code/Data/UI/hunger_ca.paa
new file mode 100644
index 00000000..5656ea03
Binary files /dev/null and b/Sources/epoch_code/Data/UI/hunger_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_0.paa b/Sources/epoch_code/Data/UI/loading_bar_0.paa
new file mode 100644
index 00000000..bf376c8a
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_0.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_1.paa b/Sources/epoch_code/Data/UI/loading_bar_1.paa
new file mode 100644
index 00000000..963661cc
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_1.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_10.paa b/Sources/epoch_code/Data/UI/loading_bar_10.paa
new file mode 100644
index 00000000..2cc11427
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_10.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_100.paa b/Sources/epoch_code/Data/UI/loading_bar_100.paa
new file mode 100644
index 00000000..041fd64e
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_100.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_11.paa b/Sources/epoch_code/Data/UI/loading_bar_11.paa
new file mode 100644
index 00000000..e1ce522b
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_11.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_12.paa b/Sources/epoch_code/Data/UI/loading_bar_12.paa
new file mode 100644
index 00000000..e1ce522b
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_12.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_13.paa b/Sources/epoch_code/Data/UI/loading_bar_13.paa
new file mode 100644
index 00000000..3cfdf3ee
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_13.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_14.paa b/Sources/epoch_code/Data/UI/loading_bar_14.paa
new file mode 100644
index 00000000..17b2febb
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_14.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_15.paa b/Sources/epoch_code/Data/UI/loading_bar_15.paa
new file mode 100644
index 00000000..fed22d3c
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_15.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_16.paa b/Sources/epoch_code/Data/UI/loading_bar_16.paa
new file mode 100644
index 00000000..6dee21d7
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_16.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_17.paa b/Sources/epoch_code/Data/UI/loading_bar_17.paa
new file mode 100644
index 00000000..aec6cecb
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_17.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_18.paa b/Sources/epoch_code/Data/UI/loading_bar_18.paa
new file mode 100644
index 00000000..366ce1a3
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_18.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_19.paa b/Sources/epoch_code/Data/UI/loading_bar_19.paa
new file mode 100644
index 00000000..ca73bd4b
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_19.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_2.paa b/Sources/epoch_code/Data/UI/loading_bar_2.paa
new file mode 100644
index 00000000..3e42e53b
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_2.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_20.paa b/Sources/epoch_code/Data/UI/loading_bar_20.paa
new file mode 100644
index 00000000..b1e10041
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_20.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_21.paa b/Sources/epoch_code/Data/UI/loading_bar_21.paa
new file mode 100644
index 00000000..f590ea4d
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_21.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_22.paa b/Sources/epoch_code/Data/UI/loading_bar_22.paa
new file mode 100644
index 00000000..f54890be
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_22.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_23.paa b/Sources/epoch_code/Data/UI/loading_bar_23.paa
new file mode 100644
index 00000000..ef7406ae
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_23.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_24.paa b/Sources/epoch_code/Data/UI/loading_bar_24.paa
new file mode 100644
index 00000000..e75a350c
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_24.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_25.paa b/Sources/epoch_code/Data/UI/loading_bar_25.paa
new file mode 100644
index 00000000..933a115e
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_25.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_26.paa b/Sources/epoch_code/Data/UI/loading_bar_26.paa
new file mode 100644
index 00000000..e58914ed
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_26.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_27.paa b/Sources/epoch_code/Data/UI/loading_bar_27.paa
new file mode 100644
index 00000000..46e66dd1
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_27.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_28.paa b/Sources/epoch_code/Data/UI/loading_bar_28.paa
new file mode 100644
index 00000000..7b0f8dae
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_28.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_29.paa b/Sources/epoch_code/Data/UI/loading_bar_29.paa
new file mode 100644
index 00000000..64daf581
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_29.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_3.paa b/Sources/epoch_code/Data/UI/loading_bar_3.paa
new file mode 100644
index 00000000..19bd02b3
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_3.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_30.paa b/Sources/epoch_code/Data/UI/loading_bar_30.paa
new file mode 100644
index 00000000..c97f0870
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_30.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_31.paa b/Sources/epoch_code/Data/UI/loading_bar_31.paa
new file mode 100644
index 00000000..7247b81d
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_31.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_32.paa b/Sources/epoch_code/Data/UI/loading_bar_32.paa
new file mode 100644
index 00000000..24090b10
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_32.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_33.paa b/Sources/epoch_code/Data/UI/loading_bar_33.paa
new file mode 100644
index 00000000..27a8e842
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_33.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_34.paa b/Sources/epoch_code/Data/UI/loading_bar_34.paa
new file mode 100644
index 00000000..016355d4
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_34.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_35.paa b/Sources/epoch_code/Data/UI/loading_bar_35.paa
new file mode 100644
index 00000000..ffa05de4
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_35.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_36.paa b/Sources/epoch_code/Data/UI/loading_bar_36.paa
new file mode 100644
index 00000000..fd146530
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_36.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_37.paa b/Sources/epoch_code/Data/UI/loading_bar_37.paa
new file mode 100644
index 00000000..65de5f1a
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_37.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_38.paa b/Sources/epoch_code/Data/UI/loading_bar_38.paa
new file mode 100644
index 00000000..7a2f7b5e
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_38.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_39.paa b/Sources/epoch_code/Data/UI/loading_bar_39.paa
new file mode 100644
index 00000000..fce19368
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_39.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_4.paa b/Sources/epoch_code/Data/UI/loading_bar_4.paa
new file mode 100644
index 00000000..8aad2663
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_4.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_40.paa b/Sources/epoch_code/Data/UI/loading_bar_40.paa
new file mode 100644
index 00000000..68ef995b
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_40.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_41.paa b/Sources/epoch_code/Data/UI/loading_bar_41.paa
new file mode 100644
index 00000000..8fefa1e3
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_41.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_42.paa b/Sources/epoch_code/Data/UI/loading_bar_42.paa
new file mode 100644
index 00000000..2bb384b2
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_42.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_43.paa b/Sources/epoch_code/Data/UI/loading_bar_43.paa
new file mode 100644
index 00000000..580ccac1
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_43.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_44.paa b/Sources/epoch_code/Data/UI/loading_bar_44.paa
new file mode 100644
index 00000000..d1f710f6
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_44.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_45.paa b/Sources/epoch_code/Data/UI/loading_bar_45.paa
new file mode 100644
index 00000000..0dafebc0
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_45.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_46.paa b/Sources/epoch_code/Data/UI/loading_bar_46.paa
new file mode 100644
index 00000000..4ede7791
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_46.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_47.paa b/Sources/epoch_code/Data/UI/loading_bar_47.paa
new file mode 100644
index 00000000..31ba9436
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_47.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_48.paa b/Sources/epoch_code/Data/UI/loading_bar_48.paa
new file mode 100644
index 00000000..2639b00c
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_48.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_49.paa b/Sources/epoch_code/Data/UI/loading_bar_49.paa
new file mode 100644
index 00000000..1e82020c
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_49.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_5.paa b/Sources/epoch_code/Data/UI/loading_bar_5.paa
new file mode 100644
index 00000000..669cb547
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_5.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_50.paa b/Sources/epoch_code/Data/UI/loading_bar_50.paa
new file mode 100644
index 00000000..a9440cd6
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_50.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_51.paa b/Sources/epoch_code/Data/UI/loading_bar_51.paa
new file mode 100644
index 00000000..6c962030
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_51.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_52.paa b/Sources/epoch_code/Data/UI/loading_bar_52.paa
new file mode 100644
index 00000000..82cbd66f
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_52.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_53.paa b/Sources/epoch_code/Data/UI/loading_bar_53.paa
new file mode 100644
index 00000000..8c72e23a
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_53.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_54.paa b/Sources/epoch_code/Data/UI/loading_bar_54.paa
new file mode 100644
index 00000000..d4164921
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_54.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_55.paa b/Sources/epoch_code/Data/UI/loading_bar_55.paa
new file mode 100644
index 00000000..82ae11aa
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_55.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_56.paa b/Sources/epoch_code/Data/UI/loading_bar_56.paa
new file mode 100644
index 00000000..c445458c
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_56.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_57.paa b/Sources/epoch_code/Data/UI/loading_bar_57.paa
new file mode 100644
index 00000000..5571d35a
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_57.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_58.paa b/Sources/epoch_code/Data/UI/loading_bar_58.paa
new file mode 100644
index 00000000..8bb2307e
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_58.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_59.paa b/Sources/epoch_code/Data/UI/loading_bar_59.paa
new file mode 100644
index 00000000..391fafd1
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_59.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_6.paa b/Sources/epoch_code/Data/UI/loading_bar_6.paa
new file mode 100644
index 00000000..043f2b49
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_6.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_60.paa b/Sources/epoch_code/Data/UI/loading_bar_60.paa
new file mode 100644
index 00000000..45595187
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_60.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_61.paa b/Sources/epoch_code/Data/UI/loading_bar_61.paa
new file mode 100644
index 00000000..51a40ee7
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_61.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_62.paa b/Sources/epoch_code/Data/UI/loading_bar_62.paa
new file mode 100644
index 00000000..988a6a89
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_62.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_63.paa b/Sources/epoch_code/Data/UI/loading_bar_63.paa
new file mode 100644
index 00000000..98d060a1
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_63.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_64.paa b/Sources/epoch_code/Data/UI/loading_bar_64.paa
new file mode 100644
index 00000000..2a8688e8
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_64.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_65.paa b/Sources/epoch_code/Data/UI/loading_bar_65.paa
new file mode 100644
index 00000000..75c556c8
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_65.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_66.paa b/Sources/epoch_code/Data/UI/loading_bar_66.paa
new file mode 100644
index 00000000..fc8787da
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_66.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_67.paa b/Sources/epoch_code/Data/UI/loading_bar_67.paa
new file mode 100644
index 00000000..aa683877
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_67.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_68.paa b/Sources/epoch_code/Data/UI/loading_bar_68.paa
new file mode 100644
index 00000000..18125e68
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_68.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_69.paa b/Sources/epoch_code/Data/UI/loading_bar_69.paa
new file mode 100644
index 00000000..56b1cea9
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_69.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_7.paa b/Sources/epoch_code/Data/UI/loading_bar_7.paa
new file mode 100644
index 00000000..6f9eaeaf
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_7.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_70.paa b/Sources/epoch_code/Data/UI/loading_bar_70.paa
new file mode 100644
index 00000000..e2002270
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_70.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_71.paa b/Sources/epoch_code/Data/UI/loading_bar_71.paa
new file mode 100644
index 00000000..9e39817e
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_71.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_72.paa b/Sources/epoch_code/Data/UI/loading_bar_72.paa
new file mode 100644
index 00000000..d546ead2
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_72.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_73.paa b/Sources/epoch_code/Data/UI/loading_bar_73.paa
new file mode 100644
index 00000000..88a61856
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_73.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_74.paa b/Sources/epoch_code/Data/UI/loading_bar_74.paa
new file mode 100644
index 00000000..18264805
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_74.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_75.paa b/Sources/epoch_code/Data/UI/loading_bar_75.paa
new file mode 100644
index 00000000..0b443bc1
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_75.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_76.paa b/Sources/epoch_code/Data/UI/loading_bar_76.paa
new file mode 100644
index 00000000..dc215e30
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_76.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_77.paa b/Sources/epoch_code/Data/UI/loading_bar_77.paa
new file mode 100644
index 00000000..8a5b9899
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_77.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_78.paa b/Sources/epoch_code/Data/UI/loading_bar_78.paa
new file mode 100644
index 00000000..d4714b72
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_78.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_79.paa b/Sources/epoch_code/Data/UI/loading_bar_79.paa
new file mode 100644
index 00000000..842676fb
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_79.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_8.paa b/Sources/epoch_code/Data/UI/loading_bar_8.paa
new file mode 100644
index 00000000..4d027732
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_8.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_80.paa b/Sources/epoch_code/Data/UI/loading_bar_80.paa
new file mode 100644
index 00000000..f4a7dd02
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_80.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_81.paa b/Sources/epoch_code/Data/UI/loading_bar_81.paa
new file mode 100644
index 00000000..caad36f8
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_81.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_82.paa b/Sources/epoch_code/Data/UI/loading_bar_82.paa
new file mode 100644
index 00000000..6d9c4f4c
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_82.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_83.paa b/Sources/epoch_code/Data/UI/loading_bar_83.paa
new file mode 100644
index 00000000..bb92889e
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_83.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_84.paa b/Sources/epoch_code/Data/UI/loading_bar_84.paa
new file mode 100644
index 00000000..f38dcd04
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_84.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_85.paa b/Sources/epoch_code/Data/UI/loading_bar_85.paa
new file mode 100644
index 00000000..deecc685
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_85.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_86.paa b/Sources/epoch_code/Data/UI/loading_bar_86.paa
new file mode 100644
index 00000000..f75fa7e0
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_86.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_87.paa b/Sources/epoch_code/Data/UI/loading_bar_87.paa
new file mode 100644
index 00000000..1d541ba2
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_87.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_88.paa b/Sources/epoch_code/Data/UI/loading_bar_88.paa
new file mode 100644
index 00000000..45da3b8d
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_88.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_89.paa b/Sources/epoch_code/Data/UI/loading_bar_89.paa
new file mode 100644
index 00000000..8c63ab98
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_89.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_9.paa b/Sources/epoch_code/Data/UI/loading_bar_9.paa
new file mode 100644
index 00000000..a1c7b2ae
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_9.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_90.paa b/Sources/epoch_code/Data/UI/loading_bar_90.paa
new file mode 100644
index 00000000..cae086f5
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_90.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_91.paa b/Sources/epoch_code/Data/UI/loading_bar_91.paa
new file mode 100644
index 00000000..af567a80
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_91.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_92.paa b/Sources/epoch_code/Data/UI/loading_bar_92.paa
new file mode 100644
index 00000000..50f87872
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_92.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_93.paa b/Sources/epoch_code/Data/UI/loading_bar_93.paa
new file mode 100644
index 00000000..39accc2f
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_93.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_94.paa b/Sources/epoch_code/Data/UI/loading_bar_94.paa
new file mode 100644
index 00000000..70a2106a
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_94.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_95.paa b/Sources/epoch_code/Data/UI/loading_bar_95.paa
new file mode 100644
index 00000000..5aec709a
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_95.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_96.paa b/Sources/epoch_code/Data/UI/loading_bar_96.paa
new file mode 100644
index 00000000..b1574eb5
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_96.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_97.paa b/Sources/epoch_code/Data/UI/loading_bar_97.paa
new file mode 100644
index 00000000..6afb2fdb
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_97.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_98.paa b/Sources/epoch_code/Data/UI/loading_bar_98.paa
new file mode 100644
index 00000000..a59d2060
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_98.paa differ
diff --git a/Sources/epoch_code/Data/UI/loading_bar_99.paa b/Sources/epoch_code/Data/UI/loading_bar_99.paa
new file mode 100644
index 00000000..debb77d1
Binary files /dev/null and b/Sources/epoch_code/Data/UI/loading_bar_99.paa differ
diff --git a/Sources/epoch_code/Data/UI/need_electricity_ca.paa b/Sources/epoch_code/Data/UI/need_electricity_ca.paa
new file mode 100644
index 00000000..f3937f92
Binary files /dev/null and b/Sources/epoch_code/Data/UI/need_electricity_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/need_fire_ca.paa b/Sources/epoch_code/Data/UI/need_fire_ca.paa
new file mode 100644
index 00000000..7ec2b25f
Binary files /dev/null and b/Sources/epoch_code/Data/UI/need_fire_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/need_fuel_ca.paa b/Sources/epoch_code/Data/UI/need_fuel_ca.paa
new file mode 100644
index 00000000..127acfd5
Binary files /dev/null and b/Sources/epoch_code/Data/UI/need_fuel_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/need_water_ca.paa b/Sources/epoch_code/Data/UI/need_water_ca.paa
new file mode 100644
index 00000000..341ccb37
Binary files /dev/null and b/Sources/epoch_code/Data/UI/need_water_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/oxygen_ca.paa b/Sources/epoch_code/Data/UI/oxygen_ca.paa
new file mode 100644
index 00000000..56106426
Binary files /dev/null and b/Sources/epoch_code/Data/UI/oxygen_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/sun_ca.paa b/Sources/epoch_code/Data/UI/sun_ca.paa
new file mode 100644
index 00000000..96af2221
Binary files /dev/null and b/Sources/epoch_code/Data/UI/sun_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/thirst_ca.paa b/Sources/epoch_code/Data/UI/thirst_ca.paa
new file mode 100644
index 00000000..89b8b307
Binary files /dev/null and b/Sources/epoch_code/Data/UI/thirst_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/trophy_ca.paa b/Sources/epoch_code/Data/UI/trophy_ca.paa
new file mode 100644
index 00000000..b7137b30
Binary files /dev/null and b/Sources/epoch_code/Data/UI/trophy_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/ui_crossbones_ca.paa b/Sources/epoch_code/Data/UI/ui_crossbones_ca.paa
new file mode 100644
index 00000000..e0b16b74
Binary files /dev/null and b/Sources/epoch_code/Data/UI/ui_crossbones_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/ui_exclam_ca.paa b/Sources/epoch_code/Data/UI/ui_exclam_ca.paa
new file mode 100644
index 00000000..81e64031
Binary files /dev/null and b/Sources/epoch_code/Data/UI/ui_exclam_ca.paa differ
diff --git a/Sources/epoch_code/Data/UI/ui_question_ca.paa b/Sources/epoch_code/Data/UI/ui_question_ca.paa
new file mode 100644
index 00000000..b21f87de
Binary files /dev/null and b/Sources/epoch_code/Data/UI/ui_question_ca.paa differ
diff --git a/Sources/epoch_code/README.TXT b/Sources/epoch_code/README.TXT
new file mode 100644
index 00000000..b155c614
--- /dev/null
+++ b/Sources/epoch_code/README.TXT
@@ -0,0 +1,3 @@
+All content in this PBO was made exclusively for A3 Epoch mod.
+
+To use/edit/distribute any of the content in this mod please contact vbawol@veteranbastards.com or ptomany@gmail.com
\ No newline at end of file
diff --git a/Sources/epoch_code/System/Animal_brain.fsm b/Sources/epoch_code/System/Animal_brain.fsm
new file mode 100644
index 00000000..8af1e558
--- /dev/null
+++ b/Sources/epoch_code/System/Animal_brain.fsm
@@ -0,0 +1,408 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"init",0,250,375.000000,-225.000000,475.000000,-175.000000,0.000000,"init"};
+item1[] = {"true",8,218,375.000000,-125.000000,475.000000,-75.000000,0.000000,"true"};
+item2[] = {"Wait_Loop",2,250,375.000000,-25.000000,475.000000,25.000000,0.000000,"Wait Loop"};
+item3[] = {"No_Target",4,218,200.000000,150.000000,300.000000,200.000000,0.000000,"No Target"};
+item4[] = {"Targets__Found",4,218,575.000000,150.000000,675.000000,200.000000,0.000000,"Targets " \n "Found"};
+item5[] = {"Player__Too_Far",4,218,125.000000,325.000000,225.000000,375.000000,0.000000,"Player " \n "Too Far"};
+item6[] = {"Loop",4,218,375.000000,50.000000,475.000000,100.000000,0.000000,"Loop"};
+item7[] = {"",7,210,96.000000,521.000000,103.999992,529.000000,0.000000,""};
+item8[] = {"",7,210,96.000008,-4.000008,104.000000,4.000008,0.000000,""};
+item9[] = {"Look_for__Target",2,250,375.000000,150.000000,475.000000,200.000000,0.000000,"Look for " \n "Targets"};
+item10[] = {"true",8,218,375.000000,500.000000,475.000000,550.000000,0.000000,"true"};
+item11[] = {"Dead",4,218,375.000000,225.000000,475.000000,275.000000,1.000000,"Dead"};
+item12[] = {"Dead",1,250,375.000000,325.000000,475.000000,375.000000,0.000000,"Dead"};
+item13[] = {"Flight",2,250,500.000000,425.000000,600.000000,475.000000,0.000000,"Flight"};
+item14[] = {"Delete",1,250,125.000000,425.000000,225.000000,475.000000,0.000000,"Delete"};
+item15[] = {"Process",2,250,200.000000,250.000000,300.000000,300.000000,0.000000,"Process"};
+item16[] = {"Wander",2,250,250.000000,425.000000,350.000000,475.000000,0.000000,"Wander"};
+item17[] = {"Not_Too_Far",4,218,250.000000,325.000000,350.000000,375.000000,0.000000,"Not Too" \n "Far"};
+item18[] = {"Process_1",2,250,575.000000,250.000000,675.000000,300.000000,0.000000,"Process"};
+item19[] = {"Fight",4,218,625.000000,325.000000,725.000000,375.000000,0.000000,"Fight"};
+item20[] = {"Flight",4,218,500.000000,325.000000,600.000000,375.000000,0.000000,"Flight"};
+item21[] = {"Fight",2,4346,625.000000,425.000000,725.000000,475.000000,0.000000,"Fight"};
+item22[] = {"Delete_1",1,250,675.000000,-25.000000,775.000000,25.000000,0.000000,"Delete"};
+item23[] = {"Too_many",4,218,525.000000,-25.000000,625.000000,25.000000,0.000000,"Too many"};
+link0[] = {0,1};
+link1[] = {1,2};
+link2[] = {2,6};
+link3[] = {2,23};
+link4[] = {3,15};
+link5[] = {4,18};
+link6[] = {5,14};
+link7[] = {6,9};
+link8[] = {7,8};
+link9[] = {8,2};
+link10[] = {9,3};
+link11[] = {9,4};
+link12[] = {9,11};
+link13[] = {10,7};
+link14[] = {11,12};
+link15[] = {13,10};
+link16[] = {15,5};
+link17[] = {15,17};
+link18[] = {16,10};
+link19[] = {17,16};
+link20[] = {18,19};
+link21[] = {18,20};
+link22[] = {19,21};
+link23[] = {20,13};
+link24[] = {21,10};
+link25[] = {23,22};
+globals[] = {25.000000,1,0,0,0,640,480,1,60,6316128,1,65.053413,836.813538,684.337891,-110.918762,853,911,1};
+window[] = {2,-1,-1,-1,-1,753,25,1063,25,3,871};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "animals";
+ class States
+ {
+ /*%FSM*/
+ class init
+ {
+ name = "init";
+ init = /*%FSM*/"_animalAgent = _this select 0;" \n
+ "_fightOrFlight = _this select 1;" \n
+ "" \n
+ "_courageTest = true;" \n
+ "" \n
+ "_animalType = typeOf _animalAgent;" \n
+ "_isDog = _animalType in [""Fin_random_EPOCH"", ""Alsatian_Random_EPOCH""];" \n
+ "_isChicken = _animalType in [""Hen_random_EPOCH"", ""Cock_random_EPOCH""];" \n
+ "" \n
+ "_animalAgent disableAI ""FSM"";" \n
+ "_animalAgent setBehaviour ""CARELESS"";" \n
+ "_animalAgent setCombatMode ""RED"";" \n
+ "_animalAgent setSkill 0;" \n
+ "" \n
+ "_lastRun = diag_tickTime;" \n
+ "_lastAttack = diag_tickTime;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Wait_Loop";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!(isNull _animalAgent)"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Wait_Loop
+ {
+ name = "Wait_Loop";
+ init = /*%FSM*/"// check loop" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Too_many
+ {
+ priority = 0.000000;
+ to="Delete_1";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(count(_animalAgent nearEntities[""Animal_Base_F"", 30])) > 2" \n
+ " "/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Loop
+ {
+ priority = 0.000000;
+ to="Look_for__Target";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"((diag_tickTime - _lastRun) > 5)"/*%FSM*/;
+ action=/*%FSM*/"_lastRun = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Look_for__Target
+ {
+ name = "Look_for__Target";
+ init = /*%FSM*/"// check schedule" \n
+ "" \n
+ "_nearPlayersRaw = nearestObjects [getPosATL _animalAgent, [""Man"", ""Air"", ""Car"", ""Motorcycle"", ""Tank""], 100];" \n
+ "" \n
+ "_target = objNull;" \n
+ "{" \n
+ " if (isPlayer _x) exitWith {" \n
+ " _target = _x;" \n
+ " };" \n
+ "} forEach _nearPlayersRaw;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Dead
+ {
+ priority = 1.000000;
+ to="Dead";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!alive _animalAgent"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Targets__Found
+ {
+ priority = 0.000000;
+ to="Process_1";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!isNull _target"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class No_Target
+ {
+ priority = 0.000000;
+ to="Process";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"isNull _target"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Dead
+ {
+ name = "Dead";
+ init = /*%FSM*/"diag_log format[""KILLED Animal: %1"", _animalAgent];" \n
+ "" \n
+ "_animalAgent spawn {" \n
+ " uiSleep 60;" \n
+ " deleteVehicle _this;" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Flight
+ {
+ name = "Flight";
+ init = /*%FSM*/"// Flight" \n
+ "_travelDir = [_target, _animalAgent] call BIS_fnc_dirTo;" \n
+ "_newPos = [_animalAgent, 100, _travelDir+((random 20)-10)] call BIS_fnc_relPos;" \n
+ "" \n
+ "if (_isChicken) then {" \n
+ " if (random 1 < 0.3) then {" \n
+ " _sounds = [""hed_cluck0"",""hed_cluck1"",""hed_cluck2""];" \n
+ " _sound = _sounds select (floor (random (count _sounds)));" \n
+ " _animalAgent say3D _sound;" \n
+ " EPOCH_say3D_PVS = [player, _animalAgent, (EPOCH_sounds find _sound),Epoch_personalToken];" \n
+ " publicVariableServer ""EPOCH_say3D_PVS"";" \n
+ " };" \n
+ "};" \n
+ "" \n
+ "_animalAgent moveTo _newPos;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Wait_Loop";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Delete
+ {
+ name = "Delete";
+ init = /*%FSM*/"deleteVehicle _animalAgent;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Process
+ {
+ name = "Process";
+ init = /*%FSM*/"_tooFar = (player distance _animalAgent) > 1000;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Not_Too_Far
+ {
+ priority = 0.000000;
+ to="Wander";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_tooFar"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Player__Too_Far
+ {
+ priority = 0.000000;
+ to="Delete";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_tooFar"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Wander
+ {
+ name = "Wander";
+ init = /*%FSM*/"_animalAgent forceSpeed 0.5;" \n
+ "_currentTargetPos = getPosATL _animalAgent;" \n
+ "_travelDir = (getDir _animalAgent)+((random 20)-10);" \n
+ "_newTargetPos = [_animalAgent, 10, _travelDir] call BIS_fnc_relPos;" \n
+ "if ((_currentTargetPos distance _newTargetPos) > 0) then {" \n
+ " _animalAgent moveTo _newTargetPos;" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Wait_Loop";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Process_1
+ {
+ name = "Process_1";
+ init = /*%FSM*/"_animalAgent forceSpeed -1;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Flight
+ {
+ priority = 0.000000;
+ to="Flight";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_fightOrFlight"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Fight
+ {
+ priority = 0.000000;
+ to="Fight";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_fightOrFlight"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Fight
+ {
+ name = "Fight";
+ init = /*%FSM*/"// Fight" \n
+ "_dirTo = [_animalAgent, _target] call BIS_fnc_dirTo;" \n
+ "_targetPos = [_target, 1, _dirTo] call BIS_fnc_relPos;" \n
+ "_animalAgent moveTo _targetPos;" \n
+ "" \n
+ "if (_courageTest) then {" \n
+ " if (random 1 < 0.5) then { " \n
+ " _fightOrFlight = false;" \n
+ " if (_isDog) then {" \n
+ " _animalAgent say3D ""dog_cry"";" \n
+ " EPOCH_say3D_PVS = [player, _animalAgent, 3,Epoch_personalToken];" \n
+ " publicVariableServer ""EPOCH_say3D_PVS"";" \n
+ " };" \n
+ " };" \n
+ " _courageTest = false;" \n
+ "};" \n
+ "" \n
+ "if (_target distance _animalAgent < 4) then {" \n
+ "" \n
+ " if (_isDog) then {" \n
+ " _animalAgent say3D ""dog_bark"";" \n
+ " EPOCH_say3D_PVS = [player, _animalAgent, 2,Epoch_personalToken];" \n
+ " publicVariableServer ""EPOCH_say3D_PVS"";" \n
+ " _animalAgent playMoveNow ""Dog_Bark""; " \n
+ " };" \n
+ " _animalAgent setDir _dirTo; " \n
+ " _pos = getPosATL _target;" \n
+ "} else {" \n
+ " if (_isDog) then {" \n
+ " if (random 1 < 0.5) then { " \n
+ " _animalAgent say3D ""dog_bark"";" \n
+ " EPOCH_say3D_PVS = [player, _animalAgent, 2,Epoch_personalToken];" \n
+ " publicVariableServer ""EPOCH_say3D_PVS"";" \n
+ " };" \n
+ " };" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Wait_Loop";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Delete_1
+ {
+ name = "Delete_1";
+ init = /*%FSM*/"deleteVehicle _animalAgent;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ };
+ initState="init";
+ finalStates[] =
+ {
+ "Dead" ,
+ "Delete" ,
+ "Delete_1"
+ };
+};
+/*%FSM*/
\ No newline at end of file
diff --git a/Sources/epoch_code/System/Chicken_Brain.fsm b/Sources/epoch_code/System/Chicken_Brain.fsm
new file mode 100644
index 00000000..28def171
--- /dev/null
+++ b/Sources/epoch_code/System/Chicken_Brain.fsm
@@ -0,0 +1,349 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"chicken",0,4346,-306.490601,-197.039688,-216.490692,-147.039795,0.000000,"chicken"};
+item1[] = {"_",8,218,62.332706,-185.990021,114.284866,-157.584717,0.000000,""};
+item2[] = {"decision",2,250,165.295456,-196.723892,255.295410,-146.723892,0.000000,"decision"};
+item3[] = {"decision_made",4,218,165.267090,-53.833382,255.267029,-3.833395,100.000000,"decision made"};
+item4[] = {"action",2,250,45.978439,130.034073,135.978394,180.034134,0.000000,"action"};
+item5[] = {"actioned",4,218,-165.144226,130.039581,-75.144043,180.039612,100.000000,"actioned"};
+item6[] = {"dispose",4,218,307.945099,-276.114319,397.945160,-226.114349,90.000000,"dispose"};
+item7[] = {"_",8,218,64.556526,282.467346,116.508621,310.872589,0.000000,""};
+item8[] = {"reset_vars",2,250,-57.248745,-196.860123,32.751255,-146.860138,0.000000,"reset vars"};
+item9[] = {"_",8,218,-152.435730,-185.989990,-100.483566,-157.584686,0.000000,""};
+item10[] = {"met",4,218,-166.567764,-125.494614,-76.567673,-75.494598,10.000000,"met"};
+item11[] = {"_",8,218,64.124817,-17.502594,116.076874,10.902637,5.000000,""};
+item12[] = {"end",1,250,376.909119,265.283997,466.909119,315.283997,0.000000,"end"};
+item13[] = {"_",8,218,395.047943,158.480392,447.000031,186.885605,0.000000,""};
+item14[] = {"dispose",4,218,206.606644,27.804543,296.606628,77.804550,80.000000,"dispose"};
+item15[] = {"dispose",2,250,377.031403,29.348614,467.031403,79.348602,0.000000,"dispose"};
+item16[] = {"criteria",2,250,-166.153702,-28.650204,-76.153595,21.349773,0.000000,"criteria"};
+item17[] = {"lay",4,218,338.653534,-196.376328,428.653534,-146.376312,50.000000,"lay"};
+item18[] = {"lay_egg",4,218,209.462189,129.238632,299.462189,179.238632,60.000000,"lay egg"};
+item19[] = {"lay_egg",2,250,210.780411,271.612823,300.780365,321.612823,0.000000,"lay egg"};
+item20[] = {"no_decision",4,218,165.958954,-303.156921,255.958939,-253.156921,5.000000,"no decision"};
+item21[] = {"update",2,250,44.677261,-304.475220,134.677246,-254.475189,0.000000,"update"};
+link0[] = {0,9};
+link1[] = {1,2};
+link2[] = {2,3};
+link3[] = {2,6};
+link4[] = {2,17};
+link5[] = {2,20};
+link6[] = {3,4};
+link7[] = {4,5};
+link8[] = {4,14};
+link9[] = {4,18};
+link10[] = {5,16};
+link11[] = {6,2};
+link12[] = {7,4};
+link13[] = {8,1};
+link14[] = {9,8};
+link15[] = {10,8};
+link16[] = {11,4};
+link17[] = {13,12};
+link18[] = {14,15};
+link19[] = {15,13};
+link20[] = {16,10};
+link21[] = {16,11};
+link22[] = {17,2};
+link23[] = {18,19};
+link24[] = {19,7};
+link25[] = {20,21};
+link26[] = {21,1};
+globals[] = {0.000000,0,0,0,16777215,640,480,1,82,6316128,1,-391.494690,743.543762,448.214935,-340.116058,861,598,1};
+window[] = {2,-1,-1,-1,-1,603,78,1103,78,3,879};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "chicken";
+ class States
+ {
+ /*%FSM*/
+ class chicken
+ {
+ name = "chicken";
+ init = /*%FSM*/"_animal = _this select 0;" \n
+ "_plyr = player;" \n
+ "_dispDist = 550;" \n
+ "" \n
+ "_eggTime = 45;" \n
+ "_eggCheck = diag_tickTime;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class decision
+ {
+ name = "decision";
+ init = /*%FSM*/"_plyrDist = _animal distance _plyr;" \n
+ "_animalPos = getPos _animal;" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class decision_made
+ {
+ priority = 100.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_decisionMade;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 90.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_plyrDist > _dispDist || !(alive _animal);"/*%FSM*/;
+ action=/*%FSM*/"_doDispose = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class lay
+ {
+ priority = 50.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"diag_tickTime > (_eggCheck + (_eggTime * 60)) ;"/*%FSM*/;
+ action=/*%FSM*/"_doEgg = true;" \n
+ "_decisionMade = true;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class no_decision
+ {
+ priority = 5.000000;
+ to="update";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_decisionMade;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class action
+ {
+ name = "action";
+ init = /*%FSM*/"//intentionally left blank"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class actioned
+ {
+ priority = 100.000000;
+ to="criteria";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_actionDone;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 80.000000;
+ to="dispose";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doDispose;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class lay_egg
+ {
+ priority = 60.000000;
+ to="lay_egg";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doEgg;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class reset_vars
+ {
+ name = "reset_vars";
+ init = /*%FSM*/"//Routine" \n
+ "_actionDone = false;" \n
+ "_decisionMade = false;" \n
+ "_sWait = 0;" \n
+ "_doDispose = false;" \n
+ "_criteria = Nil;" \n
+ "_criteriaMet = false;" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "//Decision" \n
+ "_animalPos=[0,0,0];" \n
+ "" \n
+ "//Special" \n
+ "_doEgg = false;" \n
+ "_posWH = [];" \n
+ "_egg = objNull;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ name = "dispose";
+ init = /*%FSM*/"_animal spawn {" \n
+ " uiSleep 60;" \n
+ " deleteVehicle _this;" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class criteria
+ {
+ name = "criteria";
+ init = /*%FSM*/"//intentionally left blank"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class met
+ {
+ priority = 10.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(call compile _criteria) || (diag_tickTime > (_t + _sWait));"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class lay_egg
+ {
+ name = "lay_egg";
+ init = /*%FSM*/"_posWH = getPos _animal;" \n
+ "_egg = createVehicle[""groundWeaponHolder"", _posWH, [], 0, ""CAN_COLLIDE""];" \n
+ "_egg setPosATL _posWH;" \n
+ "_egg addMagazineCargoGlobal[""PartOreGold"", 1];" \n
+ "_eggCheck = diag_tickTime;" \n
+ "" \n
+ "_sWait = 3;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = format [""%1"", false ];"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class update
+ {
+ name = "update";
+ init = /*%FSM*/"//intentionally left blank"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="chicken";
+ finalStates[] =
+ {
+ "end"
+ };
+};
+/*%FSM*/
diff --git a/Sources/epoch_code/System/Copter_brain.fsm b/Sources/epoch_code/System/Copter_brain.fsm
new file mode 100644
index 00000000..388ad7ea
--- /dev/null
+++ b/Sources/epoch_code/System/Copter_brain.fsm
@@ -0,0 +1,544 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"copter",0,4346,77.124176,-2127.698242,167.124191,-2077.697266,0.000000,"copter"};
+item1[] = {"update",2,250,76.399269,-1842.943848,166.399292,-1792.943848,0.000000,"update"};
+item2[] = {"player_see",4,218,230.161133,-1924.389893,320.161102,-1874.389893,20.000000,"player see"};
+item3[] = {"dead",4,218,-181.680664,-1843.368408,-91.680664,-1793.368408,100.000000,"dead"};
+item4[] = {"end",1,250,-182.661209,-1721.283813,-92.661232,-1671.283813,0.000000,"end"};
+item5[] = {"copter_move",2,250,465.176025,-1680.020264,555.176392,-1630.020264,0.000000,"copter move"};
+item6[] = {"near_target_pos",4,218,75.965195,-1679.590576,165.965347,-1629.590576,90.000000,"near target pos"};
+item7[] = {"wait_start",2,250,331.527832,-1758.595947,421.527863,-1708.595947,0.000000,"wait start"};
+item8[] = {"fuel_check",4,218,-71.656715,-1773.208618,18.343246,-1723.208618,95.000000,"fuel check"};
+item9[] = {"return_to_base",2,250,-71.634865,-1677.093506,18.365076,-1627.093506,0.000000,"return to base"};
+item10[] = {"hunt",2,250,464.930634,-1924.511353,554.930969,-1874.511353,0.000000,"hunt"};
+item11[] = {"target_in_range",4,218,-183.803268,-1931.368652,-93.803307,-1881.368652,40.000000,"target in range"};
+item12[] = {"_",8,218,486.477631,-1832.104126,533.887329,-1803.399170,0.000000,""};
+item13[] = {"out_of_sight",4,218,-72.170975,-1582.920410,17.829063,-1532.920410,1.000000,"out of sight"};
+item14[] = {"player_lost",4,218,206.928253,-1843.067993,296.928223,-1793.067993,30.000000,"player lost"};
+item15[] = {"player_hidden",4,218,167.131546,-1965.252563,257.131653,-1915.252075,10.000000,"player hidden"};
+item16[] = {"search",2,250,333.506439,-1965.507813,423.506744,-1915.507813,0.000000,"search"};
+item17[] = {"delete",2,250,-182.017578,-1584.171875,-92.017548,-1534.171875,0.000000,"delete"};
+item18[] = {"_",8,218,-162.792191,-1649.780273,-110.753067,-1622.927124,0.000000,""};
+item19[] = {"send_support",2,250,-183.828308,-2072.576172,-93.828339,-2022.575073,0.000000,"send support"};
+item20[] = {"new_player",2,250,343.614227,-1843.289429,433.614288,-1793.289551,0.000000,"new player"};
+item21[] = {"wait",4,218,172.726486,-1777.677124,262.726624,-1727.677124,1.000000,"wait"};
+item22[] = {"_",8,218,97.991913,-1951.730469,145.401703,-1926.729126,0.000000,""};
+item23[] = {"allow_arrival",2,250,200.448853,-1679.518433,290.448914,-1629.518433,0.000000,"allow arrival"};
+item24[] = {"wait",4,218,328.046783,-1680.387085,418.046783,-1630.387085,1.000000,"wait"};
+link0[] = {0,22};
+link1[] = {1,2};
+link2[] = {1,3};
+link3[] = {1,6};
+link4[] = {1,8};
+link5[] = {1,11};
+link6[] = {1,14};
+link7[] = {1,15};
+link8[] = {2,10};
+link9[] = {3,4};
+link10[] = {5,12};
+link11[] = {6,23};
+link12[] = {7,21};
+link13[] = {8,9};
+link14[] = {9,13};
+link15[] = {10,12};
+link16[] = {11,19};
+link17[] = {12,7};
+link18[] = {13,17};
+link19[] = {14,20};
+link20[] = {15,16};
+link21[] = {16,12};
+link22[] = {17,18};
+link23[] = {18,4};
+link24[] = {19,22};
+link25[] = {20,12};
+link26[] = {21,1};
+link27[] = {22,1};
+link28[] = {23,24};
+link29[] = {24,5};
+globals[] = {0.000000,0,0,0,0,640,480,1,55,0,1,-284.459595,633.086609,-1492.426025,-2128.185547,953,731,1};
+window[] = {2,-1,-1,-1,-1,709,353,1397,89,3,971};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "copter_ai";
+ class States
+ {
+ /*%FSM*/
+ class copter
+ {
+ name = "copter";
+ init = /*%FSM*/"_copter = _this select 0;" \n
+ "_coptergrp = group _copter;" \n
+ "_plyr= _this select 1;" \n
+ "_copterRng = _this select 2;" \n
+ "" \n
+ "_troopsOnGround = false;" \n
+ "_copterMinDist = getNumber (missionConfigFile >> ""CfgEpochUAV"" >> ""UAVMinDist"");" \n
+ "_copterMaxDist = getNumber (missionConfigFile >> ""CfgEpochUAV"" >> ""UAVMaxDist"") min 400;" \n
+ "_copterHeight = getNumber (missionConfigFile >> ""CfgEpochUAV"" >> ""UAVHeight"") min 280;" \n
+ "_copterHeightActual = 600;" \n
+ "_fuelLimit = 0.4;" \n
+ "_lastSeen = time;" \n
+ "_stillTime = time;" \n
+ "" \n
+ "//Check config vars" \n
+ "if(_copterMinDist < 8)then{_copterMinDist = 48;};" \n
+ "if(_copterMaxDist < 42)then{_copterMaxDist = 180;};" \n
+ "if(_copterHeight < 42)then{_copterHeight = 100;};" \n
+ "" \n
+ "_trgt = _plyr;" \n
+ "_wpIndex = 0;" \n
+ "_copterMoveTo=[0,0,0];" \n
+ "_copterLastPos=[0,0,0];" \n
+ "" \n
+ "_copterPos = getPosATL _copter;" \n
+ "" \n
+ "" \n
+ "_trgtPos = getPos _trgt;" \n
+ "" \n
+ "_copterMoveTo = [_trgtPos,_copterMinDist,_copterMaxDist,_copterHeight] call EPOCH_fnc_findSafePos;" \n
+ "_copterMoveTo set [2,_copterHeight];" \n
+ "_copter doMove _copterMoveTo;" \n
+ "_copter flyinheight _copterHeight;" \n
+ "" \n
+ "//debug" \n
+ "if (isNil ""axeDebug"") then {axeDebug = false;};" \n
+ "if (axeDebug) then {" \n
+ "axeTroopsSpawned = false;" \n
+ "axeDebugCount = 0;" \n
+ "axeCopter = _copter;" \n
+ "//_debug = _this select 3;" \n
+ "axeDebugProcedure=""start"";" \n
+ "axeCopterMoveTo = _copterMoveTo;" \n
+ "axeNewTargets = 0;" \n
+ "hint format[""Copter Spawning on %1 at %2"",_trgt,_copterMoveTo];" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="update";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class update
+ {
+ name = "update";
+ init = /*%FSM*/"_t = time;" \n
+ "_2dDistPlyr = _plyr distance2D (getPos _copter);" \n
+ "_canSeePlyr = (!lineIntersects [aimPos _plyr, aimPos _copter, _plyr, _copter]);" \n
+ "_copterHeightActual = (getPosATL _copter) select 2;" \n
+ "_copterPosActual = getPosATL _copter;" \n
+ "_nrPlayers = _copter nearEntities[[""Epoch_Male_F"", ""Epoch_Female_F""], 250];" \n
+ "" \n
+ "" \n
+ "//debug" \n
+ "if (axeDebug) then {" \n
+ "axePlayerCheck = _canSeePlyr;" \n
+ "axeUAVFuel = fuel _copter;" \n
+ "axeWaiting= false;" \n
+ "axeDistanceCheck = _copterMoveTo distance2D _copterPosActual" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class dead
+ {
+ priority = 100.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!alive _copter;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class fuel_check
+ {
+ priority = 95.000000;
+ to="return_to_base";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(fuel _copter) < _fuelLimit;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class near_target_pos
+ {
+ priority = 90.000000;
+ to="allow_arrival";
+ precondition = /*%FSM*/"_nrCheck = _copterMoveTo distance2D _copterPosActual;" \n
+ "_timeDif = _stillTime - time;"/*%FSM*/;
+ condition=/*%FSM*/"(_nrCheck < 16) OR (_timeDif > 120);" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class target_in_range
+ {
+ priority = 40.000000;
+ to="send_support";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_2dDistPlyr < 20) && _canSeePlyr && (!_troopsOnGround) && (_copterHeightActual < 50);" \n
+ "" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class player_lost
+ {
+ priority = 30.000000;
+ to="new_player";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_2dDistPlyr > 800) && (count _nrPlayers > 0) && ((time -_lastSeen) > 480 );"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class player_see
+ {
+ priority = 20.000000;
+ to="hunt";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_canSeePlyr;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class player_hidden
+ {
+ priority = 10.000000;
+ to="search";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_canSeePlyr;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/"//hint format [""You got lucky %1 | Copter Finished !"",name _plyr ];" \n
+ "" \n
+ """I_UAV_01_F"" call EPOCH_unitSpawnDecrease;" \n
+ "" \n
+ "//debug" \n
+ "if (axeDebug) then {" \n
+ "axeCopter = objNull;" \n
+ "};" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class copter_move
+ {
+ name = "copter_move";
+ init = /*%FSM*/"_trgtPos = getPosATL _trgt;" \n
+ "_copterMoveTo = [_trgtPos,_copterMinDist,_copterMaxDist,_copterHeight] call EPOCH_fnc_findSafePos;" \n
+ "" \n
+ "_copterLastPos = getPosATL _copter;" \n
+ "_copter doMove _copterMoveTo;" \n
+ "_copterHeight = (random 10) + _copterHeight;" \n
+ "_copter flyinheight _copterHeight;" \n
+ "_stillTime = time;" \n
+ "" \n
+ "//debug" \n
+ "if (axeDebug) then {" \n
+ "hint format[""Copter moving to:%1"",_copterMoveTo];" \n
+ "axeCopterMoveTo = _copterMoveTo;" \n
+ "axeDebugProcedure=""copter move"";" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="wait_start";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class wait_start
+ {
+ name = "wait_start";
+ init = /*%FSM*/"_t = time;" \n
+ "if (axeDebug) then {" \n
+ "axeWaiting= true;" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class wait
+ {
+ priority = 1.000000;
+ to="update";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"time > _t + (1 + random 3);"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class return_to_base
+ {
+ name = "return_to_base";
+ init = /*%FSM*/"_copterMoveTo = [_copterPosActual,600,1000,600] call EPOCH_fnc_findSafePos;" \n
+ "" \n
+ "_copter doMove _copterMoveTo;" \n
+ "//_copter flyinheight 600;" \n
+ "" \n
+ "//debug" \n
+ "if (axeDebug) then {" \n
+ "hint ""You got away this time... Copter, Return to Base !"";" \n
+ "axeDebugProcedure=""return to base"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class out_of_sight
+ {
+ priority = 1.000000;
+ to="delete";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(((getPos _copter) select 2) > 400) or (((getPos _copter) select 2) < 1);"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class hunt
+ {
+ name = "hunt";
+ init = /*%FSM*/"_copterHeight = 32;" \n
+ "_copterMinDist = 20;" \n
+ "_copterMaxDist = 32;" \n
+ "_trgtPos = getPos _plyr;" \n
+ "_lastSeen = time;" \n
+ "" \n
+ "//debug" \n
+ "if (axeDebug) then {" \n
+ "axeDebugProcedure=""hunt mode"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="wait_start";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class search
+ {
+ name = "search";
+ init = /*%FSM*/"_copterHeight = 42;" \n
+ "_copterMinDist = 32;" \n
+ "_copterMaxDist = 60;" \n
+ "_trgtPos = getPos _copter;" \n
+ "" \n
+ "//debug" \n
+ "if (axeDebug) then {" \n
+ "axeDebugProcedure=""search mode"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="wait_start";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class delete
+ {
+ name = "delete";
+ init = /*%FSM*/"deleteVehicle _copter;" \n
+ "" \n
+ "//debug" \n
+ "if (axeDebug) then {" \n
+ "axeDebugProcedure=""delete"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class send_support
+ {
+ name = "send_support";
+ init = /*%FSM*/"//_supportPos = [(_currentTargetPos select 0)+((random 10)-5),(_currentTargetPos select 1)+((random 10)-5),0];" \n
+ "" \n
+ "[[(getPos _trgt),80,150,1,true] call EPOCH_fnc_findSafePos,_copter] call EPOCH_supportCopter;" \n
+ "" \n
+ "_copter say3D ""drone_alert0"";" \n
+ "EPOCH_say3D_PVS = [player, _copter, 10,Epoch_personalToken];" \n
+ "publicVariableServer ""EPOCH_say3D_PVS"";" \n
+ "" \n
+ "_troopsOnGround = true;" \n
+ "(driver _copter) action [""lightOn"", _copter];" \n
+ "" \n
+ "//debug" \n
+ "if (axeDebug) then {" \n
+ "axeTroopsOnGround = true;" \n
+ "axeDebugProcedure=""send support"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="update";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class new_player
+ {
+ name = "new_player";
+ init = /*%FSM*/"_trgt = _nrPlayers select (floor(random (count _nrPlayers)));" \n
+ "_plyr = _trgt;" \n
+ "" \n
+ "//debug" \n
+ "if (axeDebug) then {" \n
+ "axeDebugProcedure=""select new target"";" \n
+ "axeNewTargets = axeNewTargets + 1;" \n
+ "axeDebugProcedure=""new player"";" \n
+ "};" \n
+ "" \n
+ "//" \n
+ "// A GOOD PLACE TO DEAL WITH OWNERSHIP TRANSFER.. (TODO: EPOCH_server_changeOwner;)" \n
+ "//"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="wait_start";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class allow_arrival
+ {
+ name = "allow_arrival";
+ init = /*%FSM*/"_t = time;" \n
+ "if (axeDebug) then {" \n
+ "axeWaiting= true;" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class wait
+ {
+ priority = 1.000000;
+ to="copter_move";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"time > _t + (3 + random 3);"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="copter";
+ finalStates[] =
+ {
+ "end"
+ };
+};
+/*%FSM*/
diff --git a/Sources/epoch_code/System/Dog_Brain.fsm b/Sources/epoch_code/System/Dog_Brain.fsm
new file mode 100644
index 00000000..892e7854
--- /dev/null
+++ b/Sources/epoch_code/System/Dog_Brain.fsm
@@ -0,0 +1,1324 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"dog_init",0,4346,-308.811646,-174.618637,-218.811722,-124.618736,0.000000,"dog" \n "init"};
+item1[] = {"_",8,218,99.301392,-164.592987,151.253540,-136.187683,0.000000,""};
+item2[] = {"decision",2,250,208.563339,-220.761597,298.563293,-170.761597,0.000000,"decision"};
+item3[] = {"decision_made",4,218,45.078499,-26.190031,135.078552,23.809971,100.000000,"decision made"};
+item4[] = {"action",2,250,45.978439,130.034073,135.978394,180.034134,0.000000,"action"};
+item5[] = {"sit",4,218,213.642075,-401.053680,303.642059,-351.053680,75.000000,"sit"};
+item6[] = {"dispose",4,218,106.293663,-345.154877,196.293686,-295.154907,80.000000,"dispose"};
+item7[] = {"",7,210,591.173462,637.283325,599.173462,645.283325,0.000000,""};
+item8[] = {"reset_vars",2,250,-57.248745,-175.970840,32.751255,-125.970863,0.000000,"reset vars"};
+item9[] = {"_",8,218,-150.031967,-163.898819,-98.079796,-135.493515,0.000000,""};
+item10[] = {"complete",4,218,-57.303970,-27.236908,32.696198,22.763115,10.000000,"complete"};
+item11[] = {"Wait_120sec",4,218,599.501099,34.548668,689.501099,84.548660,0.000000,"Wait" \n "120sec"};
+item12[] = {"end",1,250,599.472717,-87.843658,689.472839,-37.843731,0.000000,"end"};
+item13[] = {"dispose",4,218,222.476715,3.262041,312.476715,53.262005,80.000000,"dispose"};
+item14[] = {"sit",4,218,-111.822372,281.911530,-21.822369,331.911530,0.000000,"sit"};
+item15[] = {"do_stay",2,250,-311.604431,441.158081,-221.604416,491.158081,0.000000,"do stay"};
+item16[] = {"look_at",4,218,441.281158,-269.172302,531.281128,-221.575928,30.000000,"look at"};
+item17[] = {"look_at",4,218,142.862396,305.132690,232.862579,355.132629,0.000000,"look at"};
+item18[] = {"look_at_player",2,250,183.029541,439.919250,273.029846,489.919220,0.000000,"look at player"};
+item19[] = {"no_decision",4,218,0.928818,-278.012878,90.928802,-228.012848,100.000000,"no decision"};
+item20[] = {"track_wander",4,218,376.743683,-166.765533,466.743683,-116.765511,10.000000,"track wander"};
+item21[] = {"follow",4,218,383.032623,-365.181488,473.032501,-315.181610,50.000000,"follow"};
+item22[] = {"attack",4,218,438.592499,-326.404816,528.592773,-276.404724,40.000000,"attack"};
+item23[] = {"see_food",4,218,333.484619,-399.399414,423.484528,-349.399353,60.000000,"see food"};
+item24[] = {"attack",4,218,282.915100,218.351776,372.915100,268.351807,0.000000,"attack"};
+item25[] = {"see_food",4,218,235.523438,248.096436,325.523621,298.096375,0.000000,"see food"};
+item26[] = {"follow",4,218,43.211121,366.529541,133.210968,416.529510,0.000000,"follow"};
+item27[] = {"do_attack",2,250,475.892395,443.436249,565.892395,493.436249,0.000000,"do attack"};
+item28[] = {"move_to_food",2,250,378.591339,441.849182,468.591644,491.849152,0.000000,"move to food"};
+item29[] = {"do_follow",2,250,-12.356815,438.900574,77.643143,488.900665,0.000000,"do follow"};
+item30[] = {"hide",4,218,408.775177,-216.764954,498.775146,-166.765060,20.000000,"hide"};
+item31[] = {"hide",4,218,93.460350,337.900269,183.460388,387.900208,0.000000,"hide"};
+item32[] = {"do_hide",2,250,86.508911,440.972290,176.508820,490.972443,0.000000,"do hide"};
+item33[] = {"eat",4,218,269.500305,-432.050049,359.500397,-382.050049,70.000000,"eat"};
+item34[] = {"eat",4,218,189.995667,276.664276,279.995605,326.664307,0.000000,"eat"};
+item35[] = {"do_eat",2,250,280.691498,440.967438,370.691589,490.967438,0.000000,"do eat"};
+item36[] = {"alert",4,218,332.989319,-116.810501,422.989319,-66.810547,5.000000,"alert"};
+item37[] = {"alert",4,218,-11.409309,336.534821,78.590752,386.534729,0.000000,"alert"};
+item38[] = {"do_alert",2,250,-110.595520,440.943939,-20.595509,490.944031,0.000000,"do alert"};
+item39[] = {"play",4,218,159.478867,-373.192657,249.478699,-323.192596,78.000000,"play"};
+item40[] = {"play",4,218,-61.277840,309.296783,28.722137,359.296478,0.000000,"play"};
+item41[] = {"do_play",2,250,-210.527878,441.384155,-120.528084,491.383759,0.000000,"do play"};
+item42[] = {"mourn",4,218,52.084259,-312.505798,142.084351,-262.505737,90.000000,"mourn"};
+item43[] = {"mourn",4,218,270.790802,67.418800,360.790863,117.418747,0.000000,"mourn"};
+item44[] = {"do_mourn",2,250,448.517395,67.609764,538.517212,117.609756,0.000000,"do mourn"};
+item45[] = {"wander",4,218,-214.253967,224.673553,-124.253967,274.673584,0.000000,"wander"};
+item46[] = {"_",8,218,568.164734,141.965942,620.116821,170.371155,5.000000,""};
+item47[] = {"track",4,218,-160.918762,254.950806,-70.918755,304.950806,0.000000,"track"};
+item48[] = {"do_track",2,250,-409.868256,438.978760,-319.868225,488.978760,0.000000,"do track"};
+item49[] = {"",7,210,-67.774078,635.077393,-59.774075,643.077393,0.000000,""};
+item50[] = {"do_wander",2,250,-506.306610,440.399109,-416.306580,490.399109,0.000000,"do wander"};
+item51[] = {"kill_prey",4,218,-265.259827,194.049530,-175.259766,244.049530,0.000000,"kill prey"};
+item52[] = {"do_kill",2,250,-604.120972,440.934174,-514.120972,490.934174,0.000000,"do kill"};
+item53[] = {"clean_up",2,250,448.864868,3.913227,538.864990,53.913231,0.000000,"clean up"};
+link0[] = {0,9};
+link1[] = {1,2};
+link2[] = {2,3};
+link3[] = {2,5};
+link4[] = {2,6};
+link5[] = {2,16};
+link6[] = {2,19};
+link7[] = {2,20};
+link8[] = {2,21};
+link9[] = {2,22};
+link10[] = {2,23};
+link11[] = {2,30};
+link12[] = {2,33};
+link13[] = {2,36};
+link14[] = {2,39};
+link15[] = {2,42};
+link16[] = {3,4};
+link17[] = {4,10};
+link18[] = {4,13};
+link19[] = {4,14};
+link20[] = {4,17};
+link21[] = {4,24};
+link22[] = {4,25};
+link23[] = {4,26};
+link24[] = {4,31};
+link25[] = {4,34};
+link26[] = {4,37};
+link27[] = {4,40};
+link28[] = {4,43};
+link29[] = {4,45};
+link30[] = {4,47};
+link31[] = {4,51};
+link32[] = {5,2};
+link33[] = {6,2};
+link34[] = {7,46};
+link35[] = {8,1};
+link36[] = {9,8};
+link37[] = {10,8};
+link38[] = {11,12};
+link39[] = {13,53};
+link40[] = {14,15};
+link41[] = {15,49};
+link42[] = {16,2};
+link43[] = {17,18};
+link44[] = {18,7};
+link45[] = {19,2};
+link46[] = {20,2};
+link47[] = {21,2};
+link48[] = {22,2};
+link49[] = {23,2};
+link50[] = {24,27};
+link51[] = {25,28};
+link52[] = {26,29};
+link53[] = {27,7};
+link54[] = {28,7};
+link55[] = {29,49};
+link56[] = {30,2};
+link57[] = {31,32};
+link58[] = {32,49};
+link59[] = {33,2};
+link60[] = {34,35};
+link61[] = {35,7};
+link62[] = {36,2};
+link63[] = {37,38};
+link64[] = {38,49};
+link65[] = {39,2};
+link66[] = {40,41};
+link67[] = {41,49};
+link68[] = {42,2};
+link69[] = {43,44};
+link70[] = {44,11};
+link71[] = {45,50};
+link72[] = {46,4};
+link73[] = {47,48};
+link74[] = {48,49};
+link75[] = {49,7};
+link76[] = {50,49};
+link77[] = {51,52};
+link78[] = {52,49};
+link79[] = {53,11};
+globals[] = {0.000000,0,0,0,16777215,640,480,1,135,6316128,1,-294.824829,718.133667,557.528687,-469.195953,770,895,1};
+window[] = {2,-1,-1,-1,-1,550,-1255,-230,25,3,788};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "dog";
+ class States
+ {
+ /*%FSM*/
+ class dog_init
+ {
+ name = "dog_init";
+ init = /*%FSM*/"_dog = _this select 0;" \n
+ "_plyr = player;" \n
+ "" \n
+ "_dogNames=[""Fido"",""Prince"",""Wolf"",""Foxy"",""Max"",""Bailey"",""Buddy"",""Charlie"",""Rocky"",""Jake"",""Buster"",""Riley"",""Sam"",""Bear"",""Oscar"",""Rusty""];" \n
+ "_dogName = _dogNames select (floor(random count _dogNames));" \n
+ "_dog setName _dogName;" \n
+ "" \n
+ "_trgtArray = [""Epoch_Male_F"",""Epoch_Female_F"",""Epoch_Female_CamoBlue_F""];" \n
+ "_trgtRange = 120;" \n
+ "_vehArray = [""Car""];" \n
+ "" \n
+ "" \n
+ "//_trackTime = _maxTravelTime;//Introduce track time = dog distance from player add extra for more than one player in vicinity." \n
+ "" \n
+ "_dogFoodArray = [""ChickenCarcass_EPOCH"",""RabbitCarcass_EPOCH"",""CookedRabbit_EPOCH"",""CookedChicken_EPOCH"",""GoatCarcass_EPOCH"",""SheepCarcass_EPOCH""];" \n
+ "_dogFriendArray = [""Fin_random_EPOCH"",""Alsatian_Random_EPOCH""];" \n
+ "_dogChaseArray = [""Rabbit_EPOCH"",""Epoch_Sapper_F"",""Hen_random_EPOCH"",""Cock_random_EPOCH"",""Snake_random_EPOCH""];" \n
+ "_dogNoise = 16;" \n
+ "_dogApproach = 42;" \n
+ "_hunger = floor(random 100);" \n
+ "_followSpeed = 8;" \n
+ "_forgive = 28;" \n
+ "_dogHolder = objNull;" \n
+ "" \n
+ "//Set Vars" \n
+ "_rnd = 0;" \n
+ "_doKill = false;" \n
+ "_doTrack = false;" \n
+ "_doMourn = false;" \n
+ "_doDispose = false;" \n
+ "_doPlay = false;" \n
+ "_doFollow = false;" \n
+ "_doEat = false;" \n
+ "_seeFood = false;" \n
+ "_doAttack = false;" \n
+ "_lookAt = false;" \n
+ "_doHide = false;" \n
+ "_doWander = false;" \n
+ "_doAlert = false;" \n
+ "_doSit = false;" \n
+ "" \n
+ "" \n
+ "//DEBUG" \n
+ "_doDebug = false;" \n
+ "//_count = 0;" \n
+ "//_debugDo = ""INIT"";" \n
+ "//_hunger = 61;" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class decision
+ {
+ name = "decision";
+ init = /*%FSM*/"" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "systemChat format [""D:%1"",diag_tickTime];" \n
+ "};" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class no_decision
+ {
+ priority = 100.000000;
+ to="decision";
+ precondition = /*%FSM*/"if (_plyr distance _dog > 3) then {" \n
+ "if (!isNull _dogHolder) then {" \n
+ "_dogHolder hideobject true;" \n
+ "};" \n
+ "}else{" \n
+ "if (!isNull _dogHolder) then {" \n
+ "_dogHolder hideobject false;" \n
+ "};" \n
+ "};"/*%FSM*/;
+ condition=/*%FSM*/"!_decisionMade && (diag_tickTime - _t) > 6;"/*%FSM*/;
+ action=/*%FSM*/"_dogPos = getPosATL _dog;" \n
+ "_nrPlyrs = _dog nearEntities [_trgtArray, _trgtRange];" \n
+ "_plyrDist = _dog distance _plyr;" \n
+ "_plyrPos = getPosATL player;" \n
+ "_plyrVar = _plyr getVariable [""dog"",""""];" \n
+ "_plyrStance = stance _plyr;" \n
+ "" \n
+ "_foodHolder = nearestObject[_dogPos, ""WeaponHolder""];" \n
+ "if (!isNull _foodHolder) then {" \n
+ "if (count (getMagazineCargo _foodHolder select 0) > 0) then {" \n
+ "_foodPos = getPos _foodHolder;" \n
+ "_nrFood = getMagazineCargo _foodHolder select 0 select 0;" \n
+ "};" \n
+ "};" \n
+ "" \n
+ "if (count _nrPlyrs > 1) then {" \n
+ "_maxTravelTime = _maxTravelTime * 2;" \n
+ "};" \n
+ "" \n
+ "_t = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class decision_made
+ {
+ priority = 100.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_decisionMade;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mourn
+ {
+ priority = 90.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!alive _plyr && (_plyrVar == _dogName);"/*%FSM*/;
+ action=/*%FSM*/"_doMourn = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 80.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(!alive _dog) || (_plyrDist > 1000) || (!alive _plyr);"/*%FSM*/;
+ action=/*%FSM*/"_doDispose = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class play
+ {
+ priority = 78.000000;
+ to="decision";
+ precondition = /*%FSM*/"_nrChases=_dogPos nearEntities [_dogChaseArray, 42];"/*%FSM*/;
+ condition=/*%FSM*/"(_plyrDist < 42) && (count _nrChases > 0) && (_plyrVar == _dogName);"/*%FSM*/;
+ action=/*%FSM*/"_nrChase = _nrChases select 0;" \n
+ "_doPlay = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class sit
+ {
+ priority = 75.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(stance _plyr == ""PRONE"") && (_plyrDist < _maxTravelTime) && (_plyrVar == _dogName);"/*%FSM*/;
+ action=/*%FSM*/"if (floor (random 100) <15) then {" \n
+ "_doWander = true;" \n
+ "}else{" \n
+ "_doSit = true;" \n
+ "};" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class eat
+ {
+ priority = 70.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_nrFood in _dogFoodArray) && (_dog distance _foodPos < 1);"/*%FSM*/;
+ action=/*%FSM*/"_doEat = true;" \n
+ "_decisionMade = true;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class see_food
+ {
+ priority = 60.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_nrFood in _dogFoodArray;"/*%FSM*/;
+ action=/*%FSM*/"_seeFood = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class follow
+ {
+ priority = 50.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_plyrDist > _maxTravelTime) && (_plyrVar == _dogName); "/*%FSM*/;
+ action=/*%FSM*/"_doFollow = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class attack
+ {
+ priority = 40.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"((_plyrVar == ""killer"") || (_hunger > 60)) && (alive _plyr);"/*%FSM*/;
+ action=/*%FSM*/"_doAttack = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class look_at
+ {
+ priority = 30.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(stance _plyr == ""CROUCH"") && (_plyrDist < 16);"/*%FSM*/;
+ action=/*%FSM*/"_lookAt = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class hide
+ {
+ priority = 20.000000;
+ to="decision";
+ precondition = /*%FSM*/"_nrVeh = nearestObject [_dog, ""Car""];"/*%FSM*/;
+ condition=/*%FSM*/"(_dog distance _nrVeh) < 20;"/*%FSM*/;
+ action=/*%FSM*/"_doHide = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class track_wander
+ {
+ priority = 10.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_plyrDist > 8); "/*%FSM*/;
+ action=/*%FSM*/"if (floor (random 100) < 46) then {" \n
+ "_doWander = true;" \n
+ "}else{" \n
+ "_doTrack = true;" \n
+ "};" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class alert
+ {
+ priority = 5.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(stance _plyr == ""CROUCH"") && (count _nrPlyrs > 1) && (_plyrVar == _dogName);"/*%FSM*/;
+ action=/*%FSM*/"_doAlert = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class action
+ {
+ name = "action";
+ init = /*%FSM*/"_plyrDist = _dog distance _plyr;" \n
+ "_plyrPos = getPos _plyr;" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "systemChat format [""A:%1"",diag_tickTime];" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class dispose
+ {
+ priority = 80.000000;
+ to="clean_up";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doDispose;"/*%FSM*/;
+ action=/*%FSM*/"_doDispose = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class complete
+ {
+ priority = 10.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/"if (_plyr distance _dog > 3) then {" \n
+ "if (!isNull _dogHolder) then {" \n
+ "_dogHolder hideobject true;" \n
+ "};" \n
+ "}else{" \n
+ "if (!isNull _dogHolder) then {" \n
+ "_dogHolder hideobject false;" \n
+ "};" \n
+ "};" \n
+ "" \n
+ "_sWait = _sWait max 1;"/*%FSM*/;
+ condition=/*%FSM*/"_actionDone && ((!alive _dog) || (call compile _criteria) || (diag_tickTime > (_t + _sWait)));"/*%FSM*/;
+ action=/*%FSM*/"if (!isNil ""_criteriaMetAction"") then {" \n
+ "call compile _criteriaMetAction;" \n
+ "};" \n
+ "" \n
+ "//debug" \n
+ "if (_doDebug) then {" \n
+ "_count = _count + 1;" \n
+ "hint format [""Criteria: %1\nTime:%2\nCount:%3\n%4\nWait:%5\nHunger:%6"",(call compile _criteria), (diag_tickTime > (_t + _sWait)),_count,_debugDo,_sWait,_hunger];" \n
+ "};"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class look_at
+ {
+ priority = 0.000000;
+ to="look_at_player";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_lookAt;"/*%FSM*/;
+ action=/*%FSM*/"_lookAt = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class attack
+ {
+ priority = 0.000000;
+ to="do_attack";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doAttack;"/*%FSM*/;
+ action=/*%FSM*/"_doAttack = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class see_food
+ {
+ priority = 0.000000;
+ to="move_to_food";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_seeFood;"/*%FSM*/;
+ action=/*%FSM*/"_seeFood = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class follow
+ {
+ priority = 0.000000;
+ to="do_follow";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doFollow;"/*%FSM*/;
+ action=/*%FSM*/"_doFollow = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class sit
+ {
+ priority = 0.000000;
+ to="do_stay";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doSit;"/*%FSM*/;
+ action=/*%FSM*/"_doSit = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class hide
+ {
+ priority = 0.000000;
+ to="do_hide";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doHide;"/*%FSM*/;
+ action=/*%FSM*/"_doHide = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class eat
+ {
+ priority = 0.000000;
+ to="do_eat";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doEat;"/*%FSM*/;
+ action=/*%FSM*/"_doEat = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class alert
+ {
+ priority = 0.000000;
+ to="do_alert";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doAlert;"/*%FSM*/;
+ action=/*%FSM*/"_doAlert = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class play
+ {
+ priority = 0.000000;
+ to="do_play";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doPlay;"/*%FSM*/;
+ action=/*%FSM*/"_doPlay = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mourn
+ {
+ priority = 0.000000;
+ to="do_mourn";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doMourn;"/*%FSM*/;
+ action=/*%FSM*/"_doMourn = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class wander
+ {
+ priority = 0.000000;
+ to="do_wander";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doWander;"/*%FSM*/;
+ action=/*%FSM*/"_doWander = false"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class track
+ {
+ priority = 0.000000;
+ to="do_track";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doTrack;"/*%FSM*/;
+ action=/*%FSM*/"_doTrack = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class kill_prey
+ {
+ priority = 0.000000;
+ to="do_kill";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doKill;"/*%FSM*/;
+ action=/*%FSM*/"_doKill = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class reset_vars
+ {
+ name = "reset_vars";
+ init = /*%FSM*/"//Default Vars" \n
+ "" \n
+ "_rnd = 0;" \n
+ "_actionDone = false;" \n
+ "_decisionMade = false;" \n
+ "_sWait = 0;" \n
+ "_doDispose = false;" \n
+ "_chooseTarget = false;" \n
+ "_criteria = ""(false)"";" \n
+ "_criteriaMet = false;" \n
+ "_t = diag_tickTime;" \n
+ "_courageTest = 0;" \n
+ "" \n
+ "_dogPos=[0,0,0];" \n
+ "_posTo=[0,0,0];" \n
+ "_nrPlyrs = [];" \n
+ "_nrVeh = objNull;" \n
+ "_plyrDist = 0;" \n
+ "_lookAtPlyr = false;" \n
+ "_override = false;" \n
+ "_plyrDist = 0;" \n
+ "" \n
+ "_dogPos = getPosATL _dog;" \n
+ "_nrPlyrs = _dogPos nearEntities [_trgtArray, _trgtRange];" \n
+ "_plyrDist = _dog distance _plyr;" \n
+ "_plyrPos = getPosATL player;" \n
+ "_plyrVar = _plyr getVariable [""dog"",""""];" \n
+ "_plyrStance = stance _plyr;" \n
+ "" \n
+ "_foodHolder = nearestObject[_dogPos, ""WeaponHolder""];" \n
+ "if (!isNull _foodHolder) then {" \n
+ "if (count (getMagazineCargo _foodHolder select 0) > 0) then {" \n
+ "_foodPos = getPos _foodHolder;" \n
+ "_nrFood = getMagazineCargo _foodHolder select 0 select 0;" \n
+ "};" \n
+ "};" \n
+ "" \n
+ "if (count _nrPlyrs > 1) then {" \n
+ "_maxTravelTime = _maxTravelTime * 2;" \n
+ "};" \n
+ "" \n
+ "_criteriaMetAction = nil;" \n
+ "_plyrStance = """";" \n
+ "_foodHolder = objNull;" \n
+ "_nrFood = """";" \n
+ "_foodPos = [0,0,0];" \n
+ "_plyrVar = _plyr getVariable [""dog"",""""];" \n
+ "_nrChases=[];" \n
+ "_nrChase = objNull;" \n
+ "_chaseDist = 0;" \n
+ "_maxTravelTime = 8;" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/"deleteVehicle _dog;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_stay
+ {
+ name = "do_stay";
+ init = /*%FSM*/"_dog forceSpeed 2;" \n
+ "_moveTo = getPosATL player;" \n
+ "_dog moveTo _moveTo;" \n
+ "" \n
+ "if (floor(random 100)< 8) then {" \n
+ "[_dog, _plyr] say3D ""dog_cry"";" \n
+ "_hunger = _hunger + 2;" \n
+ "};" \n
+ "" \n
+ "_criteria = ""(false)"";" \n
+ "_criteriaMetAction = ""_dog forceSpeed 0"";" \n
+ "_sWait = 24;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Sit"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class look_at_player
+ {
+ name = "look_at_player";
+ init = /*%FSM*/"if (floor(random 100)<_dogApproach) then {" \n
+ "_dirTo = [_dog, _plyrPos] call BIS_fnc_dirTo;" \n
+ "_posTo = [_dog, 2,_dirTo] call BIS_fnc_relPos;" \n
+ "_dog moveTo _posTo;" \n
+ "_criteria = ""(_dog distance _posTo < 1)"";" \n
+ "_sWait = 4;" \n
+ "" \n
+ "}else{" \n
+ "_criteria = ""(false)"";" \n
+ "_sWait = 8;" \n
+ "};" \n
+ "" \n
+ "if (_plyr distance _dog < 3) then {" \n
+ "if (!isNull _dogHolder) then {" \n
+ "_dogHolder hideobject false;" \n
+ "};" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_lookAt = false;" \n
+ "" \n
+ "" \n
+ "if (floor(random 100)<_dogNoise) then {" \n
+ "[_dog, _plyr] say3D ""dog_cry"";" \n
+ "};" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""look at Player"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_attack
+ {
+ name = "do_attack";
+ init = /*%FSM*/"_dog forceSpeed 7;" \n
+ "_moveTo = _plyrPos;" \n
+ "" \n
+ "if (! surfaceIsWater _moveTo) then {" \n
+ "_dog moveTo _moveTo;" \n
+ "_criteria = ""(_dog distance _moveTo < 2)"";" \n
+ "_sWait = 8;" \n
+ "}else{" \n
+ "_criteria = ""(true)"";" \n
+ "_sWait = 0;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "if (_dog distance _plyr < 3) then {" \n
+ "_plyPos = getPosATL _plyr;" \n
+ "" \n
+ "_dog call EPOCH_client_bitePlayer;" \n
+ "" \n
+ "_dirTo = [_dog, _plyrPos] call BIS_fnc_dirTo;" \n
+ "_dog setDir _dirTo;" \n
+ "_sWait = 12;" \n
+ "_criteria = ""(false)"";" \n
+ "" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "if (floor(random 100) < 32) then {" \n
+ "[_dog, _plyr] say3D ""dog_bark"";" \n
+ "};" \n
+ "" \n
+ "if (floor(random 100)<_forgive) then {" \n
+ "_plyr setVariable [""dog"",""""];" \n
+ "};" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Attack"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class move_to_food
+ {
+ name = "move_to_food";
+ init = /*%FSM*/"_dog forceSpeed 4;" \n
+ "_dog moveTo _foodPos;" \n
+ "" \n
+ "_criteria = ""(false)"";" \n
+ "_sWait = (_dog distance _foodPos) max 1;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Move to Food"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_follow
+ {
+ name = "do_follow";
+ init = /*%FSM*/"_dog forceSpeed _followSpeed;" \n
+ "_moveTo = getPosATL player;" \n
+ "" \n
+ "if (! surfaceIsWater _moveTo) then {" \n
+ "_dog moveTo _moveTo;" \n
+ "_criteria = ""(_dog distance _moveTo < 2)"";" \n
+ "_sWait = (_dog distance _moveTo) max _maxTravelTime;" \n
+ "}else{" \n
+ "_criteria = ""(true)"";" \n
+ "_sWait = 0;" \n
+ "};" \n
+ "" \n
+ "if (floor(random 100)< 6) then {" \n
+ "_hunger = _hunger + 1;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Follow"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_hide
+ {
+ name = "do_hide";
+ init = /*%FSM*/"_dog forceSpeed 5;" \n
+ "" \n
+ "" \n
+ "_dirTo = [_dog, (getPos _nrVeh)] call BIS_fnc_dirTo;" \n
+ "" \n
+ "_dirTo = _dirTo - (floor (random 40)+160);" \n
+ "" \n
+ "if (_dirTo<0) then {_dirTo=_dirTo+360;};" \n
+ "" \n
+ "_moveTo = [_dog, 20, _dirTo] call BIS_fnc_relPos;" \n
+ "" \n
+ "_dog moveTo _moveTo;" \n
+ "" \n
+ "if (floor(random 100)<_dogNoise) then {" \n
+ "[_dog, _plyr] say3D ""dog_cry"";" \n
+ "};" \n
+ "" \n
+ "_criteria = ""(_dog distance _moveTo < 3)"";" \n
+ "_sWait = _maxTravelTime;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_doHide = false;" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""hide"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_eat
+ {
+ name = "do_eat";
+ init = /*%FSM*/"deleteVehicle _foodHolder;" \n
+ "" \n
+ "if (_plyrVar == _dogName) then {" \n
+ "titleText [format[""You have fed %1."",_dogName], ""PLAIN""];" \n
+ "}else{" \n
+ "_plyr setVariable [""dog"", _dogName];" \n
+ "titleText [format[""You have tamed %1."",_dogName], ""PLAIN""];" \n
+ "};" \n
+ "_hunger = _hunger - 40;" \n
+ "" \n
+ "_sWait = 1;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(true)"";" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Eat"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_alert
+ {
+ name = "do_alert";
+ init = /*%FSM*/"_dog forceSpeed 0;" \n
+ "if (floor(random 75)<_dogNoise) then {" \n
+ "[_dog, _plyr] say3D ""dog_bark"";" \n
+ "};" \n
+ "" \n
+ "_dirTo = [_dog, getPos (_nrPlyrs select 1)] call BIS_fnc_dirTo;" \n
+ "_dog setDir _dirTo;" \n
+ "" \n
+ "_criteria = ""(true)"";" \n
+ "_sWait = _maxTravelTime / 2;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Alert"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_play
+ {
+ name = "do_play";
+ init = /*%FSM*/"_rnd = floor(random 100);" \n
+ "" \n
+ "if (_rnd < 42) then {" \n
+ "[_dog, _plyr] say3D ""dog_bark"";" \n
+ "};" \n
+ "" \n
+ "if (_rnd < 6) then {" \n
+ "_hunger = _hunger + 1;" \n
+ "};" \n
+ "" \n
+ "_moveTo = getPos _nrChase; " \n
+ "_dog forceSpeed 6;" \n
+ "_dog moveTo _moveTo;" \n
+ "" \n
+ "" \n
+ "" \n
+ "_criteria = ""(_dog distance _moveTo < 2)"";" \n
+ "_sWait = (_dog distance _moveTo) max 4;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "" \n
+ "if (_dog distance _nrChase < 2) then {" \n
+ "_actionDone = false;" \n
+ "_doKill = true;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Play"";" \n
+ "};" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_mourn
+ {
+ name = "do_mourn";
+ init = /*%FSM*/"_dog forceSpeed 2;" \n
+ "_dog moveTo getPos _plyr;" \n
+ "" \n
+ "if (floor(random 95)<_dogNoise) then {" \n
+ "[_dog, _plyr] say3D ""dog_cry"";" \n
+ "};" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Mourn"";" \n
+ "};" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Wait_120sec
+ {
+ priority = 0.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _t) > 120"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_track
+ {
+ name = "do_track";
+ init = /*%FSM*/"_dog forceSpeed _followSpeed;" \n
+ "_dirTo = [_dog, _plyrPos] call BIS_fnc_dirTo;" \n
+ "_moveTo = [_dog, (_dog distance _plyr) - 10,_dirTo] call BIS_fnc_relPos;" \n
+ "" \n
+ "if (! surfaceIsWater _moveTo) then {" \n
+ "_dog moveTo _moveTo;" \n
+ "_criteria = ""(_dog distance _moveTo < 2)"";" \n
+ "_sWait = _plyrDist max _maxTravelTime;" \n
+ "}else{" \n
+ "_criteria = ""(true)"";" \n
+ "_sWait = 0;" \n
+ "};" \n
+ "" \n
+ "_rnd = floor(random 100);" \n
+ "" \n
+ "if (_rnd< 12) then {" \n
+ "[_dog, _plyr] say3D ""dog_bark"";" \n
+ "};" \n
+ "" \n
+ "if (_rnd < 6) then {" \n
+ "_hunger = _hunger + 1;" \n
+ "[_dog, _plyr] say3D ""dog_cry"";" \n
+ "};" \n
+ "" \n
+ "if ((_hunger > 56) && (_rnd < 48)) then {" \n
+ "[_dog, _plyr] say3D ""dog_cry"";" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Track"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_wander
+ {
+ name = "do_wander";
+ init = /*%FSM*/"_dirTo = (random 360) min 10;" \n
+ "_moveTo = [_dog, 24, _dirTo] call BIS_fnc_relPos;" \n
+ "" \n
+ "if (! surfaceIsWater _moveTo) then {" \n
+ "_dog forceSpeed 4;" \n
+ "_dog moveTo _moveTo;" \n
+ "_criteria = ""(_dog distance _moveTo < 2)"";" \n
+ "_sWait = floor (_dog distance _moveTo) max _maxTravelTime;" \n
+ "}else{" \n
+ "_criteria = ""(true)"";" \n
+ "_sWait = 0;" \n
+ "};" \n
+ "" \n
+ "if (_rnd < 8) then {" \n
+ "_hunger = _hunger + 1;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Wander"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_kill
+ {
+ name = "do_kill";
+ init = /*%FSM*/"if (isNull _dogHolder) then {" \n
+ "_dogHolder = createVehicle [""WeaponHolderSimulated"", getPosATL _dog, [], 0, ""CAN_COLLIDE""];" \n
+ "_dogHolder attachTo [_dog, [-0.2,1.2,0.7]];" \n
+ "_dogHolder hideobject true;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "if (typeOf _nrChase == ""Rabbit_EPOCH"") then {" \n
+ "_dogHolder addMagazineCargo [""RabbitCarcass_EPOCH"", 1] ;" \n
+ "_dogHolder addMagazineCargo [""Pelt_EPOCH"", 1] ;" \n
+ "};" \n
+ "" \n
+ "if (_nrChase isKindOf ""Snake_random_EPOCH"") then {" \n
+ "_dogHolder addMagazineCargo [""Venom_EPOCH"", 1] ;" \n
+ "_dogHolder addMagazineCargo [""SnakeCarcass_EPOCH"", 1] ;" \n
+ "};" \n
+ "" \n
+ "if (typeOf _nrChase in [""Hen_random_EPOCH"",""Cock_random_EPOCH""]) then {" \n
+ "_dogHolder addMagazineCargo [""ChickenCarcass_EPOCH"", 1] ;" \n
+ "};" \n
+ "" \n
+ "_hunger = _hunger - 4;" \n
+ "" \n
+ "deleteVehicle _nrChase;" \n
+ "" \n
+ "_criteria = ""(true)"";" \n
+ "_sWait = _maxTravelTime;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Kill"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class clean_up
+ {
+ name = "clean_up";
+ init = /*%FSM*/"_plyr setVariable [""dog"",""""];" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Clean Up"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Wait_120sec
+ {
+ priority = 0.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _t) > 120"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="dog_init";
+ finalStates[] =
+ {
+ "end"
+ };
+};
+/*%FSM*/
diff --git a/Sources/epoch_code/System/Event_Air_Drop.fsm b/Sources/epoch_code/System/Event_Air_Drop.fsm
new file mode 100644
index 00000000..fff46f69
--- /dev/null
+++ b/Sources/epoch_code/System/Event_Air_Drop.fsm
@@ -0,0 +1,720 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"reset___checks",2,250,-175.000000,-200.000000,-75.000000,-150.000000,0.000000,"reset / checks"};
+item1[] = {"air_drop",0,250,-550.000000,-75.000000,-450.000000,-25.000000,0.000000,"air drop"};
+item2[] = {"no_instinct",4,218,0.000000,-150.000000,100.000000,-100.000000,80.000000,"no instinct"};
+item3[] = {"instinct",2,250,150.000000,-200.000000,250.000000,-150.000000,0.000000,"instinct"};
+item4[] = {"action",2,250,150.000000,50.000000,250.000000,100.000000,0.000000,"action"};
+item5[] = {"dispose",4,218,150.000000,-325.000000,250.000000,-275.000000,90.000000,"dispose"};
+item6[] = {"_",8,218,-700.000000,-75.000000,-600.000000,-25.000000,5.000000,""};
+item7[] = {"complete",4,218,0.000000,50.000000,100.000000,100.000000,100.000000,"complete"};
+item8[] = {"end",1,4346,400.000000,-25.000000,500.000000,25.000000,0.000000,"end"};
+item9[] = {"dispose",4,218,250.000000,-25.000000,350.000000,25.000000,95.000000,"dispose"};
+item10[] = {"instinct_done",4,218,150.000000,-75.000000,250.000000,-25.000000,100.000000,"instinct done"};
+item11[] = {"do_instinct",4,218,0.000000,-250.000000,100.000000,-200.000000,80.000000,"do instinct"};
+item12[] = {"checks",4,218,-325.000000,50.000000,-225.000000,100.000000,60.000000,"checks"};
+item13[] = {"long_checks",4,218,0.000000,-50.000000,100.000000,0.000000,85.000000,"long checks"};
+item14[] = {"drop",4,218,350.000000,50.000000,450.000000,100.000000,0.000000,"drop"};
+item15[] = {"do_drop",2,250,350.000000,300.000000,450.000000,350.000000,0.000000,"do drop"};
+item16[] = {"drop",4,218,325.000000,-325.000000,425.000000,-275.000000,85.000000,"drop"};
+item17[] = {"setup",2,250,-700.000000,-200.000000,-600.000000,-150.000000,0.000000,"setup"};
+item18[] = {"long_checks",2,250,-175.000000,50.000000,-75.000000,100.000000,0.000000,"long checks"};
+item19[] = {"done_long_checks",4,218,-175.000000,-100.000000,-75.000000,-50.000000,100.000000,"done long checks"};
+item20[] = {"find_Copter",2,250,-350.000000,-325.000000,-250.000000,-275.000000,0.000000,"find Copter"};
+item21[] = {"found",4,218,-350.000000,-225.000000,-250.000000,-175.000000,20.000000,"found"};
+item22[] = {"not_found",4,218,-175.000000,-275.000000,-75.000000,-225.000000,10.000000,"not found"};
+item23[] = {"failed",4,218,0.000000,-325.000000,100.000000,-275.000000,30.000000,"failed"};
+item24[] = {"_",8,218,-700.000000,-325.000000,-600.000000,-275.000000,5.000000,""};
+item25[] = {"_",8,218,150.000000,300.000000,250.000000,350.000000,5.000000,""};
+item26[] = {"hover",2,250,-550.000000,-200.000000,-450.000000,-150.000000,0.000000,"hover"};
+item27[] = {"arrived",4,218,-350.000000,-150.000000,-250.000000,-100.000000,0.000000,"arrived"};
+item28[] = {"wait",4,218,-550.000000,-300.000000,-450.000000,-250.000000,0.000000,"wait"};
+item29[] = {"check_landing",2,250,350.000000,125.000000,450.000000,175.000000,0.000000,"check landing"};
+item30[] = {"over_water",4,218,525.000000,125.000000,625.000000,175.000000,0.000000,"over water"};
+item31[] = {"over_land",4,218,350.000000,200.000000,450.000000,250.000000,0.000000,"over land"};
+link0[] = {0,11};
+link1[] = {1,6};
+link2[] = {2,0};
+link3[] = {3,2};
+link4[] = {3,5};
+link5[] = {3,10};
+link6[] = {3,13};
+link7[] = {3,16};
+link8[] = {4,7};
+link9[] = {4,9};
+link10[] = {4,14};
+link11[] = {5,3};
+link12[] = {6,17};
+link13[] = {7,18};
+link14[] = {9,8};
+link15[] = {10,4};
+link16[] = {11,3};
+link17[] = {12,18};
+link18[] = {13,18};
+link19[] = {14,29};
+link20[] = {15,25};
+link21[] = {16,3};
+link22[] = {17,24};
+link23[] = {18,12};
+link24[] = {18,19};
+link25[] = {19,0};
+link26[] = {20,21};
+link27[] = {20,22};
+link28[] = {20,23};
+link29[] = {21,26};
+link30[] = {22,20};
+link31[] = {23,3};
+link32[] = {24,20};
+link33[] = {25,4};
+link34[] = {26,27};
+link35[] = {26,28};
+link36[] = {27,0};
+link37[] = {28,26};
+link38[] = {29,30};
+link39[] = {29,31};
+link40[] = {30,29};
+link41[] = {31,15};
+globals[] = {25.000000,1,0,0,16777215,640,480,1,238,6316128,1,144.778671,832.183105,544.674927,-508.795807,584,895,1};
+window[] = {2,-1,-1,-32000,-32000,600,-1205,-180,75,3,602};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "air drop";
+ class States
+ {
+ /*%FSM*/
+ class reset___checks
+ {
+ name = "reset___checks";
+ init = /*%FSM*/"_rnd = floor random 100;" \n
+ "_t = diag_tickTime;" \n
+ "_copterPos = getPos _axeCopter;" \n
+ "_floorCopterPos = _copterPos;" \n
+ "_floorCopterPos set [2,0];" \n
+ "_dropChance= _dropChanceMin;" \n
+ "" \n
+ "" \n
+ "//Mission (Short) Checks" \n
+ "if(_nearDrop && !_dropDone)then{" \n
+ "" \n
+ "" \n
+ "//Can See Players" \n
+ "if(count _nrPlyrs > 0)then{" \n
+ "{" \n
+ "if !(lineIntersects [_copterPos, eyePos _x, _x, _axeCopter])then{" \n
+ "_dropPos = getPos _x;" \n
+ "_dropChance = _dropChance + 5;" \n
+ "};" \n
+ "} forEach _nrPlyrs;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "if(_isSmoke)then{" \n
+ "_dropChance = _dropChance + 50;" \n
+ "_smokeSeen = true;" \n
+ "};" \n
+ "" \n
+ "//systemchat format [""Is Smoke: %1 | Chance: %2 / %4 | Fired: %3 | Drop Done: %5"",_isSmoke,_dropChance,axeFiredNear,_dropChanceCheck,_dropDone];" \n
+ "" \n
+ "" \n
+ "//Drop" \n
+ "" \n
+ "if(_dropChanceCheck < _dropChance)then{" \n
+ "_callDrop = true;" \n
+ "//hint format[""Dropping from %1"",_axeCopter];" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "};" \n
+ "" \n
+ "//Redirect to finish" \n
+ "if(!_redirectDone && (_floorCopterPos distance _dropPos) < _dropAtDist)then{" \n
+ "driver _axeCopter doMove _finPos;" \n
+ "//hint format[""Redirecting %1"",_axeCopter];" \n
+ "_redirectDone = true;" \n
+ "};" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class do_instinct
+ {
+ priority = 80.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class air_drop
+ {
+ name = "air_drop";
+ init = /*%FSM*/"_missionName = ""EventAirDrop"";" \n
+ "" \n
+ "//settings" \n
+ "_cHeight = 120;//Chopper Height" \n
+ "_maxDrops = 3;//Max drops during journey" \n
+ "_dropChanceMin = 20;// Other factors affect this eg smoke and visible player count" \n
+ "_freqCheck = 1.5;//Quick check every x ticks." \n
+ "_longCheck = 10;//Long checks duration" \n
+ "_msgMaxFrequency = 30;//Only show message every x ticks." \n
+ "_dropAtDist = (floor (random 380)) max 220;//Pilot can spot players in the range." \n
+ "" \n
+ "//Default Vars" \n
+ "_plrArr = [""Epoch_Man_base_F"",""Epoch_Female_base_F""];" \n
+ "_doDispose = false;" \n
+ "_plyr = player;" \n
+ "_plyrPos = getPos _plyr;" \n
+ "_tStart = diag_tickTime;" \n
+ "_callDispose = false;" \n
+ "_m = diag_tickTime;" \n
+ "_axeMessage = """";" \n
+ "_wDiag = """";" \n
+ "_wDiag2 = """";" \n
+ "_missionTimer = diag_tickTime;" \n
+ "_sanityCheck = 0;" \n
+ "_criteria =""(false)"";" \n
+ "_criteriaMetAction = nil;" \n
+ "_actionDone = false;" \n
+ "_decisionMade = false;" \n
+ "_sWait = 0;" \n
+ "_lt = diag_tickTime;" \n
+ "_t = _lt;" \n
+ "axeInDropMission = true;" \n
+ "_startPos = [0,0,0];" \n
+ "_isOnWater = true;//To Do" \n
+ "_smokeAndLights = [""SmokeShell"",""SmokeShellRed"",""SmokeShellGreen"",""SmokeShellYellow"",""SmokeShellPurple"",""SmokeShellBlue"",""SmokeShellOrange""];" \n
+ "if(SunOrMoon < 1)then{" \n
+ "_smokeAndLights = [""Chemlight_green"",""Chemlight_red"",""Chemlight_yellow"",""Chemlight_blue""];" \n
+ "};" \n
+ "axeFiredNear = ["""",""""];" \n
+ "_smokeEH = _plyr addEventHandler [""FiredNear"", ""airDropHandle setFSMVariable [""""axeFiredNear"""",[_this select 3, _this select 6]];""];" \n
+ "_smokeCount = 0;" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="setup";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/"_doneCheck = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class instinct
+ {
+ name = "instinct";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class instinct_done
+ {
+ priority = 100.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_decisionMade;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 90.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!alive driver _axeCopter || _callDispose;"/*%FSM*/;
+ action=/*%FSM*/"_doDispose = true;" \n
+ "_decisionMade = true;" \n
+ "_actionDone = false;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class long_checks
+ {
+ priority = 85.000000;
+ to="long_checks";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_decisionMade && diag_tickTime - _lt > _longCheck;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class drop
+ {
+ priority = 85.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_callDrop;"/*%FSM*/;
+ action=/*%FSM*/"_doDrop = true;" \n
+ "_decisionMade = true;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class no_instinct
+ {
+ priority = 80.000000;
+ to="reset___checks";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_decisionMade && diag_tickTime - _t > _freqCheck;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class action
+ {
+ name = "action";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class complete
+ {
+ priority = 100.000000;
+ to="long_checks";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_actionDone && ((call compile _criteria) || (diag_tickTime > (_t + _sWait)));"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "if(!isNil ""_criteriaMetAction"")then{" \n
+ "call _criteriaMetAction;" \n
+ "};" \n
+ "" \n
+ "//Reset Brain Vars" \n
+ "_criteria =""(false)"";" \n
+ "_criteriaMetAction = nil;" \n
+ "_actionDone = false;" \n
+ "_decisionMade = false;" \n
+ "_sWait = 0;" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 95.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doDispose;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class drop
+ {
+ priority = 0.000000;
+ to="check_landing";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doDrop;"/*%FSM*/;
+ action=/*%FSM*/"_doDrop = false;" \n
+ "_callDrop = false;" \n
+ "_t = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/"{" \n
+ "deleteVehicle _x;" \n
+ "}forEach units group _axeCopter;" \n
+ "" \n
+ "_plyr removeEventHandler [""FiredNear"", _smokeEH];" \n
+ "" \n
+ "deleteVehicle _axeCopter;" \n
+ "" \n
+ "axeInDropMission = false;" \n
+ "" \n
+ "diag_log ""Dispose"";" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_drop
+ {
+ name = "do_drop";
+ init = /*%FSM*/"" \n
+ "EPOCH_airDropCrate_PVS = [_axeCopter,_plyr,Epoch_personalToken];" \n
+ "publicVariableServer ""EPOCH_airDropCrate_PVS"";" \n
+ "" \n
+ "_dropDone = true;" \n
+ "" \n
+ "_sWait = 0;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(unitReady (driver _axeCopter))"";" \n
+ "_criteriaMetAction = compile """ \n
+ "driver _axeCopter doMove _finPos;" \n
+ """;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/"_doneCheck = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class setup
+ {
+ name = "setup";
+ init = /*%FSM*/"//Mission specific vars" \n
+ "" \n
+ "//Drop" \n
+ "_dropDone = false;" \n
+ "_nearDrop = false;" \n
+ "" \n
+ "_callDrop = false;" \n
+ "_doDrop = false;" \n
+ "_dropCount = 0;" \n
+ "_dropChance= _dropChanceMin;" \n
+ "_dropChanceCheck = 100;" \n
+ "_dropDone = false;" \n
+ "axeDropLight = objNull;" \n
+ "" \n
+ "//Players" \n
+ "_nrPlyrs = [];" \n
+ "_nrSmokes = [];" \n
+ "axePlyrFired = """";" \n
+ "_isSmoke = false;" \n
+ "_smokeSeen = false;" \n
+ "" \n
+ "//Move On" \n
+ "_callMoveOn = false;" \n
+ "" \n
+ "//Copter" \n
+ "axeMissionObj = objNull;" \n
+ "axeCopterFiredNear = [objNull,0];" \n
+ "axeCopterHit = [objNull,0];" \n
+ "_startPos = getMarkerPos ""center"";" \n
+ "" \n
+ "_redirectDone = false;" \n
+ "" \n
+ "//Debug" \n
+ "// _startPos = (getPosATl player) findEmptyPosition [1,75,""B_Heli_Transport_01_F""];" \n
+ "_finPos = [_startPos, ((_startPos distance _plyrPos) *2) max 2000, [_startPos, _plyrPos] call BIS_fnc_dirTo] call BIS_fnc_relPos;" \n
+ "" \n
+ "//Attack" \n
+ "_doAttack = false;" \n
+ "_callAttack = false;" \n
+ "_trgt = objNull;" \n
+ "" \n
+ "//Drop" \n
+ "//axeLightColours = [[0.8438, 0.1383, 0.1353],[0.2125, 0.6258, 0.4891],[0.9883, 0.8606, 0.0719],[0.4341, 0.1388, 0.4144],[0.1183, 0.1867, 1],[0.6697, 0.2275, 0.10053],[1, 0.4177, 0.7588]];" \n
+ "" \n
+ "_plyrPos = getPosATL player;" \n
+ "" \n
+ "_dropPos = _plyrPos;" \n
+ "" \n
+ "EPOCH_createAirDrop_PVS = [player,Epoch_personalToken,_startPos];" \n
+ "publicVariableServer ""EPOCH_createAirDrop_PVS"";" \n
+ "" \n
+ "" \n
+ "_axeCopter = objNull;" \n
+ "_copters = [];" \n
+ "_findTimer = diag_TickTime;" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="find_Copter";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/"_doneCheck = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class long_checks
+ {
+ name = "long_checks";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class done_long_checks
+ {
+ priority = 100.000000;
+ to="reset___checks";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck < 1;"/*%FSM*/;
+ action=/*%FSM*/"_sanityCheck = 100;" \n
+ "_lt = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class checks
+ {
+ priority = 60.000000;
+ to="long_checks";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 60;"/*%FSM*/;
+ action=/*%FSM*/"_dropDistAway = _axeCopter distance _dropPos;" \n
+ "_dropChanceCheck = random 100;" \n
+ "_copterPos = getPos _axeCopter;" \n
+ "_floorCopterPos = _copterPos;" \n
+ "_floorCopterPos set [2,0];" \n
+ "" \n
+ "//Find Players" \n
+ "_nrPlyrs = nearestObjects[_floorCopterPos, _plrArr, (_dropAtDist * 1.8)];" \n
+ "if(count _nrPlyrs > 0)then{" \n
+ "_dropPos = getPosATL (_nrPlyrs select 0);" \n
+ "_nearDrop = true;" \n
+ "}else{" \n
+ "_nearDrop = false;" \n
+ "};" \n
+ "" \n
+ "//Find Smoke / Chemlight" \n
+ "if!(_isSmoke)then{" \n
+ "if!(isNull ((getposATL _plyr) nearestobject ""SmokeShell""))then{" \n
+ "_isSmoke = true;" \n
+ "};" \n
+ "};" \n
+ "" \n
+ "//Redirect to finish" \n
+ "if(!_redirectDone && (_floorCopterPos distance _dropPos) < _dropAtDist)then{" \n
+ "driver _axeCopter doMove _finPos;" \n
+ "_redirectDone = true;" \n
+ "};" \n
+ "" \n
+ "//Dispose" \n
+ "" \n
+ "if(_dropDone)then{" \n
+ "_nrPlyrsCS = nearestObjects[_floorCopterPos, _plrArr, 1800];" \n
+ "if(count _nrPlyrsCS < 1)then{" \n
+ "_callDispose = true;" \n
+ "};" \n
+ "};" \n
+ "" \n
+ "//Potential for players to see copter dispose.." \n
+ "if(_axeCopter distance _finPos < 400 || !(canMove _axeCopter))then{" \n
+ "_callDispose = true;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "//Messaging" \n
+ "if(_t - _m > _msgMaxFrequency)then{" \n
+ "" \n
+ "if(_wDiag != """")then{" \n
+ "titleText [_wDiag,""PLAIN"",6];" \n
+ "};" \n
+ "" \n
+ "if(_wDiag2 != """")then{" \n
+ "" \n
+ "_wDiag2 spawn {" \n
+ "uiSleep 6;" \n
+ "titleText [_this,""PLAIN"",6];" \n
+ "};" \n
+ "" \n
+ "};" \n
+ "" \n
+ "_wDiag = """";" \n
+ "_wDiag2 = """";" \n
+ "_m = _t;" \n
+ "};" \n
+ "" \n
+ "_sanityCheck = 0;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class find_Copter
+ {
+ name = "find_Copter";
+ init = /*%FSM*/"_axeCopter = axeMissionObj;" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class failed
+ {
+ priority = 30.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"isNull _axeCopter && diag_tickTime - _findTimer > 30;"/*%FSM*/;
+ action=/*%FSM*/"_doDispose = true;" \n
+ "_decisionMade = true;" \n
+ "_t = diag_tickTime;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class found
+ {
+ priority = 20.000000;
+ to="hover";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!isNull _axeCopter;"/*%FSM*/;
+ action=/*%FSM*/"//systemchat format [""found: %1 / %2"",_axeCopter,axeMissionObj];" \n
+ "" \n
+ "_axeCopter flyinheight _cHeight;" \n
+ "_driver = driver _axeCopter;" \n
+ "" \n
+ "_grp = group _driver;" \n
+ "_grpCopter = _grp;" \n
+ "_unit = gunner _axeCopter;" \n
+ "" \n
+ "_axeCopter setVehicleLock ""LOCKEDPLAYER""; " \n
+ "" \n
+ "_grp setCombatMode ""BLUE""; "/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class not_found
+ {
+ priority = 10.000000;
+ to="find_Copter";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"isNull _axeCopter && diag_tickTime - _t > 0.5;"/*%FSM*/;
+ action=/*%FSM*/"_t = diag_tickTime;" \n
+ "//systemchat format [""not found: %1 / %2"",_axeCopter,axeMissionObj];"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class hover
+ {
+ name = "hover";
+ init = /*%FSM*/"//systemchat format[""Hovering: %1"",unitReady _driver];"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class wait
+ {
+ priority = 0.000000;
+ to="hover";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"((getPosATL _axeCopter) select 2) > (_cHeight *2);"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class arrived
+ {
+ priority = 0.000000;
+ to="reset___checks";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"((getPosATL _axeCopter) select 2) < (_cHeight *2);"/*%FSM*/;
+ action=/*%FSM*/"_driver doMove _dropPos;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class check_landing
+ {
+ name = "check_landing";
+ init = /*%FSM*/"_pos = getPosATL _axeCopter;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class over_land
+ {
+ priority = 0.000000;
+ to="do_drop";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"! surfaceIsWater _pos"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class over_water
+ {
+ priority = 0.000000;
+ to="check_landing";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"surfaceIsWater _pos && diag_tickTime - _t > 3;"/*%FSM*/;
+ action=/*%FSM*/"_t = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="air_drop";
+ finalStates[] =
+ {
+ "end"
+ };
+};
+/*%FSM*/
\ No newline at end of file
diff --git a/Sources/epoch_code/System/Group_Leader_Brain.fsm b/Sources/epoch_code/System/Group_Leader_Brain.fsm
new file mode 100644
index 00000000..3e53df11
--- /dev/null
+++ b/Sources/epoch_code/System/Group_Leader_Brain.fsm
@@ -0,0 +1,477 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"ai_leader",0,250,319.059235,-127.649353,409.059235,-77.649399,0.000000,"ai leader"};
+item1[] = {"_",8,218,338.523376,-10.716812,390.475464,17.688435,0.000000,""};
+item2[] = {"update",2,250,319.499451,93.657814,409.499451,143.657806,0.000000,"update"};
+item3[] = {"near_destination",4,218,408.573456,158.579071,498.573456,208.579102,100.000000,"near" \n "destination"};
+item4[] = {"player_in_sight",4,218,502.524200,39.617886,592.524170,89.617889,40.000000,"player" \n "in sight"};
+item5[] = {"player_hidden",4,218,445.323975,-4.438395,535.323608,45.561600,30.000000,"player" \n "hidden"};
+item6[] = {"dest_copter",2,250,583.815979,-26.369762,673.815979,23.630268,0.000000,"dest copter"};
+item7[] = {"dest_player",2,250,706.111816,0.834900,796.111816,50.834904,0.000000,"dest player"};
+item8[] = {"_",8,218,724.422119,104.861000,776.374146,133.266235,0.000000,""};
+item9[] = {"wait_start",2,250,584.072021,93.724655,674.072021,143.724655,0.000000,"wait start"};
+item10[] = {"wait",4,218,468.203522,93.278336,558.203247,143.278381,1.000000,"wait"};
+item11[] = {"new_position",2,250,584.680847,298.649109,674.680847,348.649109,0.000000,"new position"};
+item12[] = {"target_lost",4,218,18.489220,94.627281,108.489197,144.627258,50.000000,"target lost"};
+item13[] = {"nearest_house",2,250,17.506531,-5.606630,107.506561,44.393475,0.000000,"nearest house"};
+item14[] = {"end",1,250,314.447540,-310.915253,404.447571,-260.915253,0.000000,"end"};
+item15[] = {"leader_dead",4,218,319.214050,212.361969,409.214050,262.361969,60.000000,"leader dead"};
+item16[] = {"promotion",2,4346,319.214050,300.148834,409.214355,350.148834,0.000000,"promotion"};
+item17[] = {"player_gone",4,218,198.134048,272.603302,288.134033,322.603271,45.000000,"player gone"};
+item18[] = {"no_room",4,218,158.053757,-5.606592,248.053741,44.393425,1.000000,"no room"};
+item19[] = {"next_house",2,250,158.030380,-96.996155,248.030426,-46.996162,0.000000,"next house"};
+item20[] = {"new_player",2,250,319.869293,412.538513,409.869354,462.538452,0.000000,"new player"};
+item21[] = {"_",8,218,36.839310,-86.383507,88.791382,-57.978252,0.000000,""};
+item22[] = {"garrison",2,250,17.812634,-164.813538,107.812653,-114.813522,0.000000,"garrison"};
+item23[] = {"no_room",4,218,158.053757,-180.290115,248.053741,-130.290115,1.000000,"no room"};
+item24[] = {"Wait_240sec",4,218,151.791382,-310.784332,241.791382,-260.784332,0.000000,"Wait" \n "240sec"};
+link0[] = {0,1};
+link1[] = {1,2};
+link2[] = {2,3};
+link3[] = {2,4};
+link4[] = {2,5};
+link5[] = {2,12};
+link6[] = {2,15};
+link7[] = {2,17};
+link8[] = {3,11};
+link9[] = {4,7};
+link10[] = {5,6};
+link11[] = {6,8};
+link12[] = {7,8};
+link13[] = {8,9};
+link14[] = {9,10};
+link15[] = {10,2};
+link16[] = {11,8};
+link17[] = {12,13};
+link18[] = {13,18};
+link19[] = {13,21};
+link20[] = {15,16};
+link21[] = {16,8};
+link22[] = {17,20};
+link23[] = {18,19};
+link24[] = {19,21};
+link25[] = {19,23};
+link26[] = {20,8};
+link27[] = {21,22};
+link28[] = {22,24};
+link29[] = {23,19};
+link30[] = {24,14};
+globals[] = {0.000000,0,0,0,0,640,480,1,41,6316128,1,-74.395943,883.356445,550.082520,-244.601898,881,731,1};
+window[] = {2,-1,-1,-1,-1,853,125,1163,125,3,899};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "ai leader";
+ class States
+ {
+ /*%FSM*/
+ class ai_leader
+ {
+ name = "ai_leader";
+ init = /*%FSM*/"_leaderMoveTo = _this select 0;" \n
+ "_copter = _this select 1;" \n
+ "_plyr = _this select 2;" \n
+ "_leader = _this select 3;" \n
+ "_grp = group _leader;" \n
+ "_lastSeen = time;" \n
+ "axeAIGarrison = false;" \n
+ "" \n
+ "_trgt = _copter;" \n
+ "_trgtPos = getPos _trgt;" \n
+ "" \n
+ "_leaderMinDist = 20;" \n
+ "_leaderMaxDist = 60;" \n
+ "" \n
+ "//debug" \n
+ "if (isNil ""axeDebug"") then {axeDebug = false;};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="update";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class update
+ {
+ name = "update";
+ init = /*%FSM*/"_leaderPosActual = getPosATL _leader;" \n
+ "_canSeePlyr = (!lineIntersects [aimPos _plyr, eyePos _leader, _plyr, _leader]);" \n
+ "_2dDistPlyr = _plyr distance2D (getPos _leader);" \n
+ "_2DDistCopter = _copter distance2D (getPos _leader);" \n
+ "_nrPlayers = _leaderPosActual nearEntities[[""Epoch_Male_F"", ""Epoch_Female_F""], 250];" \n
+ "" \n
+ "//debug" \n
+ "if (axeDebug) then {" \n
+ "axePositionFind = 0;" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class near_destination
+ {
+ priority = 100.000000;
+ to="new_position";
+ precondition = /*%FSM*/"_2dDistMove = _leaderMoveTo distance2D (getPos _leader);"/*%FSM*/;
+ condition=/*%FSM*/"_2dDistMove < 12;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class leader_dead
+ {
+ priority = 60.000000;
+ to="promotion";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!alive _leader;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class target_lost
+ {
+ priority = 50.000000;
+ to="nearest_house";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_2dDistPlyr > 250) || (axeDebug && axeAIGarrison);"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class player_gone
+ {
+ priority = 45.000000;
+ to="new_player";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_2dDistPlyr > 800) && (count _nrPlayers > 0) && ((time -_lastSeen) > 480 );"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class player_in_sight
+ {
+ priority = 40.000000;
+ to="dest_player";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_canSeePlyr;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class player_hidden
+ {
+ priority = 30.000000;
+ to="dest_copter";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_canSeePlyr;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dest_copter
+ {
+ name = "dest_copter";
+ init = /*%FSM*/"_trgt =_copter;" \n
+ "_trgtPos = getPos _copter;" \n
+ "_leaderMinDist = 10;" \n
+ "_leaderMaxDist = 60;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="wait_start";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dest_player
+ {
+ name = "dest_player";
+ init = /*%FSM*/"_trgt = _plyr;" \n
+ "_trgtPos = getPos _plyr;" \n
+ "_leaderMinDist = 20;" \n
+ "_leaderMaxDist = 80;" \n
+ "_lastSeen = time;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="wait_start";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class wait_start
+ {
+ name = "wait_start";
+ init = /*%FSM*/"_t = time;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class wait
+ {
+ priority = 1.000000;
+ to="update";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"time > _t + (1 + random 1);"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class new_position
+ {
+ name = "new_position";
+ init = /*%FSM*/"_leaderMoveTo = [_trgtPos,_leaderMinDist,_leaderMaxDist,5,0,5,0] call BIS_fnc_findSafePos;" \n
+ "_leaderLastPos = getPosATL _leader;" \n
+ "" \n
+ "" \n
+ "{" \n
+ "_x doMove _leaderMoveTo;" \n
+ "}forEach units _grp;" \n
+ "" \n
+ "//debug" \n
+ "if (axeDebug) then {" \n
+ "axePositionFind = axePositionFind +1;" \n
+ "hint ""Leader Moving"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="wait_start";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class nearest_house
+ {
+ name = "nearest_house";
+ init = /*%FSM*/"_nrBuild = nearestBuilding _leader;" \n
+ "_garrisonPos = getPos _nrBuild;" \n
+ "" \n
+ "" \n
+ "" \n
+ "_arrGarr = [];" \n
+ "_garrCount = 0;" \n
+ "while {format [""%1"", _nrBuild buildingPos (_garrCount)] != ""[0,0,0]"" } do {" \n
+ "_arrGarr pushBack _garrCount;" \n
+ "_garrCount = _garrCount + 1;" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class no_room
+ {
+ priority = 1.000000;
+ to="next_house";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(count _arrGarr) <= ({alive _x} count (units _grp));"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="garrison";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/"{" \n
+ "deleteVehicle _x;" \n
+ "}forEach units _grp;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class promotion
+ {
+ name = "promotion";
+ init = /*%FSM*/"{" \n
+ " if (alive _x)exitWith{ _leader = _x;_x enableAI ""AUTOTARGET"";};" \n
+ "}forEach units _grp;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="wait_start";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class next_house
+ {
+ name = "next_house";
+ init = /*%FSM*/"_nrBuilds = nearestObjects [_leaderPosActual,[""house""],250];" \n
+ "_nrBuild = _nrBuilds select (floor(random (count _nrBuilds)));" \n
+ "" \n
+ "" \n
+ "_arrGarr = [];" \n
+ "_garrCount = 0;" \n
+ "while {format [""%1"", _nrBuild buildingPos (_garrCount)] != ""[0,0,0]"" } do {" \n
+ "_arrGarr pushBack _garrCount;" \n
+ "_garrCount = _garrCount + 1;" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class no_room
+ {
+ priority = 1.000000;
+ to="next_house";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(count _arrGarr) <= ({alive _x} count (units _grp));"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="garrison";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class new_player
+ {
+ name = "new_player";
+ init = /*%FSM*/"_trgt = _nrPlayers select (floor(random (count _nrPlayers)));" \n
+ "_plyr = _trgt;" \n
+ "" \n
+ "//debug" \n
+ "if (axeDebug) then {" \n
+ "axeDebugProcedure=""select new target"";" \n
+ "axeNewTargets = axeNewTargets + 1;" \n
+ "};" \n
+ "" \n
+ "//" \n
+ "// A GOOD PLACE TO DEAL WITH OWNERSHIP TRANSFER.. (TODO: EPOCH_server_changeOwner;)" \n
+ "// New Owner from _nrPlayers" \n
+ "//"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="wait_start";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class garrison
+ {
+ name = "garrison";
+ init = /*%FSM*/"_grp setBehaviour ""CARELESS "";" \n
+ "_grp setCombatMode ""GREEN"";" \n
+ "_garrIndex = 0;" \n
+ "{" \n
+ "_garrPos = (_nrBuild buildingPos (_arrGarr select _garrIndex));" \n
+ "_x doMove _garrPos;" \n
+ "_garrIndex = _garrIndex + 1;" \n
+ "}forEach units _grp;" \n
+ "" \n
+ "_t = diag_tickTime;" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Wait_240sec
+ {
+ priority = 0.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _t) > 240;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="ai_leader";
+ finalStates[] =
+ {
+ "end"
+ };
+};
+/*%FSM*/
diff --git a/Sources/epoch_code/System/LOGIN.fsm b/Sources/epoch_code/System/LOGIN.fsm
new file mode 100644
index 00000000..8300290a
--- /dev/null
+++ b/Sources/epoch_code/System/LOGIN.fsm
@@ -0,0 +1,114 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"Init",0,250,-300.000000,-225.000000,-200.000000,-175.000000,0.000000,"Init"};
+item1[] = {"_",8,218,-300.000000,-150.000000,-200.000000,-100.000000,0.000000,""};
+item2[] = {"Process",2,250,-300.000000,-75.000000,-200.000000,-25.000000,0.000000,"Process"};
+item3[] = {"Login",4,218,-150.000000,-75.000000,-50.000000,-25.000000,0.000000,"Login"};
+item4[] = {"Return_Random_Auth",2,250,-150.000000,0.000000,-50.000000,50.000000,0.000000,"Return Random" \n "Auth String"};
+item5[] = {"Wait_for__Random",4,218,-25.000000,0.000000,75.000000,50.000000,0.000000,"Wait for " \n "Random PVC"};
+item6[] = {"Start_Client_Code",2,4346,-25.000000,75.000000,75.000000,125.000000,0.000000,"Start Client" \n "Code Push" \n ""};
+link0[] = {0,1};
+link1[] = {1,2};
+link2[] = {2,3};
+link3[] = {3,4};
+link4[] = {4,5};
+link5[] = {5,6};
+globals[] = {25.000000,1,0,0,16777215,640,480,1,128,6316128,1,-477.081665,110.859840,361.256592,-272.021912,817,880,1};
+window[] = {2,-1,-1,-32000,-32000,776,274,1299,39,3,835};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "LOGIN";
+ class States
+ {
+ /*%FSM*/
+ class Init
+ {
+ name = "Init";
+ init = /*%FSM*/"diag_log ""Loaded Client Side EAH"";" \n
+ "" \n
+ "// NOTES " \n
+ "// 1st PVC" \n
+ "// EPOCH_login_PVC = first random string for next PVC" \n
+ "// 2nd PVC" \n
+ "// _randomPVC = EPOCH_login_PVC"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="Process";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Process
+ {
+ name = "Process";
+ init = /*%FSM*/"// "/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Login
+ {
+ priority = 0.000000;
+ to="Return_Random_Auth";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!isNil ""EPOCH_login_PVC"""/*%FSM*/;
+ action=/*%FSM*/"_randomPVC = EPOCH_login_PVC;" \n
+ "EPOCH_login_PVC = nil;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Return_Random_Auth
+ {
+ name = "Return_Random_Auth";
+ init = /*%FSM*/"PLAYER_LOGIN = _randomPVC;" \n
+ "publicVariableServer ""PLAYER_LOGIN"";"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Wait_for__Random
+ {
+ priority = 0.000000;
+ to="Start_Client_Code";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!isNil _randomPVC"/*%FSM*/;
+ action=/*%FSM*/"_data = missionNamespace getVariable [_randomPVC,""""];" \n
+ "missionNamespace setVariable [_randomPVC,nil];"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Start_Client_Code
+ {
+ name = "Start_Client_Code";
+ init = /*%FSM*/"call compile _data;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ };
+ initState="Init";
+ finalStates[] =
+ {
+ };
+};
+/*%FSM*/
\ No newline at end of file
diff --git a/Sources/epoch_code/System/Looter_Brain.fsm b/Sources/epoch_code/System/Looter_Brain.fsm
new file mode 100644
index 00000000..48c6513a
--- /dev/null
+++ b/Sources/epoch_code/System/Looter_Brain.fsm
@@ -0,0 +1,1003 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"looter",0,250,-316.429199,-195.383255,-226.429291,-145.383362,0.000000,"looter"};
+item1[] = {"_",8,218,62.332706,-185.990021,114.284866,-157.584717,0.000000,""};
+item2[] = {"instinct",2,250,165.295456,-196.723892,255.295410,-146.723892,0.000000,"instinct"};
+item3[] = {"sanity_check",4,218,254.885590,-14.634194,344.885468,35.365761,110.000000,"sanity check"};
+item4[] = {"action",2,250,164.446381,121.731827,254.446365,171.731903,0.000000,"action"};
+item5[] = {"dispose",4,218,110.636703,-324.560150,200.636765,-274.560181,90.000000,"dispose"};
+item6[] = {"_",8,218,182.964218,311.201538,234.916306,339.606750,0.000000,""};
+item7[] = {"reset_vars",2,250,-57.248745,-196.860123,32.751255,-146.860138,0.000000,"reset vars"};
+item8[] = {"_",8,218,-150.031967,-184.788101,-98.079796,-156.382797,0.000000,""};
+item9[] = {"complete",4,218,-57.972878,-94.263466,32.027390,-44.263451,100.000000,"complete"};
+item10[] = {"move",4,218,-0.342163,180.396515,89.657806,230.396545,20.000000,"move"};
+item11[] = {"end",1,250,-241.719803,14.907898,-151.719772,64.907913,0.000000,"end"};
+item12[] = {"dispose",4,218,-59.072083,14.028580,30.927921,64.028580,95.000000,"dispose"};
+item13[] = {"do_move",2,250,-0.039097,298.845337,89.960938,348.845337,0.000000,"do move"};
+item14[] = {"no_decision",4,218,38.858673,-279.436768,128.858643,-229.436798,95.000000,"no decision"};
+item15[] = {"instinct_done",4,218,165.528030,-96.910675,255.527969,-46.910683,100.000000,"instinct done"};
+item16[] = {"move",4,218,352.282043,-238.919754,442.282043,-188.919662,50.000000,"move"};
+item17[] = {"feeling",2,250,472.400177,-15.063545,562.400085,34.936440,0.000000,"feeling"};
+item18[] = {"seen_target",4,218,329.395966,-64.330688,419.395996,-14.330631,90.000000,"seen target"};
+item19[] = {"checked",4,218,404.902252,83.974167,494.902252,133.974197,10.000000,"checked"};
+item20[] = {"done",4,218,306.785492,15.474709,396.785431,65.474731,100.000000,"done"};
+item21[] = {"map",4,218,193.335922,-354.356598,283.335938,-304.356598,80.000000,"map"};
+item22[] = {"create_map",2,250,416.776306,-354.331238,506.776428,-304.331238,0.000000,"create map"};
+item23[] = {"_",8,218,435.308929,-185.990021,487.261078,-157.584717,0.000000,""};
+item24[] = {"health_check",4,218,405.445160,-104.903877,495.445251,-54.903847,80.000000,"health check"};
+item25[] = {"near_entities",4,218,495.029236,-123.028557,585.029114,-73.028694,70.000000,"near entities"};
+item26[] = {"stuck",4,218,517.684387,96.920174,607.683960,146.920197,20.000000,"stuck"};
+item27[] = {"attack",4,218,402.979858,195.707932,492.979828,245.708084,30.000000,"attack"};
+item28[] = {"approach_target",2,250,402.044464,298.770935,492.044525,348.771057,0.000000,"approach target"};
+item29[] = {"close_to_target",4,218,403.431458,380.984894,493.431427,430.984894,20.000000,"close to target"};
+item30[] = {"do_attack",2,4346,267.780060,380.324005,357.780273,430.324005,0.000000,"do attack"};
+item31[] = {"not_close",4,218,269.156097,298.637848,359.156128,348.637695,10.000000,"not close"};
+item32[] = {"attack",4,218,255.443695,-315.317230,345.443695,-265.317230,70.000000,"attack"};
+item33[] = {"hide",4,218,314.806854,-279.385742,404.806854,-229.385834,60.000000,"hide"};
+item34[] = {"hide",4,218,-137.562561,121.185471,-47.562569,171.185471,30.000000,"hide"};
+item35[] = {"find_spot",2,250,-136.411499,303.054138,-46.411499,353.054138,0.000000,"find spot"};
+item36[] = {"not_safe",4,218,-282.597107,303.054138,-192.597046,353.054138,10.000000,"not safe"};
+item37[] = {"is_safe",4,218,-135.260468,380.175629,-45.260445,430.175629,5.000000,"is safe"};
+item38[] = {"do_hide",2,250,-0.585583,379.024567,89.414429,429.024567,0.000000,"do hide"};
+item39[] = {"gun_fire",4,218,577.061523,-89.227417,667.061523,-39.227440,60.000000,"gun fire"};
+item40[] = {"calm_down",4,218,616.574707,-39.288197,706.574707,10.711815,50.000000,"calm down"};
+item41[] = {"interrupt",4,218,58.118843,-94.064064,148.118866,-44.064060,90.000000,"interrupt"};
+item42[] = {"armed___unarmed",4,218,610.712585,28.498322,700.712585,78.498322,40.000000,"armed / unarmed"};
+link0[] = {0,8};
+link1[] = {1,2};
+link2[] = {2,5};
+link3[] = {2,14};
+link4[] = {2,15};
+link5[] = {2,16};
+link6[] = {2,21};
+link7[] = {2,32};
+link8[] = {2,33};
+link9[] = {3,17};
+link10[] = {4,3};
+link11[] = {4,9};
+link12[] = {4,10};
+link13[] = {4,12};
+link14[] = {4,27};
+link15[] = {4,34};
+link16[] = {4,41};
+link17[] = {5,2};
+link18[] = {6,4};
+link19[] = {7,1};
+link20[] = {8,7};
+link21[] = {9,7};
+link22[] = {10,13};
+link23[] = {12,11};
+link24[] = {13,6};
+link25[] = {14,2};
+link26[] = {15,4};
+link27[] = {16,2};
+link28[] = {17,18};
+link29[] = {17,19};
+link30[] = {17,20};
+link31[] = {17,24};
+link32[] = {17,25};
+link33[] = {17,26};
+link34[] = {17,39};
+link35[] = {17,40};
+link36[] = {17,42};
+link37[] = {18,17};
+link38[] = {19,17};
+link39[] = {20,4};
+link40[] = {21,22};
+link41[] = {22,23};
+link42[] = {23,2};
+link43[] = {24,17};
+link44[] = {25,17};
+link45[] = {26,17};
+link46[] = {27,28};
+link47[] = {28,29};
+link48[] = {28,31};
+link49[] = {29,30};
+link50[] = {30,6};
+link51[] = {31,4};
+link52[] = {32,2};
+link53[] = {33,2};
+link54[] = {34,35};
+link55[] = {35,36};
+link56[] = {35,37};
+link57[] = {36,35};
+link58[] = {37,38};
+link59[] = {38,6};
+link60[] = {39,17};
+link61[] = {40,17};
+link62[] = {41,7};
+link63[] = {42,17};
+globals[] = {0.000000,0,0,0,16777215,640,480,1,149,6316128,1,-188.069107,608.596313,708.185913,-337.291473,682,895,1};
+window[] = {2,-1,-1,-32000,-32000,550,-1255,-230,25,3,700};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "looter";
+ class States
+ {
+ /*%FSM*/
+ class looter
+ {
+ name = "looter";
+ init = /*%FSM*/"_looter = _this select 0;" \n
+ "_trgt = player;" \n
+ "" \n
+ "_looter setBehaviour ""COMBAT"";" \n
+ "" \n
+ "_looterNames=[""Jaws"",""Angel"",""Bull"",""Blue"",""Cookie"",""Coral"",""Dusky"",""White"",""Hammer"",""Mako"",""Smalltooth""];" \n
+ "_looterName = _looterNames select (floor(random count _looterNames));" \n
+ "" \n
+ "_entsArr = [""Epoch_Male_F"",""Epoch_Female_F"",""Epoch_Sapper_F"",""Fin_random_EPOCH"",""Alsatian_Random_EPOCH"",""Epoch_cloak_F"",""b_survivor_F"",""Epoch_Female_Camo_F""];" \n
+ "_plyArr = [""Epoch_Male_F"",""Epoch_Female_F"",""b_survivor_F"",""Epoch_Female_Camo_F""];" \n
+ "_vehArray = [""Car""];" \n
+ "_tRange = 20;" \n
+ "_sRange = 200;" \n
+ "_vRange = 50;" \n
+ "_maxTravelTime = 480;" \n
+ "_trgtZ = 0;" \n
+ "_t = diag_tickTime;" \n
+ "_d = _t;" \n
+ "_u = _d;" \n
+ "_a = _u;" \n
+ "_h = _a;" \n
+ "_c = _h;" \n
+ "_dirTo = 0;" \n
+ "_lDist = 0;" \n
+ "" \n
+ "_looterPos=[0,0,0];" \n
+ "_trgtPos=[0,0,0];" \n
+ "_hidePos = [0,0,0];" \n
+ "_nrPlyrs = [];" \n
+ "" \n
+ "//Behaviour" \n
+ "_fearTrigger = 12;" \n
+ "_angerTrigger = 24;" \n
+ "_lAnger = 0;" \n
+ "_lFear = 0;" \n
+ "_lBrave = 0;" \n
+ "" \n
+ "//Looter Vars" \n
+ "_filterBuilds = [""Land_i_Addon_03_V1_F"",""Land_Offices_01_V1_F""];" \n
+ "_skipBuild = false;" \n
+ "_nrBuild = nearestBuilding _looter;" \n
+ "_inBuild = objNull;" \n
+ "_bCheckedCount = 0;" \n
+ "_doMove = false;" \n
+ "_bldMap = [];" \n
+ "_sanityCheckDone = false;" \n
+ "_arrGarr = [];" \n
+ "_arrGarrCount = [];" \n
+ "_canSee = false;" \n
+ "_sanityCheck = 0;" \n
+ "_lLastPos = [0,0,0];" \n
+ "_sanityPos = [0,0,0];" \n
+ "_sanityEnts = [];" \n
+ "_attackPos =[0,0,0];" \n
+ "_attackDir = 0;" \n
+ "_doHide = false;" \n
+ "_doAttack = false;" \n
+ "_firedNear = 0;" \n
+ "_closestBld = objNull;" \n
+ "_lootVar = 0;" \n
+ "" \n
+ "" \n
+ "//DEBUG" \n
+ "_doDebug = false;" \n
+ "_count = 0;" \n
+ "_debugDo = ""INIT"";" \n
+ "_mkrName = """";" \n
+ "_dWait = 0;" \n
+ "_strDebug = """";" \n
+ "_looterFeels = ""STARTING"";" \n
+ "axeCount = 0;" \n
+ "_strMoveTo = """";" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class instinct
+ {
+ name = "instinct";
+ init = /*%FSM*/"_looterPos = getPos _looter;" \n
+ "_nrEnts = _looterPos nearEntities [_entsArr, _sRange];" \n
+ "_dist = _trgt distance _looter;" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "systemChat format [""Instinct:%1"",diag_tickTime];" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class instinct_done
+ {
+ priority = 100.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_decisionMade;"/*%FSM*/;
+ action=/*%FSM*/"_t = diag_tickTime;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class no_decision
+ {
+ priority = 95.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_decisionMade && diag_tickTime - _t > 3;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 90.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"((_trgt distance _looter) > (_sRange * 2)) || !(alive _looter);"/*%FSM*/;
+ action=/*%FSM*/"_doDispose = true;" \n
+ "_decisionMade = true;" \n
+ "_actionDone = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class map
+ {
+ priority = 80.000000;
+ to="create_map";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"count _bldMap < 1;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class attack
+ {
+ priority = 70.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_lAnger > _angerTrigger;"/*%FSM*/;
+ action=/*%FSM*/"_doAttack = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class hide
+ {
+ priority = 60.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_lFear > _fearTrigger;"/*%FSM*/;
+ action=/*%FSM*/"_doHide = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class move
+ {
+ priority = 50.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"count _bldMap > 0;"/*%FSM*/;
+ action=/*%FSM*/"_doMove = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class action
+ {
+ name = "action";
+ init = /*%FSM*/"" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "systemChat format [""Action:%1"",diag_tickTime];" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class sanity_check
+ {
+ priority = 110.000000;
+ to="feeling";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_actionDone && diag_tickTime > _u + 4;"/*%FSM*/;
+ action=/*%FSM*/"_sanityCheck = 100;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class complete
+ {
+ priority = 100.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/"if (_doDebug) then {" \n
+ "" \n
+ "//deleteMarkerLocal ""lootePos"";" \n
+ "//_mkrName = ""lootePos"";" \n
+ "//_mkr = createMarkerLocal [_mkrName, getPos _looter];" \n
+ "//_mkrName setMarkerShapeLocal ""ICON"";" \n
+ "//_mkrName setMarkerTypeLocal ""mil_dot"";" \n
+ "//_mkrName setMarkerColorLocal ""COLORGREEN"";" \n
+ "//hint format [""%1\nMove To:%2\nWait:%3 / %5\nDistance:%4\nFeels: %6\nMoveCount: %7\nDamage: %8"",_debugDo,_strMoveTo,_sWait,_looter distance _moveTo,_sWait - (floor diag_tickTime - _dWait),_looterFeels,axeCount, damage _looter];" \n
+ "};"/*%FSM*/;
+ condition=/*%FSM*/"_actionDone && ((call compile _criteria) || (diag_tickTime > (_t + _sWait)));"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "if (!isNil ""_criteriaMetAction"") then {" \n
+ "call _criteriaMetAction;" \n
+ "};" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "//call compile format[""deleteMarkerLocal """"%1"""""",_moveTo];" \n
+ "hint format [""%1\nMove To:%2\nWait:%3 / %5\nDistance:%4\nFeels: %6\nMoveCount: %7"",_debugDo,_strMoveTo,_sWait,_looter distance _moveTo,_sWait - (floor diag_tickTime - _dWait),_looterFeels,axeCount];" \n
+ "systemChat format [""Complete:%1"",diag_tickTime];" \n
+ "};" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 95.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_doDispose || !(alive _looter)) && (diag_tickTime - _t) > 120;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class interrupt
+ {
+ priority = 90.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_allowInterrupt && (call compile _interruptReason));"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class hide
+ {
+ priority = 30.000000;
+ to="find_spot";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doHide;"/*%FSM*/;
+ action=/*%FSM*/"_doHide = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class attack
+ {
+ priority = 30.000000;
+ to="approach_target";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doAttack;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class move
+ {
+ priority = 20.000000;
+ to="do_move";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doMove;"/*%FSM*/;
+ action=/*%FSM*/"_doMove = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class reset_vars
+ {
+ name = "reset_vars";
+ init = /*%FSM*/"//Default Vars" \n
+ "_rnd = 0;" \n
+ "_actionDone = false;" \n
+ "_decisionMade = false;" \n
+ "_sWait = 0;" \n
+ "_doDispose = false;" \n
+ "_chooseTarget = false;" \n
+ "_criteria = Nil;" \n
+ "_criteriaMet = false;" \n
+ "_allowInterrupt = false;" \n
+ "_interruptReason = ""(false)"";" \n
+ "" \n
+ "_moveTo = [0,0,0];" \n
+ "" \n
+ "//Brain Vars" \n
+ "_override = false;" \n
+ "_criteria =""(false)"";" \n
+ "_criteriaMetAction = nil;" \n
+ "" \n
+ "//Feeling Vars" \n
+ "_nrTrgts = [];" \n
+ "_isThreatened = false;" \n
+ "_isSafe = false;" \n
+ "_isFriendly = false;" \n
+ "_isLonely = false;" \n
+ "_feelingDone = false;" \n
+ "" \n
+ "" \n
+ "" \n
+ "//Looter Vars" \n
+ "_findBuilding = false;" \n
+ "_arrGarr = [];" \n
+ "_sortBuilds = [];" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/"deleteVehicle _looter;" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "axeDo = Format[""Dispose | Alive:%1 | Distance: %2"",alive _looter,player distance _looter];" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_move
+ {
+ name = "do_move";
+ init = /*%FSM*/"_looter forceSpeed 7;" \n
+ "_lootperPos = getPos _looter;" \n
+ "" \n
+ "{" \n
+ "_closestBld = _bldMap select 0;" \n
+ "{if (( _x distance _lootperPos) < (_closestBld distance _lootperPos)) then {_closestBld = _x}} forEach _bldMap;" \n
+ "_sortBuilds = _sortBuilds + [_closestBld];" \n
+ "_bldMap = _bldMap - [_closestBld];" \n
+ "} forEach _bldMap;" \n
+ "" \n
+ "_bldMap = [] + _sortBuilds;" \n
+ "_moveTo = _sortBuilds select 0;" \n
+ "_bldMap set [0,""byebye""];" \n
+ "_bldMap = _bldMap - [""byebye""];" \n
+ "_looter doMove _moveTo;" \n
+ "_sWait = (_looter distance _moveTo) max 18;;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""((_looter distance _moveTo) < 2)"";" \n
+ "" \n
+ "_interruptReason = ""((_lFear > _fearTrigger) || (_lAnger > _angerTrigger))"";" \n
+ "_allowInterrupt = true;" \n
+ "" \n
+ "//Session Vars" \n
+ "_inBuild = _nrBuild;" \n
+ "_bCheckedCount = _bCheckedCount + 1;" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "axeCount = axeCount + 1;" \n
+ "_dWait = _t;" \n
+ "_strMoveTo = str(_moveTo);" \n
+ "_debugDo = ""Move"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class feeling
+ {
+ name = "feeling";
+ init = /*%FSM*/"_nrTrgts = _looter nearEntities [_entsArr, _sRange];" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class done
+ {
+ priority = 100.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck < 1;"/*%FSM*/;
+ action=/*%FSM*/"_u = diag_tickTime;" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "systemChat format [""Feeling:%1"",diag_tickTime];" \n
+ "};"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class seen_target
+ {
+ priority = 90.000000;
+ to="feeling";
+ precondition = /*%FSM*/"_canSee = (!lineIntersects [aimPos _trgt, eyePos _looter, _looter, _trgt]);" \n
+ "" \n
+ ""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 90;"/*%FSM*/;
+ action=/*%FSM*/"if (_doDebug) then {" \n
+ "" \n
+ "if (_canSee) then {" \n
+ "_looterFeels = ""Can See"";" \n
+ "if (_looter distance _trgt < 3) then {" \n
+ "" \n
+ " if (!_doAttack) then {" \n
+ " _lAnger = _lAnger + 2;" \n
+ " };" \n
+ "" \n
+ "}else" \n
+ "{" \n
+ "_lAnger = _lAnger + 1;" \n
+ "}" \n
+ "}else{" \n
+ "_looterFeels = ""Can Not See"";" \n
+ "_lAnger = (_lAnger - 4) max 0;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "};" \n
+ "" \n
+ "_sanityCheck = 90;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class health_check
+ {
+ priority = 80.000000;
+ to="feeling";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 80;"/*%FSM*/;
+ action=/*%FSM*/"if (damage _looter > 0.4) then {" \n
+ "_looter setDamage 0.4;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_sanityCheck = 80;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class near_entities
+ {
+ priority = 70.000000;
+ to="feeling";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 70;"/*%FSM*/;
+ action=/*%FSM*/"_sanityEnts = _looter nearEntities [_entsArr, 30];" \n
+ "if ((count _sanityEnts) > 2) then {" \n
+ "_looterFeels = _looterFeels + "" | High Targets"";" \n
+ "_lFear = _lFear + 1;" \n
+ "};" \n
+ "_sanityCheck = 70;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class gun_fire
+ {
+ priority = 60.000000;
+ to="feeling";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 60;"/*%FSM*/;
+ action=/*%FSM*/"_lootVar = _looter getVariable [""firedNear"",0];" \n
+ "" \n
+ "if (_lootVar > 0) then {" \n
+ "_lFear = _lFear + ((count _sanityEnts) * 3);" \n
+ "_looterFeels = ""Scared"";" \n
+ " if (_lootVar < 10) then {" \n
+ " _lAnger = _lAnger + 2;" \n
+ " };" \n
+ "" \n
+ "_looter setVariable [""firedNear"", 0];" \n
+ "};" \n
+ "" \n
+ "if ((_looter getVariable [""looterHit"",false])) then {" \n
+ "_lAnger = _lAnger + (_angerTrigger + 6);" \n
+ "_looter setVariable [""looterHit"", false];" \n
+ "};" \n
+ "" \n
+ "_sanityCheck = 60;" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class calm_down
+ {
+ priority = 50.000000;
+ to="feeling";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 50 && (diag_tickTime - _u) > 40;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_lFear = (_lFear - 1) max 0;" \n
+ "_lAnger = (_lAnger - 1) max 0;" \n
+ "" \n
+ "_looterFeels = ""Calming"";" \n
+ "_u = diag_tickTime;" \n
+ "_sanityCheck = 50;" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class armed___unarmed
+ {
+ priority = 40.000000;
+ to="feeling";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 40;"/*%FSM*/;
+ action=/*%FSM*/"{" \n
+ "" \n
+ " if ((typeof _x) in _plyArr) then {" \n
+ "" \n
+ " if ((currentWeapon _x) == """") then {" \n
+ "" \n
+ " _lBrave = (_lBrave + 1) min 100;" \n
+ "" \n
+ " };" \n
+ "" \n
+ " };" \n
+ "" \n
+ "}forEach _nrEnts;" \n
+ "" \n
+ "_sanityCheck = 40;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class stuck
+ {
+ priority = 20.000000;
+ to="feeling";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 20;"/*%FSM*/;
+ action=/*%FSM*/"_sanityPos = getPos _looter;" \n
+ "" \n
+ "if (_sanityPos distance _lLastPos < 1) then {" \n
+ "_looterFeels = _looterFeels + "" | Stuck"";" \n
+ "}else{" \n
+ "_looterFeels = _looterFeels + "" | Moving"";" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_lLastPos = [] + _sanityPos;" \n
+ "_sanityCheck = 20;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class checked
+ {
+ priority = 10.000000;
+ to="feeling";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 10;"/*%FSM*/;
+ action=/*%FSM*/"_sanityCheck = 0 ;" \n
+ "_lAnger = _lAnger min 100;" \n
+ "_lFear = _lFear min 100;" \n
+ "_lBrave = _lBrave min 100;" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_looterFeels = _looterFeels + format [""\nAnger: %1 | Fear: %2 | Brave: %3"",_lAnger,_lFear,_lBrave];" \n
+ "};"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class create_map
+ {
+ name = "create_map";
+ init = /*%FSM*/"_nrBuilds = nearestObjects [getPosATL _looter,[""house""],50];" \n
+ "" \n
+ "_strDebug = _strDebug + format [""Found %1 Buildings\n"",count _nrBuilds];" \n
+ "" \n
+ "" \n
+ "{" \n
+ "" \n
+ "if (!((typeOf _x) in _filterBuilds)) then {" \n
+ "" \n
+ " _garrCount = 0;" \n
+ "" \n
+ " while {format [""%1"", _x buildingPos (_garrCount)] != ""[0,0,0]"" } do {" \n
+ " _garrCount = _garrCount + 1;" \n
+ " };" \n
+ "" \n
+ " if (_garrCount > 0) then {" \n
+ " _arrGarr pushBack [_x,_garrCount];" \n
+ " };" \n
+ "" \n
+ "};" \n
+ "" \n
+ "}forEach _nrBuilds;" \n
+ "" \n
+ "_strDebug = _strDebug + format [""Garrison Points: %1\n%2"", _arrGarr,_arrGarrCount];" \n
+ "" \n
+ "if (count _arrGarr > 0) then {" \n
+ "" \n
+ " {" \n
+ " _garrPos = (_x select 0) buildingPos (floor random (_x select 1));" \n
+ " _bldMap pushBack _garrPos;" \n
+ "" \n
+ " }forEach _arrGarr;" \n
+ "" \n
+ "};" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "" \n
+ "_mkrName2 = """";" \n
+ "{" \n
+ "" \n
+ "//call compile format[""_mkrName2 = """"%1"""""",_x];" \n
+ "//_mkr = createMarkerLocal [_mkrName2, _x];" \n
+ "//_mkrName2 setMarkerShapeLocal ""ICON"";" \n
+ "//_mkrName2 setMarkerTypeLocal ""mil_dot"";" \n
+ "//_mkrName2 setMarkerColorLocal ""COLORBLUE"";" \n
+ "_debugDo = ""Mapping"";" \n
+ "" \n
+ "}forEach _bldMap;" \n
+ "" \n
+ "" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class approach_target
+ {
+ name = "approach_target";
+ init = /*%FSM*/"_a = diag_tickTime;" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Approach"";" \n
+ "};" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class close_to_target
+ {
+ priority = 20.000000;
+ to="do_attack";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_trgt distance _looter < 3) && (diag_tickTime > _a + 0.5);"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class not_close
+ {
+ priority = 10.000000;
+ to="action";
+ precondition = /*%FSM*/"_lDist = _looter distance _trgt ;"/*%FSM*/;
+ condition=/*%FSM*/"(_lDist > 3) && (diag_tickTime > _a + 0.9) ;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_dirTo = [_looter, getPos _trgt] call BIS_fnc_dirTo;" \n
+ "_attackPos = [_looter, _lDist - 2,_dirTo] call BIS_fnc_relPos;" \n
+ "" \n
+ "_looter forceSpeed 6;" \n
+ "_looter doMove _attackPos;" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_strMoveTo = str(_attackPos);" \n
+ "_debugDo = ""Not Close"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_attack
+ {
+ name = "do_attack";
+ init = /*%FSM*/"" \n
+ "" \n
+ "_attackDir = [(getPos _looter),(getPos _trgt)] call BIS_fnc_dirTo;" \n
+ "" \n
+ "_looter setDir _attackDir;" \n
+ "" \n
+ "doStop _looter;" \n
+ "_looter forceSpeed 0;" \n
+ "" \n
+ "_gesture = [""GestureSwing0"", ""GestureSwing1"", ""GestureSwing2""] select (floor(random 3));" \n
+ "_looter playActionNow _gesture; " \n
+ "_looter call EPOCH_client_bitePlayer;" \n
+ "" \n
+ "_sWait = 1.5;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(false)"";" \n
+ "_doAttack = false;" \n
+ "" \n
+ "_criteriaMetAction= {" \n
+ "_lAnger = (_lAnger - 4) max 0;" \n
+ "_debugDo = ""Attack Criteria Met"";" \n
+ "};" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = format[""Attack | Dir:%1"",_attackDir];" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class find_spot
+ {
+ name = "find_spot";
+ init = /*%FSM*/"_h = diag_tickTime;" \n
+ "_hidePos = [(getPosATL _looter), (floor (random 20) + 12), floor random 360] call BIS_fnc_relPos;" \n
+ "_posSafe = true;" \n
+ "" \n
+ "{" \n
+ " if (!lineIntersects [aimPos _x, eyePos _looter, _x, _looter]) then {" \n
+ "_posSafe = false;" \n
+ "};" \n
+ "} forEach _nrEnts;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class not_safe
+ {
+ priority = 10.000000;
+ to="find_spot";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_posSafe && diag_tickTime - _h > 1;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class is_safe
+ {
+ priority = 5.000000;
+ to="do_hide";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_posSafe;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_hide
+ {
+ name = "do_hide";
+ init = /*%FSM*/"_looter forceSpeed 7;" \n
+ "" \n
+ "" \n
+ "_looter doMove _hidePos;" \n
+ "_sWait = _lFear;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""((_looter distance _hidePos) < 2)"";" \n
+ "_lFear = (_lFear - 1) max 0;" \n
+ "//Session Vars" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "axeCount = axeCount + 1;" \n
+ "_dWait = _t;" \n
+ "_strMoveTo = str(_hidePos);" \n
+ "_debugDo = ""Hide"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="looter";
+ finalStates[] =
+ {
+ "end"
+ };
+};
+/*%FSM*/
diff --git a/Sources/epoch_code/System/Mission_VIP_Militia.fsm b/Sources/epoch_code/System/Mission_VIP_Militia.fsm
new file mode 100644
index 00000000..db993633
--- /dev/null
+++ b/Sources/epoch_code/System/Mission_VIP_Militia.fsm
@@ -0,0 +1,600 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"unit",0,250,-306.490601,-197.039688,-216.490692,-147.039795,0.000000,"unit"};
+item1[] = {"_",8,218,62.332706,-185.990021,114.284866,-157.584717,0.000000,""};
+item2[] = {"decision",2,250,165.295456,-196.723892,255.295410,-146.723892,0.000000,"decision"};
+item3[] = {"decision_made",4,218,165.267090,-51.429611,255.267059,-1.429623,100.000000,"decision made"};
+item4[] = {"action",2,250,47.264793,131.320435,137.264771,181.320496,0.000000,"action"};
+item5[] = {"actioning",4,218,-162.750412,131.241440,-72.750221,181.241470,100.000000,"actioning"};
+item6[] = {"dispose",4,218,93.860703,-298.416321,183.860764,-248.416351,90.000000,"dispose"};
+item7[] = {"_",8,218,64.556534,392.347595,116.508629,420.752838,0.000000,""};
+item8[] = {"reset_vars",2,250,-57.248745,-196.860123,32.751255,-146.860138,0.000000,"reset vars"};
+item9[] = {"_",8,218,-150.031967,-184.788101,-98.079796,-156.382797,0.000000,""};
+item10[] = {"met",4,218,-162.962280,-131.504044,-72.962013,-81.504021,10.000000,"met"};
+item11[] = {"end",1,250,411.966034,1.474794,501.966095,51.474747,0.000000,"end"};
+item12[] = {"dispose",4,218,231.223953,1.285551,321.223938,51.285561,80.000000,"dispose"};
+item13[] = {"criteria",2,250,-163.749939,-26.246429,-73.749825,23.753551,0.000000,"criteria"};
+item14[] = {"killer",4,218,127.015411,237.161896,217.015411,287.161896,70.000000,"killer"};
+item15[] = {"target_player",2,4346,413.247467,254.265167,503.247498,304.265198,0.000000,"target player"};
+item16[] = {"no_decisiion",4,218,43.658752,-253.423935,133.658752,-203.423874,10.000000,"no decisiion"};
+item17[] = {"shots_fired",4,218,147.160431,-334.624023,237.160416,-284.624023,80.000000,"shots fired"};
+item18[] = {"shots",4,218,182.845428,129.080032,272.845428,179.080032,60.000000,"shots"};
+item19[] = {"move_to_target",2,250,410.018951,130.038605,500.018982,180.038589,0.000000,"move to target"};
+item20[] = {"unit_killed",4,218,223.288681,-349.805725,313.288727,-299.805695,70.000000,"unit killed"};
+item21[] = {"wander",4,218,333.247833,-280.119446,423.247833,-230.119507,50.000000,"wander"};
+item22[] = {"wander",4,218,93.557777,292.853455,183.557755,342.853455,40.000000,"wander"};
+item23[] = {"have_a_walk",2,250,411.888062,317.006439,501.887848,367.006439,0.000000,"have a walk"};
+item24[] = {"investigate",4,218,287.399384,-317.514160,377.399384,-267.514221,60.000000,"investigate"};
+item25[] = {"investigate",4,218,155.482483,186.267166,245.482468,236.267166,50.000000,"investigate"};
+item26[] = {"do_investigate",2,250,411.768799,191.716263,501.768799,241.716248,0.000000,"do investigate"};
+item27[] = {"pause",4,218,46.354713,-25.566845,136.354721,24.433178,5.000000,"pause"};
+link0[] = {0,9};
+link1[] = {1,2};
+link2[] = {2,3};
+link3[] = {2,6};
+link4[] = {2,16};
+link5[] = {2,17};
+link6[] = {2,20};
+link7[] = {2,21};
+link8[] = {2,24};
+link9[] = {3,4};
+link10[] = {4,5};
+link11[] = {4,12};
+link12[] = {4,14};
+link13[] = {4,18};
+link14[] = {4,22};
+link15[] = {4,25};
+link16[] = {5,13};
+link17[] = {6,2};
+link18[] = {7,4};
+link19[] = {8,1};
+link20[] = {9,8};
+link21[] = {10,8};
+link22[] = {12,11};
+link23[] = {13,10};
+link24[] = {13,27};
+link25[] = {14,15};
+link26[] = {15,7};
+link27[] = {16,2};
+link28[] = {17,2};
+link29[] = {18,19};
+link30[] = {19,7};
+link31[] = {20,2};
+link32[] = {21,2};
+link33[] = {22,23};
+link34[] = {23,7};
+link35[] = {24,2};
+link36[] = {25,26};
+link37[] = {26,7};
+link38[] = {27,4};
+globals[] = {0.000000,0,0,0,16777215,640,480,1,107,6316128,1,-474.878845,682.424866,490.488190,-417.225372,932,731,1};
+window[] = {2,-1,-1,-1,-1,725,200,1224,200,3,950};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "mission militia";
+ class States
+ {
+ /*%FSM*/
+ class unit
+ {
+ name = "unit";
+ init = /*%FSM*/"_unit = _this select 0;" \n
+ "_trgt = _this select 1;" \n
+ "_unitGrp = group _unit;" \n
+ "" \n
+ "" \n
+ "_unit setBehaviour ""CARELESS"";" \n
+ "_unit setCombatMode ""BLUE"";" \n
+ "" \n
+ "_unitNames=[""Aaron"",""Kenneth"",""Paul"",""Darren"",""Damian"",""Niklas"",""Andrew"",""Nigel"",""Harry"",""Phil"",""Antony"",""Dave"",""Hammish"",""Dickie"",""Peter"",""Conor""];" \n
+ "_unitName = _unitNames select (floor(random count _unitNames));" \n
+ "" \n
+ "_trgtArray = [""Epoch_Male_F"",""Epoch_Female_F"",""Epoch_Female_Camo_F""];" \n
+ "_vehArray = [""Car""];" \n
+ "_tRange = 20;" \n
+ "_sRange = 10;" \n
+ "_vRange = 50;" \n
+ "_maxTravelTime = 8;" \n
+ "" \n
+ "_count = 0;" \n
+ "" \n
+ "_nrBodies = [];" \n
+ "_onBoat = false;" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class decision
+ {
+ name = "decision";
+ init = /*%FSM*/"_unitPos = getPosATL _unit;" \n
+ "_daytime = daytime;" \n
+ "_nrPlyrs = _unit nearEntities [_trgtArray, 300];" \n
+ "_killer = _unitGrp getVariable [""killer"",objNull];" \n
+ "_investigate = _unitGrp getVariable [""investigate"",objNull];" \n
+ "_shotsFired = _unitGrp getVariable [""shotsFired"",[objNull,0]];" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class decision_made
+ {
+ priority = 100.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_decisionMade;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 90.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!alive _unit || (isNull axeGeneralsBoat);"/*%FSM*/;
+ action=/*%FSM*/"_doDispose = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class shots_fired
+ {
+ priority = 80.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_shotsFired select 1) > 0 && (isPlayer (_shotsFired select 0));"/*%FSM*/;
+ action=/*%FSM*/"_doShots = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class unit_killed
+ {
+ priority = 70.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(!isNull _killer);"/*%FSM*/;
+ action=/*%FSM*/"_doKiller = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class investigate
+ {
+ priority = 60.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!isNull _investigate && !_onBoat;"/*%FSM*/;
+ action=/*%FSM*/"_doInvestigate = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class wander
+ {
+ priority = 50.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_decisionMade && diag_tickTime - _w > 60 && !_onBoat;"/*%FSM*/;
+ action=/*%FSM*/"_doWander = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class no_decisiion
+ {
+ priority = 10.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_decisionMade && diag_tickTime - _t > 3;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class action
+ {
+ name = "action";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class actioning
+ {
+ priority = 100.000000;
+ to="criteria";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_actionDone;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 80.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doDispose;"/*%FSM*/;
+ action=/*%FSM*/"axeDo = ""Dispose"";"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class killer
+ {
+ priority = 70.000000;
+ to="target_player";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doKiller;"/*%FSM*/;
+ action=/*%FSM*/"_doKiller = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class shots
+ {
+ priority = 60.000000;
+ to="move_to_target";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doShots;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class investigate
+ {
+ priority = 50.000000;
+ to="do_investigate";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doInvestigate;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class wander
+ {
+ priority = 40.000000;
+ to="have_a_walk";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doWander;"/*%FSM*/;
+ action=/*%FSM*/"_doWander = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class reset_vars
+ {
+ name = "reset_vars";
+ init = /*%FSM*/"//Default Vars" \n
+ "" \n
+ "" \n
+ "_rnd = 0;" \n
+ "_actionDone = false;" \n
+ "_decisionMade = false;" \n
+ "_sWait = 0;" \n
+ "_doDispose = false;" \n
+ "_chooseTarget = false;" \n
+ "_criteria = Nil;" \n
+ "_criteriaMet = false;" \n
+ "_allowInterrupt = false;" \n
+ "_w = diag_tickTime;" \n
+ "" \n
+ "" \n
+ "_unitPos=[0,0,0];" \n
+ "_nrPlyrs = [];" \n
+ "_seePlyr = false;" \n
+ "_override = false;" \n
+ "_trade = false;" \n
+ "_useVeh = false;" \n
+ "" \n
+ "_criteriaMetAction = nil;" \n
+ "" \n
+ "_shotsFired = [objNull,0];" \n
+ "" \n
+ "" \n
+ "_doShots = false;" \n
+ "_killer = objNull;" \n
+ "_doKiller = false;" \n
+ "_doWander = false;" \n
+ "_doInvestigate = false;" \n
+ "" \n
+ "_onBoat = _unit in (crew axeGeneralsBoat);" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class criteria
+ {
+ name = "criteria";
+ init = /*%FSM*/"_i = diag_tickTime;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class met
+ {
+ priority = 10.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(call compile _criteria) || (diag_tickTime > (_t + _sWait));"/*%FSM*/;
+ action=/*%FSM*/"if (!isNil ""_criteriaMetAction"") then {" \n
+ "call _criteriaMetAction;" \n
+ "};"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class pause
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"diag_tickTime - _i > 1;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class target_player
+ {
+ name = "target_player";
+ init = /*%FSM*/"_trgt = _killer;" \n
+ "" \n
+ "_trgtPos = getPos _trgt;" \n
+ "" \n
+ "_unitGrp setBehaviour ""COMBAT"";" \n
+ "_unitGrp setCombatMode ""RED"";" \n
+ "" \n
+ "if (_onBoat) then {" \n
+ "" \n
+ "{" \n
+ " if (_x != driver axegeneralsboat && _x != commander axegeneralsboat) then {" \n
+ " if (isnull gunner axegeneralsboat) then {" \n
+ " _x assignAsGunner axegeneralsboat;" \n
+ " };" \n
+ " };" \n
+ "} forEach crew axegeneralsboat;" \n
+ "" \n
+ "" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_unit commandTarget _trgt;" \n
+ "_unit doTarget _trgt;" \n
+ "_unit doFire _trgt;" \n
+ "" \n
+ "" \n
+ "" \n
+ "_sWait = 120;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(!alive _trgt)"";" \n
+ "" \n
+ "_criteriaMetAction = {" \n
+ "" \n
+ " if (!(alive _trgt)) then {" \n
+ " _unitGrp setVariable [""killer"",objNull];" \n
+ " _unit setBehaviour ""CARELESS"";" \n
+ " _unit setCombatMode ""BLUE"";" \n
+ " };" \n
+ "" \n
+ "" \n
+ "" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class move_to_target
+ {
+ name = "move_to_target";
+ init = /*%FSM*/"" \n
+ "_trgt = _shotsFired select 0;" \n
+ "_trgtPos = getPosATL _trgt;" \n
+ "" \n
+ "if (_onBoat) then {" \n
+ "_unitGrp setBehaviour ""COMBAT"";" \n
+ "_unitGrp setCombatMode ""RED"";" \n
+ "{" \n
+ " if (_x != driver axegeneralsboat && _x != commander axegeneralsboat) then {" \n
+ " if (isnull gunner axegeneralsboat) then {" \n
+ " _x assignAsGunner axegeneralsboat;" \n
+ " };" \n
+ " };" \n
+ "} forEach crew axegeneralsboat;" \n
+ "" \n
+ "_unit commandTarget _trgt;" \n
+ "_unit doTarget _trgt;" \n
+ "_unit doFire _trgt;" \n
+ "" \n
+ "_criteria = ""(false)"";" \n
+ "" \n
+ "}else{" \n
+ "_moveTo =[_trgtPos, floor random 20 max 8, floor random 360] call BIS_fnc_relPos;" \n
+ "" \n
+ "_unit doMove _moveTo;" \n
+ "_unitGrp setVariable [""shotsFired"",[objNull,0]];" \n
+ "_unit doWatch _trgt;" \n
+ "_unitGrp setVariable [""investigate"",_trgt];" \n
+ "_criteria = ""(_unit distance _moveTo < 2)"";" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "_sWait = _maxTravelTime;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class have_a_walk
+ {
+ name = "have_a_walk";
+ init = /*%FSM*/"" \n
+ "" \n
+ "_moveTo =[getPos _trgt, (floor random 36) max 18, floor random 360] call BIS_fnc_relPos;" \n
+ "" \n
+ "_unit doMove _moveTo;" \n
+ "" \n
+ "_criteria = ""(_unit distance _moveTo < 6)"";" \n
+ "_sWait = _maxTravelTime;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "axeDo = ""Wander"";"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_investigate
+ {
+ name = "do_investigate";
+ init = /*%FSM*/"" \n
+ "_nrBodies = nearestObjects [getPos _investigate,_trgtArray , 25];" \n
+ "" \n
+ "if (count _nrBodies > 0) then {" \n
+ "" \n
+ "{" \n
+ "if (!alive _x) then {" \n
+ "_unitGrp setVariable [""killer"",_investigate];" \n
+ "};" \n
+ "}forEach _nrBodies;" \n
+ "" \n
+ "_unit doMove getPos (_nrBodies select (floor random (count _nrBodies)));" \n
+ "};" \n
+ "" \n
+ "_criteriaMetAction = {" \n
+ "_unitGrp setVariable [""investigate"",objNull]; //add to timer to stop bothering player ?" \n
+ "_doInvestigate = false;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "_criteria = ""(false)"";" \n
+ "_sWait = 6;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="unit";
+ finalStates[] =
+ {
+ "end"
+ };
+};
+/*%FSM*/
diff --git a/Sources/epoch_code/System/Phantom_Brain.fsm b/Sources/epoch_code/System/Phantom_Brain.fsm
new file mode 100644
index 00000000..8c3c7bf8
--- /dev/null
+++ b/Sources/epoch_code/System/Phantom_Brain.fsm
@@ -0,0 +1,631 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"phantom",0,4346,-50.000000,-325.000000,50.000000,-275.000000,0.000000,"phantom"};
+item1[] = {"_",8,218,75.000000,-200.000000,125.000000,-175.000000,0.000000,""};
+item2[] = {"instinct",2,250,150.000000,-200.000000,250.000000,-150.000000,0.000000,"instinct"};
+item3[] = {"action",2,250,150.000000,-50.000000,250.000000,0.000000,0.000000,"action"};
+item4[] = {"dispose",4,218,50.000000,-150.000000,150.000000,-100.000000,90.000000,"dispose"};
+item5[] = {"_",8,218,175.000000,200.000000,225.000000,225.000000,0.000000,""};
+item6[] = {"reset_vars",2,250,-50.000000,-200.000000,50.000000,-150.000000,0.000000,"reset vars"};
+item7[] = {"_",8,218,-25.000000,-250.000000,25.000000,-225.000000,0.000000,""};
+item8[] = {"complete",4,218,-50.000000,-125.000000,50.000000,-75.000000,100.000000,"complete"};
+item9[] = {"end",1,250,400.000000,-100.000000,500.000000,-50.000000,0.000000,"end"};
+item10[] = {"dispose",4,218,275.000000,-100.000000,375.000000,-50.000000,95.000000,"dispose"};
+item11[] = {"instinct_done",4,218,150.000000,-125.000000,250.000000,-75.000000,100.000000,"instinct done"};
+item12[] = {"door",4,218,-50.000000,25.000000,50.000000,75.000000,30.000000,"door"};
+item13[] = {"phantom_door",2,250,-50.000000,175.000000,50.000000,225.000000,0.000000,"phantom door"};
+item14[] = {"door",4,218,225.000000,-350.000000,325.000000,-300.000000,60.000000,"door"};
+item15[] = {"appear",4,218,125.000000,-325.000000,225.000000,-275.000000,70.000000,"appear"};
+item16[] = {"appear",4,218,75.000000,25.000000,175.000000,75.000000,10.000000,"appear"};
+item17[] = {"do_apparition",2,250,75.000000,125.000000,175.000000,175.000000,0.000000,"do apparition"};
+item18[] = {"bite",4,218,325.000000,-250.000000,425.000000,-200.000000,40.000000,"bite"};
+item19[] = {"bite",4,218,225.000000,25.000000,325.000000,75.000000,20.000000,"bite"};
+item20[] = {"do_bite",2,250,225.000000,125.000000,325.000000,175.000000,0.000000,"do bite"};
+item21[] = {"checks",4,218,50.000000,-275.000000,150.000000,-225.000000,80.000000,"checks"};
+item22[] = {"sound",4,218,275.000000,-300.000000,375.000000,-250.000000,50.000000,"sound"};
+item23[] = {"sound",4,218,350.000000,25.000000,450.000000,75.000000,0.000000,"sound"};
+item24[] = {"do_sound",2,250,350.000000,175.000000,450.000000,225.000000,0.000000,"do sound"};
+item25[] = {"window",4,218,300.000000,-200.000000,400.000000,-150.000000,50.000000,"window"};
+item26[] = {"window",4,218,-175.000000,25.000000,-75.000000,75.000000,30.000000,"window"};
+item27[] = {"smash_window",2,250,-175.000000,250.000000,-75.000000,300.000000,0.000000,"smash window"};
+link0[] = {0,7};
+link1[] = {1,2};
+link2[] = {2,4};
+link3[] = {2,11};
+link4[] = {2,14};
+link5[] = {2,15};
+link6[] = {2,18};
+link7[] = {2,21};
+link8[] = {2,22};
+link9[] = {2,25};
+link10[] = {3,8};
+link11[] = {3,10};
+link12[] = {3,12};
+link13[] = {3,16};
+link14[] = {3,19};
+link15[] = {3,23};
+link16[] = {3,26};
+link17[] = {4,2};
+link18[] = {5,3};
+link19[] = {6,1};
+link20[] = {7,6};
+link21[] = {8,6};
+link22[] = {10,9};
+link23[] = {11,3};
+link24[] = {12,13};
+link25[] = {13,5};
+link26[] = {14,2};
+link27[] = {15,2};
+link28[] = {16,17};
+link29[] = {17,5};
+link30[] = {18,2};
+link31[] = {19,20};
+link32[] = {20,5};
+link33[] = {21,2};
+link34[] = {22,2};
+link35[] = {23,24};
+link36[] = {24,5};
+link37[] = {25,2};
+link38[] = {26,27};
+link39[] = {27,5};
+globals[] = {25.000000,1,0,0,16777215,640,480,1,182,6316128,1,-249.798294,620.231628,477.075989,-365.297302,755,731,1};
+window[] = {2,-1,-1,-1,-1,650,125,1150,125,3,773};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "phantom";
+ class States
+ {
+ /*%FSM*/
+ class phantom
+ {
+ name = "phantom";
+ init = /*%FSM*/"" \n
+ "//settings" \n
+ "_phantomLife = 884;" \n
+ "_phantomChance = 100;// Percentage of this figure to trigger haunting - Lower for more events" \n
+ "_haunting = 6;//Check every x ticks." \n
+ "" \n
+ "//vars" \n
+ "_plyr = player;" \n
+ "this = objNull;" \n
+ "_inHouse = false;" \n
+ "_tStart = diag_tickTime;" \n
+ "_callDispose = false;" \n
+ "_house = objNull;" \n
+ "" \n
+ "//doors" \n
+ "_doDoor = false;" \n
+ "_act = """";" \n
+ "_obj = objNull;" \n
+ "_numDoors = 0;" \n
+ "_house = """";" \n
+ "" \n
+ "//apparition" \n
+ "_doAppear = false;" \n
+ "_count = 0;" \n
+ "_object = objNull;" \n
+ "_source01 = objNull;" \n
+ "" \n
+ "//attack" \n
+ "_doBite = false;" \n
+ "" \n
+ "//Window" \n
+ "_doWindow = false;" \n
+ "" \n
+ "//Sound" \n
+ "_doSound = false;" \n
+ "_soundNames = [""concrete_int_walk"",""concrete_walk"",""debris_walk"",""dirt_walk_new"",""gravel_walk"",""metal_int_walk"",""metal_walk"",""new_dry_grass_walk"",""new_grass_walk"",""rock_walk"",""roof_tiles_walk"",""roof_tin_walk"",""sand_walk"",""steel_walk"",""stony_walk"",""tarmac_walk"",""tiles_int_walk"",""wood_walk_ext"",""wood_walk_int""];" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class instinct
+ {
+ name = "instinct";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class instinct_done
+ {
+ priority = 100.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_decisionMade;"/*%FSM*/;
+ action=/*%FSM*/"_t = diag_tickTime;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 90.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!alive _plyr || _callDispose;"/*%FSM*/;
+ action=/*%FSM*/"_doDispose = true;" \n
+ "_decisionMade = true;" \n
+ "_actionDone = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class checks
+ {
+ priority = 80.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_decisionMade && diag_tickTime - _t > _haunting;"/*%FSM*/;
+ action=/*%FSM*/"_posPlyr = visiblePosition player;" \n
+ "_house = nearestBuilding player;" \n
+ "_housePos = getPosATL _house;" \n
+ "_bound = boundingBox _house;" \n
+ " " \n
+ "_xBound = _bound select 1 select 0;" \n
+ "_yBound = _bound select 1 select 1;" \n
+ "_zBound = _bound select 1 select 2;" \n
+ " " \n
+ "_xBound = _xBound - ((_xBound / 100) * 16);" \n
+ "_yBound = _yBound - ((_yBound / 100) * 16);" \n
+ "_zBound = _zBound - ((_zBound / 100) * 16);" \n
+ " " \n
+ "_xDiff = abs ((_housePos select 0) - (_posPlyr select 0));" \n
+ "_yDiff = abs ((_housePos select 1) - (_posPlyr select 1));" \n
+ "_zDiff = abs ((_housePos select 2) - (_posPlyr select 2));" \n
+ "" \n
+ " " \n
+ "if (_xDiff < _xBound && _yDiff < _yBound && _zDiff < _zBound) then {" \n
+ "_inHouse = true;" \n
+ "}else{" \n
+ "_inHouse = false;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "if (diag_tickTime - _tStart > _phantomLife) then {" \n
+ "_callDispose = true;" \n
+ "};" \n
+ "" \n
+ "_rnd = floor random _phantomChance;" \n
+ "" \n
+ "_t = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class appear
+ {
+ priority = 70.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_rnd > 6 && _rnd < 10 && _inHouse;"/*%FSM*/;
+ action=/*%FSM*/"_doAppear = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class door
+ {
+ priority = 60.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_rnd > 3.5 && _rnd < 6 && _inHouse;"/*%FSM*/;
+ action=/*%FSM*/"_doDoor = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class sound
+ {
+ priority = 50.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_rnd > 1.5 && _rnd < 3.5 && _inHouse;"/*%FSM*/;
+ action=/*%FSM*/"_doSound = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class window
+ {
+ priority = 50.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_rnd > 10 && _rnd < 13.5 && _inHouse;"/*%FSM*/;
+ action=/*%FSM*/"_doWindow = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class bite
+ {
+ priority = 40.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_rnd < 1.5 && _inHouse;"/*%FSM*/;
+ action=/*%FSM*/"_doBite = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class action
+ {
+ name = "action";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class complete
+ {
+ priority = 100.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_actionDone && ((call compile _criteria) || (diag_tickTime > (_t + _sWait)));"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "if (!isNil ""_criteriaMetAction"") then {" \n
+ "call _criteriaMetAction;" \n
+ "};" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 95.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doDispose;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class window
+ {
+ priority = 30.000000;
+ to="smash_window";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doWindow;"/*%FSM*/;
+ action=/*%FSM*/"_doWindow = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class door
+ {
+ priority = 30.000000;
+ to="phantom_door";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doDoor;"/*%FSM*/;
+ action=/*%FSM*/"_doDoor = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class bite
+ {
+ priority = 20.000000;
+ to="do_bite";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doBite;"/*%FSM*/;
+ action=/*%FSM*/"_doBite = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class appear
+ {
+ priority = 10.000000;
+ to="do_apparition";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doAppear;"/*%FSM*/;
+ action=/*%FSM*/"_doAppear = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class sound
+ {
+ priority = 0.000000;
+ to="do_sound";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doSound;"/*%FSM*/;
+ action=/*%FSM*/"_doSound = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class reset_vars
+ {
+ name = "reset_vars";
+ init = /*%FSM*/"//Default Vars" \n
+ "_actionDone = false;" \n
+ "_decisionMade = false;" \n
+ "_sWait = 0;" \n
+ "_doDispose = false;" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "//Brain Vars" \n
+ "_criteria =""(false)"";" \n
+ "_criteriaMetAction = nil;" \n
+ "" \n
+ "" \n
+ "//phantom Vars" \n
+ "_dCond = false;" \n
+ "_rnd = random _phantomChance;" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/"""PHANTOM"" call EPOCH_unitSpawnDecrease;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class phantom_door
+ {
+ name = "phantom_door";
+ init = /*%FSM*/" _obj = (getpos _plyr nearestObject ""House"");" \n
+ "_condIn = """";" \n
+ "if!(isNull _obj) then {" \n
+ " _house = typeof _obj;" \n
+ " _numDoors = getNumber (configfile >> ""CfgVehicles"" >> _house >> ""numberOfDoors""); " \n
+ " _doorRnd = (floor random _numDoors) + 1;" \n
+ "" \n
+ " if (_numDoors>0) then {" \n
+ "" \n
+ "_dCond = call compile getText(configFile >> ""CfgVehicles"" >> _house >> ""UserActions"" >> format[""OpenDoor_%1"",_doorRnd] >> ""Condition""); " \n
+ " _act = getText(configFile >> ""CfgVehicles"" >> _house >> ""UserActions"" >> format[""OpenDoor_%1"",_doorRnd] >> ""Statement""); " \n
+ "" \n
+ "if (!_dCond) then {" \n
+ "_dCond = call compile getText(configFile >> ""CfgVehicles"" >> _house >> ""UserActions"" >> format[""CloseDoor_%1"",_doorRnd] >> ""Condition""); " \n
+ " _act = getText(configFile >> ""CfgVehicles"" >> _house >> ""UserActions"" >> format[""CloseDoor_%1"",_doorRnd] >> ""Statement""); " \n
+ "};" \n
+ "" \n
+ "if (_dCond) then {" \n
+ " [_act,_obj] spawn {" \n
+ " this = _this select 1;" \n
+ " call compile (_this select 0);" \n
+ " };" \n
+ "};" \n
+ " " \n
+ " };" \n
+ " " \n
+ "" \n
+ "};" \n
+ "" \n
+ "_sWait = 1.5;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(false)"";" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_apparition
+ {
+ name = "do_apparition";
+ init = /*%FSM*/"[]spawn {" \n
+ "_count = floor random 2;" \n
+ "" \n
+ "while{_count > -1}do{" \n
+ " _dir = getDir player;" \n
+ "_nukeHolderPos = [getposATL player, (random 4) max 0.5, _dir] call BIS_fnc_relPos;" \n
+ "_object = ""Logic"" createVehicleLocal _nukeHolderPos;" \n
+ "_source01 = ""#particlesource"" createVehicleLocal _nukeHolderPos;" \n
+ "_source01 setParticleCircle [2, [0.2, 0.2, 0.2]];" \n
+ "_source01 setParticleRandom [1, [0, 0, 0], [0.2, 0.2, 0.2], 0, 0.25, [1, 0, 1, 0.1], 0, 0.2];" \n
+ "_source01 setParticleParams [[""A3\data_f\ParticleEffects\Universal\Refract.p3d"", 1, 0, 1], """", ""Billboard"", 1, 1, [0, 0, 0], [1, 1, 1], 0, 0.05, 0.04, 0, [1.2, 2, 4], [[0.1, 0.1, 0.1, 1], [0.25, 0.25, 0.25, 0.5], [0.5, 0.5, 0.5, 0]], [0.08], 0, 0, """", """", _object];" \n
+ "_source01 setDropInterval 0.8;" \n
+ "uiSleep 2.8;" \n
+ "_count = _count - 1;" \n
+ "deleteVehicle _object;" \n
+ "deleteVehicle _source01;" \n
+ "};" \n
+ "" \n
+ "};" \n
+ "" \n
+ "_sWait = 1.5;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(false)"";" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_bite
+ {
+ name = "do_bite";
+ init = /*%FSM*/"_plyr call EPOCH_client_bitePlayer;" \n
+ "" \n
+ "" \n
+ "_sWait = 1.5;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(false)"";" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_sound
+ {
+ name = "do_sound";
+ init = /*%FSM*/"" \n
+ "_soundName = _soundNames select (floor random (count _soundNames));" \n
+ "" \n
+ "[_house,_soundName] spawn{" \n
+ "" \n
+ "_count = floor (random 7) max 3;" \n
+ "_dirTo = (random 360);" \n
+ "_sndLoc = ATLToASL ([player, 12, _dirTo] call BIS_fnc_relPos);" \n
+ " for ""_i"" from 1 to _count step 1 do{" \n
+ "_sound = format[""A3\Sounds_F\characters\footsteps\%2_%1.wss"", (floor random 7) + 1,_this select 1]; " \n
+ " playSound3D [_sound, player,false,_sndLoc,0.6,1,0]; " \n
+ "uiSleep 0.6;" \n
+ " };" \n
+ "};" \n
+ "" \n
+ "_sWait = 1.5;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(false)"";"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class smash_window
+ {
+ name = "smash_window";
+ init = /*%FSM*/" _obj = (getpos _plyr nearestObject ""House"");" \n
+ "_condIn = """";" \n
+ "if!(isNull _obj) then {" \n
+ " _house = typeof _obj;" \n
+ " _numWindows = getNumber (configfile >> ""CfgVehicles"" >> _house >> ""numberOfWindows""); " \n
+ " _windowRnd = (floor random _numWindows) + 1;" \n
+ "" \n
+ " if (_numWindows>0) then {" \n
+ " _glsHitPoint = format[""Glass_%1_hitpoint"",_windowRnd];" \n
+ " _obj setHitPointDamage [_glsHitPoint,1];" \n
+ "" \n
+ "" \n
+ " };" \n
+ " " \n
+ "" \n
+ "};" \n
+ "" \n
+ "_sWait = 1.5;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(false)"";" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="phantom";
+ finalStates[] =
+ {
+ "end"
+ };
+};
+/*%FSM*/
diff --git a/Sources/epoch_code/System/SPVEH.fsm b/Sources/epoch_code/System/SPVEH.fsm
new file mode 100644
index 00000000..9c7adc58
--- /dev/null
+++ b/Sources/epoch_code/System/SPVEH.fsm
@@ -0,0 +1,87 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"Init",0,250,-300.000000,-225.000000,-200.000000,-175.000000,0.000000,"Init"};
+item1[] = {"_",8,218,-300.000000,-150.000000,-200.000000,-100.000000,0.000000,""};
+item2[] = {"Process",2,250,-300.000000,-75.000000,-200.000000,-25.000000,0.000000,"Process"};
+item3[] = {"BAD_HIVE",4,218,-300.000000,50.000000,-200.000000,100.000000,1.000000,"BAD HIVE"};
+item4[] = {"Camera_View_Chec",4,4314,-125.000000,-75.000000,-25.000000,-25.000000,0.000000,"Camera View" \n "Checks"};
+link0[] = {0,1};
+link1[] = {1,2};
+link2[] = {2,3};
+link3[] = {2,4};
+link4[] = {3,2};
+link5[] = {4,2};
+globals[] = {25.000000,1,0,0,16777215,640,480,1,125,6316128,1,-408.109894,77.792206,142.419571,-234.573410,812,880,1};
+window[] = {2,-1,-1,-1,-1,763,26,1051,26,3,830};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "SPVEH";
+ class States
+ {
+ /*%FSM*/
+ class Init
+ {
+ name = "Init";
+ init = /*%FSM*/"diag_log ""Loaded Client Secure PVEH"";" \n
+ "if (isNil ""BAD_HIVE"") then {" \n
+ " BAD_HIVE = false;" \n
+ "};" \n
+ "_prevBAD_HIVE = false;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="Process";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Process
+ {
+ name = "Process";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class BAD_HIVE
+ {
+ priority = 1.000000;
+ to="Process";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!(BAD_HIVE isEqualTo _prevBAD_HIVE)"/*%FSM*/;
+ action=/*%FSM*/"_prevBAD_HIVE = true;" \n
+ "PLAYER_BADHIVE = true;" \n
+ "publicVariableServer ""PLAYER_BADHIVE"";"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Camera_View_Chec
+ {
+ priority = 0.000000;
+ to="Process";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"cameraView == ""GROUP"""/*%FSM*/;
+ action=/*%FSM*/"vehicle player switchCamera ""Internal"";"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="Init";
+ finalStates[] =
+ {
+ };
+};
+/*%FSM*/
\ No newline at end of file
diff --git a/Sources/epoch_code/System/Sapper_Brain.fsm b/Sources/epoch_code/System/Sapper_Brain.fsm
new file mode 100644
index 00000000..f819dd9e
--- /dev/null
+++ b/Sources/epoch_code/System/Sapper_Brain.fsm
@@ -0,0 +1,1870 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"sapper",0,4346,-225.000000,-325.000000,-125.000000,-275.000000,0.000000,"sapper"};
+item1[] = {"_",8,218,75.000000,-200.000000,125.000000,-175.000000,0.000000,""};
+item2[] = {"instinct",2,250,150.000000,-200.000000,250.000000,-150.000000,0.000000,"instinct"};
+item3[] = {"no_decision",4,218,375.000000,-125.000000,475.000000,-75.000000,95.000000,"no decision"};
+item4[] = {"action",2,250,150.000000,125.000000,250.000000,175.000000,0.000000,"action"};
+item5[] = {"dispose",4,218,25.000000,-350.000000,125.000000,-300.000000,80.000000,"dispose"};
+item6[] = {"_",8,218,125.406227,636.108887,177.358261,664.513977,0.000000,""};
+item7[] = {"reset_vars",2,250,-50.000000,-200.000000,50.000000,-150.000000,0.000000,"reset vars"};
+item8[] = {"complete",4,218,56.428787,-94.767609,146.429047,-44.767593,110.000000,"complete"};
+item9[] = {"stalk",4,218,-50.000000,0.000000,50.000000,50.000000,50.000000,"stalk"};
+item10[] = {"pre_boom",2,250,525.000000,225.000000,625.000000,275.000000,0.000000,"pre boom"};
+item11[] = {"dispose",4,218,375.000000,125.000000,475.000000,175.000000,95.000000,"dispose"};
+item12[] = {"loiter_large",4,218,250.000000,350.000000,350.000000,400.000000,30.000000,"loiter large"};
+item13[] = {"check_threat",4,218,675.000000,-175.000000,775.000000,-125.000000,80.000000,"check threat"};
+item14[] = {"instinct_done",4,218,150.000000,-100.000000,250.000000,-50.000000,100.000000,"instinct done"};
+item15[] = {"charge",4,218,250.000000,-375.000000,350.000000,-325.000000,50.000000,"charge"};
+item16[] = {"wait_action",4,218,375.000000,25.000000,475.000000,75.000000,100.000000,"wait action"};
+item17[] = {"checking_status",2,250,625.000000,-50.000000,725.000000,0.000000,0.000000,"checking status"};
+item18[] = {"choose_target",4,218,600.000000,-200.000000,700.000000,-150.000000,90.000000,"choose target"};
+item19[] = {"final_checks",4,218,725.000000,25.000000,825.000000,75.000000,10.000000,"final checks"};
+item20[] = {"done",4,218,475.000000,-50.000000,575.000000,0.000000,100.000000,"done"};
+item21[] = {"loiter",4,218,375.000000,-300.000000,475.000000,-250.000000,30.000000,"loiter"};
+item22[] = {"return",2,250,350.000000,-50.000000,450.000000,0.000000,0.000000,"return"};
+item23[] = {"to_action",4,218,275.000000,25.000000,375.000000,75.000000,10.000000,"to action"};
+item24[] = {"to_instinct",4,218,275.000000,-125.000000,375.000000,-75.000000,5.000000,"to instinct"};
+item25[] = {"boom",4,218,375.000000,175.000000,475.000000,225.000000,90.000000,"boom"};
+item26[] = {"reset",2,250,100.000000,500.000000,200.000000,550.000000,0.000000,"reset"};
+item27[] = {"loiter_small",4,218,300.000000,325.000000,400.000000,375.000000,20.000000,"loiter small"};
+item28[] = {"groan",4,218,175.000000,-400.000000,275.000000,-350.000000,60.000000,"groan"};
+item29[] = {"charge",4,218,-50.000000,175.000000,50.000000,225.000000,70.000000,"charge"};
+item30[] = {"stalking",4,218,-50.000000,50.000000,50.000000,100.000000,5.000000,"stalking"};
+item31[] = {"Wait_random",4,218,-225.000000,-200.000000,-125.000000,-150.000000,10.000000,"Wait random"};
+item32[] = {"groan",4,218,200.000000,375.000000,300.000000,425.000000,5.000000,"groan"};
+item33[] = {"nest",4,218,375.000000,225.000000,475.000000,275.000000,10.000000,"nest"};
+item34[] = {"detonate",4,218,100.000000,-375.000000,200.000000,-325.000000,70.000000,"detonate"};
+item35[] = {"nest",4,218,-25.000000,-300.000000,75.000000,-250.000000,90.000000,"nest"};
+item36[] = {"find_nest",2,250,525.000000,300.000000,625.000000,350.000000,0.000000,"find nest"};
+item37[] = {"not_suitable",4,218,425.000000,375.000000,525.000000,425.000000,10.000000,"not suitable"};
+item38[] = {"suitable",4,218,525.000000,375.000000,625.000000,425.000000,20.000000,"suitable"};
+item39[] = {"none_found",4,218,375.000000,275.000000,475.000000,325.000000,30.000000,"none found"};
+item40[] = {"make_nest",2,250,700.000000,375.000000,800.000000,425.000000,0.000000,"make nest"};
+item41[] = {"_",8,218,625.000000,425.000000,675.000000,450.000000,0.000000,""};
+item42[] = {"nest_disturbed",4,218,850.000000,450.000000,950.000000,500.000000,30.000000,"nest disturbed"};
+item43[] = {"ba_boom",2,250,975.000000,450.000000,1075.000000,500.000000,0.000000,"ba boom"};
+item44[] = {"groan",4,218,700.000000,550.000000,800.000000,600.000000,20.000000,"groan"};
+item45[] = {"end",1,250,975.000000,0.000000,1075.000000,50.000000,0.000000,"end"};
+item46[] = {"Wait_to_delete",4,218,975.000000,150.000000,1075.000000,200.000000,10.000000,"Wait to delete"};
+item47[] = {"handle_dispose",2,250,525.000000,125.000000,625.000000,175.000000,0.000000,"handle dispose"};
+item48[] = {"Wait_1_5_sec",4,218,650.000000,300.000000,750.000000,350.000000,0.000000,"Wait" \n "1.5 sec"};
+item49[] = {"do_boom",2,250,650.000000,225.000000,750.000000,275.000000,0.000000,"do boom"};
+item50[] = {"_",8,218,800.000000,250.000000,850.000000,275.000000,0.000000,""};
+item51[] = {"do_groan",2,250,225.000000,500.000000,325.000000,550.000000,0.000000,"do groan"};
+item52[] = {"do_stalk",2,250,-200.000000,50.000000,-100.000000,100.000000,0.000000,"do stalk"};
+item53[] = {"do_loiter_big",2,250,350.000000,500.000000,450.000000,550.000000,0.000000,"do loiter big"};
+item54[] = {"do_loiter_small",2,250,475.000000,500.000000,575.000000,550.000000,0.000000,"do loiter small"};
+item55[] = {"do_charge",2,250,-200.000000,225.000000,-100.000000,275.000000,0.000000,"do charge"};
+item56[] = {"hide",4,218,25.000000,325.000000,125.000000,375.000000,60.000000,"hide"};
+item57[] = {"check_target",4,218,750.000000,-150.000000,850.000000,-100.000000,60.000000,"check target"};
+item58[] = {"hide",4,218,325.000000,-350.000000,425.000000,-300.000000,40.000000,"hide"};
+item59[] = {"find_spot",2,250,-200.000000,400.000000,-100.000000,450.000000,0.000000,"find spot"};
+item60[] = {"not_safe",4,218,-250.000000,500.000000,-150.000000,550.000000,10.000000,"not safe"};
+item61[] = {"is_safe",4,218,-150.000000,500.000000,-50.000000,550.000000,5.000000,"is safe"};
+item62[] = {"do_hide",2,250,-150.000000,625.000000,-50.000000,675.000000,0.000000,"do hide"};
+item63[] = {"smoke",2,250,775.000000,150.000000,875.000000,200.000000,0.000000,"smoke"};
+item64[] = {"charged",4,218,-50.000000,275.000000,50.000000,325.000000,10.000000,"charged"};
+item65[] = {"_",8,218,125.000000,375.000000,175.000000,400.000000,0.000000,""};
+item66[] = {"circled",4,218,-50.000000,100.000000,50.000000,150.000000,10.000000,"circled"};
+item67[] = {"stuck",4,218,800.000000,-25.000000,900.000000,25.000000,30.000000,"stuck"};
+item68[] = {"monitor_nest",2,250,700.000000,450.000000,800.000000,500.000000,0.000000,"monitor nest"};
+item69[] = {"target_near",4,218,800.000000,550.000000,900.000000,600.000000,10.000000,"target near"};
+item70[] = {"shuffle",4,218,600.000000,550.000000,700.000000,600.000000,25.000000,"shuffle"};
+item71[] = {"shot",4,218,650.000000,150.000000,750.000000,200.000000,5.000000,"shot"};
+item72[] = {"feeling",4,218,800.000000,-100.000000,900.000000,-50.000000,50.000000,"feeling"};
+item73[] = {"charging",4,218,-50.000000,225.000000,50.000000,275.000000,5.000000,"charging"};
+item74[] = {"stalk",4,218,375.000000,-225.000000,475.000000,-175.000000,20.000000,"stalk"};
+item75[] = {"not_shot",4,218,900.000000,125.000000,1000.000000,175.000000,10.000000,"not shot"};
+item76[] = {"finished_boom",2,250,900.000000,225.000000,1000.000000,275.000000,0.000000,"finished boom"};
+item77[] = {"pre_vars",4,218,525.000000,-175.000000,625.000000,-125.000000,95.000000,"pre vars"};
+link0[] = {0,31};
+link1[] = {1,2};
+link2[] = {2,3};
+link3[] = {2,5};
+link4[] = {2,14};
+link5[] = {2,15};
+link6[] = {2,21};
+link7[] = {2,28};
+link8[] = {2,34};
+link9[] = {2,35};
+link10[] = {2,58};
+link11[] = {2,74};
+link12[] = {3,17};
+link13[] = {4,8};
+link14[] = {4,9};
+link15[] = {4,11};
+link16[] = {4,12};
+link17[] = {4,16};
+link18[] = {4,25};
+link19[] = {4,27};
+link20[] = {4,29};
+link21[] = {4,32};
+link22[] = {4,33};
+link23[] = {4,56};
+link24[] = {5,2};
+link25[] = {6,26};
+link26[] = {7,1};
+link27[] = {8,7};
+link28[] = {9,52};
+link29[] = {10,48};
+link30[] = {11,47};
+link31[] = {12,53};
+link32[] = {13,17};
+link33[] = {14,4};
+link34[] = {15,2};
+link35[] = {16,17};
+link36[] = {17,13};
+link37[] = {17,18};
+link38[] = {17,19};
+link39[] = {17,20};
+link40[] = {17,57};
+link41[] = {17,67};
+link42[] = {17,72};
+link43[] = {17,77};
+link44[] = {18,17};
+link45[] = {19,17};
+link46[] = {20,22};
+link47[] = {21,2};
+link48[] = {22,23};
+link49[] = {22,24};
+link50[] = {23,4};
+link51[] = {24,2};
+link52[] = {25,10};
+link53[] = {26,65};
+link54[] = {27,54};
+link55[] = {28,2};
+link56[] = {29,55};
+link57[] = {30,4};
+link58[] = {31,7};
+link59[] = {32,51};
+link60[] = {33,36};
+link61[] = {34,2};
+link62[] = {35,2};
+link63[] = {36,37};
+link64[] = {36,38};
+link65[] = {36,39};
+link66[] = {37,36};
+link67[] = {38,40};
+link68[] = {39,4};
+link69[] = {40,41};
+link70[] = {41,68};
+link71[] = {42,43};
+link72[] = {43,46};
+link73[] = {44,68};
+link74[] = {46,45};
+link75[] = {47,71};
+link76[] = {47,75};
+link77[] = {48,49};
+link78[] = {49,50};
+link79[] = {50,76};
+link80[] = {51,6};
+link81[] = {52,30};
+link82[] = {52,66};
+link83[] = {53,6};
+link84[] = {54,6};
+link85[] = {55,64};
+link86[] = {55,73};
+link87[] = {56,59};
+link88[] = {57,17};
+link89[] = {58,2};
+link90[] = {59,60};
+link91[] = {59,61};
+link92[] = {60,59};
+link93[] = {61,62};
+link94[] = {62,6};
+link95[] = {63,50};
+link96[] = {64,4};
+link97[] = {65,4};
+link98[] = {66,4};
+link99[] = {67,17};
+link100[] = {68,42};
+link101[] = {68,44};
+link102[] = {68,69};
+link103[] = {68,70};
+link104[] = {69,68};
+link105[] = {70,68};
+link106[] = {71,63};
+link107[] = {72,17};
+link108[] = {73,4};
+link109[] = {74,2};
+link110[] = {75,76};
+link111[] = {76,46};
+link112[] = {77,17};
+globals[] = {25.000000,1,0,0,16777215,640,480,1,250,6316128,1,-262.051422,848.157593,315.865601,-539.311218,949,731,1};
+window[] = {2,-1,-1,-1,-1,609,282,1307,84,3,967};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "sapper";
+ class States
+ {
+ /*%FSM*/
+ class sapper
+ {
+ name = "sapper";
+ init = /*%FSM*/"_sapper = _this select 0;" \n
+ "_sBomb = _this select 1;" \n
+ "_head = objNull;" \n
+ "_lastAlert = diag_tickTime;" \n
+ "_trgt = player;" \n
+ "" \n
+ "_sapper setBehaviour ""STEALTH"";" \n
+ "_sapper setUnitPos ""UP""; " \n
+ "" \n
+ "_entsArr = [""Epoch_Male_F"",""Epoch_Female_F"",""Epoch_Sapper_F"",""Fin_random_EPOCH"",""Alsatian_Random_EPOCH"",""Epoch_cloak_F"",""b_survivor_F"",""Epoch_Female_Camo_F""];" \n
+ "_trgtArr = [""Epoch_Man_Base_F"",""Epoch_Female_base_F""];" \n
+ "" \n
+ "" \n
+ "//Behaviour Vars" \n
+ "_detonateDistMax = getNumber (missionConfigFile >> ""CfgEpochSapper"" >> ""detonateDistMax"");//Random distance between 3 and this at which to detonate" \n
+ "_groanTrig = getNumber (missionConfigFile >> ""CfgEpochSapper"" >> ""groanTrig"");//Percentage chance of groan." \n
+ "_sRange = getNumber (missionConfigFile >> ""CfgEpochSapper"" >> ""sRange"") min 500;//Escape distance, range for sapper to look for current target(s)" \n
+ "_sHideTrig = 72;//Sapper will hide if fear rises above this level." \n
+ "_chargeTrig = 54;//Charges at this level of anger" \n
+ "_sHardness = floor (random 6) max 1;//LEvel to drop anger and fear as sapper calms down" \n
+ "_rndNest = floor (random 100);//1 in 100 chance of sapper creating a nest when spawned." \n
+ "_checkFreq = 2.5;//Frequency of live status check. Lower makes sapper quicker to respond to new stimulus." \n
+ "_welcomeWait = floor (random 18);//Random pause before sapper announces his presence" \n
+ "_config = 'CfgEpochClient' call EPOCH_returnConfig;" \n
+ "_jammerRange = getNumber(_config >> ""buildingJammerRange"");" \n
+ "_smellDist = getNumber (missionConfigFile >> ""CfgEpochSapper"" >> ""smellDist"");//Based on wind direction" \n
+ "_smellDistPerm = 24;" \n
+ "" \n
+ "//Check config vars" \n
+ "" \n
+ "if(_detonateDistMax < 4)then{_detonateDistMax = 8;};" \n
+ "if(_groanTrig < 4)then{_groanTrig = 16;};" \n
+ "if(_sRange < 150)then{_sRange = 300;};" \n
+ "if(_smellDist < 8)then{_smellDist = 24;};" \n
+ "" \n
+ "_vehArray = [""Car""];" \n
+ "_trgt = player;" \n
+ "_requestDispose = false;" \n
+ "" \n
+ "_nrstTrgt = objNull;" \n
+ "_lowDist = 0;" \n
+ "_currDist = 0;" \n
+ "_filterBuilds = [""Land_i_Addon_03_V1_F"",""Land_Offices_01_V1_F""];" \n
+ "_t = diag_tickTime;" \n
+ "_u = _t;" \n
+ "_c = _u;" \n
+ "_f = _c;" \n
+ "_h = _f;" \n
+ "_d2 = _h;" \n
+ "" \n
+ "" \n
+ "" \n
+ "_dirTo = 0;" \n
+ "_lDist = 0;" \n
+ "_checkEntry = """";" \n
+ "" \n
+ "_decisionMade = false;" \n
+ "_actionDone = false;" \n
+ "_sapperPos=[0,0,0];" \n
+ "_trgtPos=[0,0,0];" \n
+ "_hidePos = [0,0,0];" \n
+ "_nrPlyrs = [];" \n
+ "_circlePos = [0,0,0];" \n
+ "_behindPos = [0,0,0];" \n
+ "_sSide = 90;" \n
+ "_lastPos = [0,0,0];" \n
+ "_spottedPos = [0,0,0];" \n
+ "_lastAction = """";" \n
+ "_maxStalkDist = 48;" \n
+ "_maxStalkDistPerm = 48;" \n
+ "_minStalkDist = 12;" \n
+ "_minStalkDistPerm = 12;" \n
+ "_doWander = false;" \n
+ "_callHide = false;" \n
+ "_callBoom = false;" \n
+ "_callCharge = false;" \n
+ "_doneBoom = false;" \n
+ "" \n
+ "//Feeling vars" \n
+ "_sAnger = 50;" \n
+ "_sFear = 50;" \n
+ "_threateLevel = 0;" \n
+ "_addThreat = 0;" \n
+ "_sHit = [objNull, 0];" \n
+ "_sFiredNear = [objNull, 0];" \n
+ "" \n
+ "_stuckCount = 0;" \n
+ "" \n
+ "//Nest vars" \n
+ "" \n
+ "_nrBuild = nearestBuilding _sapper;" \n
+ "_doNest = false;" \n
+ "_nrBuild = objNull;" \n
+ "_nrBuild = [];" \n
+ "" \n
+ "_traderDispose = false;" \n
+ "" \n
+ "_doMove = false;" \n
+ "_sanityCheckDone = false;" \n
+ "_canSee = (!lineIntersects [aimPos _sapper, eyePos _trgt, _sapper, _trgt]);" \n
+ "_nrTrgts = [];" \n
+ "_threatLevel = 0;" \n
+ "_trgtDist = _trgt distance _sapper;" \n
+ "_sanityCheck = 0;" \n
+ "" \n
+ "" \n
+ "_doHide = false;" \n
+ "_doAttack = false;" \n
+ "_firedNear = 0;" \n
+ "" \n
+ "_randomGroan = {" \n
+ "_sounds = [""sapper_groan0"",""sapper_groan1"",""sapper_groan2""];" \n
+ "_sound = _sounds select (floor (random (count _sounds)));" \n
+ "" \n
+ "_sapper say3D _sound;" \n
+ "EPOCH_say3D_PVS = [player, _sapper,(EPOCH_sounds find _sound), Epoch_personalToken];" \n
+ "publicVariableServer ""EPOCH_say3D_PVS"";" \n
+ "};" \n
+ "" \n
+ "_doInterrupt = {" \n
+ "_actionDone = true;" \n
+ "_criteria = ""(true)"";" \n
+ "};" \n
+ "" \n
+ "//DEBUG" \n
+ "_jammerRange = 75;" \n
+ "//_rndNest = 1;" \n
+ "//_debugDo = ""START"";" \n
+ "//_mkrName = """";" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Wait_random
+ {
+ priority = 10.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _t) > _welcomeWait;"/*%FSM*/;
+ action=/*%FSM*/"call _randomGroan;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class instinct
+ {
+ name = "instinct";
+ init = /*%FSM*/"_t = diag_tickTime;" \n
+ "//systemchat format[""I %1"",diag_tickTime];" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class instinct_done
+ {
+ priority = 100.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_decisionMade;"/*%FSM*/;
+ action=/*%FSM*/"_t = diag_tickTime;" \n
+ "_decisionMade = false;" \n
+ "_actionDone = false;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class no_decision
+ {
+ priority = 95.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_decisionMade && (diag_tickTime > _u + _checkFreq);"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = ""instinct"";" \n
+ "_sanityCheck = 100;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class nest
+ {
+ priority = 90.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_rndNest < 1.5;"/*%FSM*/;
+ action=/*%FSM*/"_doNest = true;" \n
+ "_decisionMade = true;" \n
+ "_rndNest = 100;" \n
+ "" \n
+ "//_debugDo = ""NEST"";"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 80.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_trgt distance _sapper) > _sRange || !(alive _sapper) || _traderDispose;"/*%FSM*/;
+ action=/*%FSM*/"_doDispose = true;" \n
+ "_decisionMade = true;" \n
+ "_actionDone = false;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class detonate
+ {
+ priority = 70.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_callBoom || ((_trgtDist < _detonateDist) && _canSee);"/*%FSM*/;
+ action=/*%FSM*/"_decisionMade = true;" \n
+ "_doBoom = true;" \n
+ "" \n
+ "//_debugDo = ""DETONATE"";"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class groan
+ {
+ priority = 60.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_groanRnd < _groanTrig;"/*%FSM*/;
+ action=/*%FSM*/"_doGroan = true;" \n
+ "_decisionMade = true;" \n
+ "" \n
+ "" \n
+ "//_debugDo = ""GROAN"";"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class charge
+ {
+ priority = 50.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_callCharge || (_canSee && (_sAnger > _chargeTrig || _trgtDist < _smellDist));"/*%FSM*/;
+ action=/*%FSM*/"_doCharge = true;" \n
+ "_decisionMade = true;" \n
+ "" \n
+ "//_debugDo = ""CHARGE"";"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class hide
+ {
+ priority = 40.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_callHide || (_sFear > _sHideTrig);"/*%FSM*/;
+ action=/*%FSM*/"_doHide = true;" \n
+ "_decisionMade = true;" \n
+ "" \n
+ "//_debugDo = ""HIDE"";"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class loiter
+ {
+ priority = 30.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sFear < _sHideTrig && _trgtDist < 25 && !_canSee;"/*%FSM*/;
+ action=/*%FSM*/"_doLoiter = true;" \n
+ "_loiterType = random 66;" \n
+ "_decisionMade = true;" \n
+ "" \n
+ "//_debugDo = ""LOITER"";"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class stalk
+ {
+ priority = 20.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_canSee;"/*%FSM*/;
+ action=/*%FSM*/"_doStalk= true;" \n
+ "_decisionMade = true;" \n
+ "" \n
+ "//_debugDo = ""STALK"";" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class action
+ {
+ name = "action";
+ init = /*%FSM*/"//systemchat format[""A %1"",diag_tickTime];"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class complete
+ {
+ priority = 110.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_actionDone && (call compile _criteria || (diag_tickTime > (_t + _sWait)));"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "if (!isNil ""_criteriaMetAction"") then {" \n
+ "call _criteriaMetAction;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class wait_action
+ {
+ priority = 100.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"diag_tickTime > _u + _checkFreq;"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = ""action"";" \n
+ "_sanityCheck = 100;" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 95.000000;
+ to="handle_dispose";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_doDispose || !(alive _sapper));"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class boom
+ {
+ priority = 90.000000;
+ to="pre_boom";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doBoom;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class charge
+ {
+ priority = 70.000000;
+ to="do_charge";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doCharge || _charging;" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/"_doCharge = false;" \n
+ "_callCharge = false;" \n
+ "_lastAction = ""charge"";" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class hide
+ {
+ priority = 60.000000;
+ to="find_spot";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doHide;"/*%FSM*/;
+ action=/*%FSM*/"_doHide = false;" \n
+ "_callHide = false;" \n
+ "_posSafe = false;" \n
+ "_lastAction = ""hide"";" \n
+ "_sapper setBehaviour ""CARELESS"";"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class stalk
+ {
+ priority = 50.000000;
+ to="do_stalk";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doStalk || _stalking;"/*%FSM*/;
+ action=/*%FSM*/"_doStalk = false;" \n
+ "_lastAction = ""stalk"";" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class loiter_large
+ {
+ priority = 30.000000;
+ to="do_loiter_big";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doLoiter && (_loiterType > 33);"/*%FSM*/;
+ action=/*%FSM*/"_doLoiter = false;" \n
+ "_lastAction = ""loiter"";" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class loiter_small
+ {
+ priority = 20.000000;
+ to="do_loiter_small";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doLoiter && (_loiterType < 34);" \n
+ "" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/"_doLoiter = false;" \n
+ "_lastAction = ""loiter"";"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class nest
+ {
+ priority = 10.000000;
+ to="find_nest";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doNest;"/*%FSM*/;
+ action=/*%FSM*/"_nrBuilds = nearestObjects [getPos _sapper,[""house""],500];" \n
+ "_nrBuild = nearestBuilding _sapper;" \n
+ "_jammers = nearestObjects[position _sapper, [""PlotPole_EPOCH""], _jammerRange];" \n
+ "_arrNest = [];" \n
+ "_nestFind = 0;" \n
+ "_s = diag_tickTime;" \n
+ "" \n
+ "" \n
+ "_doNest = false;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class groan
+ {
+ priority = 5.000000;
+ to="do_groan";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doGroan;" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/"_doGroan = false;" \n
+ "_lastAction = ""groan"";" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class reset_vars
+ {
+ name = "reset_vars";
+ init = /*%FSM*/"//Saper Vars" \n
+ "_doStalk = false;" \n
+ "_stalking = false;" \n
+ "" \n
+ "_doLoiter = false;" \n
+ "_loiterType = 0;" \n
+ "" \n
+ "_doCharge = false;" \n
+ "_charging = false;" \n
+ "_chargeCount = 0;" \n
+ "_attempts = 0;" \n
+ "" \n
+ "_doBoom = false;" \n
+ "_doGroan = false;" \n
+ "" \n
+ "_rnd = 0;" \n
+ "_sWait = 0;" \n
+ "_doDispose = false;" \n
+ "_chooseTarget = false;" \n
+ "_t = diag_tickTime;" \n
+ "_detonateDist = (floor(random _detonateDistMax)) max 4;" \n
+ "_groanRnd = random 100;" \n
+ "_hideRnd = random 100;" \n
+ "_nrTrgts=[];" \n
+ "_doHide = false;" \n
+ "_moveTo = [0,0,0];" \n
+ "_spottedPos = [0,0,0];" \n
+ "" \n
+ "" \n
+ "//Brain Vars" \n
+ "_override = false;" \n
+ "_criteria =""(false)"";" \n
+ "_criteriaMet = false;" \n
+ "_criteriaMetAction = nil;" \n
+ "_allowInterrupt = false;" \n
+ "_interruptReason = ""(false)"";" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class pre_boom
+ {
+ name = "pre_boom";
+ init = /*%FSM*/"_t = diag_tickTime;" \n
+ "" \n
+ "_sound = ""sapper_explode"";" \n
+ "_sapper say3D _sound;" \n
+ "EPOCH_say3D_PVS = [player,_sapper,(EPOCH_sounds find _sound),Epoch_personalToken];" \n
+ "publicVariableServer ""EPOCH_say3D_PVS"";" \n
+ "_sapper playMoveNow ""Unconscious"";" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Wait_1_5_sec
+ {
+ priority = 0.000000;
+ to="do_boom";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _t) > 1.5"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class checking_status
+ {
+ name = "checking_status";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class done
+ {
+ priority = 100.000000;
+ to="return";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck < 1;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class pre_vars
+ {
+ priority = 95.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 95;"/*%FSM*/;
+ action=/*%FSM*/"_windDir = winddir;" \n
+ "" \n
+ "_sanityCheck = 95;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class choose_target
+ {
+ priority = 90.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 90;"/*%FSM*/;
+ action=/*%FSM*/"_nrstTrgt = objNull;" \n
+ "_nrTrgts = getPos _sapper nearEntities [_trgtArr, _sRange];" \n
+ "_lowDist = _sRange;" \n
+ "" \n
+ "_upwindPos = [_sapper, _smellDistPerm, _windDir] call BIS_fnc_relPos;" \n
+ "_upWindTrgts = _upwindPos nearEntities [_trgtArr, 12];" \n
+ "" \n
+ "if(count _upWindTrgts > 0)then{" \n
+ "_smellDist = _smellDistPerm + 12;" \n
+ "};" \n
+ "" \n
+ "{" \n
+ "if (alive _x) then {" \n
+ "_currDist = _x distance _sapper;" \n
+ " if (_currDist < _lowDist) then {" \n
+ " _nrstTrgt = _x;" \n
+ " _lowDist = _currDist;" \n
+ " };" \n
+ "};" \n
+ "}forEach _nrTrgts;" \n
+ "" \n
+ "if (!isNull _nrstTrgt) then {" \n
+ "_trgt = _nrstTrgt;" \n
+ "};" \n
+ "_sanityCheck = 90;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class check_threat
+ {
+ priority = 80.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 80;"/*%FSM*/;
+ action=/*%FSM*/"_avDist = 0;" \n
+ "_tDist = 0;" \n
+ "_wepCount = 0;" \n
+ "_addThreat = 0;" \n
+ "" \n
+ "_nrTrgtCount = (count _nrTrgts);" \n
+ "if (_nrTrgtCount>0) then {" \n
+ "{" \n
+ " if ((typeof _x) in _trgtArr) then {" \n
+ "" \n
+ " if!((currentWeapon _x) == """") then {" \n
+ " _tDist = _tDist + (_x distance _sapper);" \n
+ "" \n
+ " if!(lineIntersects [aimPos _sapper, eyePos _x, _sapper, _x]) then {" \n
+ " _wepCount = _wepCount + 1;" \n
+ " };" \n
+ "" \n
+ " };" \n
+ "" \n
+ " };" \n
+ "}forEach _nrTrgts;" \n
+ "" \n
+ "_avDist = _tDist / _nrTrgtCount;" \n
+ "_addThreat = _wepCount;" \n
+ "" \n
+ "" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_sanityCheck = 80;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class check_target
+ {
+ priority = 60.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 60;" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_trgtDist = _sapper distance _trgt;" \n
+ "_canSee = ((!lineIntersects [eyePos _sapper, aimPos _trgt, _sapper, _trgt]) && _trgtDist < _smellDist);" \n
+ "_trgtPos = getPosATL _trgt;" \n
+ "" \n
+ "" \n
+ "_sanityCheck = 60;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class feeling
+ {
+ priority = 50.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 50;" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "if (_sFiredNear select 1 >0 && _sFiredNear select 1 < 50) then {" \n
+ "_sAnger = _sAnger + 6;" \n
+ "_sFear = _sFear + 4;" \n
+ "if (isPlayer (_sHit select 0)) then {" \n
+ "_trgt = _sHit select 0;" \n
+ "};" \n
+ "};" \n
+ "" \n
+ "if (_sHit select 1>0) then {" \n
+ "_sAnger = _sAnger + 12;" \n
+ "_sFear = _sFear + 8;" \n
+ "if (isPlayer (_sHit select 0)) then {" \n
+ "_trgt = _sHit select 0;" \n
+ "};" \n
+ "};" \n
+ "" \n
+ "//Can see target grrr" \n
+ "if (_canSee) then {" \n
+ "_sAnger = _sAnger + 2;" \n
+ "};" \n
+ "" \n
+ "//can see armed targets" \n
+ "if (_addThreat > 0) then {" \n
+ "_sFear = _sFear + _addThreat;" \n
+ "};" \n
+ "" \n
+ "//calm down calm down" \n
+ "if (diag_tickTime > _f + 60) then {" \n
+ "_sAnger = _sAnger - _sHardness;" \n
+ "_sFear = _sFear - _sHardness;" \n
+ "_f = diag_tickTime;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_sanityCheck = 50;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class stuck
+ {
+ priority = 30.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 30;" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/"if (_lastPos distance (getPos _sapper) < 0.5) then {" \n
+ "" \n
+ "if (!(_moveTo isEqualTo [0,0,0])) then {" \n
+ "_sapper moveTo _moveTo;" \n
+ "};" \n
+ "" \n
+ "_stuckCount = _stuckCount + 1;" \n
+ "}else{" \n
+ "" \n
+ "_lastPos = getPos _sapper;" \n
+ "" \n
+ "};" \n
+ "_sanityCheck = 30;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class final_checks
+ {
+ priority = 10.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 10;"/*%FSM*/;
+ action=/*%FSM*/"_sFiredNear = [objNull, 0];" \n
+ "_sHit = [objNull, 0];" \n
+ "" \n
+ "_sAnger =_sAnger min 100 max 0;" \n
+ "_sFear =_sFear min 100 max 0;" \n
+ "" \n
+ "//Interrupt cuurent action" \n
+ "//if (_sAnger > 80) then {" \n
+ "//_actionDone = true;" \n
+ "//_cirteria = ""(true)"";" \n
+ "//};" \n
+ "" \n
+ "" \n
+ "//Blow up if stuck" \n
+ "if (_stuckCount > 12 && _sWait < 1) then {" \n
+ "_callBoom = true;" \n
+ "call _doInterrupt;" \n
+ "//Call another sapper in here ?" \n
+ "};" \n
+ "" \n
+ "//Charge if player suddenly in view and anger at correct level" \n
+ "if (_lastAction!=""charge"" && _trgtDist > _detonateDist && _canSee && _sAnger > _chargeTrig) then {" \n
+ "call _randomGroan;" \n
+ "_callCharge = true;" \n
+ "call _doInterrupt;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "//Detonate near very close player" \n
+ "if (_trgtDist < _detonateDist && _canSee) then {" \n
+ "_callBoom = true;" \n
+ "call _doInterrupt;" \n
+ "};" \n
+ "" \n
+ "//Interrupt and hide if scared and player suddenly in view" \n
+ "if (_lastAction!=""hide"" && _trgtDist > _detonateDist && _canSee && _sFear > _sHideTrig) then {" \n
+ "call _randomGroan;" \n
+ "_callHide = true;" \n
+ "call _doInterrupt;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "//Change pathfinding" \n
+ "if (_trgtDist>25) then {" \n
+ "_sapper setBehaviour ""CARELESS"";" \n
+ "}else{" \n
+ "_sapper setBehaviour ""STEALTH"";" \n
+ "};" \n
+ "" \n
+ "//Change anger at distance" \n
+ "//if (_trgtDist>48) then {" \n
+ "//_sAnger = _sAnger + 1;" \n
+ "//};" \n
+ "" \n
+ "//Hiding makes him angry" \n
+ "if (_lastAction == ""hide"") then {" \n
+ "_sAnger = _sAnger + 2;" \n
+ "};" \n
+ "" \n
+ "//Log last seen position for stalking" \n
+ "if (_canSee) then {" \n
+ "_spottedPos = getPos _trgt;" \n
+ "//Reset Charge Count" \n
+ "_attempts = 0;" \n
+ "};" \n
+ "" \n
+ "//Set stalking distance based on fear." \n
+ "if (_sFear > 48) then {" \n
+ "_maxStalkDist = 68;" \n
+ "}else{" \n
+ "_maxStalkDist = 42;" \n
+ "};" \n
+ "" \n
+ "//Adjust Max stalk to allow player to lose sapper" \n
+ "//Done in stalk mode - left fo reference" \n
+ "//_maxStalkDist = (_maxStalkDistPerm - (_trgtDist / 2));" \n
+ "//_minStalkDist = (_minStalkDistPerm - (_trgtDist / 3));" \n
+ "" \n
+ "//hint format [""SAPPER (%4)\nStalk: %1 / %2\nDist To Trgt Sapper: %3 | Plyr:%6\nSee: %5"",_minStalkDist,_maxStalkDist,_moveTo distance _sapper,_debugDo, _canSee,_moveTo distance _trgt];" \n
+ "" \n
+ "_sanityCheck = 0;" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class return
+ {
+ name = "return";
+ init = /*%FSM*/"_u = diag_tickTime;" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class to_action
+ {
+ priority = 10.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_checkEntry == ""action"");"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = """";" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class to_instinct
+ {
+ priority = 5.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_checkEntry == ""instinct"");"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = """";" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class reset
+ {
+ name = "reset";
+ init = /*%FSM*/"_t = diag_tickTime;" \n
+ "" \n
+ "//Check for not found safe Pos" \n
+ "" \n
+ "if (_sWait > 100) then {" \n
+ "_sWait = 12;" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class find_nest
+ {
+ name = "find_nest";
+ init = /*%FSM*/"_arrGarr = [];" \n
+ "_garrCount = 0;" \n
+ "_noJammer = true;" \n
+ "" \n
+ "" \n
+ "if (damage _nrBuild != 1 && (!((typeOf _nrBuild) in _filterBuilds))) then {" \n
+ "" \n
+ "{" \n
+ "if(_x distance _nrBuild < 22)exitWith{_noJammer = false;};" \n
+ "}forEach _jammers;" \n
+ "" \n
+ "_nestFind = _nestFind + 1;" \n
+ "_garrisonPos = getPos _nrBuild;" \n
+ "while {format [""%1"", _nrBuild buildingPos (_garrCount)] != ""[0,0,0]"" } do {" \n
+ "_arrGarr pushBack _garrCount;" \n
+ "_garrCount = _garrCount + 1;" \n
+ "};" \n
+ "" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class none_found
+ {
+ priority = 30.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_nestFind > 20 || count _nrBuilds < 1;"/*%FSM*/;
+ action=/*%FSM*/"_actionDone = true;" \n
+ "_sWait = 0;" \n
+ "_criteria = ""(true)"";"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class suitable
+ {
+ priority = 20.000000;
+ to="make_nest";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_garrCount > 4 && _noJammer;"/*%FSM*/;
+ action=/*%FSM*/"_arrNest pushBack _sapper;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class not_suitable
+ {
+ priority = 10.000000;
+ to="find_nest";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_garrCount < 4 || !_noJammer;"/*%FSM*/;
+ action=/*%FSM*/"_nrBuild = _nrBuilds call BIS_fnc_selectRandom;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class make_nest
+ {
+ name = "make_nest";
+ init = /*%FSM*/"" \n
+ "_garrIndex = 0;" \n
+ "_nestBoom = false;" \n
+ "_c = diag_tickTime;" \n
+ "_nestCount = (count _arrGarr) min 6;" \n
+ "" \n
+ "for ""_i"" from 0 to _nestCount step 1 do {" \n
+ "" \n
+ "_garrPos = (_nrBuild buildingPos (_arrGarr select _garrIndex));" \n
+ "" \n
+ "" \n
+ "if (_garrIndex < 1) then {" \n
+ "" \n
+ "_sapper moveTo _garrPos;" \n
+ "" \n
+ "}else{" \n
+ "" \n
+ "_nestMate = createAgent [""Epoch_Sapper_F"", _garrPos, [], 0, ""FORM""]; " \n
+ "_bomb = createVehicle [""Sapper_Charge_Ammo"", (getposATL _nestMate), [], 0, ""CAN_COLLIDE""] ; " \n
+ "_bomb attachTo [_nestMate, [0,0,0],""Pelvis""];" \n
+ "_nestMate setVariable [""bomb"",_bomb];" \n
+ "EPOCH_TEMPOBJ_PVS = _nestMate;" \n
+ "publicVariableServer ""EPOCH_TEMPOBJ_PVS"";" \n
+ "_nestMate disableAI ""TARGET"";" \n
+ "_nestMate disableAI ""AUTOTARGET"";" \n
+ "_nestMate disableAI ""FSM"";" \n
+ "_nestMate moveTo _garrPos;" \n
+ "" \n
+ "_arrNest pushBack _nestMate;" \n
+ "" \n
+ "};" \n
+ "" \n
+ "_garrIndex = _garrIndex + 1;" \n
+ "};" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="monitor_nest";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class ba_boom
+ {
+ name = "ba_boom";
+ init = /*%FSM*/"""Epoch_Sapper_F"" call EPOCH_unitSpawnDecrease;" \n
+ "" \n
+ "[_nrBuild, _sapper] spawn {" \n
+ "sleep 6;" \n
+ "EPOCH_SapperObjs_PVS = [_this select 0, player, Epoch_personalToken,_this select 1];" \n
+ "publicVariableServer ""EPOCH_SapperObjs_PVS"";" \n
+ "};" \n
+ "" \n
+ "{" \n
+ "" \n
+ "_sound = ""sapper_explode"";" \n
+ "_x say3D _sound;" \n
+ "EPOCH_say3D_PVS = [player,_x,(EPOCH_sounds find _sound),Epoch_personalToken];" \n
+ "publicVariableServer ""EPOCH_say3D_PVS"";" \n
+ "_x playMoveNow ""Unconscious"";" \n
+ "" \n
+ "_x spawn {" \n
+ "sleep floor (random 3);" \n
+ "_sBomb = _this getVariable [""bomb"",objNull];" \n
+ "" \n
+ "EPOCH_SapperObjs_PVS = [_sBomb, player, Epoch_personalToken,_this,_this];" \n
+ "publicVariableServer ""EPOCH_SapperObjs_PVS"";" \n
+ "" \n
+ "_finalPos = getPosATL _this;" \n
+ "_finalDir = getDir _this;" \n
+ "" \n
+ "_this setObjectTextureGlobal [0, """"]; " \n
+ "_this setObjectTextureGlobal [1, ""x\addons\a3_epoch_assets\textures\sapper\sapper_eco.paa""]; " \n
+ "" \n
+ "_head = createVehicle [""SapperHead_SIM_EPOCH"", _finalPos, [], 0, ""CAN_COLLIDE""];" \n
+ "_head setVelocity [random 2,random 2,10];" \n
+ "" \n
+ "sleep 120;" \n
+ "if (!isNull _x) then {" \n
+ "deleteVehicle _x;" \n
+ "};" \n
+ "if (!isNull _sBomb) then {" \n
+ "deleteVehicle _sBomb;" \n
+ "};" \n
+ "};" \n
+ "" \n
+ "" \n
+ "}forEach _arrNest;" \n
+ "" \n
+ "" \n
+ "" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Wait_to_delete
+ {
+ priority = 10.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _t) > 480;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/"if (!isNull _sapper) then {" \n
+ "_sapper removeAllEventHandlers ""Hit"";" \n
+ "_sapper removeAllEventHandlers ""FiredNear"";" \n
+ "" \n
+ "if!(_traderDispose) then {" \n
+ "deleteVehicle _sapper;" \n
+ "};" \n
+ "};" \n
+ "if (!isNull _sBomb) then {" \n
+ "deleteVehicle _sBomb;" \n
+ "};" \n
+ "if !(isNull _head) then {" \n
+ " deleteVehicle _head;" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class handle_dispose
+ {
+ name = "handle_dispose";
+ init = /*%FSM*/"_t = diag_tickTime;" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class not_shot
+ {
+ priority = 10.000000;
+ to="finished_boom";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"isNull _sBomb;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class shot
+ {
+ priority = 5.000000;
+ to="smoke";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!isNull _sBomb;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_boom
+ {
+ name = "do_boom";
+ init = /*%FSM*/"EPOCH_SapperObjs_PVS = [_sBomb, player, Epoch_personalToken,_sapper,_sapper];" \n
+ "publicVariableServer ""EPOCH_SapperObjs_PVS"";" \n
+ "" \n
+ "_sBomb = objNull;" \n
+ "_finalPos = getPosATL _sapper;" \n
+ "_finalDir = getDir _sapper;" \n
+ "" \n
+ "_sapper setObjectTextureGlobal [0, """"]; " \n
+ "_sapper setObjectTextureGlobal [1, ""x\addons\a3_epoch_assets\textures\sapper\sapper_eco.paa""]; " \n
+ "" \n
+ "_head = createVehicle [""SapperHead_SIM_EPOCH"", _finalPos, [], 0, ""CAN_COLLIDE""];" \n
+ "_dir = [_head, _trgt] call BIS_fnc_dirTo;" \n
+ "_speed = (_sapper distance _trgt);" \n
+ "_head setVelocity [" \n
+ " (sin _dir * _speed), " \n
+ " (cos _dir * _speed), " \n
+ " (_speed / 2 min 8)" \n
+ "];" \n
+ "_doneBoom = true;" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="finished_boom";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_groan
+ {
+ name = "do_groan";
+ init = /*%FSM*/"" \n
+ "" \n
+ "call _randomGroan;" \n
+ "" \n
+ "_actionDone = true;" \n
+ "_criteria = ""(true)"";" \n
+ "_sWait = 1;" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_stalk
+ {
+ name = "do_stalk";
+ init = /*%FSM*/"_jammers = nearestObjects[_trgtPos, [""PlotPole_EPOCH""], _jammerRange];" \n
+ "_circleDone = false;" \n
+ "_sWait = 0;" \n
+ "" \n
+ "if( count _jammers > 0)then{" \n
+ "" \n
+ "{" \n
+ "if((_sapper distance _trgt) < (_x distance _sapper))then{" \n
+ "_trgt = _x;" \n
+ "_minStalkDist = _minStalkDistPerm + _jammerRange;" \n
+ "_maxStalkDist = _maxStalkDistPerm + _jammerRange;" \n
+ "};" \n
+ "}forEach _jammers;" \n
+ "" \n
+ "};" \n
+ "" \n
+ "if (!_stalking) then {" \n
+ "" \n
+ "if (_spottedPos select 0 > 0) then {" \n
+ "_moveTo = _spottedPos;" \n
+ "_spottedPos=[0,0,0];" \n
+ "}else{" \n
+ "_sSide = [90,-90] call BIS_fnc_selectRandom;" \n
+ "_moveTo = [_maxStalkDist,_minStalkDist,0,_sapper,_sSide,_trgt] call EPOCH_fnc_findSapperStalkLocation;" \n
+ "};" \n
+ "" \n
+ "_sapper forceSpeed 3.5;" \n
+ "_sapper moveTo _moveTo;" \n
+ "_stalking = true;" \n
+ "_c = diag_tickTime;" \n
+ "//systemchat ""Stalk"";" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_sDist = _sapper distance _moveTo;" \n
+ "if (_sWait < 1) then {" \n
+ "_sWait = _sDist;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "//systemchat format[""Stalking %1"",diag_tickTime];" \n
+ "//deleteMarkerLocal _mkrName;" \n
+ "//_mkrName = format[""axeS%1"", diag_tickTime];" \n
+ "// _mkr = createMarkerLocal [_mkrName, _moveTo];" \n
+ "// _mkrName setMarkerShapeLocal ""ICON"";" \n
+ "//_mkrName setMarkerTypeLocal ""mil_dot"";" \n
+ "//_mkrName setMarkerColorLocal ""COLORYELLOW"";" \n
+ "// _mkrName setMarkerTypeLocal ""mil_dot"";" \n
+ "// _mkrName setMarkerSizeLocal [0.8,0.8];" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class circled
+ {
+ priority = 10.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"moveToCompleted _sapper || diag_tickTime > _c + _sWait;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_stalking = false;" \n
+ "_actionDone = true;" \n
+ "_sWait = 0;" \n
+ "_criteria = ""(true)"";" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class stalking
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sDist > 6;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_loiter_big
+ {
+ name = "do_loiter_big";
+ init = /*%FSM*/"_sapperPos = getPos _sapper;" \n
+ "_moveTo = [_sapperPos,10,28,5,0,5,0] call BIS_fnc_findSafePos;" \n
+ "_sapper moveTo _moveTo;" \n
+ "_sapper forceSpeed 2;" \n
+ "" \n
+ "" \n
+ "_actionDone = true;" \n
+ "_sWait = (_sapper distance _moveTo) max 1;" \n
+ "_criteria = ""(moveToCompleted _sapper)"";" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_loiter_small
+ {
+ name = "do_loiter_small";
+ init = /*%FSM*/"_dirTo = (random 360) min 10;" \n
+ "_moveTo = [_sapper, 12, _dirTo] call BIS_fnc_relPos;" \n
+ "_sapper forceSpeed 2;" \n
+ "_sapper moveTo _moveTo;" \n
+ "" \n
+ "" \n
+ "_actionDone = true;" \n
+ "_sWait = (_sapper distance _moveTo) max 1;" \n
+ "_criteria = ""(moveToCompleted _sapper)"";" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_charge
+ {
+ name = "do_charge";
+ init = /*%FSM*/"" \n
+ "//At a distance sapper will weave, when close aims staright for target" \n
+ "if (_trgtDist > _detonateDist * 2) then {" \n
+ "_moveTo = [_detonateDist * 2,_detonateDist,80,_trgt] call EPOCH_fnc_findRandomPosBehind;" \n
+ "}else{" \n
+ "_moveTo = getPosATL _trgt;" \n
+ "};" \n
+ "" \n
+ "_sapper forceSpeed 5;" \n
+ "_sapper moveTo _moveTo;" \n
+ "_attempts = _attempts +1;" \n
+ "" \n
+ "" \n
+ "" \n
+ "//systemchat format[""Charging %1"",diag_tickTime];" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class charged
+ {
+ priority = 10.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_attempts > 17 || (_sapper distance _trgt) < (_detonateDist / 2) || (!_canSee && _attempts > 6);" \n
+ "//Experimental stop charging if can not see and anger dropped.."/*%FSM*/;
+ action=/*%FSM*/"_charging = false;" \n
+ "_actionDone = true;" \n
+ "_sWait = 0;" \n
+ "_criteria = ""(true)"";" \n
+ "" \n
+ "" \n
+ "" \n
+ "if (diag_tickTime - _lastAlert > 60) then {" \n
+ " _lastAlert = diag_tickTime;" \n
+ " _sound = ""sapper_groan2"";" \n
+ " _sapper say3D _sound;" \n
+ " EPOCH_say3D_PVS = [player, _sapper,(EPOCH_sounds find _sound), Epoch_personalToken];" \n
+ " publicVariableServer ""EPOCH_say3D_PVS"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class charging
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(moveToCompleted _sapper && _attempts < 18) || diag_tickTime > _c + ((_trgtDist / 2) max 2) ;"/*%FSM*/;
+ action=/*%FSM*/"_charging = true;" \n
+ "_lastPos = getPosATL _sapper;" \n
+ "_c = diag_tickTime;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class find_spot
+ {
+ name = "find_spot";
+ init = /*%FSM*/"try{" \n
+ "_h = diag_tickTime;" \n
+ "_moveTo = ATLToASL ([(getPosATL _sapper), (floor (random 30) + 12), floor random 360] call BIS_fnc_relPos);" \n
+ "_posSafe = true;" \n
+ "_nrTrgts = _sapper nearEntities [_trgtArr, _sRange];" \n
+ "" \n
+ "{" \n
+ " if (!lineIntersects [aimPos _x, _moveTo, _x, _sapper]) then {_posSafe = false;};" \n
+ "" \n
+ "} forEach _nrTrgts;" \n
+ "" \n
+ "_moveTo = ASLToATL _moveTo;" \n
+ "" \n
+ "}catch{" \n
+ "_posSafe = true;" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class not_safe
+ {
+ priority = 10.000000;
+ to="find_spot";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_posSafe;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class is_safe
+ {
+ priority = 5.000000;
+ to="do_hide";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_posSafe;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_hide
+ {
+ name = "do_hide";
+ init = /*%FSM*/"_sapper forceSpeed 5;" \n
+ "_sapper moveTo _moveTo;" \n
+ "_sWait = (_sapper distance _moveTo) max 1;" \n
+ "_actionDone = true;" \n
+ "_criteria = ""(moveToCompleted _sapper)"";" \n
+ "" \n
+ "if (_trgtDist<25) then {" \n
+ "_sapper setBehaviour ""CARELESS"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class smoke
+ {
+ name = "smoke";
+ init = /*%FSM*/"if!(_traderDispose) then {" \n
+ "_sapperSmoke = ""SmokeShellCustom"" createVehicle [(getPosATL _sapper) select 0, (getPosATL _sapper) select 1, -0.2];" \n
+ "_sapperSmoke attachTo [_sapper,[0,0,-0.4]];" \n
+ "};" \n
+ "" \n
+ "if (!isNull _sBomb) then {" \n
+ "deleteVehicle _sBomb;" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="finished_boom";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class monitor_nest
+ {
+ name = "monitor_nest";
+ init = /*%FSM*/"" \n
+ "" \n
+ "_nrTrgts = _nrBuild nearEntities [_trgtArr, _sRange];" \n
+ "" \n
+ "_lowDist = _sRange;" \n
+ "" \n
+ "{" \n
+ "_currDist = _x distance _nrBuild;" \n
+ " if (_currDist < _lowDist) then {" \n
+ " _nrstTrgt = _x;" \n
+ " _lowDist = _currDist;" \n
+ " };" \n
+ "}forEach _nrTrgts;" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class nest_disturbed
+ {
+ priority = 30.000000;
+ to="ba_boom";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_nestBoom;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class shuffle
+ {
+ priority = 25.000000;
+ to="monitor_nest";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"diag_tickTime > _s + 30;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_moveSapper = _arrNest call BIS_fnc_selectRandom;" \n
+ "_moveSapper forceSpeed 2;" \n
+ "_moveTo = _nrBuild buildingPos (_arrGarr call BIS_fnc_selectRandom);" \n
+ "_moveSapper moveTo _moveTo;" \n
+ "_s = diag_tickTime;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class groan
+ {
+ priority = 20.000000;
+ to="monitor_nest";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_trgt distance _nrBuild < 12 && diag_tickTime > _t + 28;"/*%FSM*/;
+ action=/*%FSM*/"call _randomGroan;" \n
+ "" \n
+ "_t = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class target_near
+ {
+ priority = 10.000000;
+ to="monitor_nest";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"diag_tickTime > _c + 3;"/*%FSM*/;
+ action=/*%FSM*/"{" \n
+ "if (_x distance _nrstTrgt < 1.5 || !alive _x) then {" \n
+ "_nestBoom = true;" \n
+ "};" \n
+ "" \n
+ "}forEach _arrNest;" \n
+ "_c = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class finished_boom
+ {
+ name = "finished_boom";
+ init = /*%FSM*/"""Epoch_Sapper_F"" call EPOCH_unitSpawnDecrease;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Wait_to_delete
+ {
+ priority = 10.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _t) > 480;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="sapper";
+ finalStates[] =
+ {
+ "end"
+ };
+};
+/*%FSM*/
diff --git a/Sources/epoch_code/System/Sapper_Brain2.fsm b/Sources/epoch_code/System/Sapper_Brain2.fsm
new file mode 100644
index 00000000..f1d7cafc
--- /dev/null
+++ b/Sources/epoch_code/System/Sapper_Brain2.fsm
@@ -0,0 +1,1419 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"sapper",0,250,-225.000000,-325.000000,-125.000000,-275.000000,0.000000,"sapper"};
+item1[] = {"_",8,218,75.000000,-200.000000,125.000000,-175.000000,0.000000,""};
+item2[] = {"instinct",2,250,150.000000,-200.000000,250.000000,-150.000000,0.000000,"instinct"};
+item3[] = {"no_decision",4,218,375.000000,-125.000000,475.000000,-75.000000,10.000000,"no decision"};
+item4[] = {"action",2,250,150.000000,125.000000,250.000000,175.000000,0.000000,"action"};
+item5[] = {"dispose",4,218,75.000000,-325.000000,175.000000,-275.000000,80.000000,"dispose"};
+item6[] = {"_",8,218,125.406227,636.108887,177.358261,664.513977,0.000000,""};
+item7[] = {"reset_vars",2,250,-50.000000,-200.000000,50.000000,-150.000000,0.000000,"reset vars"};
+item8[] = {"complete",4,218,56.428787,-94.767609,146.429047,-44.767593,110.000000,"complete"};
+item9[] = {"stalk",4,218,-50.000000,0.000000,50.000000,50.000000,50.000000,"stalk"};
+item10[] = {"pre_boom",2,250,525.000000,225.000000,625.000000,275.000000,0.000000,"pre boom"};
+item11[] = {"dispose",4,218,375.000000,125.000000,475.000000,175.000000,95.000000,"dispose"};
+item12[] = {"loiter_large",4,218,250.000000,350.000000,350.000000,400.000000,30.000000,"loiter large"};
+item13[] = {"check_threat",4,218,725.000000,-125.000000,825.000000,-75.000000,80.000000,"check threat"};
+item14[] = {"instinct_done",4,218,150.000000,-100.000000,250.000000,-50.000000,100.000000,"instinct done"};
+item15[] = {"charge",4,218,225.000000,-350.000000,325.000000,-300.000000,50.000000,"charge"};
+item16[] = {"wait_action",4,218,375.000000,25.000000,475.000000,75.000000,100.000000,"wait action"};
+item17[] = {"checking_status",2,250,625.000000,-50.000000,725.000000,0.000000,0.000000,"checking status"};
+item18[] = {"choose_target",4,218,675.000000,-150.000000,775.000000,-100.000000,90.000000,"choose target"};
+item19[] = {"final_checks",4,218,725.000000,25.000000,825.000000,75.000000,10.000000,"final checks"};
+item20[] = {"done",4,218,475.000000,-50.000000,575.000000,0.000000,100.000000,"done"};
+item21[] = {"loiter",4,218,325.000000,-300.000000,425.000000,-250.000000,30.000000,"loiter"};
+item22[] = {"return",2,250,350.000000,-50.000000,450.000000,0.000000,0.000000,"return"};
+item23[] = {"to_action",4,218,275.000000,25.000000,375.000000,75.000000,10.000000,"to action"};
+item24[] = {"to_instinct",4,218,275.000000,-125.000000,375.000000,-75.000000,5.000000,"to instinct"};
+item25[] = {"boom",4,218,375.000000,175.000000,475.000000,225.000000,90.000000,"boom"};
+item26[] = {"reset",2,250,100.000000,500.000000,200.000000,550.000000,0.000000,"reset"};
+item27[] = {"loiter_small",4,218,300.000000,325.000000,400.000000,375.000000,20.000000,"loiter small"};
+item28[] = {"groan",4,218,175.000000,-375.000000,275.000000,-325.000000,60.000000,"groan"};
+item29[] = {"charge",4,218,-50.000000,175.000000,50.000000,225.000000,70.000000,"charge"};
+item30[] = {"stalking",4,218,-50.000000,50.000000,50.000000,100.000000,5.000000,"stalking"};
+item31[] = {"Wait_random",4,218,-225.000000,-200.000000,-125.000000,-150.000000,10.000000,"Wait random"};
+item32[] = {"groan",4,218,200.000000,375.000000,300.000000,425.000000,5.000000,"groan"};
+item33[] = {"detonate",4,218,125.000000,-350.000000,225.000000,-300.000000,70.000000,"detonate"};
+item34[] = {"end",1,250,975.000000,0.000000,1075.000000,50.000000,0.000000,"end"};
+item35[] = {"Wait_to_delete",4,218,975.000000,150.000000,1075.000000,200.000000,10.000000,"Wait to delete"};
+item36[] = {"handle_dispose",2,250,525.000000,125.000000,625.000000,175.000000,0.000000,"handle dispose"};
+item37[] = {"Wait_1_5_sec",4,218,650.000000,300.000000,750.000000,350.000000,0.000000,"Wait" \n "1.5 sec"};
+item38[] = {"do_boom",2,4346,650.000000,225.000000,750.000000,275.000000,0.000000,"do boom"};
+item39[] = {"_",8,218,800.000000,300.000000,850.000000,325.000000,0.000000,""};
+item40[] = {"do_groan",2,250,225.000000,500.000000,325.000000,550.000000,0.000000,"do groan"};
+item41[] = {"do_stalk",2,250,-200.000000,50.000000,-100.000000,100.000000,0.000000,"do stalk"};
+item42[] = {"do_loiter_big",2,250,350.000000,500.000000,450.000000,550.000000,0.000000,"do loiter big"};
+item43[] = {"do_loiter_small",2,250,475.000000,500.000000,575.000000,550.000000,0.000000,"do loiter small"};
+item44[] = {"do_charge",2,250,-200.000000,225.000000,-100.000000,275.000000,0.000000,"do charge"};
+item45[] = {"hide",4,218,25.000000,325.000000,125.000000,375.000000,60.000000,"hide"};
+item46[] = {"check_target",4,218,775.000000,-100.000000,875.000000,-50.000000,60.000000,"check target"};
+item47[] = {"hide",4,218,275.000000,-325.000000,375.000000,-275.000000,40.000000,"hide"};
+item48[] = {"find_spot",2,250,-200.000000,400.000000,-100.000000,450.000000,0.000000,"find spot"};
+item49[] = {"not_safe",4,218,-250.000000,500.000000,-150.000000,550.000000,10.000000,"not safe"};
+item50[] = {"is_safe",4,218,-150.000000,500.000000,-50.000000,550.000000,5.000000,"is safe"};
+item51[] = {"do_hide",2,250,-150.000000,625.000000,-50.000000,675.000000,0.000000,"do hide"};
+item52[] = {"smoke",2,250,775.000000,150.000000,875.000000,200.000000,0.000000,"smoke"};
+item53[] = {"charged",4,218,-50.000000,275.000000,50.000000,325.000000,10.000000,"charged"};
+item54[] = {"_",8,218,125.000000,375.000000,175.000000,400.000000,0.000000,""};
+item55[] = {"circled",4,218,-50.000000,100.000000,50.000000,150.000000,10.000000,"circled"};
+item56[] = {"stuck",4,218,775.000000,0.000000,875.000000,50.000000,30.000000,"stuck"};
+item57[] = {"shot",4,218,650.000000,150.000000,750.000000,200.000000,5.000000,"shot"};
+item58[] = {"feeling",4,218,775.000000,-50.000000,875.000000,0.000000,50.000000,"feeling"};
+item59[] = {"charging",4,218,-50.000000,225.000000,50.000000,275.000000,5.000000,"charging"};
+item60[] = {"stalk",4,218,375.000000,-275.000000,475.000000,-225.000000,20.000000,"stalk"};
+item61[] = {"not_shot",4,218,900.000000,125.000000,1000.000000,175.000000,10.000000,"not shot"};
+item62[] = {"finished_boom",2,250,900.000000,225.000000,1000.000000,275.000000,0.000000,"finished boom"};
+link0[] = {0,31};
+link1[] = {1,2};
+link2[] = {2,3};
+link3[] = {2,5};
+link4[] = {2,14};
+link5[] = {2,15};
+link6[] = {2,21};
+link7[] = {2,28};
+link8[] = {2,33};
+link9[] = {2,47};
+link10[] = {2,60};
+link11[] = {3,17};
+link12[] = {4,8};
+link13[] = {4,9};
+link14[] = {4,11};
+link15[] = {4,12};
+link16[] = {4,16};
+link17[] = {4,25};
+link18[] = {4,27};
+link19[] = {4,29};
+link20[] = {4,32};
+link21[] = {4,45};
+link22[] = {5,2};
+link23[] = {6,26};
+link24[] = {7,1};
+link25[] = {8,7};
+link26[] = {9,41};
+link27[] = {10,37};
+link28[] = {11,36};
+link29[] = {12,42};
+link30[] = {13,17};
+link31[] = {14,4};
+link32[] = {15,2};
+link33[] = {16,17};
+link34[] = {17,13};
+link35[] = {17,18};
+link36[] = {17,19};
+link37[] = {17,20};
+link38[] = {17,46};
+link39[] = {17,56};
+link40[] = {17,58};
+link41[] = {18,17};
+link42[] = {19,17};
+link43[] = {20,22};
+link44[] = {21,2};
+link45[] = {22,23};
+link46[] = {22,24};
+link47[] = {23,4};
+link48[] = {24,2};
+link49[] = {25,10};
+link50[] = {26,54};
+link51[] = {27,43};
+link52[] = {28,2};
+link53[] = {29,44};
+link54[] = {30,4};
+link55[] = {31,7};
+link56[] = {32,40};
+link57[] = {33,2};
+link58[] = {35,34};
+link59[] = {36,57};
+link60[] = {36,61};
+link61[] = {37,38};
+link62[] = {38,39};
+link63[] = {39,62};
+link64[] = {40,6};
+link65[] = {41,30};
+link66[] = {41,55};
+link67[] = {42,6};
+link68[] = {43,6};
+link69[] = {44,53};
+link70[] = {44,59};
+link71[] = {45,48};
+link72[] = {46,17};
+link73[] = {47,2};
+link74[] = {48,49};
+link75[] = {48,50};
+link76[] = {49,48};
+link77[] = {50,51};
+link78[] = {51,6};
+link79[] = {52,39};
+link80[] = {53,4};
+link81[] = {54,4};
+link82[] = {55,4};
+link83[] = {56,17};
+link84[] = {57,52};
+link85[] = {58,17};
+link86[] = {59,4};
+link87[] = {60,2};
+link88[] = {61,62};
+link89[] = {62,35};
+globals[] = {25.000000,1,0,0,16777215,640,480,1,248,6316128,1,-343.543304,1069.998291,679.913574,-353.385406,1000,731,1};
+window[] = {2,-1,-1,-1,-1,542,56,1081,17,3,1018};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "sapperAlt";
+ class States
+ {
+ /*%FSM*/
+ class sapper
+ {
+ name = "sapper";
+ init = /*%FSM*/"_sapper = _this select 0;" \n
+ "_sBomb = _this select 1;" \n
+ "_head = objNull;" \n
+ "_lastAlert = diag_tickTime;" \n
+ "_trgt = player;" \n
+ "" \n
+ "_sapper setBehaviour ""STEALTH"";" \n
+ "_sapper setUnitPos ""UP""; " \n
+ "" \n
+ "_entsArr = [""Epoch_Male_F"",""Epoch_Female_F"",""Epoch_Sapper_F"",""Fin_random_EPOCH"",""Alsatian_Random_EPOCH"",""Epoch_cloak_F"",""b_survivor_F"",""Epoch_Female_Camo_F""];" \n
+ "_trgtArr = [""Epoch_Male_F"",""Epoch_Female_F"",""b_survivor_F"",""Epoch_Female_Camo_F"",""C_man_hunter_1_F"",""Construct_F""];" \n
+ "" \n
+ "" \n
+ "//Behaviour Vars" \n
+ "_detonateDistMax = 8;//Random distance between 3 and this at which to detonate" \n
+ "_groanTrig = 16;//Percentage chance of groan." \n
+ "_sRange = 500;//Escape distance, range for sapper to look for current target(s)" \n
+ "_sHideTrig = 72;//Sapper will hide if fear rises above this level." \n
+ "_chargeTrig = 54;//Charges at this level of anger" \n
+ "_sHardness = floor (random 6) max 1;//LEvel to drop anger and fear as sapper calms down" \n
+ "_checkFreq = 2.5;//Frequency of live status check. Lower makes sapper quicker to respond to new stimulus." \n
+ "_welcomeWait = floor (random 18);//Random pause before sapper announces his presence" \n
+ "" \n
+ "_vehArray = [""Car""];" \n
+ "_trgt = player;" \n
+ "_requestDispose = false;" \n
+ "" \n
+ "_nrstTrgt = objNull;" \n
+ "_lowDist = 0;" \n
+ "_currDist = 0;" \n
+ "_filterBuilds = [""Land_i_Addon_03_V1_F"",""Land_Offices_01_V1_F""];" \n
+ "_t = diag_tickTime;" \n
+ "_u = _t;" \n
+ "_c = _u;" \n
+ "_f = _c;" \n
+ "_h = _f;" \n
+ "_d2 = _h;" \n
+ "" \n
+ "//MIssion Vars" \n
+ "_traderDispose = false;" \n
+ "" \n
+ "_dirTo = 0;" \n
+ "_lDist = 0;" \n
+ "_checkEntry = """";" \n
+ "" \n
+ "_decisionMade = false;" \n
+ "_actionDone = false;" \n
+ "_sapperPos=[0,0,0];" \n
+ "_trgtPos=[0,0,0];" \n
+ "_hidePos = [0,0,0];" \n
+ "_nrPlyrs = [];" \n
+ "_circlePos = [0,0,0];" \n
+ "_behindPos = [0,0,0];" \n
+ "_lastPos = [0,0,0];" \n
+ "_spottedPos = [0,0,0];" \n
+ "_lastAction = """";" \n
+ "_maxStalkDist = 48;" \n
+ "_doWander = false;" \n
+ "_callHide = false;" \n
+ "_callBoom = false;" \n
+ "_callCharge = false;" \n
+ "_doneBoom = false;" \n
+ "" \n
+ "//Feeling vars" \n
+ "_sAnger = 50;" \n
+ "_sFear = 50;" \n
+ "_threateLevel = 0;" \n
+ "_addThreat = 0;" \n
+ "_sHit = [objNull, 0];" \n
+ "_sFiredNear = [objNull, 0];" \n
+ "" \n
+ "_stuckCount = 0;" \n
+ "" \n
+ "//Nest vars" \n
+ "" \n
+ "_nrBuild = nearestBuilding _sapper;" \n
+ "_doNest = false;" \n
+ "_nrBuild = objNull;" \n
+ "_nrBuild = [];" \n
+ "" \n
+ "" \n
+ "" \n
+ "_doMove = false;" \n
+ "_sanityCheckDone = false;" \n
+ "_canSee = (!lineIntersects [aimPos _sapper, eyePos _trgt, _sapper, _trgt]);" \n
+ "_nrTrgts = [];" \n
+ "_threatLevel = 0;" \n
+ "_trgtDist = _trgt distance _sapper;" \n
+ "_sanityCheck = 0;" \n
+ "" \n
+ "" \n
+ "_doHide = false;" \n
+ "_doAttack = false;" \n
+ "_firedNear = 0;" \n
+ "" \n
+ "_randomGroan = {" \n
+ "_sounds = [""sapper_groan0"",""sapper_groan1"",""sapper_groan2""];" \n
+ "_sound = _sounds select (floor (random (count _sounds)));" \n
+ "" \n
+ "_sapper say3D _sound;" \n
+ "EPOCH_say3D_PVS = [player, _sapper,(EPOCH_sounds find _sound), Epoch_personalToken];" \n
+ "publicVariableServer ""EPOCH_say3D_PVS"";" \n
+ "};" \n
+ "" \n
+ "_doInterrupt = {" \n
+ "_actionDone = true;" \n
+ "_criteria = ""(true)"";" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Wait_random
+ {
+ priority = 10.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _t) > _welcomeWait;"/*%FSM*/;
+ action=/*%FSM*/"call _randomGroan;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class instinct
+ {
+ name = "instinct";
+ init = /*%FSM*/"_t = diag_tickTime;" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class instinct_done
+ {
+ priority = 100.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_decisionMade;"/*%FSM*/;
+ action=/*%FSM*/"_t = diag_tickTime;" \n
+ "_decisionMade = false;" \n
+ "_actionDone = false;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 80.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"((_trgt distance _sapper) > (_sRange * 4)) || !(alive _sapper) || _traderDispose;"/*%FSM*/;
+ action=/*%FSM*/"_doDispose = true;" \n
+ "_decisionMade = true;" \n
+ "_actionDone = false;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class detonate
+ {
+ priority = 70.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_callBoom || ((_trgtDist < _detonateDist) && _canSee);"/*%FSM*/;
+ action=/*%FSM*/"_decisionMade = true;" \n
+ "_doBoom = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class groan
+ {
+ priority = 60.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_groanRnd < _groanTrig;"/*%FSM*/;
+ action=/*%FSM*/"_doGroan = true;" \n
+ "_decisionMade = true;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class charge
+ {
+ priority = 50.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_callCharge || (_canSee && (_sAnger > _chargeTrig || _trgtDist < 22));"/*%FSM*/;
+ action=/*%FSM*/"_doCharge = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class hide
+ {
+ priority = 40.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_callHide || (_sFear > _sHideTrig);"/*%FSM*/;
+ action=/*%FSM*/"_doHide = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class loiter
+ {
+ priority = 30.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sFear < _sHideTrig && _trgtDist < 25 && !_canSee;"/*%FSM*/;
+ action=/*%FSM*/"_doLoiter = true;" \n
+ "_loiterType = random 66;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class stalk
+ {
+ priority = 20.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_canSee;"/*%FSM*/;
+ action=/*%FSM*/"_doStalk= true;" \n
+ "_decisionMade = true;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class no_decision
+ {
+ priority = 10.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_decisionMade && (diag_tickTime > _u + _checkFreq);"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = ""instinct"";" \n
+ "_sanityCheck = 100;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class action
+ {
+ name = "action";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class complete
+ {
+ priority = 110.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_actionDone && (call compile _criteria || (diag_tickTime > (_t + _sWait)));"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "if (!isNil ""_criteriaMetAction"") then {" \n
+ "call _criteriaMetAction;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class wait_action
+ {
+ priority = 100.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"diag_tickTime > _u + _checkFreq;"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = ""action"";" \n
+ "_sanityCheck = 100;" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 95.000000;
+ to="handle_dispose";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_doDispose || !(alive _sapper));"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class boom
+ {
+ priority = 90.000000;
+ to="pre_boom";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doBoom;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class charge
+ {
+ priority = 70.000000;
+ to="do_charge";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doCharge || _charging;" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/"_doCharge = false;" \n
+ "_callCharge = false;" \n
+ "_lastAction = ""charge"";" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class hide
+ {
+ priority = 60.000000;
+ to="find_spot";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doHide;"/*%FSM*/;
+ action=/*%FSM*/"_doHide = false;" \n
+ "_callHide = false;" \n
+ "_posSafe = false;" \n
+ "_lastAction = ""hide"";" \n
+ "_sapper setBehaviour ""CARELESS"";"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class stalk
+ {
+ priority = 50.000000;
+ to="do_stalk";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doStalk || _stalking;"/*%FSM*/;
+ action=/*%FSM*/"_doStalk = false;" \n
+ "_lastAction = ""stalk"";" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class loiter_large
+ {
+ priority = 30.000000;
+ to="do_loiter_big";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doLoiter && (_loiterType > 33);"/*%FSM*/;
+ action=/*%FSM*/"_doLoiter = false;" \n
+ "_lastAction = ""loiter"";" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class loiter_small
+ {
+ priority = 20.000000;
+ to="do_loiter_small";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doLoiter && (_loiterType < 34);" \n
+ "" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/"_doLoiter = false;" \n
+ "_lastAction = ""loiter"";"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class groan
+ {
+ priority = 5.000000;
+ to="do_groan";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doGroan;" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/"_doGroan = false;" \n
+ "_lastAction = ""groan"";" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class reset_vars
+ {
+ name = "reset_vars";
+ init = /*%FSM*/"//Saper Vars" \n
+ "_doStalk = false;" \n
+ "_stalking = false;" \n
+ "" \n
+ "_doLoiter = false;" \n
+ "_loiterType = 0;" \n
+ "" \n
+ "_doCharge = false;" \n
+ "_charging = false;" \n
+ "_chargeCount = 0;" \n
+ "_attempts = 0;" \n
+ "" \n
+ "_doBoom = false;" \n
+ "_doGroan = false;" \n
+ "" \n
+ "_rnd = 0;" \n
+ "_sWait = 0;" \n
+ "_doDispose = false;" \n
+ "_chooseTarget = false;" \n
+ "_t = diag_tickTime;" \n
+ "_detonateDist = (floor(random _detonateDistMax)) max 4;" \n
+ "_groanRnd = random 100;" \n
+ "_hideRnd = random 100;" \n
+ "_nrTrgts=[];" \n
+ "_doHide = false;" \n
+ "_moveTo = [0,0,0];" \n
+ "" \n
+ "" \n
+ "//Brain Vars" \n
+ "_override = false;" \n
+ "_criteria =""(false)"";" \n
+ "_criteriaMet = false;" \n
+ "_criteriaMetAction = nil;" \n
+ "_allowInterrupt = false;" \n
+ "_interruptReason = ""(false)"";" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class pre_boom
+ {
+ name = "pre_boom";
+ init = /*%FSM*/"_t = diag_tickTime;" \n
+ "" \n
+ "_sound = ""sapper_explode"";" \n
+ "_sapper say3D _sound;" \n
+ "EPOCH_say3D_PVS = [player,_sapper,(EPOCH_sounds find _sound),Epoch_personalToken];" \n
+ "publicVariableServer ""EPOCH_say3D_PVS"";" \n
+ "_sapper playMoveNow ""Unconscious"";" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Wait_1_5_sec
+ {
+ priority = 0.000000;
+ to="do_boom";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _t) > 1.5"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class checking_status
+ {
+ name = "checking_status";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class done
+ {
+ priority = 100.000000;
+ to="return";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck < 1;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class choose_target
+ {
+ priority = 90.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 90;"/*%FSM*/;
+ action=/*%FSM*/"_nrstTrgt = objNull;" \n
+ "_nrTrgts = getPos _sapper nearEntities [_trgtArr, _sRange];" \n
+ "_lowDist = _sRange;" \n
+ "" \n
+ "{" \n
+ "if (alive _x) then {" \n
+ "_currDist = _x distance _sapper;" \n
+ " if (_currDist < _lowDist) then {" \n
+ " _nrstTrgt = _x;" \n
+ " _lowDist = _currDist;" \n
+ " };" \n
+ "};" \n
+ "}forEach _nrTrgts;" \n
+ "" \n
+ "if (!isNull _nrstTrgt) then {" \n
+ "_trgt = _nrstTrgt;" \n
+ "};" \n
+ "_sanityCheck = 90;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class check_threat
+ {
+ priority = 80.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 80;"/*%FSM*/;
+ action=/*%FSM*/"_avDist = 0;" \n
+ "_tDist = 0;" \n
+ "_wepCount = 0;" \n
+ "_addThreat = 0;" \n
+ "" \n
+ "_nrTrgtCount = (count _nrTrgts);" \n
+ "if (_nrTrgtCount>0) then {" \n
+ "{" \n
+ " if ((typeof _x) in _trgtArr) then {" \n
+ "" \n
+ " if!((currentWeapon _x) == """") then {" \n
+ " _tDist = _tDist + (_x distance _sapper);" \n
+ "" \n
+ " if!(lineIntersects [aimPos _sapper, eyePos _x, _sapper, _x]) then {" \n
+ " _wepCount = _wepCount + 1;" \n
+ " };" \n
+ "" \n
+ " };" \n
+ "" \n
+ " };" \n
+ "}forEach _nrTrgts;" \n
+ "" \n
+ "_avDist = _tDist / _nrTrgtCount;" \n
+ "_addThreat = _wepCount;" \n
+ "" \n
+ "" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_sanityCheck = 80;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class check_target
+ {
+ priority = 60.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 60;" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/"_canSee = (!lineIntersects [aimPos _sapper, eyePos _trgt, _sapper, _trgt]);" \n
+ "_trgtDist = _sapper distance _trgt;" \n
+ "" \n
+ "_sanityCheck = 60;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class feeling
+ {
+ priority = 50.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 50;" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "if (_sFiredNear select 1 >0 && _sFiredNear select 1 < 50) then {" \n
+ "_sAnger = _sAnger + 6;" \n
+ "_sFear = _sFear + 4;" \n
+ "if (isPlayer (_sHit select 0)) then {" \n
+ "_trgt = _sHit select 0;" \n
+ "};" \n
+ "};" \n
+ "" \n
+ "if (_sHit select 1>0) then {" \n
+ "_sAnger = _sAnger + 12;" \n
+ "_sFear = _sFear + 8;" \n
+ "if (isPlayer (_sHit select 0)) then {" \n
+ "_trgt = _sHit select 0;" \n
+ "};" \n
+ "};" \n
+ "" \n
+ "//Can see target grrr" \n
+ "if (_canSee) then {" \n
+ "_sAnger = _sAnger + 2;" \n
+ "};" \n
+ "" \n
+ "//can see armed targets" \n
+ "if (_addThreat > 0) then {" \n
+ "_sFear = _sFear + _addThreat;" \n
+ "};" \n
+ "" \n
+ "//calm down calm down" \n
+ "if (diag_tickTime > _f + 60) then {" \n
+ "_sAnger = _sAnger - _sHardness;" \n
+ "_sFear = _sFear - _sHardness;" \n
+ "_f = diag_tickTime;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_sanityCheck = 50;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class stuck
+ {
+ priority = 30.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 30;" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/"if (_lastPos isEqualTo (getPos _sapper)) then {" \n
+ "" \n
+ "if (!(_moveTo isEqualTo [0,0,0])) then {" \n
+ "_sapper moveTo _moveTo;" \n
+ "};" \n
+ "" \n
+ "_stuckCount = _stuckCount + 1;" \n
+ "}else{" \n
+ "" \n
+ "_lastPos = getPos _sapper;" \n
+ "" \n
+ "};" \n
+ "_sanityCheck = 30;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class final_checks
+ {
+ priority = 10.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 10;"/*%FSM*/;
+ action=/*%FSM*/"_sFiredNear = [objNull, 0];" \n
+ "_sHit = [objNull, 0];" \n
+ "" \n
+ "_sAnger =_sAnger min 100 max 0;" \n
+ "_sFear =_sFear min 100 max 0;" \n
+ "" \n
+ "//Interrupt cuurent action" \n
+ "//if (_sAnger > 80) then {" \n
+ "//_actionDone = true;" \n
+ "//_cirteria = ""(true)"";" \n
+ "//};" \n
+ "" \n
+ "" \n
+ "//Blow up if stuck" \n
+ "if (_stuckCount > 12 && _sWait < 1) then {" \n
+ "_callBoom = true;" \n
+ "call _doInterrupt;" \n
+ "//Call another sapper in here ?" \n
+ "};" \n
+ "" \n
+ "//Charge if player suddenly in view and anger at correct level" \n
+ "if (_lastAction!=""charge"" && _trgtDist > _detonateDist && _canSee && _sAnger > _chargeTrig) then {" \n
+ "call _randomGroan;" \n
+ "_callCharge = true;" \n
+ "call _doInterrupt;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "//Detonate near very close player" \n
+ "if (_trgtDist < _detonateDist && _canSee) then {" \n
+ "_callBoom = true;" \n
+ "call _doInterrupt;" \n
+ "};" \n
+ "" \n
+ "//Interrupt and hide if scared and player suddenly in view" \n
+ "if (_lastAction!=""hide"" && _trgtDist > _detonateDist && _canSee && _sFear > _sHideTrig) then {" \n
+ "call _randomGroan;" \n
+ "_callHide = true;" \n
+ "call _doInterrupt;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "//Change pathfinding" \n
+ "if (_trgtDist>25) then {" \n
+ "_sapper setBehaviour ""CARELESS"";" \n
+ "}else{" \n
+ "_sapper setBehaviour ""STEALTH"";" \n
+ "};" \n
+ "" \n
+ "//Change anger at distance" \n
+ "//if (_trgtDist>48) then {" \n
+ "//_sAnger = _sAnger + 1;" \n
+ "//};" \n
+ "" \n
+ "//Hiding makes him angry" \n
+ "if (_lastAction == ""hide"") then {" \n
+ "_sAnger = _sAnger + 2;" \n
+ "};" \n
+ "" \n
+ "//Log last seen position for stalking" \n
+ "if (_canSee) then {" \n
+ "_spottedPos = getPos _trgt;" \n
+ "};" \n
+ "" \n
+ "//Set stalking distance based on fear." \n
+ "if (_sFear > 48) then {" \n
+ "_maxStalkDist = 68;" \n
+ "}else{" \n
+ "_maxStalkDist = 42;" \n
+ "};" \n
+ "_sanityCheck = 0;" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class return
+ {
+ name = "return";
+ init = /*%FSM*/"" \n
+ "_u = diag_tickTime;" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class to_action
+ {
+ priority = 10.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_checkEntry == ""action"");"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = """";" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class to_instinct
+ {
+ priority = 5.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_checkEntry == ""instinct"");"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = """";" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class reset
+ {
+ name = "reset";
+ init = /*%FSM*/"_t = diag_tickTime;" \n
+ "" \n
+ "//Check for not found safe Pos" \n
+ "" \n
+ "if (_sWait > 100) then {" \n
+ "_sWait = 12;" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/"if (!isNull _sapper) then {" \n
+ "_sapper removeAllEventHandlers ""Hit"";" \n
+ "_sapper removeAllEventHandlers ""FiredNear"";" \n
+ "" \n
+ "if!(_traderDispose) then {" \n
+ "deleteVehicle _sapper;" \n
+ "};" \n
+ "};" \n
+ "if (!isNull _sBomb) then {" \n
+ "deleteVehicle _sBomb;" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class handle_dispose
+ {
+ name = "handle_dispose";
+ init = /*%FSM*/"_t = diag_tickTime;" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class not_shot
+ {
+ priority = 10.000000;
+ to="finished_boom";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"isNull _sBomb;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class shot
+ {
+ priority = 5.000000;
+ to="smoke";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!isNull _sBomb;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_boom
+ {
+ name = "do_boom";
+ init = /*%FSM*/"EPOCH_SapperObjs_PVS = [_sBomb, player, Epoch_personalToken,_sapper,_sapper];" \n
+ "publicVariableServer ""EPOCH_SapperObjs_PVS"";" \n
+ "" \n
+ "_sBomb = objNull;" \n
+ "" \n
+ "deleteVehicle _sapper;" \n
+ "" \n
+ "_doneBoom = true;" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="finished_boom";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_groan
+ {
+ name = "do_groan";
+ init = /*%FSM*/"" \n
+ "" \n
+ "call _randomGroan;" \n
+ "" \n
+ "_actionDone = true;" \n
+ "_criteria = ""(true)"";" \n
+ "_sWait = 1;" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_stalk
+ {
+ name = "do_stalk";
+ init = /*%FSM*/"" \n
+ "_circleDone = false;" \n
+ "_sWait = 0;" \n
+ "" \n
+ "if (!_stalking) then {" \n
+ "" \n
+ "if (_spottedPos select 0 > 0) then {" \n
+ "_moveTo = _spottedPos;" \n
+ "_spottedPos=[0,0,0];" \n
+ "}else{" \n
+ "_moveTo = [_maxStalkDist,22,120,_trgt] call EPOCH_fnc_findRandomPosBehind;" \n
+ "};" \n
+ "" \n
+ "_sapper forceSpeed 4;" \n
+ "_sapper moveTo _moveTo;" \n
+ "_stalking = true;" \n
+ "_c = diag_tickTime;" \n
+ "" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_sDist = _sapper distance _moveTo;" \n
+ "if (_sWait < 1) then {" \n
+ "_sWait = _sDist;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class circled
+ {
+ priority = 10.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"moveToCompleted _sapper || diag_tickTime > _c + _sWait;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_stalking = false;" \n
+ "_actionDone = true;" \n
+ "_sWait = 0;" \n
+ "_criteria = ""(true)"";" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class stalking
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sDist > 6;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_loiter_big
+ {
+ name = "do_loiter_big";
+ init = /*%FSM*/"_sapperPos = getPos _sapper;" \n
+ "_moveTo = [_sapperPos,10,28,5,0,5,0] call BIS_fnc_findSafePos;" \n
+ "_sapper moveTo _moveTo;" \n
+ "_sapper forceSpeed 2;" \n
+ "" \n
+ "" \n
+ "_actionDone = true;" \n
+ "_sWait = (_sapper distance _moveTo) max 1;" \n
+ "_criteria = ""(moveToCompleted _sapper)"";" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_loiter_small
+ {
+ name = "do_loiter_small";
+ init = /*%FSM*/"_dirTo = (random 360) min 10;" \n
+ "_moveTo = [_sapper, 12, _dirTo] call BIS_fnc_relPos;" \n
+ "_sapper forceSpeed 2;" \n
+ "_sapper moveTo _moveTo;" \n
+ "" \n
+ "" \n
+ "_actionDone = true;" \n
+ "_sWait = (_sapper distance _moveTo) max 1;" \n
+ "_criteria = ""(moveToCompleted _sapper)"";" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_charge
+ {
+ name = "do_charge";
+ init = /*%FSM*/"" \n
+ "//At a distance sapper will weave, when close aims staright for target" \n
+ "if (_trgtDist > _detonateDist * 2) then {" \n
+ "_moveTo = [_detonateDist * 2,_detonateDist,80,_trgt] call EPOCH_fnc_findRandomPosBehind;" \n
+ "}else{" \n
+ "_moveTo = getPosATL _trgt;" \n
+ "};" \n
+ "" \n
+ "_sapper forceSpeed 5;" \n
+ "_sapper moveTo _moveTo;" \n
+ "_attempts = _attempts +1;" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class charged
+ {
+ priority = 10.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_attempts > 17 || (_sapper distance _trgt) < (_detonateDist / 2) || (!_canSee && _sAnger < _chargeTrig && _attempts > 6);" \n
+ "//Experimental stop charging if can not see and anger dropped.."/*%FSM*/;
+ action=/*%FSM*/"_charging = false;" \n
+ "_actionDone = true;" \n
+ "_sWait = 0;" \n
+ "_criteria = ""(true)"";" \n
+ "" \n
+ "" \n
+ "" \n
+ "if (diag_tickTime - _lastAlert > 60) then {" \n
+ " _lastAlert = diag_tickTime;" \n
+ " _sound = ""sapper_groan2"";" \n
+ " _sapper say3D _sound;" \n
+ " EPOCH_say3D_PVS = [player, _sapper,(EPOCH_sounds find _sound), Epoch_personalToken];" \n
+ " publicVariableServer ""EPOCH_say3D_PVS"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class charging
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(moveToCompleted _sapper && _attempts < 18) || diag_tickTime > _c + ((_trgtDist / 2) max 2) ;"/*%FSM*/;
+ action=/*%FSM*/"_charging = true;" \n
+ "_lastPos = getPosATL _sapper;" \n
+ "_c = diag_tickTime;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class find_spot
+ {
+ name = "find_spot";
+ init = /*%FSM*/"try{" \n
+ "_h = diag_tickTime;" \n
+ "_moveTo = ATLToASL ([(getPosATL _sapper), (floor (random 30) + 12), floor random 360] call BIS_fnc_relPos);" \n
+ "_posSafe = true;" \n
+ "_nrTrgts = _sapper nearEntities [_trgtArr, _sRange];" \n
+ "" \n
+ "{" \n
+ " if (!lineIntersects [aimPos _x, _moveTo, _x, _sapper]) then {_posSafe = false;};" \n
+ "" \n
+ "} forEach _nrTrgts;" \n
+ "" \n
+ "_moveTo = ASLToATL _moveTo;" \n
+ "" \n
+ "}catch{" \n
+ "_posSafe = true;" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class not_safe
+ {
+ priority = 10.000000;
+ to="find_spot";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_posSafe;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class is_safe
+ {
+ priority = 5.000000;
+ to="do_hide";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_posSafe;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_hide
+ {
+ name = "do_hide";
+ init = /*%FSM*/"_sapper forceSpeed 5;" \n
+ "_sapper moveTo _moveTo;" \n
+ "_sWait = (_sapper distance _moveTo) max 1;" \n
+ "_actionDone = true;" \n
+ "_criteria = ""(moveToCompleted _sapper)"";" \n
+ "" \n
+ "if (_trgtDist<25) then {" \n
+ "_sapper setBehaviour ""CARELESS"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class smoke
+ {
+ name = "smoke";
+ init = /*%FSM*/"_sapperSmoke = ""SmokeShellCustom"" createVehicle [(getPosATL _sapper) select 0, (getPosATL _sapper) select 1, -0.2];" \n
+ "_sapperSmoke attachTo [_sapper,[0,0,-0.4]];"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="finished_boom";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class finished_boom
+ {
+ name = "finished_boom";
+ init = /*%FSM*/"(typeOf _sapper) call EPOCH_unitSpawnDecrease;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Wait_to_delete
+ {
+ priority = 10.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _t) > 480;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="sapper";
+ finalStates[] =
+ {
+ "end"
+ };
+};
+/*%FSM*/
diff --git a/Sources/epoch_code/System/Shark_Brain.fsm b/Sources/epoch_code/System/Shark_Brain.fsm
new file mode 100644
index 00000000..fdefa8b6
--- /dev/null
+++ b/Sources/epoch_code/System/Shark_Brain.fsm
@@ -0,0 +1,726 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"shark",0,250,-306.490601,-197.039688,-216.490692,-147.039795,0.000000,"shark"};
+item1[] = {"_",8,218,62.332706,-185.990021,114.284866,-157.584717,0.000000,""};
+item2[] = {"decision",2,250,165.295456,-196.723892,255.295410,-146.723892,0.000000,"decision"};
+item3[] = {"decision_made",4,218,45.967728,-38.050251,135.967682,11.949742,100.000000,"decision made"};
+item4[] = {"action",2,250,45.978439,130.034073,135.978394,180.034134,0.000000,"action"};
+item5[] = {"track",4,218,331.340027,-278.502258,421.340027,-228.502335,70.000000,"track"};
+item6[] = {"dispose",4,218,110.636703,-324.560150,200.636765,-274.560181,90.000000,"dispose"};
+item7[] = {"_",8,218,64.556534,392.347595,116.508629,420.752838,0.000000,""};
+item8[] = {"reset_vars",2,250,-57.248745,-196.860123,32.751255,-146.860138,0.000000,"reset vars"};
+item9[] = {"_",8,218,-150.031967,-184.788101,-98.079796,-156.382797,0.000000,""};
+item10[] = {"complete",4,218,-57.042290,-38.963421,32.957973,11.036604,100.000000,"complete"};
+item11[] = {"wander",4,218,266.070313,121.058060,356.070313,171.058060,50.000000,"wander"};
+item12[] = {"end",1,4346,411.966034,1.474794,501.966095,51.474747,0.000000,"end"};
+item13[] = {"dispose",4,218,231.223953,1.285551,321.223938,51.285561,40.000000,"dispose"};
+item14[] = {"change_depth",4,218,-142.086060,128.815338,-52.086075,178.815338,90.000000,"change depth"};
+item15[] = {"do_wander",2,250,406.553650,119.943130,496.553680,169.943130,0.000000,"do wander"};
+item16[] = {"move_in",4,218,198.982819,220.184677,288.982819,270.184692,70.000000,"move in"};
+item17[] = {"do_depth",2,250,-229.825836,21.577888,-139.825836,71.577896,0.000000,"do depth"};
+item18[] = {"say_hello",2,250,358.588074,300.680511,448.588074,350.680511,0.000000,"say hello"};
+item19[] = {"track",4,218,255.761963,177.402420,345.761963,227.402405,60.000000,"track"};
+item20[] = {"do_track",2,250,397.290466,211.894135,487.290497,261.894165,0.000000,"do track"};
+item21[] = {"no_decision",4,218,38.858673,-279.436768,128.858643,-229.436798,10.000000,"no decision"};
+item22[] = {"attack",4,218,128.071564,257.443115,218.071564,307.443115,80.000000,"attack"};
+item23[] = {"bite",2,250,300.995148,381.324310,390.995178,431.324310,0.000000,"bite"};
+item24[] = {"depth_done",4,218,-198.412857,-87.825989,-108.412857,-37.825996,0.000000,"depth done"};
+item25[] = {"move_in_wander",4,218,365.802948,-214.545197,455.802948,-164.545197,60.000000,"move in wander"};
+item26[] = {"attack",4,218,194.155518,-351.191406,284.155518,-301.191376,85.000000,"attack"};
+item27[] = {"do_depth",4,218,267.835510,-322.582855,357.835510,-272.582855,80.000000,"do depth"};
+item28[] = {"on_beach",4,218,-55.429527,242.552032,34.570473,292.552032,90.000000,"on beach"};
+item29[] = {"random_sea_pos",2,250,-190.830399,350.872742,-100.830383,400.872742,0.000000,"random sea pos"};
+link0[] = {0,9};
+link1[] = {1,2};
+link2[] = {2,3};
+link3[] = {2,5};
+link4[] = {2,6};
+link5[] = {2,21};
+link6[] = {2,25};
+link7[] = {2,26};
+link8[] = {2,27};
+link9[] = {3,4};
+link10[] = {4,10};
+link11[] = {4,11};
+link12[] = {4,13};
+link13[] = {4,14};
+link14[] = {4,16};
+link15[] = {4,19};
+link16[] = {4,22};
+link17[] = {4,28};
+link18[] = {5,2};
+link19[] = {6,2};
+link20[] = {7,4};
+link21[] = {8,1};
+link22[] = {9,8};
+link23[] = {10,8};
+link24[] = {11,15};
+link25[] = {13,12};
+link26[] = {14,17};
+link27[] = {15,7};
+link28[] = {16,18};
+link29[] = {17,24};
+link30[] = {18,7};
+link31[] = {19,20};
+link32[] = {20,7};
+link33[] = {21,2};
+link34[] = {22,23};
+link35[] = {23,7};
+link36[] = {24,8};
+link37[] = {25,2};
+link38[] = {26,2};
+link39[] = {27,2};
+link40[] = {28,29};
+link41[] = {29,7};
+globals[] = {0.000000,0,0,0,16777215,640,480,1,113,6316128,1,-323.378784,541.908020,588.921448,-376.164001,789,880,1};
+window[] = {2,-1,-1,-1,-1,551,1706,2731,26,3,807};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "sharky";
+ class States
+ {
+ /*%FSM*/
+ class shark
+ {
+ name = "shark";
+ init = /*%FSM*/"_shark = _this select 0;" \n
+ "_trgt = player;" \n
+ "" \n
+ "_shark disableAI ""FSM"";" \n
+ "_shark setSkill 0;" \n
+ "" \n
+ "_sharkNames=[""Jaws"",""Angel"",""Bull"",""Blue"",""Cookie"",""Coral"",""Dusky"",""White"",""Hammer"",""Mako"",""Smalltooth""];" \n
+ "_sharkName = _sharkNames select (floor(random count _sharkNames));" \n
+ "" \n
+ "_trgtArray = [""Epoch_Male_F"",""Epoch_Female_F""];" \n
+ "_vehArray = [""Car""];" \n
+ "_tRange = 20;" \n
+ "_sRange = 500;" \n
+ "_vRange = 50;" \n
+ "_maxTravelTime = 480;" \n
+ "_trgtZ = 0;" \n
+ "" \n
+ "_sharkPos=[0,0,0];" \n
+ "_trgtPos=[0,0,0];" \n
+ "_nrPlyrs = [];" \n
+ "_plyrDist = 0;" \n
+ "" \n
+ "_doDepth = false;" \n
+ "_doTrack = false;" \n
+ "_movIn = false;" \n
+ "_doAttack = false;" \n
+ "_doWander = false;" \n
+ "_inWater = true;" \n
+ "_doSurface = false;" \n
+ "_zPos = (getPos _shark) select 2;" \n
+ "_wanderDist = 0;" \n
+ "_onBeach = false;" \n
+ "" \n
+ "//Test" \n
+ "_nrSharks = [];" \n
+ "_disposeWait = 960;" \n
+ "" \n
+ "" \n
+ "//DEBUG" \n
+ "_doDebug = false;" \n
+ "//_count = 0;" \n
+ "_debugDo = ""INIT"";" \n
+ "//_mkrName = """";" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class decision
+ {
+ name = "decision";
+ init = /*%FSM*/"_sharkPos = getPos _shark;" \n
+ "_inWater = surfaceIsWater _sharkPos;" \n
+ "_nrPlyrs = _shark nearEntities [_trgtArray, _sRange];" \n
+ "_sharkPos = getPos _shark;" \n
+ "_dist = _trgt distance _shark;" \n
+ "_zPos = (getPos _shark) select 2;" \n
+ "_trgtZ = (getPos _trgt) select 2;" \n
+ "_t = diag_tickTime;" \n
+ "_plyrPos = getPos _trgt;" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "systemChat format [""D:%1"",diag_tickTime];" \n
+ "hint format [""Decision\nCriteria: %1\nTime:%2\nCount:%3\n%4\nWait:%5\nDistance:%6\nDepth Diff:%7\nPlayer Depth: %8"",(call compile _criteria), (diag_tickTime > (_t + _sWait)),_count,_debugDo,_sWait,_shark distance _trgt,abs (_trgtZ - _zPos), getPos player select 2];" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class decision_made
+ {
+ priority = 100.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_decisionMade;"/*%FSM*/;
+ action=/*%FSM*/"_t = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 90.000000;
+ to="decision";
+ precondition = /*%FSM*/"_nrSharks = _sharkPos nearEntities [""GreatWhite_F"", 500];"/*%FSM*/;
+ condition=/*%FSM*/"!(alive _shark) || (_trgt distance _shark > (_sRange * 2)) || (!_inWater) || (count _nrSharks) > 2;"/*%FSM*/;
+ action=/*%FSM*/"_doDispose = true;" \n
+ "_decisionMade = true;" \n
+ "" \n
+ "if (count _nrSharks > 2) then {" \n
+ "{" \n
+ "deleteVehicle _x;" \n
+ "}forEach _nrSharks;" \n
+ "};" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "axeDO = ""Dispose"";" \n
+ "};"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class attack
+ {
+ priority = 85.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(abs(_trgtZ - _zPos) < 2.5) && (_dist < 8) && (_trgt == vehicle _trgt);"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_rnd = floor(random 100);" \n
+ "if (_rnd < 45) then {" \n
+ "_doAttack = true;" \n
+ "}else{" \n
+ "_movIn = true;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_depth
+ {
+ priority = 80.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(abs(_trgtZ - _zPos) > 0.6) && (_dist > 26 && _dist < 36);"/*%FSM*/;
+ action=/*%FSM*/"_doDepth = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class track
+ {
+ priority = 70.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_dist > 24;"/*%FSM*/;
+ action=/*%FSM*/"_doTrack = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class move_in_wander
+ {
+ priority = 60.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_dist > 12;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_rnd = floor(random 100);" \n
+ "if (_rnd < 80) then {" \n
+ "_doWander = true;" \n
+ "}else{" \n
+ "_movIn = true;" \n
+ "};" \n
+ "" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class no_decision
+ {
+ priority = 10.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_decisionMade && (diag_tickTime - _t) > 6;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class action
+ {
+ name = "action";
+ init = /*%FSM*/"_t = diag_tickTime;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class complete
+ {
+ priority = 100.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/"_plyrDist = _shark distance _trgt;" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "" \n
+ "_dist = _trgt distance2D _sharkPos;" \n
+ "_zPos = (getPos _shark) select 2;" \n
+ "_trgtZ = (getPos _trgt) select 2;" \n
+ "hint format [""Decision\nCriteria: %1\nTime:%2\nCount:%3\n%4\nWait:%5\nDistance:%6\nDepth Diff:%7\nPlayer Depth: %8\nSHark Depth: %9"",(call compile _criteria), (diag_tickTime > (_t + _sWait)),_count,_debugDo,_sWait,_shark distance _trgt,abs (_trgtZ - _zPos), getPos player select 2, getpos _shark select 2];" \n
+ "};"/*%FSM*/;
+ condition=/*%FSM*/"_actionDone && (call compile _criteria || (diag_tickTime > (_t + _sWait)));"/*%FSM*/;
+ action=/*%FSM*/"if (!isNil ""_criteriaMetAction"") then {" \n
+ "call compile _criteriaMetAction;" \n
+ "};"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class on_beach
+ {
+ priority = 90.000000;
+ to="random_sea_pos";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_onBeach;"/*%FSM*/;
+ action=/*%FSM*/"_onBeach = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class change_depth
+ {
+ priority = 90.000000;
+ to="do_depth";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doDepth;"/*%FSM*/;
+ action=/*%FSM*/"_doDepth = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class attack
+ {
+ priority = 80.000000;
+ to="bite";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doAttack;"/*%FSM*/;
+ action=/*%FSM*/"_doAttack = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class move_in
+ {
+ priority = 70.000000;
+ to="say_hello";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_movIn;"/*%FSM*/;
+ action=/*%FSM*/"_movIn = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class track
+ {
+ priority = 60.000000;
+ to="do_track";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doTrack;"/*%FSM*/;
+ action=/*%FSM*/"_doTrack = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class wander
+ {
+ priority = 50.000000;
+ to="do_wander";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doWander;"/*%FSM*/;
+ action=/*%FSM*/"_doWander = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 40.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doDispose && (diag_tickTime - _t) > _disposeWait;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class reset_vars
+ {
+ name = "reset_vars";
+ init = /*%FSM*/"//Default Vars" \n
+ "" \n
+ "" \n
+ "_rnd = 0;" \n
+ "_actionDone = false;" \n
+ "_decisionMade = false;" \n
+ "_sWait = 0;" \n
+ "_doDispose = false;" \n
+ "_chooseTarget = false;" \n
+ "_criteria = Nil;" \n
+ "_criteriaMet = false;" \n
+ "_allowInterrupt = false;" \n
+ "_t = diag_tickTime;" \n
+ "_moveTo = [0,0,0];" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "_override = false;" \n
+ "" \n
+ "_criteria =""(false)"";" \n
+ "_criteriaMetAction = nil;" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/"_shark spawn {" \n
+ " uiSleep 60;" \n
+ " (typeOf _this) call EPOCH_unitSpawnDecrease;" \n
+ " deleteVehicle _this;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Dispose"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_wander
+ {
+ name = "do_wander";
+ init = /*%FSM*/"_shark forceSpeed 7;" \n
+ "_dirTo = (random 360);" \n
+ "_wanderDist = floor (random 12) + 24;" \n
+ "_moveTo = [_shark, _wanderDist, _dirTo] call BIS_fnc_relPos;" \n
+ "" \n
+ "if ( surfaceIsWater _moveTo) then {" \n
+ "_shark moveTo _moveTo;" \n
+ "_sWait = _shark distance _moveTo;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(_shark distance2D _moveTo < 2)"";" \n
+ "}else{" \n
+ "_onBeach = true;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Wander"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_depth
+ {
+ name = "do_depth";
+ init = /*%FSM*/"_depthRate = -0.01;" \n
+ "if (_trgtZ > _zPos) then {_depthRate = abs _depthRate};" \n
+ "" \n
+ "_shark forceSpeed 7;" \n
+ "_dirTo = (random 360);" \n
+ "_wanderDist = floor (random 10) + 12;" \n
+ "_moveTo = [_shark, _wanderDist, _dirTo] call BIS_fnc_relPos;" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Do Depth"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class depth_done
+ {
+ priority = 0.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/"_trgtZ = (getPos _trgt) select 2;" \n
+ "_zPos = (getPos _shark) select 2;" \n
+ "_zPos =_zPos + _depthRate;" \n
+ "depthPos = _sharkPos;" \n
+ "_shark forceSpeed 6;" \n
+ "_zPos = _zPos min -0.55;" \n
+ "depthPos set [2,_zPos];" \n
+ "_shark setPos depthPos;" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "hint format [""Depth\nCriteria: %1\nTime:%2\nCount:%3\n%4\nWait:%5\nDistance:%6\nDepth Diff:%7\nPlayer Depth: %8"",(call compile _criteria), (diag_tickTime > (_t + _sWait)),_count,_debugDo,_sWait,_shark distance _trgt,abs (_trgtZ - _zPos), getPos player select 2];" \n
+ "};" \n
+ ""/*%FSM*/;
+ condition=/*%FSM*/"(abs (_trgtZ - _zPos) < 2.5) || (!surfaceIsWater depthPos) || (_sharkPos select 2 > -0.50);"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class say_hello
+ {
+ name = "say_hello";
+ init = /*%FSM*/"_side = floor(random 180)-90;" \n
+ "if (_side < 0) then {_side = -90;}else{_side = 90;};" \n
+ "" \n
+ "_moveTo = [16,8,60,_trgt,_side] call EPOCH_fnc_findRandomPosBehind;" \n
+ "" \n
+ "_moveTo set [2,(getPos _trgt) select 2];" \n
+ "" \n
+ "" \n
+ "" \n
+ "if ( surfaceIsWater _moveTo) then {" \n
+ "_shark moveTo _moveTo;" \n
+ "_sWait = _shark distance _trgt;" \n
+ "_actionDone = true;" \n
+ "_movIn = false;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(_shark distance2D _moveTo < 2)"";" \n
+ "}else{" \n
+ "_onBeach = true;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Move In"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_track
+ {
+ name = "do_track";
+ init = /*%FSM*/"_moveTo = [24,4,142,_trgt] call EPOCH_fnc_findRandomPosBehind;" \n
+ "_shark forceSpeed 6;" \n
+ "_moveTo set [2,_zPos];" \n
+ "" \n
+ "" \n
+ "if ( surfaceIsWater _moveTo) then {" \n
+ "_shark moveTo _moveTo;" \n
+ "_sWait = _shark distance _moveTo;" \n
+ "_actionDone = true;" \n
+ "_doTrack = false;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(_shark distance2D _moveTo < 2)"";" \n
+ "}else{" \n
+ "_onBeach = true;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Track"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class bite
+ {
+ name = "bite";
+ init = /*%FSM*/"_dirTo = (random 360);" \n
+ "_wanderDist = floor (random 12) + 24;" \n
+ "_moveTo = [_shark, 6, _dirTo] call BIS_fnc_relPos;" \n
+ "" \n
+ "_shark forceSpeed 6;" \n
+ "_shark moveTo _moveTo;" \n
+ "" \n
+ "_dirTo = [_shark, getPos _trgt] call BIS_fnc_dirTo;" \n
+ "" \n
+ "_shark setDir _dirTo;" \n
+ "_shark playMove ""Sharks_Stop"";" \n
+ "" \n
+ "if (_trgt == player) then {" \n
+ " _shark call EPOCH_client_bitePlayer;" \n
+ "};" \n
+ "" \n
+ "_sWait = 12;" \n
+ "_criteria = ""(false)"";" \n
+ "" \n
+ "_actionDone = true;" \n
+ "_doAttack = false;" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Bite"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class random_sea_pos
+ {
+ name = "random_sea_pos";
+ init = /*%FSM*/"_shark forceSpeed 7;" \n
+ "_dirTo = (random 360);" \n
+ "_wanderDist = floor (random 20) + 24;" \n
+ "_moveTo = [_shark, _wanderDist, _dirTo] call BIS_fnc_relPos;" \n
+ "" \n
+ "if ( surfaceIsWater _moveTo) then {" \n
+ "" \n
+ "_criteriaMetAction=""" \n
+ "_sharkPos = getPos _shark;" \n
+ "_zPos = -0.55;" \n
+ "_sharkPos set [2,_zPos];" \n
+ "_shark setPos _sharkPos;" \n
+ """;" \n
+ "" \n
+ "_shark moveTo _moveTo;" \n
+ "_sWait = _shark distance _moveTo;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(_shark distance2D _moveTo < 2)"";" \n
+ "}else{" \n
+ "_sWait = 0;" \n
+ "_actionDone = true;" \n
+ "_criteria = ""(true)"";" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""On Beach"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="shark";
+ finalStates[] =
+ {
+ "end"
+ };
+};
+/*%FSM*/
\ No newline at end of file
diff --git a/Sources/epoch_code/System/Soldier_brain.fsm b/Sources/epoch_code/System/Soldier_brain.fsm
new file mode 100644
index 00000000..934f7d7f
--- /dev/null
+++ b/Sources/epoch_code/System/Soldier_brain.fsm
@@ -0,0 +1,285 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"init",0,250,373.797485,-215.710526,463.797485,-165.710526,0.000000,"init"};
+item1[] = {"true",8,218,373.218811,-125.753807,463.218842,-75.753784,0.000000,"true"};
+item2[] = {"Wait_Loop",2,250,373.733643,-26.156036,463.733490,23.843948,0.000000,"Wait Loop"};
+item3[] = {"No_Target",4,218,179.569595,272.342590,269.569641,322.342621,0.000000,"No Target"};
+item4[] = {"Targets__Found",4,218,520.058899,184.889679,610.058899,234.889709,0.000000,"Targets " \n "Found"};
+item5[] = {"Explore",2,250,237.354767,519.685730,327.354767,569.685547,0.000000,"Explore"};
+item6[] = {"Loot_for_Player",2,250,520.379883,269.237518,610.380066,319.237305,0.000000,"Loot for Player"};
+item7[] = {"__0s_Loop",4,218,373.372223,49.848572,463.372223,99.848618,0.000000,"60s Loop"};
+item8[] = {"",7,210,171.356689,647.892578,179.356689,655.892578,0.000000,""};
+item9[] = {"",7,210,171.356689,151.351974,179.356689,159.351974,0.000000,""};
+item10[] = {"",7,210,690.467346,151.351944,698.467346,159.351944,0.000000,""};
+item11[] = {"Look_for_Targets",2,250,373.243042,272.915710,463.242828,322.915741,0.000000,"Look for Targets"};
+item12[] = {"true",8,218,374.626923,627.539429,464.626923,677.539429,0.000000,"true"};
+item13[] = {"",7,210,691.777954,649.203125,699.777954,657.203125,0.000000,""};
+item14[] = {"Dead",4,218,373.941559,374.013275,463.942017,424.013550,0.000000,"Dead"};
+item15[] = {"Dead",1,4346,373.941711,523.814087,463.942291,573.814270,0.000000,"Dead"};
+item16[] = {"FIRE",2,250,581.023865,513.330078,671.023865,563.330078,0.000000,"FIRE"};
+item17[] = {"Spotted",4,218,580.989563,390.849304,670.989563,440.849030,0.000000,"Spotted"};
+item18[] = {"Cannot_See",4,218,482.113403,394.224609,572.113464,444.224609,0.000000,"Cannot See"};
+item19[] = {"SEARCH",2,250,480.993195,513.825806,570.993225,563.825806,0.000000,"SEARCH"};
+link0[] = {0,1};
+link1[] = {1,2};
+link2[] = {2,7};
+link3[] = {2,10};
+link4[] = {3,5};
+link5[] = {4,6};
+link6[] = {5,12};
+link7[] = {6,17};
+link8[] = {6,18};
+link9[] = {7,11};
+link10[] = {8,9};
+link11[] = {9,2};
+link12[] = {10,13};
+link13[] = {11,3};
+link14[] = {11,4};
+link15[] = {11,14};
+link16[] = {12,8};
+link17[] = {13,12};
+link18[] = {14,15};
+link19[] = {16,12};
+link20[] = {17,16};
+link21[] = {18,19};
+link22[] = {19,12};
+globals[] = {0.000000,0,0,0,0,640,480,1,45,6316128,1,-87.887314,875.501831,881.613037,-104.180443,860,880,1};
+window[] = {2,-1,-1,-1,-1,754,1706,2744,26,3,878};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "soldiers";
+ class States
+ {
+ /*%FSM*/
+ class init
+ {
+ name = "init";
+ init = /*%FSM*/"_soldierSmith = _this select 0;" \n
+ "" \n
+ "_soldierSmith disableAI ""FSM"";" \n
+ "_soldierSmith setBehaviour ""CARELESS"";" \n
+ "_soldierSmith setCombatMode ""RED"";" \n
+ "_soldierSmith setSkill 0;" \n
+ "" \n
+ "_lastRun = diag_tickTime;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Wait_Loop";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!(isNull _soldierSmith)"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Wait_Loop
+ {
+ name = "Wait_Loop";
+ init = /*%FSM*/"// check loop" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Wait_Loop";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class __0s_Loop
+ {
+ priority = 0.000000;
+ to="Look_for_Targets";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"((diag_tickTime - _lastRun) > 10)"/*%FSM*/;
+ action=/*%FSM*/"_lastRun = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Explore
+ {
+ name = "Explore";
+ init = /*%FSM*/"_currentPos = getPosATL _soldierSmith;" \n
+ "_newPos = [(_currentPos select 0)+((random 100)-50),(_currentPos select 1)+((random 100)-50),0];" \n
+ "_soldierSmith moveTo _currentPos;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Wait_Loop";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Loot_for_Player
+ {
+ name = "Loot_for_Player";
+ init = /*%FSM*/"_attackIndex = floor(random(_nearPlayersCount));" \n
+ "" \n
+ "_target = _nearPlayers select _attackIndex;" \n
+ "" \n
+ "_canSee = lineIntersects [eyePos _target, aimPos _soldierSmith, _target, _soldierSmith];"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Cannot_See
+ {
+ priority = 0.000000;
+ to="SEARCH";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_canSee"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Spotted
+ {
+ priority = 0.000000;
+ to="FIRE";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_canSee"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Look_for_Targets
+ {
+ name = "Look_for_Targets";
+ init = /*%FSM*/"// check schedule" \n
+ "_nearPlayers = _soldierSmith nearEntities [[""Epoch_Male_F"",""Epoch_Female_F""], 250];" \n
+ "_nearPlayersCount = count _nearPlayers;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Targets__Found
+ {
+ priority = 0.000000;
+ to="Loot_for_Player";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_nearPlayersCount > 0"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Dead
+ {
+ priority = 0.000000;
+ to="Dead";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!(alive _soldierSmith)"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class No_Target
+ {
+ priority = 0.000000;
+ to="Explore";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_nearPlayersCount == 0"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Dead
+ {
+ name = "Dead";
+ init = /*%FSM*/"diag_log format[""KILLED SOLDIER: %1"", _soldierSmith];" \n
+ "_soldierSmith spawn {" \n
+ " uiSleep 60;" \n
+ " deleteVehicle _this;" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class FIRE
+ {
+ name = "FIRE";
+ init = /*%FSM*/"" \n
+ "_soldierSmith fire (currentweapon _soldierSmith);" \n
+ "" \n
+ "_soldierSmith forceWeaponFire [(currentWeapon _soldierSmith), ""Single""];"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Wait_Loop";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class SEARCH
+ {
+ name = "SEARCH";
+ init = /*%FSM*/"_currentTargetPos = getPosATL _target;" \n
+ "_newTargetPos = [(_currentTargetPos select 0)+((random 10)-5),(_currentTargetPos select 1)+((random 10)-5),0];" \n
+ "_soldierSmith moveTo _newTargetPos;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Wait_Loop";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="init";
+ finalStates[] =
+ {
+ "Dead"
+ };
+};
+/*%FSM*/
\ No newline at end of file
diff --git a/Sources/epoch_code/System/Trader_Militia_Brain.fsm b/Sources/epoch_code/System/Trader_Militia_Brain.fsm
new file mode 100644
index 00000000..f25e023e
--- /dev/null
+++ b/Sources/epoch_code/System/Trader_Militia_Brain.fsm
@@ -0,0 +1,585 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"unit",0,4346,-306.490601,-197.039688,-216.490692,-147.039795,0.000000,"unit"};
+item1[] = {"_",8,218,62.332706,-185.990021,114.284866,-157.584717,0.000000,""};
+item2[] = {"decision",2,250,165.295456,-196.723892,255.295410,-146.723892,0.000000,"decision"};
+item3[] = {"decision_made",4,218,165.267090,-51.429611,255.267059,-1.429623,100.000000,"decision made"};
+item4[] = {"action",2,250,47.264793,131.320435,137.264771,181.320496,0.000000,"action"};
+item5[] = {"actioning",4,218,-162.750412,131.241440,-72.750221,181.241470,100.000000,"actioning"};
+item6[] = {"dispose",4,218,93.860703,-298.416321,183.860764,-248.416351,90.000000,"dispose"};
+item7[] = {"_",8,218,64.556534,392.347595,116.508629,420.752838,0.000000,""};
+item8[] = {"reset_vars",2,250,-57.248745,-196.860123,32.751255,-146.860138,0.000000,"reset vars"};
+item9[] = {"_",8,218,-150.031967,-184.788101,-98.079796,-156.382797,0.000000,""};
+item10[] = {"met",4,218,-162.962280,-131.504044,-72.962013,-81.504021,10.000000,"met"};
+item11[] = {"end",1,250,411.966034,1.474794,501.966095,51.474747,0.000000,"end"};
+item12[] = {"dispose",4,218,231.223953,1.285551,321.223938,51.285561,80.000000,"dispose"};
+item13[] = {"criteria",2,250,-163.749939,-26.246429,-73.749825,23.753551,0.000000,"criteria"};
+item14[] = {"killer",4,218,127.015411,237.161896,217.015411,287.161896,70.000000,"killer"};
+item15[] = {"target_player",2,250,413.247467,254.265167,503.247498,304.265198,0.000000,"target player"};
+item16[] = {"no_decisiion",4,218,43.658752,-253.423935,133.658752,-203.423874,10.000000,"no decisiion"};
+item17[] = {"shots_fired",4,218,147.160431,-334.624023,237.160416,-284.624023,80.000000,"shots fired"};
+item18[] = {"shots",4,218,182.845428,129.080032,272.845428,179.080032,60.000000,"shots"};
+item19[] = {"move_to_target",2,250,410.018951,130.038605,500.018982,180.038589,0.000000,"move to target"};
+item20[] = {"unit_killed",4,218,223.288681,-349.805725,313.288727,-299.805695,70.000000,"unit killed"};
+item21[] = {"wander",4,218,333.247833,-280.119446,423.247833,-230.119507,50.000000,"wander"};
+item22[] = {"wander",4,218,93.557777,292.853455,183.557755,342.853455,40.000000,"wander"};
+item23[] = {"have_a_walk",2,250,411.888062,317.006439,501.887848,367.006439,0.000000,"have a walk"};
+item24[] = {"investigate",4,218,287.399384,-317.514160,377.399384,-267.514221,60.000000,"investigate"};
+item25[] = {"investigate",4,218,155.482483,186.267166,245.482468,236.267166,50.000000,"investigate"};
+item26[] = {"do_investigate",2,250,411.768799,191.716263,501.768799,241.716248,0.000000,"do investigate"};
+item27[] = {"pause",4,218,46.354713,-25.566845,136.354721,24.433178,5.000000,"pause"};
+link0[] = {0,9};
+link1[] = {1,2};
+link2[] = {2,3};
+link3[] = {2,6};
+link4[] = {2,16};
+link5[] = {2,17};
+link6[] = {2,20};
+link7[] = {2,21};
+link8[] = {2,24};
+link9[] = {3,4};
+link10[] = {4,5};
+link11[] = {4,12};
+link12[] = {4,14};
+link13[] = {4,18};
+link14[] = {4,22};
+link15[] = {4,25};
+link16[] = {5,13};
+link17[] = {6,2};
+link18[] = {7,4};
+link19[] = {8,1};
+link20[] = {9,8};
+link21[] = {10,8};
+link22[] = {12,11};
+link23[] = {13,10};
+link24[] = {13,27};
+link25[] = {14,15};
+link26[] = {15,7};
+link27[] = {16,2};
+link28[] = {17,2};
+link29[] = {18,19};
+link30[] = {19,7};
+link31[] = {20,2};
+link32[] = {21,2};
+link33[] = {22,23};
+link34[] = {23,7};
+link35[] = {24,2};
+link36[] = {25,26};
+link37[] = {26,7};
+link38[] = {27,4};
+globals[] = {0.000000,0,0,0,16777215,640,480,1,107,6316128,1,-357.999512,565.546082,749.884644,-430.934387,700,895,1};
+window[] = {2,-1,-1,-1,-1,725,-1080,-56,200,3,718};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "trader militia";
+ class States
+ {
+ /*%FSM*/
+ class unit
+ {
+ name = "unit";
+ init = /*%FSM*/"_unit = _this select 0;" \n
+ "_trgt = player;" \n
+ "_unitGrp = group _unit;" \n
+ "" \n
+ "" \n
+ "_unit setBehaviour ""CARELESS"";" \n
+ "_unit setCombatMode ""WHITE"";" \n
+ "" \n
+ "_unitNames=[""Aaron"",""Kenneth"",""Paul"",""Darren"",""Damian"",""Niklas"",""Andrew"",""Nigel"",""Harry"",""Phil"",""Antony"",""Dave"",""Hammish"",""Dickie"",""Peter"",""Conor""];" \n
+ "_unitName = _unitNames select (floor(random count _unitNames));" \n
+ "" \n
+ "_trgtArray = [""Epoch_Male_F"",""Epoch_Female_F"",""Epoch_Female_Camo_F""];" \n
+ "_vehArray = [""Car""];" \n
+ "_tRange = 20;" \n
+ "_sRange = 10;" \n
+ "_vRange = 50;" \n
+ "_maxTravelTime = 8;" \n
+ "" \n
+ "_count = 0;" \n
+ "" \n
+ "_nrBodies = [];" \n
+ "" \n
+ "" \n
+ "//debug" \n
+ "_doDebug = false;" \n
+ "axeUnit = _unit;" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class decision
+ {
+ name = "decision";
+ init = /*%FSM*/"_unitPos = getPosATL _unit;" \n
+ "_daytime = daytime;" \n
+ "_nrPlyrs = _unit nearEntities [_trgtArray, 300];" \n
+ "_killer = _unitGrp getVariable [""killer"",objNull];" \n
+ "_investigate = _unitGrp getVariable [""investigate"",objNull];" \n
+ "_shotsFired = _unitGrp getVariable [""shotsFired"",[objNull,0]];" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "systemChat format [""D:%1"",diag_tickTime];" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class decision_made
+ {
+ priority = 100.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_decisionMade;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 90.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"count _nrPlyrs < 1 || !alive _unit;"/*%FSM*/;
+ action=/*%FSM*/"_doDispose = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class shots_fired
+ {
+ priority = 80.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_shotsFired select 1) > 0 && (isPlayer (_shotsFired select 0));"/*%FSM*/;
+ action=/*%FSM*/"_doShots = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class unit_killed
+ {
+ priority = 70.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(!isNull _killer);"/*%FSM*/;
+ action=/*%FSM*/"_doKiller = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class investigate
+ {
+ priority = 60.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!isNull _investigate;"/*%FSM*/;
+ action=/*%FSM*/"_doInvestigate = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class wander
+ {
+ priority = 50.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_decisionMade && diag_tickTime - _w > 60;"/*%FSM*/;
+ action=/*%FSM*/"_doWander = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class no_decisiion
+ {
+ priority = 10.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_decisionMade && diag_tickTime - _t > 3;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class action
+ {
+ name = "action";
+ init = /*%FSM*/"" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "systemChat format [""A:%1"",diag_tickTime];" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class actioning
+ {
+ priority = 100.000000;
+ to="criteria";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_actionDone;"/*%FSM*/;
+ action=/*%FSM*/"_unit setDamage ((damage _unit) - 0.1) max 0;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 80.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doDispose;"/*%FSM*/;
+ action=/*%FSM*/"axeDo = ""Dispose"";"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class killer
+ {
+ priority = 70.000000;
+ to="target_player";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doKiller;"/*%FSM*/;
+ action=/*%FSM*/"_doKiller = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class shots
+ {
+ priority = 60.000000;
+ to="move_to_target";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doShots;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class investigate
+ {
+ priority = 50.000000;
+ to="do_investigate";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doInvestigate;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class wander
+ {
+ priority = 40.000000;
+ to="have_a_walk";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doWander;"/*%FSM*/;
+ action=/*%FSM*/"_doWander = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class reset_vars
+ {
+ name = "reset_vars";
+ init = /*%FSM*/"//Default Vars" \n
+ "" \n
+ "" \n
+ "_rnd = 0;" \n
+ "_actionDone = false;" \n
+ "_decisionMade = false;" \n
+ "_sWait = 0;" \n
+ "_doDispose = false;" \n
+ "_chooseTarget = false;" \n
+ "_criteria = Nil;" \n
+ "_criteriaMet = false;" \n
+ "_allowInterrupt = false;" \n
+ "_w = diag_tickTime;" \n
+ "" \n
+ "" \n
+ "_unitPos=[0,0,0];" \n
+ "_nrPlyrs = [];" \n
+ "_seePlyr = false;" \n
+ "_override = false;" \n
+ "_trade = false;" \n
+ "_useVeh = false;" \n
+ "" \n
+ "_criteriaMetAction = nil;" \n
+ "" \n
+ "_shotsFired = [objNull,0];" \n
+ "" \n
+ "" \n
+ "_doShots = false;" \n
+ "_killer = objNull;" \n
+ "_doKiller = false;" \n
+ "_doWander = false;" \n
+ "_doInvestigate = false;" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="decision";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/"_unit spawn {" \n
+ " uiSleep 60;" \n
+ " deleteVehicle _this;" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class criteria
+ {
+ name = "criteria";
+ init = /*%FSM*/"_i = diag_tickTime;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class met
+ {
+ priority = 10.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(call compile _criteria) || (diag_tickTime > (_t + _sWait));"/*%FSM*/;
+ action=/*%FSM*/"if (!isNil ""_criteriaMetAction"") then {" \n
+ "call _criteriaMetAction;" \n
+ "};"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class pause
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"diag_tickTime - _i > 1;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class target_player
+ {
+ name = "target_player";
+ init = /*%FSM*/"_trgt = _killer;" \n
+ "" \n
+ "_trgtPos = getPos _trgt;" \n
+ "" \n
+ "//_moveTo =[_trgtPos, ((floor random 12) max 8), floor random 360] call BIS_fnc_relPos;" \n
+ "//_unit doMove _moveTo ;" \n
+ "" \n
+ "_unitGrp setBehaviour ""COMBAT"";" \n
+ "_unitGrp setCombatMode ""RED"";" \n
+ "_unit commandTarget _trgt;" \n
+ "_unit doTarget _trgt;" \n
+ "_unit doFire _trgt;" \n
+ "" \n
+ "" \n
+ "_sWait = 6;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(!alive _trgt)"";" \n
+ "" \n
+ "_criteriaMetAction = {" \n
+ "" \n
+ " if (!(alive _trgt)) then {" \n
+ " _unitGrp setVariable [""killer"",objNull];" \n
+ " _unit setBehaviour ""CARELESS"";" \n
+ " _unit setCombatMode ""WHITE"";" \n
+ " };" \n
+ "" \n
+ "axeDo = ""Killer Complete"";" \n
+ "" \n
+ "};" \n
+ "" \n
+ "axeDo = ""Killer"";"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class move_to_target
+ {
+ name = "move_to_target";
+ init = /*%FSM*/"" \n
+ "_trgt = _shotsFired select 0;" \n
+ "_trgtPos = getPosATL _trgt;" \n
+ "_moveTo =[_trgtPos, floor random 20 max 8, floor random 360] call BIS_fnc_relPos;" \n
+ "" \n
+ "_unit doMove _moveTo;" \n
+ "_unitGrp setVariable [""shotsFired"",[objNull,0]];" \n
+ "_unit doWatch _trgt;" \n
+ "_unitGrp setVariable [""investigate"",_trgt];" \n
+ "" \n
+ "_criteria = ""(_unit distance _moveTo < 2)"";" \n
+ "" \n
+ "_sWait = _maxTravelTime;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "axeDo = ""Shots Fired"";"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class have_a_walk
+ {
+ name = "have_a_walk";
+ init = /*%FSM*/"" \n
+ "" \n
+ "_moveTo =[getPos _trgt, (floor random 36) max 18, floor random 360] call BIS_fnc_relPos;" \n
+ "" \n
+ "_unit doMove _moveTo;" \n
+ "" \n
+ "_criteria = ""(_unit distance _moveTo < 6)"";" \n
+ "_sWait = _maxTravelTime;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "axeDo = ""Wander"";"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_investigate
+ {
+ name = "do_investigate";
+ init = /*%FSM*/"" \n
+ "_nrBodies = nearestObjects [getPos _investigate,_trgtArray , 25];" \n
+ "" \n
+ "if (count _nrBodies > 0) then {" \n
+ "" \n
+ "{" \n
+ "if (!alive _x) then {" \n
+ "_unitGrp setVariable [""killer"",_investigate];" \n
+ "};" \n
+ "}forEach _nrBodies;" \n
+ "" \n
+ "_unit doMove getPos (_nrBodies select (floor random (count _nrBodies)));" \n
+ "};" \n
+ "" \n
+ "_criteriaMetAction = {" \n
+ "_unitGrp setVariable [""investigate"",objNull]; //add to timer to stop bothering player ?" \n
+ "_doInvestigate = false;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "_criteria = ""(false)"";" \n
+ "_sWait = 6;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "axeDo = format[""Investigate: %1"",_investigate];"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="unit";
+ finalStates[] =
+ {
+ "end"
+ };
+};
+/*%FSM*/
diff --git a/Sources/epoch_code/System/Trader_Missions_Animal_Control.fsm b/Sources/epoch_code/System/Trader_Missions_Animal_Control.fsm
new file mode 100644
index 00000000..e1bbf93b
--- /dev/null
+++ b/Sources/epoch_code/System/Trader_Missions_Animal_Control.fsm
@@ -0,0 +1,1372 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"mission",0,4346,-292.494934,-346.793884,-202.494995,-296.794006,0.000000,"mission"};
+item1[] = {"_",8,218,62.332706,-185.990021,114.284866,-157.584717,0.000000,""};
+item2[] = {"instinct",2,250,191.105453,-225.114914,281.105408,-175.114914,0.000000,"instinct"};
+item3[] = {"action",2,250,164.446381,121.731827,254.446365,171.731903,0.000000,"action"};
+item4[] = {"dispose",4,218,20.438301,-279.382568,110.438431,-229.382599,90.000000,"dispose"};
+item5[] = {"_",8,218,184.126175,442.503937,236.078262,470.909149,0.000000,""};
+item6[] = {"reset_vars",2,250,-57.248745,-196.860123,32.751255,-146.860138,0.000000,"reset vars"};
+item7[] = {"_",8,218,-273.564545,-262.966431,-221.612381,-234.561172,0.000000,""};
+item8[] = {"complete",4,218,-56.810909,-93.101501,33.189354,-43.101486,100.000000,"complete"};
+item9[] = {"welcome",4,218,73.352470,-323.856232,163.352539,-273.856232,80.000000,"welcome"};
+item10[] = {"end",1,250,-370.691071,10.611027,-280.691071,60.611038,0.000000,"end"};
+item11[] = {"dispose",4,218,-102.640427,11.797817,-2.640434,61.797813,140.000000,"dispose"};
+item12[] = {"mission_event_1",4,218,402.723938,-312.757385,492.723938,-262.757324,60.000000,"mission event 1"};
+item13[] = {"no_decision",4,218,330.494629,-141.685272,420.494568,-91.685326,10.000000,"no decision"};
+item14[] = {"instinct_done",4,218,164.237518,-54.324181,254.237457,-4.324169,100.000000,"instinct done"};
+item15[] = {"completed",4,218,207.167007,-379.790894,297.167053,-329.790894,70.000000,"completed"};
+item16[] = {"load_mission",2,250,-292.180725,-196.146988,-202.180710,-146.146988,0.000000,"load mission"};
+item17[] = {"_",8,218,-162.998352,-185.990021,-111.046211,-157.584717,0.000000,""};
+item18[] = {"welcome",4,218,295.219086,199.253082,385.219025,249.253082,0.000000,"welcome"};
+item19[] = {"do_welcome",2,250,437.430695,199.688446,537.430664,249.688416,0.000000,"do welcome"};
+item20[] = {"interrupt",4,218,51.666336,-72.125519,141.666382,-22.125553,120.000000,"interrupt"};
+item21[] = {"mission_event_2",4,218,399.193695,-257.488159,489.193604,-207.488113,50.000000,"mission event 2"};
+item22[] = {"mission_event_3",4,218,399.829254,-201.420883,489.829010,-151.420898,40.000000,"mission event 3"};
+item23[] = {"mission_event_1",4,218,14.473431,177.857178,104.473343,227.857162,0.000000,"mission event 1"};
+item24[] = {"in_mission_1",2,250,-135.305969,264.247803,-45.305984,314.247803,0.000000,"in mission 1"};
+item25[] = {"mission_event_2",4,218,59.082150,218.902466,149.082092,268.902527,0.000000,"mission event 2"};
+item26[] = {"mission_event_3",4,218,104.461388,258.831085,194.461349,308.830994,0.000000,"mission event 3"};
+item27[] = {"in_mission_1_1",2,250,-134.509277,332.141968,-44.509247,382.141968,0.000000,"in mission 1"};
+item28[] = {"in_mission_1_2",2,250,-135.272766,397.347107,-45.272724,447.347107,0.000000,"in mission 1"};
+item29[] = {"complete_1",4,218,-11.056295,127.654327,78.943771,177.654495,0.000000,"complete"};
+item30[] = {"complete",2,250,-137.496185,183.663330,-47.496330,233.663330,0.000000,"complete"};
+item31[] = {"mission_check",4,218,338.559967,54.346359,428.559814,104.346336,110.000000,"mission check"};
+item32[] = {"checking_status",2,250,675.000000,-50.000000,775.000000,0.000000,0.000000,"checking status"};
+item33[] = {"items_player",4,218,525.000000,-125.000000,625.000000,-75.000000,90.000000,"items player"};
+item34[] = {"checked",4,218,625.000000,25.000000,725.000000,75.000000,10.000000,"checked"};
+item35[] = {"done",4,218,450.000000,-50.000000,550.000000,0.000000,100.000000,"done"};
+item36[] = {"player_status",4,218,600.000000,-175.000000,700.000000,-125.000000,80.000000,"player status"};
+item37[] = {"accepted",4,218,136.335068,-357.773987,226.335129,-307.773987,75.000000,"accepted"};
+item38[] = {"return",2,250,324.819244,-48.579079,414.819275,1.420918,0.000000,"return"};
+item39[] = {"to_action",4,218,241.671967,3.543102,331.671967,53.543098,10.000000,"to action"};
+item40[] = {"to_instinct",4,218,251.599976,-118.075302,341.599976,-68.075302,5.000000,"to instinct"};
+item41[] = {"accept",4,218,243.062256,251.914124,333.062256,301.914124,0.000000,"accept"};
+item42[] = {"accept_mission",2,250,362.788879,361.609375,452.789001,411.609375,0.000000,"accept mission"};
+item43[] = {"give_mission",4,218,725.000000,-175.000000,825.000000,-125.000000,70.000000,"give mission"};
+item44[] = {"abandoned",4,218,272.889526,-355.696106,362.889526,-305.696106,65.000000,"abandoned"};
+item45[] = {"abandoned",4,218,-100.000000,-50.000000,0.000000,0.000000,160.000000,"abandoned"};
+item46[] = {"abandoned",2,250,-251.320206,-49.915840,-151.320221,0.084147,0.000000,"abandoned"};
+item47[] = {"wait",4,218,-250.899475,-138.286346,-150.899460,-88.286331,5.000000,"wait"};
+item48[] = {"call_revenge",2,250,-370.813080,-137.218597,-280.813080,-87.218597,0.000000,"call revenge"};
+item49[] = {"continue",4,218,441.737213,121.630814,531.737183,171.630829,10.000000,"continue"};
+item50[] = {"clean_up",4,218,800.000000,-150.000000,900.000000,-100.000000,60.000000,"clean up"};
+item51[] = {"mission_status",4,218,750.000000,25.000000,850.000000,75.000000,20.000000,"mission status"};
+item52[] = {"near_characters",4,218,850.000000,-25.000000,950.000000,25.000000,30.000000,"near characters"};
+item53[] = {"mission_vars",4,218,850.000000,-100.000000,950.000000,-50.000000,50.000000,"mission vars"};
+item54[] = {"alert",4,218,-50.000000,75.000000,50.000000,125.000000,150.000000,"alert"};
+item55[] = {"do_alert",2,250,-147.601227,110.981712,-47.601219,160.981720,0.000000,"do alert"};
+item56[] = {"_",8,218,-351.789581,-56.608616,-299.837433,-28.203323,0.000000,""};
+item57[] = {"____FAKE____",9,2280,0.000000,0.000000,0.000000,0.000000,0.000000,"____FAKE____"};
+link0[] = {0,7};
+link1[] = {1,2};
+link2[] = {2,4};
+link3[] = {2,9};
+link4[] = {2,12};
+link5[] = {2,13};
+link6[] = {2,14};
+link7[] = {2,15};
+link8[] = {2,21};
+link9[] = {2,22};
+link10[] = {2,37};
+link11[] = {2,44};
+link12[] = {3,8};
+link13[] = {3,11};
+link14[] = {3,18};
+link15[] = {3,20};
+link16[] = {3,23};
+link17[] = {3,25};
+link18[] = {3,26};
+link19[] = {3,29};
+link20[] = {3,31};
+link21[] = {3,41};
+link22[] = {3,45};
+link23[] = {3,54};
+link24[] = {4,2};
+link25[] = {5,3};
+link26[] = {6,1};
+link27[] = {7,16};
+link28[] = {8,6};
+link29[] = {9,2};
+link30[] = {11,10};
+link31[] = {12,2};
+link32[] = {13,32};
+link33[] = {14,3};
+link34[] = {15,2};
+link35[] = {16,17};
+link36[] = {17,6};
+link37[] = {18,19};
+link38[] = {19,49};
+link39[] = {20,2};
+link40[] = {21,2};
+link41[] = {22,2};
+link42[] = {23,24};
+link43[] = {24,5};
+link44[] = {25,27};
+link45[] = {26,28};
+link46[] = {27,5};
+link47[] = {28,5};
+link48[] = {29,30};
+link49[] = {30,5};
+link50[] = {31,32};
+link51[] = {32,33};
+link52[] = {32,34};
+link53[] = {32,35};
+link54[] = {32,36};
+link55[] = {32,50};
+link56[] = {32,51};
+link57[] = {32,52};
+link58[] = {32,53};
+link59[] = {33,32};
+link60[] = {34,32};
+link61[] = {35,38};
+link62[] = {36,32};
+link63[] = {37,2};
+link64[] = {38,39};
+link65[] = {38,40};
+link66[] = {39,3};
+link67[] = {40,2};
+link68[] = {41,42};
+link69[] = {42,5};
+link70[] = {43,32};
+link71[] = {44,2};
+link72[] = {45,46};
+link73[] = {46,47};
+link74[] = {47,48};
+link75[] = {48,56};
+link76[] = {49,3};
+link77[] = {50,32};
+link78[] = {51,32};
+link79[] = {52,32};
+link80[] = {53,32};
+link81[] = {54,55};
+link82[] = {55,5};
+link83[] = {56,10};
+link84[] = {57,43};
+globals[] = {0.000000,0,0,0,16777215,640,480,1,214,6316128,1,-324.270538,917.894897,460.891968,-494.921631,759,731,1};
+window[] = {2,-1,-1,-1,-1,530,100,900,100,3,777};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "trader animal control";
+ class States
+ {
+ /*%FSM*/
+ class mission
+ {
+ name = "mission";
+ init = /*%FSM*/"_plyr = _this select 0;" \n
+ "_trader = _this select 1;" \n
+ "_missionName = ""MissionSapper"";" \n
+ "_handle = ""NOT SET"";" \n
+ "_plyrArray = [""Epoch_Male_F"",""Epoch_Female_F""];" \n
+ "_vehArray = [""Car""];" \n
+ "" \n
+ "_t = diag_tickTime;" \n
+ "_u = _t;" \n
+ "_m1 = _t;" \n
+ "_m2 = _m1;" \n
+ "_m3 = _m2;" \n
+ "_dropped = _m3;" \n
+ "" \n
+ "_missionStart = _m3;" \n
+ "_nrPlyrs = [];" \n
+ "_startCopter = objNull;" \n
+ "_nrEnts = [];" \n
+ "_plyrPos = [0,0,0];" \n
+ "_newTrader = objNull;" \n
+ "_rnd = random 100;" \n
+ "" \n
+ "" \n
+ "//Mission Vars" \n
+ "_callWelcome = true;//call mission on startup from menu" \n
+ "_doWelcome = false;" \n
+ "_doDispose = false;" \n
+ "_doComplete = false;" \n
+ "_doMission1 = false;" \n
+ "_doMission2 = false;" \n
+ "_doMission3 = false;" \n
+ "_doAccepted = false;" \n
+ "_doAbandon = false;" \n
+ "_nrEnts = [];" \n
+ "_wDiag = """";" \n
+ "_rndWChoice = 0;" \n
+ "_welcomeDone = false;" \n
+ "_packageFound = false;" \n
+ "" \n
+ "_checkEntry = """";" \n
+ "_doDispose = false;" \n
+ "_callComplete = false;" \n
+ "_callAbandoned = false;" \n
+ "_callDispose = false;" \n
+ "" \n
+ "_doAccept = false;" \n
+ "_acceptDone = false;" \n
+ "_missionItem = """";" \n
+ "_inMission = false;" \n
+ "" \n
+ "_startHolder = objNull;" \n
+ "_cargo = objNull;" \n
+ "_cargoCheck = [];" \n
+ "" \n
+ "_doAlert = false;" \n
+ "_alertMessage = [""""];" \n
+ "_alert = _m3 - 60;" \n
+ "_dropped = _alert - 60;" \n
+ "_lostCount = 0;" \n
+ "" \n
+ "_sapper = objNull;" \n
+ "" \n
+ "" \n
+ "//Testing - Bounty System" \n
+ "_seenPlayers = _trader getVariable [""seenPlayers"",[]];" \n
+ "_seenPlayers pushBack name _plyr;" \n
+ "_trader setVariable [""seenPlayers"",_seenPlayers];" \n
+ "" \n
+ "//DEBUG" \n
+ "_doDebug = false;" \n
+ "_debugDo = format[""INIT | %1"", _plyr];" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="load_mission";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class instinct
+ {
+ name = "instinct";
+ init = /*%FSM*/"_t = diag_tickTime;" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "systemChat format [""I:%1"",diag_tickTime];" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class instinct_done
+ {
+ priority = 100.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_decisionMade;"/*%FSM*/;
+ action=/*%FSM*/"_u = _t;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 90.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!(alive _plyr) || _doDispose || _callDispose;"/*%FSM*/;
+ action=/*%FSM*/"_doDispose = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class welcome
+ {
+ priority = 80.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_callWelcome && !_welcomeDone;"/*%FSM*/;
+ action=/*%FSM*/"_doWelcome = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class accepted
+ {
+ priority = 75.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_inMission || _skipWelcomeCheck) && !_acceptDone;"/*%FSM*/;
+ action=/*%FSM*/"_skipWelcomeCheck = false;" \n
+ "_doAccept = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class completed
+ {
+ priority = 70.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_callComplete && _inMission;"/*%FSM*/;
+ action=/*%FSM*/"_doComplete = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class abandoned
+ {
+ priority = 65.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_callAbandoned && _inMission;" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/"_callAbandoned = false;" \n
+ "_doAbandon = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_event_1
+ {
+ priority = 60.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(call compile _imCondition1) && diag_tickTime - _m1 > _freq1 && _inMission;"/*%FSM*/;
+ action=/*%FSM*/"if (_freq1 < 1) then {" \n
+ "_freq1 = getNumber ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission1"" >> ""frequency"");" \n
+ "};" \n
+ "_doMission1 = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_event_2
+ {
+ priority = 50.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(call compile _imCondition2) && diag_tickTime -_m2 > _freq2 && _inMission;"/*%FSM*/;
+ action=/*%FSM*/"if (_freq2 < 1) then {" \n
+ "_freq2 = getNumber ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission2"" >> ""frequency"");" \n
+ "};" \n
+ "_doMission2 = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_event_3
+ {
+ priority = 40.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(call compile _imCondition3) && diag_tickTime - _m3 > _freq3 && _inMission;"/*%FSM*/;
+ action=/*%FSM*/"if (_freq3 < 1) then {" \n
+ "_freq3 = getNumber ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission3"" >> ""frequency"");" \n
+ "};" \n
+ "_doMission3 = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class no_decision
+ {
+ priority = 10.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_decisionMade && diag_tickTime - _t > 3;"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = ""instinct"";" \n
+ "_sanityCheck = 100;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class action
+ {
+ name = "action";
+ init = /*%FSM*/"" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "systemChat format [""A:%1"",diag_tickTime];" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class abandoned
+ {
+ priority = 160.000000;
+ to="abandoned";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doAbandon;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""abandoned"" >> ""dialogue"");" \n
+ "_wInDiag2 = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""abandoned"" >> ""dialogue2"");" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ "" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ " _wDiag2 = _wInDiag2 select _rndWChoice;" \n
+ "" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""abandoned"" >> ""action"");" \n
+ "_aWait = getNumber ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""abandoned"" >> ""delay"");" \n
+ "_doAbandon = false;" \n
+ "_t = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class alert
+ {
+ priority = 150.000000;
+ to="do_alert";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doAlert && diag_tickTime - _alert > 30;"/*%FSM*/;
+ action=/*%FSM*/"_doAlert = false"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 140.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doDispose && diag_tickTime - _t > 60 ;"/*%FSM*/;
+ action=/*%FSM*/"_plyr setVariable [""inMission"",[""end"",_missionName],false];"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class interrupt
+ {
+ priority = 120.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_allowInterrupt && (call compile _interruptReason);"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_check
+ {
+ priority = 110.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_actionDone && diag_tickTime > _u + 4;"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = ""action"";" \n
+ "_sanityCheck = 100;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class complete
+ {
+ priority = 100.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_actionDone && ((call compile _criteria) || (diag_tickTime > (_t + _sWait)));"/*%FSM*/;
+ action=/*%FSM*/"if (!isNil ""_criteriaMetAction"") then {" \n
+ "call compile _criteriaMetAction;" \n
+ "};"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class complete_1
+ {
+ priority = 0.000000;
+ to="complete";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doComplete;"/*%FSM*/;
+ action=/*%FSM*/"_doComplete = false;" \n
+ "" \n
+ "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""dialogue"");" \n
+ "_wInDiag2 = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""dialogue2"");" \n
+ "_wInCrypto = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""crypto"");" \n
+ "_wInWeap = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""weapon"");" \n
+ "_wInAmmo = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""magazine"");" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""action"");" \n
+ "" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ " _wDiag2 = _wInDiag select _rndWChoice;" \n
+ " _wCrypto = _wInCrypto select _rndWChoice;" \n
+ " _wWeapon = _wInWeap select _rndWChoice;" \n
+ " _wAmmo = _wInAmmo select _rndWChoice;" \n
+ " _wItem = _wInItem select _rndWChoice;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_event_1
+ {
+ priority = 0.000000;
+ to="in_mission_1";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doMission1;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission1"" >> ""dialogue"");" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ "" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission1"" >> ""action"");" \n
+ "_doMission1 = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class accept
+ {
+ priority = 0.000000;
+ to="accept_mission";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doAccept;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "" \n
+ "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""dialogue"");" \n
+ "_wInDiag2 = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""dialogue2"");" \n
+ "_wInCrypto = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""crypto"");" \n
+ "_wInWeap = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""weapon"");" \n
+ "_wInAmmo = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""magazine"");" \n
+ "_wInItem = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""item"");" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""action"");" \n
+ "" \n
+ "//_rndWChoice = floor (random (count _wInDiag));" \n
+ "" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ " _wDiag2 = _wInDiag2 select _rndWChoice;" \n
+ " _wCrypto = _wInCrypto select _rndWChoice;" \n
+ "" \n
+ " _wWeapon = _wInWeap select _rndWChoice;" \n
+ " _wAmmo = _wInAmmo select _rndWChoice;" \n
+ " _wItem = _wInItem select _rndWChoice;" \n
+ "" \n
+ "" \n
+ "_doAccept = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class welcome
+ {
+ priority = 0.000000;
+ to="do_welcome";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doWelcome;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""welcome"" >> ""dialogue"");" \n
+ "_wInDiag2 = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""welcome"" >> ""dialogue2"");" \n
+ "_wInItem = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""welcome"" >> ""item"");" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""welcome"" >> ""action"");" \n
+ "" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ "" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ " _wDiag2 = _wInDiag2 select _rndWChoice;" \n
+ "if (count _wInItem > 1) then {" \n
+ " _wItem = _wInItem select _rndWChoice;" \n
+ "}else{" \n
+ " _wItem = _wInItem select 0;" \n
+ "};" \n
+ "" \n
+ "_doWelcome = false;" \n
+ "_packageFound = false;" \n
+ "_t = diag_tickTime;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_event_2
+ {
+ priority = 0.000000;
+ to="in_mission_1_1";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doMission2;"/*%FSM*/;
+ action=/*%FSM*/"_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission2"" >> ""dialogue"");" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission2"" >> ""action"");" \n
+ "" \n
+ "_doMission2 = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_event_3
+ {
+ priority = 0.000000;
+ to="in_mission_1_2";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doMission3;"/*%FSM*/;
+ action=/*%FSM*/"_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission3"" >> ""dialogue"");" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission3"" >> ""action"");" \n
+ "_doMission3 = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class reset_vars
+ {
+ name = "reset_vars";
+ init = /*%FSM*/"//Default Vars" \n
+ "_rnd = 0;" \n
+ "_actionDone = false;" \n
+ "_decisionMade = false;" \n
+ "_sWait = 0;" \n
+ "_doDispose = false;" \n
+ "_chooseTarget = false;" \n
+ "_criteria = Nil;" \n
+ "_criteriaMet = false;" \n
+ "_allowInterrupt = false;" \n
+ "_interruptReason = ""(false)"";" \n
+ "" \n
+ "" \n
+ "_moveTo = [0,0,0];" \n
+ "" \n
+ "//Brain Vars" \n
+ "_override = false;" \n
+ "_criteria =""(false)"";" \n
+ "_criteriaMetAction = nil;" \n
+ "" \n
+ "" \n
+ "//Mission Vars" \n
+ "_wDiag = """";" \n
+ "_wDiag2 = """";" \n
+ "_wAction = """";" \n
+ "_wCrypto = 0;" \n
+ "_wWeapon = """";" \n
+ "_wAmmo = """";" \n
+ "_wItem = """";" \n
+ "_act = """";" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class load_mission
+ {
+ name = "load_mission";
+ init = /*%FSM*/"//Welcome" \n
+ "" \n
+ "_wCondition = getText ( configFile >> ""traderMissions"" >> _missionName >> ""welcome"" >> ""condition"");" \n
+ "" \n
+ "_imCondition1 = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission1"" >> ""condition"");" \n
+ "_imCondition2 = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission2"" >> ""condition"");" \n
+ "_imCondition3 = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission3"" >> ""condition"");" \n
+ "" \n
+ "_mAccepted = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""condition"");" \n
+ "_skipWelcomeCheck = call compile _mAccepted;" \n
+ "" \n
+ "_freq1 = 0;" \n
+ "_freq2 = 0;" \n
+ "_freq3 = 0;" \n
+ "" \n
+ "_wAbandon = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""abandoned"" >> ""condition"");" \n
+ "" \n
+ "_wComplete = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""condition"");" \n
+ "" \n
+ "" \n
+ "_dialogueCount = 0;" \n
+ "" \n
+ "" \n
+ "//Information" \n
+ "" \n
+ "if (floor (random 100) < 25) then {" \n
+ "" \n
+ "if (count _seenPlayers > 1) then {" \n
+ "" \n
+ "" \n
+ "titleText [format[""Hey %1, we've seen %2 round these parts, in case you were interested."",name player,_seenPlayers select (floor random (count _seenPlayers))],""PLAIN""];" \n
+ "};" \n
+ "};" \n
+ "" \n
+ "_callWelcome = true;" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_welcome
+ {
+ name = "do_welcome";
+ init = /*%FSM*/"if (_plyr getVariable[""inMission"",["""",""""]] select 0 == ""true"") then {" \n
+ "titleText [""You must finish the mission you are on first."",""PLAIN"",6];" \n
+ "_callDispose = true;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "if (!_callDispose) then {" \n
+ "" \n
+ "titleText [_wDiag,""PLAIN"",6];" \n
+ "" \n
+ " if (_wDiag2 != """") then {" \n
+ "" \n
+ " _wDiag2 spawn {" \n
+ " uiSleep 6;" \n
+ " titleText [_this,""PLAIN"",6];" \n
+ " };" \n
+ " " \n
+ " };" \n
+ "" \n
+ "" \n
+ " if (_act != """") then {" \n
+ " call compile _act;" \n
+ " };" \n
+ "" \n
+ " _inMission = true;" \n
+ "" \n
+ "" \n
+ "" \n
+ "};" \n
+ "" \n
+ "_callWelcome = false;" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class continue
+ {
+ priority = 10.000000;
+ to="action";
+ precondition = /*%FSM*/"_packageFound = false;" \n
+ "" \n
+ "{" \n
+ "if (_x == _missionItem) then {" \n
+ "_packageFound = true;" \n
+ "};" \n
+ "" \n
+ "}forEach items player;" \n
+ "" \n
+ "{" \n
+ "if (_x == _missionItem) then {" \n
+ "_packageFound = true;" \n
+ "};" \n
+ "}forEach magazines player;"/*%FSM*/;
+ condition=/*%FSM*/"_callDispose || diag_tickTime - _t > 16;"/*%FSM*/;
+ action=/*%FSM*/"_welcomeDone = true;" \n
+ "_sWait = 6;" \n
+ "_actionDone = true;" \n
+ "_criteria = ""(false)"";" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class in_mission_1
+ {
+ name = "in_mission_1";
+ init = /*%FSM*/"if (_wDiag != """") then {" \n
+ "titleText [_wDiag,""PLAIN""];" \n
+ "};" \n
+ "" \n
+ "if (_act != """") then {" \n
+ "call compile _act;" \n
+ "};" \n
+ "" \n
+ "_sWait = 6;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_m1 = _t;" \n
+ "_criteria = ""(false)"";" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""In MIssion 1"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class in_mission_1_1
+ {
+ name = "in_mission_1_1";
+ init = /*%FSM*/"if (_wDiag != """") then {" \n
+ "titleText [_wDiag,""PLAIN""];" \n
+ "};" \n
+ "" \n
+ "if (_act != """") then {" \n
+ "call compile _act;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_sWait = 6;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_m2 = _t;" \n
+ "_criteria = ""(false)"";" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""In MIssion 2"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class in_mission_1_2
+ {
+ name = "in_mission_1_2";
+ init = /*%FSM*/"if (_wDiag != """") then {" \n
+ "titleText [_wDiag,""PLAIN""];" \n
+ "};" \n
+ "" \n
+ "if (_act != """") then {" \n
+ "call compile _act;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_sWait = 6;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(false)"";" \n
+ "_m3 = _t;" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""In Mission 3"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class complete
+ {
+ name = "complete";
+ init = /*%FSM*/"titleText [_wDiag,""PLAIN"", 6];" \n
+ "" \n
+ "" \n
+ "if (_act != """") then {" \n
+ "call compile _act;" \n
+ "};" \n
+ "" \n
+ "if (_wDiag2 != """") then {" \n
+ "" \n
+ "_wDiag2 spawn {" \n
+ " uiSleep 6;" \n
+ " titleText [_this,""PLAIN"",6];" \n
+ "};" \n
+ "" \n
+ "};" \n
+ "" \n
+ "_wDiag = """";" \n
+ "_wDiag2 = """";" \n
+ "" \n
+ "[_sapper, _trader] spawn EPOCH_mission_cage_sapper;" \n
+ "" \n
+ "_plyr setVariable[""inMission"",["""",""""]];" \n
+ "_inMission = false;" \n
+ "_callDispose = true;" \n
+ "_sWait = 6;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(false)"";" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Complete"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class checking_status
+ {
+ name = "checking_status";
+ init = /*%FSM*/"if (_doDebug) then {" \n
+ "systemChat format [""S:%1"",diag_tickTime];" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class done
+ {
+ priority = 100.000000;
+ to="return";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck < 1;"/*%FSM*/;
+ action=/*%FSM*/"_u = diag_tickTime;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class items_player
+ {
+ priority = 90.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 90;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "" \n
+ "" \n
+ "_sanityCheck = 90;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class player_status
+ {
+ priority = 80.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 80;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "" \n
+ "" \n
+ "_plyrPos = getPosATL _plyr;" \n
+ "" \n
+ "_damageHelp = false;" \n
+ "" \n
+ "if (damage player > 0.3) then {" \n
+ "_damageHelp = true;" \n
+ "};" \n
+ "" \n
+ "_sanityCheck = 80;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class clean_up
+ {
+ priority = 60.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 60;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "" \n
+ "_sanityCheck = 60;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_vars
+ {
+ priority = 50.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 50;"/*%FSM*/;
+ action=/*%FSM*/"_rnd = random 100;" \n
+ "" \n
+ "_sanityCheck = 50;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class near_characters
+ {
+ priority = 30.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 30;"/*%FSM*/;
+ action=/*%FSM*/"_nrEnts = nearestObjects [_plyr, [""Man"",""Epoch_Sapper_F""], 200];" \n
+ "" \n
+ "{" \n
+ " if ((_x getVariable [""AI_SLOT"", -1 ] > -1) && _x != _trader) then {" \n
+ " _newTrader = _x;" \n
+ " };" \n
+ "" \n
+ " if (!(alive _x) && !(typeof _x == ""Epoch_Sapper_F"")) then {" \n
+ " _doAlert = true;" \n
+ " _alertMessage = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""characters"" >> ""dialogue"");" \n
+ " };" \n
+ "" \n
+ " if (typeof _x == ""Epoch_Sapper_F"" && alive _x) then {" \n
+ " _sapper = _x;" \n
+ " };" \n
+ "" \n
+ "}forEach _nrEnts;" \n
+ "" \n
+ "_sanityCheck = 30;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_status
+ {
+ priority = 20.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 20;"/*%FSM*/;
+ action=/*%FSM*/"if (_inMission) then {" \n
+ "" \n
+ "" \n
+ "};" \n
+ "" \n
+ "" \n
+ "if!(isNull _newTrader) then {" \n
+ "" \n
+ " if (_newTrader distance _plyr < 6) then {" \n
+ " _callComplete = true;" \n
+ " };" \n
+ "" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "_sanityCheck = 20;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class checked
+ {
+ priority = 10.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 10;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "" \n
+ "if (!(isNull _sapper) &&(_sapper distance _trader < 26)) then {" \n
+ "_sapperFoundMessages = [""Ok, I see him. You need to get right back.\nGet out of sight so I can guide him in."",""Get yourself out of sight, I have control of him...just.\nThe people who made this guy left a chip in his head."",""Find a spot out of his sight.\nI don't need him wound up when caging him.""];" \n
+ "titleText [_sapperFoundMessages select floor(random count _sapperFoundMessages),""PLAIN""];" \n
+ "_callComplete = true;" \n
+ "sapperHndl setFSMVariable [""_traderDispose"",true];" \n
+ "};" \n
+ "" \n
+ "_sanityCheck = 0 ;" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class return
+ {
+ name = "return";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class to_action
+ {
+ priority = 10.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_checkEntry == ""action"";"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = """";" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class to_instinct
+ {
+ priority = 5.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_checkEntry == ""instinct"";"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = """";" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class accept_mission
+ {
+ name = "accept_mission";
+ init = /*%FSM*/"" \n
+ "titleText [_wDiag,""PLAIN"",6];" \n
+ "" \n
+ "" \n
+ "if (_act != """") then {" \n
+ "call compile _act;" \n
+ "};" \n
+ "" \n
+ "if (_wDiag2 != """") then {" \n
+ "" \n
+ "_wDiag2 spawn {" \n
+ " uiSleep 6;" \n
+ " titleText [_this,""PLAIN"",6];" \n
+ "};" \n
+ "};" \n
+ "" \n
+ "_inMission = true;" \n
+ "_plyr setVariable [""inMission"",[""true"",_missionName],false];" \n
+ "_acceptDone = true;" \n
+ "_sWait = 60;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(_plyr distance _trader > 12)"";" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Accept"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class abandoned
+ {
+ name = "abandoned";
+ init = /*%FSM*/"" \n
+ "titleText [_wDiag,""PLAIN""];" \n
+ "" \n
+ "if (_wDiag2 != """") then {" \n
+ "" \n
+ "_wDiag2 spawn {" \n
+ " uiSleep 6;" \n
+ " titleText [_this,""PLAIN""];" \n
+ "};" \n
+ "" \n
+ "};" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Abandoned"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class wait
+ {
+ priority = 5.000000;
+ to="call_revenge";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _t > _aWait);"/*%FSM*/;
+ action=/*%FSM*/"call compile _act;" \n
+ "_punished = true;" \n
+ "_doDispose = true;" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class call_revenge
+ {
+ name = "call_revenge";
+ init = /*%FSM*/"""I_UAV_01_F"" call EPOCH_unitSpawn;" \n
+ "_plyr setVariable [""inMission"",[""abandon"",_missionName],false];"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_alert
+ {
+ name = "do_alert";
+ init = /*%FSM*/"_message = _alertMessage select floor (random (count _alertMessage));" \n
+ "titletext [_message,""PLAIN"",6];" \n
+ "_message = """";" \n
+ "_alertMessage = [""""];" \n
+ "_alert = diag_tickTime;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class ____FAKE____
+ {
+ name = "____FAKE____";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class give_mission
+ {
+ priority = 70.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 70;"/*%FSM*/;
+ action=/*%FSM*/"//Test for future passing of mission to other players" \n
+ "" \n
+ "_passMission = false;" \n
+ "_missionPassed = false;" \n
+ "_nrPlyrs = _plyr nearEntities [_plyrArray, 10];" \n
+ "" \n
+ "{" \n
+ "" \n
+ "{" \n
+ "if (_x == _missionItem) then {" \n
+ "_passMission = true;" \n
+ "};" \n
+ "}forEach items _x;" \n
+ "" \n
+ "{" \n
+ "if (_x == _missionItem) then {" \n
+ "_passMission = true;" \n
+ "};" \n
+ "}forEach magazines _x;" \n
+ "" \n
+ "if (_passMission) then {" \n
+ "_plyr = _x;" \n
+ "_passMission = false;" \n
+ "_missionPassed = true;" \n
+ "};" \n
+ "" \n
+ "}forEach _nrPlyrs;" \n
+ "" \n
+ "_sanityCheck = 70;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="mission";
+ finalStates[] =
+ {
+ "end"
+ };
+};
+/*%FSM*/
diff --git a/Sources/epoch_code/System/Trader_Missions_Delivery.fsm b/Sources/epoch_code/System/Trader_Missions_Delivery.fsm
new file mode 100644
index 00000000..033c273e
--- /dev/null
+++ b/Sources/epoch_code/System/Trader_Missions_Delivery.fsm
@@ -0,0 +1,1524 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"mission",0,250,-292.494934,-346.793884,-202.494995,-296.794006,0.000000,"mission"};
+item1[] = {"_",8,218,62.332706,-185.990021,114.284866,-157.584717,0.000000,""};
+item2[] = {"instinct",2,250,191.105453,-225.114914,281.105408,-175.114914,0.000000,"instinct"};
+item3[] = {"action",2,250,164.446381,121.731827,254.446365,171.731903,0.000000,"action"};
+item4[] = {"dispose",4,218,20.438301,-279.382568,110.438431,-229.382599,90.000000,"dispose"};
+item5[] = {"_",8,218,184.126175,442.503937,236.078262,470.909149,0.000000,""};
+item6[] = {"reset_vars",2,250,-57.248745,-196.860123,32.751255,-146.860138,0.000000,"reset vars"};
+item7[] = {"_",8,218,-273.564545,-262.966431,-221.612381,-234.561172,0.000000,""};
+item8[] = {"complete",4,218,-56.810909,-93.101501,33.189354,-43.101486,100.000000,"complete"};
+item9[] = {"welcome",4,218,73.352470,-323.856232,163.352539,-273.856232,80.000000,"welcome"};
+item10[] = {"end",1,250,-370.691071,10.611027,-280.691071,60.611038,0.000000,"end"};
+item11[] = {"dispose",4,218,-102.640427,11.797817,-2.640434,61.797813,140.000000,"dispose"};
+item12[] = {"mission_event_1",4,218,402.723938,-312.757385,492.723938,-262.757324,60.000000,"mission event 1"};
+item13[] = {"no_decision",4,218,330.494629,-141.685272,420.494568,-91.685326,10.000000,"no decision"};
+item14[] = {"instinct_done",4,218,164.237518,-54.324181,254.237457,-4.324169,100.000000,"instinct done"};
+item15[] = {"completed",4,218,207.167007,-379.790894,297.167053,-329.790894,70.000000,"completed"};
+item16[] = {"load_mission",2,250,-292.180725,-196.146988,-202.180710,-146.146988,0.000000,"load mission"};
+item17[] = {"_",8,218,-162.998352,-185.990021,-111.046211,-157.584717,0.000000,""};
+item18[] = {"welcome",4,218,295.219086,199.253082,385.219025,249.253082,0.000000,"welcome"};
+item19[] = {"do_welcome",2,250,437.430695,199.688446,537.430664,249.688416,0.000000,"do welcome"};
+item20[] = {"interrupt",4,218,51.666336,-72.125519,141.666382,-22.125553,120.000000,"interrupt"};
+item21[] = {"mission_event_2",4,218,399.193695,-257.488159,489.193604,-207.488113,50.000000,"mission event 2"};
+item22[] = {"mission_event_3",4,218,399.829254,-201.420883,489.829010,-151.420898,40.000000,"mission event 3"};
+item23[] = {"mission_event_1",4,218,14.473431,177.857178,104.473343,227.857162,0.000000,"mission event 1"};
+item24[] = {"in_mission_1",2,250,-135.305969,264.247803,-45.305984,314.247803,0.000000,"in mission 1"};
+item25[] = {"mission_event_2",4,218,59.082150,218.902466,149.082092,268.902527,0.000000,"mission event 2"};
+item26[] = {"mission_event_3",4,218,104.461388,258.831085,194.461349,308.830994,0.000000,"mission event 3"};
+item27[] = {"in_mission_1_1",2,250,-134.509277,332.141968,-44.509247,382.141968,0.000000,"in mission 1"};
+item28[] = {"in_mission_1_2",2,250,-135.272766,397.347107,-45.272724,447.347107,0.000000,"in mission 1"};
+item29[] = {"complete_1",4,218,-11.056295,127.654327,78.943771,177.654495,0.000000,"complete"};
+item30[] = {"complete",2,4346,-137.496185,183.663330,-47.496330,233.663330,0.000000,"complete"};
+item31[] = {"mission_check",4,218,338.559967,54.346359,428.559814,104.346336,110.000000,"mission check"};
+item32[] = {"checking_status",2,250,675.000000,-50.000000,775.000000,0.000000,0.000000,"checking status"};
+item33[] = {"items_player",4,218,525.000000,-125.000000,625.000000,-75.000000,90.000000,"items player"};
+item34[] = {"checked",4,218,625.000000,25.000000,725.000000,75.000000,10.000000,"checked"};
+item35[] = {"done",4,218,450.000000,-50.000000,550.000000,0.000000,100.000000,"done"};
+item36[] = {"player_status",4,218,600.000000,-175.000000,700.000000,-125.000000,80.000000,"player status"};
+item37[] = {"accepted",4,218,136.335068,-357.773987,226.335129,-307.773987,75.000000,"accepted"};
+item38[] = {"return",2,250,324.819244,-48.579079,414.819275,1.420918,0.000000,"return"};
+item39[] = {"to_action",4,218,241.671967,3.543102,331.671967,53.543098,10.000000,"to action"};
+item40[] = {"to_instinct",4,218,251.599976,-118.075302,341.599976,-68.075302,5.000000,"to instinct"};
+item41[] = {"accept",4,218,243.062256,251.914124,333.062256,301.914124,0.000000,"accept"};
+item42[] = {"accept_mission",2,250,362.788879,361.609375,452.789001,411.609375,0.000000,"accept mission"};
+item43[] = {"give_mission",4,218,725.000000,-175.000000,825.000000,-125.000000,70.000000,"give mission"};
+item44[] = {"abandoned",4,218,272.889526,-355.696106,362.889526,-305.696106,65.000000,"abandoned"};
+item45[] = {"abandoned",4,218,-100.000000,-50.000000,0.000000,0.000000,160.000000,"abandoned"};
+item46[] = {"abandoned",2,250,-251.320206,-49.915840,-151.320221,0.084147,0.000000,"abandoned"};
+item47[] = {"wait",4,218,-250.899475,-138.286346,-150.899460,-88.286331,5.000000,"wait"};
+item48[] = {"call_revenge",2,250,-370.813080,-137.218597,-280.813080,-87.218597,0.000000,"call revenge"};
+item49[] = {"check",4,218,566.066467,161.357407,666.066467,211.357407,5.000000,"check"};
+item50[] = {"continue",4,218,441.737213,121.630814,531.737183,171.630829,10.000000,"continue"};
+item51[] = {"items_player",4,218,567.278381,231.959915,667.278381,281.959961,10.000000,"items player"};
+item52[] = {"clean_up",4,218,800.000000,-150.000000,900.000000,-100.000000,60.000000,"clean up"};
+item53[] = {"mission_status",4,218,750.000000,25.000000,850.000000,75.000000,20.000000,"mission status"};
+item54[] = {"near_characters",4,218,850.000000,-25.000000,950.000000,25.000000,30.000000,"near characters"};
+item55[] = {"mission_vars",4,218,850.000000,-100.000000,950.000000,-50.000000,50.000000,"mission vars"};
+item56[] = {"check_items",2,250,710.006836,199.688446,810.006836,249.688446,0.000000,"check items"};
+item57[] = {"alert",4,218,-50.000000,75.000000,50.000000,125.000000,150.000000,"alert"};
+item58[] = {"do_alert",2,250,-147.601227,110.981712,-47.601219,160.981720,0.000000,"do alert"};
+item59[] = {"_",8,218,-351.789581,-56.608616,-299.837433,-28.203323,0.000000,""};
+item60[] = {"____FAKE____",9,2400,0.000000,0.000000,0.000000,0.000000,0.000000,"____FAKE____"};
+link0[] = {0,7};
+link1[] = {1,2};
+link2[] = {2,4};
+link3[] = {2,9};
+link4[] = {2,12};
+link5[] = {2,13};
+link6[] = {2,14};
+link7[] = {2,15};
+link8[] = {2,21};
+link9[] = {2,22};
+link10[] = {2,37};
+link11[] = {2,44};
+link12[] = {3,8};
+link13[] = {3,11};
+link14[] = {3,18};
+link15[] = {3,20};
+link16[] = {3,23};
+link17[] = {3,25};
+link18[] = {3,26};
+link19[] = {3,29};
+link20[] = {3,31};
+link21[] = {3,41};
+link22[] = {3,45};
+link23[] = {3,57};
+link24[] = {4,2};
+link25[] = {5,3};
+link26[] = {6,1};
+link27[] = {7,16};
+link28[] = {8,6};
+link29[] = {9,2};
+link30[] = {11,10};
+link31[] = {12,2};
+link32[] = {13,32};
+link33[] = {14,3};
+link34[] = {15,2};
+link35[] = {16,17};
+link36[] = {17,6};
+link37[] = {18,19};
+link38[] = {19,49};
+link39[] = {19,50};
+link40[] = {20,2};
+link41[] = {21,2};
+link42[] = {22,2};
+link43[] = {23,24};
+link44[] = {24,5};
+link45[] = {25,27};
+link46[] = {26,28};
+link47[] = {27,5};
+link48[] = {28,5};
+link49[] = {29,30};
+link50[] = {30,5};
+link51[] = {31,32};
+link52[] = {32,33};
+link53[] = {32,34};
+link54[] = {32,35};
+link55[] = {32,36};
+link56[] = {32,52};
+link57[] = {32,53};
+link58[] = {32,54};
+link59[] = {32,55};
+link60[] = {33,32};
+link61[] = {34,32};
+link62[] = {35,38};
+link63[] = {36,32};
+link64[] = {37,2};
+link65[] = {38,39};
+link66[] = {38,40};
+link67[] = {39,3};
+link68[] = {40,2};
+link69[] = {41,42};
+link70[] = {42,5};
+link71[] = {43,32};
+link72[] = {44,2};
+link73[] = {45,46};
+link74[] = {46,47};
+link75[] = {47,48};
+link76[] = {48,59};
+link77[] = {49,56};
+link78[] = {50,3};
+link79[] = {51,19};
+link80[] = {52,32};
+link81[] = {53,32};
+link82[] = {54,32};
+link83[] = {55,32};
+link84[] = {56,51};
+link85[] = {57,58};
+link86[] = {58,5};
+link87[] = {59,10};
+link88[] = {60,43};
+globals[] = {0.000000,0,0,0,16777215,640,480,1,214,6316128,1,-427.373627,810.022095,485.764771,-422.404175,996,731,1};
+window[] = {2,-1,-1,-1,-1,448,42,842,18,3,1014};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "trader mission delivery";
+ class States
+ {
+ /*%FSM*/
+ class mission
+ {
+ name = "mission";
+ init = /*%FSM*/"_plyr = _this select 0;" \n
+ "_trader = _this select 1;" \n
+ "_missionName = ""MissionDelivery"";" \n
+ "_handle = ""NOT SET"";" \n
+ "_plyrArray = [""Epoch_Male_F"",""Epoch_Female_F""];" \n
+ "_vehArray = [""Car""];" \n
+ "_tRange = 20;" \n
+ "_sRange = 200;" \n
+ "_vRange = 50;" \n
+ "" \n
+ "_maxTravelTime = 480;" \n
+ "_trgtZ = 0;" \n
+ "_t = diag_tickTime;" \n
+ "_u = _t;" \n
+ "_m1 = _t;" \n
+ "_m2 = _m1;" \n
+ "_m3 = _m2;" \n
+ "_dropped = _m3;" \n
+ "" \n
+ "_missionStart = _m3;" \n
+ "_nrPlyrs = [];" \n
+ "Epoch_mission_uav = objNull;" \n
+ "_nrEnts = [];" \n
+ "_plyrPos = [0,0,0];" \n
+ "_newTrader = objNull;" \n
+ "_rnd = random 100;" \n
+ "" \n
+ "" \n
+ "//Mission Vars" \n
+ "_callWelcome = true;//call mission on startup from menu" \n
+ "_doWelcome = false;" \n
+ "_doDispose = false;" \n
+ "_doComplete = false;" \n
+ "_doMission1 = false;" \n
+ "_doMission2 = false;" \n
+ "_doMission3 = false;" \n
+ "_doAccepted = false;" \n
+ "_doAbandon = false;" \n
+ "_nrEnts = [];" \n
+ "_wDiag = """";" \n
+ "_rndWChoice = 0;" \n
+ "_welcomeDone = false;" \n
+ "_packageFound = false;" \n
+ "" \n
+ "_checkEntry = """";" \n
+ "_doDispose = false;" \n
+ "_callComplete = false;" \n
+ "_callAbandoned = false;" \n
+ "_callDispose = false;" \n
+ "" \n
+ "_doAccept = false;" \n
+ "_acceptDone = false;" \n
+ "_missionItem = """";" \n
+ "_inMission = false;" \n
+ "_missionTimer = _t;" \n
+ "" \n
+ "_startHolder = objNull;" \n
+ "_cargo = objNull;" \n
+ "_cargoCheck = [];" \n
+ "" \n
+ "_doAlert = false;" \n
+ "_alertMessage = [""""];" \n
+ "_alert = _m3 - 60;" \n
+ "_dropped = _alert - 60;" \n
+ "_lostCount = 0;" \n
+ "" \n
+ " //Events" \n
+ "_airDropChance = random 100;" \n
+ "_airDropDone = false;" \n
+ "_dropTimer = _t;" \n
+ "" \n
+ "//Testing - Bounty System" \n
+ "_seenPlayers = _trader getVariable [""seenPlayers"",[]];" \n
+ "_seenPlayers pushBack name _plyr;" \n
+ "_trader setVariable [""seenPlayers"",_seenPlayers];" \n
+ "" \n
+ "//DEBUG" \n
+ "_doDebug = false;" \n
+ "_debugDo = format[""INIT | %1"", _plyr];" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="load_mission";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class instinct
+ {
+ name = "instinct";
+ init = /*%FSM*/"_t = diag_tickTime;" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class instinct_done
+ {
+ priority = 100.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_decisionMade;"/*%FSM*/;
+ action=/*%FSM*/"_t = diag_tickTime;" \n
+ "_u = _t;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 90.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!(alive _plyr) || _doDispose || _callDispose;"/*%FSM*/;
+ action=/*%FSM*/"_doDispose = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class welcome
+ {
+ priority = 80.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_callWelcome && !_welcomeDone;"/*%FSM*/;
+ action=/*%FSM*/"_doWelcome = true;" \n
+ "_callWelcome = false;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class accepted
+ {
+ priority = 75.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_inMission || _skipWelcomeCheck) && !_acceptDone;"/*%FSM*/;
+ action=/*%FSM*/"_skipWelcomeCheck = false;" \n
+ "_doAccept = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class completed
+ {
+ priority = 70.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_callComplete && _inMission;"/*%FSM*/;
+ action=/*%FSM*/"_doComplete = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class abandoned
+ {
+ priority = 65.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_callAbandoned && _inMission;" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/"_callAbandoned = false;" \n
+ "_doAbandon = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_event_1
+ {
+ priority = 60.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(call compile _imCondition1) && diag_tickTime - _m1 > _freq1 && _inMission;"/*%FSM*/;
+ action=/*%FSM*/"if (_freq1 < 1) then {" \n
+ "_freq1 = getNumber ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission1"" >> ""frequency"");" \n
+ "};" \n
+ "_doMission1 = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_event_2
+ {
+ priority = 50.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(call compile _imCondition2) && diag_tickTime -_m2 > _freq2 && _inMission;"/*%FSM*/;
+ action=/*%FSM*/"if (_freq2 < 1) then {" \n
+ "_freq2 = getNumber ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission2"" >> ""frequency"");" \n
+ "};" \n
+ "_doMission2 = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_event_3
+ {
+ priority = 40.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(call compile _imCondition3) && diag_tickTime - _m3 > _freq3 && _inMission;"/*%FSM*/;
+ action=/*%FSM*/"if (_freq3 < 1) then {" \n
+ "_freq3 = getNumber ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission3"" >> ""frequency"");" \n
+ "};" \n
+ "_doMission3 = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class no_decision
+ {
+ priority = 10.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_decisionMade && diag_tickTime - _t > 3;"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = ""instinct"";" \n
+ "_sanityCheck = 100;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class action
+ {
+ name = "action";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class abandoned
+ {
+ priority = 160.000000;
+ to="abandoned";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doAbandon;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""abandoned"" >> ""dialogue"");" \n
+ "_wInDiag2 = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""abandoned"" >> ""dialogue2"");" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ "" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ " _wDiag2 = _wInDiag2 select _rndWChoice;" \n
+ "" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""abandoned"" >> ""action"");" \n
+ "_aWait = getNumber ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""abandoned"" >> ""delay"");" \n
+ "_doAbandon = false;" \n
+ "_t = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class alert
+ {
+ priority = 150.000000;
+ to="do_alert";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doAlert && diag_tickTime - _alert > 30;"/*%FSM*/;
+ action=/*%FSM*/"_doAlert = false"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 140.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doDispose;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class interrupt
+ {
+ priority = 120.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_allowInterrupt && (call compile _interruptReason);"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_check
+ {
+ priority = 110.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_actionDone && diag_tickTime > _u + 4;"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = ""action"";" \n
+ "_sanityCheck = 100;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class complete
+ {
+ priority = 100.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_actionDone && ((call compile _criteria) || (diag_tickTime > (_t + _sWait)));"/*%FSM*/;
+ action=/*%FSM*/"if (!isNil ""_criteriaMetAction"") then {" \n
+ "call compile _criteriaMetAction;" \n
+ "};" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class complete_1
+ {
+ priority = 0.000000;
+ to="complete";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doComplete;"/*%FSM*/;
+ action=/*%FSM*/"_doComplete = false;" \n
+ "" \n
+ "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""dialogue"");" \n
+ "_wInDiag2 = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""dialogue2"");" \n
+ "_wInCrypto = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""crypto"");" \n
+ "_wInWeap = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""weapon"");" \n
+ "_wInAmmo = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""magazine"");" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""action"");" \n
+ "" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ " _wDiag2 = _wInDiag2 select _rndWChoice;" \n
+ " _wCrypto = _wInCrypto select _rndWChoice;" \n
+ " _wWeapon = _wInWeap select _rndWChoice;" \n
+ " _wAmmo = _wInAmmo select _rndWChoice;" \n
+ " _wItem = _wInItem select _rndWChoice;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_event_1
+ {
+ priority = 0.000000;
+ to="in_mission_1";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doMission1;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission1"" >> ""dialogue"");" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ "" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission1"" >> ""action"");" \n
+ "_doMission1 = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class accept
+ {
+ priority = 0.000000;
+ to="accept_mission";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doAccept;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "" \n
+ "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""dialogue"");" \n
+ "_wInDiag2 = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""dialogue2"");" \n
+ "_wInCrypto = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""crypto"");" \n
+ "_wInWeap = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""weapon"");" \n
+ "_wInAmmo = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""magazine"");" \n
+ "_wInItem = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""item"");" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""action"");" \n
+ "" \n
+ "//_rndWChoice = floor (random (count _wInDiag));" \n
+ "" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ " _wDiag2 = _wInDiag2 select _rndWChoice;" \n
+ "// _wCrypto = _wInCrypto select _rndWChoice;" \n
+ " _wCrypto = 0;" \n
+ " _wWeapon = _wInWeap select _rndWChoice;" \n
+ " _wAmmo = _wInAmmo select _rndWChoice;" \n
+ " _wItem = _wInItem select _rndWChoice;" \n
+ "" \n
+ "" \n
+ "_doAccept = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class welcome
+ {
+ priority = 0.000000;
+ to="do_welcome";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doWelcome && !_welcomeDone;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""welcome"" >> ""dialogue"");" \n
+ "_wInDiag2 = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""welcome"" >> ""dialogue2"");" \n
+ "_wInItem = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""welcome"" >> ""item"");" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""welcome"" >> ""action"");" \n
+ "" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ "" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ " _wDiag2 = _wInDiag2 select _rndWChoice;" \n
+ " _wItem = _wInItem select _rndWChoice;" \n
+ "//_wItem = ""ItemDocumentMission"";" \n
+ "" \n
+ "_doWelcome = false;" \n
+ "_skipMIssion = false;" \n
+ "_packageFound = false;" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "if (_plyr getVariable[""inMission"",["""",""""]] select 0 == ""true"") then {" \n
+ "_formatMsg = format[""%1"",""You must finish the mission you are on first.""];" \n
+ "_dt = [_formatMsg, 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;" \n
+ "_callDispose = true;" \n
+ "_doDispose = true;" \n
+ "};" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_event_2
+ {
+ priority = 0.000000;
+ to="in_mission_1_1";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doMission2;"/*%FSM*/;
+ action=/*%FSM*/"_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission2"" >> ""dialogue"");" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission2"" >> ""action"");" \n
+ "" \n
+ "_doMission2 = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_event_3
+ {
+ priority = 0.000000;
+ to="in_mission_1_2";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doMission3;"/*%FSM*/;
+ action=/*%FSM*/"_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission3"" >> ""dialogue"");" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission3"" >> ""action"");" \n
+ "_doMission3 = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class reset_vars
+ {
+ name = "reset_vars";
+ init = /*%FSM*/"//Default Vars" \n
+ "_rnd = 0;" \n
+ "_actionDone = false;" \n
+ "_decisionMade = false;" \n
+ "_sWait = 0;" \n
+ "_doDispose = false;" \n
+ "_chooseTarget = false;" \n
+ "_criteria = Nil;" \n
+ "_criteriaMet = false;" \n
+ "_allowInterrupt = false;" \n
+ "_interruptReason = ""(false)"";" \n
+ "" \n
+ "" \n
+ "_moveTo = [0,0,0];" \n
+ "" \n
+ "//Brain Vars" \n
+ "_override = false;" \n
+ "_criteria =""(false)"";" \n
+ "_criteriaMetAction = nil;" \n
+ "" \n
+ "" \n
+ "//Mission Vars" \n
+ "_wDiag = """";" \n
+ "_wDiag2 = """";" \n
+ "_wAction = """";" \n
+ "_wCrypto = 0;" \n
+ "_wWeapon = """";" \n
+ "_wAmmo = """";" \n
+ "_wItem = """";" \n
+ "_act = """";" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/"//hint format[""dispose %1"", axeMissionHandle];"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class load_mission
+ {
+ name = "load_mission";
+ init = /*%FSM*/"//Welcome" \n
+ "" \n
+ "_wCondition = getText ( configFile >> ""traderMissions"" >> _missionName >> ""welcome"" >> ""condition"");" \n
+ "" \n
+ "_imCondition1 = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission1"" >> ""condition"");" \n
+ "_imCondition2 = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission2"" >> ""condition"");" \n
+ "_imCondition3 = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission3"" >> ""condition"");" \n
+ "" \n
+ "_mAccepted = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""condition"");" \n
+ "_skipWelcomeCheck = call compile _mAccepted;" \n
+ "" \n
+ "_freq1 = 0;" \n
+ "_freq2 = 0;" \n
+ "_freq3 = 0;" \n
+ "" \n
+ "_wAbandon = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""abandoned"" >> ""condition"");" \n
+ "" \n
+ "_wComplete = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""condition"");" \n
+ "" \n
+ "" \n
+ "_dialogueCount = 0;" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "_callWelcome = true;" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_welcome
+ {
+ name = "do_welcome";
+ init = /*%FSM*/"" \n
+ "" \n
+ "" \n
+ "if (!_skipMIssion && !_callDispose) then {" \n
+ "" \n
+ "_formatMsg = format[""%1"",_wDiag];" \n
+ "_dt = [_formatMsg, 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;" \n
+ "" \n
+ "if (_wDiag2 != """") then {" \n
+ "" \n
+ "_wDiag2 spawn {" \n
+ " uiSleep 6;" \n
+ " _formatMsg2 = format[""%1"",_this];" \n
+ "_dt = [_formatMsg2, 0, 1, 6, 2, 0, 1] call bis_fnc_dynamictext;" \n
+ " uiSleep 12;" \n
+ "};" \n
+ "" \n
+ "};" \n
+ "" \n
+ "" \n
+ "if ( _wItem != """") then {" \n
+ "_missionItem = _wItem;" \n
+ "" \n
+ "if!(_missionItem in Items _plyr && !_packageFound) then {" \n
+ "_plyr addItemToVest _missionItem;" \n
+ "" \n
+ "_plyr setVariable [""inMission"",[""true"",_missionName],false];" \n
+ "" \n
+ "" \n
+ "};" \n
+ "" \n
+ "};" \n
+ "" \n
+ "if (_act != """") then {" \n
+ "call compile _act;" \n
+ "};" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Welcome"";" \n
+ "axeItem = _missionItem;" \n
+ "};" \n
+ "_skipMIssion = true;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class continue
+ {
+ priority = 10.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/" _packageFound || _callDispose || _inMission || _skipWelcomeCheck;"/*%FSM*/;
+ action=/*%FSM*/"_welcomeDone = true;" \n
+ "_sWait = 6;" \n
+ "_actionDone = true;" \n
+ "_criteria = ""(false)"";" \n
+ "_inMission = true;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class check
+ {
+ priority = 5.000000;
+ to="check_items";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _t > 12) && !_packageFound;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class in_mission_1
+ {
+ name = "in_mission_1";
+ init = /*%FSM*/"if (_wDiag != """") then {" \n
+ "" \n
+ "_formatMsg = format[""%1"",_wDiag];" \n
+ "_dt = [_formatMsg, 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;" \n
+ "};" \n
+ "" \n
+ "if (_act != """") then {" \n
+ "call compile _act;" \n
+ "};" \n
+ "" \n
+ "_sWait = 6;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_m1 = _t;" \n
+ "_criteria = ""(false)"";" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""In MIssion 1"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class in_mission_1_1
+ {
+ name = "in_mission_1_1";
+ init = /*%FSM*/"if (_wDiag != """") then {" \n
+ "_formatMsg = format[""%1"",_wDiag];" \n
+ "_dt = [_formatMsg, 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;" \n
+ "};" \n
+ "" \n
+ "if (_act != """") then {" \n
+ "call compile _act;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_sWait = 6;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_m2 = _t;" \n
+ "_criteria = ""(false)"";" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""In MIssion 2"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class in_mission_1_2
+ {
+ name = "in_mission_1_2";
+ init = /*%FSM*/"if (_wDiag != """") then {" \n
+ "_formatMsg = format[""%1"",_wDiag];" \n
+ "_dt = [_formatMsg, 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;" \n
+ "};" \n
+ "" \n
+ "if (_act != """") then {" \n
+ "call compile _act;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_sWait = 6;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(false)"";" \n
+ "_m3 = _t;" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""In Mission 3"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class complete
+ {
+ name = "complete";
+ init = /*%FSM*/"_formatMsg = format[""%1"",_wDiag];" \n
+ "_dt = [_formatMsg, 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;" \n
+ "" \n
+ "{" \n
+ "if (_x == _missionItem) then {" \n
+ "_plyr removeItem _x; " \n
+ "};" \n
+ "" \n
+ "}forEach items player;" \n
+ "" \n
+ "{" \n
+ "if (_x == _missionItem) then {" \n
+ "_plyr removeMagazine _x;" \n
+ "};" \n
+ "}forEach magazines player;" \n
+ "" \n
+ "_plyr spawn {" \n
+ "uiSleep 12;" \n
+ "EPOCH_FillContainer_PVS = [_this,Epoch_personalToken,objNull,false,15];" \n
+ "publicVariableServer ""EPOCH_FillContainer_PVS"";" \n
+ "//hint ""Paying Out"";" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "if (_act != """") then {" \n
+ "call compile _act;" \n
+ "};" \n
+ "" \n
+ "if (_wDiag2 != """") then {" \n
+ "" \n
+ "_wDiag2 spawn {" \n
+ " uiSleep 6;" \n
+ " _formatMsg2 = format[""%1"",_this];" \n
+ "_dt = [_formatMsg2, 0, 1, 6, 2, 0, 1] call bis_fnc_dynamictext;" \n
+ " uiSleep 12;" \n
+ "};" \n
+ "" \n
+ "};" \n
+ "" \n
+ "_plyr setVariable[""inMission"",["""",""""]];" \n
+ "_inMission = false;" \n
+ "_callDispose = true;" \n
+ "_sWait = 6;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(false)"";" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Complete"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class checking_status
+ {
+ name = "checking_status";
+ init = /*%FSM*/"if (_doDebug) then {" \n
+ "//systemchat format [""S:%1"",diag_tickTime];" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class done
+ {
+ priority = 100.000000;
+ to="return";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck < 1;"/*%FSM*/;
+ action=/*%FSM*/"_u = diag_tickTime;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class items_player
+ {
+ priority = 90.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 90;"/*%FSM*/;
+ action=/*%FSM*/"_packageFound = false;" \n
+ "" \n
+ "{" \n
+ "if (_x == _missionItem) then {" \n
+ "_packageFound = true;" \n
+ "};" \n
+ "" \n
+ "}forEach items player;" \n
+ "" \n
+ "{" \n
+ "if (_x == _missionItem) then {" \n
+ "_packageFound = true;" \n
+ "};" \n
+ "}forEach magazines player;" \n
+ "" \n
+ "" \n
+ "_sanityCheck = 90;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class player_status
+ {
+ priority = 80.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 80;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "" \n
+ "" \n
+ "_plyrPos = getPosATL _plyr;" \n
+ "" \n
+ "_damageHelp = false;" \n
+ "" \n
+ "if (damage player > 0.3) then {" \n
+ "_damageHelp = true;" \n
+ "};" \n
+ "" \n
+ "_sanityCheck = 80;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class clean_up
+ {
+ priority = 60.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 60;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "" \n
+ "_sanityCheck = 60;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_vars
+ {
+ priority = 50.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 50;"/*%FSM*/;
+ action=/*%FSM*/"_rnd = random 100;" \n
+ "" \n
+ "if (diag_tickTime - _missionTimer > 2400) then {" \n
+ "" \n
+ "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission3"" >> ""dialogue"");" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ "" \n
+ "_formatMsg = format[""%1"",_wDiag];" \n
+ "_dt = [_formatMsg, 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;" \n
+ "" \n
+ "_missionTimer = diag_tickTime;" \n
+ "};" \n
+ "" \n
+ "if (diag_tickTime - _dropTimer > 1200 && !_airDropDone && _airDropChance < 25) then {" \n
+ "" \n
+ "if (_rnd < 25) then {" \n
+ "[] execFSM ""\x\addons\a3_epoch_code\System\Event_Air_Drop.fsm"";" \n
+ "_airDropDone = true;" \n
+ "};" \n
+ "" \n
+ "_dropTimer = diag_tickTime;" \n
+ "};" \n
+ "" \n
+ "_sanityCheck = 50;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class near_characters
+ {
+ priority = 30.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 30;"/*%FSM*/;
+ action=/*%FSM*/"_nrEnts = nearestObjects [_plyr, [""Man""], 20];" \n
+ "" \n
+ "{" \n
+ " if ((_x getVariable [""AI_SLOT"", -1 ] > -1) && _x != _trader) then {" \n
+ "" \n
+ " _newTrader = _x;" \n
+ " };" \n
+ "" \n
+ " if!(alive _x) then {" \n
+ " _doAlert = true;" \n
+ " _alertMessage = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""characters"" >> ""dialogue"");" \n
+ "" \n
+ " };" \n
+ "" \n
+ "}forEach _nrEnts;" \n
+ "" \n
+ "_sanityCheck = 30;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_status
+ {
+ priority = 20.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 20;"/*%FSM*/;
+ action=/*%FSM*/"if (_inMission) then {" \n
+ "" \n
+ "_cargo = nearestObjects [_plyr, [""GroundWeaponHolder""],50];" \n
+ "if (count _cargo > 0) then {" \n
+ "" \n
+ "{" \n
+ "" \n
+ "if (_missionItem in MagazineCargo _x) then {" \n
+ "" \n
+ "if (_plyr distance _x > 100) then {" \n
+ "_callAbandoned = true;" \n
+ "};" \n
+ "" \n
+ "};" \n
+ "" \n
+ "}forEach _cargo;" \n
+ "" \n
+ "};" \n
+ "" \n
+ "};" \n
+ "" \n
+ "" \n
+ "if!(isNull _newTrader) then {" \n
+ "" \n
+ " if (_newTrader distance _trader > 450) then {" \n
+ " if (_newTrader distance _plyr < 6) then {" \n
+ " _callComplete = true;" \n
+ " };" \n
+ "};" \n
+ "" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "_sanityCheck = 20;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class checked
+ {
+ priority = 10.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 10;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "if (_packageFound && !_inMission) then {_inMission = true;};" \n
+ "" \n
+ "//Dropped message" \n
+ "if (!_packageFound && _inMission && diag_tickTime - _dropped> 60) then {" \n
+ "_droppedMessage = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""itemlost"" >> ""dialogue"");" \n
+ "_droppedMessage2 = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""itemlost"" >> ""dialogue2"");" \n
+ "_message = _droppedMessage select floor (random count _droppedMessage);" \n
+ "_message2 = _droppedMessage2 select floor (random count _droppedMessage2);" \n
+ "" \n
+ "_formatMsg = format[""%1"",_message];" \n
+ "_dt = [_formatMsg, 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;" \n
+ "_dropped = diag_tickTime;" \n
+ "" \n
+ "" \n
+ "if (_message2 != """") then {" \n
+ "" \n
+ "_message2 spawn {" \n
+ " uiSleep 6;" \n
+ " _formatMsg = format[""%1"",_this];" \n
+ "_dt = [_formatMsg, 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;" \n
+ "};" \n
+ "" \n
+ "};" \n
+ "" \n
+ "_lostCount = _lostCount + 1;" \n
+ "};" \n
+ "" \n
+ "if (_lostCount > 4) then {" \n
+ "_callAbandoned = true;" \n
+ "};" \n
+ "" \n
+ "_sanityCheck = 0 ;" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "//hint format [""%1\nCrypto:%4\Rand:%5\nWeap:%6\nPackage:%7\nDist: %8"",_debugDo,_wDiag,_imCondition1,_wCrypto,_rndWChoice,_wWeapon, _packageFound, player distance _trader];" \n
+ "};" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class return
+ {
+ name = "return";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class to_action
+ {
+ priority = 10.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_checkEntry == ""action"";"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = """";" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class to_instinct
+ {
+ priority = 5.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_checkEntry == ""instinct"";"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = """";" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class accept_mission
+ {
+ name = "accept_mission";
+ init = /*%FSM*/"" \n
+ "_formatMsg = format[""%1"",_wDiag];" \n
+ "_dt = [_formatMsg, 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;" \n
+ "" \n
+ "" \n
+ "if (_act != """") then {" \n
+ "call compile _act;" \n
+ "};" \n
+ "" \n
+ "if (_wDiag2 != """") then {" \n
+ "" \n
+ "_wDiag2 spawn {" \n
+ " uiSleep 6;" \n
+ " _formatMsg2 = format[""%1"",_this];" \n
+ "_dt = [_formatMsg2, 0, 1, 6, 2, 0, 1] call bis_fnc_dynamictext;" \n
+ " uiSleep 12;" \n
+ "};" \n
+ "" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_plyr setVariable [""inMission"",[""true"",_missionName],false];" \n
+ "_inMission = true;" \n
+ "" \n
+ "_acceptDone = true;" \n
+ "_sWait = 12;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteriaMetAction = """";" \n
+ "_criteria = ""(true)"";" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Accept"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class abandoned
+ {
+ name = "abandoned";
+ init = /*%FSM*/"" \n
+ "_formatMsg = format[""%1"",_wDiag];" \n
+ "_dt = [_formatMsg, 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;" \n
+ "" \n
+ "if (_wDiag2 != """") then {" \n
+ "" \n
+ "_wDiag2 spawn {" \n
+ " uiSleep 6;" \n
+ " _formatMsg = format[""%1"",_this];" \n
+ "_dt = [_formatMsg, 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;" \n
+ "};" \n
+ "" \n
+ "};" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Abandoned"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class wait
+ {
+ priority = 5.000000;
+ to="call_revenge";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _t > _aWait);"/*%FSM*/;
+ action=/*%FSM*/"call compile _act;" \n
+ "_punished = true;" \n
+ "_doDispose = true;" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class call_revenge
+ {
+ name = "call_revenge";
+ init = /*%FSM*/"""I_UAV_01_F"" call EPOCH_unitSpawn;" \n
+ "_plyr setVariable [""inMission"",[""abandon"",_missionName],false];"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class check_items
+ {
+ name = "check_items";
+ init = /*%FSM*/"{" \n
+ "if (_x == _missionItem) then {" \n
+ "_packageFound = true;" \n
+ "};" \n
+ "" \n
+ "}forEach items player;" \n
+ "" \n
+ "{" \n
+ "if (_x == _missionItem) then {" \n
+ "_packageFound = true;" \n
+ "};" \n
+ "}forEach magazines player;" \n
+ "" \n
+ "" \n
+ "if ((diag_tickTime - _missionStart > 30 || _plyr distance _trader > 12)&& !_packageFound) then {" \n
+ "_callDispose = true;" \n
+ "_wDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""missionDeclined"");" \n
+ "_formatMsg = format[""%1"",_wDiag select _rndWChoice];" \n
+ "_dt = [_formatMsg, 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;" \n
+ "_wDiag = """";" \n
+ "_plyr removeItemFromVest _missionItem; " \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class items_player
+ {
+ priority = 10.000000;
+ to="do_welcome";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/"_t = diag_tickTime;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_alert
+ {
+ name = "do_alert";
+ init = /*%FSM*/"_message = _alertMessage select floor (random (count _alertMessage));" \n
+ "_formatMsg = format[""%1"",_message];" \n
+ "_dt = [_formatMsg, 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;" \n
+ "_message = """";" \n
+ "_alertMessage = [""""];" \n
+ "_alert = diag_tickTime;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class ____FAKE____
+ {
+ name = "____FAKE____";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class give_mission
+ {
+ priority = 70.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 70;"/*%FSM*/;
+ action=/*%FSM*/"//Test for future passing of mission to other players" \n
+ "" \n
+ "_passMission = false;" \n
+ "_missionPassed = false;" \n
+ "" \n
+ "_sanityCheck = 70;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="mission";
+ finalStates[] =
+ {
+ "end"
+ };
+};
+/*%FSM*/
diff --git a/Sources/epoch_code/System/Trader_Missions_UAV.fsm b/Sources/epoch_code/System/Trader_Missions_UAV.fsm
new file mode 100644
index 00000000..b5bad7af
--- /dev/null
+++ b/Sources/epoch_code/System/Trader_Missions_UAV.fsm
@@ -0,0 +1,1614 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"mission",0,250,-292.494934,-346.793884,-202.494995,-296.794006,0.000000,"mission"};
+item1[] = {"_",8,218,62.332706,-185.990021,114.284866,-157.584717,0.000000,""};
+item2[] = {"instinct",2,250,191.105453,-225.114914,281.105408,-175.114914,0.000000,"instinct"};
+item3[] = {"action",2,250,164.446381,121.731827,254.446365,171.731903,0.000000,"action"};
+item4[] = {"dispose",4,218,20.438301,-279.382568,110.438431,-229.382599,90.000000,"dispose"};
+item5[] = {"_",8,218,184.126175,442.503937,236.078262,470.909149,0.000000,""};
+item6[] = {"reset_vars",2,250,-57.248745,-196.860123,32.751255,-146.860138,0.000000,"reset vars"};
+item7[] = {"_",8,218,-273.564545,-262.966431,-221.612381,-234.561172,0.000000,""};
+item8[] = {"complete",4,218,-56.810909,-93.101501,33.189354,-43.101486,100.000000,"complete"};
+item9[] = {"welcome",4,218,73.352470,-323.856232,163.352539,-273.856232,80.000000,"welcome"};
+item10[] = {"end",1,250,-370.691071,10.611027,-280.691071,60.611038,0.000000,"end"};
+item11[] = {"dispose",4,218,-102.640427,11.797817,-2.640434,61.797813,140.000000,"dispose"};
+item12[] = {"mission_event_1",4,218,402.723938,-312.757385,492.723938,-262.757324,60.000000,"mission event 1"};
+item13[] = {"no_decision",4,218,330.494629,-141.685272,420.494568,-91.685326,10.000000,"no decision"};
+item14[] = {"instinct_done",4,218,164.237518,-54.324181,254.237457,-4.324169,100.000000,"instinct done"};
+item15[] = {"completed",4,218,207.167007,-379.790894,297.167053,-329.790894,70.000000,"completed"};
+item16[] = {"load_mission",2,250,-292.180725,-196.146988,-202.180710,-146.146988,0.000000,"load mission"};
+item17[] = {"_",8,218,-162.998352,-185.990021,-111.046211,-157.584717,0.000000,""};
+item18[] = {"welcome",4,218,295.219086,199.253082,385.219025,249.253082,0.000000,"welcome"};
+item19[] = {"do_welcome",2,250,437.430695,199.688446,537.430664,249.688416,0.000000,"do welcome"};
+item20[] = {"interrupt",4,218,51.666336,-72.125519,141.666382,-22.125553,120.000000,"interrupt"};
+item21[] = {"mission_event_2",4,218,399.193695,-257.488159,489.193604,-207.488113,50.000000,"mission event 2"};
+item22[] = {"mission_event_3",4,218,399.829254,-201.420883,489.829010,-151.420898,40.000000,"mission event 3"};
+item23[] = {"mission_event_1",4,218,14.473431,177.857178,104.473343,227.857162,0.000000,"mission event 1"};
+item24[] = {"in_mission_1",2,250,-135.305969,264.247803,-45.305984,314.247803,0.000000,"in mission 1"};
+item25[] = {"mission_event_2",4,218,59.082150,218.902466,149.082092,268.902527,0.000000,"mission event 2"};
+item26[] = {"mission_event_3",4,218,104.461388,258.831085,194.461349,308.830994,0.000000,"mission event 3"};
+item27[] = {"in_mission_2",2,250,-134.509277,332.141968,-44.509247,382.141968,0.000000,"in mission 2"};
+item28[] = {"in_mission_3",2,250,-135.272766,397.347107,-45.272724,447.347107,0.000000,"in mission 3"};
+item29[] = {"complete_1",4,218,-11.056295,127.654327,78.943771,177.654495,0.000000,"complete"};
+item30[] = {"complete",2,250,-137.496185,183.663330,-47.496330,233.663330,0.000000,"complete"};
+item31[] = {"mission_check",4,218,338.559967,54.346359,428.559814,104.346336,110.000000,"mission check"};
+item32[] = {"checking_status",2,250,675.000000,-50.000000,775.000000,0.000000,0.000000,"checking status"};
+item33[] = {"items_player",4,218,525.000000,-125.000000,625.000000,-75.000000,90.000000,"items player"};
+item34[] = {"checked",4,218,625.000000,25.000000,725.000000,75.000000,10.000000,"checked"};
+item35[] = {"done",4,218,450.000000,-50.000000,550.000000,0.000000,100.000000,"done"};
+item36[] = {"player_status",4,218,600.000000,-175.000000,700.000000,-125.000000,80.000000,"player status"};
+item37[] = {"accepted",4,218,136.335068,-357.773987,226.335129,-307.773987,75.000000,"accepted"};
+item38[] = {"return",2,250,324.819244,-48.579079,414.819275,1.420918,0.000000,"return"};
+item39[] = {"to_action",4,218,241.671967,3.543102,331.671967,53.543098,10.000000,"to action"};
+item40[] = {"to_instinct",4,218,251.599976,-118.075302,341.599976,-68.075302,5.000000,"to instinct"};
+item41[] = {"accept",4,218,243.062256,251.914124,333.062256,301.914124,0.000000,"accept"};
+item42[] = {"accept_mission",2,250,350.000000,350.000000,450.000000,400.000000,0.000000,"accept mission"};
+item43[] = {"give_mission",4,218,725.000000,-175.000000,825.000000,-125.000000,70.000000,"give mission"};
+item44[] = {"abandoned",4,218,272.889526,-355.696106,362.889526,-305.696106,65.000000,"abandoned"};
+item45[] = {"abandoned",4,218,-100.000000,-50.000000,0.000000,0.000000,160.000000,"abandoned"};
+item46[] = {"abandoned",2,250,-251.320206,-49.915840,-151.320221,0.084147,0.000000,"abandoned"};
+item47[] = {"wait",4,218,-250.899475,-138.286346,-150.899460,-88.286331,5.000000,"wait"};
+item48[] = {"call_revenge",2,250,-370.813080,-137.218597,-280.813080,-87.218597,0.000000,"call revenge"};
+item49[] = {"check",4,218,566.066467,161.357407,666.066467,211.357407,5.000000,"check"};
+item50[] = {"continue",4,218,441.737213,121.630814,531.737183,171.630829,10.000000,"continue"};
+item51[] = {"items_player",4,218,567.278381,231.959915,667.278381,281.959961,10.000000,"items player"};
+item52[] = {"clean_up",4,218,800.000000,-150.000000,900.000000,-100.000000,60.000000,"clean up"};
+item53[] = {"mission_status",4,218,750.000000,25.000000,850.000000,75.000000,20.000000,"mission status"};
+item54[] = {"near_characters",4,218,850.000000,-25.000000,950.000000,25.000000,30.000000,"near characters"};
+item55[] = {"mission_vars",4,218,850.000000,-100.000000,950.000000,-50.000000,50.000000,"mission vars"};
+item56[] = {"check_items",2,4346,710.006836,199.688446,810.006836,249.688446,0.000000,"check items"};
+item57[] = {"alert",4,218,-50.000000,75.000000,50.000000,125.000000,150.000000,"alert"};
+item58[] = {"do_alert",2,250,-147.601227,110.981712,-47.601219,160.981720,0.000000,"do alert"};
+item59[] = {"_",8,218,-351.789581,-56.608616,-299.837433,-28.203323,0.000000,""};
+item60[] = {"find_uav",2,250,350.000000,500.000000,450.000000,550.000000,0.000000,"find uav"};
+item61[] = {"not_found",4,218,575.000000,500.000000,675.000000,550.000000,10.000000,"not found"};
+item62[] = {"found",4,218,350.000000,600.000000,450.000000,650.000000,20.000000,"found"};
+item63[] = {"_",8,218,375.000000,425.000000,425.000000,450.000000,0.000000,""};
+item64[] = {"complete_1",2,250,150.000000,600.000000,250.000000,650.000000,0.000000,"complete"};
+item65[] = {"____FAKE____",9,2600,0.000000,0.000000,0.000000,0.000000,0.000000,"____FAKE____"};
+link0[] = {0,7};
+link1[] = {1,2};
+link2[] = {2,4};
+link3[] = {2,9};
+link4[] = {2,12};
+link5[] = {2,13};
+link6[] = {2,14};
+link7[] = {2,15};
+link8[] = {2,21};
+link9[] = {2,22};
+link10[] = {2,37};
+link11[] = {2,44};
+link12[] = {3,8};
+link13[] = {3,11};
+link14[] = {3,18};
+link15[] = {3,20};
+link16[] = {3,23};
+link17[] = {3,25};
+link18[] = {3,26};
+link19[] = {3,29};
+link20[] = {3,31};
+link21[] = {3,41};
+link22[] = {3,45};
+link23[] = {3,57};
+link24[] = {4,2};
+link25[] = {5,3};
+link26[] = {6,1};
+link27[] = {7,16};
+link28[] = {8,6};
+link29[] = {9,2};
+link30[] = {11,10};
+link31[] = {12,2};
+link32[] = {13,32};
+link33[] = {14,3};
+link34[] = {15,2};
+link35[] = {16,17};
+link36[] = {17,6};
+link37[] = {18,19};
+link38[] = {19,49};
+link39[] = {19,50};
+link40[] = {20,2};
+link41[] = {21,2};
+link42[] = {22,2};
+link43[] = {23,24};
+link44[] = {24,5};
+link45[] = {25,27};
+link46[] = {26,28};
+link47[] = {27,5};
+link48[] = {28,5};
+link49[] = {29,30};
+link50[] = {30,5};
+link51[] = {31,32};
+link52[] = {32,33};
+link53[] = {32,34};
+link54[] = {32,35};
+link55[] = {32,36};
+link56[] = {32,52};
+link57[] = {32,53};
+link58[] = {32,54};
+link59[] = {32,55};
+link60[] = {33,32};
+link61[] = {34,32};
+link62[] = {35,38};
+link63[] = {36,32};
+link64[] = {37,2};
+link65[] = {38,39};
+link66[] = {38,40};
+link67[] = {39,3};
+link68[] = {40,2};
+link69[] = {41,42};
+link70[] = {42,63};
+link71[] = {43,32};
+link72[] = {44,2};
+link73[] = {45,46};
+link74[] = {46,47};
+link75[] = {47,48};
+link76[] = {48,59};
+link77[] = {49,56};
+link78[] = {50,3};
+link79[] = {51,19};
+link80[] = {52,32};
+link81[] = {53,32};
+link82[] = {54,32};
+link83[] = {55,32};
+link84[] = {56,51};
+link85[] = {57,58};
+link86[] = {58,5};
+link87[] = {59,10};
+link88[] = {60,61};
+link89[] = {60,62};
+link90[] = {61,60};
+link91[] = {62,64};
+link92[] = {63,60};
+link93[] = {64,5};
+link94[] = {65,43};
+globals[] = {25.000000,1,0,0,16777215,640,480,1,219,6316128,1,-151.403351,989.627441,708.843018,-297.301147,829,731,1};
+window[] = {2,-1,-1,-1,-1,580,150,950,150,3,847};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "trader mission uav";
+ class States
+ {
+ /*%FSM*/
+ class mission
+ {
+ name = "mission";
+ init = /*%FSM*/"_plyr = _this select 0;" \n
+ "_trader = _this select 1;" \n
+ "_missionName = ""MissionUav"";" \n
+ "_handle = ""NOT SET"";" \n
+ "_plyrArray = [""Epoch_Male_F"",""Epoch_Female_F"",""""];" \n
+ "_vehArray = [""Car""];" \n
+ "_tRange = 20;" \n
+ "_sRange = 200;" \n
+ "_vRange = 50;" \n
+ "Epoch_mission_uav = objNull;" \n
+ "" \n
+ "_maxTravelTime = 480;" \n
+ "_trgtZ = 0;" \n
+ "_t = diag_tickTime;" \n
+ "_u = _t;" \n
+ "_m1 = _t;" \n
+ "_m2 = _m1;" \n
+ "_m3 = _m2;" \n
+ "_dropped = _m3;" \n
+ "" \n
+ "_missionStart = _m3;" \n
+ "_nrPlyrs = [];" \n
+ "_nrEnts = [];" \n
+ "_plyrPos = [0,0,0];" \n
+ "_newTrader = objNull;" \n
+ "_rnd = random 100;" \n
+ "" \n
+ "" \n
+ "//Mission Vars" \n
+ "_callWelcome = true;//call mission on startup from menu" \n
+ "_doWelcome = false;" \n
+ "_doDispose = false;" \n
+ "_doComplete = false;" \n
+ "_doMission1 = false;" \n
+ "_doMission2 = false;" \n
+ "_doMission3 = false;" \n
+ "_doAccepted = false;" \n
+ "_doAbandon = false;" \n
+ "_nrEnts = [];" \n
+ "_wDiag = """";" \n
+ "_rndWChoice = 0;" \n
+ "_welcomeDone = false;" \n
+ "_packageFound = false;" \n
+ "_targetObject = objNull;" \n
+ "_targettedArray = [];" \n
+ "" \n
+ "_checkEntry = """";" \n
+ "_doDispose = false;" \n
+ "_callComplete = false;" \n
+ "_callAbandoned = false;" \n
+ "_callDispose = false;" \n
+ "" \n
+ "_doAccept = false;" \n
+ "_acceptDone = false;" \n
+ "_missionItem = """";" \n
+ "_inMission = false;" \n
+ "" \n
+ "_startHolder = objNull;" \n
+ "_cargo = objNull;" \n
+ "_cargoCheck = [];" \n
+ "" \n
+ "_doAlert = false;" \n
+ "_alertMessage = [""""];" \n
+ "_alert = _m3 - 60;" \n
+ "_dropped = _alert - 60;" \n
+ "_lostCount = 0;" \n
+ "_messsage = """";" \n
+ "doReleaseSapper = false;" \n
+ "doReleaseAI = false;" \n
+ "_releaseSapperTime = 0;" \n
+ "_releaseAITime = 0;" \n
+ "_releaseSapperAction = -1;" \n
+ "_releaseAIAction = -1;" \n
+ "_uavLiftOff = false;" \n
+ "" \n
+ "" \n
+ "//Testing - Bounty System" \n
+ "_seenPlayers = _trader getVariable [""seenPlayers"",[]];" \n
+ "_seenPlayers pushBack name _plyr;" \n
+ "_trader setVariable [""seenPlayers"",_seenPlayers];" \n
+ "" \n
+ "//DEBUG" \n
+ "_doDebug = false;" \n
+ "_debugDo = format[""INIT | %1"", _plyr];" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="load_mission";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class instinct
+ {
+ name = "instinct";
+ init = /*%FSM*/"_t = diag_tickTime;" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "systemChat format [""I:%1 | %2 | %3 - %4"",diag_tickTime,_debugDo, alive Epoch_mission_uav, _inMission];" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class instinct_done
+ {
+ priority = 100.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_decisionMade;"/*%FSM*/;
+ action=/*%FSM*/"_t = diag_tickTime;" \n
+ "_u = _t;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 90.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!(alive _plyr) || _doDispose || _callDispose;"/*%FSM*/;
+ action=/*%FSM*/"_doDispose = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class welcome
+ {
+ priority = 80.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_callWelcome && !_welcomeDone;"/*%FSM*/;
+ action=/*%FSM*/"_doWelcome = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class accepted
+ {
+ priority = 75.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_inMission || _skipWelcomeCheck) && !_acceptDone;"/*%FSM*/;
+ action=/*%FSM*/"_skipWelcomeCheck = false;" \n
+ "_doAccept = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class completed
+ {
+ priority = 70.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_callComplete && _inMission;"/*%FSM*/;
+ action=/*%FSM*/"_doComplete = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class abandoned
+ {
+ priority = 65.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(!alive Epoch_mission_uav) && _inMission;" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/"_callAbandoned = false;" \n
+ "_doAbandon = true;" \n
+ "_decisionMade = true;" \n
+ "" \n
+ "_debugDo = ""iAbandon"";"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_event_1
+ {
+ priority = 60.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(call compile _imCondition1) && diag_tickTime - _m1 > _freq1 && _inMission;"/*%FSM*/;
+ action=/*%FSM*/"if (_freq1 < 1) then {" \n
+ "_freq1 = getNumber ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission1"" >> ""frequency"");" \n
+ "};" \n
+ "_doMission1 = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_event_2
+ {
+ priority = 50.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(call compile _imCondition2) && diag_tickTime -_m2 > _freq2 && _inMission;"/*%FSM*/;
+ action=/*%FSM*/"if (_freq2 < 1) then {" \n
+ "_freq2 = getNumber ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission2"" >> ""frequency"");" \n
+ "};" \n
+ "_doMission2 = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_event_3
+ {
+ priority = 40.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(call compile _imCondition3) && diag_tickTime - _m3 > _freq3 && _inMission;"/*%FSM*/;
+ action=/*%FSM*/"if (_freq3 < 1) then {" \n
+ "_freq3 = getNumber ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission3"" >> ""frequency"");" \n
+ "};" \n
+ "_doMission3 = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class no_decision
+ {
+ priority = 10.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_decisionMade && diag_tickTime - _t > 3;"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = ""instinct"";" \n
+ "_sanityCheck = 100;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class action
+ {
+ name = "action";
+ init = /*%FSM*/"" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "systemChat format [""A:%1 | %2"",diag_tickTime, _debugDo];" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class abandoned
+ {
+ priority = 160.000000;
+ to="abandoned";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doAbandon;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""abandoned"" >> ""dialogue"");" \n
+ "_wInDiag2 = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""abandoned"" >> ""dialogue2"");" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ "" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ " _wDiag2 = _wInDiag2 select _rndWChoice;" \n
+ "" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""abandoned"" >> ""action"");" \n
+ "_aWait = getNumber ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""abandoned"" >> ""delay"");" \n
+ "_doAbandon = false;" \n
+ "_t = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class alert
+ {
+ priority = 150.000000;
+ to="do_alert";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doAlert && diag_tickTime - _alert > 240;"/*%FSM*/;
+ action=/*%FSM*/"_doAlert = false"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 140.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doDispose;"/*%FSM*/;
+ action=/*%FSM*/"_plyr setVariable [""inMission"",[""end"",_missionName],false];"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class interrupt
+ {
+ priority = 120.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_allowInterrupt && (call compile _interruptReason);"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_check
+ {
+ priority = 110.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_actionDone && diag_tickTime > _u + 4;"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = ""action"";" \n
+ "_sanityCheck = 100;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class complete
+ {
+ priority = 100.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_actionDone && ((call compile _criteria) || (diag_tickTime > (_t + _sWait)));"/*%FSM*/;
+ action=/*%FSM*/"if (!isNil ""_criteriaMetAction"") then {" \n
+ "call compile _criteriaMetAction;" \n
+ "};"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class complete_1
+ {
+ priority = 0.000000;
+ to="complete";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doComplete;"/*%FSM*/;
+ action=/*%FSM*/"_doComplete = false;" \n
+ "" \n
+ "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""dialogue"");" \n
+ "_wInDiag2 = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""dialogue2"");" \n
+ "" \n
+ "_wInWeap = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""weapon"");" \n
+ "_wInAmmo = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""magazine"");" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""action"");" \n
+ "" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ " _wDiag2 = _wInDiag2 select _rndWChoice;" \n
+ "" \n
+ " _wWeapon = _wInWeap select _rndWChoice;" \n
+ " _wAmmo = _wInAmmo select _rndWChoice;" \n
+ " _wItem = _wInItem select _rndWChoice;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_event_1
+ {
+ priority = 0.000000;
+ to="in_mission_1";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doMission1;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission1"" >> ""dialogue"");" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ "" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission1"" >> ""action"");" \n
+ "_doMission1 = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class accept
+ {
+ priority = 0.000000;
+ to="accept_mission";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doAccept;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "" \n
+ "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""dialogue"");" \n
+ "_wInDiag2 = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""dialogue2"");" \n
+ "_wInCrypto = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""crypto"");" \n
+ "_wInWeap = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""weapon"");" \n
+ "_wInAmmo = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""magazine"");" \n
+ "_wInItem = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""item"");" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""action"");" \n
+ "" \n
+ "//_rndWChoice = floor (random (count _wInDiag));" \n
+ "" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ " _wDiag2 = _wInDiag2 select _rndWChoice;" \n
+ "// _wCrypto = _wInCrypto select _rndWChoice;" \n
+ " _wCrypto = 0;" \n
+ " _wWeapon = _wInWeap select _rndWChoice;" \n
+ " _wAmmo = _wInAmmo select _rndWChoice;" \n
+ " _wItem = _wInItem select _rndWChoice;" \n
+ "" \n
+ "" \n
+ "_doAccept = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class welcome
+ {
+ priority = 0.000000;
+ to="do_welcome";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doWelcome && !_welcomeDone;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""welcome"" >> ""dialogue"");" \n
+ "_wInDiag2 = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""welcome"" >> ""dialogue2"");" \n
+ "_wInItem = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""welcome"" >> ""item"");" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""welcome"" >> ""action"");" \n
+ "" \n
+ "" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ "" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ " _wDiag2 = _wInDiag2 select _rndWChoice;" \n
+ " _wItem = _wInItem select _rndWChoice;" \n
+ "_wItem = ""O_UavTerminal"";" \n
+ "" \n
+ "if (side player == WEST) then {" \n
+ "_wItem = ""B_UavTerminal"";" \n
+ "};" \n
+ "" \n
+ "_doWelcome = false;" \n
+ "_skipMIssion = false;" \n
+ "_packageFound = false;" \n
+ "_t = diag_tickTime;" \n
+ "_missionStart = _t;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_event_2
+ {
+ priority = 0.000000;
+ to="in_mission_2";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doMission2;"/*%FSM*/;
+ action=/*%FSM*/"_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission2"" >> ""dialogue"");" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission2"" >> ""action"");" \n
+ "" \n
+ "_doMission2 = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_event_3
+ {
+ priority = 0.000000;
+ to="in_mission_3";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doMission3;"/*%FSM*/;
+ action=/*%FSM*/"_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission3"" >> ""dialogue"");" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ "_act = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission3"" >> ""action"");" \n
+ "_doMission3 = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class reset_vars
+ {
+ name = "reset_vars";
+ init = /*%FSM*/"//Default Vars" \n
+ "_rnd = 0;" \n
+ "_actionDone = false;" \n
+ "_decisionMade = false;" \n
+ "_sWait = 0;" \n
+ "_doDispose = false;" \n
+ "_chooseTarget = false;" \n
+ "_criteria = Nil;" \n
+ "_criteriaMet = false;" \n
+ "_allowInterrupt = false;" \n
+ "_interruptReason = ""(false)"";" \n
+ "" \n
+ "" \n
+ "_moveTo = [0,0,0];" \n
+ "" \n
+ "//Brain Vars" \n
+ "_override = false;" \n
+ "_criteria =""(false)"";" \n
+ "_criteriaMetAction = nil;" \n
+ "" \n
+ "" \n
+ "//Mission Vars" \n
+ "_wDiag = """";" \n
+ "_wDiag2 = """";" \n
+ "_wAction = """";" \n
+ "_wCrypto = 0;" \n
+ "_wWeapon = """";" \n
+ "_wAmmo = """";" \n
+ "_wItem = """";" \n
+ "_act = """";" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/"if (alive Epoch_mission_uav) then {" \n
+ "Epoch_mission_uav spawn{" \n
+ "uiSleep 60;" \n
+ "deleteVehicle Epoch_mission_uav;" \n
+ "};" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class load_mission
+ {
+ name = "load_mission";
+ init = /*%FSM*/"//Welcome" \n
+ "" \n
+ "_wCondition = getText ( configFile >> ""traderMissions"" >> _missionName >> ""welcome"" >> ""condition"");" \n
+ "" \n
+ "_imCondition1 = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission1"" >> ""condition"");" \n
+ "_imCondition2 = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission2"" >> ""condition"");" \n
+ "_imCondition3 = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission3"" >> ""condition"");" \n
+ "_wPayCrypto = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""crypto"");" \n
+ "" \n
+ "_mAccepted = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""condition"");" \n
+ "_skipWelcomeCheck = call compile _mAccepted;" \n
+ "_skipWelcomeCheck = false;" \n
+ "" \n
+ "_freq1 = 0;" \n
+ "_freq2 = 0;" \n
+ "_freq3 = 0;" \n
+ "" \n
+ "_wAbandon = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""abandoned"" >> ""condition"");" \n
+ "" \n
+ "_wComplete = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""condition"");" \n
+ "" \n
+ "" \n
+ "_dialogueCount = 0;" \n
+ "" \n
+ "" \n
+ "//Information" \n
+ "" \n
+ "if (floor (random 100) < 25) then {" \n
+ "" \n
+ "if (count _seenPlayers > 1) then {" \n
+ "" \n
+ "" \n
+ "titleText [format[""Hey %1, we've seen %2 round these parts, in case you were interested."",name player,_seenPlayers select (floor random (count _seenPlayers))],""PLAIN""];" \n
+ "};" \n
+ "};" \n
+ "" \n
+ "_callWelcome = true;" \n
+ "" \n
+ "//functions" \n
+ "" \n
+ "checkForMissionItem = {" \n
+ "_plyr = _this select 0;" \n
+ "_findItem = _this select 1;" \n
+ "_yuup = false;" \n
+ "" \n
+ "{" \n
+ "if (_x == _findItem) then {" \n
+ "_yuup = true;" \n
+ "};" \n
+ "}forEach assignedItems _plyr;" \n
+ "_yuup" \n
+ "};" \n
+ "" \n
+ "_disableAI = {" \n
+ " {_this disableAI _x}forEach[""TARGET"",""AUTOTARGET"",""FSM""];" \n
+ "};" \n
+ "" \n
+ "releaseSapper = {" \n
+ "_targetPos = getPosATL _this;" \n
+ " _unit = createAgent [""Epoch_Sapper_F"", _targetPos, [], 180, ""FORM""];" \n
+ " _bomb = createVehicle [""Sapper_Charge_Ammo"", _targetPos, [], 0, ""CAN_COLLIDE""];" \n
+ " _bomb attachTo [_unit, [0,0,0],""Pelvis""];" \n
+ " _unit call _disableAI;" \n
+ " _sapperHandle = [_unit, _bomb] execFSM ""\x\addons\a3_epoch_code\System\Sapper_Brain.fsm"";" \n
+ "_sapperHandle" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset_vars";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_welcome
+ {
+ name = "do_welcome";
+ init = /*%FSM*/"if (_plyr getVariable[""inMission"",["""",""""]] select 0 == ""true"") then {" \n
+ "titleText [""You must finish the mission you are on first."",""PLAIN"",6];" \n
+ "_callDispose = true;" \n
+ "};" \n
+ "" \n
+ "if (_packageFound) then {" \n
+ "_inMission = true;" \n
+ "};" \n
+ "" \n
+ "if (!_skipMIssion && !_callDispose) then {" \n
+ "" \n
+ "titleText [_wDiag,""PLAIN"",6];" \n
+ "" \n
+ " if (_wDiag2 != """") then {" \n
+ "" \n
+ " _wDiag2 spawn {" \n
+ " uiSleep 6;" \n
+ " titleText [_this,""PLAIN"",6];" \n
+ " };" \n
+ "" \n
+ " };" \n
+ "" \n
+ "" \n
+ " if ( _wItem != """") then {" \n
+ " _missionItem = _wItem;" \n
+ " _plyr addItemToVest _missionItem;" \n
+ " };" \n
+ "" \n
+ " if (_act != """") then {" \n
+ " call compile _act;" \n
+ " };" \n
+ "" \n
+ " if (_doDebug) then {" \n
+ " _debugDo = ""Welcome"";" \n
+ " axeItem = _missionItem;" \n
+ " };" \n
+ "" \n
+ "_missionStart = _t;" \n
+ "_skipMIssion = true;" \n
+ "" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class continue
+ {
+ priority = 10.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_packageFound || _callDispose || _inMission || _skipWelcomeCheck;"/*%FSM*/;
+ action=/*%FSM*/"_welcomeDone = true;" \n
+ "_sWait = 6;" \n
+ "_actionDone = true;" \n
+ "_criteria = ""(false)"";" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class check
+ {
+ priority = 5.000000;
+ to="check_items";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _t > 3) && !_packageFound;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class in_mission_1
+ {
+ name = "in_mission_1";
+ init = /*%FSM*/"if (_wDiag != """") then {" \n
+ "titleText [_wDiag,""PLAIN""];" \n
+ "};" \n
+ "" \n
+ "if (_act != """") then {" \n
+ "call compile _act;" \n
+ "};" \n
+ "" \n
+ "_sWait = 6;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_m1 = _t;" \n
+ "_criteria = ""(false)"";" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""In MIssion 1"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class in_mission_2
+ {
+ name = "in_mission_2";
+ init = /*%FSM*/"if (_wDiag != """") then {" \n
+ "titleText [_wDiag,""PLAIN""];" \n
+ "};" \n
+ "" \n
+ "if (_act != """") then {" \n
+ "call compile _act;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_sWait = 6;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_m2 = _t;" \n
+ "_criteria = ""(false)"";" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""In MIssion 2"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class in_mission_3
+ {
+ name = "in_mission_3";
+ init = /*%FSM*/"if (_wDiag != """") then {" \n
+ "titleText [_wDiag,""PLAIN""];" \n
+ "};" \n
+ "" \n
+ "if (_act != """") then {" \n
+ "call compile _act;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_sWait = 6;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(false)"";" \n
+ "_m3 = _t;" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""In Mission 3"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class complete
+ {
+ name = "complete";
+ init = /*%FSM*/"titleText [_wDiag,""PLAIN"", 6];" \n
+ "" \n
+ "" \n
+ "EPOCH_FillContainer_PVS = [_plyr,Epoch_personalToken,objNull,false,25];" \n
+ "publicVariableServer ""EPOCH_FillContainer_PVS"";" \n
+ "" \n
+ "if (_act != """") then {" \n
+ "call compile _act;" \n
+ "};" \n
+ "" \n
+ "if (_wDiag2 != """") then {" \n
+ "" \n
+ "_wDiag2 spawn {" \n
+ " uiSleep 6;" \n
+ " titleText [_this,""PLAIN"",6];" \n
+ "};" \n
+ "" \n
+ "};" \n
+ "" \n
+ "_plyr setVariable[""inMission"",["""",""""]];" \n
+ "_inMission = false;" \n
+ "_doDispose = true;" \n
+ "_sWait = 6;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(false)"";" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class checking_status
+ {
+ name = "checking_status";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class done
+ {
+ priority = 100.000000;
+ to="return";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck < 1;"/*%FSM*/;
+ action=/*%FSM*/"_u = diag_tickTime;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class items_player
+ {
+ priority = 90.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 90;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_sanityCheck = 90;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class player_status
+ {
+ priority = 80.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 80;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "" \n
+ "" \n
+ "_plyrPos = getPosATL _plyr;" \n
+ "" \n
+ "_damageHelp = false;" \n
+ "" \n
+ "if (damage player > 0.3) then {" \n
+ "_damageHelp = true;" \n
+ "};" \n
+ "" \n
+ "_sanityCheck = 80;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class clean_up
+ {
+ priority = 60.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 60;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "" \n
+ "" \n
+ "_sanityCheck = 60;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_vars
+ {
+ priority = 50.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 50;"/*%FSM*/;
+ action=/*%FSM*/"//_rnd = random 100;" \n
+ "" \n
+ "if (!_uavLiftOff) then {" \n
+ "" \n
+ " if ( (Epoch_mission_uav distance _trader) > 200 && isUAVConnected Epoch_mission_uav) then {" \n
+ " _uavLiftOff = true;" \n
+ " };" \n
+ "" \n
+ "};" \n
+ "" \n
+ "_sanityCheck = 50;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class near_characters
+ {
+ priority = 30.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 30;"/*%FSM*/;
+ action=/*%FSM*/"_nrEnts = nearestObjects [_plyr, [""Man""], 500];" \n
+ "" \n
+ "{" \n
+ " if ((_x getVariable [""AI_SLOT"", -1 ] != -1) && _x != _trader && _x distance _trader > 60) then {" \n
+ " _newTrader = _x;" \n
+ " };" \n
+ "" \n
+ " if!(alive _x) then {" \n
+ " _doAlert = true;" \n
+ " _alertMessage = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""characters"" >> ""dialogue"");" \n
+ " };" \n
+ "" \n
+ "}forEach _nrEnts;" \n
+ "" \n
+ "if (!isNull cursorTarget) then {" \n
+ "_targetObject = cursorTarget;" \n
+ "};" \n
+ "" \n
+ "_sanityCheck = 30;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_status
+ {
+ priority = 20.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 20;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "{" \n
+ " if (typeOf _x in _plyrArray) then {" \n
+ " _alertMessage = [""I have spotted warms bodies in your area.\nYou are on the right track."",""UAV has seen players nearby. You are close.""];" \n
+ "_doAlert = true;" \n
+ " };" \n
+ "}forEach _nrEnts;" \n
+ "" \n
+ "if (!isNull _targetObject) then {" \n
+ " if (typeOf _targetObject in _plyrArray && _targetObject != _trader) then {" \n
+ " " \n
+ "" \n
+ "" \n
+ " if (_releaseSapperAction < 0) then {" \n
+ " _releaseSapperAction = Epoch_mission_uav addAction [format [""Release Sapper on %1"",name _targetObject], ""doReleaseSapper = true"","""",0,true];" \n
+ " titleText[""Great work. Traget Acquired.\nLet me know what you want to release !"",""PLAIN"",6]; " \n
+ " }else{" \n
+ " Epoch_mission_uav removeAction _releaseSapperAction; " \n
+ " _releaseSapperAction = Epoch_mission_uav addAction [format [""Release Sapper on %1"",name _targetObject], ""doReleaseSapper = true"","""",0,false];" \n
+ " };" \n
+ "" \n
+ " _targettedArray pushBack _targetObject;" \n
+ " " \n
+ " };" \n
+ "" \n
+ "};" \n
+ "" \n
+ "{" \n
+ " if!(alive _x) then {" \n
+ " _wCrypto = _wPayCrypto select floor(random(count _wInCrypto));" \n
+ " titleText[ format[""Oh Yeh, You Got %1. Here is your cut\n%2 krypto."",name _x, _wCrypto],""PLAIN"",2];" \n
+ "" \n
+ " };" \n
+ "_targettedArray = _targettedArray - [_x];" \n
+ "} forEach _targettedArray;" \n
+ "" \n
+ "" \n
+ "" \n
+ "if (_releaseSapperTime > 0) then {" \n
+ "Epoch_mission_uav removeAction _releaseSapperAction; " \n
+ "_releaseSapperAction = Epoch_mission_uav addAction [format[""Next Sapper ready in: %1"",round ((_releaseSapperTime + 480) - diag_tickTime)],"""","""",0,false];" \n
+ "" \n
+ " if ((_releaseSapperTime + 480) - diag_tickTime < 1) then {" \n
+ " Epoch_mission_uav removeAction _releaseSapperAction; " \n
+ " _releaseSapperTime = 0;" \n
+ " _releaseSapperAction = Epoch_mission_uav addAction [format [""Release Sapper on %1"",name _targetObject], ""doReleaseSapper = true"","""",0,false];" \n
+ " };" \n
+ "" \n
+ "};" \n
+ "" \n
+ "if ((Epoch_mission_uav distance _trader) < 20 && ((getPosATL Epoch_mission_uav) select 2) < 1 && _uavLiftOff) then {" \n
+ "_callComplete = true;" \n
+ "" \n
+ "};" \n
+ "" \n
+ "if (doReleaseSapper) then {" \n
+ "_targetObject call releaseSapper;" \n
+ "_releaseSapperTime = diag_tickTime;" \n
+ "doReleaseSapper = false;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_sanityCheck = 20;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class checked
+ {
+ priority = 10.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 10;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_sanityCheck = 0 ;" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class return
+ {
+ name = "return";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class to_action
+ {
+ priority = 10.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_checkEntry == ""action"";"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = """";" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class to_instinct
+ {
+ priority = 5.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_checkEntry == ""instinct"";"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = """";" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class accept_mission
+ {
+ name = "accept_mission";
+ init = /*%FSM*/"" \n
+ "titleText [_wDiag,""PLAIN"",6];" \n
+ "Epoch_mission_uav = objNull;" \n
+ "_side = side _plyr;" \n
+ "" \n
+ "//Assume EAST / Male" \n
+ "_uavclass = ""O_UAV_01_F"";" \n
+ "_uavPilot = ""O_UAV_AI"";" \n
+ "" \n
+ "if (_side == WEST) then {" \n
+ "_uavclass = ""B_UAV_01_F"";" \n
+ "_uavPilot = ""B_UAV_AI"";" \n
+ "};" \n
+ "" \n
+ "_copterPos = (getPosATL _plyr) findEmptyPosition [1,500,""I_Heli_light_03_unarmed_EPOCH""];" \n
+ "" \n
+ "EPOCH_createObject_PVS = [player,Epoch_personalToken,_uavclass,true,_copterPos,""CAN_COLLIDE"","""","""","""","""",true];" \n
+ "publicVariableServer ""EPOCH_createObject_PVS"";" \n
+ "" \n
+ "" \n
+ "" \n
+ "_findTimer = diag_tickTime;" \n
+ "" \n
+ "_inMission = true;" \n
+ "_plyr setVariable [""inMission"",[""true"",_missionName],false];" \n
+ "_acceptDone = true;" \n
+ "_sWait = 6;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteriaMetAction = """";" \n
+ "_criteria = ""(false)"";" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Accept"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="find_uav";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class abandoned
+ {
+ name = "abandoned";
+ init = /*%FSM*/"" \n
+ "titleText [_wDiag,""PLAIN""];" \n
+ "" \n
+ "if (_wDiag2 != """") then {" \n
+ "" \n
+ "_wDiag2 spawn {" \n
+ " uiSleep 6;" \n
+ " titleText [_this,""PLAIN""];" \n
+ "};" \n
+ "" \n
+ "};" \n
+ "" \n
+ "" \n
+ "if (_doDebug) then {" \n
+ "_debugDo = ""Abandoned"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class wait
+ {
+ priority = 5.000000;
+ to="call_revenge";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _t > _aWait);"/*%FSM*/;
+ action=/*%FSM*/"call compile _act;" \n
+ "_punished = true;" \n
+ "_doDispose = true;" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class call_revenge
+ {
+ name = "call_revenge";
+ init = /*%FSM*/"_plyr setVariable [""inMission"",[""crashed"",_missionName],false];"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class check_items
+ {
+ name = "check_items";
+ init = /*%FSM*/"" \n
+ "{" \n
+ "if (_x == _missionItem) then {" \n
+ "_packageFound = true;" \n
+ "};" \n
+ "" \n
+ "}forEach assigneditems _plyr;" \n
+ "" \n
+ "if ((diag_tickTime - _missionStart > 30 || _plyr distance _trader > 12) && !_packageFound) then {" \n
+ "_callDispose = true;" \n
+ "_wDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""accept"" >> ""missionDeclined"");" \n
+ "titleText [_wDiag select _rndWChoice,""PLAIN"",6];" \n
+ "_wDiag = """";" \n
+ "_plyr removeItemFromVest _missionItem; " \n
+ "};" \n
+ "" \n
+ "_t = diag_tickTime;" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class items_player
+ {
+ priority = 10.000000;
+ to="do_welcome";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/"_t = diag_tickTime;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_alert
+ {
+ name = "do_alert";
+ init = /*%FSM*/"_message = _alertMessage select floor (random (count _alertMessage));" \n
+ "titletext [_message,""PLAIN"",6];" \n
+ "_message = """";" \n
+ "_alertMessage = [""""];" \n
+ "_alert = diag_tickTime;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class find_uav
+ {
+ name = "find_uav";
+ init = /*%FSM*/"_uavs = nearestObjects [_copterPos, [_uavclass], 250];" \n
+ "if (count _uavs > 0) then {" \n
+ "Epoch_mission_uav = _uavs select 0;" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class found
+ {
+ priority = 20.000000;
+ to="complete_1";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!(isNull Epoch_mission_uav) || diag_tickTime - _findTimer > 20;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class not_found
+ {
+ priority = 10.000000;
+ to="find_uav";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"isNull Epoch_mission_uav && diag_tickTime - _t > 1;"/*%FSM*/;
+ action=/*%FSM*/"_t = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class complete_1
+ {
+ name = "complete_1";
+ init = /*%FSM*/"if (isNull Epoch_mission_uav) then {" \n
+ "titleText [""There was a problem loading the UAV.\nPlease try the mission again shortly."",""PLAIN"",3];" \n
+ "_doDispose = true;" \n
+ "}else{" \n
+ "" \n
+ "" \n
+ "_grp = createGroup _side;" \n
+ "" \n
+ " for ""_i"" from 0 to 1 step 1 do" \n
+ "{" \n
+ "_driver = _grp createUnit[_uavPilot, position Epoch_mission_uav, [], 0, ""CAN_COLLIDE""];" \n
+ "" \n
+ "_driver moveInAny Epoch_mission_uav;" \n
+ "};" \n
+ "" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class ____FAKE____
+ {
+ name = "____FAKE____";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class give_mission
+ {
+ priority = 70.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 70;"/*%FSM*/;
+ action=/*%FSM*/"//Test for future passing of mission to other players" \n
+ "" \n
+ "_passMission = false;" \n
+ "_missionPassed = false;" \n
+ "_nrPlyrs = _plyr nearEntities [_plyrArray, 10];" \n
+ "" \n
+ "{" \n
+ "" \n
+ "{" \n
+ "if (_x == _missionItem) then {" \n
+ "_passMission = true;" \n
+ "};" \n
+ "}forEach items _x;" \n
+ "" \n
+ "{" \n
+ "if (_x == _missionItem) then {" \n
+ "_passMission = true;" \n
+ "};" \n
+ "}forEach magazines _x;" \n
+ "" \n
+ "if (_passMission) then {" \n
+ "_plyr = _x;" \n
+ "_passMission = false;" \n
+ "_missionPassed = true;" \n
+ "};" \n
+ "" \n
+ "}forEach _nrPlyrs;" \n
+ "" \n
+ "_sanityCheck = 70;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="mission";
+ finalStates[] =
+ {
+ "end"
+ };
+};
+/*%FSM*/
diff --git a/Sources/epoch_code/System/Trader_Missions_VIP.fsm b/Sources/epoch_code/System/Trader_Missions_VIP.fsm
new file mode 100644
index 00000000..85820fd5
--- /dev/null
+++ b/Sources/epoch_code/System/Trader_Missions_VIP.fsm
@@ -0,0 +1,1129 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"vip",0,250,-50.000000,-475.000000,50.000000,-425.000000,0.000000,"vip"};
+item1[] = {"no_instinct",4,218,50.000000,-150.000000,150.000000,-100.000000,80.000000,"no instinct"};
+item2[] = {"instinct",2,250,150.000000,-200.000000,250.000000,-150.000000,0.000000,"instinct"};
+item3[] = {"action",2,250,150.000000,25.000000,250.000000,75.000000,0.000000,"action"};
+item4[] = {"dispose",4,218,75.000000,-325.000000,175.000000,-275.000000,90.000000,"dispose"};
+item5[] = {"_",8,218,175.000000,275.000000,225.000000,300.000000,0.000000,""};
+item6[] = {"reset___checks",2,250,-50.000000,-200.000000,50.000000,-150.000000,0.000000,"reset / checks"};
+item7[] = {"_",8,218,-25.000000,-400.000000,25.000000,-375.000000,0.000000,""};
+item8[] = {"complete",4,218,-100.000000,-100.000000,0.000000,-50.000000,100.000000,"complete"};
+item9[] = {"end",1,250,400.000000,-125.000000,500.000000,-75.000000,0.000000,"end"};
+item10[] = {"dispose",4,218,275.000000,-125.000000,375.000000,-75.000000,95.000000,"dispose"};
+item11[] = {"instinct_done",4,218,150.000000,-125.000000,250.000000,-75.000000,100.000000,"instinct done"};
+item12[] = {"follow",4,218,150.000000,-350.000000,250.000000,-300.000000,70.000000,"follow"};
+item13[] = {"do_instinct",4,218,50.000000,-250.000000,150.000000,-200.000000,80.000000,"do instinct"};
+item14[] = {"follow",4,218,325.000000,75.000000,425.000000,125.000000,0.000000,"follow"};
+item15[] = {"do_follow",2,250,325.000000,250.000000,425.000000,300.000000,0.000000,"do follow"};
+item16[] = {"get_in",4,218,225.000000,-375.000000,325.000000,-325.000000,60.000000,"get in"};
+item17[] = {"get_in",4,218,-25.000000,75.000000,75.000000,125.000000,0.000000,"get in"};
+item18[] = {"do_get_in",2,250,-25.000000,250.000000,75.000000,300.000000,0.000000,"do get in"};
+item19[] = {"get_out",4,218,350.000000,-375.000000,450.000000,-325.000000,50.000000,"get out"};
+item20[] = {"get_out",4,218,-100.000000,25.000000,0.000000,75.000000,0.000000,"get out"};
+item21[] = {"do_get_out",2,250,-100.000000,325.000000,0.000000,375.000000,0.000000,"do get out"};
+item22[] = {"drive_follow",4,218,400.000000,-325.000000,500.000000,-275.000000,40.000000,"drive follow"};
+item23[] = {"drive_follow",4,218,225.000000,100.000000,325.000000,150.000000,0.000000,"drive follow"};
+item24[] = {"drive_transport",2,250,225.000000,175.000000,325.000000,225.000000,0.000000,"drive transport"};
+item25[] = {"scoot_over",4,218,425.000000,-275.000000,525.000000,-225.000000,30.000000,"scoot over"};
+item26[] = {"scoot",4,218,75.000000,100.000000,175.000000,150.000000,0.000000,"scoot"};
+item27[] = {"scoot_over",2,250,75.000000,175.000000,175.000000,225.000000,0.000000,"scoot over"};
+item28[] = {"vehicle_damaged",4,218,400.000000,-225.000000,500.000000,-175.000000,20.000000,"vehicle damaged"};
+item29[] = {"abandon_vehicle",4,218,400.000000,25.000000,500.000000,75.000000,0.000000,"abandon vehicle"};
+item30[] = {"do_abandon",2,250,400.000000,325.000000,500.000000,375.000000,0.000000,"do abandon"};
+item31[] = {"accomplished",4,218,325.000000,-175.000000,425.000000,-125.000000,80.000000,"accomplished"};
+item32[] = {"accomplished",4,218,500.000000,-25.000000,600.000000,25.000000,0.000000,"accomplished"};
+item33[] = {"mission_accompli",2,250,500.000000,425.000000,600.000000,475.000000,0.000000,"mission" \n "accomplished"};
+item34[] = {"intro",2,4346,-50.000000,-350.000000,50.000000,-300.000000,0.000000,"intro"};
+item35[] = {"_",8,218,-25.000000,-275.000000,25.000000,-250.000000,0.000000,""};
+item36[] = {"long_checks",2,250,-275.000000,-100.000000,-175.000000,-50.000000,0.000000,"long checks"};
+item37[] = {"done_long_checks",4,218,-275.000000,-200.000000,-175.000000,-150.000000,100.000000,"done long checks"};
+item38[] = {"not_complete",4,218,75.000000,-75.000000,175.000000,-25.000000,0.000000,"not complete"};
+item39[] = {"spawn_general",4,218,-200.000000,-25.000000,-100.000000,25.000000,0.000000,"spawn general"};
+item40[] = {"spawn_general_and",2,250,-200.000000,425.000000,-100.000000,475.000000,0.000000,"spawn general" \n "and crew"};
+item41[] = {"find_boat",2,250,-200.000000,150.000000,-100.000000,200.000000,0.000000,"find boat"};
+item42[] = {"not_found",4,218,-375.000000,150.000000,-275.000000,200.000000,10.000000,"not found"};
+item43[] = {"found",4,218,-200.000000,275.000000,-100.000000,325.000000,20.000000,"found"};
+link0[] = {0,7};
+link1[] = {1,6};
+link2[] = {2,1};
+link3[] = {2,4};
+link4[] = {2,11};
+link5[] = {2,12};
+link6[] = {2,16};
+link7[] = {2,19};
+link8[] = {2,22};
+link9[] = {2,25};
+link10[] = {2,28};
+link11[] = {2,31};
+link12[] = {3,8};
+link13[] = {3,10};
+link14[] = {3,14};
+link15[] = {3,17};
+link16[] = {3,20};
+link17[] = {3,23};
+link18[] = {3,26};
+link19[] = {3,29};
+link20[] = {3,32};
+link21[] = {3,38};
+link22[] = {3,39};
+link23[] = {4,2};
+link24[] = {5,3};
+link25[] = {6,13};
+link26[] = {7,34};
+link27[] = {8,36};
+link28[] = {10,9};
+link29[] = {11,3};
+link30[] = {12,2};
+link31[] = {13,2};
+link32[] = {14,15};
+link33[] = {15,5};
+link34[] = {16,2};
+link35[] = {17,18};
+link36[] = {18,5};
+link37[] = {19,2};
+link38[] = {20,21};
+link39[] = {21,5};
+link40[] = {22,2};
+link41[] = {23,24};
+link42[] = {24,5};
+link43[] = {25,2};
+link44[] = {26,27};
+link45[] = {27,5};
+link46[] = {28,2};
+link47[] = {29,30};
+link48[] = {30,5};
+link49[] = {31,2};
+link50[] = {32,33};
+link51[] = {33,5};
+link52[] = {34,35};
+link53[] = {35,6};
+link54[] = {36,37};
+link55[] = {37,6};
+link56[] = {38,3};
+link57[] = {39,41};
+link58[] = {40,5};
+link59[] = {41,42};
+link60[] = {41,43};
+link61[] = {42,41};
+link62[] = {43,40};
+globals[] = {25.000000,1,0,0,16777215,640,480,1,215,6316128,1,-396.858002,689.865723,568.440063,-450.015076,780,731,1};
+window[] = {2,-1,-1,-1,-1,625,100,1125,100,3,798};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "vip";
+ class States
+ {
+ /*%FSM*/
+ class vip
+ {
+ name = "vip";
+ init = /*%FSM*/"_plyr = player;" \n
+ "_missionName = ""MissionDriver"";" \n
+ "" \n
+ "//settings" \n
+ "axeVIPLife = 3360;" \n
+ "_freqCheck = 1.5;//Check every x ticks." \n
+ "_msgMaxFrequency = 30;//Only show message every x ticks." \n
+ "" \n
+ "//vars" \n
+ "_doDispose = false;" \n
+ "_plyr = player;" \n
+ "_plyrVeh = vehicle _plyr;" \n
+ "this = objNull;" \n
+ "_inHouse = false;" \n
+ "_tStart = diag_tickTime;" \n
+ "_callDispose = false;" \n
+ "_house = objNull;" \n
+ "_dist = 0;" \n
+ "_doCOmplete = false;" \n
+ "_completeDone = false;" \n
+ "_m = diag_tickTime;" \n
+ "_axeMessage = """";" \n
+ "_wDiag = """";" \n
+ "_wDiag2 = """";" \n
+ "_missionTimer = diag_tickTime;" \n
+ "_sanityCheck = 0;" \n
+ "" \n
+ "//Brain Vars" \n
+ "_criteria =""(false)"";" \n
+ "_criteriaMetAction = nil;" \n
+ "_actionDone = false;" \n
+ "_decisionMade = false;" \n
+ "_sWait = 0;" \n
+ "_nc = _missionTimer;" \n
+ "" \n
+ "//Follow" \n
+ "_doFollow = false;" \n
+ "_moveTo = [0,0,0];" \n
+ "_driveFollow = false;" \n
+ "" \n
+ "//Vehicle" \n
+ "_transport = objNull;" \n
+ "_plyrInVeh = false;" \n
+ "_vipInVeh = false;" \n
+ "_plyrIsDriver = false;" \n
+ "_vipIsDriver = false;" \n
+ "_vipOut = false;" \n
+ "_vipIn = false;" \n
+ "_vehRunning = false;" \n
+ "_doScoot = false;" \n
+ "_abandonVeh = false;" \n
+ "" \n
+ "//The General" \n
+ "_doGeneralSpawn = false;" \n
+ "_generalSpawned = false;" \n
+ "_generalsBoat = objNull;" \n
+ "_grpGeneral = grpNull;" \n
+ "_generalsInfo = [_generalsBoat, _grpGeneral];" \n
+ "_warnCount = 0;" \n
+ "_warnStarted = false;" \n
+ "_reOrderEmbark = false;" \n
+ "_generalLeft = 0;" \n
+ "axeGeneralsBoat = objNull;" \n
+ "axeGeneralsPosArr = [[22650.2,6868.35,0.00152194],[9289.64,22814.5,0.677413],[3564.18,13976.6,1.01361],[28065.1,23761,0.00155544]];" \n
+ "axeGeneralBoatPosArr = [[22664.8,6840.91,-0.939753],[9362.45,22783,-0.938808],[3492.48,13964.6,-0.943063],[28023.1,23801.9,-0.919816]];" \n
+ "axeGeneralBoatFinArr = [[25248.5,3968.91,0],[17251.7,28554.2,0],[733.202,16893.8,0],[30364.1,26509.3,0]];" \n
+ "axeGeneralPosIndex = floor random count axeGeneralsPosArr;" \n
+ "" \n
+ "axeGeneralBoatPos = axeGeneralBoatPosArr select axeGeneralPosIndex;" \n
+ "axeGeneralPos = axeGeneralsPosArr select axeGeneralPosIndex; " \n
+ "_genPosX = [axeGeneralsPosArr select axeGeneralPosIndex select 0,2] call EPOCH_fnc_stringLeft;" \n
+ "_genPosY = [axeGeneralsPosArr select axeGeneralPosIndex select 1,3] call EPOCH_fnc_stringLeft;" \n
+ "_endAlert = 0;" \n
+ "//Setup" \n
+ "" \n
+ "" \n
+ "_nickName = ""Son"";" \n
+ "" \n
+ "if (_plyr iskindof ""Epoch_Female_base_F"") then {" \n
+ "_nickName = ""Young Lady"";" \n
+ "};" \n
+ "" \n
+ "//In Mission Events" \n
+ "_doMission1 = false;" \n
+ "_doMission2 = false;" \n
+ "_doMission3 = false;" \n
+ "_imCondition1 = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission1"" >> ""condition"");" \n
+ "_imCondition2 = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission2"" >> ""condition"");" \n
+ "_imCondition3 = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission3"" >> ""condition"");" \n
+ "" \n
+ "" \n
+ " EPOCH_VIP_Mission_Accomplished = {" \n
+ "" \n
+ " [axeVIP] join group axeGeneral;" \n
+ " {" \n
+ " _x assignAsCargo axeGeneralsBoat;" \n
+ " }forEach units grpVIPGeneral;" \n
+ "" \n
+ " axeGeneral assignAsCommander axeGeneralsBoat;" \n
+ " axeGBoatDriver = units grpVIPGeneral select 1;" \n
+ " axeGBoatDriver assignAsDriver axeGeneralsBoat;" \n
+ " units grpVIPGeneral orderGetIn true;" \n
+ "" \n
+ " };" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="intro";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class instinct
+ {
+ name = "instinct";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class instinct_done
+ {
+ priority = 100.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_decisionMade;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 90.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!alive _plyr || _callDispose;"/*%FSM*/;
+ action=/*%FSM*/"_doDispose = true;" \n
+ "_decisionMade = true;" \n
+ "_actionDone = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class no_instinct
+ {
+ priority = 80.000000;
+ to="reset___checks";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_decisionMade && diag_tickTime - _t > _freqCheck;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class accomplished
+ {
+ priority = 80.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_completeDist < 10 && !_doCOmplete;"/*%FSM*/;
+ action=/*%FSM*/"_doCOmplete = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class follow
+ {
+ priority = 70.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_vipInVeh && _dist > 4 && !_plyrInVeh && !_completeDone;" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/"_doFollow = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class get_in
+ {
+ priority = 60.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_plyrInVeh && _plyrIsDriver && !_vipInVeh && !_completeDone;" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/"_vipIn = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class get_out
+ {
+ priority = 50.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_plyrInVeh && !_vehRunning && _vipInVeh && !_completeDone;"/*%FSM*/;
+ action=/*%FSM*/"_vipOut = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class drive_follow
+ {
+ priority = 40.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_dist > 50 && _vipInVeh && _vehRunning && !_completeDone;"/*%FSM*/;
+ action=/*%FSM*/"_driveFollow = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class scoot_over
+ {
+ priority = 30.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_vipIsDriver && _dist < 6;"/*%FSM*/;
+ action=/*%FSM*/"_doScoot = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class vehicle_damaged
+ {
+ priority = 20.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_transportDisabled && _vehDist < 42;"/*%FSM*/;
+ action=/*%FSM*/"_abandonVeh = true;" \n
+ "_decisionMade = true;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class action
+ {
+ name = "action";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class complete
+ {
+ priority = 100.000000;
+ to="long_checks";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_actionDone && ((call compile _criteria) || (diag_tickTime > (_t + _sWait)));"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "if (!isNil ""_criteriaMetAction"") then {" \n
+ "call _criteriaMetAction;" \n
+ "};" \n
+ "" \n
+ "//Brain Vars" \n
+ "_criteria =""(false)"";" \n
+ "_criteriaMetAction = nil;" \n
+ "_actionDone = false;" \n
+ "_decisionMade = false;" \n
+ "_sWait = 0;" \n
+ "" \n
+ "_sanityCheck > 0;" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 95.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doDispose;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class get_in
+ {
+ priority = 0.000000;
+ to="do_get_in";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_vipIn;"/*%FSM*/;
+ action=/*%FSM*/"_vipIn = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class get_out
+ {
+ priority = 0.000000;
+ to="do_get_out";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_vipOut;"/*%FSM*/;
+ action=/*%FSM*/"_vipOut = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class follow
+ {
+ priority = 0.000000;
+ to="do_follow";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doFollow;"/*%FSM*/;
+ action=/*%FSM*/"_doFollow = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class drive_follow
+ {
+ priority = 0.000000;
+ to="drive_transport";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_driveFollow;"/*%FSM*/;
+ action=/*%FSM*/"_driveFollow = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class scoot
+ {
+ priority = 0.000000;
+ to="scoot_over";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doScoot;"/*%FSM*/;
+ action=/*%FSM*/"_doScoot = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class abandon_vehicle
+ {
+ priority = 0.000000;
+ to="do_abandon";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_abandonVeh"/*%FSM*/;
+ action=/*%FSM*/"_abandonVeh = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class accomplished
+ {
+ priority = 0.000000;
+ to="mission_accompli";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doCOmplete && !_completeDone;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class not_complete
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"diag_tickTime - _nc > 3;"/*%FSM*/;
+ action=/*%FSM*/"_nc = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class spawn_general
+ {
+ priority = 0.000000;
+ to="find_boat";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doGeneralSpawn;"/*%FSM*/;
+ action=/*%FSM*/"_doGeneralSpawn = false;" \n
+ "_boats = [];" \n
+ "_findTimer = diag_TickTime;" \n
+ "" \n
+ "EPOCH_createObject_PVS = [player,Epoch_personalToken,""I_Boat_Armed_01_minigun_F"",true,axeGeneralBoatPos,""CAN_COLLIDE"","""","""","""","""",true];" \n
+ "publicVariableServer ""EPOCH_createObject_PVS"";" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class reset___checks
+ {
+ name = "reset___checks";
+ init = /*%FSM*/"_rnd = floor random 100;" \n
+ "_dist = axeVIP distance _plyr;" \n
+ "_plyrVeh = vehicle _plyr;" \n
+ "_plyrInVeh = vehicle player != player;" \n
+ "_vipInVeh = vehicle axeVIP != axeVIP;" \n
+ "_plyrIsDriver = (driver vehicle player == player) && _plyrInVeh;" \n
+ "_vehRunning = (_vipInVeh && isEngineOn vehicle axeVIP);" \n
+ "_vipIsDriver = (driver vehicle axeVIP == axeVIP) &&_vipInVeh;" \n
+ "_completeDist = axeVIP distance axeGeneralPos;" \n
+ "_transportDisabled = (!canmove _transport);" \n
+ "_vehDist = axeVIP distance _transport;" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "if!(_generalSpawned) then {" \n
+ "" \n
+ " if (axeGeneralPos distance _plyr < 500) then {" \n
+ " _doGeneralSpawn = true;" \n
+ " _decisionMade = true;" \n
+ " };" \n
+ "" \n
+ "};" \n
+ "" \n
+ "if (_completeDone) then {" \n
+ "" \n
+ " if (_plyr distance axeGeneralsBoat > 500) then {" \n
+ " _callDispose = true;" \n
+ " };" \n
+ " " \n
+ " if (count crew axegeneralsboat >= ({alive _x} count units grpVIPGeneral) && _generalLeft < 1) then {" \n
+ " _generalLeft = _generalLeft + 1;" \n
+ " [] spawn {" \n
+ " uiSleep 30;" \n
+ " (driver axeGeneralsBoat) doMove (axeGeneralBoatFinArr select axeGeneralPosIndex);" \n
+ " };" \n
+ " };" \n
+ " };" \n
+ "" \n
+ "" \n
+ "" \n
+ "if (_plyr in (crew axeGeneralsBoat)) then {" \n
+ "playSound3D [""A3\Sounds_F\sfx\alarm.wss"", _plyr];" \n
+ "" \n
+ "if!(_warnStarted) then {" \n
+ "_leaveMsgs = [""Leave the transport immediately !"",format[""%1, I suggest you leave that boat..\nRight Now !"",_nickName],format[""If you value your life %1 disembark.\nRight Now !"",_nickName]];" \n
+ "_leaveMsg = _leaveMsgs select floor (random (count _leaveMsgs));" \n
+ "titleText [_leaveMsg,""PLAIN"",3];" \n
+ "_warnStarted = true;" \n
+ "};" \n
+ "_warnCount = _warnCount + 1;" \n
+ "if (_warnCount > 3) then {" \n
+ "_plyr action [""Eject"", vehicle _plyr];" \n
+ "_warnStarted = false;" \n
+ "_reOrderEmbark = true;" \n
+ "};" \n
+ "};" \n
+ "" \n
+ "//Redoing stuff the player breaks" \n
+ "" \n
+ "if (_reOrderEmbark) then {" \n
+ "[] spawn EPOCH_VIP_Mission_Accomplished;" \n
+ "_reOrderEmbark = false;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "//Messaging" \n
+ "" \n
+ "//Player out of running vehicle message" \n
+ "//Maybe move to long checks - if they work.." \n
+ "" \n
+ "if (!_plyrInVeh && _vehRunning && _vipInVeh && !_completeDone) then {" \n
+ "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""gotout"" >> ""dialogue"");" \n
+ "_wInDiag2 = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""gotout"" >> ""dialogue2"");" \n
+ "" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ "" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ " _wDiag2 = _wInDiag2 select _rndWChoice;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "if (_t - _m > _msgMaxFrequency) then {" \n
+ "" \n
+ "if (_wDiag != """") then {" \n
+ "titleText [_wDiag,""PLAIN"",6];" \n
+ "};" \n
+ "" \n
+ "if (_wDiag2 != """") then {" \n
+ "" \n
+ "_wDiag2 spawn {" \n
+ "uiSleep 6;" \n
+ "titleText [_this,""PLAIN"",6];" \n
+ "};" \n
+ "" \n
+ "};" \n
+ "" \n
+ "_wDiag = """";" \n
+ "_wDiag2 = """";" \n
+ "_m = _t;" \n
+ "};" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class do_instinct
+ {
+ priority = 80.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/"{" \n
+ "deleteVehicle _x;" \n
+ "}forEach units grpVIPGeneral;" \n
+ "" \n
+ "deleteVehicle axeGeneralsBoat;" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_follow
+ {
+ name = "do_follow";
+ init = /*%FSM*/"if (behaviour axeVIP !=""AWARE"") then {" \n
+ "_grp setBehaviour ""AWARE"";" \n
+ "};" \n
+ "_moveTo = [getPosATL _plyr, 3, floor (random 360)] call BIS_fnc_relPos;" \n
+ "axeVIP doMove _moveTo;" \n
+ "" \n
+ "_sWait = axeVIP distance _moveTo;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""((axeVIP distance _moveTo < 2) || (axeVIP distance _plyr < 4))"";"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_get_in
+ {
+ name = "do_get_in";
+ init = /*%FSM*/"if (isNull _transport) then {" \n
+ "_transport = vehicle player;" \n
+ "};" \n
+ "" \n
+ "axeVIP assignAsCargo vehicle player;" \n
+ "[axeVIP] orderGetIn true;" \n
+ "" \n
+ "_sWait = 1.5;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(false)"";"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_get_out
+ {
+ name = "do_get_out";
+ init = /*%FSM*/"axeVIP action [""Eject"", vehicle axeVIP];" \n
+ "unassignVehicle axeVIP;" \n
+ "" \n
+ "_sWait = 1.5;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(false)"";"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class drive_transport
+ {
+ name = "drive_transport";
+ init = /*%FSM*/"_nrRoads = getPos _plyr nearRoads _dist; " \n
+ "if (count _nrRoads > 0) then {" \n
+ "" \n
+ "if (behaviour axeVIP !=""SAFE"") then {" \n
+ "_grp setBehaviour ""SAFE"";" \n
+ "};" \n
+ "axeVIP assignAsDriver vehicle axeVIP;" \n
+ "axeVIP moveInDriver vehicle axeVIP;" \n
+ "_nrstRoads = [_nrRoads, getPosATL _plyr] call Epoch_SortArrayByDistance;" \n
+ "_moveTo = getPosATL (_nrstRoads select 0);" \n
+ "axeVIP doMove _moveTo;" \n
+ "};" \n
+ "" \n
+ "_sWait = axeVIP distance _moveTo;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""((axeVIP distance _moveTo < 12) || (axeVIP distance _plyr < 12))"";"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class scoot_over
+ {
+ name = "scoot_over";
+ init = /*%FSM*/"axeVIP assignAsCargo vehicle axeVIP;" \n
+ "axeVIP moveInCargo vehicle axeVIP;" \n
+ "" \n
+ "_sWait = 1.5;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(false)"";"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_abandon
+ {
+ name = "do_abandon";
+ init = /*%FSM*/"unassignVehicle axeVIP;" \n
+ "_transport = objNull;" \n
+ "" \n
+ "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""vehlost"" >> ""dialogue"");" \n
+ "_wInDiag2 = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""vehlost"" >> ""dialogue2"");" \n
+ "" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ "" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ " _wDiag2 = _wInDiag2 select _rndWChoice;" \n
+ "" \n
+ "_sWait = 1.5;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(false)"";"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class mission_accompli
+ {
+ name = "mission_accompli";
+ init = /*%FSM*/"[] spawn EPOCH_VIP_Mission_Accomplished;" \n
+ "_completeDone = true;" \n
+ "" \n
+ "{" \n
+ "if (_x != axeGeneral && _x != axeVIP) then {" \n
+ "_x setBehaviour ""AWARE"";" \n
+ "};" \n
+ "}forEach units group axeGeneral;" \n
+ "" \n
+ "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""dialogue"");" \n
+ "_wInDiag2 = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""dialogue2"");" \n
+ "" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ "" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ " _wDiag2 = _wInDiag2 select _rndWChoice;" \n
+ "" \n
+ "" \n
+ "if (_wDiag != """") then {" \n
+ "titleText [_wDiag,""PLAIN"",6];" \n
+ "};" \n
+ "" \n
+ "if (_wDiag2 != """") then {" \n
+ "" \n
+ "_wDiag2 spawn {" \n
+ "uiSleep 6;" \n
+ "titleText [_this,""PLAIN"",6];" \n
+ "};" \n
+ "" \n
+ "};" \n
+ "" \n
+ "_wDiag = """";" \n
+ "_wDiag2 = """";" \n
+ "" \n
+ "EPOCH_FillContainer_PVS = [_plyr,Epoch_personalToken,axeGeneralsBoat,false,25];" \n
+ "publicVariableServer ""EPOCH_FillContainer_PVS"";" \n
+ "" \n
+ "_sWait = 1.5;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(false)"";"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class intro
+ {
+ name = "intro";
+ init = /*%FSM*/"" \n
+ "" \n
+ "_pos = (getPosATL player) findEmptyPosition [25,100,""Epoch_Female_CamoRed_F""];" \n
+ "if (_pos isEqualTo []) then {" \n
+ "_pos = getPosATL player;" \n
+ "};" \n
+ "_grp = createGroup (side _plyr);" \n
+ "axeVIP = _grp createUnit [""Epoch_Female_CamoRed_F"",_pos,[],0,""FORM""];" \n
+ "" \n
+ "if !(isNull axeVIP) then {" \n
+ " EPOCH_TEMPOBJ_PVS = axeVIP;" \n
+ " publicVariableServer ""EPOCH_TEMPOBJ_PVS"";" \n
+ "};" \n
+ "" \n
+ "_grp setCombatMode ""BLUE"";" \n
+ "_grp setBehaviour ""AWARE"";" \n
+ "axeVIP setUnitPos ""UP"";" \n
+ "" \n
+ "axeVIP setSkill [""endurance"", 1];" \n
+ "axeVIP setSkill [""spotDistance"", 1];" \n
+ "axeVIP setSkill [""spotTime"", 1];" \n
+ "axeVIP setSkill [""courage"", 0.9];" \n
+ "axeVIP setSkill [""general"", 1];" \n
+ "" \n
+ "" \n
+ "_item=""H_Cap_red"";" \n
+ "axeVIP addItemToVest _item;" \n
+ "axeVIP assignItem _item;" \n
+ "" \n
+ "_item=""G_Tactical_Black"";" \n
+ "axeVIP addItemToVest _item;" \n
+ "axeVIP assignItem _item;" \n
+ "" \n
+ "_wInDiag = getArray ( configFile >> ""traderMissions"" >> _missionName >> ""welcome"" >> ""dialogue"");" \n
+ "_wInDiag2 = getArray ( configFile >> ""traderMissions"" >> _missionName >> ""welcome"" >> ""dialogue2"");" \n
+ "_wInItem = getArray ( configFile >> ""traderMissions"" >> _missionName >> ""welcome"" >> ""item"");" \n
+ "" \n
+ "_rndWChoice = floor (random (count _wInDiag));" \n
+ "" \n
+ " _wDiag = _wInDiag select _rndWChoice;" \n
+ " _wDiag2 = _wInDiag2 select _rndWChoice;" \n
+ "" \n
+ "titleText [_wDiag,""PLAIN"",6];" \n
+ "if (_wDiag2 != """") then {" \n
+ "_wDiag2 spawn {" \n
+ "uiSleep 6;" \n
+ "titleText [_this,""PLAIN"",3];" \n
+ "};" \n
+ "" \n
+ "};" \n
+ "" \n
+ "//Give player end location" \n
+ "[_genPosX,_genPosY] spawn {" \n
+ "uiSleep 12;" \n
+ "_endPosY = format[""0%1"",_this select 0];" \n
+ "titleText [format[""**IMPORTANT**\nThe pickup is at map location %1 - %2"", _endPosY,_this select 1],""PLAIN"",6];" \n
+ "" \n
+ "};" \n
+ "" \n
+ "_wDiag = """";" \n
+ "_wDiag2 = """";" \n
+ "" \n
+ "_wItem = _wInItem select _rndWChoice;" \n
+ "if!(_wItem in assignedItems _plyr) then {" \n
+ "_plyr addItemToVest _wItem;" \n
+ "_plyr assignItem _wItem;" \n
+ "};" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset___checks";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class long_checks
+ {
+ name = "long_checks";
+ init = /*%FSM*/"if (diag_tickTime - _missionTimer > 1200) then {" \n
+ "titleText [""Are you lost ?\nI will check the drop off point for you, wait one."",""PLAIN"",3];" \n
+ "" \n
+ "[_genPosX,_genPosY] spawn {" \n
+ "uiSleep 12;" \n
+ "_endPosY = format[""0%1"",_this select 0];" \n
+ "titleText [format[""**IMPORTANT**\nThe pickup is at map location %1 - %2"", _endPosY,_this select 1],""PLAIN"",6];" \n
+ "" \n
+ "};" \n
+ "" \n
+ "_missionTimer = diag_tickTime;" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class done_long_checks
+ {
+ priority = 100.000000;
+ to="reset___checks";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck < 1;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class spawn_general_and
+ {
+ name = "spawn_general_and";
+ init = /*%FSM*/"" \n
+ "" \n
+ " grpVIPGeneral = createGroup RESISTANCE;" \n
+ "" \n
+ " axeGeneral = grpVIPGeneral createUnit [""I_Soldier_EPOCH"", axeGeneralPos, [], 1, ""CAN_COLLIDE""];" \n
+ " axeGeneral setUnitPos ""UP"";" \n
+ " axeGeneralsBoat setDir ([axeGeneral, axeGeneralsBoat] call BIS_fnc_dirTo);" \n
+ " axeGeneral addEventHandler [""FiredNear"", ""group (_this select 0) setVariable[""""shotsFired"""",[(_this select 1),(_this select 2)]]""];" \n
+ " axeGeneral addEventHandler [""Killed"", ""group (_this select 0) setVariable[""""killer"""",_this select 1]""];" \n
+ " removeAllWeapons axeGeneral;" \n
+ "" \n
+ "if !(isNull axeGeneral) then {" \n
+ " EPOCH_TEMPOBJ_PVS = axeGeneral;" \n
+ " publicVariableServer ""EPOCH_TEMPOBJ_PVS"";" \n
+ "};" \n
+ "" \n
+ " for ""_i"" from 1 to 3 step 1 do" \n
+ " { " \n
+ " _startPos = getPosATL axeGeneral; " \n
+ " " \n
+ " _unit = grpVIPGeneral createUnit [""I_Soldier_EPOCH"", _startPos, [], 20, ""CAN_COLLIDE""];" \n
+ " _unit setBehaviour ""COMBAT"";" \n
+ " _unit addEventHandler [""FiredNear"", ""group (_this select 0) setVariable[""""shotsFired"""",[(_this select 1),(_this select 2)]]""];" \n
+ " _unit addEventHandler [""Killed"", ""group (_this select 0) setVariable[""""killer"""",_this select 1]""];" \n
+ " if !(isNull _unit) then {" \n
+ " EPOCH_TEMPOBJ_PVS = _unit;" \n
+ " publicVariableServer ""EPOCH_TEMPOBJ_PVS"";" \n
+ " };" \n
+ " [_unit,axeGeneral] execFSM ""\x\addons\a3_epoch_code\System\Mission_VIP_Militia.fsm"";" \n
+ "" \n
+ " };" \n
+ "" \n
+ "grpVIPGeneral setCombatMode ""BLUE""; " \n
+ "" \n
+ "_generalSpawned = true;" \n
+ "_sWait = 0;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""(false)"";"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class find_boat
+ {
+ name = "find_boat";
+ init = /*%FSM*/"_boats = nearestObjects [axeGeneralBoatPos, [""I_Boat_Armed_01_minigun_F""], 250];" \n
+ "if (count _boats > 0) then {" \n
+ "axeGeneralsBoat = _boats select 0;" \n
+ "};" \n
+ "" \n
+ "if!(isNull axeGeneralsBoat) then {" \n
+ "axeGeneralsBoat setVehicleLock ""LOCKEDPLAYER""; " \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class found
+ {
+ priority = 20.000000;
+ to="spawn_general_and";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!(isNull axeGeneralsBoat);"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class not_found
+ {
+ priority = 10.000000;
+ to="find_boat";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"isNull axeGeneralsBoat || diag_tickTime - _findTimer > 0.5;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="vip";
+ finalStates[] =
+ {
+ "end"
+ };
+};
+/*%FSM*/
diff --git a/Sources/epoch_code/System/cloak.fsm b/Sources/epoch_code/System/cloak.fsm
new file mode 100644
index 00000000..4afecf44
--- /dev/null
+++ b/Sources/epoch_code/System/cloak.fsm
@@ -0,0 +1,741 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"cloak",0,4346,-225.000000,-300.000000,-125.000000,-250.000000,0.000000,"cloak"};
+item1[] = {"instinct",2,250,150.000000,-200.000000,250.000000,-150.000000,0.000000,"instinct"};
+item2[] = {"action",2,250,150.000000,0.000000,250.000000,50.000000,0.000000,"action"};
+item3[] = {"dispose",4,218,25.000000,-100.000000,125.000000,-50.000000,90.000000,"dispose"};
+item4[] = {"reset___control",2,250,-100.000000,-200.000000,0.000000,-150.000000,0.000000,"reset / control"};
+item5[] = {"_",8,218,-100.000000,-300.000000,0.000000,-250.000000,0.000000,""};
+item6[] = {"complete",4,218,-100.000000,-100.000000,0.000000,-50.000000,100.000000,"complete"};
+item7[] = {"end",1,250,-225.000000,-200.000000,-125.000000,-150.000000,0.000000,"end"};
+item8[] = {"dispose",4,218,-100.000000,0.000000,0.000000,50.000000,120.000000,"dispose"};
+item9[] = {"instinct_done",4,218,150.000000,-100.000000,250.000000,-50.000000,100.000000,"instinct done"};
+item10[] = {"_",8,218,25.000000,-200.000000,125.000000,-150.000000,0.000000,""};
+item11[] = {"final_checks",4,218,650.000000,0.000000,750.000000,50.000000,10.000000,"final checks"};
+item12[] = {"check_status",4,218,475.000000,-175.000000,575.000000,-125.000000,110.000000,"check status"};
+item13[] = {"check_status",4,218,475.000000,-25.000000,575.000000,25.000000,110.000000,"check status"};
+item14[] = {"checking_status",2,250,650.000000,-100.000000,750.000000,-50.000000,0.000000,"checking status"};
+item15[] = {"_",8,218,500.000000,-100.000000,600.000000,-50.000000,5.000000,""};
+item16[] = {"return",2,250,375.000000,-100.000000,475.000000,-50.000000,0.000000,"return"};
+item17[] = {"to_action",4,218,250.000000,-50.000000,350.000000,0.000000,0.000000,"to action"};
+item18[] = {"to_instinct",4,218,250.000000,-150.000000,350.000000,-100.000000,0.000000,"to instinct"};
+item19[] = {"target",4,218,700.000000,-225.000000,800.000000,-175.000000,90.000000,"target"};
+item20[] = {"pre_vars",4,218,575.000000,-225.000000,675.000000,-175.000000,95.000000,"pre vars"};
+item21[] = {"pre_dispose",2,250,-225.000000,0.000000,-125.000000,50.000000,0.000000,"pre dispose"};
+item22[] = {"wait",4,218,-225.000000,-100.000000,-125.000000,-50.000000,0.000000,"wait"};
+item23[] = {"teleport",4,218,150.000000,-300.000000,250.000000,-250.000000,70.000000,"teleport"};
+item24[] = {"teleport",4,218,275.000000,75.000000,375.000000,125.000000,0.000000,"teleport"};
+item25[] = {"call_teleport",2,250,275.000000,150.000000,375.000000,200.000000,0.000000,"call teleport"};
+item26[] = {"_",8,218,150.000000,225.000000,250.000000,275.000000,5.000000,""};
+item27[] = {"voice",4,218,25.000000,-300.000000,125.000000,-250.000000,80.000000,"voice"};
+item28[] = {"voice",4,218,400.000000,75.000000,500.000000,125.000000,0.000000,"voice"};
+item29[] = {"do_voice",2,250,400.000000,175.000000,500.000000,225.000000,0.000000,"do voice"};
+item30[] = {"hover",4,218,275.000000,-300.000000,375.000000,-250.000000,60.000000,"hover"};
+item31[] = {"hover",4,218,525.000000,75.000000,625.000000,125.000000,0.000000,"hover"};
+item32[] = {"call_hover",2,250,525.000000,225.000000,625.000000,275.000000,0.000000,"call hover"};
+link0[] = {0,5};
+link1[] = {1,3};
+link2[] = {1,9};
+link3[] = {1,12};
+link4[] = {1,23};
+link5[] = {1,27};
+link6[] = {1,30};
+link7[] = {2,6};
+link8[] = {2,8};
+link9[] = {2,13};
+link10[] = {2,24};
+link11[] = {2,28};
+link12[] = {2,31};
+link13[] = {3,1};
+link14[] = {4,10};
+link15[] = {5,4};
+link16[] = {6,4};
+link17[] = {8,21};
+link18[] = {9,2};
+link19[] = {10,1};
+link20[] = {11,14};
+link21[] = {12,14};
+link22[] = {13,14};
+link23[] = {14,11};
+link24[] = {14,15};
+link25[] = {14,19};
+link26[] = {14,20};
+link27[] = {15,16};
+link28[] = {16,17};
+link29[] = {16,18};
+link30[] = {17,2};
+link31[] = {18,1};
+link32[] = {19,14};
+link33[] = {20,14};
+link34[] = {21,22};
+link35[] = {22,7};
+link36[] = {23,1};
+link37[] = {24,25};
+link38[] = {25,26};
+link39[] = {26,2};
+link40[] = {27,1};
+link41[] = {28,29};
+link42[] = {29,26};
+link43[] = {30,1};
+link44[] = {31,32};
+link45[] = {32,26};
+globals[] = {25.000000,1,0,0,16777215,640,480,1,259,6316128,1,-197.096085,802.296997,393.904968,-479.966309,683,880,1};
+window[] = {2,-1,-1,-1,-1,707,182,1207,182,3,701};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "cloak brain";
+ class States
+ {
+ /*%FSM*/
+ class cloak
+ {
+ name = "cloak";
+ init = /*%FSM*/"_unit = _this select 0;" \n
+ "_bomb = _this select 1;" \n
+ "_trgt = player;" \n
+ "if(count _this > 2)then{" \n
+ "_trgt = _this select 2;" \n
+ "};" \n
+ "_grp = group _unit;" \n
+ "" \n
+ "//Behaviour Vars" \n
+ "" \n
+ "_cRange = getNumber (missionConfigFile >> ""CfgEpochCloak"" >> ""cRange"");" \n
+ "_cAggression = getNumber (missionConfigFile >> ""CfgEpochCloak"" >> ""cAggression"");" \n
+ "_attackFrequency = getNumber (missionConfigFile >> ""CfgEpochCloak"" >> ""attackFrequency"");" \n
+ "_attackDist = getNumber (missionConfigFile >> ""CfgEpochCloak"" >> ""attackDistance"");" \n
+ "_trgtChangeFreq = getNumber (missionConfigFile >> ""CfgEpochCloak"" >> ""targetChangeFrequency"");" \n
+ "_teleportChance = getNumber (missionConfigFile >> ""CfgEpochCloak"" >> ""teleportChance"");" \n
+ "_hoverFreq = getNumber (missionConfigFile >> ""CfgEpochCloak"" >> ""hoverFrequency"");" \n
+ "_trgtFov = 105;//FOV of player - cloak moves when outside of view" \n
+ "" \n
+ "//Check Vars - Set Defaults" \n
+ "" \n
+ "if(_cRange < 60 || _cRange > 600)then{_cRange = 300;};" \n
+ "if(_cAggression < 1 || _cAggression > 100)then{_cAggression = 75;};" \n
+ "if(_attackFrequency < 120)then{_attackFrequency = 120;};" \n
+ "if(_attackDist < 16)then{_attackDist = 42;};" \n
+ "if(_trgtChangeFreq < 42)then{_trgtChangeFreq = 42;};" \n
+ "if(_teleportChance < 1)then{_teleportChance = 12;};" \n
+ "if(_hoverFreq < 240)then{_hoverFreq = 1280;};" \n
+ "" \n
+ "" \n
+ "" \n
+ "_sHit = [objNull, 0];" \n
+ "_sFiredNear = [objNull, 0];" \n
+ "" \n
+ "//Common" \n
+ "_nrTrgts = [player];" \n
+ "_trgtArray = [""Epoch_Man_Base_F"",""Epoch_Female_base_F""];" \n
+ "" \n
+ "//FSM" \n
+ "_cloakWalkHandle = -1;" \n
+ "_cloakHoverHandle = -1;" \n
+ "" \n
+ "//Control Vars" \n
+ "_sFreqCheck = 1.5;" \n
+ "_lFreqCheck = 12;" \n
+ "_checkEntry = """";" \n
+ "_doneCheck = false;" \n
+ "" \n
+ "//Base Vars" \n
+ "_rnd = 100;" \n
+ "_callDispose = false;" \n
+ "_doDispose = false;" \n
+ "_isBehind = false;" \n
+ "_avDist = _cRange;" \n
+ "_lastAlert = diag_tickTime;" \n
+ "_lastAttack = diag_tickTime;" \n
+ "_lastTrgt = diag_tickTime;" \n
+ "_doTeleport = false;" \n
+ "_callTeleport = false;" \n
+ "_callVoice = false;" \n
+ "_doHover = false;" \n
+ "_callHover = false;" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "_decisionMade = false;" \n
+ "_actionDone = false;" \n
+ "_criteria =""(false)"";" \n
+ "_sWait = 0;" \n
+ "_f = diag_tickTime;" \n
+ "_c = _f - _sFreqCheck;//Ensure checks done straight away on first run" \n
+ "_lastAlert = _f;" \n
+ "_lastFly = _f ;" \n
+ "" \n
+ "//Checks" \n
+ "_dist = 0;" \n
+ "_sanityCheck = 100;" \n
+ "" \n
+ "//Setup" \n
+ "if(behaviour _unit !=""STEALTH"")then{" \n
+ "_grp setBehaviour ""STEALTH"";" \n
+ "};" \n
+ "_unit setUnitPos ""UP""; " \n
+ "" \n
+ "//Debug" \n
+ "_showDebug = {" \n
+ "//hint format [""Cloak: %1\nReady: %2\nBehind: %3\nTarget: %5FPS:%4"",_debugDo,moveToCompleted _unit, _isBehind,diag_fps,_trgt];" \n
+ "};" \n
+ "" \n
+ "axecloak = _unit;" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset___control";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class instinct
+ {
+ name = "instinct";
+ init = /*%FSM*/"//systemchat format [""BI:%1"",diag_tickTime];"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class check_status
+ {
+ priority = 110.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"diag_tickTime > _c + _sFreqCheck;"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = ""instinct"";" \n
+ "_sanityCheck = 100;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class instinct_done
+ {
+ priority = 100.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_decisionMade;"/*%FSM*/;
+ action=/*%FSM*/"_decisionMade = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 90.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"({alive _x} count (_nrTrgts) == 0) || !alive _unit || _callDispose;"/*%FSM*/;
+ action=/*%FSM*/"_doDispose = true;" \n
+ "_decisionMade = true;" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class voice
+ {
+ priority = 80.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_trgtDist < _attackDist && _canSee && diag_tickTime - _lastAttack > _attackFrequency && random 100 < _cAggression) || _callVoice"/*%FSM*/;
+ action=/*%FSM*/"_doVoice = true;" \n
+ "_decisionMade = true;" \n
+ "_callVoice = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class teleport
+ {
+ priority = 70.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_trgtDist < 2 || _callTeleport"/*%FSM*/;
+ action=/*%FSM*/"_doTeleport = true;" \n
+ "_decisionMade = true;" \n
+ "_callTeleport = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class hover
+ {
+ priority = 60.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_callHover"/*%FSM*/;
+ action=/*%FSM*/"_doHover = true;" \n
+ "_decisionMade = true;" \n
+ "_callHover = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class action
+ {
+ name = "action";
+ init = /*%FSM*/"//systemchat format [""BA:%1"",diag_tickTime];"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class dispose
+ {
+ priority = 120.000000;
+ to="pre_dispose";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doDispose;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class check_status
+ {
+ priority = 110.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"diag_tickTime > _c + _sFreqCheck;"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = ""action"";" \n
+ "_sanityCheck = 100;" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class complete
+ {
+ priority = 100.000000;
+ to="reset___control";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_actionDone && ((call compile _criteria) || (diag_tickTime > (_t + _sWait)));"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "if(!isNil ""_criteriaMetAction"")then{" \n
+ "call _criteriaMetAction;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class voice
+ {
+ priority = 0.000000;
+ to="do_voice";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doVoice"/*%FSM*/;
+ action=/*%FSM*/"_doVoice = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class hover
+ {
+ priority = 0.000000;
+ to="call_hover";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doHover"/*%FSM*/;
+ action=/*%FSM*/"_doHover = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class teleport
+ {
+ priority = 0.000000;
+ to="call_teleport";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doTeleport"/*%FSM*/;
+ action=/*%FSM*/"_doTeleport = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class reset___control
+ {
+ name = "reset___control";
+ init = /*%FSM*/"//Brain Vars" \n
+ "_criteria =""(false)"";" \n
+ "_criteriaMetAction = nil;" \n
+ "_actionDone = false;" \n
+ "_sWait = 0;" \n
+ "" \n
+ "" \n
+ "//Walking" \n
+ "if(_cloakWalkHandle < 0)then{" \n
+ "_startLoad = diag_tickTime;" \n
+ "_cloakWalkHandle = [_unit, _trgt] execFSM ""\x\addons\a3_epoch_code\System\cloakOnFoot.fsm"";" \n
+ "axeWalkHandle = _cloakWalkHandle;" \n
+ "//systemchat format[""Call Walking in %1"",diag_tickTime - _startLoad];" \n
+ "};" \n
+ "" \n
+ "//Base Vars" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/"(typeOf _unit) call EPOCH_unitSpawnDecrease;" \n
+ "if!(isNull _unit)then{" \n
+ "deleteVehicle _unit;" \n
+ "};" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class checking_status
+ {
+ name = "checking_status";
+ init = /*%FSM*/"" \n
+ "//Put vars to check in here - only run once per check session." \n
+ "if!(_doneCheck)then{" \n
+ "" \n
+ "_dist = _unit distance _trgt;" \n
+ "" \n
+ "" \n
+ "//systemchat format [""C:%1"",diag_tickTime];" \n
+ "//[] call _showDebug;" \n
+ "" \n
+ "" \n
+ "_doneCheck = true;" \n
+ "};" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class pre_vars
+ {
+ priority = 95.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 95;"/*%FSM*/;
+ action=/*%FSM*/"//_windDir = winddir;" \n
+ "" \n
+ "_sanityCheck = 95;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class target
+ {
+ priority = 90.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 90;"/*%FSM*/;
+ action=/*%FSM*/"_trgtDist = _unit distance _trgt;" \n
+ "_nrTrgts = _unit nearEntities [_trgtArray, _cRange];" \n
+ "_trgtPos = getPosATL _trgt;" \n
+ "_isBehind = !([_trgtPos,getdir _trgt,_trgtFov,position _unit] call BIS_fnc_inAngleSector);" \n
+ "_cloakPos = getPosATL _unit;" \n
+ "_canSee = (!lineIntersects [eyePos _unit, aimPos _trgt, _unit, _trgt]);" \n
+ "" \n
+ "" \n
+ "_tmpDist = 0;" \n
+ "if (count _nrTrgts > 1) then {" \n
+ "" \n
+ "{" \n
+ "_unitDist = _x distance _unit;" \n
+ "_tmpDist = _tmpDist + _unitDist;" \n
+ "" \n
+ "if(_unitDist < 2)then{" \n
+ "_callTeleport = true;" \n
+ "};" \n
+ "" \n
+ "}forEach _nrTrgts;" \n
+ "" \n
+ "_avDist = _tmpDist / (count _nrTrgts);" \n
+ "};" \n
+ "" \n
+ "" \n
+ "if(diag_tickTime - _lastFly > _hoverFreq)then{" \n
+ "if(_cloakHoverHandle < 0 && _canSee && _trgtDist >12)then{" \n
+ "" \n
+ "if((_trgtPos select 2) - (_cloakPos select 2) > 2)then{" \n
+ "_callHover = true;" \n
+ "};" \n
+ "" \n
+ "};" \n
+ "};" \n
+ "" \n
+ "" \n
+ "if(diag_tickTime - _lastTrgt > _trgtChangeFreq)then{" \n
+ "//Target Random Player" \n
+ "if(_avDist < _trgtDist)then{" \n
+ "_trgt = _nrTrgts select (floor (random count _nrTrgts));" \n
+ "};" \n
+ "" \n
+ "if(_cloakWalkHandle > -1)then{" \n
+ "_cloakWalkHandle setFSMVariable[""_trgt"",_trgt];" \n
+ "};" \n
+ "" \n
+ "_lastTrgt = diag_tickTime;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_sanityCheck = 90;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class final_checks
+ {
+ priority = 10.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 10;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "//Target Dead" \n
+ "if(!(alive _trgt) && count _nrTrgts > 0)then{" \n
+ "_trgt = _nrTrgts select (floor (random count _nrTrgts));" \n
+ "};" \n
+ "" \n
+ "//Call random teleport" \n
+ "if!(_isBehind)then{" \n
+ "if(random 100 < (_teleportChance / 15))then{" \n
+ "_callTeleport = true;" \n
+ "};" \n
+ "};" \n
+ "" \n
+ "//Share vars" \n
+ "if(_cloakWalkHandle > -1)then{" \n
+ "" \n
+ "_cloakWalkHandle setFSMVariable[""_canSee"",_canSee];" \n
+ "_cloakWalkHandle setFSMVariable[""_isBehind"",_isBehind];" \n
+ "_cloakWalkHandle setFSMVariable[""_trgtDist"",_trgtDist];" \n
+ "" \n
+ "};" \n
+ "" \n
+ "//call _showDebug;" \n
+ "_sanityCheck = 0;" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="return";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/"_doneCheck = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class return
+ {
+ name = "return";
+ init = /*%FSM*/"_c = diag_tickTime;" \n
+ "_sanityCheck = 100;" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class to_instinct
+ {
+ priority = 0.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_checkEntry == ""instinct"");"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = """";" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class to_action
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_checkEntry == ""action"");"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = """";"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class pre_dispose
+ {
+ name = "pre_dispose";
+ init = /*%FSM*/"//hint ""Dispose cloak Brain"";" \n
+ "" \n
+ "if(_cloakWalkHandle > -1)then{" \n
+ "_cloakWalkHandle setFSMVariable [""_callDispose"", true];" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class wait
+ {
+ priority = 0.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _t) > 120"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class call_teleport
+ {
+ name = "call_teleport";
+ init = /*%FSM*/"[_unit, _trgt] execFSM ""\x\addons\a3_epoch_code\System\cloakTeleport.fsm"";" \n
+ "" \n
+ "_sWait = 0;" \n
+ "_actionDone = true;" \n
+ "_criteria = ""true"";" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/"_doneCheck = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_voice
+ {
+ name = "do_voice";
+ init = /*%FSM*/"_unit setDir ([_unit, _trgt] call BIS_fnc_dirTo);" \n
+ "" \n
+ "" \n
+ "if(diag_tickTime - _lastAlert > 480 && random 100 < _cAggression)then{" \n
+ "_unit say3D ""cultist_laugh"";" \n
+ "EPOCH_say3D_PVS = [player, _unit, 8,Epoch_personalToken];" \n
+ "publicVariableServer ""EPOCH_say3D_PVS"";" \n
+ "_lastAlert = diag_tickTime;" \n
+ "" \n
+ "" \n
+ "}else{" \n
+ "" \n
+ "_unit say3D ""cultist_talk"";" \n
+ "EPOCH_say3D_PVS = [player, _unit, 7,Epoch_personalToken];" \n
+ "publicVariableServer ""EPOCH_say3D_PVS"";" \n
+ "" \n
+ "};" \n
+ "" \n
+ "_lastAttack = diag_tickTime;" \n
+ "_sWait = 0;" \n
+ "_actionDone = true;" \n
+ "_criteria = ""true"";" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/"_doneCheck = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class call_hover
+ {
+ name = "call_hover";
+ init = /*%FSM*/"_cloakHoverHandle = [_unit, _trgt] execFSM ""\x\addons\a3_epoch_code\System\cloakHover.fsm"";" \n
+ "_lastFly = diag_tickTime;" \n
+ "" \n
+ "_sWait = 0;" \n
+ "_actionDone = true;" \n
+ "_criteria = format [""completedFSM %1"", _cloakHoverHandle];" \n
+ "_criteriaMetAction = {" \n
+ "_cloakHoverHandle = -1;" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/"_doneCheck = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="cloak";
+ finalStates[] =
+ {
+ "end",
+ };
+};
+/*%FSM*/
\ No newline at end of file
diff --git a/Sources/epoch_code/System/cloakHover.fsm b/Sources/epoch_code/System/cloakHover.fsm
new file mode 100644
index 00000000..471635cb
--- /dev/null
+++ b/Sources/epoch_code/System/cloakHover.fsm
@@ -0,0 +1,143 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"hover",0,250,50.000000,-225.000000,150.000000,-175.000000,0.000000,"hover"};
+item1[] = {"check",2,250,50.000000,-25.000000,150.000000,25.000000,0.000000,"check"};
+item2[] = {"teleport",2,250,200.000000,75.000000,300.000000,125.000000,0.000000,"teleport"};
+item3[] = {"done",4,218,200.000000,-125.000000,300.000000,-75.000000,0.000000,"done"};
+item4[] = {"arrived",4,218,50.000000,75.000000,150.000000,125.000000,20.000000,"arrived"};
+item5[] = {"end",1,250,200.000000,-225.000000,300.000000,-175.000000,0.000000,"end"};
+item6[] = {"fly",4,4314,200.000000,-25.000000,300.000000,25.000000,10.000000,"fly"};
+item7[] = {"wait",4,218,50.000000,-125.000000,150.000000,-75.000000,0.000000,"wait"};
+link0[] = {0,7};
+link1[] = {1,4};
+link2[] = {1,6};
+link3[] = {2,3};
+link4[] = {3,5};
+link5[] = {4,2};
+link6[] = {6,1};
+link7[] = {7,1};
+globals[] = {25.000000,1,0,0,16777215,640,480,1,269,6316128,1,-183.182861,521.735474,304.026001,-397.056030,735,895,1};
+window[] = {2,-1,-1,-1,-1,700,1775,2800,175,3,753};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "cloak hover";
+ class States
+ {
+ /*%FSM*/
+ class hover
+ {
+ name = "hover";
+ init = /*%FSM*/"_unit = _this select 0;" \n
+ "_trgt = _this select 1;" \n
+ "_t = diag_tickTime;" \n
+ "_unit setUnitPos ""UP""; " \n
+ "" \n
+ "" \n
+ "_cloakDirTo = [_unit, _trgt] call BIS_fnc_dirTo;" \n
+ "_unit setDir _cloakDirTo;" \n
+ "" \n
+ "_unit say3D ""cultist_laugh"";" \n
+ "EPOCH_say3D_PVS = [player, _unit, 8,Epoch_personalToken];" \n
+ "publicVariableServer ""EPOCH_say3D_PVS"";" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class wait
+ {
+ priority = 0.000000;
+ to="check";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"diag_tickTime - _t > 0.75"/*%FSM*/;
+ action=/*%FSM*/"_t = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class check
+ {
+ name = "check";
+ init = /*%FSM*/"_dist = _trgt distance _unit;" \n
+ "_height = (getPosATL _trgt) select 2;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class arrived
+ {
+ priority = 20.000000;
+ to="teleport";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(getPosATL _unit select 2) > _height || _dist < 1.5;" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class fly
+ {
+ priority = 10.000000;
+ to="check";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_arr = [getPosASL _unit, getPosASL _trgt, velocity _unit, velocity _trgt, vectorDir _unit, vectorDir _unit, vectorUp _unit, vectorUp _trgt, 0.1];" \n
+ "_unit setVelocityTransformation _arr;" \n
+ "" \n
+ "" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "//systemchat format [""fly: %1"",getPosATL _unit];"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class teleport
+ {
+ name = "teleport";
+ init = /*%FSM*/"[_unit, _trgt] execFSM ""\x\addons\a3_epoch_code\System\cloakTeleport.fsm"";"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class done
+ {
+ priority = 0.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ };
+ initState="hover";
+ finalStates[] =
+ {
+ "end",
+ };
+};
+/*%FSM*/
\ No newline at end of file
diff --git a/Sources/epoch_code/System/cloakOnFoot.fsm b/Sources/epoch_code/System/cloakOnFoot.fsm
new file mode 100644
index 00000000..fa160c0b
--- /dev/null
+++ b/Sources/epoch_code/System/cloakOnFoot.fsm
@@ -0,0 +1,618 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"cloak",0,250,-225.000000,-300.000000,-125.000000,-250.000000,0.000000,"cloak"};
+item1[] = {"instinct",2,250,150.000000,-200.000000,250.000000,-150.000000,0.000000,"instinct"};
+item2[] = {"action",2,250,150.000000,0.000000,250.000000,50.000000,0.000000,"action"};
+item3[] = {"dispose",4,218,25.000000,-300.000000,125.000000,-250.000000,90.000000,"dispose"};
+item4[] = {"reset___control",2,250,-100.000000,-200.000000,0.000000,-150.000000,0.000000,"reset / control"};
+item5[] = {"_",8,218,-100.000000,-300.000000,0.000000,-250.000000,0.000000,""};
+item6[] = {"complete",4,218,25.000000,0.000000,125.000000,50.000000,100.000000,"complete"};
+item7[] = {"end",1,250,550.000000,125.000000,650.000000,175.000000,0.000000,"end"};
+item8[] = {"dispose",4,218,550.000000,25.000000,650.000000,75.000000,120.000000,"dispose"};
+item9[] = {"instinct_done",4,218,150.000000,-100.000000,250.000000,-50.000000,100.000000,"instinct done"};
+item10[] = {"_",8,218,25.000000,-200.000000,125.000000,-150.000000,0.000000,""};
+item11[] = {"check_status",4,218,475.000000,-175.000000,575.000000,-125.000000,110.000000,"check status"};
+item12[] = {"check_status",4,218,475.000000,-25.000000,575.000000,25.000000,110.000000,"check status"};
+item13[] = {"checking_status",2,250,650.000000,-100.000000,750.000000,-50.000000,0.000000,"checking status"};
+item14[] = {"_",8,218,500.000000,-100.000000,600.000000,-50.000000,5.000000,""};
+item15[] = {"return",2,4346,375.000000,-100.000000,475.000000,-50.000000,0.000000,"return"};
+item16[] = {"to_action",4,218,250.000000,-50.000000,350.000000,0.000000,0.000000,"to action"};
+item17[] = {"to_instinct",4,218,250.000000,-150.000000,350.000000,-100.000000,0.000000,"to instinct"};
+item18[] = {"messsage_centre",2,250,-100.000000,0.000000,0.000000,50.000000,0.000000,"messsage centre"};
+item19[] = {"_",8,218,-100.000000,-100.000000,0.000000,-50.000000,5.000000,""};
+item20[] = {"long_checks",4,218,-225.000000,0.000000,-125.000000,50.000000,100.000000,"long checks"};
+item21[] = {"long_checks",2,250,-225.000000,-100.000000,-125.000000,-50.000000,0.000000,"long checks"};
+item22[] = {"checks",4,218,650.000000,-25.000000,750.000000,25.000000,10.000000,"checks"};
+item23[] = {"lurk",4,218,150.000000,-300.000000,250.000000,-250.000000,50.000000,"lurk"};
+item24[] = {"turn",4,218,400.000000,-300.000000,500.000000,-250.000000,30.000000,"turn"};
+item25[] = {"move",4,218,275.000000,-300.000000,375.000000,-250.000000,40.000000,"move"};
+item26[] = {"do_lurk",2,250,275.000000,250.000000,375.000000,300.000000,0.000000,"do lurk"};
+item27[] = {"turn",4,218,350.000000,100.000000,450.000000,150.000000,20.000000,"turn"};
+item28[] = {"do_turn",2,250,350.000000,325.000000,450.000000,375.000000,0.000000,"do turn"};
+item29[] = {"lurk",4,218,275.000000,125.000000,375.000000,175.000000,70.000000,"lurk"};
+item30[] = {"move_in",4,218,425.000000,75.000000,525.000000,125.000000,0.000000,"move in"};
+item31[] = {"do_move_in",2,250,425.000000,400.000000,525.000000,450.000000,0.000000,"do move in"};
+item32[] = {"_",8,218,150.000000,300.000000,250.000000,350.000000,5.000000,""};
+link0[] = {0,5};
+link1[] = {1,3};
+link2[] = {1,9};
+link3[] = {1,11};
+link4[] = {1,23};
+link5[] = {1,24};
+link6[] = {1,25};
+link7[] = {2,6};
+link8[] = {2,8};
+link9[] = {2,12};
+link10[] = {2,27};
+link11[] = {2,29};
+link12[] = {2,30};
+link13[] = {3,1};
+link14[] = {4,10};
+link15[] = {5,4};
+link16[] = {6,18};
+link17[] = {8,7};
+link18[] = {9,2};
+link19[] = {10,1};
+link20[] = {11,13};
+link21[] = {12,13};
+link22[] = {13,14};
+link23[] = {13,22};
+link24[] = {14,15};
+link25[] = {15,16};
+link26[] = {15,17};
+link27[] = {16,2};
+link28[] = {17,1};
+link29[] = {18,19};
+link30[] = {18,20};
+link31[] = {19,4};
+link32[] = {20,21};
+link33[] = {21,19};
+link34[] = {22,13};
+link35[] = {23,1};
+link36[] = {24,1};
+link37[] = {25,1};
+link38[] = {26,32};
+link39[] = {27,28};
+link40[] = {28,32};
+link41[] = {29,26};
+link42[] = {30,31};
+link43[] = {31,32};
+link44[] = {32,2};
+globals[] = {25.000000,1,0,0,16777215,640,480,1,291,6316128,1,-249.470612,802.491638,578.662292,-375.291077,805,731,1};
+window[] = {2,-1,-1,-1,-1,625,100,1125,100,3,823};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "on foot cloak";
+ class States
+ {
+ /*%FSM*/
+ class cloak
+ {
+ name = "cloak";
+ init = /*%FSM*/"_unit = _this select 0;" \n
+ "_grp = group _unit;" \n
+ "_trgt = player;" \n
+ "if(count _this > 1)then{" \n
+ "_trgt = _this select 1;" \n
+ "};" \n
+ "" \n
+ "//Behaviour Vars" \n
+ "_isBehind = false;" \n
+ "_canSee = false;" \n
+ "_doMove = false;" \n
+ "_doTurn = false;" \n
+ "_doLurk = false;" \n
+ "_lastAlert = diag_tickTime;" \n
+ "" \n
+ "_hoverDist = 12; //Distance for Cloak to approach player and stop at" \n
+ "" \n
+ "//Max x seconds before timing out action, criteria met will be triggered and loop restarts." \n
+ "_lurkTime = 20;//Lurk On player" \n
+ "_sLoiterTime = 6;//Small Loiter" \n
+ "_sMoveTime = 1;//Move toward player in increments of 1m" \n
+ "" \n
+ "//Control Vars" \n
+ "_sFreqCheck = 1.5;" \n
+ "_lFreqCheck = 12;" \n
+ "" \n
+ "//Base Vars" \n
+ "_decisionMade = false;" \n
+ "_callDispose = false;" \n
+ "_doDispose = false;" \n
+ "_t = diag_tickTime;" \n
+ "_c = _t - _sFreqCheck;//Ensure checks done straight away on first run" \n
+ "_l = _t; //Not bothered about long checks" \n
+ "_callDispose = false;" \n
+ "_dirTo = getDir _unit;" \n
+ "_lastDir = _dirTo;" \n
+ "_trgtDist = _trgt distance _unit;" \n
+ "" \n
+ "" \n
+ "" \n
+ "//Checks" \n
+ "_sanityCheck = 100;" \n
+ "" \n
+ "_cloakMoveTo = [];" \n
+ "_debugDo = ""INIT Walk"";" \n
+ "_showDebug = {" \n
+ "//hint format [""CLOAK: %1\nPos: %3\nTarget: %4\nFPS:%2"",_debugDo, diag_fps,_cloakMoveTo, _trgt];" \n
+ "};" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="reset___control";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class instinct
+ {
+ name = "instinct";
+ init = /*%FSM*/"//systemchat format [""WI:%1"",diag_tickTime];"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class check_status
+ {
+ priority = 110.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"diag_tickTime > _c + _sFreqCheck;"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = ""instinct"";" \n
+ "_sanityCheck = 100;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class instinct_done
+ {
+ priority = 100.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_decisionMade;"/*%FSM*/;
+ action=/*%FSM*/"_decisionMade = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class dispose
+ {
+ priority = 90.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_callDispose;"/*%FSM*/;
+ action=/*%FSM*/"_doDispose = true;" \n
+ "_decisionMade = true;" \n
+ "" \n
+ "_debugDo = ""Dispose"";" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class lurk
+ {
+ priority = 50.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_canSee"/*%FSM*/;
+ action=/*%FSM*/"_doLurk = true;" \n
+ "_decisionMade = true;" \n
+ "" \n
+ "_debugDo = ""Lurk"";"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class move
+ {
+ priority = 40.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_canSee && _isBehind && _trgtDist > _hoverDist"/*%FSM*/;
+ action=/*%FSM*/"_doMove = true;" \n
+ "_decisionMade = true;" \n
+ "" \n
+ "_debugDo = ""Move"";"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class turn
+ {
+ priority = 30.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_canSee"/*%FSM*/;
+ action=/*%FSM*/"_doTurn = true;" \n
+ "_loiterType = random 66;" \n
+ "_decisionMade = true;" \n
+ "" \n
+ "_debugDo = ""Turn"";"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class action
+ {
+ name = "action";
+ init = /*%FSM*/"//systemchat format [""WA:%1"",diag_tickTime];" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class dispose
+ {
+ priority = 120.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doDispose;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class check_status
+ {
+ priority = 110.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"diag_tickTime > _c + _sFreqCheck;"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = ""action"";" \n
+ "_sanityCheck = 100;" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class complete
+ {
+ priority = 100.000000;
+ to="messsage_centre";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_actionDone && ((call compile _criteria) || (diag_tickTime > (_t + _sWait)));"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "if(!isNil ""_criteriaMetAction"")then{" \n
+ "call _criteriaMetAction;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class lurk
+ {
+ priority = 70.000000;
+ to="do_lurk";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doLurk;"/*%FSM*/;
+ action=/*%FSM*/"_doLurk = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class turn
+ {
+ priority = 20.000000;
+ to="do_turn";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doTurn;" \n
+ "" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/"_doTurn = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class move_in
+ {
+ priority = 0.000000;
+ to="do_move_in";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doMove;"/*%FSM*/;
+ action=/*%FSM*/"_doMove = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class reset___control
+ {
+ name = "reset___control";
+ init = /*%FSM*/"//Brain Vars" \n
+ "_criteria =""(false)"";" \n
+ "_criteriaMetAction = nil;" \n
+ "_actionDone = false;" \n
+ "_sWait = 0;" \n
+ "" \n
+ "_behindDist = (floor( random 10)+15);//Distance to aim for when player sight lost." \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/"//hint ""Dispose Sapper Walking"";" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class checking_status
+ {
+ name = "checking_status";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class checks
+ {
+ priority = 10.000000;
+ to="checking_status";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_sanityCheck > 10;"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "" \n
+ "_sanityCheck = 0;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="return";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/"_doneCheck = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class return
+ {
+ name = "return";
+ init = /*%FSM*/"_c = diag_tickTime;" \n
+ "_sanityCheck = 100;" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class to_instinct
+ {
+ priority = 0.000000;
+ to="instinct";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_checkEntry == ""instinct"");"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = """";" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class to_action
+ {
+ priority = 0.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(_checkEntry == ""action"");"/*%FSM*/;
+ action=/*%FSM*/"_checkEntry = """";"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class messsage_centre
+ {
+ name = "messsage_centre";
+ init = /*%FSM*/"//systemchat format [""WM:%1"",diag_tickTime];" \n
+ "//Use lip movement when talking" \n
+ "//_unit setRandomLip true;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class long_checks
+ {
+ priority = 100.000000;
+ to="long_checks";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"diag_tickTime > _l + _lFreqCheck;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="reset___control";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class long_checks
+ {
+ name = "long_checks";
+ init = /*%FSM*/"" \n
+ "//systemchat ""Walk Long Check"";" \n
+ "_l = diag_tickTime;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="reset___control";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_lurk
+ {
+ name = "do_lurk";
+ init = /*%FSM*/"" \n
+ "_dirBehind = (getDir _trgt) - (floor (random 40)+160);" \n
+ "if (_dirBehind<0) then {_dirBehind=_dirBehind+360;};" \n
+ "" \n
+ "_cloakMoveTo = [_trgt,_behindDist, _dirBehind] call BIS_fnc_relPos;" \n
+ "" \n
+ "_unit forceSpeed 3;" \n
+ "_unit moveTo _cloakMoveTo;" \n
+ "" \n
+ "" \n
+ "_sWait = _lurkTime;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""moveToCompleted _unit || _canSee"";" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_turn
+ {
+ name = "do_turn";
+ init = /*%FSM*/"_unit forceSpeed 0;" \n
+ "_dirTo = [_unit, _trgt] call BIS_fnc_dirTo;" \n
+ "_unit setDir _dirTo;" \n
+ "_lastDir = _dirTo;" \n
+ "_sWait = _sLoiterTime;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""true"";"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_move_in
+ {
+ name = "do_move_in";
+ init = /*%FSM*/"_cloakDirTo = [_trgt, _unit] call BIS_fnc_dirTo;" \n
+ "_cloakMoveTo = [_trgt,_hoverDist, _cloakDirTo] call BIS_fnc_relPos;" \n
+ "" \n
+ "_unit forceSpeed 2;" \n
+ "_unit moveTo _cloakMoveTo;" \n
+ "" \n
+ "_sWait = _sMoveTime;" \n
+ "_actionDone = true;" \n
+ "_t = diag_tickTime;" \n
+ "_criteria = ""moveToCompleted _unit || !_isBehind"";" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 5.000000;
+ to="action";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="cloak";
+ finalStates[] =
+ {
+ "end",
+ };
+};
+/*%FSM*/
\ No newline at end of file
diff --git a/Sources/epoch_code/System/cloakTeleport.fsm b/Sources/epoch_code/System/cloakTeleport.fsm
new file mode 100644
index 00000000..334ae037
--- /dev/null
+++ b/Sources/epoch_code/System/cloakTeleport.fsm
@@ -0,0 +1,153 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"init",0,250,-125.000000,-125.000000,-25.000000,-75.000000,0.000000,"init"};
+item1[] = {"create_telelport",2,250,200.000000,-125.000000,300.000000,-75.000000,0.000000,"create telelport"};
+item2[] = {"wait",4,218,200.000000,0.000000,300.000000,50.000000,0.000000,"wait"};
+item3[] = {"_",8,218,50.000000,-125.000000,150.000000,-75.000000,0.000000,""};
+item4[] = {"end",1,250,50.000000,0.000000,150.000000,50.000000,0.000000,"end"};
+item5[] = {"do_teleport",2,4346,200.000000,125.000000,300.000000,175.000000,0.000000,"do teleport"};
+item6[] = {"wait",4,218,50.000000,125.000000,150.000000,175.000000,0.000000,"wait"};
+item7[] = {"end_teleport",2,250,-125.000000,125.000000,-25.000000,175.000000,0.000000,"end teleport"};
+item8[] = {"_",8,218,-125.000000,0.000000,-25.000000,50.000000,0.000000,""};
+link0[] = {0,3};
+link1[] = {1,2};
+link2[] = {2,5};
+link3[] = {3,1};
+link4[] = {5,6};
+link5[] = {6,7};
+link6[] = {7,8};
+link7[] = {8,4};
+globals[] = {25.000000,1,0,0,16777215,640,480,1,273,6316128,1,-305.318909,573.741272,405.862030,-267.499969,952,731,1};
+window[] = {2,-1,-1,-1,-1,675,150,1175,150,3,970};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "cloak teleport";
+ class States
+ {
+ /*%FSM*/
+ class init
+ {
+ name = "init";
+ init = /*%FSM*/"_unit = _this select 0;" \n
+ "_trgt = _this select 1;" \n
+ "_t = diag_tickTime;" \n
+ "" \n
+ "//systemChat ""TELEPORT"";" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="create_telelport";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class create_telelport
+ {
+ name = "create_telelport";
+ init = /*%FSM*/"_unit allowDamage false;" \n
+ "" \n
+ "_flame = ""#particlesource"" createVehicleLocal getPosATL _unit;" \n
+ "_flame setParticleClass ""ObjectDestructionFire2SmallxB"";" \n
+ "_flame attachto [_unit,[0,0,0]];" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class wait
+ {
+ priority = 0.000000;
+ to="do_teleport";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"diag_tickTime - _t > 1.5"/*%FSM*/;
+ action=/*%FSM*/"_t = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do_teleport
+ {
+ name = "do_teleport";
+ init = /*%FSM*/"" \n
+ "_dirBehind = (getDir _trgt) - (floor (random 40)+160);" \n
+ "if (_dirBehind<0) then {_dirBehind=_dirBehind+360;};" \n
+ "_dist = (_unit distance _trgt) max 12;" \n
+ "" \n
+ "_relPos = [_trgt,_dist, _dirBehind] call BIS_fnc_relPos;" \n
+ "" \n
+ "_cloakMoveTo = _relPos findEmptyPosition [0,(random 24) + 18,typeOf _unit];" \n
+ "" \n
+ "_unit setPos _cloakMoveTo;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class wait
+ {
+ priority = 0.000000;
+ to="end_teleport";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"diag_tickTime - _t > 0.5"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end_teleport
+ {
+ name = "end_teleport";
+ init = /*%FSM*/"deleteVehicle _flame;" \n
+ "_unit allowDamage true;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class _
+ {
+ priority = 0.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="init";
+ finalStates[] =
+ {
+ "end",
+ };
+};
+/*%FSM*/
\ No newline at end of file
diff --git a/Sources/epoch_code/System/dummy.sqf b/Sources/epoch_code/System/dummy.sqf
new file mode 100644
index 00000000..b76b56ef
--- /dev/null
+++ b/Sources/epoch_code/System/dummy.sqf
@@ -0,0 +1,2 @@
+Epoch_loadFailed = true;
+publicVariable "Epoch_loadFailed";
\ No newline at end of file
diff --git a/Sources/epoch_code/System/flocking.fsm b/Sources/epoch_code/System/flocking.fsm
new file mode 100644
index 00000000..18754544
--- /dev/null
+++ b/Sources/epoch_code/System/flocking.fsm
@@ -0,0 +1,443 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"flock_member",0,250,-50.000000,-150.000000,50.000000,-100.000000,0.000000,"flock member"};
+item1[] = {"pre_vars",4,218,75.000000,0.000000,175.000000,50.000000,90.000000,"pre vars"};
+item2[] = {"do",2,250,-50.000000,0.000000,50.000000,50.000000,0.000000,"do"};
+item3[] = {"start",8,218,-50.000000,-75.000000,50.000000,-25.000000,0.000000,"start"};
+item4[] = {"cohesion",4,218,-50.000000,75.000000,50.000000,125.000000,70.000000,"cohesion"};
+item5[] = {"separation",4,218,-175.000000,75.000000,-75.000000,125.000000,60.000000,"separation"};
+item6[] = {"alignment",4,218,75.000000,75.000000,175.000000,125.000000,80.000000,"alignment"};
+item7[] = {"apply",4,4314,-175.000000,0.000000,-75.000000,50.000000,50.000000,"apply"};
+item8[] = {"end",1,250,-175.000000,-150.000000,-75.000000,-100.000000,0.000000,"end"};
+item9[] = {"dead",4,218,-175.000000,-75.000000,-75.000000,-25.000000,100.000000,"dead"};
+item10[] = {"debug",4,218,75.000000,-75.000000,175.000000,-25.000000,0.000000,"debug"};
+link0[] = {0,3};
+link1[] = {1,2};
+link2[] = {2,1};
+link3[] = {2,4};
+link4[] = {2,5};
+link5[] = {2,6};
+link6[] = {2,7};
+link7[] = {2,9};
+link8[] = {2,10};
+link9[] = {3,2};
+link10[] = {4,2};
+link11[] = {5,2};
+link12[] = {6,2};
+link13[] = {7,2};
+link14[] = {9,8};
+link15[] = {10,2};
+globals[] = {25.000000,1,0,0,0,640,480,1,15,6316128,1,-290.597351,361.043304,268.212158,-321.329132,808,731,1};
+window[] = {2,-1,-1,-1,-1,775,150,1350,150,3,826};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "flock";
+ class States
+ {
+ /*%FSM*/
+ class flock_member
+ {
+ name = "flock_member";
+ init = /*%FSM*/"//" \n
+ "//Flocking Behaviour AI" \n
+ "//" \n
+ "//An attempt to make UAVs fly with flock / bird like behaviour." \n
+ "//" \n
+ "//" \n
+ "//CONTROLS:" \n
+ "//" \n
+ "//INS / DEL - Alignment Up / Down" \n
+ "//Home / End - Cohesion Up / Down" \n
+ "//PG Up / Pg Dn - Separate up / Down" \n
+ "//Up / Down Arrow - Speed Up / Down" \n
+ "//Left / Right Arrow - Script Speed Up / Down" \n
+ "" \n
+ "_unit = _this select 0;" \n
+ "_trgt = player;" \n
+ "_doCheck = 100;" \n
+ "_zPos = 48;" \n
+ "_neighborzone = [0,6];" \n
+ "_relativeZone = [6,800];" \n
+ "_t = diag_tickTime;" \n
+ "_running =false;" \n
+ "_inclPlayer = false;" \n
+ "" \n
+ "_defaultAlign = 0.08;" \n
+ "_defaultCohese = 0.24;" \n
+ "_defaultSeparate = 0.66;" \n
+ "_defaultSpeed = 5.5 ;" \n
+ "_defaultResponse = 0.8;" \n
+ "" \n
+ "//Control Vars" \n
+ "if (isNil ""axeLoopTime"")then{" \n
+ "axeLoopTime = _defaultResponse;" \n
+ "};" \n
+ "" \n
+ "_loopTimeRand = random (axeLoopTime / 10);" \n
+ "" \n
+ "if (isNil ""axeSpeed"")then{" \n
+ "axeSpeed = _defaultSpeed;" \n
+ "};" \n
+ "if (isNil ""axeWeightAlign"")then{" \n
+ "axeWeightAlign = _defaultAlign;" \n
+ "};" \n
+ "if (isNil ""axeWeightCohese"")then{" \n
+ "axeWeightCohese = _defaultCohese;" \n
+ "};" \n
+ "if (isNil ""axeWeightSpearate"")then{" \n
+ "axeWeightSpearate =_defaultSeparate;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_rtrnVectorDist = {" \n
+ "_v1 = _this select 0;" \n
+ "_v2 = _this select 1;" \n
+ "_out = sqrt (((_v2 select 0) - (_v1 select 0)) ^ 2 + ((_v2 select 1) - (_v1 select 1)) ^ 2 + ((_v2 select 2) - (_v1 select 2)) ^ 2);" \n
+ "_out" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "//Debug" \n
+ "_debugDo = true;" \n
+ "_debugTime = 1;" \n
+ "_d = _t;" \n
+ "_debugMrkrName = """";" \n
+ "" \n
+ "" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class start
+ {
+ priority = 0.000000;
+ to="do";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class do
+ {
+ name = "do";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class dead
+ {
+ priority = 100.000000;
+ to="end";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!alive _unit"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class pre_vars
+ {
+ priority = 90.000000;
+ to="do";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doCheck > 90 && diag_tickTime - _t > (axeLoopTime + _loopTimeRand) && !_running"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_running = true;" \n
+ "_neighbourCount = 0;" \n
+ "_validNeighbourCount = 0;" \n
+ "" \n
+ "_allElements = [];" \n
+ "_neighboursIn = nearestObjects [_unit,[""UAV_01_base_F""],_neighborzone select 1];" \n
+ "_neighbours = [];" \n
+ "_relativesIn = nearestObjects [_unit,[""UAV_01_base_F""],_relativeZone select 1];" \n
+ "_relatives = [];" \n
+ "" \n
+ "if(_inclPlayer)then{" \n
+ "_neighboursIn pushBack player;" \n
+ "_relativesIn pushBack player;" \n
+ "};" \n
+ "" \n
+ "//Clean Zones" \n
+ "" \n
+ "{" \n
+ "" \n
+ " if(_x distance _unit > (_neighborzone select 0))then{" \n
+ " _neighbours pushBack _x;" \n
+ " };" \n
+ "" \n
+ " " \n
+ "" \n
+ "}forEach _neighboursIn;" \n
+ "" \n
+ "{" \n
+ "" \n
+ " if(_x distance _unit > (_relativeZone select 0))then{" \n
+ " _relatives pushBack _x;" \n
+ " };" \n
+ "" \n
+ "_allElements pushBack _x;" \n
+ "" \n
+ "}forEach _relativesIn;" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "_neighbourCount = count _neighbours;" \n
+ "_relativeCount = count _relatives;" \n
+ "" \n
+ "_unitPos = getPosATL _unit;" \n
+ "axeLineStart = _unitPos;" \n
+ "_posZ = _unitPos select 2;" \n
+ "" \n
+ "//Alignment" \n
+ "_vectorAlOut = [0,0,0];" \n
+ "_vectorAl = [0,0,0];" \n
+ "_velXal = 0;" \n
+ "_velYal = 0;" \n
+ "//Additional" \n
+ "_dirTo = 0;" \n
+ "" \n
+ "//Cohesion" \n
+ "_vectorCoh = [0,0,0];" \n
+ "_posXco = 0;" \n
+ "_posYco = 0;" \n
+ "" \n
+ "//Separation" \n
+ "_vectorSep = [0,0,0];" \n
+ "_vectorDist = [];" \n
+ "_vectorSepOut = [];" \n
+ "_posXSe = 0;" \n
+ "_posYSe = 0;" \n
+ "_posZSe = 0;" \n
+ "" \n
+ "//Output" \n
+ "_velX = 0;" \n
+ "_velY = 0;" \n
+ "_velOut = [];" \n
+ "_velocity = nil;" \n
+ "" \n
+ "_doCheck = 90;" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class alignment
+ {
+ priority = 80.000000;
+ to="do";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doCheck > 80 && _running"/*%FSM*/;
+ action=/*%FSM*/"_validNeighbourCount = 0;" \n
+ "if(_relativeCount > 0)then{" \n
+ "" \n
+ " {" \n
+ "" \n
+ " if(_x != _unit)then{" \n
+ " " \n
+ " if(alive _x)then{" \n
+ " " \n
+ " _velXal = _velXal + ((velocity _x) select 0);" \n
+ " _velYal = _velYal + ((velocity _x) select 1);" \n
+ " _validNeighbourCount = _validNeighbourCount + 1;" \n
+ " _dirTo = _dirTo + ([getPosATL _unit, getPosATL _x] call BIS_fnc_dirTo);" \n
+ "" \n
+ " };" \n
+ "" \n
+ " };" \n
+ " " \n
+ " }forEach _allElements;" \n
+ "" \n
+ "_velXal = _velXal / _validNeighbourCount;" \n
+ "_velYal = _velYal / _validNeighbourCount;" \n
+ "" \n
+ "_dirTo = _dirTo / _validNeighbourCount;//Experiment with direction" \n
+ "" \n
+ "_vectorAlOut set [0, _velXal];" \n
+ "_vectorAlOut set [1, _velYal];" \n
+ "" \n
+ "_vectorAl = vectorNormalized _vectorAlOut; " \n
+ "" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "_doCheck = 80;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class cohesion
+ {
+ priority = 70.000000;
+ to="do";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doCheck > 70 && _running"/*%FSM*/;
+ action=/*%FSM*/" _validNeighbourCount = 0;" \n
+ "if(_relativeCount > 0)then{" \n
+ "" \n
+ " {" \n
+ "" \n
+ " if(_x != _unit)then{" \n
+ " " \n
+ " if(alive _x)then{" \n
+ " " \n
+ " _posXco = _posXco + (getPosATL _x select 0);" \n
+ " _posYco = _posYco + (getPosATL _x select 1);" \n
+ " _validNeighbourCount = _validNeighbourCount + 1;" \n
+ " " \n
+ " };" \n
+ "" \n
+ " };" \n
+ " " \n
+ " }forEach _relatives;" \n
+ "" \n
+ "_posXco = _posXco / _validNeighbourCount;" \n
+ "_posYco = _posYco / _validNeighbourCount;" \n
+ "" \n
+ "_vectorCoh = [_unitPos select 0,_unitPos select 1,_posZ] vectorDiff [_posXco,_posYco,_posZ];" \n
+ "" \n
+ "};" \n
+ "" \n
+ "" \n
+ " " \n
+ "_doCheck = 70;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class separation
+ {
+ priority = 60.000000;
+ to="do";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doCheck > 60 && _running"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "if(count _neighbours > 0)then{" \n
+ "" \n
+ " {" \n
+ "" \n
+ " if(_x != _unit)then{" \n
+ " " \n
+ " if(alive _x)then{" \n
+ "" \n
+ " _posXse = _posXse + (getPosATL _x select 0);" \n
+ " _posYse = _posYse + (getPosATL _x select 1);" \n
+ " _validNeighbourCount = _validNeighbourCount + 1;" \n
+ " };" \n
+ "" \n
+ " };" \n
+ " " \n
+ " }forEach _neighbours;" \n
+ "" \n
+ "_posXse = _posXse / _validNeighbourCount;" \n
+ "_posYse = _posYse / _validNeighbourCount;" \n
+ "" \n
+ "_posXse =_posXse * -1;" \n
+ "_posYse =_posYse * -1;" \n
+ "_posZSe =_posZSe * -1;" \n
+ "" \n
+ "_vectorSep = [_unitPos select 0,_unitPos select 1,_posZ] vectorDiff [_posXse,_posYse,_posZSe];" \n
+ "" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_doCheck = 60;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class apply
+ {
+ priority = 50.000000;
+ to="do";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_doCheck > 50 && _running"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "_velX = ((_vectorAl select 0) * axeWeightAlign) + ((_vectorCoh select 0) * axeWeightCohese) + ((_vectorSep select 0) * axeWeightSpearate);" \n
+ "_velY = ((_vectorAl select 1) * axeWeightAlign) + ((_vectorCoh select 1) * axeWeightCohese) + ((_vectorSep select 1) * axeWeightSpearate);" \n
+ "_velZ = 0;" \n
+ "" \n
+ "if(_unitPos select 2 < 6)then{" \n
+ "_velZ = 10;" \n
+ "};" \n
+ "_velOut = [_velX, _velY, _velZ];" \n
+ "_velocity = vectorNormalized _velOut; " \n
+ "" \n
+ "//Speed" \n
+ "" \n
+ "_velocity set [0, (_velocity select 0) * axeSpeed];" \n
+ "_velocity set [1, (_velocity select 1) * axeSpeed];" \n
+ "" \n
+ "" \n
+ "_unit setDir _dirTo;//Additional - Trying to fix the spreading issue" \n
+ "" \n
+ "" \n
+ "//_unit limitSpeed axeSpeed; " \n
+ "//_unit setVelocity (_unit modelToWorld _velOut);" \n
+ "_unit setVelocity ( (velocity _unit) vectorDiff _velocity);" \n
+ "" \n
+ "_doCheck = 100;" \n
+ "_t = diag_tickTime;" \n
+ "_loopTimeRand = random (axeLoopTime / 3);" \n
+ "_running = false;" \n
+ "" \n
+ "" \n
+ "//DEBUG" \n
+ "//systemchat format [""%1 | %2"", ( (getposatl _unit) vectorDiff _velocity), _velocity];" \n
+ "axeLineFinish = (_unit modelToWorld _velocity);"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class debug
+ {
+ priority = 0.000000;
+ to="do";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_debugDo && diag_ticKtime - _d > _debugTime"/*%FSM*/;
+ action=/*%FSM*/"" \n
+ "" \n
+ "_pos = getPosATl _unit;" \n
+ "deleteMarkerLocal _debugMrkrName;" \n
+ "_debugMrkrName = format[""axe%1"", name _unit];" \n
+ "_mkr = createMarkerLocal [_debugMrkrName, _pos];" \n
+ "_debugMrkrName setMarkerShapeLocal ""ICON"";" \n
+ "_debugMrkrName setMarkerTypeLocal ""mil_dot"";" \n
+ "_debugMrkrName setMarkerColorLocal ""COLORGREEN"";" \n
+ "_debugMrkrName setMarkerSizeLocal [0.9,0.9];" \n
+ "" \n
+ "" \n
+ "_d = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class end
+ {
+ name = "end";
+ init = /*%FSM*/"" \n
+ "" \n
+ "deleteVehicle _unit;" \n
+ "deleteMarkerLocal _debugMrkrName;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ };
+ initState="flock_member";
+ finalStates[] =
+ {
+ "end"
+ };
+};
+/*%FSM*/
diff --git a/Sources/epoch_code/System/gender_selection.fsm b/Sources/epoch_code/System/gender_selection.fsm
new file mode 100644
index 00000000..ca119046
--- /dev/null
+++ b/Sources/epoch_code/System/gender_selection.fsm
@@ -0,0 +1,290 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"INIT",0,250,-250.000000,-150.000000,-150.000000,-100.000000,0.000000,"INIT"};
+item1[] = {"Respone",4,218,-500.000000,300.000000,-400.000000,350.000000,0.000000,"Respone"};
+item2[] = {"true",8,218,-250.000000,-75.000000,-150.000000,-25.000000,0.000000,"true"};
+item3[] = {"Open_Gender_Selection",2,250,-400.000000,-75.000000,-300.000000,-25.000000,0.000000,"Open Gender" \n "Selection Dialog"};
+item4[] = {"Reopen_when_client",4,218,-400.000000,-150.000000,-300.000000,-100.000000,0.000000,"Reopen" \n "when client hit" \n "escape"};
+item5[] = {"Gender_Selected",4,218,-450.000000,0.000000,-350.000000,50.000000,10.000000,"Gender" \n "Selected"};
+item6[] = {"Timeout",4,218,-350.000000,0.000000,-250.000000,50.000000,0.000000,"Timeout"};
+item7[] = {"Process",2,250,-400.000000,75.000000,-300.000000,125.000000,0.000000,"Process"};
+item8[] = {"same_gender",4,218,-250.000000,75.000000,-150.000000,125.000000,10.000000,"same" \n "gender"};
+item9[] = {"other_gender",4,218,-400.000000,150.000000,-300.000000,200.000000,0.000000,"other" \n "gender"};
+item10[] = {"Send_To_Server",3,250,-125.000000,75.000000,-25.000000,125.000000,0.000000,"Send To Server"};
+item11[] = {"TODO__ADD_TIMEOUT",4,4314,-275.000000,250.000000,-175.000000,300.000000,0.000000,"TODO:" \n "ADD TIMEOUT" \n "AND LOBBY KICK"};
+item12[] = {"END",1,250,0.000000,450.000000,100.000000,500.000000,0.000000,"END"};
+item13[] = {"Send_new_selection",2,250,-400.000000,250.000000,-300.000000,300.000000,0.000000,"Send new" \n "selection to" \n "server"};
+item14[] = {"Select_Model",2,250,-400.000000,350.000000,-300.000000,400.000000,0.000000,"Select Model"};
+item15[] = {"new_model____pla",4,218,-525.000000,400.000000,-425.000000,450.000000,0.000000,"new model" \n "==" \n "player"};
+item16[] = {"Setup_EH",2,250,-400.000000,450.000000,-300.000000,500.000000,0.000000,"Setup EH"};
+item17[] = {"true",8,218,-125.000000,450.000000,-25.000000,500.000000,0.000000,"true"};
+item18[] = {"____FAKE____",9,720,0.000000,0.000000,0.000000,0.000000,0.000000,"____FAKE____"};
+link0[] = {0,2};
+link1[] = {1,14};
+link2[] = {2,3};
+link3[] = {3,4};
+link4[] = {3,5};
+link5[] = {3,6};
+link6[] = {4,3};
+link7[] = {5,7};
+link8[] = {6,7};
+link9[] = {7,8};
+link10[] = {7,9};
+link11[] = {8,10};
+link12[] = {9,13};
+link13[] = {10,17};
+link14[] = {13,1};
+link15[] = {13,11};
+link16[] = {14,15};
+link17[] = {15,16};
+link18[] = {16,17};
+link19[] = {17,12};
+link20[] = {11,18};
+globals[] = {25.000000,1,0,0,0,640,480,1,250,6316128,1,-786.968628,194.189285,571.765747,-266.728790,1066,911,1};
+window[] = {2,-1,-1,-1,-1,753,25,1063,25,3,1084};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "Gender Selection";
+ class States
+ {
+ /*%FSM*/
+ class INIT
+ {
+ name = "INIT";
+ init = /*%FSM*/"titleCut ["""", ""BLACK FADED"", 1337];" \n
+ "0 fadeSound 0;" \n
+ "EPOCH_PlayerIsMale = nil;" \n
+ "" \n
+ "_myGenderTime = diag_tickTime;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Open_Gender_Selection";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Open_Gender_Selection
+ {
+ name = "Open_Gender_Selection";
+ init = /*%FSM*/"createdialog ""SelectGender"";"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Gender_Selected
+ {
+ priority = 10.000000;
+ to="Process";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!isNil ""EPOCH_PlayerIsMale"""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Timeout
+ {
+ priority = 0.000000;
+ to="Process";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"((diag_tickTime - _myGenderTime) > 30)"/*%FSM*/;
+ action=/*%FSM*/"EPOCH_PlayerIsMale = true;" \n
+ "closeDialog 0;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Reopen_when_client
+ {
+ priority = 0.000000;
+ to="Open_Gender_Selection";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!dialog && isNil ""EPOCH_PlayerIsMale"""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Process
+ {
+ name = "Process";
+ init = /*%FSM*/"_model = ""Epoch_Female_F"";" \n
+ "if (EPOCH_PlayerIsMale) then {" \n
+ " _model = ""Epoch_Male_F"";" \n
+ "};" \n
+ "" \n
+ "_currModel = typeOf player;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class same_gender
+ {
+ priority = 10.000000;
+ to="Send_To_Server";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_currModel == _model"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class other_gender
+ {
+ priority = 0.000000;
+ to="Send_new_selection";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_currModel != _model"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Send_To_Server
+ {
+ name = "Send_To_Server";
+ init = /*%FSM*/"EPOCH_respawnPlayer_PVS = [player, Epoch_personalToken];" \n
+ "publicVariableServer ""EPOCH_respawnPlayer_PVS"";"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="END";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class END
+ {
+ name = "END";
+ init = /*%FSM*/"titleCut ["""", ""BLACK IN"", 1];" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Send_new_selection
+ {
+ name = "Send_new_selection";
+ init = /*%FSM*/"EPOCH_respawnPlayer_PVS = [player, Epoch_personalToken,EPOCH_PlayerIsMale];" \n
+ "publicVariableServer ""EPOCH_respawnPlayer_PVS"";"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class TODO__ADD_TIMEOUT
+ {
+ priority = 0.000000;
+ to="____FAKE____";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"false"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Respone
+ {
+ priority = 0.000000;
+ to="Select_Model";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!isNil ""EPOCH_switchPlayer_PVC"""/*%FSM*/;
+ action=/*%FSM*/"_playerObject = EPOCH_switchPlayer_PVC;" \n
+ "EPOCH_switchPlayer_PVC = nil;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Select_Model
+ {
+ name = "Select_Model";
+ init = /*%FSM*/"_oldModel = player;" \n
+ "selectPlayer _playerObject;" \n
+ "deleteVehicle _oldModel;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class new_model____pla
+ {
+ priority = 0.000000;
+ to="Setup_EH";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_playerObject == player"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Setup_EH
+ {
+ name = "Setup_EH";
+ init = /*%FSM*/"player addEventHandler [""Respawn"", {(_this select 0) call EPOCH_clientRespawn}];" \n
+ "player addEventHandler [""Put"", {(_this select 1) call EPOCH_interact;_this call EPOCH_PutHandler}];" \n
+ "player addEventHandler [""Take"", {(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck}];" \n
+ "player addEventHandler [""InventoryClosed"", {if !(EPOCH_arr_interactedObjs isEqualTo[]) then {EPOCH_arr_interactedObjs remoteExec[""EPOCH_server_save_vehicles"", 2]; EPOCH_arr_interactedObjs = [];};}];" \n
+ "player addEventHandler [""InventoryOpened"", {_this spawn EPOCH_initUI; (locked (_this select 1) in [2, 3])}];" \n
+ "player addEventHandler [""Fired"", {_this call EPOCH_fnc_playerFired}];" \n
+ "player addEventHandler [""Killed"", {_this call EPOCH_fnc_playerDeath}];"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="END";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class ____FAKE____
+ {
+ name = "____FAKE____";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ };
+ initState="INIT";
+ finalStates[] =
+ {
+ "END"
+ };
+};
+/*%FSM*/
\ No newline at end of file
diff --git a/Sources/epoch_code/System/player_login.fsm b/Sources/epoch_code/System/player_login.fsm
new file mode 100644
index 00000000..074c127f
--- /dev/null
+++ b/Sources/epoch_code/System/player_login.fsm
@@ -0,0 +1,1395 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"INIT",0,250,-25.000000,-375.000000,75.000000,-325.000000,0.000000,"INIT"};
+item1[] = {"FINISH",1,4346,-25.000000,1475.000000,75.000000,1525.000000,0.000000,"FINISH"};
+item2[] = {"true",8,218,-150.000000,-125.000000,-50.000000,-75.000000,0.000000,"true"};
+item3[] = {"Version_Check",2,250,-25.000000,-75.000000,75.000000,-25.000000,0.000000,"Version Check"};
+item4[] = {"Player_Object_Re",4,218,-150.000000,75.000000,-50.000000,125.000000,0.000000,"Player" \n "Object Ready"};
+item5[] = {"Check_Player_UID",2,250,-25.000000,125.000000,75.000000,175.000000,0.000000,"Check Player UID"};
+item6[] = {"PlayerUID_Okay",4,218,-150.000000,175.000000,-50.000000,225.000000,10.000000,"PlayerUID" \n "Okay"};
+item7[] = {"Wrong_Version",4,218,125.000000,-75.000000,225.000000,-25.000000,10.000000,"Wrong" \n "Version"};
+item8[] = {"",7,210,471.000061,-54.000099,478.999939,-45.999901,0.000000,""};
+item9[] = {"ERROR_Wrong_Version",2,250,275.000000,-75.000000,375.000000,-25.000000,0.000000,"ERROR" \n "Wrong Version" \n "Epoch"};
+item10[] = {"Disconnect",2,250,600.000000,1225.000000,700.000000,1275.000000,0.000000,"Disconnect"};
+item11[] = {"Server_Okay",4,218,-125.000000,425.000000,-25.000000,475.000000,0.000000,"Server" \n "Okay"};
+item12[] = {"Empty_PlayerUID",4,218,125.000000,125.000000,225.000000,175.000000,0.000000,"Empty" \n "PlayerUID"};
+item13[] = {"ERROR_PlayerUID",2,250,275.000000,125.000000,375.000000,175.000000,0.000000,"ERROR" \n "PlayerUID Empty"};
+item14[] = {"",7,210,471.000061,145.999908,478.999939,154.000092,0.000000,""};
+item15[] = {"Timeout_No_Respo",4,218,125.000000,875.000000,225.000000,925.000000,0.000000,"Timeout" \n "No Response"};
+item16[] = {"Response",4,218,-150.000000,825.000000,-50.000000,875.000000,0.000000,"Response"};
+item17[] = {"Setup_Player_Var",2,250,-25.000000,1075.000000,75.000000,1125.000000,0.000000,"Setup Player" \n "Variables"};
+item18[] = {"Request_Hive",2,250,-25.000000,575.000000,75.000000,625.000000,0.000000,"Request Hive"};
+item19[] = {"Timeout_No_Respo",4,218,125.000000,575.000000,225.000000,625.000000,0.000000,"Timeout" \n "No Response"};
+item20[] = {"ERROR_Server_not",2,250,275.000000,875.000000,375.000000,925.000000,0.000000,"ERROR" \n "Server not" \n "Response"};
+item21[] = {"",7,210,471.000000,895.999939,479.000000,904.000061,0.000000,""};
+item22[] = {"Timeout_No_Respo",4,218,125.000000,775.000000,225.000000,825.000000,0.000000,"Timeout" \n "No Response"};
+item23[] = {"Wrong_Server_Ver",4,218,125.000000,475.000000,225.000000,525.000000,10.000000,"Wrong" \n "Server Version"};
+item24[] = {"true",8,218,-150.000000,1125.000000,-50.000000,1175.000000,0.000000,"true"};
+item25[] = {"ERROR_Wrong_Server",2,250,275.000000,475.000000,375.000000,525.000000,0.000000,"ERROR" \n "Wrong" \n "Server Version"};
+item26[] = {"Display_Message",4,218,600.000000,1150.000000,700.000000,1200.000000,0.000000,"" \n "Display Message" \n "Wait..."};
+item27[] = {"Setup_Player_Obj",2,250,-25.000000,975.000000,75.000000,1025.000000,0.000000,"Setup Player" \n "Object"};
+item28[] = {"Check_if_Player",4,218,750.000000,1225.000000,850.000000,1275.000000,0.000000,"Check if" \n "Player got Kicked"};
+item29[] = {"Preload_done",8,218,-150.000000,1425.000000,-50.000000,1475.000000,0.000000,"Preload" \n "done"};
+item30[] = {"",7,210,471.000000,796.000000,479.000000,804.000000,0.000000,""};
+item31[] = {"",7,210,471.000000,796.000000,479.000000,804.000000,0.000000,""};
+item32[] = {"true",8,218,425.000000,1075.000000,525.000000,1125.000000,0.000000,"true"};
+item33[] = {"Display_Message",2,250,600.000000,1075.000000,700.000000,1125.000000,0.000000,"Display" \n "Message"};
+item34[] = {"Server_Ready",4,218,-25.000000,300.000000,75.000000,350.000000,0.000000,"Server" \n "Ready"};
+item35[] = {"Check_Server",2,250,-25.000000,375.000000,75.000000,425.000000,0.000000,"Check Server"};
+item36[] = {"Server_not_worki",4,218,125.000000,375.000000,225.000000,425.000000,10.000000,"Server" \n "not working"};
+item37[] = {"ERROR_Server_not_1",2,250,275.000000,375.000000,375.000000,425.000000,0.000000,"ERROR" \n "Server not Ready"};
+item38[] = {"",7,210,471.000000,396.000000,479.000000,404.000000,0.000000,""};
+item39[] = {"Check_Server_1",2,250,-25.000000,225.000000,75.000000,275.000000,0.000000,"Check Server"};
+item40[] = {"Timeout_No_Respo",4,218,125.000000,225.000000,225.000000,275.000000,0.000000,"Timeout" \n "No Response"};
+item41[] = {"ERROR_Server_not_2",2,250,275.000000,225.000000,375.000000,275.000000,0.000000,"ERROR" \n "Server not Ready"};
+item42[] = {"",7,210,471.000000,246.000031,479.000000,253.999969,0.000000,""};
+item43[] = {"Reject_without_B",1,250,900.000000,1225.000000,1000.000000,1275.000000,0.000000,"Reject without" \n "BattlEye"};
+item44[] = {"true",8,218,-150.000000,-25.000000,-50.000000,25.000000,0.000000,"true"};
+item45[] = {"Arma_Version_Che",2,250,-25.000000,25.000000,75.000000,75.000000,0.000000,"Arma Version" \n "Check"};
+item46[] = {"Outdated_Version",4,218,125.000000,25.000000,225.000000,75.000000,10.000000,"Outdated" \n "Version"};
+item47[] = {"ERROR_Wrong_Version_1",2,250,275.000000,25.000000,375.000000,75.000000,0.000000,"ERROR" \n "Wrong Version" \n "ArmA"};
+item48[] = {"",7,210,471.000061,45.999908,478.999939,54.000092,0.000000,""};
+item49[] = {"new_player_____p",4,218,-150.000000,1025.000000,-50.000000,1075.000000,0.000000,"new player == " \n "player"};
+item50[] = {"Setup_EH_s_and_H",2,250,-25.000000,1175.000000,75.000000,1225.000000,0.000000,"Setup EH's" \n "and" \n "HitPoints"};
+item51[] = {"no_weapons",4,218,-25.000000,1275.000000,75.000000,1325.000000,0.000000,"no weapons"};
+item52[] = {"Process",2,250,-25.000000,1375.000000,75.000000,1425.000000,0.000000,"Process"};
+item53[] = {"Has_Current_Weap",4,218,100.000000,1175.000000,200.000000,1225.000000,10.000000,"Has" \n "Current" \n "Weapon"};
+item54[] = {"Find_Active_Weap",2,250,225.000000,1175.000000,325.000000,1225.000000,0.000000,"Find" \n "Active" \n "Weapon"};
+item55[] = {"Current_Weapon_Not",4,218,150.000000,1225.000000,250.000000,1275.000000,0.000000,"Current" \n "Weapon" \n "Not Selected"};
+item56[] = {"Current_Weapon_S",4,218,300.000000,1225.000000,400.000000,1275.000000,0.000000,"Current" \n "Weapon" \n "Selected"};
+item57[] = {"Select_Weapon",2,250,150.000000,1300.000000,250.000000,1350.000000,0.000000,"Select" \n "Weapon"};
+item58[] = {"true",8,218,225.000000,1375.000000,325.000000,1425.000000,0.000000,"true"};
+item59[] = {"Do_nothing",2,250,300.000000,1300.000000,400.000000,1350.000000,0.000000,"Do nothing"};
+item60[] = {"Check_New_Player",2,250,-25.000000,875.000000,75.000000,925.000000,0.000000,"Check" \n "New Player" \n "Setup"};
+item61[] = {"Wait_mag_count_m",4,218,-150.000000,925.000000,-50.000000,975.000000,0.000000,"Wait" \n "mag count match"};
+item62[] = {"true",8,218,-150.000000,-325.000000,-50.000000,-275.000000,0.000000,"true"};
+item63[] = {"Process_1",2,250,-25.000000,-275.000000,75.000000,-225.000000,0.000000,"Process"};
+item64[] = {"Wait_ArmA_Loading",4,218,-150.000000,-225.000000,-50.000000,-175.000000,0.000000,"Wait ArmA" \n "Loading Screen" \n "Done"};
+item65[] = {"Start_Loading_Sc",2,250,-25.000000,-175.000000,75.000000,-125.000000,0.000000,"Start Loading" \n "Screen"};
+item66[] = {"freshServer",4,218,-325.000000,225.000000,-225.000000,275.000000,0.000000,"freshServer"};
+item67[] = {"Update_Loadingscreen",2,250,-325.000000,300.000000,-225.000000,350.000000,0.000000,"Update" \n "Loadingscreen" \n "Message"};
+item68[] = {"true",8,218,-150.000000,300.000000,-50.000000,350.000000,0.000000,"true"};
+item69[] = {"Timeout_",4,218,125.000000,975.000000,225.000000,1025.000000,0.000000,"" \n "Timeout" \n ""};
+item70[] = {"ERROR_Player_Setup",2,250,275.000000,975.000000,375.000000,1025.000000,0.000000,"ERROR" \n "Player Setup" \n "Invalid"};
+item71[] = {"",7,210,471.000000,996.000000,479.000000,1004.000000,0.000000,""};
+item72[] = {"Server_Version_C",2,250,-25.000000,475.000000,75.000000,525.000000,0.000000,"Server Version" \n "Check"};
+item73[] = {"Version_Okay",4,218,-125.000000,525.000000,-25.000000,575.000000,0.000000,"Version" \n "Okay"};
+item74[] = {"",7,210,471.000000,496.000000,479.000000,504.000000,0.000000,""};
+item75[] = {"ERROR_Server_not_3",2,250,275.000000,575.000000,375.000000,625.000000,0.000000,"ERROR" \n "Server not" \n "Response"};
+item76[] = {"",7,210,471.000000,596.000000,479.000000,604.000000,0.000000,""};
+item77[] = {"new_character",4,218,-250.000000,675.000000,-150.000000,725.000000,10.000000,"new" \n "character"};
+item78[] = {"Hive_Response",4,218,-125.000000,625.000000,-25.000000,675.000000,0.000000,"Hive" \n "Response"};
+item79[] = {"load_old_charact",4,218,-125.000000,725.000000,-25.000000,775.000000,0.000000,"load old" \n "character"};
+item80[] = {"Process_2",2,250,-25.000000,675.000000,75.000000,725.000000,0.000000,"Process"};
+item81[] = {"Open_Gender_Selection",2,250,-400.000000,675.000000,-300.000000,725.000000,0.000000,"Open Gender" \n "Selection Dialog"};
+item82[] = {"Reopen_when_client",4,218,-400.000000,600.000000,-300.000000,650.000000,0.000000,"Reopen" \n "when client hit" \n "escape"};
+item83[] = {"Gender_Selected",4,218,-450.000000,750.000000,-350.000000,800.000000,10.000000,"Gender" \n "Selected"};
+item84[] = {"Timeout",4,218,-350.000000,750.000000,-250.000000,800.000000,0.000000,"Timeout"};
+item85[] = {"Send_character_s",2,250,-400.000000,825.000000,-300.000000,875.000000,0.000000,"Send" \n "character" \n "selection"};
+item86[] = {"Process_3",2,250,-25.000000,775.000000,75.000000,825.000000,0.000000,"Process"};
+item87[] = {"ERROR_Server_not_4",2,250,275.000000,775.000000,375.000000,825.000000,0.000000,"ERROR" \n "Server not" \n "Response"};
+link0[] = {0,62};
+link1[] = {2,3};
+link2[] = {3,7};
+link3[] = {3,44};
+link4[] = {4,5};
+link5[] = {5,6};
+link6[] = {5,12};
+link7[] = {6,39};
+link8[] = {7,9};
+link9[] = {8,48};
+link10[] = {9,8};
+link11[] = {10,28};
+link12[] = {11,72};
+link13[] = {12,13};
+link14[] = {13,14};
+link15[] = {14,42};
+link16[] = {15,20};
+link17[] = {16,60};
+link18[] = {17,24};
+link19[] = {18,19};
+link20[] = {18,78};
+link21[] = {19,75};
+link22[] = {20,21};
+link23[] = {21,71};
+link24[] = {22,87};
+link25[] = {23,25};
+link26[] = {24,50};
+link27[] = {25,74};
+link28[] = {26,10};
+link29[] = {27,49};
+link30[] = {27,69};
+link31[] = {28,43};
+link32[] = {29,1};
+link33[] = {31,21};
+link34[] = {32,33};
+link35[] = {33,26};
+link36[] = {34,35};
+link37[] = {35,11};
+link38[] = {35,36};
+link39[] = {36,37};
+link40[] = {37,38};
+link41[] = {38,74};
+link42[] = {39,34};
+link43[] = {39,40};
+link44[] = {39,66};
+link45[] = {40,41};
+link46[] = {41,42};
+link47[] = {42,38};
+link48[] = {44,45};
+link49[] = {45,4};
+link50[] = {45,46};
+link51[] = {46,47};
+link52[] = {47,48};
+link53[] = {48,14};
+link54[] = {49,17};
+link55[] = {50,51};
+link56[] = {50,53};
+link57[] = {51,52};
+link58[] = {52,29};
+link59[] = {53,54};
+link60[] = {54,55};
+link61[] = {54,56};
+link62[] = {55,57};
+link63[] = {56,59};
+link64[] = {57,58};
+link65[] = {58,52};
+link66[] = {59,58};
+link67[] = {60,15};
+link68[] = {60,61};
+link69[] = {61,27};
+link70[] = {62,63};
+link71[] = {63,64};
+link72[] = {64,65};
+link73[] = {65,2};
+link74[] = {66,67};
+link75[] = {67,68};
+link76[] = {68,39};
+link77[] = {69,70};
+link78[] = {70,71};
+link79[] = {71,32};
+link80[] = {72,23};
+link81[] = {72,73};
+link82[] = {73,18};
+link83[] = {74,76};
+link84[] = {75,76};
+link85[] = {76,31};
+link86[] = {77,81};
+link87[] = {78,80};
+link88[] = {79,86};
+link89[] = {80,77};
+link90[] = {80,79};
+link91[] = {81,82};
+link92[] = {81,83};
+link93[] = {81,84};
+link94[] = {82,81};
+link95[] = {83,85};
+link96[] = {84,85};
+link97[] = {85,79};
+link98[] = {86,16};
+link99[] = {86,22};
+link100[] = {87,31};
+globals[] = {25.000000,1,0,0,0,640,480,1,244,6316128,1,-631.407898,509.397247,1639.671997,811.364685,1212,880,1};
+window[] = {2,-1,-1,-1,-1,808,78,1118,78,3,1230};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "Epoch Login";
+ class States
+ {
+ /*%FSM*/
+ class INIT
+ {
+ name = "INIT";
+ init = /*%FSM*/"titleCut ["""", ""BLACK FADED"", 1337];" \n
+ "0 fadeSound 0;" \n
+ "player enableSimulation false;" \n
+ "" \n
+ "_debug = true;" \n
+ "_myTime = diag_tickTime;" \n
+ "if (_debug) then {" \n
+ " diag_log ""EPOCH-LOGIN: Init"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Process_1";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class FINISH
+ {
+ name = "FINISH";
+ init = /*%FSM*/"[] spawn {" \n
+ " waitUntil{!isNull (findDisplay 46)};" \n
+ " (findDisplay 46) displayAddEventHandler [""KeyDown"",""_this call EPOCH_KeyDown""];" \n
+ "};" \n
+ "" \n
+ "3 fadeSound 1;" \n
+ "" \n
+ "if (_debug) then {" \n
+ " diag_log ""EPOCH-LOGIN: Finish!"";" \n
+ "};" \n
+ "" \n
+ "" \n
+ "player enableSimulation true;" \n
+ "// player switchMove """";" \n
+ "" \n
+ "titleCut ["""", ""BLACK IN"", 1];" \n
+ "1338 cutText ["""",""PLAIN"",0]; " \n
+ "" \n
+ "progressLoadingScreen 1.0;" \n
+ "" \n
+ "endLoadingScreen;" \n
+ "EPOCH_loadingScreenDone = true;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Version_Check
+ {
+ name = "Version_Check";
+ init = /*%FSM*/"if (_debug) then {" \n
+ " diag_log ""EPOCH-LOGIN: Version Check"";" \n
+ "};" \n
+ "" \n
+ "// SHOULD BE:" \n
+ "_epoch_assets0 = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_assets"");" \n
+ "_epoch_assets1 = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_assets_1"");" \n
+ "_epoch_assets2 = getText(configFile >> ""Epoch"" >> ""Version"" >> ""epoch_objects"");" \n
+ "_epoch_assets3 = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_assets_3"");" \n
+ "_epoch_config = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_config"");" \n
+ "_epoch_language = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_language"");" \n
+ "_epoch_underground = getText(configFile >> ""Epoch"" >> ""Version"" >> ""Underground_Epoch"");" \n
+ "_epoch_vehicles = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_vehicles"");" \n
+ "_epoch_weapons = getText(configFile >> ""Epoch"" >> ""Version"" >> ""a3_epoch_weapons"");" \n
+ "" \n
+ "" \n
+ "// IS:" \n
+ "_my_epoch_assets0 = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_assets"" >> ""epochVersion"");" \n
+ "_my_epoch_assets1 = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_assets_1"" >> ""epochVersion"");" \n
+ "_my_epoch_assets2 = getText(configFile >> ""CfgPatches"" >> ""epoch_objects"" >> ""epochVersion"");" \n
+ "_my_epoch_assets3 = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_assets_3"" >> ""epochVersion"");" \n
+ "_my_epoch_config = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_config"" >> ""epochVersion"");" \n
+ "_my_epoch_language = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_language"" >> ""epochVersion"");" \n
+ "_my_epoch_underground = getText(configFile >> ""CfgPatches"" >> ""Underground_Epoch"" >> ""epochVersion"");" \n
+ "_my_epoch_vehicles = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_vehicles"" >> ""epochVersion"");" \n
+ "_my_epoch_weapons = getText(configFile >> ""CfgPatches"" >> ""a3_epoch_weapons"" >> ""epochVersion"");" \n
+ "" \n
+ "progressLoadingScreen 0.1;" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Wrong_Version
+ {
+ priority = 10.000000;
+ to="ERROR_Wrong_Version";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_epoch_assets0 != _epoch_assets0 ||" \n
+ "_my_epoch_assets1 != _epoch_assets1 ||" \n
+ "_my_epoch_assets2 != _epoch_assets2 ||" \n
+ "_my_epoch_assets3 != _epoch_assets3 ||" \n
+ "_my_epoch_config != _epoch_config ||" \n
+ "_my_epoch_language != _epoch_language ||" \n
+ "_my_epoch_underground != _epoch_underground ||" \n
+ "_my_epoch_vehicles != _epoch_vehicles ||" \n
+ "_my_epoch_weapons != _epoch_weapons"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Arma_Version_Che";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Check_Player_UID
+ {
+ name = "Check_Player_UID";
+ init = /*%FSM*/"if (_debug) then {" \n
+ " diag_log ""EPOCH-LOGIN: Check PlayerUID"";" \n
+ "};" \n
+ "" \n
+ "_playerUID = getPlayerUID player;" \n
+ "" \n
+ "progressLoadingScreen 0.2;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class PlayerUID_Okay
+ {
+ priority = 10.000000;
+ to="Check_Server_1";
+ precondition = /*%FSM*/"!isNil ""_playerUID"""/*%FSM*/;
+ condition=/*%FSM*/"_playerUID != """""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Empty_PlayerUID
+ {
+ priority = 0.000000;
+ to="ERROR_PlayerUID";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class ERROR_Wrong_Version
+ {
+ name = "ERROR_Wrong_Version";
+ init = /*%FSM*/"_msg = ""You have an outdated version of Epoch"";" \n
+ "_msg call Epoch_updateLoadingScreen;" \n
+ "diag_log _msg;" \n
+ "" \n
+ "_rejectPlayer = {" \n
+ " PLAYER_REJECT_EPOCHVERSION = true;" \n
+ " publicVariableServer ""PLAYER_REJECT_EPOCHVERSION"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Display_Message";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Disconnect
+ {
+ name = "Disconnect";
+ init = /*%FSM*/"endLoadingScreen;" \n
+ "1338 cutText [_msg,""PLAIN"",0]; " \n
+ "deleteVehicle player;" \n
+ "call _rejectPlayer;" \n
+ "diag_log format [""(%1) %2"",diag_tickTime,_msg];" \n
+ "_myTime = diag_tickTime;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Check_if_Player
+ {
+ priority = 0.000000;
+ to="Reject_without_B";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _myTime) > 2"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class ERROR_PlayerUID
+ {
+ name = "ERROR_PlayerUID";
+ init = /*%FSM*/"_msg = ""Can not setup Player Object! (Error 01)"";" \n
+ "_msg call Epoch_updateLoadingScreen;" \n
+ "diag_log _msg;" \n
+ "" \n
+ "_rejectPlayer = {" \n
+ " PLAYER_REJECT_UID = true;" \n
+ " publicVariableServer ""PLAYER_REJECT_UID"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Display_Message";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Setup_Player_Var
+ {
+ name = "Setup_Player_Var";
+ init = /*%FSM*/"diag_log format[""DEBUG TIME WAITED: %1"", (diag_tickTime - _myTime)];" \n
+ "{" \n
+ " missionNamespace setVariable[(format[""EPOCH_player%1"", EPOCH_customVars select _forEachIndex]), _x];" \n
+ "} forEach _playerVariables;" \n
+ "" \n
+ """Loading Player Variables... Please wait!"" call Epoch_updateLoadingScreen;" \n
+ "" \n
+ "EPOCH_lastPlayerPos = getPosATL vehicle player;" \n
+ "" \n
+ "" \n
+ "progressLoadingScreen 0.7;" \n
+ "" \n
+ "if (_debug) then {" \n
+ " diag_log ""EPOCH-LOGIN: Setup Player Variables"";" \n
+ "};" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Setup_EH_s_and_H";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Request_Hive
+ {
+ name = "Request_Hive";
+ init = /*%FSM*/"_myTime = diag_tickTime;" \n
+ "" \n
+ "Epoch_my_Group = [];" \n
+ "" \n
+ "EPOCH_checkPlayer_PVS = player;" \n
+ "publicVariableServer ""EPOCH_checkPlayer_PVS"";" \n
+ "" \n
+ "" \n
+ """Loading Player Data... Please wait!"" call Epoch_updateLoadingScreen;" \n
+ "progressLoadingScreen 0.5;" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Hive_Response
+ {
+ priority = 0.000000;
+ to="Process_2";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!isNil ""EPOCH_checkPlayer_PVC"""/*%FSM*/;
+ action=/*%FSM*/"_newChar = EPOCH_checkPlayer_PVC;" \n
+ "EPOCH_checkPlayer_PVC = nil;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Timeout_No_Respo
+ {
+ priority = 0.000000;
+ to="ERROR_Server_not_3";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _myTime) > 120"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class ERROR_Server_not
+ {
+ name = "ERROR_Server_not";
+ init = /*%FSM*/"_msg = ""Authentication Failed, Disconnect and try again"";" \n
+ "_msg call Epoch_updateLoadingScreen;" \n
+ "diag_log _msg;" \n
+ "" \n
+ "_rejectPlayer = {" \n
+ " PLAYER_REJECT_NoResponse2 = true;" \n
+ " publicVariableServer ""PLAYER_REJECT_NoResponse2"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Display_Message";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class ERROR_Wrong_Server
+ {
+ name = "ERROR_Wrong_Server";
+ init = /*%FSM*/"_msg = format[""Server and Client running with different Version! (You: %1 // Server: %2)"",getText(configFile >> ""CfgMods"" >> ""Epoch"" >> ""version""),_serverVersion];" \n
+ "_msg call Epoch_updateLoadingScreen;" \n
+ "diag_log _msg;" \n
+ "" \n
+ "_rejectPlayer = {" \n
+ " PLAYER_REJECT_ServerVersion = true;" \n
+ " publicVariableServer ""PLAYER_REJECT_ServerVersion"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Display_Message";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Setup_Player_Obj
+ {
+ name = "Setup_Player_Obj";
+ init = /*%FSM*/"_ply = player;" \n
+ "_group = group player;" \n
+ "selectPlayer _playerObject;" \n
+ "" \n
+ "deleteVehicle _ply;" \n
+ "deleteGroup _group;" \n
+ "" \n
+ """Loading Player Body... Please wait!"" call Epoch_updateLoadingScreen;" \n
+ "progressLoadingScreen 0.8;" \n
+ "" \n
+ "if (_debug) then {" \n
+ " diag_log ""EPOCH-LOGIN: Setup Player Object"";" \n
+ "};" \n
+ "" \n
+ "_myTime = diag_tickTime;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Timeout_
+ {
+ priority = 0.000000;
+ to="ERROR_Player_Setup";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _myTime) > 60"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class new_player_____p
+ {
+ priority = 0.000000;
+ to="Setup_Player_Var";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_playerObject == player"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Display_Message
+ {
+ name = "Display_Message";
+ init = /*%FSM*/"[] spawn {" \n
+ " waitUntil{!isNull (findDisplay 46)};" \n
+ " (findDisplay 46) displayAddEventHandler [""KeyDown"",""true""];" \n
+ "};" \n
+ "diag_log format [""(%1) %2"",diag_tickTime,_msg];" \n
+ "_myTime = diag_tickTime;" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Display_Message
+ {
+ priority = 0.000000;
+ to="Disconnect";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _myTime) > 10"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Check_Server
+ {
+ name = "Check_Server";
+ init = /*%FSM*/"_myTime = diag_tickTime;" \n
+ "if (_debug) then {" \n
+ " diag_log ""EPOCH-LOGIN: Check Server"";" \n
+ "};" \n
+ """Checking Server... Please wait!"" call Epoch_updateLoadingScreen;" \n
+ "progressLoadingScreen 0.4;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Server_not_worki
+ {
+ priority = 10.000000;
+ to="ERROR_Server_not_1";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!isNil ""EPOCH_BADHIVE""" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Server_Okay
+ {
+ priority = 0.000000;
+ to="Server_Version_C";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!isNil ""Epoch_ServerVersion"""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class ERROR_Server_not_1
+ {
+ name = "ERROR_Server_not_1";
+ init = /*%FSM*/"_msg = ""Server not Ready (Error 03)"";" \n
+ "_msg call Epoch_updateLoadingScreen;" \n
+ "diag_log _msg;" \n
+ "" \n
+ "_rejectPlayer = {" \n
+ " PLAYER_REJECT_NotReady2 = true;" \n
+ " publicVariableServer ""PLAYER_REJECT_NotReady2"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Display_Message";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Check_Server_1
+ {
+ name = "Check_Server_1";
+ init = /*%FSM*/"progressLoadingScreen 0.3;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Timeout_No_Respo
+ {
+ priority = 0.000000;
+ to="ERROR_Server_not_2";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _myTime) > 180"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class freshServer
+ {
+ priority = 0.000000;
+ to="Update_Loadingscreen";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"uiNamespace getVariable ['Epoch_freshServer', false]"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Server_Ready
+ {
+ priority = 0.000000;
+ to="Check_Server";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!isNil ""EPOCH_SERVER"""/*%FSM*/;
+ action=/*%FSM*/"_serverUptime = EPOCH_SERVER;" \n
+ "EPOCH_SERVER = nil;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class ERROR_Server_not_2
+ {
+ name = "ERROR_Server_not_2";
+ init = /*%FSM*/"_msg = ""Server not Ready (Error 02)"";" \n
+ "_msg call Epoch_updateLoadingScreen;" \n
+ "diag_log _msg;" \n
+ "" \n
+ "_rejectPlayer = {" \n
+ " PLAYER_REJECT_NotReady1 = true;" \n
+ " publicVariableServer ""PLAYER_REJECT_NotReady1"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Display_Message";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Reject_without_B
+ {
+ name = "Reject_without_B";
+ init = /*%FSM*/"[] spawn {" \n
+ " waitUntil{!isNull (findDisplay 46)};" \n
+ " waitUntil {" \n
+ " (findDisplay 46) closeDisplay 0;" \n
+ " isNull (findDisplay 46)" \n
+ " };" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Arma_Version_Che
+ {
+ name = "Arma_Version_Che";
+ init = /*%FSM*/"progressLoadingScreen 0.15;" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Outdated_Version
+ {
+ priority = 10.000000;
+ to="ERROR_Wrong_Version_1";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"productVersion select 2 < getNumber(configFile >> ""CfgMods"" >> ""Epoch"" >> ""ArmAVersion"")"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Player_Object_Re
+ {
+ priority = 0.000000;
+ to="Check_Player_UID";
+ precondition = /*%FSM*/"!isNull player"/*%FSM*/;
+ condition=/*%FSM*/"player == player"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class ERROR_Wrong_Version_1
+ {
+ name = "ERROR_Wrong_Version_1";
+ init = /*%FSM*/"_msg = ""You have an outdated version of ArmA 3"";" \n
+ "_msg call Epoch_updateLoadingScreen;" \n
+ "diag_log _msg;" \n
+ "" \n
+ "_rejectPlayer = {" \n
+ " PLAYER_REJECT_ARMAVERSION = true;" \n
+ " publicVariableServer ""PLAYER_REJECT_ARMAVERSION"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Display_Message";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Setup_EH_s_and_H
+ {
+ name = "Setup_EH_s_and_H";
+ init = /*%FSM*/"player addEventHandler [""Respawn"", {(_this select 0) call EPOCH_clientRespawn}];" \n
+ "player addEventHandler [""Put"", {(_this select 1) call EPOCH_interact;_this call EPOCH_PutHandler}];" \n
+ "player addEventHandler [""Take"", {(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck}];" \n
+ "player addEventHandler [""InventoryClosed"", {if !(EPOCH_arr_interactedObjs isEqualTo[]) then {EPOCH_arr_interactedObjs remoteExec[""EPOCH_server_save_vehicles"", 2]; EPOCH_arr_interactedObjs = [];};}];" \n
+ "player addEventHandler [""InventoryOpened"", {_this spawn EPOCH_initUI; (locked (_this select 1) in [2, 3])}];" \n
+ "player addEventHandler [""Fired"", {_this call EPOCH_fnc_playerFired}];" \n
+ "player addEventHandler [""Killed"", {_this call EPOCH_fnc_playerDeath}];" \n
+ "" \n
+ "if (count EPOCH_playerHitPoints isEqualTo count ((getAllHitPointsDamage player) param [0,[]])) then {" \n
+ " {" \n
+ " player setHitIndex [_forEachIndex, _x];" \n
+ " }forEach EPOCH_playerHitPoints;" \n
+ "};" \n
+ "" \n
+ "[] spawn EPOCH_masterLoop;" \n
+ "true call EPOCH_fnc_Weather;" \n
+ "[5,100] spawn EPOCH_niteLight;" \n
+ "" \n
+ "if (_debug) then {" \n
+ " diag_log ""EPOCH-LOGIN: Setup EH's"";" \n
+ "};" \n
+ "" \n
+ """Loading... Please wait!"" call Epoch_updateLoadingScreen;" \n
+ "progressLoadingScreen 0.9;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Has_Current_Weap
+ {
+ priority = 10.000000;
+ to="Find_Active_Weap";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_currentWeapon != """""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class no_weapons
+ {
+ priority = 0.000000;
+ to="Process";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_currentWeapon == """""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Process
+ {
+ name = "Process";
+ init = /*%FSM*/"progressLoadingScreen 0.975;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Preload_done
+ {
+ priority = 0.000000;
+ to="FINISH";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/"call compile _playerGroupOnline;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Find_Active_Weap
+ {
+ name = "Find_Active_Weap";
+ init = /*%FSM*/"_activeWeapon = currentWeapon player;" \n
+ "progressLoadingScreen 0.95;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Current_Weapon_S
+ {
+ priority = 0.000000;
+ to="Do_nothing";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_activeWeapon == _currentWeapon"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Current_Weapon_Not
+ {
+ priority = 0.000000;
+ to="Select_Weapon";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_activeWeapon != _currentWeapon"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Select_Weapon
+ {
+ name = "Select_Weapon";
+ init = /*%FSM*/"_currentWeapon spawn {" \n
+ " uiSleep 1; " \n
+ " player selectWeapon _this;" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Process";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Do_nothing
+ {
+ name = "Do_nothing";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Process";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Check_New_Player
+ {
+ name = "Check_New_Player";
+ init = /*%FSM*/"_myTime = diag_tickTime;" \n
+ "" \n
+ "player reveal [_playerObject, 4];" \n
+ """Loading Player Inventory... Please wait!"" call Epoch_updateLoadingScreen;" \n
+ "progressLoadingScreen 0.6;" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Wait_mag_count_m
+ {
+ priority = 0.000000;
+ to="Setup_Player_Obj";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_magCount == count (magazines _playerObject)"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Timeout_No_Respo
+ {
+ priority = 0.000000;
+ to="ERROR_Server_not";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _myTime) > 120"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Process_1
+ {
+ name = "Process_1";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Wait_ArmA_Loading
+ {
+ priority = 0.000000;
+ to="Start_Loading_Sc";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"{!isnull _x} count ((uinamespace getvariable ""loading_displays"") - [finddisplay 18]) == 0"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Start_Loading_Sc
+ {
+ name = "Start_Loading_Sc";
+ init = /*%FSM*/"startLoadingScreen ["""",""EpochLoadingScreen""];" \n
+ "if (_debug) then {" \n
+ " diag_log ""EPOCH-LOGIN: Start Loadingscreen"";" \n
+ "};" \n
+ """Starting Epoch... Please wait!"" call Epoch_updateLoadingScreen;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Version_Check";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Update_Loadingscreen
+ {
+ name = "Update_Loadingscreen";
+ init = /*%FSM*/"uiNamespace setVariable ['Epoch_freshServer', false];" \n
+ "" \n
+ """Server initializing... Please wait!"" call Epoch_updateLoadingScreen;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Check_Server_1";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class ERROR_Player_Setup
+ {
+ name = "ERROR_Player_Setup";
+ init = /*%FSM*/"_msg = ""Problem setting up player"";" \n
+ "_msg call Epoch_updateLoadingScreen;" \n
+ "diag_log _msg;" \n
+ "" \n
+ "_rejectPlayer = {" \n
+ " PLAYER_REJECT_InvaildSetup = true;" \n
+ " publicVariableServer ""PLAYER_REJECT_InvaildSetup"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Display_Message";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Server_Version_C
+ {
+ name = "Server_Version_C";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Wrong_Server_Ver
+ {
+ priority = 10.000000;
+ to="ERROR_Wrong_Server";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"Epoch_ServerVersion != getText(configFile >> ""CfgMods"" >> ""Epoch"" >> ""version"")"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Version_Okay
+ {
+ priority = 0.000000;
+ to="Request_Hive";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class ERROR_Server_not_3
+ {
+ name = "ERROR_Server_not_3";
+ init = /*%FSM*/"_msg = ""Authentication Failed, Disconnect and try again"";" \n
+ "_msg call Epoch_updateLoadingScreen;" \n
+ "diag_log _msg;" \n
+ "" \n
+ "_rejectPlayer = {" \n
+ " PLAYER_REJECT_HiveNotResponse = true;" \n
+ " publicVariableServer ""PLAYER_REJECT_HiveNotResponse"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Display_Message";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Process_2
+ {
+ name = "Process_2";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class new_character
+ {
+ priority = 10.000000;
+ to="Open_Gender_Selection";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_newChar"/*%FSM*/;
+ action=/*%FSM*/"endLoadingScreen;" \n
+ "_myGenderTime = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class load_old_charact
+ {
+ priority = 0.000000;
+ to="Process_3";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/"_myTime = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Open_Gender_Selection
+ {
+ name = "Open_Gender_Selection";
+ init = /*%FSM*/"createdialog ""SelectGender"";"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Gender_Selected
+ {
+ priority = 10.000000;
+ to="Send_character_s";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!isNil ""EPOCH_PlayerIsMale"""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Timeout
+ {
+ priority = 0.000000;
+ to="Send_character_s";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"((diag_tickTime - _myGenderTime) > 30)"/*%FSM*/;
+ action=/*%FSM*/"EPOCH_PlayerIsMale = true;" \n
+ "closeDialog 0;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Reopen_when_client
+ {
+ priority = 0.000000;
+ to="Open_Gender_Selection";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!dialog && isNil ""EPOCH_PlayerIsMale"""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Send_character_s
+ {
+ name = "Send_character_s";
+ init = /*%FSM*/"startLoadingScreen ["""",""EpochLoadingScreen""];" \n
+ """Gender Selected... Please wait!"" call Epoch_updateLoadingScreen;" \n
+ "" \n
+ "" \n
+ "EPOCH_selectedGender_PVS = [player,EPOCH_PlayerIsMale];" \n
+ "publicVariableServer ""EPOCH_selectedGender_PVS"";" \n
+ "EPOCH_selectedGender_PVS = nil;" \n
+ "EPOCH_PlayerIsMale = nil;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class load_old_charact
+ {
+ priority = 0.000000;
+ to="Process_3";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/"_myTime = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Process_3
+ {
+ name = "Process_3";
+ init = /*%FSM*/""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Timeout_No_Respo
+ {
+ priority = 0.000000;
+ to="ERROR_Server_not_4";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _myTime) > 120"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Response
+ {
+ priority = 0.000000;
+ to="Check_New_Player";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!isNil ""EPOCH_C_SET"""/*%FSM*/;
+ action=/*%FSM*/"_array = EPOCH_C_SET;" \n
+ "EPOCH_C_SET = nil;" \n
+ "_playerObject = _array deleteAt 0;" \n
+ "_playerVariables = _array deleteAt 0;" \n
+ "_currentWeapon = _array deleteAt 0;" \n
+ "_magCount = _array deleteAt 0;" \n
+ "Epoch_my_GroupUID = _array deleteAt 0;" \n
+ "Epoch_canBeRevived = _array deleteAt 0;" \n
+ "Epoch_personalToken = _array deleteAt 0;" \n
+ "reverse _serverUptime;" \n
+ "_serverUptime pushBack (_array deleteAt 0);" \n
+ "reverse _serverUptime;" \n
+ "_serverUptime call EPOCH_client_publicEH;" \n
+ "_playerGroupOnline = _array deleteAt 0;" \n
+ "" \n
+ ""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class ERROR_Server_not_4
+ {
+ name = "ERROR_Server_not_4";
+ init = /*%FSM*/"_msg = ""Authentication Failed, Disconnect and try again"";" \n
+ "_msg call Epoch_updateLoadingScreen;" \n
+ "diag_log _msg;" \n
+ "" \n
+ "_rejectPlayer = {" \n
+ " PLAYER_REJECT_HiveLoadChar = true;" \n
+ " publicVariableServer ""PLAYER_REJECT_HiveLoadChar"";" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class true
+ {
+ priority = 0.000000;
+ to="Display_Message";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"true"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="INIT";
+ finalStates[] =
+ {
+ "FINISH",
+ "Reject_without_B",
+ };
+};
+/*%FSM*/
\ No newline at end of file
diff --git a/Sources/epoch_code/System/sapperSwarmMember.fsm b/Sources/epoch_code/System/sapperSwarmMember.fsm
new file mode 100644
index 00000000..9f98883c
--- /dev/null
+++ b/Sources/epoch_code/System/sapperSwarmMember.fsm
@@ -0,0 +1,613 @@
+class FSM
+{
+ fsmName = "sapper swarm member";
+ class States
+ {
+ class sapper
+ {
+ name = "sapper";
+ itemno = ;
+ init = "_unit = _this select 0;" \n
+ "_destination = _this select 1;" \n
+ "" \n
+ "_t = diag_tickTime;" \n
+ "_p = _t;" \n
+ "" \n
+ "_nextPos = [];" \n
+ "_roughDir = 0;" \n
+ "_callDispose = false;" \n
+ "_decisionMade = false;" \n
+ "_c = diag_tickTime;" \n
+ "_sFreqCheck = 1.5;" \n
+ "_lFreqCheck = 12;" \n
+ "_doneCheck = false;" \n
+ "_canSee = false;" \n
+ "_newTrgt = false;" \n
+ "_detonateDist = 2.8;" \n
+ "_stuckCount = 0;" \n
+ "_trgt = player;" \n
+ "_trgtPos = getPosATL _trgt;" \n
+ "_sTrgt = objNull;" \n
+ "_charging = false;" \n
+ "_tDist = 999;" \n
+ "_uMoveTo = [];" \n
+ "EPOCH_SapperCanSee = false;" \n
+ "_sapperWalkHandle = -1;" \n
+ "_sapperDisposeHandle = -1;" \n
+ "_lastPos = getPosATL _unit;" \n
+ "_stuckCount = 0;" \n
+ "_beenFollowed = false;" \n
+ "" \n
+ "_bomb = createVehicle [""Sapper_Charge_Ammo"", (getposATL _unit), [], 0, ""CAN_COLLIDE""] ; " \n
+ "_bomb attachTo [_unit, [0,0,0],""Pelvis""];" \n
+ "" \n
+ "_unit setVariable [""sTarget"",objNull];" \n
+ "" \n
+ "//initial move" \n
+ "_nextPos = _trgtPos findEmptyPosition [0,50,typeOf _unit];" \n
+ "_unit moveTo _nextPos;" \n
+ "" \n
+ "" \n
+ "if !(isNull _unit) then {" \n
+ " EPOCH_TEMPOBJ_PVS = _unit;" \n
+ " publicVariableServer ""EPOCH_TEMPOBJ_PVS"";" \n
+ "};" \n
+ "" \n
+ "_randomGroan = {" \n
+ "_sounds = [""sapper_groan0"",""sapper_groan1"",""sapper_groan2""];" \n
+ "_sound = _sounds select (floor (random (count _sounds)));" \n
+ "" \n
+ "_unit say3D _sound;" \n
+ "EPOCH_say3D_PVS = [player, _unit,(EPOCH_sounds find _sound), Epoch_personalToken];" \n
+ "publicVariableServer ""EPOCH_say3D_PVS"";" \n
+ "};" \n
+ "" \n
+ "_sMarker = objNull;" \n
+ "_mHeight = 2.5;" \n
+ "" \n
+ "" \n
+ "//Debug" \n
+ "_doDebug = false;" \n
+ "" \n
+ "" \n
+ "_doMarker = {" \n
+ "deleteVehicle _sMarker;" \n
+ "_mPos = getPosATL _unit;" \n
+ "_mPos set [2,_mHeight];" \n
+ "_sMarker = createVehicle [""Sign_Arrow_Green_F"", _mPos, [], 0, ""CAN_COLLIDE""];" \n
+ "_sMarker attachTo [_unit,[0,0,_mHeight]];" \n
+ "};" \n
+ "" \n
+ "_doMarkerChase = {" \n
+ "deleteVehicle _sMarker;" \n
+ "_mPos = getPosATL _unit;" \n
+ "_mPos set [2,_mHeight];" \n
+ "_sMarker = createVehicle [""Sign_Arrow_Yellow_F"", _mPos, [], 0, ""CAN_COLLIDE""];" \n
+ "_sMarker attachTo [_unit,[0,0,_mHeight]];" \n
+ "};" \n
+ "" \n
+ "_doMarkerCharge = {" \n
+ "deleteVehicle _sMarker;" \n
+ "_mPos = getPosATL _unit;" \n
+ "_mPos set [2,_mHeight];" \n
+ "_sMarker = createVehicle [""Sign_Arrow_F"", _mPos, [], 0, ""CAN_COLLIDE""];" \n
+ "_sMarker attachTo [_unit,[0,0,_mHeight]];" \n
+ "};" \n
+ "" \n
+ "_doMarkerMove = {" \n
+ "deleteVehicle _sMarker;" \n
+ "_mPos = getPosATL _unit;" \n
+ "_mPos set [2,_mHeight];" \n
+ "_sMarker = createVehicle [""Sign_Arrow_Cyan_F"", _mPos, [], 0, ""CAN_COLLIDE""];" \n
+ "_sMarker attachTo [_unit,[0,0,_mHeight]];" \n
+ "};" \n
+ "" \n
+ "_sAnger = 0;" \n
+ "_sHit = [];" \n
+ "_sFiredNear = [];" \n
+ "_mkrName3 = """";" \n
+ "_mkrName4 = """";" \n
+ "_showDebug = {" \n
+ "hint format [""SAPPER\nAnger: %2\nCanSee: %3\nTarget: %4\nHit: %5\nNear: %6\nFPS:%1"",diag_fps,_sAnger,_canSee,_trgt,_sHit,_sFiredNear];" \n
+ "};" \n
+ "" \n
+ "" \n
+ "axeSapper = _unit;" \n
+ "" \n
+ "";
+ precondition = "";
+ class Links
+ {
+ class _
+ {
+ itemno = ;
+ priority = 0.000000;
+ to="reset___control";
+ precondition = "";
+ condition="";
+ action="";
+ };
+ };
+ };
+ class instinct
+ {
+ name = "instinct";
+ itemno = ;
+ init = "//systemchat format [""I:%1"",diag_tickTime];";
+ precondition = "";
+ class Links
+ {
+ class check_status
+ {
+ itemno = ;
+ priority = 110.000000;
+ to="checking_status";
+ precondition = "";
+ condition="diag_tickTime > _c + _sFreqCheck;";
+ action="_checkEntry = ""instinct"";" \n
+ "_sanityCheck = 100;" \n
+ "" \n
+ "";
+ };
+ class instinct_done
+ {
+ itemno = ;
+ priority = 100.000000;
+ to="action";
+ precondition = "";
+ condition="_decisionMade;";
+ action="_decisionMade = false;";
+ };
+ class dispose
+ {
+ itemno = ;
+ priority = 90.000000;
+ to="instinct";
+ precondition = "";
+ condition="!alive _unit || _callDispose;";
+ action="_doDispose = true;" \n
+ "_decisionMade = true;" \n
+ "" \n
+ "" \n
+ "";
+ };
+ };
+ };
+ class action
+ {
+ name = "action";
+ itemno = ;
+ init = "//systemchat format [""A:%1"",diag_tickTime];";
+ precondition = "";
+ class Links
+ {
+ class dispose
+ {
+ itemno = ;
+ priority = 120.000000;
+ to="end";
+ precondition = "";
+ condition="_doDispose;";
+ action="";
+ };
+ class check_status
+ {
+ itemno = ;
+ priority = 110.000000;
+ to="checking_status";
+ precondition = "";
+ condition="diag_tickTime > _c + _sFreqCheck;";
+ action="_checkEntry = ""action"";" \n
+ "_sanityCheck = 100;" \n
+ "" \n
+ "" \n
+ "";
+ };
+ class complete
+ {
+ itemno = ;
+ priority = 100.000000;
+ to="reset___control";
+ precondition = "";
+ condition="_actionDone && ((call compile _criteria) || (diag_tickTime > (_t + _sWait)));";
+ action="" \n
+ "if(!isNil ""_criteriaMetAction"")then{" \n
+ "call _criteriaMetAction;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "";
+ };
+ };
+ };
+ class reset___control
+ {
+ name = "reset___control";
+ itemno = ;
+ init = "//Brain Vars" \n
+ "_criteria =""(false)"";" \n
+ "_criteriaMetAction = nil;" \n
+ "_actionDone = false;" \n
+ "_sWait = 0;" \n
+ "" \n
+ "" \n
+ "if(_sapperWalkHandle < 0)then{" \n
+ "_startLoad = diag_tickTime;" \n
+ "_sapperWalkHandle = [_unit, _trgt] execFSM ""\x\addons\a3_epoch_code\System\sapperSwarmMemberWalking.fsm"";" \n
+ "" \n
+ "axeWalkHandle = _sapperWalkHandle;" \n
+ "//systemchat format[""Call Walking in %1"",diag_tickTime - _startLoad];" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "";
+ precondition = "";
+ class Links
+ {
+ class _
+ {
+ itemno = ;
+ priority = 0.000000;
+ to="instinct";
+ precondition = "";
+ condition="";
+ action="";
+ };
+ };
+ };
+ class end
+ {
+ name = "end";
+ itemno = ;
+ init = "//hint ""Dispose Sapper Brain"";" \n
+ "" \n
+ "if(_sapperWalkHandle > -1)then{" \n
+ "_sapperWalkHandle setFSMVariable [""_callDispose"", true];" \n
+ "};" \n
+ "" \n
+ "if(_sapperDisposeHandle < 0)then{" \n
+ "_startLoad = diag_tickTime;" \n
+ "_sapperDisposeHandle = [_unit, _bomb, _detTrgt] execFSM ""\x\addons\a3_epoch_code\System\sapperSwarmMemberDispose.fsm"";" \n
+ "//systemchat format[""Call Dispose in %1"",diag_tickTime - _startLoad];" \n
+ "};" \n
+ "" \n
+ "" \n
+ "";
+ precondition = "";
+ class Links
+ {
+ };
+ };
+ class checking_status
+ {
+ name = "checking_status";
+ itemno = ;
+ init = "" \n
+ "//Put vars to check in here - only run once per check session." \n
+ "if!(_doneCheck)then{" \n
+ "" \n
+ "" \n
+ "if(_doDebug)then{" \n
+ "//systemchat format [""C:%1"",diag_tickTime];" \n
+ "//[] call _showDebug;" \n
+ "" \n
+ "//deleteMarkerLocal _mkrName3;" \n
+ "//_mkrName3 = format[""axe%1"", _unit];" \n
+ "_mPos = getPos _unit;" \n
+ "//_mkr = createMarkerLocal [_mkrName3, _mPos];" \n
+ "//_mkrName3 setMarkerShapeLocal ""ICON"";" \n
+ "//_mkrName3 setMarkerTypeLocal ""mil_dot"";" \n
+ "//_mkrName3 setMarkerColorLocal ""COLORGREEN"";" \n
+ "};" \n
+ "_doneCheck = true;" \n
+ "};" \n
+ "" \n
+ "";
+ precondition = "";
+ class Links
+ {
+ class pre_vars
+ {
+ itemno = ;
+ priority = 95.000000;
+ to="checking_status";
+ precondition = "";
+ condition="_sanityCheck > 95;";
+ action="_pos = getPosATL _unit;" \n
+ "_dist = _pos distance _destination;" \n
+ "_trgtPos = [];" \n
+ "" \n
+ "_nrPlyrs = nearestObjects [_pos, [""Epoch_Female_base_F"",""Epoch_Man_base_F""],42];" \n
+ "_nrSappers = nearestObjects [_pos, [""Epoch_Sapper_F""],42];" \n
+ "" \n
+ "_sanityCheck = 95;";
+ };
+ class swarm
+ {
+ itemno = ;
+ priority = 90.000000;
+ to="checking_status";
+ precondition = "";
+ condition="_sanityCheck > 90;" \n
+ "";
+ action="_sTrgt = objNull;" \n
+ "_newTrgt = false;" \n
+ "" \n
+ "if(count _nrSappers > 0)then{" \n
+ "" \n
+ " {" \n
+ "" \n
+ " if(_x != _unit)then{" \n
+ "" \n
+ " if!(lineIntersects [eyePos _unit, aimPos _x, _unit, _x])then{" \n
+ "" \n
+ " if!(isNull (_x getVariable [""sTarget"",objNull]))then{" \n
+ " " \n
+ " _sTrgt = _x;" \n
+ " " \n
+ " if(_unit distance _x < 5)then{" \n
+ " _newTrgt = true;" \n
+ " _trgtPos = getPosATL _sTrgt;" \n
+ " };" \n
+ "" \n
+ " };" \n
+ "" \n
+ " };" \n
+ "" \n
+ " }else{" \n
+ " _x setVariable [""sTarget"",objNull,false];" \n
+ " };" \n
+ "" \n
+ " }forEach _nrSappers;" \n
+ "" \n
+ "};" \n
+ "" \n
+ "_sanityCheck = 90;";
+ };
+ class target
+ {
+ itemno = ;
+ priority = 80.000000;
+ to="checking_status";
+ precondition = "";
+ condition="_sanityCheck > 80;";
+ action="_canSee = false;" \n
+ "_trgt = objNull;" \n
+ "_detTrgt = objNull;" \n
+ "_trgtDist = 999;" \n
+ "" \n
+ "" \n
+ "if(count _nrPlyrs > 0)then{" \n
+ "" \n
+ " {" \n
+ "" \n
+ " if!(lineIntersects [eyePos _unit, aimPos _x, _unit, _x])then{" \n
+ "" \n
+ " if (isNull _sTrgt)then{" \n
+ " _canSee = true;" \n
+ " _trgt = _x;" \n
+ " _unit setVariable [""sTarget"",_x,false];" \n
+ " _trgtPos = getPosATL _trgt;" \n
+ " _trgtDist = _x distance _unit;" \n
+ " _newTrgt = true;" \n
+ " };" \n
+ "" \n
+ " " \n
+ " };" \n
+ "" \n
+ " if(_x distance _unit < _detonateDist)then{" \n
+ " _detTrgt = _x;" \n
+ " };" \n
+ "" \n
+ "" \n
+ " " \n
+ "" \n
+ " }forEach _nrPlyrs;" \n
+ "" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_sanityCheck = 80;";
+ };
+ class movement
+ {
+ itemno = ;
+ priority = 70.000000;
+ to="checking_status";
+ precondition = "";
+ condition="_sanityCheck > 70;" \n
+ "";
+ action="" \n
+ "if(_canSee || _newTrgt)then{" \n
+ "_nextPos = _trgtPos;" \n
+ "};" \n
+ "" \n
+ "if!(_canSee) then {" \n
+ " _newTrgt = false;" \n
+ " if(count _trgtPos > 0)then{" \n
+ " _nextPos = _trgtPos findEmptyPosition [0,50,typeOf _unit];" \n
+ " }else{" \n
+ " if(_dist > 20)then{" \n
+ " _dirToF = [_pos,_destination,44] call EPOCH_fnc_dirToFuzzy;" \n
+ " _trgtPos = [_unit, 48, _dirToF] call BIS_fnc_relPos;" \n
+ " _nextPos = _trgtPos findEmptyPosition [0,50,typeOf _unit];" \n
+ " " \n
+ " }else{" \n
+ " _nextPos = _destination;" \n
+ " };" \n
+ " };" \n
+ "};" \n
+ "_sanityCheck = 70;";
+ };
+ class stuck
+ {
+ itemno = ;
+ priority = 60.000000;
+ to="checking_status";
+ precondition = "";
+ condition="_sanityCheck > 60;" \n
+ "";
+ action="if(_stuckCount > 3)then{" \n
+ "_nextPos = _trgtPos findEmptyPosition [0,50,typeOf _unit];" \n
+ "_lastPos = _pos;" \n
+ "_stuckCount = 0;" \n
+ "};" \n
+ "" \n
+ "if(_lastPos distance _pos < 3)then{" \n
+ "_stuckCount = _stuckCount + 1;" \n
+ "};" \n
+ "" \n
+ "_sanityCheck = 60;";
+ };
+ class final_checks
+ {
+ itemno = ;
+ priority = 10.000000;
+ to="checking_status";
+ precondition = "";
+ condition="_sanityCheck > 10;";
+ action="" \n
+ "_unit setUnitPos ""UP"";" \n
+ "if(behaviour _unit !=""COMBAT"")then{" \n
+ " _unit setBehaviour ""COMBAT"";" \n
+ " };" \n
+ "" \n
+ "" \n
+ "" \n
+ "if(_sapperWalkHandle > -1)then{" \n
+ "" \n
+ "if(moveToCompleted _unit || _newTrgt)then{" \n
+ "_sapperWalkHandle setFSMVariable [""_nextPos"",_nextPos];" \n
+ "};" \n
+ "" \n
+ "if(_newTrgt)then{" \n
+ "if(random 100 < 16)then{" \n
+ "call _randomGroan;" \n
+ "};" \n
+ "_sapperWalkHandle setFSMVariable [""_newTrgt"",_newTrgt];" \n
+ "};" \n
+ "};" \n
+ "" \n
+ "if(!(isnull _detTrgt) || _dist < 6 || surfaceIsWater _pos)then{" \n
+ "_callDispose = true;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "if(_doDebug)then{" \n
+ "" \n
+ "//hint format [""%1"",_newTrgt];" \n
+ "" \n
+ "" \n
+ " if!(isNull (_unit getVariable [""sTarget"",objNull]))then{" \n
+ "" \n
+ " call _doMarkerCharge;" \n
+ " " \n
+ " }else{" \n
+ "" \n
+ " if!(isNull _sTrgt)then{" \n
+ "" \n
+ " call _doMarkerChase;" \n
+ "" \n
+ " }else{" \n
+ " " \n
+ " " \n
+ " call _doMarker;" \n
+ "" \n
+ " };" \n
+ "" \n
+ " };" \n
+ "" \n
+ "deleteMarkerLocal _mkrName4;" \n
+ "_mkrName4 = format[""axeD%1"", _unit];" \n
+ "_mkr2 = createMarkerLocal [_mkrName4, _nextPos];" \n
+ "_mkrName4 setMarkerShapeLocal ""ICON"";" \n
+ "_mkrName4 setMarkerTypeLocal ""mil_dot"";" \n
+ "_mkrName4 setMarkerColorLocal ""COLORYELLOW"";" \n
+ "};" \n
+ "" \n
+ "" \n
+ "_sanityCheck = 0;" \n
+ "" \n
+ "" \n
+ "" \n
+ "";
+ };
+ class _
+ {
+ itemno = ;
+ priority = 5.000000;
+ to="return";
+ precondition = "";
+ condition="";
+ action="_doneCheck = false;";
+ };
+ };
+ };
+ class return
+ {
+ name = "return";
+ itemno = ;
+ init = "_c = diag_tickTime;" \n
+ "_sanityCheck = 100;" \n
+ "";
+ precondition = "";
+ class Links
+ {
+ class to_instinct
+ {
+ itemno = ;
+ priority = 0.000000;
+ to="instinct";
+ precondition = "";
+ condition="(_checkEntry == ""instinct"");";
+ action="_checkEntry = """";" \n
+ "";
+ };
+ class to_action
+ {
+ itemno = ;
+ priority = 0.000000;
+ to="action";
+ precondition = "";
+ condition="(_checkEntry == ""action"");";
+ action="_checkEntry = """";";
+ };
+ };
+ };
+ class ____FAKE____
+ {
+ name = "____FAKE____";
+ itemno = ;
+ init = "";
+ precondition = "";
+ class Links
+ {
+ class _
+ {
+ itemno = ;
+ priority = 0.000000;
+ to="action";
+ precondition = "";
+ condition="";
+ action="";
+ };
+ };
+ };
+ };
+ initState="sapper";
+ finalStates[] =
+ {
+ "end"
+ };
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/System/sapperSwarmMemberDispose.fsm b/Sources/epoch_code/System/sapperSwarmMemberDispose.fsm
new file mode 100644
index 00000000..99295352
--- /dev/null
+++ b/Sources/epoch_code/System/sapperSwarmMemberDispose.fsm
@@ -0,0 +1,288 @@
+class FSM
+{
+ fsmName = "sapper dispose";
+ class States
+ {
+ class bomb
+ {
+ name = "bomb";
+ itemno = ;
+ init = "//Developer code" \n
+ "//Author: axeman (Andrew Gregory | andrew@andgregor.co.uk)" \n
+ "//Licence:" \n
+ "//You may not copy, reproduce, edit, move or transfer in any way without the express permission of the author." \n
+ "//All files contained in this MPMission also folder fall under the Epoch Mod Creative Commons Licence: https://creativecommons.org/licenses/by-nc-nd/4.0/" \n
+ "//Any files triggered, called, execVM'ed, execFSM'ed etc, by this file fall under the same agreement." \n
+ "" \n
+ "_unit = _this select 0;" \n
+ "_bomb = _this select 1;" \n
+ "_head = objNull;" \n
+ "" \n
+ "_trgt = _this select 2;" \n
+ "_nrTrgts = [];" \n
+ "" \n
+ "_t = diag_tickTime;" \n
+ "_trgtDist = _unit distance _trgt;" \n
+ "" \n
+ "if!(isNull (_unit getVariable [""sTarget"",objNull]))then{" \n
+ "_unit setVariable [""sTarget"",objNull, false];" \n
+ "};" \n
+ "" \n
+ "_canSee = false;" \n
+ "_pos = getPosATL _unit;" \n
+ "" \n
+ "//systemChat ""DISPOSE"";" \n
+ "" \n
+ "" \n
+ "";
+ precondition = "";
+ class Links
+ {
+ class _
+ {
+ itemno = ;
+ priority = 0.000000;
+ to="check";
+ precondition = "";
+ condition="true";
+ action="";
+ };
+ };
+ };
+ class check
+ {
+ name = "check";
+ itemno = ;
+ init = "";
+ precondition = "";
+ class Links
+ {
+ class targets
+ {
+ itemno = ;
+ priority = 20.000000;
+ to="find_target";
+ precondition = "";
+ condition="(isNull _trgt || isNil ""_trgt"") && alive _unit;";
+ action="";
+ };
+ class smoke
+ {
+ itemno = ;
+ priority = 15.000000;
+ to="handle_smoke";
+ precondition = "";
+ condition="!alive _unit;";
+ action="";
+ };
+ class boom
+ {
+ itemno = ;
+ priority = 10.000000;
+ to="pre_boom";
+ precondition = "";
+ condition="alive _unit;";
+ action="";
+ };
+ };
+ };
+ class pre_boom
+ {
+ name = "pre_boom";
+ itemno = ;
+ init = "_t = diag_tickTime;" \n
+ "" \n
+ "_sound = ""sapper_explode"";" \n
+ "_unit say3D _sound;" \n
+ "EPOCH_say3D_PVS = [player,_unit,(EPOCH_sounds find _sound),Epoch_personalToken];" \n
+ "publicVariableServer ""EPOCH_say3D_PVS"";" \n
+ "_unit playMoveNow ""Unconscious"";" \n
+ "" \n
+ "";
+ precondition = "";
+ class Links
+ {
+ class Wait_1_5_sec
+ {
+ itemno = ;
+ priority = 0.000000;
+ to="do_boom";
+ precondition = "";
+ condition="(diag_tickTime - _t) > 1.25;";
+ action="";
+ };
+ };
+ };
+ class end
+ {
+ name = "end";
+ itemno = ;
+ init = "if(!isNull _unit)then{" \n
+ "_unit removeAllEventHandlers ""Hit"";" \n
+ "_unit removeAllEventHandlers ""FiredNear"";" \n
+ "deleteVehicle _unit;" \n
+ "};" \n
+ "" \n
+ "if(!isNull _bomb)then{" \n
+ "deleteVehicle _bomb;" \n
+ "};" \n
+ "" \n
+ "if !(isNull _head) then {" \n
+ "deleteVehicle _head;" \n
+ "};" \n
+ "" \n
+ "if(!isNull _unit)then{" \n
+ "deleteVehicle _unit;" \n
+ "};" \n
+ "" \n
+ "Epoch_axeMigrationRunning = false;" \n
+ "";
+ precondition = "";
+ class Links
+ {
+ };
+ };
+ class handle_smoke
+ {
+ name = "handle_smoke";
+ itemno = ;
+ init = "";
+ precondition = "";
+ class Links
+ {
+ class not_shot
+ {
+ itemno = ;
+ priority = 10.000000;
+ to="finishing";
+ precondition = "";
+ condition="isNull _bomb;";
+ action="";
+ };
+ class shot
+ {
+ itemno = ;
+ priority = 5.000000;
+ to="smoke";
+ precondition = "";
+ condition="!isNull _bomb;";
+ action="";
+ };
+ };
+ };
+ class do_boom
+ {
+ name = "do_boom";
+ itemno = ;
+ init = "EPOCH_SapperObjs_PVS = [_bomb, player, Epoch_personalToken,_unit,_unit];" \n
+ "publicVariableServer ""EPOCH_SapperObjs_PVS"";" \n
+ "" \n
+ "_bomb = objNull;" \n
+ "_finalPos = getPosATL _unit;" \n
+ "_finalDir = getDir _unit;" \n
+ "" \n
+ "_unit setObjectTextureGlobal [0, """"]; " \n
+ "_unit setObjectTextureGlobal [1, ""x\addons\a3_epoch_assets\textures\sapper\sapper_eco.paa""]; " \n
+ "" \n
+ "_head = createVehicle [""SapperHead_SIM_EPOCH"", _finalPos, [], 0, ""CAN_COLLIDE""];" \n
+ "_dir = [_head, _trgt] call BIS_fnc_dirTo;" \n
+ "_speed = (_unit distance _trgt);" \n
+ "_head setVelocity [" \n
+ " (sin _dir * _speed), " \n
+ " (cos _dir * _speed), " \n
+ " ((_speed) / 12 min 1)" \n
+ "];" \n
+ "_doneBoom = true;" \n
+ "";
+ precondition = "";
+ class Links
+ {
+ class _
+ {
+ itemno = ;
+ priority = 0.000000;
+ to="finishing";
+ precondition = "";
+ condition="true";
+ action="";
+ };
+ };
+ };
+ class smoke
+ {
+ name = "smoke";
+ itemno = ;
+ init = "if(!isNull _bomb)then{" \n
+ "deleteVehicle _bomb;" \n
+ "};" \n
+ "" \n
+ "_sapperSmoke = ""SmokeShellCustom"" createVehicle [(getPosATL _unit) select 0, (getPosATL _unit) select 1, -0.2];" \n
+ "_sapperSmoke attachTo [_unit,[0,0,-0.4]];";
+ precondition = "";
+ class Links
+ {
+ class _
+ {
+ itemno = ;
+ priority = 0.000000;
+ to="finishing";
+ precondition = "";
+ condition="true";
+ action="";
+ };
+ };
+ };
+ class finishing
+ {
+ name = "finishing";
+ itemno = ;
+ init = "";
+ precondition = "";
+ class Links
+ {
+ class Wait_to_delete
+ {
+ itemno = ;
+ priority = 10.000000;
+ to="end";
+ precondition = "";
+ condition="(diag_tickTime - _t) > 480;";
+ action="";
+ };
+ };
+ };
+ class find_target
+ {
+ name = "find_target";
+ itemno = ;
+ init = "_nrTrgts = nearestObjects [_pos, [""Epoch_Female_base_F"",""Epoch_Man_base_F""],42];";
+ precondition = "";
+ class Links
+ {
+ class not_found
+ {
+ itemno = ;
+ priority = 20.000000;
+ to="end";
+ precondition = "";
+ condition="count _nrTrgts < 1";
+ action="";
+ };
+ class found
+ {
+ itemno = ;
+ priority = 10.000000;
+ to="check";
+ precondition = "";
+ condition="count _nrTrgts > 0";
+ action="_trgt = _nrTrgts select floor (random (count _nrTrgts));";
+ };
+ };
+ };
+ };
+ initState="bomb";
+ finalStates[] =
+ {
+ "end"
+ };
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/System/sapperSwarmMemberWalking.fsm b/Sources/epoch_code/System/sapperSwarmMemberWalking.fsm
new file mode 100644
index 00000000..8951ffd2
--- /dev/null
+++ b/Sources/epoch_code/System/sapperSwarmMemberWalking.fsm
@@ -0,0 +1,220 @@
+class FSM
+{
+ fsmName = "sapper swarm member walking";
+ class States
+ {
+ class sapper
+ {
+ name = "sapper";
+ itemno = ;
+ init = "//Developer code" \n
+ "//Author: axeman (Andrew Gregory | andrew@andgregor.co.uk)" \n
+ "//Licence:" \n
+ "//You may not copy, reproduce, edit, move or transfer in any way without the express permission of the author." \n
+ "//All files contained in this MPMission folder also fall under the Epoch Mod Creative Commons Licence: https://creativecommons.org/licenses/by-nc-nd/4.0/" \n
+ "//Any files triggered, called, execVM'ed, execFSM'ed etc, by this file fall under the same agreement." \n
+ "" \n
+ "" \n
+ "_unit = _this select 0;" \n
+ "" \n
+ "_moveTo = [];" \n
+ "_nextPos = [];" \n
+ "" \n
+ "_callDispose = false;" \n
+ "_doDispose = false;" \n
+ "_decisionMade = false;" \n
+ "_t = diag_tickTime;" \n
+ "_c = diag_tickTime;" \n
+ "_sFreqCheck = 1.5;" \n
+ "_lFreqCheck = 12;" \n
+ "_doneCheck = false;" \n
+ "" \n
+ "//Debug" \n
+ "_showDebug = {" \n
+ "hint format [""SAPPER\nAnger: %2\nCanSee: %3\nTarget: %4\nHit: %5\nNear: %6FPS:%1"",diag_fps,_sAnger,_canSee,_trgt,_sHit,_sFiredNear];" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "";
+ precondition = "";
+ class Links
+ {
+ class _
+ {
+ itemno = ;
+ priority = 0.000000;
+ to="reset___control";
+ precondition = "";
+ condition="";
+ action="";
+ };
+ };
+ };
+ class instinct
+ {
+ name = "instinct";
+ itemno = ;
+ init = "//systemchat format [""WI:%1"",diag_tickTime];";
+ precondition = "";
+ class Links
+ {
+ class instinct_done
+ {
+ itemno = ;
+ priority = 100.000000;
+ to="action";
+ precondition = "";
+ condition="_decisionMade;";
+ action="_decisionMade = false;";
+ };
+ class dispose
+ {
+ itemno = ;
+ priority = 90.000000;
+ to="instinct";
+ precondition = "";
+ condition="!alive _unit || _callDispose;";
+ action="_doDispose = true;" \n
+ "_decisionMade = true;" \n
+ "" \n
+ "" \n
+ "";
+ };
+ class move
+ {
+ itemno = ;
+ priority = 60.000000;
+ to="instinct";
+ precondition = "";
+ condition="!(_moveTo isEqualTo _nextPos)";
+ action="_doMove = true;" \n
+ "_decisionMade = true;" \n
+ "_moveTo = [] + _nextPos;" \n
+ "";
+ };
+ };
+ };
+ class action
+ {
+ name = "action";
+ itemno = ;
+ init = "//systemchat format [""WA:%1"",diag_tickTime];";
+ precondition = "";
+ class Links
+ {
+ class dispose
+ {
+ itemno = ;
+ priority = 120.000000;
+ to="end";
+ precondition = "";
+ condition="_doDispose;";
+ action="";
+ };
+ class complete
+ {
+ itemno = ;
+ priority = 100.000000;
+ to="reset___control";
+ precondition = "";
+ condition="_actionDone && ((call compile _criteria) || (diag_tickTime > (_t + _sWait)));";
+ action="" \n
+ "if(!isNil ""_criteriaMetAction"")then{" \n
+ "call _criteriaMetAction;" \n
+ "};" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "" \n
+ "";
+ };
+ class move
+ {
+ itemno = ;
+ priority = 5.000000;
+ to="do_move";
+ precondition = "";
+ condition="_doMove;" \n
+ "";
+ action="_doMove = false;" \n
+ "";
+ };
+ };
+ };
+ class reset___control
+ {
+ name = "reset___control";
+ itemno = ;
+ init = "//Brain Vars" \n
+ "_criteria =""(false)"";" \n
+ "_criteriaMetAction = nil;" \n
+ "_actionDone = false;" \n
+ "_sWait = 0;" \n
+ "" \n
+ "_newTrgt = false;" \n
+ "" \n
+ "" \n
+ "" \n
+ "";
+ precondition = "";
+ class Links
+ {
+ class _
+ {
+ itemno = ;
+ priority = 0.000000;
+ to="instinct";
+ precondition = "";
+ condition="";
+ action="";
+ };
+ };
+ };
+ class end
+ {
+ name = "end";
+ itemno = ;
+ init = "//systemchat format[""Walk Disposing for %1"",_unit];";
+ precondition = "";
+ class Links
+ {
+ };
+ };
+ class do_move
+ {
+ name = "do_move";
+ itemno = ;
+ init = "_unit moveTo _moveTo;" \n
+ "" \n
+ "" \n
+ "_actionDone = true;" \n
+ "_criteria = ""moveToCompleted _unit || _newTrgt"";" \n
+ "_sWait = (_unit distance _moveTo) * 2;" \n
+ "";
+ precondition = "";
+ class Links
+ {
+ class _
+ {
+ itemno = ;
+ priority = 0.000000;
+ to="action";
+ precondition = "";
+ condition="";
+ action="";
+ };
+ };
+ };
+ };
+ initState="sapper";
+ finalStates[] =
+ {
+ "end"
+ };
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/EPOCH_EnterBuilding.sqf b/Sources/epoch_code/compile/EPOCH_EnterBuilding.sqf
new file mode 100644
index 00000000..d6f9185a
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_EnterBuilding.sqf
@@ -0,0 +1,4 @@
+if !(isNull _this) then{
+ EPOCH_oneWayTP = [player,_this,Epoch_personalToken];
+ publicVariableServer "EPOCH_oneWayTP";
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/EPOCH_LootIT.sqf b/Sources/epoch_code/compile/EPOCH_LootIT.sqf
new file mode 100644
index 00000000..fc89c7d5
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_LootIT.sqf
@@ -0,0 +1,29 @@
+if (!isNull _this) then {
+ EPOCH_lootContainer = [_this,player,Epoch_personalToken];
+ publicVariableServer "EPOCH_lootContainer";
+
+ if (typeof _this == "wardrobe_EPOCH") then {
+ if !(_this getVariable["MIRROR_SETUP", false]) then {
+ _this spawn {
+ _this setVariable ["MIRROR_SETUP", true];
+ _cam = "camera" camCreate (_this modelToWorld [0,0.25,1.5]);
+ _cam camSetTarget (_this modelToWorld [0,-30,1]);
+ _cam camSetFov 0.3;
+ _cam camCommit 0;
+ "rendertargetwardrobe0" setPiPEffect [0];
+ _cam cameraEffect ["Internal", "FRONT","rendertargetwardrobe0"];
+ _this setObjectTexture [0,"#(argb,512,512,1)r2t(rendertargetwardrobe0,1.0)"];
+
+ waitUntil {
+ uiSleep 5;
+ (isNull _this) || ((_this distance player) > 20)
+ };
+
+ _cam cameraEffect ["terminate","back"];
+ camDestroy _cam;
+ _this setVariable["MIRROR_SETUP", nil];
+ _this setObjectTexture [0,""];
+ };
+ };
+ };
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/EPOCH_PutHandler.sqf b/Sources/epoch_code/compile/EPOCH_PutHandler.sqf
new file mode 100644
index 00000000..f1ea0ded
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_PutHandler.sqf
@@ -0,0 +1,10 @@
+private ["_femaleVariant","_vest","_class","_config","_woman","_maleVariant"];
+_class = _this select 2;
+//Radio Check
+if (configName(inheritsFrom(configFile >> "CfgWeapons" >> _class)) == "ItemRadio") then {
+ if !(_class in(assignedItems player)) then {
+ //diag_log "UnEQUPPED RADIO";
+
+ EPOCH_equippedItem_PVS = [_class,false,player];
+ };
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/EPOCH_QuickTakeAll.sqf b/Sources/epoch_code/compile/EPOCH_QuickTakeAll.sqf
new file mode 100644
index 00000000..9c295c76
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_QuickTakeAll.sqf
@@ -0,0 +1,9 @@
+closeDialog 0;
+{
+ _magazines = magazinesAmmoCargo _x;
+ clearMagazineCargoGlobal _x;
+ {
+ if !(player canAdd (_x select 0)) exitWith {};
+ player addMagazine[_x select 0, _x select 1];
+ } foreach _magazines;
+} foreach nearestObjects[player, ["container_epoch"], 5];
diff --git a/Sources/epoch_code/compile/EPOCH_QuickTakeLoad.sqf b/Sources/epoch_code/compile/EPOCH_QuickTakeLoad.sqf
new file mode 100644
index 00000000..a36e980f
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_QuickTakeLoad.sqf
@@ -0,0 +1,10 @@
+createDialog "QuickTake";
+{
+ _magazines = magazinesAmmoCargo _x;
+ {
+ _index = lbAdd[1500, getText(configfile >> "CfgMagazines" >> (_x select 0) >> "DisplayName")];
+ lbSetData[1500, _index, _x select 0];
+ lbSetValue[1500, _index, _x select 1];
+ lbSetPicture[1500, _index, _x select 0 call EPOCH_itemPicture];
+ } foreach _magazines;
+} foreach nearestObjects[player, ["container_epoch"], 5];
diff --git a/Sources/epoch_code/compile/EPOCH_SpawnTraderMiltia.sqf b/Sources/epoch_code/compile/EPOCH_SpawnTraderMiltia.sqf
new file mode 100644
index 00000000..b397cffb
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_SpawnTraderMiltia.sqf
@@ -0,0 +1,26 @@
+//Make _trgt = trader and join militia to traders group
+_trgt = player;
+_nrBuilds = nearestObjects [getPosATL _trgt,["house"],50];
+
+_grp = createGroup RESISTANCE;
+for "_i" from 1 to 3 step 1 do
+{
+ _startPos = [];
+ while {count _startPos < 1} do {
+ _garrCount = 0;
+ _rndHouse = _nrBuilds select (floor random(count _nrBuilds));
+
+ while {format ["%1", _rndHouse buildingPos (_garrCount)] != "[0,0,0]" } do {
+ _garrCount = _garrCount + 1;
+ };
+
+ if (_garrCount > 0) then {
+ _startPos = _rndHouse buildingPos (floor random _garrCount);
+ };
+ };
+
+ _unit = _grp createUnit["B_G_Soldier_F", _startPos, [], 0, "CAN_COLLIDE"];
+ _unit addEventHandler ["FiredNear", "group (_this select 0) setVariable[""shotsFired"",[(_this select 1),(_this select 2)]]"];
+ _unit addEventHandler ["Killed", "group (_this select 0) setVariable[""killer"",_this select 1]"];
+ [_unit] execFSM "\x\addons\a3_epoch_code\System\Trader_Militia.fsm";
+};
diff --git a/Sources/epoch_code/compile/EPOCH_UnisexCheck.sqf b/Sources/epoch_code/compile/EPOCH_UnisexCheck.sqf
new file mode 100644
index 00000000..3a40ac67
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_UnisexCheck.sqf
@@ -0,0 +1,145 @@
+private ["_femaleVariant","_vest","_class","_config","_woman","_maleVariant"];
+_woman = getNumber(configFile >> "CfgVehicles" >> (typeOf player) >> "woman");
+_class = _this select 2;
+_config = configfile >> "cfgweapons" >> _class;
+
+/*
+_sleepAndCheck = {
+ _good = true;
+ _failcount = 0;
+ switch _this do {
+ case 0: {
+ while {true} do {
+ if !(local(backpackContainer player)) then {
+ _good = false;
+ _failcount = _failcount + 1;
+ } else {
+ _good = true;
+ };
+ if (_good) exitWith {};
+ if (_failcount > 5) exitWith { removeBackpack player; };
+ sleep 0.5;
+ };
+ };
+ case 1: {
+ while {true} do {
+ if !(local(vestContainer player)) then {
+ _good = false;
+ _failcount = _failcount + 1;
+ } else {
+ _good = true;
+ };
+ if (_good) exitWith{};
+ if (_failcount > 5) exitWith{ removeVest player; };
+ sleep 0.5;
+ };
+ };
+ case 2: {
+ while {true} do {
+ if !(local(uniformContainer player)) then {
+ _good = false;
+ _failcount = _failcount + 1;
+ } else {
+ _good = true;
+ };
+ if (_good) exitWith{};
+ if (_failcount > 5) exitWith{ removeUniform player; };
+ sleep 0.5;
+ };
+ };
+ };
+};
+
+
+if (isclass _config) then {
+ _infoType = getnumber(_config >> "itemInfo" >> "type");
+ switch _infoType do {
+ case 701: { 1 spawn _sleepAndCheck; };
+ case 801: { 2 spawn _sleepAndCheck; };
+ };
+} else {
+ if (getNumber(configFile >> "CfgVehicles" >> _class >> "isbackpack") == 1) then {
+ 0 spawn _sleepAndCheck;
+ };
+};
+*/
+
+_mags = (magazines player) + (handgunMagazine player);
+
+// TODO optimize
+if (_class in ["Hatchet","CrudeHatchet"]) then {
+ if !("Hatchet_swing" in _mags) then {
+ player addMagazine "Hatchet_swing";
+ };
+};
+if (_class in ["MeleeSledge", "MeleeMaul"]) then {
+ if !("sledge_swing" in _mags) then {
+ player addMagazine "sledge_swing";
+ };
+};
+if (_class in ["WoodClub","Plunger"]) then {
+ if !("stick_swing" in _mags) then {
+ player addMagazine "stick_swing";
+ };
+};
+
+//Radio Check
+if (configName(inheritsFrom(configFile >> "CfgWeapons" >> _class)) == "ItemRadio") then {
+ if (_class in(assignedItems player)) then {
+ //diag_log "EQUPPED RADIO";
+ EPOCH_equippedItem_PVS = [_class,true,player];
+ };
+};
+
+if (_woman == 1) then {
+ if (isClass _config) then {
+
+ //diag_log format["DEBUG EPOCH_UnisexCheck: %1", _this];
+
+ if (isText (_config >> "femaleVest")) then {
+ _femaleVariant = getText (_config >> "femaleVest");
+ _vest = vest player;
+ if (_class == _vest) then {
+ if (_femaleVariant != _vest) then {
+
+ /* // everyContainer not working in 1.20
+ _holder = _this select 1;
+ _containers = (everyContainer _holder) select 0;
+ _mags = magazinesAmmoFull _container;
+ _weps = weaponCargo vestContainer _container;
+ _item = itemCargo vestContainer _container;
+ */
+ removeVest player;
+ player addVest _femaleVariant;
+ /*
+ {
+ if ((_x select 4) == "Vest") then {
+ player addMagazine [(_x select 0),(_x select 1)]
+ }
+ } forEach _mags;
+
+ {
+ player addItemToVest _x;
+ } forEach (_weps+_item);
+ */
+
+ };
+ };
+ };
+ };
+} else {
+ if (isClass _config) then {
+ //diag_log format["DEBUG EPOCH_UnisexCheck: %1", _this];
+
+ if (isText (_config >> "maleVest")) then {
+ _maleVariant = getText (_config >> "maleVest");
+ _vest = vest player;
+ if (_class == _vest) then {
+ if (_maleVariant != _vest) then {
+ removeVest player;
+ player addVest _maleVariant;
+ };
+ };
+ };
+ };
+};
diff --git a/Sources/epoch_code/compile/EPOCH_antiWall.sqf b/Sources/epoch_code/compile/EPOCH_antiWall.sqf
new file mode 100644
index 00000000..9515c712
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_antiWall.sqf
@@ -0,0 +1,76 @@
+/*
+ A3 Epoch Anti-Vehicle Wall glitch
+*/
+_vehicle = _this select 0;
+_position = _this select 1;
+_unit = _this select 2;
+
+if (_unit == player) then {
+
+ _vehicle removeAllEventHandlers "GetOut";
+ EPOCH_currentVehicle = objNull;
+
+ _worldPos = getPosATLVisual _vehicle;
+ _worldPos set[2, (_worldPos select 2) + 1];
+
+ _front = _worldPos;
+
+ _dirTo = [_vehicle, player] call BIS_fnc_dirTo;
+ _front2 = [_worldPos, (_vehicle distance player) + 1, _dirTo] call BIS_fnc_relPos;
+
+ {
+ if (_x isKindOf "Const_All_Walls_F") exitWith{
+ player moveInAny _vehicle;
+ EPOCH_antiWallCount = EPOCH_antiWallCount + 1;
+ };
+ } forEach lineintersectsobjs[ATLToASL _front, ATLToASL _front2, player, _vehicle, true, 2];
+};
+
+
+/*
+onEachFrame{ drawLine3D[EP_front, EP_front2, [1, 0, 0, 1]]; };
+
+
+[] spawn {
+ while {true} do {
+ if (vehicle player != player) then {
+ if (isNull EPOCH_currentVehicle) then {
+ EPOCH_currentVehicle = (vehicle player);
+ EPOCH_currentVehicle addEventHandler ["GetOut", "_this call EPOCH_antiWall"];
+ hint format ['selected %1',EPOCH_currentVehicle];
+ };
+ };
+ uiSleep 0.2;
+ };
+};
+
+// older stuff
+EP = getText (configFile >> "cfgVehicles" >> typeOf cursortarget >> "memoryPointsGetInDriver");
+EP_modelPos = cursortarget selectionPosition EP;
+EP_worldPos = cursorTarget modelToWorld EP_modelPos;
+EP1 = getText (configFile >> "cfgVehicles" >> typeOf cursortarget >> "memoryPointsGetInDriverDir");
+
+EP1_modelPos = cursortarget selectionPosition EP1;
+EP1_worldPos = cursorTarget modelToWorld EP1_modelPos;
+
+EP_worldPos set [2, 1];
+EP1_worldPos set [2, 1];
+
+onEachFrame { drawLine3D [EP_worldPos, EP1_worldPos, [1,0,0,1]]; };
+
+
+EP = getText (configFile >> "cfgVehicles" >> typeOf cursortarget >> "memoryPointsGetInCargo");
+EP_modelPos = cursortarget selectionPosition EP;
+EP_worldPos = cursorTarget modelToWorld EP_modelPos;
+EP1 = getText (configFile >> "cfgVehicles" >> typeOf cursortarget >> "memoryPointsGetInCargoDir");
+
+EP1_modelPos = cursortarget selectionPosition EP1;
+EP1_worldPos = cursorTarget modelToWorld EP1_modelPos;
+
+EP_worldPos set [2, 1];
+EP1_worldPos set [2, 1];
+
+onEachFrame { drawLine3D [EP_worldPos, EP1_worldPos, [1,0,0,1]]; };
+
+
+*/
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/EPOCH_callSapperMigration.sqf b/Sources/epoch_code/compile/EPOCH_callSapperMigration.sqf
new file mode 100644
index 00000000..043b221f
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_callSapperMigration.sqf
@@ -0,0 +1,39 @@
+private["_notReady","_abortAfter","_start","_finish","_dirTo","_nrPlyrs","_i","_pos","_trgt","_sapperCount"];
+ _disableAI = {
+ {_this disableAI _x}forEach["TARGET","AUTOTARGET","FSM"];
+};
+
+_trgt = player;
+if(count _this > 0)then{
+_trgt = _this select 0;
+};
+_sapperCount = 8;
+if(count _this > 1)then{
+_sapperCount = _this select 1;
+};
+_notReady = true;
+_abortAfter = 0;
+_start = [];
+_finish = [];
+while {_notReady} do {
+_start = [_trgt, 480, random 360] call BIS_fnc_relPos;
+_dirTo = [_start,_trgt,18] call EPOCH_fnc_dirToFuzzy;
+_finish = [_start, ((_start distance _trgt) * 2), _dirTo] call BIS_fnc_relPos;
+_nrPlyrs = nearestObjects [_start, ["Epoch_Female_base_F","Epoch_Man_base_F"],200];
+ if((!(surfaceIsWater _start) && !(surfaceIsWater _finish) && (count _nrPlyrs < 1)) || _abortAfter > 41)then{
+ _notReady = false;
+ };
+_abortAfter = _abortAfter + 1;
+};
+
+if(_abortAfter < 42)then{
+ for "_i" from 1 to _sapperCount step 1 do {
+ _pos = _start findEmptyPosition [0,20,"Epoch_Sapper_F"];
+ _axeSapper = createAgent ["Epoch_Sapper_F", _pos, [], 12, "FORM"];
+ waitUntil {_axeSapper == _axeSapper};
+ _axeSapper call _disableAI;
+ EPOCHSapperMigrationHandle = [_axeSapper,_finish] execFSM "\x\addons\a3_epoch_code\System\sapperSwarmMember.fsm";
+ uiSleep 0.75;
+ };
+Epoch_axeMigrationRunning = true;
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/EPOCH_chopWood.sqf b/Sources/epoch_code/compile/EPOCH_chopWood.sqf
new file mode 100644
index 00000000..bf4847b2
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_chopWood.sqf
@@ -0,0 +1,38 @@
+private["_currentPos", "_object", "_type", "_objects", "_sel_object"];
+
+_currentPos = player modelToWorld[0, 5, 0];
+if !(surfaceIsWater _currentPos) then {
+ _currentPos = ATLtoASL _currentPos;
+};
+
+_objects = lineIntersectsObjs[eyePos player, _currentPos, player, objNull, true, 2];
+_object = objNull;
+_type = 0;
+
+_config = 'CfgEpochClient' call EPOCH_returnConfig;
+_treesLootList = getArray(_config >> worldname >> "Trees");
+_bushesLootList = getArray(_config >> worldname >> "Bushes");
+
+{
+ _strObj = str _x;
+ _sel_object = _x;
+ _findStart = _strObj find ": ";
+ if (_findStart != -1) then{
+ _p3dName = _strObj select[_findStart + 2, 999];
+ if (_p3dName in _treesLootList) then{
+ _object = _sel_object;
+ };
+ if (_p3dName in _bushesLootList) then{
+ _type = 1;
+ _object = _sel_object;
+ };
+ };
+ if !(isNull _object) exitWith {};
+}foreach _objects;
+
+if (!isNull _object) then {
+ if (alive _object) then {
+ EPOCH_knockDownTree = [_object,_type,player,EPOCH_personalToken];
+ publicVariableServer "EPOCH_knockDownTree";
+ };
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/EPOCH_consumeItem.sqf b/Sources/epoch_code/compile/EPOCH_consumeItem.sqf
new file mode 100644
index 00000000..7e2fa037
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_consumeItem.sqf
@@ -0,0 +1,302 @@
+private ["_type","_interactOption","_previewClass","_object","_isStorage","_isOk","_buildClass","_vehicle","_currentFuel","_canCapacity","_fuelCapacity","_newFuel","_vehicles","_highestDMG","_currentHIT","_currentDMG","_newDMG","_paintCanIndex","_paintCanColor","_msg","_color","_text","_item","_pic","_removeItem"];
+
+_text = EPOCH_InteractedItem select 0;
+_item = EPOCH_InteractedItem select 1;
+_pic = EPOCH_InteractedItem select 2;
+
+_type = "CfgMagazines";
+if (isClass (configfile >> "CfgWeapons" >> _item)) then {_type = "CfgWeapons"};
+
+_config = (configfile >> _type >> _item);
+_type = getNumber(_config >> "type");
+_interactOption = getNumber(_config >> "interactAction");
+_interactReturnOnUse = getText(_config >> "interactReturnOnUse");
+_interactAttributes = getArray(_config >> "interactAttributes");
+
+_removeItem = {([player,_this] call BIS_fnc_invRemove) == 1};
+
+_giveAttributes = {
+ _index = _this select 0;
+ _data = _this select 1;
+ _addPlus = if (_data > 0) then {"+"} else {""};
+ _return = "";
+ if (_data != 0) then {
+ switch _index do {
+ case 0: {
+ EPOCH_playerTemp = ((EPOCH_playerTemp + _data) min 106.7) max 95; // data = 1
+ _return = format["Temp: %1%2 (%3 F)
", _addPlus, _data, EPOCH_playerTemp];
+ };
+ case 1: {
+ EPOCH_playerHunger = ((EPOCH_playerHunger + _data) min 5000) max 0;
+ _return = format["Hunger: %1%2 (%3/%4)
", _addPlus, _data, EPOCH_playerHunger, 5000];
+ };
+ case 2: {
+ EPOCH_playerThirst = ((EPOCH_playerThirst + _data) min 2500) max 0;
+ _return = format["Thirst: %1%2 (%3/%4)
", _addPlus, _data, EPOCH_playerThirst, 2500];
+ };
+ case 3: {
+ EPOCH_playerEnergy = ((EPOCH_playerEnergy + _data) min EPOCH_playerEnergyMax) max 0;
+ _return = format["Energy: %1%2 (%3/%4)
", _addPlus, _data, EPOCH_playerEnergy, EPOCH_playerEnergyMax];
+ };
+ case 4: {
+ EPOCH_playerSoiled = ((EPOCH_playerSoiled + _data) min 100) max 0; // data -25
+ _return = format["Soiled: %1%2 (%3/%4)
", _addPlus, _data, EPOCH_playerSoiled, 100];
+ };
+ case 5: {
+ EPOCH_playerImmunity = ((EPOCH_playerImmunity + _data) min 100) max 0;
+ _return = format["Immunity: %1%2 (%3/%4)
", _addPlus, _data, EPOCH_playerImmunity, 100];
+ };
+ case 6: {
+ // EPOCH_playerToxicity = ((EPOCH_playerToxicity + _data) min 100) max 0;
+ // new random tox
+ _randomData = round(random _data);
+ EPOCH_playerToxicity = ((EPOCH_playerToxicity + _randomData) min 100) max 0;
+ _return = format["Toxicity: %1%2 (%3/%4)
", _addPlus, _randomData, EPOCH_playerToxicity, 100];
+ };
+ case 7: {
+ EPOCH_playerStamina = ((EPOCH_playerStamina + _data) min EPOCH_playerStaminaMax) max 0;
+ _return = format["Stamina: %1%2 (%3/%4)
", _addPlus, _data, EPOCH_playerStamina, EPOCH_playerStaminaMax];
+ };
+ case 8: {
+ //EPOCH_playerCrypto = ((EPOCH_playerCrypto + _data) min 25000) max 0;
+ //_return = format["Krypto: %1%2 (%3)
", _addPlus, _data, EPOCH_playerCrypto];
+ };
+ case 9: {
+ EPOCH_playerBloodP = ((EPOCH_playerBloodP + _data) min 190) max 0;
+ _return = format["Blood Pressure: %1%2 (%3/%4)
", _addPlus, _data, EPOCH_playerBloodP, 100];
+ };
+ };
+ };
+ _return
+};
+
+_unifiedInteract = {
+ if (_item call _removeItem) then {
+ if (_interactReturnOnUse != "") then {
+ player addMagazine _interactReturnOnUse;
+ };
+ _output = "";
+ {
+ _output = _output + ([_forEachIndex, _x] call _giveAttributes);
+ } foreach _interactAttributes;
+ if (_output != "") then {
+ _dt = [format["%1", _output], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+};
+
+switch _interactOption do {
+ case 1: _unifiedInteract; // Eat 1
+ case 2: _unifiedInteract; //Drink 2
+ case 3: { // Build 3
+ closeDialog 0;
+ _buildClass = getText(configfile >> "CfgMagazines" >> _item >> "buildClass");
+ if (_buildClass != "") then {
+ _isStorage = getNumber(configfile >> "CfgMagazines" >> _item >> "isStorage");
+
+ _isOk = if (_isStorage == 1) then { EPOCH_StorageSlotsCount > 0 } else { EPOCH_BuildingSlotCount > 0 };
+
+ if (_buildClass == "LockBox_SIM_EPOCH") then {
+ _isOk = (EPOCH_StorageSlotsCount > 0 && EPOCH_BuildingSlotCount > 0);
+ };
+ if (isNil "EPOCH_simulSwap_Lock") then {
+ if !(isNil "_isOk") then {
+ if (_isOk) then {
+
+ if (_buildClass call EPOCH_isBuildAllowed) then {
+
+ if (EPOCH_playerEnergy > 0) then {
+
+ EPOCH_buildMode = 1;
+ EPOCH_buildDirection = 0;
+
+ // base building
+ _pos = player modelToWorldVisual[0, 5, 0];
+ _pos set[2, getPosATL player select 2];
+ _object=createVehicle[_buildClass,_pos,[],0,"CAN_COLLIDE"];
+ _object setDir ((getDir player) - 180);
+
+ if (_buildClass != "PlotPole_EPOCH") then {
+ if (_object isKindOf "ThingX") then {
+ if (([player, _item] call BIS_fnc_invRemove) == 1) then {
+ [_object] spawn EPOCH_simulSwap;
+ };
+ } else {
+ [_object,_item] spawn EPOCH_staticMove;
+ };
+ } else {
+ _object spawn EPOCH_countdown;
+ };
+
+ _dt = [format["Press '%1' to drop object.", "1"], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+
+
+ } else {
+ _dt = ["Need Energy< / t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+ } else {
+ _dt = ["World limit reached", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+ };
+ };
+ };
+ case 4: { // Refuel 4
+ _vehicles = player nearEntities [["LandVehicle","Ship","Air","Tank"], 6];
+ if (cursorTarget in _vehicles) then {
+ _vehicle = cursorTarget;
+ _currentFuel = fuel _vehicle;
+ _canCapacity = 10;
+ _fuelCapacity = getNumber (configfile >> "CfgVehicles" >> (typeOf _vehicle) >> "fuelCapacity");
+ _currentFuel = _currentFuel * _fuelCapacity;
+ _newFuel = _currentFuel + _canCapacity;
+ _newFuel = _newFuel / _fuelCapacity;
+
+ if (_item call _removeItem) then {
+ player addMagazine "jerrycanE_epoch";
+ EPOCH_fillVehicle_PVS = [_vehicle,_newFuel,player,Epoch_personalToken];
+ publicVariableServer "EPOCH_fillVehicle_PVS";
+ _dt = ["Fuel Added", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+ };
+ case 5: {
+ _vehicles = player nearEntities [["LandVehicle","Ship","Air","Tank"], 6];
+ if (cursorTarget in _vehicles) then {
+ _vehicle = cursorTarget;
+ _canCapacity = 10;
+ _fuelCapacity = getNumber (configfile >> "CfgVehicles" >> (typeOf _vehicle) >> "fuelCapacity");
+ _newFuel = (((fuel _vehicle) * _fuelCapacity) - _canCapacity) / _fuelCapacity;
+
+ //diag_log format["FIND fill _newFuel %1 capacity: %2 current: %3",_newFuel,_fuelCapacity,_currentFuel];
+ if (_newFuel > 0) then {
+ if (_item call _removeItem) then {
+ player addMagazine "jerrycan_epoch";
+ EPOCH_fillVehicle_PVS = [_vehicle,_newFuel,player,Epoch_personalToken];
+ publicVariableServer "EPOCH_fillVehicle_PVS";
+ _dt = ["Fuel Siphoned", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ } else {
+ _dt = ["Not Enough Fuel", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+ };
+ case 6: _unifiedInteract; //Clean -25
+ case 7: _unifiedInteract; //Warm + 1
+ case 8: _unifiedInteract; //Cold -1
+ case 9: _unifiedInteract; //Energy 100
+ case 10: { // Repair 10 - Lite
+ _vehicles = player nearEntities [["LandVehicle","Ship","Air","Tank"], 6];
+ _vehicle = cursorTarget;
+ if (_vehicle in _vehicles) then {
+
+ if (_item call _removeItem) then {
+
+ _highestDMG = 0;
+ _currentHIT = -1;
+ _currentDMG = 0;
+ {
+ _currentDMG = _x;
+ if (_currentDMG > _highestDMG) then {
+ _highestDMG = _currentDMG;
+ _currentHIT = _forEachIndex;
+ };
+ }forEach ((getAllHitPointsDamage _vehicle) param [2,[]]);
+
+ if (_highestDMG > 0) then {
+
+ _newDMG = ((_highestDMG - 0.5) max 0);
+
+ if (local _vehicle) then {
+ [_vehicle, [_currentHIT, _newDMG]] call EPOCH_client_repairVehicle;
+ } else {
+ EPOCH_repairVehicle_PVS = [_vehicle,[_currentHIT,_newDMG],player,Epoch_personalToken];
+ publicVariableServer "EPOCH_repairVehicle_PVS";
+ };
+
+ //diag_log format["DEBUG HITPOINT REPAIRED: %1 %2 %3", _currentHIT, _newDMG, _item];
+ } else {
+ if ((damage _vehicle) > 0) then {
+ EPOCH_repairVehicle_PVS = [_vehicle,["ALL",0],player,Epoch_personalToken];
+ publicVariableServer "EPOCH_repairVehicle_PVS";
+ };
+ };
+ _dt = ["Vehicle Partially Repaired", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+ };
+ case 11: { // Repair 11 - Heavy
+ _vehicles = player nearEntities [["LandVehicle","Ship","Air","Tank"], 6];
+ _vehicle = cursorTarget;
+ if (_vehicle in _vehicles) then {
+ if (_item call _removeItem) then {
+ EPOCH_repairVehicle_PVS = [_vehicle,["ALL",0],player,Epoch_personalToken];
+ publicVariableServer "EPOCH_repairVehicle_PVS";
+ _dt = ["Vehicle Fully Repaired", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+ };
+
+ // case 12 consume paincan and set texture on base object (only if has slot and is static)
+ case 12: {
+ closeDialog 0;
+ _vehicles = player nearObjects["Const_WoodWalls_static_F", 5];
+ _vehicle = cursorTarget;
+ if (_vehicle in _vehicles) then {
+ if ("" call EPOCH_isBuildAllowed) then {
+ _color = getArray(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "availableTextures");
+ if !(_color isEqualTo[]) then {
+
+ if (_item call _removeItem) then {
+
+ // find _paintCanIndex from config
+ _paintCanIndex = getNumber(configfile >> "CfgMagazines" >> _item >> "textureIndex");
+ _paintCanColor = getText(configfile >> "CfgMagazines" >> _item >> "colorName");
+
+ EPOCH_PAINTBUILD = [_vehicle,_paintCanIndex,player,Epoch_personalToken];
+ publicVariableServer "EPOCH_PAINTBUILD";
+
+ _msg = format["Wall Painted %1", _paintCanColor];
+ _dt = [format["%1", _msg], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+ }
+ else {
+ _dt = ["Disallowed", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+ };
+
+ case 13: { //Heal Player
+ _vehicles = player nearEntities[["Epoch_Male_F", "Epoch_Female_F"], 6];
+ _vehicle = cursorTarget;
+ if (_vehicle in _vehicles) then {
+ if (damage _vehicle != 0) then {
+ if (_item call _removeItem) then {
+ EPOCH_repairVehicle_PVS = [_vehicle,["ALL",0],player,Epoch_personalToken];
+ publicVariableServer "EPOCH_repairVehicle_PVS";
+ _dt = ["Healed other player", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+ } else {
+ if (damage player != 0) then {
+ if (_item call _removeItem) then {
+ EPOCH_repairVehicle_PVS = [player,["ALL",0],player,Epoch_personalToken];
+ publicVariableServer "EPOCH_repairVehicle_PVS";
+ _dt = ["Healed yourself", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+ };
+ };
+
+ default {
+ // bottom
+ _dt = ["Found nothing", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ // center
+ // _dt = ["text", 0, 0.4, 5, 2, 0, 2] spawn bis_fnc_dynamictext;
+ };
+};
+
+
+// diag_log format["DEBUG: EPOCH_consumeItem %1 type: %2",_item,_type];
diff --git a/Sources/epoch_code/compile/EPOCH_craftItem.sqf b/Sources/epoch_code/compile/EPOCH_craftItem.sqf
new file mode 100644
index 00000000..99bf1d1a
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_craftItem.sqf
@@ -0,0 +1,128 @@
+_craftItem = EPOCH_CraftItemData;
+_abort = false;
+_msg = "";
+_craftedItemCount = 0;
+
+// _craftingConfig = configfile >> "CfgCrafting" >> _craftItem;
+_config = 'CfgCrafting' call EPOCH_returnConfig;
+_craftingConfig = _config >> _craftItem;
+if (isClass (_craftingConfig)) then {
+ _recipe = [] + getArray(_craftingConfig >> "recipe");
+ _nearby = [] + getArray(_craftingConfig >> "nearby");
+
+ //diag_log format["DEBUG craftitem: _nearby %1", _nearby];
+
+ _proceed = true;
+ // check nearby
+ {
+ _needType = _x select 0; // fire. alive, noclass
+ _needClasses = _x select 1; // ["ALL"]. ["filename.p3d"]
+ _needRange = _x select 2; // 3
+ _needCount = _x select 3; // 1
+ _needReason = _x select 4; // "Fire", "Water Source"
+
+ _nearObjects = nearestObjects[player, _needClasses, _needRange];
+
+ _nearbyCount = 0;
+ switch (_needType) do
+ {
+ case "fire": {_nearbyCount = {inflamed _x} count _nearObjects; };
+ case "alive": {_nearbyCount = {alive _x} count _nearObjects; };
+ case "noclass": {
+ {
+ _needName = _x;
+ _nearbyCount = {((str(_x) find _needName) != -1)} count nearestObjects[player, [], _needRange];
+
+ if (_nearbyCount > 0) exitWith{};
+ } foreach _needClasses;
+ };
+ };
+ if (_nearbyCount < _needCount)exitWith{
+ _proceed = false;
+ _msg = format["Need %1", _needReason];
+ };
+ } forEach _nearby;
+
+ if (_proceed) then {
+
+ _countIndex = lbCurSel 2100;
+ _craftCount = lbValue[2100, _countIndex];
+
+ //diag_log format["CRAFT COUNT: index %1 count %2", _countIndex, _craftCount];
+
+ closeDialog 0;
+
+ for "_r" from 1 to _craftCount do {
+
+ if (player canAdd _craftItem) then {
+ _recipeCount = 0;
+ _numRemoved = 0;
+ {
+ _recipeItem = _x;
+ _recipeQty = 1;
+
+ if (typeName _x == "ARRAY") then {
+ _recipeItem = _x select 0;
+ _recipeQty = _x select 1;
+ };
+ _recipeCount = _recipeCount + _recipeQty;
+
+ // TODO dry run before removing anything
+ if ([_recipeItem, "CfgWeapons"] call EPOCH_fnc_isAny) then {
+ _items = items player;
+ _currentCount = { _x == _recipeItem } count _items;
+ if (_currentCount >= _recipeQty) then {
+ for "_i" from 1 to _recipeQty do {
+ if (_recipeItem in _items) then {
+ player removeItem _recipeItem;
+ _numRemoved = _numRemoved + 1;
+ };
+ };
+ };
+ }
+ else {
+ _mags = magazines player;
+ _currentCount = { _x == _recipeItem } count _mags;
+ if (_currentCount >= _recipeQty) then {
+ for "_i" from 1 to _recipeQty do {
+ if (_recipeItem in _mags) then {
+ player removeMagazine _recipeItem;
+ _numRemoved = _numRemoved + 1;
+ };
+ };
+ };
+ };
+ } forEach _recipe;
+
+ if (_numRemoved == _recipeCount) then {
+ if (player canAdd _craftItem) then {
+ if ([_craftItem, "CfgWeapons"] call EPOCH_fnc_isAny) then {
+ player addItem _craftItem;
+ }
+ else {
+ player addMagazine _craftItem;
+ };
+ _craftedItemCount = _craftedItemCount + 1;
+ }
+ else {
+ _abort = true;
+ _msg = "Not enough space";
+ };
+ } else {
+ _abort = true;
+ _msg = "Incorrect item count";
+ };
+ } else {
+ _abort = true;
+ _msg = "Not enough space";
+ };
+ if (_abort) exitWith{};
+ };
+ };
+
+ if (_craftedItemCount > 0) then {
+ _dt = [format["Crafted %1 %2",_craftedItemCount,_craftItem call EPOCH_itemDisplayName], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ } else {
+ _dt = [format["%1", _msg], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/EPOCH_craftItemPreview.sqf b/Sources/epoch_code/compile/EPOCH_craftItemPreview.sqf
new file mode 100644
index 00000000..71b17dc4
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_craftItemPreview.sqf
@@ -0,0 +1,162 @@
+disableSerialization;
+
+ctrlShow[1600, false];
+ctrlShow[2100, false];
+ctrlShow[1000, false];
+ctrlShow[41008, true];
+ctrlShow[42000, true];
+
+
+_index = _this select 0;
+
+EPOCH_CraftItemData = "";
+
+_activeDisplay = findDisplay -15;
+
+_data = EPOCH_InteractedItem select 1;
+// _craftingConfig = configfile >> "CfgCrafting" >> (_data);
+_config = 'CfgCrafting' call EPOCH_returnConfig;
+_craftingConfig = _config >> _data;
+if (isClass (_craftingConfig)) then {
+ _usedIn = getArray (_craftingConfig >> "usedIn");
+
+ _selectedRecipe = _usedIn select _index;
+
+ EPOCH_CraftItemData = _selectedRecipe;
+
+ _craftingConfig = _config >> _selectedRecipe;
+ if (isClass (_craftingConfig)) then {
+ _recipe = getArray(_craftingConfig >> "recipe");
+ _nearby = getArray(_craftingConfig >> "nearby");
+
+ _recipeItems = [1200,1201,1202,1203,1204,1205];
+ _recipeStatus = [42200,42201,42202,42203,42204,42205];
+ _recipetooltip = [43200,43201,43202,43203,43204,43205];
+ _recipeCounts = [41001,41002,41003,41004,41005,41006];
+
+ _recipeResources = [45202,45203,45204,45205,45206,45207];
+ _recipeResourcesbtn = [44202,44203,44204,44205,44206,44207];
+
+
+ {
+ ctrlShow[_x, false];
+ } forEach _recipeItems;
+
+ {
+ ctrlShow[_x, false];
+ } forEach _recipeStatus;
+
+ {
+ ctrlShow[_x, false];
+ } forEach _recipeCounts;
+
+
+
+ // check for nearby resources
+ _proceed = true;
+ // check nearby
+ {
+ _needType = _x select 0; // fire. alive, noclass
+ _needClasses = _x select 1; // ["ALL"]. ["filename.p3d"]
+ _needRange = _x select 2; // 3
+ _needCount = _x select 3; // 1
+ _needReason = _x select 4; // "Fire", "Water Source"
+ _needImage = _x select 5; // fire, fuel, water, electricity
+
+ _nearObjects = nearestObjects[player, _needClasses, _needRange];
+
+ _nearbyCount = 0;
+ switch (_needType) do
+ {
+ case "fire": {_nearbyCount = {inflamed _x} count _nearObjects; };
+ case "alive": {_nearbyCount = {alive _x} count _nearObjects; };
+ case "noclass": {
+ {
+ _needName = _x;
+ _nearbyCount = {((str(_x) find _needName) != -1)} count nearestObjects[player, [], _needRange];
+ if (_nearbyCount > 0) exitWith{};
+ } foreach _needClasses;
+ };
+ };
+
+ (_activeDisplay displayCtrl(_recipeResourcesbtn select _forEachIndex)) ctrlSetTooltip _needReason;
+
+ if (_nearbyCount < _needCount) then {
+ _proceed = false;
+ // display needed icons
+ _icon = format["\x\addons\a3_epoch_code\Data\UI\need_%1_ca.paa", _needImage];
+ //diag_log format["%1", _icon];
+ ctrlSetText[(_recipeResources select _forEachIndex), _icon];
+
+ } else {
+ // display needed icons
+ _icon = format["\x\addons\a3_epoch_code\Data\UI\has_%1_ca.paa", _needImage];
+ //diag_log format["%1", _icon];
+ ctrlSetText[(_recipeResources select _forEachIndex), _icon];
+ };
+
+ } forEach _nearby;
+
+
+
+ _recipeCount = 0;
+ _itemCount = 0;
+ _mags = magazines player;
+ _items = items player;
+ {
+ _recipeItem = _x;
+ _recipeQty = 1;
+
+ if (typeName _x == "ARRAY") then {
+ _recipeItem = _x select 0;
+ _recipeQty = _x select 1;
+ };
+
+ _recipeCount = _recipeCount + _recipeQty;
+
+ _index = _forEachIndex;
+ _recipePic = _recipeItem call EPOCH_itemPicture;
+ ctrlSetText [(_recipeItems select _index), _recipePic];
+
+ _actualCount = 0;
+ if (isClass(configfile >> "cfgweapons" >> _recipeItem)) then {
+ _actualCount = { _x == _recipeItem } count _items;
+ } else {
+ _actualCount = { _x == _recipeItem } count _mags;
+ };
+
+
+ ctrlSetText[(_recipeCounts select _index), format["%1/%2", _actualCount, _recipeQty]];
+
+ ctrlShow[(_recipeItems select _index), true];
+ ctrlShow[(_recipeStatus select _index), true];
+ ctrlShow[(_recipeCounts select _index), true];
+
+ (_activeDisplay displayCtrl (_recipetooltip select _index)) ctrlSetTooltip format["%1",(_recipeItem call EPOCH_itemDisplayName)];
+
+ if (_actualCount >= _recipeQty) then {
+ ctrlSetText [(_recipeStatus select _index), ""];
+ _itemCount = _itemCount + _recipeQty;
+ (_activeDisplay displayCtrl (_recipeCounts select _index)) ctrlSetTextColor[1, 1, 1, 1];
+ } else {
+ ctrlSetText [(_recipeStatus select _index), "\x\addons\a3_epoch_assets\ui\xicon.paa"];
+ (_activeDisplay displayCtrl (_recipeCounts select _index)) ctrlSetTextColor[1, 0, 0, 1];
+ };
+
+ } forEach _recipe;
+
+ if (_itemCount == _recipeCount && _proceed) then {
+ ctrlShow [1600, true];
+ ctrlShow [2100, true];
+ ctrlShow [1000, true];
+ for "_i" from 0 to 9 do {
+ _num = _i + 1;
+ _index = lbAdd[2100, str(_num)]; lbSetValue[2100, _index, _num];
+ };
+ lbSetCurSel[2100, 0];
+ };
+ //diag_log format["DEBUG: EPOCH_craftItem %1 index: %2",_selectedRecipe,_index];
+ };
+ //diag_log format["DEBUG: EPOCH_craftItem %1 index: %2",_selectedRecipe,_index];
+};
+
diff --git a/Sources/epoch_code/compile/EPOCH_debugMonitor.sqf b/Sources/epoch_code/compile/EPOCH_debugMonitor.sqf
new file mode 100644
index 00000000..46d15026
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_debugMonitor.sqf
@@ -0,0 +1,60 @@
+private["_hours"];
+_hours = floor(servertime/60/60);
+
+hintSilent parseText format ["
+ Welcome to Epoch Alpha
+ Current Version: %22
+ Temp: %1
+ Blood Pressure: %2
+ Hunger: %3
+ Thirst: %4
+ Energy: %5
+ Wet: %6
+ Soiled: %7
+ Immunity: %8
+ Toxicity: %9
+ Stamina: %10
+ Fatigue: %11
+ Damage: %12
+ Bleeding: %13
+ Bleed Time: %14
+ Oxygen: %15
+
+ Air Temp: %16
+ Water Temp: %17
+ Rain: %18
+ Overcast: %19
+
+ Crypto: %20
+ Hours Alive: %21
+ FPS: %23
+ Server uptime: %24h %25m
+ Server FPS: %26
",
+ EPOCH_playerTemp,
+ EPOCH_playerBloodP,
+ EPOCH_playerHunger,
+ EPOCH_playerThirst,
+ EPOCH_playerEnergy,
+ EPOCH_playerWet,
+ EPOCH_playerSoiled,
+ EPOCH_playerImmunity,
+ EPOCH_playerToxicity,
+ EPOCH_playerStamina,
+ (getFatigue player),
+ (damage player),
+ (isBleeding player),
+ (getBleedingRemaining player),
+ (getOxygenRemaining player),
+ EPOCH_CURRENT_WEATHER,
+ (EPOCH_CURRENT_WEATHER/2),
+ rain,
+ overcast,
+ EPOCH_playerCrypto,
+ round(EPOCH_playerAliveTime/360)/10,
+ getText(configFile >> "CfgMods" >> "Epoch" >> "version"),
+ round diag_fps,
+ _hours,
+ round((serverTime/60)-(_hours*60)),
+ if (typeName EPOCH_diag_fps == "SCALAR") then [{EPOCH_diag_fps},{"MANIPULATED"}]
+];
+
diff --git a/Sources/epoch_code/compile/EPOCH_effectCrypto.sqf b/Sources/epoch_code/compile/EPOCH_effectCrypto.sqf
new file mode 100644
index 00000000..0dba1d8a
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_effectCrypto.sqf
@@ -0,0 +1,5 @@
+if (typeName _this == "SCALAR") then {
+ EPOCH_playerCrypto = _this;
+ 9992 cutRsc["EpochGameUI2", "PLAIN", 2, false];
+ ((uiNamespace getVariable "EPOCH_EpochGameUI2") displayCtrl 21208) ctrlSetText format["%1", EPOCH_playerCrypto];
+};
diff --git a/Sources/epoch_code/compile/EPOCH_handleServerMessage.sqf b/Sources/epoch_code/compile/EPOCH_handleServerMessage.sqf
new file mode 100644
index 00000000..f8d03297
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_handleServerMessage.sqf
@@ -0,0 +1,3 @@
+if (isLocalized (_this select 0)) then{
+ _dt = [format["%1", format[localize (_this select 0), _this select 1]], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+};
diff --git a/Sources/epoch_code/compile/EPOCH_interact.sqf b/Sources/epoch_code/compile/EPOCH_interact.sqf
new file mode 100644
index 00000000..0b731416
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_interact.sqf
@@ -0,0 +1,18 @@
+// store all interacted vehicles for update
+private ["_vehSlot"];
+0 call EPOCH_refeshUI;
+if (!isNull _this) then {
+ _vehSlot = _this getVariable ["VEHICLE_SLOT", "ABORT"];
+ if (_vehSlot != "ABORT") then {
+ if !(_this in EPOCH_arr_interactedObjs) then {
+ EPOCH_arr_interactedObjs pushBack _this;
+ };
+ };
+ _storSlot = _this getVariable["STORAGE_SLOT", "ABORT"];
+ if (_storSlot != "ABORT") then {
+ if !(_this in EPOCH_arr_interactedObjs) then {
+ EPOCH_arr_interactedObjs pushBack _this;
+ };
+ };
+};
+true
diff --git a/Sources/epoch_code/compile/EPOCH_itemInteract.sqf b/Sources/epoch_code/compile/EPOCH_itemInteract.sqf
new file mode 100644
index 00000000..23076f31
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_itemInteract.sqf
@@ -0,0 +1,93 @@
+disableSerialization;
+
+_text = "";
+_data = "";
+_pic = "";
+
+if (typeName _this isEqualTo "BOOL" && count EPOCH_InteractedItem == 3) then {
+ _text = EPOCH_InteractedItem select 0;
+ _data = EPOCH_InteractedItem select 1;
+ _pic = EPOCH_InteractedItem select 2;
+ //diag_log "DEBUG: mode 1";
+
+} else {
+ //diag_log "DEBUG: mode 2";
+
+ EPOCH_InteractedItem = [];
+
+ _control = _this select 0;
+ _index = _this select 1;
+
+ _text = _control lbText _index;
+ _data = _control lbData _index;
+ _pic = _control lbPicture _index;
+
+ if (_data == "") then {
+ _confData = "getText (_x >> 'displayName') == _text" configClasses(configFile >> "CfgWeapons");
+ if !(_confData isEqualTo[]) then {
+ _data = configName(_confData select 0);
+ };
+ };
+ EPOCH_InteractedItem = [_text,_data,_pic];
+};
+
+_craftingArray = [];
+_craftingArrayNames = [];
+
+// _craftingConfig = configfile >> "CfgCrafting" >> _data;
+
+_config = 'CfgCrafting' call EPOCH_returnConfig;
+_craftingConfig = _config >> _data;
+
+if (isClass (_craftingConfig)) then {
+ _usedIn = [] + getArray (_craftingConfig >> "usedIn");
+ {
+ //diag_log format["DEBUG: %1",_x,(_x call EPOCH_itemPicture),(_x call EPOCH_itemDisplayName)];
+ _craftingArray pushBack (_x call EPOCH_itemPicture);
+ _craftingArrayNames pushBack (_x call EPOCH_itemDisplayName);
+ } forEach _usedIn;
+};
+
+//diag_log format["DEBUG: EPOCH_itemInteract %1 EPOCH_InteractedItem %2", _this, EPOCH_InteractedItem];
+// diag_log format["DEBUG: _craftingArrayNames %1 _craftingArray %2", _craftingArrayNames, _craftingArray];
+
+closeDialog 0;
+if !(createdialog "InteractItem") exitWith {};
+
+ctrlShow[1600, false];
+ctrlShow[2100, false];
+ctrlShow[1000, false];
+ctrlShow[41008, false];
+ctrlShow[42000, false];
+
+_interactOption = 0;
+_buttonTXT = "";
+if (isClass (configfile >> "cfgweapons" >> _data)) then {
+ _type = getNumber (configfile >> "CfgWeapons" >> _data >> "type");
+ _interactOption = getNumber (configfile >> "CfgWeapons" >> _data >> "interactAction");
+ _buttonTXT = getText(configfile >> "CfgWeapons" >> _data >> "interactText");
+} else {
+ _type = getNumber (configfile >> "CfgMagazines" >> _data >> "type");
+ _interactOption = getNumber (configfile >> "CfgMagazines" >> _data >> "interactAction");
+ _buttonTXT = getText(configfile >> "CfgMagazines" >> _data >> "interactText");
+};
+
+if (_buttonTXT == "") then {
+ _buttonTXT = "EXAMINE";
+};
+
+ctrlSetText [41201, _buttonTXT];
+ctrlSetText [41200, _pic];
+_craftingArrayCount = count _craftingArray;
+_controls = [41202,41203,41204,41205,41206,41207];
+_buttons = [1602,1603,1604,1605,1606,1607];
+
+{
+ if (_craftingArrayCount >= (_forEachIndex+1)) then {
+ ctrlSetText [_x, (_craftingArray select _forEachIndex)];
+ ((findDisplay -15) displayCtrl (_buttons select _forEachIndex)) ctrlSetTooltip (_craftingArrayNames select _forEachIndex);
+ ctrlShow [_buttons select _forEachIndex, true];
+ } else {
+ ctrlShow [_buttons select _forEachIndex, false];
+ };
+}forEach _controls;
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/EPOCH_localCleanup.sqf b/Sources/epoch_code/compile/EPOCH_localCleanup.sqf
new file mode 100644
index 00000000..e69de29b
diff --git a/Sources/epoch_code/compile/EPOCH_lootTrash.sqf b/Sources/epoch_code/compile/EPOCH_lootTrash.sqf
new file mode 100644
index 00000000..0940dff6
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_lootTrash.sqf
@@ -0,0 +1,120 @@
+private["_found", "_return", "_foundLocalAnimal", "_str", "_blood", "_foundTerminal", "_index"];
+
+_return = false;
+
+if (isNil "EPOCH_trashLootList") then{
+ _config = 'CfgEpochClient' call EPOCH_returnConfig;
+ EPOCH_trashLootList = [];
+ {
+ EPOCH_trashLootList pushBack getArray(_config >> worldname >> _x);
+ } forEach(getArray(_config >> worldname >> "TrashClasses"));
+};
+if (isNil "EPOCH_atmList") then{
+ _config = 'CfgEpochClient' call EPOCH_returnConfig;
+ EPOCH_atmList = getArray(_config >> worldname >> "ATM");
+};
+
+if (diag_tickTime - EPOCH_lastTrash > 2) then {
+ EPOCH_lastTrash = diag_tickTime;
+
+ _destroyTrashObj = objNull;
+ _lootAnimalObj = objNull;
+ EPOCH_bankTerminal = objNull;
+ _trashType = 0;
+
+ _objects = nearestObjects[player, [], 2];
+
+ {
+ _found = false;
+ _foundTerminal = false;
+ _foundLocalAnimal = false;
+ if !(_x isKindOf "All") then {
+ if (alive _x) then {
+ _str = str(_x);
+ _findStart = _str find ": ";
+ if (_findStart != -1) then {
+ _p3dName = _str select[_findStart + 2, 999];
+ {
+ _found = _p3dName in _x;
+ if (_found) exitWith{ _trashType = _forEachIndex };
+ } forEach EPOCH_trashLootList;
+ _foundTerminal = _p3dName in EPOCH_atmList;
+ };
+ };
+ } else {
+ if (alive _x) then {
+ if ((typeOf _x) in["Land_PhoneBooth_02_F", "Land_PhoneBooth_01_F", "Land_Atm_01_F", "Land_Atm_02_F", "Land_Laptop_device_F"]) then {
+ _foundTerminal = true
+ };
+ if (_x isKindOf "Snake_random_EPOCH") then {
+ _foundLocalAnimal = true;
+ if (random 1 < 0.1) then {
+ EPOCH_playerToxicity = (EPOCH_playerToxicity + (random(100 - EPOCH_playerImmunity))) min 100;
+ };
+ };
+ } else {
+ if ((_x isKindOf "Animal_Base_F" && !(_x isKindOf "Dog_Base_F")) || (typeOf _x) in["Epoch_Sapper_F", "Epoch_SapperB_F", "Epoch_Cloak_F", "I_UAV_01_F"]) then {
+ _foundLocalAnimal = true;
+ };
+ };
+ };
+ if (_found) exitWith{ _destroyTrashObj = _x };
+ if (_foundLocalAnimal) exitWith{ _lootAnimalObj = _x };
+ if (_foundTerminal) exitWith{ EPOCH_bankTerminal = _x };
+
+ }forEach _objects;
+
+ if (!isNull _lootAnimalObj) then {
+ EPOCH_lootAnimal = [_lootAnimalObj, player, Epoch_personalToken];
+ _bloodPos = getPosATL _lootAnimalObj;
+ _blood = "BloodSplat" createVehicleLocal _bloodPos;
+ _blood setPosATL _bloodPos;
+ EPOCH_playerSoiled = (EPOCH_playerSoiled + 1) min 100;
+ publicVariableServer "EPOCH_lootAnimal";
+ _return = true;
+ _dt = ["Object Looted", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ if (!isNull _destroyTrashObj) then {
+
+ EPOCH_destroyTrash = [_destroyTrashObj, _trashType, player, Epoch_personalToken];
+ // hint str EPOCH_destroyTrash;
+ publicVariableServer "EPOCH_destroyTrash";
+ EPOCH_playerSoiled = (EPOCH_playerSoiled + 1) min 100;
+ _return = true;
+ _dt = ["Object Looted", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+
+ // Snake Den
+ if (random 1 < 0.04) then {
+ _animalPos = getposATL _destroyTrashObj;
+ _randomAIClass = ["Snake_random_EPOCH", "Snake2_random_EPOCH"];
+ _randomIndex = floor(random(count _randomAIClass));
+ _randomAIClass = _randomAIClass select _randomIndex;
+ _animals = [];
+ for "_i" from 1 to 2 step 1 do {
+ _animal = createAgent[_randomAIClass, _animalPos, [], 0, "CAN_COLLIDE"];
+ _animal setVariable["BIS_fnc_animalBehaviour_disable", true];
+ _id = [_animal, true] execFSM "\x\addons\a3_epoch_code\System\Animal_brain.fsm";
+ _animals pushBack _animal;
+ };
+ EPOCH_TEMPOBJ_PVS = _animals;
+ publicVariableServer "EPOCH_TEMPOBJ_PVS";
+ };
+ };
+ if (!isNull EPOCH_bankTerminal) then {
+ // make balance request
+ if (isNil "EPOCH_bankTransferActive") then {
+ EPOCH_storeCrypto_PVS = [player, [], Epoch_personalToken];
+ publicVariableServer "EPOCH_storeCrypto_PVS";
+ closeDialog 0;
+ createDialog "InteractBank";
+
+ lbClear 21500;
+ {
+ _index = lbAdd[21500, name _x];
+ lbSetData[21500, _index, netId _x];
+ } forEach(playableUnits - [player]);
+ };
+ _return = true;
+ };
+};
+_return
diff --git a/Sources/epoch_code/compile/EPOCH_mineRocks.sqf b/Sources/epoch_code/compile/EPOCH_mineRocks.sqf
new file mode 100644
index 00000000..eea1fa49
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_mineRocks.sqf
@@ -0,0 +1,47 @@
+private ["_object","_foundIndex","_found","_str","_objects","_lootables","_currentPos","_p3dName","_findStart","_config","_cinderList","_rocksList"];
+
+if ((diag_tickTime - EPOCH_lastMineRocks) >= 2) then {
+ EPOCH_lastMineRocks = diag_tickTime;
+ if (random 1 < 0.16) then {
+
+ _currentPos = player modelToWorld[0, 5, 0];
+ if !(surfaceIsWater _currentPos) then {
+ _currentPos = ATLtoASL _currentPos;
+ };
+
+ _objects = lineIntersectsWith[eyePos player, _currentPos, player, objNull, true];
+ _object = objNull;
+
+ _config = 'CfgEpochClient' call EPOCH_returnConfig;
+ _lootables = getArray(_config >> worldname >> "Wrecks");
+ _cinderList = getArray(_config >> worldname >> "Cinder");
+ _rocksList = getArray(_config >> worldname >> "Rocks");
+
+ _found = false;
+ _foundIndex = -1;
+ {
+ _str = str(_x);
+ _findStart = _str find ": ";
+ if (_findStart != -1) then{
+ _p3dName = _str select[_findStart + 2, 999];
+ _found = _p3dName in _rocksList;
+ if (_p3dName in _lootables) then{
+ _found = true;
+ _foundIndex = 1;
+ };
+ if (_p3dName in _cinderList) then{
+ _found = true;
+ _foundIndex = 0;
+ };
+ };
+ if (_found)exitWith{_object = _x};
+ }foreach _objects;
+
+ if (!isNull _object) then {
+ if (alive _object) then {
+ EPOCH_mineRocks_PVS = [_object, _foundIndex, player, Epoch_personalToken];
+ publicVariableServer "EPOCH_mineRocks_PVS";
+ };
+ };
+ };
+};
diff --git a/Sources/epoch_code/compile/EPOCH_niteLight.sqf b/Sources/epoch_code/compile/EPOCH_niteLight.sqf
new file mode 100644
index 00000000..5d81289e
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_niteLight.sqf
@@ -0,0 +1,18 @@
+private ["_pos"];
+
+if (!isNull EP_light) then {
+ deleteVehicle EP_light;
+};
+
+_pos = (getPosATL player);
+_pos set [2,(_this select 1)];
+EP_light = "#lightpoint" createvehiclelocal _pos;
+EP_light setposATL _pos;
+EP_light attachTo [player];
+
+EP_light setLightDayLight true;
+EP_light setLightBrightness (_this select 0);
+EP_light setLightAmbient[0.05, 0.05, 0.05];
+EP_light setlightcolor[0.05, 0.05, 0.05];
+
+true
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/EPOCH_onEachFrame.sqf b/Sources/epoch_code/compile/EPOCH_onEachFrame.sqf
new file mode 100644
index 00000000..19657055
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_onEachFrame.sqf
@@ -0,0 +1,201 @@
+
+if (EPOCH_velTransform) then {
+ if (EPOCH_playerEnergy > 0) then {
+ _pos1 = getPosASL EPOCH_target;
+ _vel1 = velocity EPOCH_target;
+ _dir1 = vectorDir EPOCH_target;
+ _up1 = vectorUp EPOCH_target;
+ _interval = 0.1;
+
+ if ((count EP_velocityTransformation) == 4) then {
+ EPOCH_target setvelocitytransformation[_pos1, (EP_velocityTransformation select 0), _vel1, (EP_velocityTransformation select 1), _dir1, (EP_velocityTransformation select 2), _up1, (EP_velocityTransformation select 3), _interval];
+ }
+ else {
+ _pos2 = player modelToWorld[EPOCH_X_OFFSET, EPOCH_Y_OFFSET, EPOCH_Z_OFFSET];
+ if ((_pos2 select 2) < 0) then { _pos2 set[2, 0] };
+ if !(surfaceIsWater _pos2) then { _pos2 = ATLtoASL _pos2 };
+ if ((_pos1 distance _pos2) > 0) then {
+ EPOCH_target setvelocitytransformation[_pos1, _pos2, _vel1, _vel1, _dir1, _dir1, _up1, _up1, _interval];
+ };
+ };
+ }
+ else {
+ EPOCH_velTransform = false;
+ };
+};
+
+if (!isNull EPOCH_currentTarget && vehicle player == player) then {
+ _currentTarget = EPOCH_currentTarget;
+
+ _distance = player distance _currentTarget;
+ if (_distance < 9) then {
+
+ _stability = 0;
+ _color = [1, 1, 1, 0.7];
+ _text = "";
+ _icon = "\x\addons\a3_epoch_code\Data\UI\ui_question_ca.paa";
+
+ _interactOption = getNumber(configFile >> "cfgVehicles" >> typeOf _currentTarget >> "interactMode");
+
+ switch _interactOption do {
+ case 0: {
+ _text = "Press (Inventory)";
+ _stability = 100 - round(damage _currentTarget) * 10;
+ _icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa";
+ };
+ case 1: {
+ _text = if (EPOCH_buildMode > 0) then[{"Press (Space)"}, { "Enable Build - Press (1)" }];
+ _stability = _currentTarget getVariable["stability", 100];
+ _icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa";
+
+ if (_stability < 50) then {
+ _color = [1, 0.5, 0, 0.7];
+ if (_stability < 25) then {
+ _color = [1, 0, 0, 0.7];
+ };
+ };
+ };
+ case 2: {
+ if (alive _currentTarget) then{
+ _text = format["%1 - Press (Ctrl+T)", if (isStreamFriendlyUIEnabled) then[{"Player"}, { name _currentTarget }]];
+ _stability = 100 - round(damage _currentTarget) * 10;
+ _icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa";
+
+ if (_stability < 50) then{
+ _color = [1, 0.5, 0, 0.7];
+ if (_stability < 25) then{
+ _color = [1, 0, 0, 0.7];
+ };
+ };
+
+ } else {
+ _text = "Press (Inventory)";
+ _icon = "\x\addons\a3_epoch_code\Data\UI\ui_crossbones_ca.paa";
+ };
+ };
+ case 3: {
+ if (!alive _currentTarget && _distance < 2) then{
+ _text = "Gut Animal - Press (Inventory)";
+ _icon = "\x\addons\a3_epoch_code\Data\UI\ui_crossbones_ca.paa";
+ };
+ };
+ case 4: {
+ _text = if (EPOCH_buildMode > 0) then[{"Press (Space)"}, { "Press (Inventory)" }];
+ _stability = _currentTarget getVariable["stability", 100];
+ _icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa";
+
+ if (_stability < 50) then{
+ _color = [1, 0.5, 0, 0.7];
+ if (_stability < 25) then{
+ _color = [1, 0, 0, 0.7];
+ };
+ };
+ };
+ };
+
+ if (!isNull EPOCH_stabilityTarget) then {
+ if (cursorTarget != EPOCH_stabilityTarget) then {
+ EPOCH_stabilityTarget = objNull;
+ }
+ else {
+ _text = "";
+ if ((diag_tickTime - EPOCH_lastTargetTime) >= 0.05) then {
+ _stability = (_stability - 1) max 0;
+ EPOCH_stabilityTarget setVariable["stability", _stability];
+ EPOCH_lastTargetTime = diag_tickTime;
+ };
+ if (_stability == 0) then {
+ switch EPOCH_buildOption do {
+ case 0: {EPOCH_stabilityTarget call EPOCH_removeBUILD};
+ case 1: {EPOCH_stabilityTarget call EPOCH_upgradeBUILDv2};
+ case 2: {EPOCH_stabilityTarget call EPOCH_fnc_SelectTargetBuild};
+ };
+
+ EPOCH_stabilityTarget = objNull;
+ };
+
+ };
+ };
+
+ _pos = visiblePositionASL _currentTarget;
+ _pos set[2, (_currentTarget modelToWorld[0, 0, 0]) select 2];
+
+ _size = 3;
+ drawIcon3D[format[_icon, _stability], _color, _pos, _size, _size, 0, _text, 0, _size / 60, "PuristaMedium"];
+ };
+}
+else {
+ EPOCH_stabilityTarget = objNull;
+};
+
+if (EPOCH_drawIcon3d) then {
+ {
+ if (!isPlayer _x) then {
+ _pos = visiblePositionASL _x;
+ _pos set[2, (_x modelToWorld[0, 0, 0]) select 2];
+ _endTime = _x getVariable["EPOCH_endTime", 0];
+ _num = (round(_endTime - diag_tickTime)) max 0;
+ _color = [1, 1, 1, 0.7];
+ if (_num < 7) then {
+ _color = [1, 0.5, 0, 0.7];
+ if (_num < 5) then {
+ _color = [1, 0, 0, 0.7];
+ };
+ };
+ drawIcon3D[format["\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa", _num], _color, _pos, 4, 4, 0, "", 1, 0.05, "PuristaMedium"];
+ };
+ }forEach EPOCH_arr_countdown;
+};
+{
+ if (!isNull _x) then {
+ _pos = visiblePositionASL _x;
+ _pos set[2, (_x modelToWorld[0, 0, 0]) select 2];
+ _color = [1, 1, 1, 0.7];
+ _dmg = damage _x;
+ if (_dmg > 0.5) then {
+ _color = [1, 0.5, 0, 0.7];
+ if (_dmg > 0.7) then {
+ _color = [1, 0, 0, 0.7];
+ };
+ };
+ _text = '';
+ if (isPlayer _x) then {
+ _text = format['%1 : %2m', name _x, round(player distance _x)];
+ }
+ else {
+ _text = format['%1 : %2m', typeOf _x, round(player distance _x)];
+ };
+ drawIcon3D["\x\addons\a3_epoch_code\Data\Member.paa", _color, _pos, 1, 1, 0, _text, 1, 0.025, "PuristaMedium"];
+ };
+}forEach EPOCH_ESP_TARGETS;
+
+if (EPOCH_ESP_PLAYER || EPOCH_ESP_VEHICLES) then {
+ _viewDistance = viewDistance max 1000 min 2500;
+ {
+ if (!isNull _x) then {
+ _distance = round(player distance _x);
+ _pos = visiblePositionASL _x;
+ if (isPlayer _x) then {
+ if (EPOCH_ESP_PLAYER) then {
+ _pos set[2, (_x modelToWorld[0, 0, 1.8]) select 2];
+ _text = '';
+ if (vehicle _x == _x) then {
+ _text = format['%1 (%2m)', name _x, _distance];
+ }
+ else {
+ _name = [];
+ {if (alive _x && isPlayer _x) then { _name pushBack(name _x) }} count crew vehicle _x;
+ _text = format['%1 (%2m) - %3', _name, _distance, getText(configFile >> "CfgVehicles" >> typeOf vehicle _x >> "displayName")];
+ };
+ drawIcon3D['', [1, 0, 0, abs((_distance) / _viewDistance - 1)], _pos, 0.2, 0.2, 0, _text, 1, 0.03, "PuristaMedium"];
+ };
+ }
+ else {
+ if (EPOCH_ESP_VEHICLES) then {
+ _pos set[2, (_x modelToWorld[0, 0, 0]) select 2];
+ drawIcon3D['', [0, 0.5, 1, abs((_distance) / _viewDistance - 1)], _pos, 0.2, 0.2, 0, getText(configFile >> "CfgVehicles" >> typeOf _x >> "displayName"), 1, 0.03, "PuristaMedium"];
+ };
+ };
+ };
+ } forEach EPOCH_ESP_VEHICLEPLAYER;
+};
diff --git a/Sources/epoch_code/compile/EPOCH_replaceWord.sqf b/Sources/epoch_code/compile/EPOCH_replaceWord.sqf
new file mode 100644
index 00000000..7b9dceb1
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_replaceWord.sqf
@@ -0,0 +1,38 @@
+private["_nextChar2", "_nextChar1", "_nextChar", "_replaceArray", "_STRING", "_needle", "_replace"];
+_replaceArray = [];
+
+_STRING = toArray(_this select 0);
+_needle = toArray(_this select 1);
+_replace = toArray(_this select 2);
+
+{
+ if (_x == (_needle select 0)) then {
+ _nextChar = _forEachIndex + 1;
+ if ((_STRING select _nextChar) == (_needle select 1)) then {
+ _nextChar1 = _nextChar + 1;
+ if ((_STRING select _nextChar1) == (_needle select 2)) then {
+ _nextChar2 = _nextChar1 + 1;
+
+ if ((_STRING select _nextChar2) == (_needle select 3)) then {
+ _nextChar3 = _nextChar2 + 1;
+
+ if ((_STRING select _nextChar3) == (_needle select 4)) then {
+ _nextChar4 = _nextChar3 + 1;
+
+ if ((_STRING select _nextChar4) == (_needle select 5)) then {
+ _replaceArray pushBack[_forEachIndex, _nextChar, _nextChar1, _nextChar2, _nextChar3, _nextChar4];
+ };
+ };
+ };
+ };
+ };
+ };
+
+}forEach _STRING;
+{
+ for "_i" from 0 to(count _x - 1) do {
+ _STRING set[_x select _i, _replace select _i];
+ }
+}forEach _replaceArray;
+
+toString(_STRING);
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/EPOCH_supportCopter.sqf b/Sources/epoch_code/compile/EPOCH_supportCopter.sqf
new file mode 100644
index 00000000..4d0b7d26
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_supportCopter.sqf
@@ -0,0 +1,48 @@
+private["_pos","_copter","_plyr","_unit","_copterSupportGrp","_arrUnits","_arrSkills","_aiskill"];
+_pos = _this select 0;
+_copter = _this select 1;
+_plyr = player;//need to check on change owner
+_unit = objNull;
+
+_grp = createGroup RESISTANCE;
+_grp setBehaviour "COMBAT";
+_grp setCombatMode "RED";
+// comment out and use sanitized soldiers for now
+// _arrUnits = ["I_Soldier_TL_F","I_Soldier_GL_F","I_Soldier_AR_F","I_Soldier_LAT_F"];
+_arrUnits = ["I_Soldier_EPOCH", "I_Soldier2_EPOCH", "I_Soldier3_EPOCH"];
+_arrSkills = ["aimingAccuracy","aimingShake","aimingSpeed","endurance","spotDistance","spotTime","courage","reloadSpeed","commanding","general"];
+_units = [];
+for "_i" from 0 to ((count _arrUnits)-1) do {
+
+ _unit = _grp createUnit[(_arrUnits select _i), _pos, [], 0, "FORM"];
+ _units pushBack _unit;
+
+ _unit setSkill 0.6;
+ _unit setRank "Private";
+
+ _unit enableAI "TARGET";
+ //_unit disableAI "AUTOTARGET";
+ _unit enableAI "AUTOTARGET";
+ _unit enableAI "MOVE";
+ _unit enableAI "ANIM";
+ _unit disableAI "FSM";
+
+ for "_i" from 0 to ((count _arrSkills)-1) do {
+ _aiskill = ((floor(random 10))+1)/10;
+ if (_aiskill<0.6) then {_aiskill=0.6};
+ _unit setSkill [_arrSkills select _i,_aiskill];
+ };
+
+ if (_i == 0) then {
+ //_unit enableAI "AUTOTARGET";
+ _grp selectLeader _unit;
+ [_pos,_copter,_plyr,_unit] execFSM "\x\addons\a3_epoch_code\System\Group_Leader_Brain.fsm";
+ //}else{
+ //[_pos,_copter,_plyr,_unit] execFSM "\x\addons\a3_epoch_code\System\Group_Soldier_brain.fsm";
+ };
+
+};
+
+// cleanup units or (transfer ownership) if player logs out
+EPOCH_TEMPOBJ_PVS = _units;
+publicVariableServer "EPOCH_TEMPOBJ_PVS";
diff --git a/Sources/epoch_code/compile/EPOCH_unitSpawn.sqf b/Sources/epoch_code/compile/EPOCH_unitSpawn.sqf
new file mode 100644
index 00000000..c95b8a0d
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_unitSpawn.sqf
@@ -0,0 +1,105 @@
+private ["_unit","_group","_bomb","_unitClass","_targetPos","_disableAI","_nonJammer","_nonTrader","_jammerRange","_jammers","_restricted","_sapperNum"];
+
+_unitClass = _this;
+
+if(random 100 < 6)then{
+[] execFSM "\x\addons\a3_epoch_code\System\Event_Air_Drop.fsm";
+};
+
+_index = EPOCH_spawnIndex find _unitClass;
+if (count(player nearEntities[_unitClass, 800]) >= (EPOCH_playerSpawnArray select _index)) exitWith{};
+
+_nonJammer = ["B_Heli_Transport_01_F","PHANTOM","Epoch_Cloak_F"];
+_nonTrader = ["B_Heli_Transport_01_F","PHANTOM","Epoch_Cloak_F","GreatWhite_F"];
+_unit = objNull;
+
+_targetPos = getPosATL player;
+_targetPos set [2,0];
+
+_jammers = [];
+_config = 'CfgEpochClient' call EPOCH_returnConfig;
+_jammerRange = getNumber(_config >> "buildingJammerRange");
+_jammers = nearestObjects[_targetPos, ["PlotPole_EPOCH"], _jammerRange];
+
+if(count _jammers > 0)then{
+if!(_unitClass in _nonJammer)exitWith{};
+};
+
+_restricted = [];
+_restricted = nearestObjects [_targetPos, ["ProtectionZone_Invisible_F"], 150];
+if(count _restricted > 0)then{
+if!(_unitClass in _nonTrader)exitWith{};
+};
+
+
+_disableAI = {
+ {_this disableAI _x}forEach["TARGET","AUTOTARGET","FSM"];
+};
+
+switch _unitClass do {
+ case "Epoch_Cloak_F": {
+ _unit = createAgent[_unitClass, _targetPos, [], 256, "FORM"];
+ _unit call _disableAI;
+ [_unit] execFSM "\x\addons\a3_epoch_code\System\cloak.fsm";
+ // diag_log "cultist spawned";
+ };
+ case "GreatWhite_F": {
+ if (surfaceIsWater _targetPos) then{
+ if (((_targetPos vectorDiff getPosASL player) select 2) > 25) then{
+ _unit = createAgent[_unitClass, _targetPos, [], 120, "FORM"];
+ _unit call _disableAI;
+ [_unit] execFSM "\x\addons\a3_epoch_code\System\Shark_Brain.fsm";
+ };
+ };
+ };
+ case "Epoch_Sapper_F": {
+ if(random 100 < 6)then{
+ _config = 'CfgEpochSapper' call EPOCH_returnConfig;
+ _sapperNum = 8;
+ if(getNumber(_config >> "sapperMigrationCount") > 0)then{
+ _sapperNum = getNumber(_config >> "sapperMigrationCount");
+ };
+ [player,_sapperNum] execVM "\x\addons\a3_epoch_code\compile\EPOCH_callSapperMigration.sqf";
+ }else{
+ _unit = createAgent[_unitClass, _targetPos, [], 256, "FORM"];
+ _bomb = createVehicle ["Sapper_Charge_Ammo", _targetPos, [], 0, "CAN_COLLIDE"];
+ _bomb attachTo [_unit, [0,0,0],"Pelvis"];
+ _unit call _disableAI;
+ sapperHndl = [_unit, _bomb] execFSM "\x\addons\a3_epoch_code\System\Sapper_Brain.fsm";
+ _unit addEventHandler ["FiredNear", "sapperHndl setFSMVariable [""_sFiredNear"",[_this select 1, _this select 2]];"];
+ _unit addEventHandler ["Hit", "sapperHndl setFSMVariable [""_sHit"",[_this select 1, _this select 2]];"];
+ };
+ };
+ case "Epoch_SapperB_F": {
+ _unit = createAgent[_unitClass, _targetPos, [], 256, "FORM"];
+ _bomb = createVehicle["SapperB_Charge_Ammo", _targetPos, [], 0, "CAN_COLLIDE"];
+ _bomb attachTo[_unit, [0, 0, 0], "Pelvis"];
+ _unit call _disableAI;
+ sapperHndl = [_unit, _bomb] execFSM "\x\addons\a3_epoch_code\System\Sapper_Brain2.fsm";
+ _unit addEventHandler["FiredNear", "sapperHndl setFSMVariable [""_sFiredNear"",[_this select 1, _this select 2]];"];
+ _unit addEventHandler["Hit", "sapperHndl setFSMVariable [""_sHit"",[_this select 1, _this select 2]];"];
+ };
+ case "I_UAV_01_F": {
+ _targetPos = getPosATL player;
+ _targetPos = [_targetPos, 600, 1200, 5, 0, 400, 0] call BIS_fnc_findSafePos;
+ _targetPos set[2, 600];
+ _unit = createVehicle["I_UAV_01_F", _targetPos, [], 0, "FLY"];
+ addToRemainsCollector[_unit];
+ _unit flyInHeight 600;
+ _grp = createGroup RESISTANCE;
+ _driver = _grp createUnit["I_UAV_AI", position _unit, [], 0, "CAN_COLLIDE"];
+ _driver moveInAny _unit;
+ [_unit, player] execFSM "\x\addons\a3_epoch_code\System\Copter_brain.fsm";
+ };
+ case "PHANTOM": {
+ [] execFSM "\x\addons\a3_epoch_code\System\Phantom_Brain.fsm";
+ };
+ case "B_Heli_Transport_01_F": {
+ [] execFSM "\x\addons\a3_epoch_code\System\Event_Air_Drop.fsm";
+ };
+};
+
+if !(isNull _unit) then {
+ EPOCH_TEMPOBJ_PVS = _unit;
+ publicVariableServer "EPOCH_TEMPOBJ_PVS";
+};
diff --git a/Sources/epoch_code/compile/EPOCH_unitSpawnDecrease.sqf b/Sources/epoch_code/compile/EPOCH_unitSpawnDecrease.sqf
new file mode 100644
index 00000000..15e4f703
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_unitSpawnDecrease.sqf
@@ -0,0 +1,4 @@
+_index = EPOCH_spawnIndex find _this;
+if (_index != -1) then{
+ EPOCH_playerSpawnArray set[_index, ((EPOCH_playerSpawnArray select _index) - 1) max 0];
+};
diff --git a/Sources/epoch_code/compile/EPOCH_unitSpawnIncrease.sqf b/Sources/epoch_code/compile/EPOCH_unitSpawnIncrease.sqf
new file mode 100644
index 00000000..ea84356f
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_unitSpawnIncrease.sqf
@@ -0,0 +1,4 @@
+_index = EPOCH_spawnIndex find _this;
+if (_index != -1) then{
+ EPOCH_playerSpawnArray set[_index, ((EPOCH_playerSpawnArray select _index) + 1) min (EPOCH_spawnLimits select _index)];
+};
diff --git a/Sources/epoch_code/compile/EPOCH_updateLoadingScreen.sqf b/Sources/epoch_code/compile/EPOCH_updateLoadingScreen.sqf
new file mode 100644
index 00000000..d77a7e63
--- /dev/null
+++ b/Sources/epoch_code/compile/EPOCH_updateLoadingScreen.sqf
@@ -0,0 +1,5 @@
+disableSerialization;
+_display = uiNameSpace getVariable ["EPOCH_loadingScreen",displayNull];
+if (!isNull _display) then {
+ (_display displayCtrl 50) ctrlSetText _this;
+};
diff --git a/Sources/epoch_code/compile/bis_functions/MP/fn_MP.sqf b/Sources/epoch_code/compile/bis_functions/MP/fn_MP.sqf
new file mode 100644
index 00000000..ec11efce
--- /dev/null
+++ b/Sources/epoch_code/compile/bis_functions/MP/fn_MP.sqf
@@ -0,0 +1,43 @@
+/*
+ Author: Karel Moricky
+
+ Description:
+ Send function for remote execution (and executes locally if conditions are met)
+
+ Parameter(s):
+ 0: ANY - function params
+ 1: STRING - function name
+ 2 (Optional):
+ BOOL - true to execute on each machine (including the one where the function was called from), false to execute it on server only [default: true]
+ STRING - the function will be executed only where unit defined by the variable is local
+ OBJECT - the function will be executed only where unit is local
+ GROUP - the function will be executed only on client who is member of the group
+ SIDE - the function will be executed on all players of the given side
+ NUMBER - the function will be executed only on client with the given ID
+ ARRAY - array of previous data types
+ 3 (Optional): BOOL - true for persistent call (will be called now and for every JIP client) [default: false]
+
+ Returns:
+ ARRAY - sent packet
+
+with missionnamespace do {
+ private ["_params","_functionName","_target","_isPersistent","_isCall","_ownerID"];
+
+ _params = [_this,0,[]] call bis_fnc_param;
+ _functionName = [_this,1,"",[""]] call bis_fnc_param;
+ _target = [_this,2,true,[objnull,true,0,[],sideUnknown,grpnull,""]] call bis_fnc_param;
+ _isPersistent = [_this,3,false,[false]] call bis_fnc_param;
+ _isCall = [_this,4,false,[false]] call bis_fnc_param;
+
+ //--- Send to server
+ BIS_fnc_MP_packet = [0,_params,_functionName,_target,_isPersistent,_isCall];
+ publicvariableserver "BIS_fnc_MP_packet";
+
+ //--- Local execution
+ if !(ismultiplayer) then {
+ ["BIS_fnc_MP_packet",BIS_fnc_MP_packet] spawn BIS_fnc_MPexec;
+ };
+
+ BIS_fnc_MP_packet
+};
+*/
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/bis_functions/MP/fn_MPexec.sqf b/Sources/epoch_code/compile/bis_functions/MP/fn_MPexec.sqf
new file mode 100644
index 00000000..fe48e03d
--- /dev/null
+++ b/Sources/epoch_code/compile/bis_functions/MP/fn_MPexec.sqf
@@ -0,0 +1,122 @@
+/*
+ Author: Karel Moricky
+
+ Description:
+ Execute received remote execution
+
+ Parameter(s):
+ _this select 0: STRING - Packet variable name (always "BIS_fnc_MP_packet")
+ _this select 1: ARRAY - Packet value (sent by BIS_fnc_MP function; see it's description for more details)
+
+ Returns:
+ BOOL - true if function was executed successfuly
+
+diag_log format ["#EPOCH_MPexec@%2# %1",_this,if (isServer) then {"SERVER"}else{"CLIENT"}];*/
+_uhLol = "everything is outcommit! - Skaronator ;)";
+
+/*
+private ["_params","_functionName","_target","_isPersistent","_isCall","_varName","_varValue","_function"];
+
+_varName = _this select 0;
+_varValue = _this select 1;
+
+_mode = [_varValue,0,[0]] call bis_fnc_param;
+_params = [_varValue,1,[]] call bis_fnc_param;
+_functionName = [_varValue,2,"",[""]] call bis_fnc_param;
+_target = [_varValue,3,true,[objnull,true,0,[],sideUnknown,grpnull,""]] call bis_fnc_param;
+_isPersistent = [_varValue,4,false,[false]] call bis_fnc_param;
+_isCall = [_varValue,5,false,[false]] call bis_fnc_param;
+
+if (typename _target == typename []) then {
+ //--- Multi execution
+ {
+ [_varName,[_mode,_params,_functionName,_x,_isPersistent,_isCall]] call bis_fnc_MPexec;
+ } foreach _target;
+} else{
+ //--- Single execution
+ if (ismultiplayer && _mode == 0) then {
+ private ["_ownerID","_serverID"];
+ _serverID = owner (missionnamespace getvariable ["bis_functions_mainscope",objnull]); //--- Server ID is not always 0
+
+ //--- Server process
+ switch (typename _target) do {
+ case (typename ""): {
+ _ownerID = owner (missionnamespace getvariable [_target,objnull]);
+ };
+ case (typename objnull): {
+ private ["_targetCuratorUnit"];
+ _targetCuratorUnit = getassignedcuratorunit _target;
+ if !(isnull _targetCuratorUnit) then {_target = _targetCuratorUnit;};
+ _ownerID = owner _target;
+ };
+ case (typename true): {
+ _ownerID = [_serverID,-1] select _target;
+ };
+ case (typename 0): {
+ _ownerID = _target;
+ };
+ case (typename grpnull);
+ case (typename sideUnknown): {
+ _ownerID = -1;
+ };
+ };
+ BIS_fnc_MP_packet = [1,_params,_functionName,_target,_isPersistent,_isCall];
+
+ //--- Send to clients
+ if (_ownerID < 0) then {
+ //--- Everyone
+ publicvariable "BIS_fnc_MP_packet";
+ } else {
+ if (_ownerID != _serverID) then {
+ //--- Client
+ _ownerID publicvariableclient "BIS_fnc_MP_packet";
+ };
+ };
+
+ //--- Server execution (for all or server only)
+ if (_ownerID == -1 || _ownerID == _serverID) then {
+ ["BIS_fnc_MP_packet",BIS_fnc_MP_packet] spawn BIS_fnc_MPexec;
+ };
+
+ //--- Persistent call (for all or clients)
+ if (_isPersistent) then {
+ if (typename _target != typename 0) then {
+ private ["_logic","_queue"];
+ _logic = missionnamespace getvariable ["bis_functions_mainscope",objnull];
+ _queue = _logic getvariable ["BIS_fnc_MP_queue",[]];
+ _queue set [
+ count _queue,
+ +BIS_fnc_MP_packet
+ ];
+ _logic setvariable ["BIS_fnc_MP_queue",_queue,true];
+ } else {
+ ["Persistent execution is not allowed when target is %1. Use %2 or %3 instead.",typename 0,typename objnull,typename false] call bis_fnc_error;
+ };
+ };
+ } else {
+
+ //--- Local execution
+ private ["_canExecute"];
+ _canExecute = switch (typename _target) do {
+ case (typename grpnull): {player in units _target};
+ case (typename sideUnknown): {(player call bis_fnc_objectside) == _target};
+ default {true};
+ };
+
+ if (_canExecute) then {
+ _function = missionnamespace getvariable _functionName;
+ if (!isnil "_function") then {
+ if (_isCall) then {
+ _params call _function;
+ } else {
+ _params spawn _function;
+ };
+ true
+ } else {
+ ["Function '%1' does not exist",_functionName] call bis_fnc_error;
+ false
+ };
+ };
+ };
+};
+*/
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/bis_functions/MP/fn_initMultiplayer.sqf b/Sources/epoch_code/compile/bis_functions/MP/fn_initMultiplayer.sqf
new file mode 100644
index 00000000..04c4aaff
--- /dev/null
+++ b/Sources/epoch_code/compile/bis_functions/MP/fn_initMultiplayer.sqf
@@ -0,0 +1,66 @@
+/*
+ Author: Karel Moricky
+
+ Description:
+ Multiplayer mission init, executed automatically upon mission start.
+
+ Parameter(s):
+ None
+
+ Returns:
+ NOTHING
+*/
+
+//--- Execute MP functions
+["BIS_fnc_initMultiplayer"] call bis_fnc_startLoadingScreen;
+["BIS_fnc_initMultiplayer"] call bis_fnc_endLoadingScreen;
+
+// Disabled Functions
+if (isMultiplayer) then {
+ BIS_fnc_MP_packet = compileFinal '';
+};
+
+/*
+if (isMultiplayer) then {
+ ["BIS_fnc_initMultiplayer"] call bis_fnc_startLoadingScreen;
+ BIS_fnc_MP_packet = [];
+ "BIS_fnc_MP_packet" addPublicVariableEventHandler {_this call BIS_fnc_MPexec};
+
+ //--- Execute persistent functions
+ waituntil {!isnil "bis_functions_mainscope"};
+ _queue = bis_functions_mainscope getvariable ["BIS_fnc_MP_queue",[]];
+ {
+ //--- Do not declare persistent call again to avoid infinite loop
+ _varValue = +_x;
+ _mode = [_varValue,0,[0]] call bis_fnc_paramin;
+ _params = [_varValue,1,[]] call bis_fnc_paramin;
+ _functionName = [_varValue,2,"",[""]] call bis_fnc_paramin;
+ _target = [_varValue,3,-1,[objnull,true,0,[],sideUnknown,grpnull]] call bis_fnc_paramin;
+ _isPersistent = [_varValue,4,false,[false]] call bis_fnc_paramin;
+ _isCall = [_varValue,5,false,[false]] call bis_fnc_paramin;
+
+ switch (typename _target) do {
+ case (typename objnull): {
+ if (local _target) then {
+ ["BIS_fnc_MP_packet",[_mode,_params,_functionName,_target,false,_isCall]] call BIS_fnc_MPexec; //--- Local execution
+ };
+ };
+ case (typename true): {
+ if (_target) then {
+ ["BIS_fnc_MP_packet",[_mode,_params,_functionName,_target,false,_isCall]] call BIS_fnc_MPexec; //--- Local execution
+ } else {
+ [_params,_functionName,_target,false,_isCall] call BIS_fnc_MP; //--- Global execution
+ };
+ };
+ case (typename grpnull);
+ case (typename sideUnknown): {
+ ["BIS_fnc_MP_packet",[_mode,_params,_functionName,_target,false,_isCall]] call BIS_fnc_MPexec; //--- Local execution
+ };
+ case (typename 0): {
+ //--- Disabled
+ };
+ };
+ } foreach _queue;
+ ["BIS_fnc_initMultiplayer"] call bis_fnc_endLoadingScreen;
+};
+*/
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/bis_functions/Respawn/fn_selectRespawnTemplate.sqf b/Sources/epoch_code/compile/bis_functions/Respawn/fn_selectRespawnTemplate.sqf
new file mode 100644
index 00000000..43abf80f
--- /dev/null
+++ b/Sources/epoch_code/compile/bis_functions/Respawn/fn_selectRespawnTemplate.sqf
@@ -0,0 +1,202 @@
+/*
+ Author: Karel Moricky
+
+ Description:
+ Select respawn template from CfgRespawnTemplates and execute its script / function
+
+ Parameter(s):
+ 0: STRING - engine script which called the function
+ 1: ARRAY - script arguments
+
+ Returns:
+ ARRAY of SCRIPTs
+*/
+
+_mode = [_this,0,"",[""]] call bis_fnc_param;
+_args = [_this,1,[],[[]]] call bis_fnc_param;
+
+//--- Get engine respawn
+_respawn = 0 call bis_fnc_missionRespawnType;
+
+//--- Detect what script was called
+_isDeath = false;
+switch (_mode) do {
+
+ //--- Death (NONE): [,]
+ case "playerKilledScript": {
+ _respawn = 0;
+ _isDeath = true;
+ };
+
+ //--- Death (INSTANT, BASE): [,,]
+ case "playerRespawnScript": {
+ _args resize 2;
+ missionnamespace setvariable ["BIS_fnc_selectRespawnTemplates_args",[_args select 0]];
+ _isDeath = true;
+ };
+
+ //--- Respawn (BIRD, GROUP, SIDE): [,,]
+ case "playerRespawnSeagullScript": {
+ _args = [_args select 2,_args select 0];
+ _respawn = 1;
+ };
+
+ //--- Respawn (INSTANT, BASE, GROUP): []
+ case "playerResurrectScript": {
+ if (_respawn == 4) then {_respawn = -1;};
+ _args = _args + (missionnamespace getvariable ["BIS_fnc_selectRespawnTemplates_args",[objnull]]);
+ };
+
+ //--- Respawn (GROUP, SIDE): [,,]
+ case "playerRespawnOtherUnitScript": {
+ _args = [_args select 2,_args select 0];
+ };
+
+ //--- Forced respawn
+ case "initRespawn": {
+ if !(_respawn in [2,3]) then {_respawn = -1;};
+ _isDeath = true;
+ };
+
+ //--- Death: [objnull,objnull,objnull]
+ case "initRespawnStart": {
+ if !(_respawn in [2,3]) then {_respawn = -1;};
+ _isDeath = true;
+ };
+
+ //--- Respawn: [objnull,objnull,objnull]
+ case "initRespawnEnd": {
+ if !(_respawn in [2,3]) then {_respawn = -1;};
+ };
+};
+
+//--- Terminate when playerResurrectScript is triggered in GROUP respawn to prevent duplicate call
+if (_respawn < 0) exitwith {[]};
+
+//--- Get respawn templates
+_respawnTemplates = [configfile >> "CfgRespawnTemplates","respawnTemplates" + (["",_respawn] call bis_fnc_missionRespawnType)] call bis_fnc_returnconfigentry;
+if (ismultiplayer || _mode in ["initRespawn","initRespawnStart","initRespawnEnd"]) then {
+ _playerside = if (player call bis_fnc_isUnitVirtual) then {"VIRTUAL"} else {str (player call bis_fnc_objectSide)};
+ _respawnTemplates = [missionconfigfile,"respawnTemplates",_respawnTemplates] call bis_fnc_returnconfigentry;
+ _respawnTemplates = [missionconfigfile,"respawnTemplates" + _playerside,_respawnTemplates] call bis_fnc_returnconfigentry;
+};
+if (typename _respawnTemplates != typename []) then {_respawnTemplates = [_respawnTemplates];};
+
+//--- Forced respawn
+
+
+
+
+
+
+// -- Changed by Skaronator
+/*
+
+if (_isDeath && alive player) then {
+ if (ismultiplayer) then {
+ if (isnumber (missionconfigfile >> "respawnOnStart")) then {
+ _respawnOnStart = getnumber (missionconfigfile >> "respawnOnStart") > 0;
+ } else {
+ {
+ _cfgRespawn = [["CfgRespawnTemplates",_x],configfile] call bis_fnc_loadClass;
+ if (_cfgRespawn != configfile) then {
+ _respawnOnStart = _respawnOnStart || (getnumber (_cfgRespawn >> "respawnOnStart") > 0);
+ };
+ } foreach _respawnTemplates;
+ };
+ };
+ if (_respawnOnStart) then {
+ player setpos [10,10,10];
+ player hideobject true;
+ player enablesimulation false;
+ forcerespawn player;
+ } else {
+ _isDeath = false;
+ };
+};
+*/
+
+if (_isDeath && alive player) then {
+ _isDeath = false;
+};
+
+
+//if (_respawnOnStart) exitwith {[]};
+// -- END
+
+
+
+
+
+
+
+
+//--- Increase respawn count (displayed in the debriefing screen)
+if (_isDeath && ismultiplayer) then {["BIS_fnc_missionHandlers_reloads",1] call bis_fnc_counter;};
+
+//--- Show loading screen to speed up the process when respawning
+if !(_isDeath) then {["bis_fnc_selectRespawnTemplate","RscDisplayLoadingBlack"] call bis_fnc_startloadingscreen;};
+
+//--- Calculate respawn delay
+_respawnDelay = ([missionconfigfile,"respawnDelay",-1] call bis_fnc_returnconfigentry) call bis_fnc_parsenumber;
+_scriptName = if (_isDeath) then {"onPlayerKilled"} else {"onPlayerRespawn"};
+_scripts = [];
+{
+ _cfgRespawn = [["CfgRespawnTemplates",_x],configfile] call bis_fnc_loadClass;
+ if (_cfgRespawn != configfile) then {
+
+ //--- Template specific respawn delay
+ if (_respawnDelay < 0) then {
+ _respawnDelay = ([_cfgRespawn,"respawnDelay",-1] call bis_fnc_returnconfigentry) call bis_fnc_parsenumber;
+ if (_respawnDelay >= 0) then {setplayerrespawntime _respawnDelay;};
+ };
+ };
+} foreach _respawnTemplates;
+_respawnDelay = _respawnDelay max 0;
+
+//--- Execute codes
+{
+ _cfgRespawn = [["CfgRespawnTemplates",_x],configfile] call bis_fnc_loadClass;
+ if (_cfgRespawn != configfile) then {
+
+ //--- Get the code
+ _scriptPath = gettext (_cfgRespawn >> _scriptName);
+ if (_scriptPath != "") then {
+ _code = missionnamespace getvariable _scriptPath;
+ _codeType = "function";
+ if (isnil {_code}) then {
+ _code = compile preprocessfilelinenumbers _scriptPath;
+ _codeType = "file";
+ };
+
+ //--- Execute the code
+ _script = (_args + [_respawn,_respawnDelay]) spawn _code;
+ _scripts pushBack _script;
+ ["%4 template '%1' executed from %2 '%3'",_x,_codeType,_scriptPath,_scriptName] call bis_fnc_logFormat;
+ } else {
+ //["'%1' entry is missing in respawn template '%2'.",_scriptName,_x] call bis_fnc_error;
+ };
+ } else {
+ ["Respawn template '%1' not found.",_x] call bis_fnc_error;
+ };
+} foreach _respawnTemplates;
+
+//--- Execute mission respawn
+_script = (_args + [_respawn,_respawnDelay]) spawn compile preprocessfilelinenumbers (_scriptName + ".sqf");
+_scripts pushBack _script;
+
+//--- End the loading screen after short delay
+if !(_isDeath) then {
+ [] spawn {
+ "bis_fnc_selectRespawnTemplate" call bis_fnc_endloadingscreen;
+ };
+
+ // -- Changed by Skaronator
+ /*
+ if !(player getvariable ["bis_fnc_selectRespawnTemplate_respawned",false]) then {
+ player setvariable ["bis_fnc_selectRespawnTemplate_respawned",true,true]; //--- ToDo: Remove once engine solution is implemented
+ };*/
+ // -- END
+};
+
+_scripts
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/bis_functions/initFunctions.sqf b/Sources/epoch_code/compile/bis_functions/initFunctions.sqf
new file mode 100644
index 00000000..9336d4da
--- /dev/null
+++ b/Sources/epoch_code/compile/bis_functions/initFunctions.sqf
@@ -0,0 +1,650 @@
+
+/*
+ File: init.sqf
+ Author: Karel Moricky
+
+ Description:
+ Function library initialization.
+
+ Parameter(s):
+ _this select 0: 'Function manager' logic
+
+ Returns:
+ Nothing
+*/
+
+#define VERSION 4.0
+
+//--- Check version, has to match config version
+if (getnumber (configfile >> "CfgFunctions" >> "version") != VERSION) exitwith {
+ textlogformat [
+ "Log: ERROR: Functions versions mismatch - config is %1, but script is %2",
+ getnumber (configfile >> "CfgFunctions" >> "version"),
+ VERSION
+ ];
+};
+
+//--- Fake header
+_fnc_scriptName = if (isnil "_fnc_scriptName") then {"Functions Init"} else {_fnc_scriptName};
+
+
+/******************************************************************************************************
+ DEFINE HEADERS
+
+ Headers are pieces of code inserted on the beginning of every function code before compiling.
+ Using 'BIS_fnc_functionsDebug', you can alter the headers to provide special debug output.
+
+ Modes can be following:
+ 0: No Debug - header saves parent script name and current script name into variables
+ 1: Save script Map - header additionaly save an array of all parent scripts into variable
+ 2: Save and log script map - apart from saving into variable, script map is also logged through debugLog
+
+ Some system function are using simplified header unaffected to current debug mode.
+ These functions has headerType = 1; set in config.
+
+******************************************************************************************************/
+
+private ["_this","_headerNoDebug","_headerSaveScriptMap","_headerLogScriptMap","_headerSystem","_debug","_headerDefault","_fncCompile","_recompile"];
+
+_headerNoDebug = "
+ _fnc_scriptNameParentTemp = if !(isnil '_fnc_scriptName') then {_fnc_scriptName} else {'%1'};
+ private ['_fnc_scriptNameParent'];
+ _fnc_scriptNameParent = _fnc_scriptNameParentTemp;
+ _fnc_scriptNameParentTemp = nil;
+
+ private ['_fnc_scriptName'];
+ _fnc_scriptName = '%1';
+ scriptname _fnc_scriptName;
+";
+_headerSaveScriptMap = "
+ _fnc_scriptMapTemp = if !(isnil '_fnc_scriptMap') then {_fnc_scriptMap} else {[]};
+ private ['_fnc_scriptMap'];
+ _fnc_scriptMap = _fnc_scriptMapTemp + [_fnc_scriptName];
+ _fnc_scriptMapTemp = nil;
+";
+_headerLogScriptMap = "
+ _this call {
+ private '_fnc_scriptMapText';
+ _fnc_scriptMapText = '';
+ {
+ _fnc_scriptMapText = _fnc_scriptMapText + ' >> ' + _x;
+ } foreach _fnc_scriptMap;
+ textlogformat ['%2',_fnc_scriptMapText,_this];
+ };
+";
+_headerSystem = "
+ private ['_fnc_scriptNameParent'];
+ _fnc_scriptNameParent = if !(isnil '_fnc_scriptName') then {_fnc_scriptName} else {'%1'};
+ scriptname '%1';
+";
+_headerNone = "";
+
+//--- Compose headers based on current debug mode
+_debug = uinamespace getvariable ["bis_fnc_initFunctions_debugMode",0];
+_headerDefault = switch _debug do {
+
+ //--- 0 - Debug mode off
+ default {
+ _headerNoDebug
+ };
+
+ //--- 1 - Save script map (order of executed functions) to '_fnc_scriptMap' variable
+ case 1: {
+ _headerNoDebug + _headerSaveScriptMap
+ };
+
+ //--- 2 - Save script map and log it
+ case 2: {
+ _headerNoDebug + _headerSaveScriptMap + _headerLogScriptMap
+ };
+};
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////
+//--- Compile function
+_fncCompile = {
+ private ["_fncVar","_fncMeta","_fncPath","_fncHeader","_fncExt","_header","_debugMessage"];
+ _fncVar = _this select 0;
+ _fncMeta = _this select 1;
+ _fncHeader = _this select 2;
+ _fncFinal = _this select 3;
+
+ _fncPath = _fncMeta select 0;
+ _fncExt = _fncMeta select 1;
+
+ switch _fncExt do {
+
+ //--- SQF
+ case ".sqf": {
+ _header = switch (_fncHeader) do {
+
+ //--- No header (used in low-level functions, like 'fired' event handlers for every weapon)
+ case -1: {
+ _headerNone
+ };
+
+ //--- System functions' header (rewrite default header based on debug mode)
+ case 1: {
+ _headerSystem
+ };
+
+
+ //--- Full header
+ default {
+ _headerDefault
+ }
+ };
+ _debugMessage = "Log: [Functions]%1 | %2";
+ if (_fncFinal) then {
+ compileFinal (format [_header,_fncVar,_debugMessage] + preprocessfilelinenumbers _fncPath);
+ } else {
+ compile (format [_header,_fncVar,_debugMessage] + preprocessfilelinenumbers _fncPath);
+ };
+ };
+
+ //--- FSM
+ case ".fsm": {
+ compileFinal format ["%1_fsm = _this execfsm '%2'; %1_fsm",_fncVar,_fncPath];
+ };
+
+ default {0}
+ };
+};
+
+
+/******************************************************************************************************
+ COMPILE ONE FUNCTION
+
+ When input is string containing function name instead of number, only the function is recompiled.
+
+ The script stops here, reads function's meta data and recompile the function
+ based on its extension and header.
+
+ Instead of creating missionNamespace shortcut, it saves the function directly. Use it only for debugging!
+
+******************************************************************************************************/
+
+//--- Compile only selected
+if (isnil "_this") then {_this = [];};
+if (typename _this != typename []) then {_this = [_this];};
+_recompile = if (count _this > 0) then {_this select 0} else {0};
+
+if (typename _recompile == typename "") exitwith {
+ private ["_fnc","_fncMeta","_headerType","_var"];
+
+ //--- Recompile specific function
+ _fnc = uinamespace getvariable _recompile;
+ if !(isnil "_fnc") then {
+ _fncMeta = _recompile call (uinamespace getvariable "bis_fnc_functionMeta");
+ _headerType = if (count _this > 1) then {_this select 1} else {0};
+ _var = [_recompile,[_recompile,_fncMeta,_headerType,false] call _fncCompile];
+ uinamespace setvariable _var;
+ missionnamespace setvariable _var;
+ if (isnil "_functions_listRecompile") then {
+ textlogformat ["Log: [Functions]: %1 recompiled with meta %2",_recompile,_fncMeta];
+ };
+ } else {
+ _fncError = uinamespace getvariable "bis_fnc_error";
+ if !(isnil "_fncError") then {
+ ["%1 is not a function.",_recompile] call _fncError;
+ } else {
+ textlogformat ["Log: [Functions]: ERROR: %1 is not a function.",_recompile];
+ };
+ };
+};
+
+
+/******************************************************************************************************
+ COMPILE EVERYTHING IN GIVEN NAMESPACE(S)
+
+ Function codes are present only in uiNamespace. Mission variables contains only shortcuts to uiNamespace.
+ To executed only required compilation section, input param can be one of following numbers:
+
+ 0 - Autodetect what compile type should be used
+ 1 - Forced recompile of all the things
+ 2 - Create only uiNamespace variables (used in UI)
+ 3 - Create missionNamespace variables and initialize mission
+ 4 - Create only missionNamespace variables
+
+******************************************************************************************************/
+
+RscDisplayLoading_progressMission = nil;
+
+//--- Get existing lists (create new ones when they doesn't exist)
+private ["_functions_list","_functions_listPreInit","_functions_listPostInit","_functions_listPreStart","_functions_listRecompile","_file","_cfgSettings","_listConfigs","_recompileNames"];
+
+_functions_listPreStart = [];
+_functions_list = call (uinamespace getvariable ["bis_functions_list",{[]}]);
+_functions_listPreInit = [call (uinamespace getvariable ["bis_functions_listPreInit",{[]}]),[]];
+_functions_listPostInit = [call (uinamespace getvariable ["bis_functions_listPostInit",{[]}]),[]];
+_functions_listRecompile = call (uinamespace getvariable ["bis_functions_listRecompile",{[]}]);
+
+//--- When not forced, recompile only mission if uiNamespace functions exists
+if (typename _recompile != typename 1) then {
+ _recompile = if (count _functions_list > 0) then {3} else {0};
+};
+
+//--- When autodetect, recognize what recompile type is required
+if (_recompile == 0 && !isnil {uinamespace getvariable "bis_fnc_init"}) then {_recompile = 3;};
+if (_recompile == 3 && !isnil {missionnamespace getvariable "bis_fnc_init"}) then {_recompile = 4;};
+
+_file = gettext (configfile >> "cfgFunctions" >> "file");
+_cfgSettings = [
+ [ configfile, _file, 0 ], //--- 0
+ [ campaignconfigfile, "functions", 1 ], //--- 1
+ [ missionconfigfile, "functions", 1 ] //--- 2
+];
+
+_listConfigs = switch _recompile do {
+ case 0: {
+ [0,1,2];
+ };
+ case 1: {
+ _functions_list = [];
+ uinamespace setvariable ["bis_functions_list",_functions_list];
+ _functions_listPreInit = [[],[]];
+ uinamespace setvariable ["bis_functions_listPreInit",_functions_listPreInit];
+ _functions_listPostInit = [[],[]];
+ uinamespace setvariable ["bis_functions_listPostInit",_functions_listPostInit];
+ _functions_listRecompile = [];
+ uinamespace setvariable ["bis_functions_listRecompile",_functions_listRecompile];
+ [0,1,2];
+ };
+ case 2: {
+ [0];
+ };
+ case 3: {
+ [1,2];
+ };
+ case 4: {
+ [1,2];
+ };
+};
+
+
+/******************************************************************************************************
+ SCAN CFGFUNCTIONS
+
+ Go through CfgFunctions, scan categories and declare all functions.
+
+ Following variables are stored:
+ _fnc_ - actual code of the function
+ _fnc__meta - additional meta data of this format
+ [,,,,,,]
+ * path - path to actual file
+ * extension - file extension, either ".sqf" or ".fsm"
+ * header - header type. Usually 0, system functions are using 1 (see DEFINE HEADERS section)
+ * preInit - function is executed automatically upon mission start, before objects are initalized
+ * postInit - function is executed automatically upon mission start, after objects are initialized
+ * recompile - function is recompiled upon mission start
+ * category - function's category based on config structure
+
+******************************************************************************************************/
+
+//--- Allow recompile in dev version, in the editor and when description.ext contains 'allowFunctionsRecompile = 1;'
+_compileFinal =
+ //--- Dev version
+ !cheatsEnabled
+ &&
+ //--- Editor mission
+ ((uinamespace getvariable ["gui_displays",[]]) find (finddisplay 26) != 1);
+ //&&
+ //--- Manual toggle
+ //getnumber (missionconfigfile >> "allowFunctionsRecompile") == 0;
+
+for "_t" from 0 to (count _listConfigs - 1) do {
+ private ["_cfg","_pathConfig","_pathFile","_pathAccess","_cfgFunctions"];
+ _cfg = _cfgSettings select (_listConfigs select _t);
+ _pathConfig = _cfg select 0;
+ _pathFile = _cfg select 1;
+ _pathAccess = _cfg select 2;
+
+ _cfgFunctions = (_pathConfig >> "cfgfunctions");
+ for "_c" from 0 to (count _cfgFunctions - 1) do {
+ private ["_currentTag"];
+ _currentTag = _cfgFunctions select _c;
+
+ //--- Is Tag
+ if (isclass _currentTag) then {
+
+ //--- Check of all required patches are in CfgPatches
+ private ["_requiredAddons","_requiredAddonsMet"];
+ _requiredAddons = getarray (_currentTag >> "requiredAddons");
+ _requiredAddonsMet = true;
+ {
+ _requiredAddonsMet = _requiredAddonsMet && isclass (configfile >> "CfgPatches" >> _x);
+ } foreach _requiredAddons;
+
+ if (_requiredAddonsMet) then {
+
+ //--- Initialize tag
+ private ["_tag","_tagName","_itemPathRag"];
+ _tag = configname _currentTag;
+ _tagName = gettext (_currentTag >> "tag");
+ if (_tagName == "") then {_tagName = configname _currentTag};
+ _itemPathTag = gettext (_currentTag >> "file");
+
+ for "_i" from 0 to (count _currentTag - 1) do {
+ private ["_currentCategory"];
+ _currentCategory = _currentTag select _i;
+
+ //--- Is Category
+ if (isclass _currentCategory) then {
+ private ["_categoryName","_itemPathCat"];
+ _categoryName = configname _currentCategory;
+ _itemPathCat = gettext (_currentCategory >> "file");
+
+ for "_n" from 0 to (count _currentCategory - 1) do {
+ private ["_currentItem"];
+ _currentItem = _currentCategory select _n;
+
+ //--- Is Item
+ if (isclass _currentItem) then {
+ private ["_itemName","_itemPathItem","_itemExt","_itemPath","_itemVar","_itemCompile","_itemPreInit","_itemPostInit","_itemPreStart","_itemRecompile","_itemCheatsEnabled"];
+
+ //--- Read function
+ _itemName = configname _currentItem;
+ _itemPathItem = gettext (_currentItem >> "file");
+ _itemExt = gettext (_currentItem >> "ext");
+ _itemPreInit = getnumber (_currentItem >> "preInit");
+ _itemPostInit = getnumber (_currentItem >> "postInit");
+ _itemPreStart = getnumber (_currentItem >> "preStart");
+ _itemRecompile = getnumber (_currentItem >> "recompile");
+ _itemCheatsEnabled = getnumber (_currentItem >> "cheatsEnabled");
+ if (_itemExt == "") then {_itemExt = ".sqf"};
+ _itemPath = if (_itemPathItem != "") then {_itemPathItem} else {
+ if (_itemPathCat != "") then {_itemPathCat + "\fn_" + _itemName + _itemExt} else {
+ if (_itemPathTag != "") then {_itemPathTag + "\fn_" + _itemName + _itemExt} else {""};
+ };
+ };
+ _itemHeader = getnumber (_currentItem >> "headerType");
+
+ //--- Compile function
+ if (_itemPath == "") then {_itemPath = _pathFile + "\" + _categoryName + "\fn_" + _itemName + _itemExt};
+ _itemVar = _tagName + "_fnc_" + _itemName;
+ _itemMeta = [_itemPath,_itemExt,_itemHeader,_itemPreInit > 0,_itemPostInit > 0,_itemRecompile> 0,_tag,_categoryName,_itemName];
+
+ /*
+ _itemCompile = if (_itemName in ["animalBehaviour","guiEffectTiles_coef","GUImessage","guiEffectTiles","param","setIDCStreamFriendly","overviewauthor",
+ "diagAARrecord","diagKey","missionHandlers","getServerVariable","missionFlow","initParams","initRespawn","missionTasksLocal",
+ "missionConversationsLocal","missionCon","preload","logFormat","recompile","moduleInit","feedback_allowPP","feedback_allowDeathScreen",
+ "feedbackInit","initMultiplayer","MP","displayMission","feedback_fatiguePP","respawnBase","dirTo","secondsToString","guiMessage_status",
+ "selectRespawnTemplate","guiMessage_defaultPositions","startLoadingScreen_ids","damageChanged","incapacitatedEffect","invRemove",
+ "relpos","inString","findSafePos","isPosBlacklisted","timeToString","distance2D","effectKilled","dynamictext","inAngleSector",
+ "functionMeta","fatigueEffect","Functions Init","setovercast","postInit","recompile","preInit","script"
+ ]
+ || _categoryName in ["GUI","MP","Diagnostic","Effects","Feedback"]) then {
+ [_itemVar,_itemMeta,_itemHeader,_compileFinal] call _fncCompile;
+ } else {
+ compileFinal "false"
+ };
+ */
+
+ _itemCompile = if (_itemCheatsEnabled == 0 || (_itemCheatsEnabled > 0 && cheatsEnabled)) then {
+ [_itemVar, _itemMeta, _itemHeader, _compileFinal] call _fncCompile;
+ }
+ else {
+ {false} //--- Function not available in retail version
+ };
+
+ //--- Register function
+ if (typename _itemCompile == typename {}) then {
+ if !(_itemVar in _functions_list) then {
+ private ["_namespaces"];
+ _namespaces = if (_pathAccess == 0) then {[uinamespace]} else {[missionnamespace]};
+ {
+ //---- Save function
+ _x setvariable [
+ _itemVar,
+ _itemCompile
+ ];
+ //--- Save function meta data
+ _x setvariable [
+ _itemVar + "_meta",
+ compileFinal str _itemMeta
+ ];
+ } foreach _namespaces;
+ if (_pathAccess == 0) then {_functions_list set [count _functions_list,_itemVar];};
+ };
+
+ //--- Add to list of functions executed upon mission start
+ if (_itemPreInit > 0) then {
+ _functions_listPreInitAccess = _functions_listPreInit select _pathAccess;
+ if !(_itemVar in _functions_listPreInitAccess) then {
+ _functions_listPreInitAccess set [count _functions_listPreInitAccess,_itemVar];
+ };
+ };
+ if (_itemPostInit > 0) then {
+ _functions_listPostInitAccess = _functions_listPostInit select _pathAccess;
+ if !(_itemVar in _functions_listPostInitAccess) then {
+ _functions_listPostInitAccess set [count _functions_listPostInitAccess,_itemVar];
+ };
+ };
+
+ //--- Add to list of functions executed upon game start
+ if (_itemPreStart > 0) then {
+ if (_pathAccess == 0) then {
+ if !(_itemVar in _functions_listPreStart) then {
+ _functions_listPreStart set [count _functions_listPreStart,_itemVar];
+ };
+ } else {
+ _errorFnc = uinamespace getvariable "bis_fnc_error";
+ _errorText = "%1 is a mission / campaign function and cannot contain 'preStart = 1;' param";
+ if !(isnil {_errorFnc}) then {[_errorText,_itemVar] call _errorFnc;} else {diag_log format ["Log: [Functions]: " + _errorText,_itemVar];};
+ };
+ };
+
+ //--- Add to list of functions recompiled upon mission start
+ if (_itemRecompile > 0) then {
+ if (_pathAccess == 0) then {
+ if !(_itemVar in _functions_listRecompile) then {
+ _functions_listRecompile set [count _functions_listRecompile,_itemVar];
+ };
+ } else {
+ _errorFnc = uinamespace getvariable "bis_fnc_error";
+ _errorText = "Redundant use of 'recompile = 1;' in %1 - mission / campaign functions are recompiled on start by default.";
+ if !(isnil {_errorFnc}) then {[_errorText,_itemVar] call _errorFnc;} else {diag_log format ["Log: [Functions]: " + _errorText,_itemVar];};
+ };
+ };
+
+ //if (_itemRecompile > 0) then {
+ // _functions_listRecompileAccess = _functions_listRecompile select _pathAccess;
+ // _functions_listRecompileAccess set [count _functions_listRecompileAccess,_itemVar];
+ //};
+ //--- Debug
+ //debuglog ["Log:::::::::::::::::::Function",_itemVar,_itemPath,_pathAccess];
+ };
+ };
+ };
+ };
+ };
+ };
+ };
+ };
+};
+
+//--- Save the lists
+uinamespace setvariable ["BIS_functions_list",compileFinal str (_functions_list)];
+uinamespace setvariable ["BIS_functions_listPreInit",compileFinal str (_functions_listPreInit select 0)];
+uinamespace setvariable ["BIS_functions_listPostInit",compileFinal str (_functions_listPostInit select 0)];
+uinamespace setvariable ["BIS_functions_listRecompile",compileFinal str (_functions_listRecompile)];
+
+
+/******************************************************************************************************
+ FINISH
+
+ When functions are saved, following operations are executed:
+ 1. MissionNamespace shortcuts are created
+ 2. Functions with 'recompile' param set to 1 are recompiled
+ 3. Functions with 'preInit' param set to 1 are executed
+ 4. Multiplayer framework is initialized
+ 5. Modules are initialized (running their own scripts, functions just wait until those scripts are ready)
+ 6. Automatic scripts "initServer.sqf", "initPlayerServer.sqf" and "initPlayerLocal.sqf" are executed
+ 7. Functions with 'postInit' param set to 1 are executed
+
+ When done, system will set 'bis_fnc_init' to true so other systems can catch it.
+
+******************************************************************************************************/
+
+//--- Not core
+if (_recompile in [0,1,3,4]) then {
+ {
+ _allowRecompile = (_x call (uinamespace getvariable "bis_fnc_functionMeta")) select 5;
+
+ _xCode = uinamespace getvariable _x;
+ if (_allowRecompile || !_compileFinal) then {
+ _xCode = call compile str (uinamespace getvariable _x);
+ };
+ missionnamespace setvariable [_x,_xCode];
+ } foreach _functions_list;
+};
+
+//--- Core only
+if (_recompile == 2) then {
+ //--- Call preStart functions
+ if (isnull (finddisplay 0)) then {
+ {
+ ["preStart %1",_x] call bis_fnc_logFormat;
+ _function = [] call (uinamespace getvariable _x);
+ uinamespace setvariable [_x + "_initStart",_function];
+ } foreach _functions_listPreStart;
+ };
+};
+
+//--- Mission only
+if (_recompile == 3) then {
+
+ //--- Switch to mission loading bar
+ RscDisplayLoading_progressMission = true;
+
+ //--- Execute script preload
+ [] call bis_fnc_preload;
+
+ //--- Create functions logic (cannot be created when game is launching; server only)
+ if (isserver && isnull (missionnamespace getvariable ["bis_functions_mainscope",objnull]) && !isnil {uinamespace getvariable "bis_fnc_init"} && worldname != "") then {
+ private ["_grpLogic"];
+ createcenter sidelogic;
+ _grpLogic = creategroup sidelogic;
+ bis_functions_mainscope = _grpLogic createunit ["Logic",[9,9,9],[],0,"none"];
+ bis_functions_mainscope setvariable ["isDedicated",isDedicated,true];
+ publicvariable "bis_functions_mainscope";
+ };
+ (group bis_functions_mainscope) setgroupid [localize "str_dn_modules"]; //--- Name the group for curator
+
+ if (!isNil "bis_functions_mainscope") then {
+ private ["_test", "_test2"];
+ _test = bis_functions_mainscope setPos (position bis_functions_mainscope); if (isnil "_test") then {_test = false};
+ _test2 = bis_functions_mainscope playMove ""; if (isnil "_test2") then {_test2 = false};
+ if (_test || _test2) then {0 call (compile (preprocessFileLineNumbers "a3\functions_f\misc\fn_initCounter.sqf"))};
+ };
+
+ //--- Recompile selected functions
+ _fnc_scriptname = "recompile";
+ {
+ ["recompile %1",_x] call bis_fnc_logFormat;
+ _x call bis_fnc_recompile;
+ } foreach _functions_listRecompile;
+
+ //--- Call preInit functions
+ _fnc_scriptname = "preInit";
+ {
+ {
+ _time = diag_ticktime;
+ [_x]call {
+ private ["_recompile","_functions_list","_functions_listPreInit","_functions_listPostInit","_functions_listRecompile","_time"];
+ ["preInit"] call (missionnamespace getvariable (_this select 0))
+ };
+ ["%1 (%2 ms)",_x,(diag_ticktime - _time) * 1000] call bis_fnc_logFormat;
+ } foreach _x;
+ } foreach _functions_listPreInit;
+
+ //--- Call postInit functions once player is present
+ _functions_listPostInit spawn {
+ _fnc_scriptName = "script";
+ _didJIP = false;
+ 0.15 call bis_fnc_progressloadingscreen;
+
+ //--- Wait until server is initialized (to avoid running scripts before the server)
+ waituntil {call (missionnamespace getvariable ["BIS_fnc_preload_server",{isserver}]) || getClientState == "LOGGED IN"};
+ if (getClientState == "LOGGED IN") exitwith {}; //--- Server lost
+ 0.30 call bis_fnc_progressloadingscreen;
+
+ //--- After JIP, units cannot be initialized during the loading screen
+ if !(isserver) then {
+ endloadingscreen;
+ waituntil {!isnull cameraon && getClientState != "MISSION RECEIVED" && getClientState != "GAME LOADED"};
+ _didJIP = getClientState == "BRIEFING READ";
+ startloadingscreen [""];
+ };
+ bis_functions_mainscope setvariable ["didJIP",_didJIP];
+ 0.45 call bis_fnc_progressloadingscreen;
+
+ //--- Start MP framework and execute persistent functions
+ [] call bis_fnc_initMultiplayer;
+ 0.60 call bis_fnc_progressloadingscreen;
+
+ //--- Wait until module inits are initialized
+ [] call bis_fnc_initModules;
+ 0.75 call bis_fnc_progressloadingscreen;
+
+ //--- Execute automatic scripts
+ if (isserver) then {
+ [] execvm "initServer.sqf";
+ "initServer.sqf" call bis_fnc_logFormat;
+ };
+
+ //--- Run mission scripts
+ if !(isDedicated) then {
+ [player,_didJIP] execvm "initPlayerLocal.sqf";
+ [[[player,_didJIP],"initPlayerServer.sqf"],"bis_fnc_execvm",false,false] call bis_fnc_mp;
+ "initPlayerLocal.sqf" call bis_fnc_logFormat;
+ "initPlayerServer.sqf" call bis_fnc_logFormat;
+ };
+ 0.90 call bis_fnc_progressloadingscreen;
+
+ //--- Call postInit functions
+ _fnc_scriptname = "postInit";
+ {
+ {
+ _time = diag_ticktime;
+ [_x,_didJIP] call {
+ private ["_didJIP","_time"];
+ ["postInit",_this select 1] call (missionnamespace getvariable (_this select 0))
+ };
+ ["%1 (%2 ms)",_x,(diag_ticktime - _time) * 1000] call bis_fnc_logFormat;
+ } foreach _x;
+ } foreach _this;
+ 1.0 call bis_fnc_progressloadingscreen;
+
+ //--- MissionNamespace init
+ missionnamespace setvariable ["bis_fnc_init",true];
+ };
+};
+
+//--- Not mission
+if (_recompile in [0,1,2]) then {
+
+ //--- UInameSpace init
+ uinamespace setvariable ["bis_fnc_init",true]
+};
+
+//--- Only mission variables
+if (_recompile in [4]) then {
+
+ //--- MissionNameSpace init
+ missionnamespace setvariable ["bis_fnc_init",true];
+};
+
+//--- Only mission variables
+if (_recompile in [1]) then {
+ "Functions recompiled" call bis_fnc_log;
+};
+
+//--- Log the info about selected recompile type
+_recompileNames = [
+ "ERROR: Autodetect failed",
+ "Forced",
+ "Core Only",
+ "Mission/Campaign Only"
+];
+//["Initialized: %1.",_recompileNames select _recompile] call (uinamespace getvariable "bis_fnc_logFormat");
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/both/EPOCH_getHitpoints.sqf b/Sources/epoch_code/compile/both/EPOCH_getHitpoints.sqf
new file mode 100644
index 00000000..33c977fb
--- /dev/null
+++ b/Sources/epoch_code/compile/both/EPOCH_getHitpoints.sqf
@@ -0,0 +1,12 @@
+private["_hitpoints", "_type", "_cachekey", "_na"];
+_hitpoints = [];
+if (!isNull _this) then {
+ _type = typeOf _this;
+ _cachekey = format["%1_HP", _type];
+ _hitpoints = missionNamespace getVariable[_cachekey, []];
+ if (_hitpoints isEqualTo []) then {
+ _na = configProperties[configFile >> "CfgVehicles" >> _type >> "HitPoints", "_hitpoints pushBack configName _x; true", true];
+ missionNamespace setVariable[_cachekey, _hitpoints];
+ };
+};
+_hitpoints
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/both/EPOCH_isAny.sqf b/Sources/epoch_code/compile/both/EPOCH_isAny.sqf
new file mode 100644
index 00000000..2a4b7045
--- /dev/null
+++ b/Sources/epoch_code/compile/both/EPOCH_isAny.sqf
@@ -0,0 +1,5 @@
+private ["_item","_return"];
+_item = _this select 0;
+_type = _this select 1;
+_return = str(configFile >> _type >> _item) != "";
+_return
diff --git a/Sources/epoch_code/compile/building/EPOCH_QuickUpgrade.sqf b/Sources/epoch_code/compile/building/EPOCH_QuickUpgrade.sqf
new file mode 100644
index 00000000..b3cb5611
--- /dev/null
+++ b/Sources/epoch_code/compile/building/EPOCH_QuickUpgrade.sqf
@@ -0,0 +1,35 @@
+_target = param [0,objNull];
+if (!isNull _target) then {
+
+ _targetClass = typeOf _target;
+
+ _config = 'CfgBaseBuilding' call EPOCH_returnConfig;
+
+ _recipes = getArray(_config >> _targetClass >> "upgradeBuilding");
+ if !(_recipes isEqualTo []) then {
+
+ createDialog "QuickUpgrade";
+ {
+ _upgradeClass = _x select 0;
+ _upgradeRecipe = _x select 1;
+ _index = lbAdd[1500, getText(configfile >> "CfgVehicles" >> _upgradeClass >> "DisplayName")];
+ lbSetData[1500, _index, _upgradeClass];
+ lbSetValue[1500, _index, _forEachIndex];
+
+ _toolTip = "";
+ {
+ _recipeClass = _x;
+ _recipeQty = 1;
+ if (typeName _recipeClass == "ARRAY") then {
+ _recipeClass = _x select 0;
+ _recipeQty = _x select 1;
+ };
+ _toolTip = _toolTip + format["%1 x %2, ",_recipeQty,getText(configfile >> "CfgMagazines" >> _recipeClass >> "DisplayName")];
+ } forEach _upgradeRecipe;
+ lbSetTooltip [1500, _index, _toolTip];
+
+ } foreach _recipes;
+
+ };
+
+};
diff --git a/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf b/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf
new file mode 100644
index 00000000..73cc6478
--- /dev/null
+++ b/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf
@@ -0,0 +1,127 @@
+/*
+ Epoch Change wall state
+ By Aaron Clark
+*/
+_object = param [0,objNull];
+_anim = param [1,""];
+_state = param [2,0];
+if !(isNull _object) then {
+
+ _msg = "Missing Items";
+ // Get config
+ _config = 'CfgBaseBuilding' call EPOCH_returnConfig;
+
+ // upgradeBuildingPart
+ _objClass = typeOf _object;
+
+ // Add part
+ if (_state == 1) then {
+ _recipe = getArray(_config >> _objClass >> "upgradeBuildingPart");
+
+ _mags = magazines player;
+
+ _recipeCount = 0;
+ _numRemoved = 0;
+ _hasRecipeItems = true;
+
+ // Dry Run
+ {
+ _recipeItem = _x;
+ _recipeQty = 1;
+ if (typeName _x == "ARRAY") then {
+ _recipeItem = _x select 0;
+ _recipeQty = _x select 1;
+ };
+ _recipeCount = _recipeCount + _recipeQty;
+ _currentCount = { _x == _recipeItem } count _mags;
+ if (_currentCount < _recipeQty) exitWith {
+ _hasRecipeItems = false;
+ _msg = format["Need %2 %1 Have %3", _recipeItem call EPOCH_itemDisplayName,_recipeCount ,_currentCount];
+ };
+ }forEach _recipe;
+
+ // remove item
+ if (_hasRecipeItems) then {
+ {
+ _recipeItem = _x;
+ _recipeQty = 1;
+ if (typeName _x == "ARRAY") then {
+ _recipeItem = _x select 0;
+ _recipeQty = _x select 1;
+ };
+ if ([_recipeItem, "CfgWeapons"] call EPOCH_fnc_isAny) then {
+ _items = items player;
+ _currentCount = { _x == _recipeItem } count _items;
+ if (_currentCount >= _recipeQty) then {
+ for "_i" from 1 to _recipeQty do {
+ if (_recipeItem in _items) then {
+ player removeItem _recipeItem;
+ _numRemoved = _numRemoved + 1;
+ };
+ };
+ };
+
+ } else {
+
+ _mags = magazines player;
+ _currentCount = { _x == _recipeItem } count _mags;
+ if (_currentCount >= _recipeQty) then {
+ for "_i" from 1 to _recipeQty do {
+ if (_recipeItem in _mags) then {
+ player removeMagazine _recipeItem;
+ _numRemoved = _numRemoved + 1;
+ };
+ };
+ };
+ };
+
+ }forEach _recipe;
+ };
+
+ if (_numRemoved == _recipeCount) then {
+ _object animate [_anim, _state, true];
+
+ // tell server we should persist this object now
+ // [_object] remoteExec ["EPOCH_server_save_vehicles",2];
+
+ // push interacted object to save queue to save later
+ if !(_object in EPOCH_arr_interactedObjs) then{
+ EPOCH_arr_interactedObjs pushBack _object;
+ };
+
+ _dt = [format["%1 part on %2","Added",_objClass call EPOCH_itemDisplayName], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+
+ } else {
+ _dt = [format["%1", _msg], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+
+
+
+ } else {
+
+ // Remove part
+ _recipe = getArray(_config >> _objClass >> "removeBuildingPart");
+
+ _object animate [_anim, _state, true];
+
+ // push interacted object to save queue to save later
+ if !(_object in EPOCH_arr_interactedObjs) then{
+ EPOCH_arr_interactedObjs pushBack _object;
+ };
+
+ {
+ _craftItem = _x;
+ _craftQty = 1;
+ if (typeName _x == "ARRAY") then {
+ _craftItem = _x select 0;
+ _craftQty = _x select 1;
+ };
+ for "_i" from 1 to _craftQty do {
+ player addMagazine _craftItem;
+ };
+ }forEach _recipe;
+
+ _dt = [format["%1 part on %2","Removed",_objClass call EPOCH_itemDisplayName], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+
+};
diff --git a/Sources/epoch_code/compile/building/EPOCH_countdown.sqf b/Sources/epoch_code/compile/building/EPOCH_countdown.sqf
new file mode 100644
index 00000000..ea763734
--- /dev/null
+++ b/Sources/epoch_code/compile/building/EPOCH_countdown.sqf
@@ -0,0 +1,60 @@
+private["_color", "_distance", "_previous"];
+
+if (!isNull _this) then {
+
+ while {true} do {
+ if (!isNull _this) exitWith {};
+ _posObj = (getPosATL _this);
+ _savedBuildPos = _this getVariable ["BUILD_SAVED_POS", []];
+ _previousBuildPos = _this getVariable ["BUILD_POS", []];
+ if (_previousBuildPos isEqualTo _posObj) exitWith {};
+ _this setVariable ["BUILD_POS",_posObj];
+ uiSleep 1;
+ };
+
+ // make sure it still there after exiting loop above ^
+ if (!isNull _this) then {
+
+ _startTime = diag_tickTime;
+ _endTime = _startTime + 30;
+
+ _this setVariable["EPOCH_endTime", _endTime];
+
+ if !(_this in EPOCH_arr_countdown) then {
+ EPOCH_arr_countdown pushBack _this;
+ };
+
+ _saveCheck = true;
+
+ EPOCH_drawIcon3d = true;
+
+ while {diag_tickTime < _endTime} do {
+ if (EPOCH_Target == _this) exitWith{ _saveCheck = false; };
+ if (isNull _this) exitWith{ _saveCheck = false; };
+ if (EPOCH_stabilityTarget == _this) then {
+ _endTime = diag_tickTime + 30;
+ };
+ uiSleep 0.1;
+ };
+
+ EPOCH_arr_countdown = EPOCH_arr_countdown - [_this];
+ EPOCH_drawIcon3d = !(EPOCH_arr_countdown isEqualTo []);
+
+ if (typeOf _this == "Fireplace_SIM_EPOCH") then {
+
+ _worldspace = [getposATL _this, vectordir _this, vectorup _this];
+ deleteVehicle _this;
+
+ _newObj = createVehicle["Fireplace_EPOCH", (_worldspace select 0), [], 0, "CAN_COLLIDE"];
+ _newObj setVectorDirAndUp[_worldspace select 1, _worldspace select 2];
+ _newObj setposATL(_worldspace select 0);
+
+ } else {
+ if (_saveCheck) then {
+ EPOCH_SAVEBUILD = [_this, player, Epoch_personalToken];
+ publicVariableServer "EPOCH_SAVEBUILD";
+ //diag_log format["DEBUG SAVE: %1", _this];
+ };
+ };
+ };
+};
diff --git a/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTarget.sqf b/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTarget.sqf
new file mode 100644
index 00000000..aeb6206c
--- /dev/null
+++ b/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTarget.sqf
@@ -0,0 +1,42 @@
+private [];
+if !(isNil "EPOCH_simulSwap_Lock") exitWith{ false };
+
+if !(isNull EPOCH_Target) exitWith{ false };
+
+if (EPOCH_playerEnergy <= 0) exitWith{ _dt = ["Need energy", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext; false };
+
+_object = _this;
+
+if (isNull _object) exitWith{ false };
+if ((player distance _object) > 9) exitWith { false };
+
+_objType = typeOf _object;
+
+_isFoundation = _object isKindOf "Constructions_foundation_F";
+_isJammer = _object isKindOf "PlotPole_EPOCH";
+_isStorage = _object isKindOf "Buildable_Storage";
+
+if (!(_object isKindOf "ThingX") && !(_object isKindOf "Constructions_static_F") && !_isFoundation && !_isStorage && !_isJammer) exitWith{ false };
+
+_dialog = "InteractBaseBuilding";
+_handled = createdialog _dialog;
+
+// disable actions if no upgrade options
+
+_config = 'CfgBaseBuilding' call EPOCH_returnConfig;
+
+_upgrade = getArray(_config >> _objType >> "upgradeBuilding");
+if (_upgrade isEqualTo[]) then{
+ ctrlEnable[2400, false];
+};
+_remove = getArray(_config >> _objType >> "removeParts");
+if (_remove isEqualTo[]) then{
+ ctrlEnable[2401, false];
+};
+
+// disable Move option if foundation or jammer
+if (_isFoundation || _isJammer || _isStorage) then{
+ ctrlEnable[2402, false];
+};
+
+true
diff --git a/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTargetBuild.sqf b/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTargetBuild.sqf
new file mode 100644
index 00000000..4c2d4821
--- /dev/null
+++ b/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTargetBuild.sqf
@@ -0,0 +1,41 @@
+private [];
+if !(isNil "EPOCH_simulSwap_Lock") exitWith{ false };
+
+if !(isNull EPOCH_Target) exitWith{ false };
+
+if (EPOCH_playerEnergy <= 0) exitWith{ _dt = ["Need energy", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext; false };
+
+_object = _this;
+
+EPOCH_buildOption = 2;
+
+if (isNull _object) exitWith{ false };
+if ((player distance _object) > 9) exitWith { false };
+
+if (!(_object isKindOf "ThingX") && !(_object isKindOf "Constructions_static_F") && !(_object isKindOf "Constructions_foundation_F")) exitWith{ false };
+
+
+// check if another player has target
+_targeter = _object getVariable["last_targeter", objNull];
+
+if (!isNull _targeter && _targeter != player && (player distance _object > _targeter distance _object)) exitWith{ EPOCH_stabilityTarget = objNull; false };
+
+_stability = _object getVariable["stability", 100];
+if (_stability > 0) exitWith{
+ if (isNull EPOCH_stabilityTarget) then {
+ _object setVariable["last_targeter", player, true];
+ EPOCH_stabilityTarget = _object;
+ };
+};
+
+/*
+if (_object isKindOf "Infostand_base_F") then {
+ if (!(_object in EPOCH_SURVEY)) then {
+ EPOCH_SURVEY pushBack _object;
+ };
+};
+*/
+
+[_object] spawn EPOCH_simulSwap;
+
+true
diff --git a/Sources/epoch_code/compile/building/EPOCH_isBuildAllowed.sqf b/Sources/epoch_code/compile/building/EPOCH_isBuildAllowed.sqf
new file mode 100644
index 00000000..d9c43ece
--- /dev/null
+++ b/Sources/epoch_code/compile/building/EPOCH_isBuildAllowed.sqf
@@ -0,0 +1,106 @@
+private ["_buildingAllowed","_jammer","_restricted","_restrictedLocations","_myPosATL"];
+_buildingAllowed = true;
+_ownedJammerExists = false;
+_nearestJammer = objNull;
+
+// defaults
+_config = 'CfgEpochClient' call EPOCH_returnConfig;
+_buildingJammerRange = getNumber(_config >> "buildingJammerRange");
+_buildingCountLimit = getNumber(_config >> "buildingCountLimit");
+if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; };
+if (_buildingCountLimit == 0) then { _buildingCountLimit = 200; };
+
+_staticClass = getText(configfile >> "CfgVehicles" >> _this >> "staticClass");
+_simulClass = getText(configfile >> "CfgVehicles" >> _this >> "simulClass");
+_bypassJammer = getNumber(configfile >> "CfgVehicles" >> _staticClass >> "bypassJammer");
+
+// Jammer
+_jammer = nearestObjects[player, ["PlotPole_EPOCH"], _buildingJammerRange*3];
+if !(_jammer isEqualTo []) then {
+ if (_this in ["PlotPole_EPOCH", "PlotPole_SIM_EPOCH"]) then {
+ {
+ if (alive _x) exitWith{
+ _buildingAllowed = false;
+ _dt = ["Building Disallowed: Existing Jammer Signal", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ } foreach _jammer;
+ } else {
+
+ {
+ if (alive _x && (_x distance player) <= _buildingJammerRange) exitWith{
+ _nearestJammer = _x;
+ };
+ } foreach _jammer;
+
+ if !(isNull _nearestJammer) then {
+ if ((_nearestJammer getVariable["BUILD_OWNER", "-1"]) in[getPlayerUID player, Epoch_my_GroupUID]) then {
+ _ownedJammerExists = true;
+ } else {
+ _buildingAllowed = false;
+ _dt = ["Building Disallowed: Frequency Blocked", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ _objectCount = count nearestObjects[_nearestJammer, ["Constructions_static_F"], _buildingJammerRange];
+ if (_objectCount >= _buildingCountLimit) then {
+ _buildingAllowed = false;
+ _dt = ["Building Disallowed: Frequency Overloaded", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+ };
+};
+if !(_buildingAllowed)exitWith{ false };
+
+// Max object
+if (!_ownedJammerExists) then{
+ _limitNearby = getNumber(configfile >> "CfgVehicles" >> _staticClass >> "limitNearby");
+ if (_limitNearby > 0) then{
+ _objectCount = count nearestObjects[player, [_staticClass, _simulClass], _buildingJammerRange];
+ if (_objectCount >= _limitNearby) then{
+ _buildingAllowed = false;
+ _dt = [format["Building Disallowed: Limit %1", _limitNearby], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+};
+if !(_buildingAllowed)exitWith{ false };
+
+// require jammer check if not found as owner of jammer
+if (getNumber(_config >> "buildingRequireJammer") == 0 && _bypassJammer == 0) then{
+ if !(_this in ["PlotPole_EPOCH", "PlotPole_SIM_EPOCH"]) then {
+ _buildingAllowed = _ownedJammerExists;
+ if !(_buildingAllowed) then {
+ _dt = ["Building Disallowed: Frequency Jammer Needed", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+};
+if !(_buildingAllowed)exitWith{ false };
+
+if (getNumber(_config >> "buildingNearbyMilitary") == 0) then{
+ _range = getNumber(_config >> "buildingNearbyMilitaryRange");
+ if (_range > 0) then {
+ _restricted = nearestObjects [player, ["ProtectionZone_Invisible_F","Cargo_Tower_base_F","Cargo_HQ_base_F","Cargo_Patrol_base_F","Cargo_House_base_F"], 300];
+ } else {
+ _restricted = nearestObjects [player, ["Cargo_Tower_base_F","Cargo_HQ_base_F","Cargo_Patrol_base_F","Cargo_House_base_F"], _range];
+ _restricted append (nearestObjects [player, ["ProtectionZone_Invisible_F","Cargo_Tower_base_F","Cargo_HQ_base_F","Cargo_Patrol_base_F","Cargo_House_base_F"], 300]);
+ };
+} else {
+ _restricted = nearestObjects [player, ["ProtectionZone_Invisible_F"], 300];
+};
+if !(_restricted isEqualTo []) then {
+ _buildingAllowed = false;
+ _dt = ["Building Disallowed: Protected Frequency", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+};
+
+_restrictedLocations = nearestLocations [player, ["NameCityCapital"], 300];
+if !(_restrictedLocations isEqualTo []) then {
+ _buildingAllowed = false;
+ _dt = ["Building Disallowed: Protected Frequency", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+};
+
+_myPosATL = getPosATL player;
+{
+ if ((_x select 0) distance _myPosATL < (_x select 1)) exitWith {
+ _buildingAllowed = false;
+ _dt = ["Building Disallowed: Protected Frequency", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+} forEach(getArray(_config >> worldname >> "blockedArea"));
+
+_buildingAllowed
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/building/EPOCH_lockCheck.sqf b/Sources/epoch_code/compile/building/EPOCH_lockCheck.sqf
new file mode 100644
index 00000000..dbaf5a88
--- /dev/null
+++ b/Sources/epoch_code/compile/building/EPOCH_lockCheck.sqf
@@ -0,0 +1,16 @@
+private["_jammed", "_jammer"];
+_config = "CfgEpochClient" call EPOCH_returnConfig;
+_buildingJammerRange = getNumber(_config >> "buildingJammerRange");
+if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; };
+
+_jammer = nearestObjects[player, ["PlotPole_EPOCH"], _buildingJammerRange];
+_jammed = false;
+if !(_jammer isEqualTo[]) then {
+ {
+ if (alive _x) then {
+ _jammed = !((_x getVariable["BUILD_OWNER", "-1"]) in [getPlayerUID player, Epoch_my_GroupUID]);
+ };
+ if (_jammed) exitWith{};
+ } forEach _jammer;
+};
+_jammed
diff --git a/Sources/epoch_code/compile/building/EPOCH_maintainIT.sqf b/Sources/epoch_code/compile/building/EPOCH_maintainIT.sqf
new file mode 100644
index 00000000..e04522b5
--- /dev/null
+++ b/Sources/epoch_code/compile/building/EPOCH_maintainIT.sqf
@@ -0,0 +1,17 @@
+if (EPOCH_playerCrypto > 0) then {
+ _config = "CfgEpochClient" call EPOCH_returnConfig;
+ _buildingJammerRange = getNumber(_config >> "buildingJammerRange");
+ if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; };
+
+ _maintainCount = {(damage _x) > 0} count nearestObjects[_this, ["Constructions_static_F", "Constructions_foundation_F"], _buildingJammerRange];
+ if (EPOCH_playerCrypto < _maintainCount) then {
+ _maintainCount = EPOCH_playerCrypto;
+ };
+
+ EPOCH_MAINTBUILD = [_this, player, _maintainCount, Epoch_personalToken];
+ publicVariableServer "EPOCH_MAINTBUILD";
+
+ _dt = [format["Cost %1 Krypto to maintain base.", _maintainCount], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+} else {
+ _dt = ["You need Krypto to maintain a base.", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+};
diff --git a/Sources/epoch_code/compile/building/EPOCH_removeBUILD.sqf b/Sources/epoch_code/compile/building/EPOCH_removeBUILD.sqf
new file mode 100644
index 00000000..6285ba9b
--- /dev/null
+++ b/Sources/epoch_code/compile/building/EPOCH_removeBUILD.sqf
@@ -0,0 +1,67 @@
+private["_buildingAllowed", "_jammer", "_restricted", "_restrictedLocations", "_myPosATL"];
+_buildingAllowed = true;
+_ownedJammerExists = false;
+_nearestJammer = objNull;
+_config = 'CfgEpochClient' call EPOCH_returnConfig;
+_buildingJammerRange = getNumber(_config >> "buildingJammerRange");
+_buildingCountLimit = getNumber(_config >> "buildingCountLimit");
+
+// defaults
+if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; };
+if (_buildingCountLimit == 0) then { _buildingCountLimit = 200; };
+
+EPOCH_buildOption = 0;
+
+_object = _this;
+_objType = typeOf _object;
+
+// check if another player has target
+_targeter = _object getVariable["last_targeter", objNull];
+
+if (!isNull _targeter && _targeter != player && (player distance _object > _targeter distance _object)) exitWith{ EPOCH_stabilityTarget = objNull; false };
+
+_stability = _object getVariable["stability", 100];
+if (_stability > 0) exitWith{
+ if (isNull EPOCH_stabilityTarget) then {
+ _object setVariable["last_targeter", player, true];
+ EPOCH_stabilityTarget = _object;
+ };
+};
+
+if (_objType == "PlotPole_EPOCH") then {
+ if ((_object getVariable["BUILD_OWNER", "-1"]) != getPlayerUID player) then{
+ _buildingAllowed = false;
+ _dt = ["Remove Disallowed: Frequency Blocked", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+}
+else {
+ _jammer = nearestObjects[player, ["PlotPole_EPOCH"], _buildingJammerRange];
+ if !(_jammer isEqualTo[]) then{
+ {
+ if (alive _x) exitWith{
+ _nearestJammer = _x;
+ };
+ } foreach _jammer;
+
+ if !(isNull _nearestJammer) then{
+ if ((_nearestJammer getVariable["BUILD_OWNER", "-1"]) in[getPlayerUID player, Epoch_my_GroupUID]) then{
+ _ownedJammerExists = true;
+ }
+ else {
+ _buildingAllowed = false;
+ _dt = ["Remove Disallowed: Frequency Blocked", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+ };
+};
+
+if !(_buildingAllowed)exitWith{false};
+
+_removeParts = getArray(('CfgBaseBuilding' call EPOCH_returnConfig) >> _objType >> "removeParts");
+if !(_removeParts isEqualTo[]) then{
+ EPOCH_REMBUILD = [_this, player, Epoch_personalToken];
+ publicVariableServer "EPOCH_REMBUILD";
+ _return = true;
+ _dt = ["Removed", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+};
+_return
diff --git a/Sources/epoch_code/compile/building/EPOCH_returnVector.sqf b/Sources/epoch_code/compile/building/EPOCH_returnVector.sqf
new file mode 100644
index 00000000..b93af11d
--- /dev/null
+++ b/Sources/epoch_code/compile/building/EPOCH_returnVector.sqf
@@ -0,0 +1,13 @@
+
+// BIS function
+private ["_v","_d","_x","_y"];
+_v = +(_this select 0);
+_d = _this select 1;
+
+_x = _v select 0;
+_y = _v select 1;
+
+_v set [0, (cos _d)*_x - (sin _d)*_y];
+_v set [1, (sin _d)*_x + (cos _d)*_y];
+
+_v
diff --git a/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf b/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf
new file mode 100644
index 00000000..ac34a001
--- /dev/null
+++ b/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf
@@ -0,0 +1,211 @@
+private [
+ "_cfgClass","_class","_worldspace","_objSlot","_newObj","_playerOffset","_bbr","_p1","_p2","_maxWidth","_maxLength","_maxHeight","_pos2","_vel2","_dir2","_up2","_pos1","_vel1","_dir1","_up1","_interval","_velocityTransformation","_object","_status","_return","_oemType","_config","_currentTarget"];
+if !(isNil "EPOCH_simulSwap_Lock") exitWith{};
+
+_object = _this select 0;
+if (isNull _object) exitWith{ EPOCH_target = objNull; };
+
+_objType = typeOf _object;
+
+_isSnap = false;
+
+if (EPOCH_playerEnergy <= 0) exitWith {
+ _dt = ["Need Energy", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+};
+if !(_objType call EPOCH_isBuildAllowed) exitWith{};
+
+EPOCH_simulSwap_Lock = true;
+_return = _object;
+_velocityTransformation = [];
+_prevSnapDistance = 0;
+_distanceMod = 0;
+_oemType = (typeOf _object);
+_config = (configFile >> "CfgVehicles" >> _oemType >> "simulClass");
+if (isText(_config)) then {
+ _class = getText(_config);
+ _create = true;
+ _allowedSnapPoints = getArray(configfile >> "cfgVehicles" >> _class >> "allowedSnapPoints");
+ _allowedSnapObjects = ["Constructions_static_F"];
+ _snapObjects = configfile >> "cfgVehicles" >> _class >> "allowedSnapObjects";
+ _energyCost = getNumber(configfile >> "cfgVehicles" >> _class >> "energyCost");
+ if (_energyCost == 0) then {
+ _energyCost = 0.1;
+ };
+ if (isArray(_snapObjects)) then {
+ _allowedSnapObjects = getArray(_snapObjects);
+ };
+ // diag_log format["DEBUG ALLOWED SNAP OBJECTS: %1", _allowedSnapObjects];
+ _newObj = _object;
+ if (_create) then {
+ _worldspace = [(getposATL _object),(vectordir _object),(vectorup _object)];
+ _objSlot = _object getVariable["BUILD_SLOT", -1];
+ _textureSlot = _object getVariable["TEXTURE_SLOT", 0];
+ deleteVehicle _object;
+ waitUntil {sleep 0.01; isNull _object};
+ _newObj = createVehicle [_class, (_worldspace select 0), [], 0, "CAN_COLLIDE"];
+ if (_objSlot != -1) then {
+ _newObj setVariable ["BUILD_SLOT",_objSlot,true];
+ };
+ _newObj setVectorDirAndUp [_worldspace select 1,_worldspace select 2];
+ _newObj setposATL (_worldspace select 0);
+
+ if (_textureSlot != 0) then {
+ EPOCH_PAINTBUILD = [_newObj, _textureSlot, player, Epoch_personalToken];
+ publicVariableServer "EPOCH_PAINTBUILD";
+ };
+ };
+ EP_velocityTransformation = [];
+ EPOCH_oldTarget = EPOCH_target;
+ EPOCH_target = _newObj;
+ _currentTarget = EPOCH_target;
+ EPOCH_velTransform = true;
+ EPOCH_objHold = 0;
+ _onContactEH = _currentTarget addEventHandler["EpeContactStart", { if ((_this select 1) isKindOf "LandVehicle" || (_this select 1) isKindOf "Air" || (_this select 1) isKindOf "Ship" || (_this select 1) isKindOf "Tank") then{ EPOCH_target = objNull }; }];
+ EP_snap = objNull;
+ _previousDistanceNear = 0;
+ _offset = player worldToModel (getposATL _currentTarget);
+ EPOCH_X_OFFSET = _offset select 0;
+ EPOCH_Y_OFFSET = _offset select 1;
+ EPOCH_Z_OFFSET = _offset select 2;
+ _lastCheckTime = diag_tickTime;
+ while {EPOCH_target == _currentTarget} do {
+ if (EPOCH_playerEnergy <= 0) exitWith { EPOCH_target = objNull; };
+ _rejectMove = false;
+ if ((diag_tickTime - _lastCheckTime) > 10) then {
+ _lastCheckTime = diag_tickTime;
+ _rejectMove = !(_objType call EPOCH_isBuildAllowed);
+ };
+ if (_rejectMove) exitWith{
+ EPOCH_target = objNull;
+ };
+ _plyrdistance = player distance EPOCH_target;
+ if (_plyrdistance < 10) then {
+ _isSnap = false;
+ _snapPosition = [0,0,0];
+ _snapType = "para";
+ _nearestObject = objNull;
+
+ // see if this can prevent riding on object
+ if (EPOCH_Y_OFFSET < 3.6) then {
+ EPOCH_Y_OFFSET = EPOCH_Y_OFFSET + 0.1;
+ };
+
+ _pos2 = player modelToWorld[EPOCH_X_OFFSET, EPOCH_Y_OFFSET, EPOCH_Z_OFFSET];
+ _distance = _pos2 distance EPOCH_target;
+ if (EPOCH_buildMode == 1) then {
+ if (isNull _nearestObject) then {
+ {
+ _nearestObjectRaw = nearestObject [EPOCH_target,_x];
+ _distanceNear = EPOCH_target distance _nearestObjectRaw;
+ if (_distanceNear < _previousDistanceNear) then {
+ _nearestObject = _nearestObjectRaw;
+ };
+ _previousDistanceNear = _distanceNear;
+ } forEach _allowedSnapObjects;
+ };
+ if (!isNull _nearestObject) then {
+ _snapPointsPara = [] + getArray(configfile >> "cfgVehicles" >> (typeOf _nearestObject) >> "snapPointsPara");
+ _snapPointsPerp = [] + getArray(configfile >> "cfgVehicles" >> (typeOf _nearestObject) >> "snapPointsPerp");
+ _snapArrayPara = [];
+ {
+ if (_x in _allowedSnapPoints) then {
+ _pOffset = _nearestObject selectionPosition _x;
+ _snapPos = _nearestObject modelToWorld _pOffset;
+ if ((_pos2 distance _snapPos) < 3) then {
+ _snapArrayPara pushBack _snapPos;
+ };
+ };
+ } forEach _snapPointsPara;
+ _snapArrayPerp = [];
+ {
+ if (_x in _allowedSnapPoints) then {
+ _pOffset = _nearestObject selectionPosition _x;
+ _snapPos = _nearestObject modelToWorld _pOffset;
+ if ((_pos2 distance _snapPos) < 3) then {
+ _snapArrayPerp pushBack _snapPos;
+ };
+ };
+ } forEach _snapPointsPerp;
+ {
+ _snapDistance = _pos2 distance _x;
+ if (_snapDistance < 1 && (_snapDistance < _prevSnapDistance)) exitWith {
+ _isSnap = true;
+ _snapPosition = _x;
+ _snapType = "para";
+ };
+ _prevSnapDistance = _snapDistance;
+ } forEach _snapArrayPara;
+ {
+ _snapDistance = _pos2 distance _x;
+ if (_snapDistance < 1 && (_snapDistance < _prevSnapDistance)) exitWith {
+ _isSnap = true;
+ _snapPosition = _x;
+ _snapType = "perp";
+ };
+ _prevSnapDistance = _snapDistance;
+ } forEach _snapArrayPerp;
+ };
+ if (_isSnap && _distance < 5) then {
+ _pos2 = _snapPosition;
+ if (!surfaceIsWater _pos2) then {
+ _pos2 = ATLtoASL _pos2;
+ };
+ _vel2 = (velocity _nearestObject);
+ _direction = getDir _nearestObject;
+ if (_snapType == "perp") then {
+ _direction = _direction - ([_snapPosition,_nearestObject] call BIS_fnc_dirTo);
+ } else {
+ _direction = 0;
+ };
+ if (EPOCH_snapDirection > 0) then {
+ if (EPOCH_snapDirection == 1) then {
+ _direction = _direction + 90;
+ };
+ if (EPOCH_snapDirection == 2) then {
+ _direction = _direction + 180;
+ };
+ if (EPOCH_snapDirection == 3) then {
+ _direction = _direction + 270;
+ };
+ };
+ if (_direction > 360) then {
+ _direction = _direction - 360;
+ };
+ if (_direction < 0) then {
+ _direction = 360 + _direction;
+ };
+ _dir2 = [vectorDir _nearestObject, _direction] call EPOCH_returnVector;
+ _up2 = (vectorUp _nearestObject);
+ EP_velocityTransformation = [_pos2,_vel2,_dir2,_up2];
+ };
+ };
+ if (!_isSnap) then {
+ if !(surfaceIsWater _pos2) then {
+ _pos2 = ATLtoASL _pos2;
+ };
+ if (EPOCH_space) then {
+ _vel2 = (velocity player);
+ _dir2 = [vectorDir player, EPOCH_buildDirection] call EPOCH_returnVector;
+ _up2 = (vectorUp player);
+ EPOCH_space = false;
+ EP_velocityTransformation = [_pos2,_vel2,_dir2,_up2];
+ } else {
+ EP_velocityTransformation = [];
+ };
+ };
+ };
+ EPOCH_playerEnergy = (EPOCH_playerEnergy - _energyCost) max 0;
+ uiSleep 0.1;
+ };
+ _currentTarget removeEventHandler["EpeContactStart", _onContactEH];
+ EPOCH_velTransform = false;
+ _disallowed = ["Tarp_SIM_EPOCH", "Freezer_SIM_EPOCH", "Fridge_SIM_EPOCH", "Shelf_SIM_EPOCH", "Pelican_SIM_EPOCH", "Wardrobe_SIM_EPOCH", "Bed_SIM_EPOCH", "Couch_SIM_EPOCH", "Cooker_SIM_EPOCH", "Chair_SIM_EPOCH", "Filing_SIM_EPOCH", "Table_SIM_EPOCH", "Locker_SIM_EPOCH", "ToolRack_SIM_EPOCH", "Shoebox_SIM_EPOCH", "Bunk_SIM_EPOCH", "Jack_SIM_EPOCH"];
+ if !(_class in _disallowed) then {
+ _currentTarget spawn EPOCH_countdown;
+ };
+ _currentTarget setVelocity [0,0,-0.01];
+};
+[] spawn{
+ uiSleep 2;
+ EPOCH_simulSwap_Lock = nil;
+};
diff --git a/Sources/epoch_code/compile/building/EPOCH_staticMove.sqf b/Sources/epoch_code/compile/building/EPOCH_staticMove.sqf
new file mode 100644
index 00000000..96e824fb
--- /dev/null
+++ b/Sources/epoch_code/compile/building/EPOCH_staticMove.sqf
@@ -0,0 +1,324 @@
+private["_allowedSnapObjects", "_currentZoffset", "_nearestObject", "_pOffset", "_snapPos", "_snapPosition", "_snapType", "_snapDistance", "_prevSnapDistance", "_pos2", "_dir", "_snapPointsPara", "_snapPointsPerp", "_distance", "_objSlot", "_currentTarget", "_allowedSnapPoints", "_snapObjects", "_class", "_buildingPos"];
+if !(isNil "EPOCH_simulSwap_Lock") exitWith{};
+
+_object = _this select 0;
+_item = _this select 1;
+if (isNull _object) exitWith{ EPOCH_target = objNull; };
+
+if (EPOCH_playerEnergy <= 0) exitWith{
+ _dt = ["Need Energy", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+};
+if !("" call EPOCH_isBuildAllowed) exitWith{};
+EPOCH_simulSwap_Lock = true;
+
+_objType = typeOf _object;
+
+_energyCost = getNumber(configfile >> "cfgVehicles" >> _objType >> "energyCost");
+if (_energyCost == 0) then {
+ _energyCost = 0.1;
+};
+
+_class = getText(configfile >> "cfgVehicles" >> _objType >> "GhostPreview");
+_maxHeight = getNumber(configfile >> "cfgVehicles" >> _objType >> "maxHeight");
+_simulClass = getText(configFile >> "CfgVehicles" >> _objType >> "simulClass");
+_maxSnapDistance = 1;
+_lastCheckTime = diag_tickTime;
+_stabilityCheck = false;
+
+// force sim check if object has sim class and default max height to 9m if not already specified
+if (_simulClass != "") then {
+ _stabilityCheck = true;
+ if (_maxHeight == 0) then {
+ _maxHeight = 500;
+ };
+};
+
+if (_class != "") then {
+
+ _objSlot = _object getVariable["BUILD_SLOT", -1];
+
+ deleteVehicle _object;
+
+ _pos2 = player modelToWorldVisual[EPOCH_X_OFFSET, EPOCH_Y_OFFSET, EPOCH_Z_OFFSET];
+
+ EPOCH_target = createVehicle[_class, _pos2, [], 0, "CAN_COLLIDE"];
+ EPOCH_TEMPOBJ_PVS = EPOCH_target;
+ publicVariableServer "EPOCH_TEMPOBJ_PVS";
+
+ if (_pos2 select 2 > _maxHeight) then {
+ _pos2 set[2, _maxHeight];
+ };
+
+ _pos2ATL = _pos2;
+ if (surfaceIsWater _pos2ATL) then {
+ _pos2ATL = ASLtoATL _pos2ATL;
+ };
+ EPOCH_target setposATL _pos2ATL;
+
+ EPOCH_target attachTo[player];
+ _currentTarget = EPOCH_target;
+
+ if (_objSlot != -1) then {
+ _currentTarget setVariable["BUILD_SLOT", _objSlot, true];
+ };
+
+ _allowedSnapPoints = getArray(configfile >> "cfgVehicles" >> _class >> "allowedSnapPoints");
+ _allowedSnapObjects = getArray(configfile >> "cfgVehicles" >> _class >> "allowedSnapObjects");
+
+ _currentOffSet = [];
+ EP_snap = objNull;
+ EP_snapPos = [0, 0, 0];
+ _isSnap = false;
+
+ _EPOCH_1 = diag_tickTime;
+ _nearestObjects = [];
+
+ while {EPOCH_target == _currentTarget} do {
+
+ _rejectMove = false;
+ if ((diag_tickTime - _lastCheckTime) > 10) then {
+ _lastCheckTime = diag_tickTime;
+ _rejectMove = !(_objType call EPOCH_isBuildAllowed);
+ };
+ if (_rejectMove) exitWith{
+ deleteVehicle EPOCH_target;
+ };
+
+ _offSet = [EPOCH_X_OFFSET, EPOCH_Y_OFFSET, EPOCH_Z_OFFSET];
+ _pos2 = player modelToWorldVisual _offSet;
+
+ if (surfaceIsWater _pos2) then {
+ _pos2 set[2, ((getPosASL player) select 2) + EPOCH_Z_OFFSET];
+ };
+
+ if !(_currentOffSet isEqualTo _offSet) then {
+ _currentOffSet = _offSet;
+ {
+ detach _x;
+ } forEach attachedObjects player;
+
+ if (_pos2 select 2 > _maxHeight) then {
+ _pos2 set[2, _maxHeight];
+ };
+ _pos2ATL = _pos2;
+ if (surfaceIsWater _pos2ATL) then {
+ _pos2ATL = ASLtoATL _pos2ATL;
+ };
+
+ EPOCH_target setposATL _pos2ATL;
+ EPOCH_target attachTo[player];
+ };
+
+ {
+ _nearestObject = _x;
+ if !(isNull EP_snap) then {
+ if ((_pos2 distance EP_snapPos) < _maxSnapDistance) then {
+ _nearestObject = EP_snap;
+ };
+ };
+
+ if (!isNull _nearestObject && _nearestObject isEqualTo _x) then {
+
+ _isSnap = false;
+ _snapPosition = [0, 0, 0];
+ _snapConfig = configfile >> "cfgVehicles" >> (typeOf _nearestObject);
+ _snapPointsPara = getArray(_snapConfig >> "snapPointsPara");
+ _snapPointsPerp = getArray(_snapConfig >> "snapPointsPerp");
+
+ // base line for z height offset
+ _baselineSnapPos = _nearestObject modelToWorldVisual [0,0,0];
+
+ if (EPOCH_buildMode == 1) then {
+ {
+ if (_x in _allowedSnapPoints) then {
+ _pOffset = _nearestObject selectionPosition _x;
+ _snapPos = _nearestObject modelToWorldVisual _pOffset;
+ if (surfaceIsWater _snapPos) then {
+ _snapPos set[2, ((getPosASL _nearestObject) select 2) + (_pOffset select 2)];
+ };
+ _snapDistance = _pos2 distance _snapPos;
+ if (_snapDistance < _maxSnapDistance) exitWith{
+ _isSnap = true;
+ _snapPosition = _snapPos;
+ _snapType = "para";
+ };
+ };
+ } forEach _snapPointsPara;
+
+ {
+ if (_x in _allowedSnapPoints) then {
+ _pOffset = _nearestObject selectionPosition _x;
+ _snapPos = _nearestObject modelToWorldVisual _pOffset;
+ if (surfaceIsWater _snapPos) then {
+ _snapPos set[2, ((getPosASL _nearestObject) select 2) + (_pOffset select 2)];
+ };
+ _snapDistance = _pos2 distance _snapPos;
+ if (_snapDistance < _maxSnapDistance) exitWith{
+ _isSnap = true;
+ _snapPosition = _snapPos;
+ _snapType = "perp";
+ };
+ };
+ } forEach _snapPointsPerp;
+ };
+
+ _distance = _pos2 distance _currentTarget;
+
+ if (_isSnap && _distance < 5) then {
+
+ EP_snap = _nearestObject;
+ EP_snapPos = _snapPosition;
+
+ _direction = getDir _nearestObject;
+ if (_snapType == "perp") then {
+ _snapPos1 = [_snapPosition select 0, _snapPosition select 1, 0];
+ _pos_snapObj = getposATL _nearestObject;
+ _pos_snapObj set[2, 0];
+
+ _direction = _direction - ([_snapPos1, _pos_snapObj] call BIS_fnc_dirTo);
+ }
+ else {
+ _direction = 0;
+ };
+ if (EPOCH_snapDirection > 0) then {
+ if (EPOCH_snapDirection == 1) then {
+ _direction = _direction + 90;
+ };
+ if (EPOCH_snapDirection == 2) then {
+ _direction = _direction + 180;
+ };
+ if (EPOCH_snapDirection == 3) then {
+ _direction = _direction + 270;
+ };
+ };
+ if (_direction > 360) then {
+ _direction = _direction - 360;
+ };
+ if (_direction < 0) then {
+ _direction = 360 + _direction;
+ };
+
+ if !(attachedObjects player isEqualTo[]) then {
+ {
+ detach _x;
+ } forEach attachedObjects player;
+ if (EPOCH_snapDirection > 0) then {
+ if (EPOCH_snapDirection == 1) then {
+ _direction = _direction + 90;
+ };
+ if (EPOCH_snapDirection == 2) then {
+ _direction = _direction + 180;
+ };
+ if (EPOCH_snapDirection == 3) then {
+ _direction = _direction + 270;
+ };
+ };
+ if (_direction > 360) then {
+ _direction = _direction - 360;
+ };
+ if (_direction < 0) then {
+ _direction = 360 + _direction;
+ };
+
+ _dir2 = [vectorDir _nearestObject, _direction] call EPOCH_returnVector;
+
+ if (_pos2 select 2 > _maxHeight) then {
+ _pos2 set[2, _maxHeight];
+ };
+ if (surfaceIsWater _snapPosition) then {
+ _snapPosition = ASLtoATL _snapPosition;
+ };
+
+ _currentTarget setVectorDirAndUp[_dir2, (vectorUp _nearestObject)];
+ _currentTarget setposATL _snapPosition;
+ };
+
+ } else {
+
+ if !(attachedObjects player isEqualTo[]) then {
+ _offSet = [EPOCH_X_OFFSET, EPOCH_Y_OFFSET, EPOCH_Z_OFFSET];
+ _pos1 = player modelToWorldVisual _offSet;
+ if (surfaceIsWater _pos1) then {
+ _pos1 set[2, ((getPosASL player) select 2) + EPOCH_Z_OFFSET];
+ _pos1 = ASLtoATL _pos1;
+ };
+ EPOCH_target setposATL _pos1;
+ EPOCH_target attachTo[player];
+ };
+ };
+ };
+
+ } forEach _nearestObjects;
+
+ if ((diag_tickTime - _EPOCH_1) > 1) then {
+ _EPOCH_1 = diag_tickTime;
+ _nearestObjects = nearestObjects[EPOCH_target, _allowedSnapObjects, 12];
+ EPOCH_playerEnergy = (EPOCH_playerEnergy - _energyCost) max 0;
+ };
+
+ };
+
+ {
+ detach _x;
+ } forEach attachedObjects player;
+
+
+ if !(isNull _currentTarget) then {
+
+ // check if touching ground
+ _currentPos = getPosATL _currentTarget;
+ if (_currentPos select 2 > _maxHeight) then {
+ _currentPos set[2, _maxHeight];
+ _currentTarget setPosATL _currentPos;
+ };
+
+ _currentPos set[2, (_currentPos select 2) + 0.1];
+
+ // remove item here
+ if (([player, _item] call BIS_fnc_invRemove) == 1) then {
+
+ if (_stabilityCheck && !isTouchingGround _currentTarget) then {
+
+ _offsetZPos = [_currentPos select 0, _currentPos select 1, (_currentPos select 2) - 0.5];
+ if !(terrainIntersect[_currentPos, _offsetZPos]) then {
+
+ // check below for static object
+ if (lineintersectsobjs[ATLtoASL _currentPos, ATLtoASL _offsetZPos, _currentTarget, objNull, false, 2] isEqualTo[]) then {
+
+ _currentDir = getDir _currentTarget;
+ _objSize = sizeOf _objType / 3.5;
+ _numberOfContacts = 0;
+ {
+ // check all four sides (must have two or more)
+ if !(lineintersectsobjs[ATLtoASL _currentPos, ATLtoASL([_currentTarget, _objSize, _currentDir + _x] call BIS_fnc_relPos), _currentTarget, objNull, false, 2] isEqualTo[]) then {
+ _numberOfContacts = _numberOfContacts + 1;
+ };
+ } forEach[0, 90, 180, 270];
+
+ if (_numberOfContacts < 2) then {
+
+ // TODO: foundations need to be handled
+
+ // change to sim
+ _worldspace = [getposATL _currentTarget, vectordir _currentTarget, vectorup _currentTarget];
+
+ deleteVehicle _currentTarget;
+
+ _currentTarget = createVehicle[_simulClass, (_worldspace select 0), [], 0, "CAN_COLLIDE"];
+ _currentTarget setVectorDirAndUp[_worldspace select 1, _worldspace select 2];
+ _currentTarget setposATL(_worldspace select 0);
+
+ };
+ };
+ };
+ };
+
+ _currentTarget spawn EPOCH_countdown;
+ };
+ };
+};
+
+[] spawn{
+ uiSleep 2;
+ EPOCH_simulSwap_Lock = nil;
+};
diff --git a/Sources/epoch_code/compile/building/EPOCH_upgradeBUILD.sqf b/Sources/epoch_code/compile/building/EPOCH_upgradeBUILD.sqf
new file mode 100644
index 00000000..96a2408c
--- /dev/null
+++ b/Sources/epoch_code/compile/building/EPOCH_upgradeBUILD.sqf
@@ -0,0 +1,109 @@
+if (isNull _this) exitWith{ false };
+_return = false;
+
+_buildingAllowed = true;
+_ownedJammerExists = false;
+_nearestJammer = objNull;
+_config = 'CfgEpochClient' call EPOCH_returnConfig;
+_buildingJammerRange = getNumber(_config >> "buildingJammerRange");
+_buildingCountLimit = getNumber(_config >> "buildingCountLimit");
+
+// defaults
+if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; };
+if (_buildingCountLimit == 0) then { _buildingCountLimit = 200; };
+
+EPOCH_buildOption = 1;
+
+_object = _this;
+
+// check if another player has target
+_targeter = _object getVariable["last_targeter", objNull];
+
+if (!isNull _targeter && _targeter != player && (player distance _object > _targeter distance _object)) exitWith{ EPOCH_stabilityTarget = objNull; false };
+
+_stability = _object getVariable["stability", 100];
+if (_stability > 0) exitWith{
+ if (isNull EPOCH_stabilityTarget) then {
+ _object setVariable["last_targeter", player, true];
+ EPOCH_stabilityTarget = _object;
+ };
+};
+
+
+
+
+
+_jammer = nearestObjects[player, ["PlotPole_EPOCH"], _buildingJammerRange];
+
+if !(_jammer isEqualTo[]) then {
+ {
+ if (alive _x) exitWith{
+ _nearestJammer = _x;
+ };
+ } foreach _jammer;
+
+ if !(isNull _nearestJammer) then {
+ if ((_nearestJammer getVariable["BUILD_OWNER", "-1"]) in[getPlayerUID player, Epoch_my_GroupUID]) then {
+ _ownedJammerExists = true;
+ }
+ else {
+ _buildingAllowed = false;
+ _dt = ["Upgrade Disallowed: Frequency Blocked", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+};
+if !(_buildingAllowed)exitWith{ false };
+
+if (_this isKindOf "Constructions_static_F") then {
+
+ // take upgrade item from player here
+ _config = 'CfgBaseBuilding' call EPOCH_returnConfig;
+ _upgrade = getArray(_config >> (typeOf _this) >> "upgradeBuilding");
+ if !(_upgrade isEqualTo []) then {
+
+ _upgradeParts = _upgrade select 1;
+
+ _canUpgrade = true;
+ _canUpgradePartCount = 0;
+ _missingParts = [];
+ {
+ _part = _x select 0;
+ _req = _x select 1;
+ _partCheck = {_x == _part} count (magazines player);
+ //diag_log format["DEBUG: _partCheck %1", _partCheck];
+ //diag_log format["DEBUG: _x %1", _x];
+ if (_partCheck < _req) then {
+ _missingCount = _req - _partCheck;
+
+ //diag_log format["DEBUG: _missingCount %1", _missingCount];
+
+ _canUpgrade = false;
+ _missingParts pushBack format["Missing %1 %2", _missingCount, (_part call EPOCH_itemDisplayName)];
+ };
+ _canUpgradePartCount = _canUpgradePartCount + _req;
+ } forEach _upgradeParts;
+
+ _removedPartCount = 0;
+ if (_canUpgrade) then {
+ {
+ for "_i" from 1 to (_x select 1) do {
+ if ((_x select 0) in (magazines player)) then {
+ player removeMagazine (_x select 0);
+ _removedPartCount = _removedPartCount + 1;
+ };
+ };
+ } forEach _upgradeParts;
+
+ if (_canUpgradePartCount == _removedPartCount) then {
+ // send to server for upgrade
+ EPOCH_UPBUILD = [_this,player,Epoch_personalToken];
+ publicVariableServer "EPOCH_UPBUILD";
+ _return = true;
+ _dt = ["Upgraded", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ } else {
+ _dt = [format["%1", _missingParts], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+};
+_return
diff --git a/Sources/epoch_code/compile/building/EPOCH_upgradeBUILDv2.sqf b/Sources/epoch_code/compile/building/EPOCH_upgradeBUILDv2.sqf
new file mode 100644
index 00000000..24539ebb
--- /dev/null
+++ b/Sources/epoch_code/compile/building/EPOCH_upgradeBUILDv2.sqf
@@ -0,0 +1,125 @@
+if (isNull _this) exitWith{ false };
+_return = false;
+
+_buildingAllowed = true;
+_ownedJammerExists = false;
+_nearestJammer = objNull;
+_config = 'CfgEpochClient' call EPOCH_returnConfig;
+_buildingJammerRange = getNumber(_config >> "buildingJammerRange");
+_buildingCountLimit = getNumber(_config >> "buildingCountLimit");
+
+// defaults
+if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; };
+if (_buildingCountLimit == 0) then { _buildingCountLimit = 200; };
+
+EPOCH_buildOption = 1;
+
+_object = _this;
+
+// get index from UI
+_index = lbCurSel 1500;
+
+if (isNil "EPOCH_UpgradeIndex") then {
+ EPOCH_UpgradeIndex = 0;
+};
+if (_index != -1) then {
+ // close UI
+ closeDialog 0;
+ EPOCH_UpgradeIndex = _index;
+};
+
+// check if another player has target
+_targeter = _object getVariable["last_targeter", objNull];
+
+if (!isNull _targeter && _targeter != player && (player distance _object > _targeter distance _object)) exitWith{ EPOCH_stabilityTarget = objNull; false };
+
+_stability = _object getVariable["stability", 100];
+if (_stability > 0) exitWith{
+ if (isNull EPOCH_stabilityTarget) then {
+ _object setVariable["last_targeter", player, true];
+ EPOCH_stabilityTarget = _object;
+ };
+};
+
+
+
+
+
+_jammer = nearestObjects[player, ["PlotPole_EPOCH"], _buildingJammerRange];
+
+if !(_jammer isEqualTo[]) then {
+ {
+ if (alive _x) exitWith{
+ _nearestJammer = _x;
+ };
+ } foreach _jammer;
+
+ if !(isNull _nearestJammer) then {
+ if ((_nearestJammer getVariable["BUILD_OWNER", "-1"]) in[getPlayerUID player, Epoch_my_GroupUID]) then {
+ _ownedJammerExists = true;
+ }
+ else {
+ _buildingAllowed = false;
+ _dt = ["Upgrade Disallowed: Frequency Blocked", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+};
+if !(_buildingAllowed)exitWith{ false };
+
+if (_this isKindOf "Constructions_static_F") then {
+
+ // take upgrade item from player here
+ _config = 'CfgBaseBuilding' call EPOCH_returnConfig;
+
+ _upgrades = getArray(_config >> (typeOf _this) >> "upgradeBuilding");
+ if !(_upgrades isEqualTo []) then {
+
+ // get selected upgrade
+ _upgrade = _upgrades param [EPOCH_UpgradeIndex,[]];
+
+ _upgradeParts = _upgrade select 1;
+
+ _canUpgrade = true;
+ _canUpgradePartCount = 0;
+ _missingParts = "";
+ {
+ _part = _x select 0;
+ _req = _x select 1;
+ _partCheck = {_x == _part} count (magazines player);
+ //diag_log format["DEBUG: _partCheck %1", _partCheck];
+ //diag_log format["DEBUG: _x %1", _x];
+ if (_partCheck < _req) then {
+ _missingCount = _req - _partCheck;
+
+ //diag_log format["DEBUG: _missingCount %1", _missingCount];
+
+ _canUpgrade = false;
+ _missingParts = _missingParts + format["Missing %1 %2, ", _missingCount, (_part call EPOCH_itemDisplayName)];
+ };
+ _canUpgradePartCount = _canUpgradePartCount + _req;
+ } forEach _upgradeParts;
+
+ _removedPartCount = 0;
+ if (_canUpgrade) then {
+ {
+ for "_i" from 1 to (_x select 1) do {
+ if ((_x select 0) in (magazines player)) then {
+ player removeMagazine (_x select 0);
+ _removedPartCount = _removedPartCount + 1;
+ };
+ };
+ } forEach _upgradeParts;
+
+ if (_canUpgradePartCount == _removedPartCount) then {
+ // send to server for upgrade
+ EPOCH_UPBUILD = [_this,player,EPOCH_UpgradeIndex,Epoch_personalToken];
+ publicVariableServer "EPOCH_UPBUILD";
+ _return = true;
+ _dt = ["Upgraded", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ } else {
+ _dt = [format["%1", _missingParts], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+};
+_return
diff --git a/Sources/epoch_code/compile/building/staticMoveV2.sqf b/Sources/epoch_code/compile/building/staticMoveV2.sqf
new file mode 100644
index 00000000..4528f396
--- /dev/null
+++ b/Sources/epoch_code/compile/building/staticMoveV2.sqf
@@ -0,0 +1,137 @@
+EPOCH_buildClasses = ["Land_Obstacle_Bridge_F",
+
+"Land_Shoot_House_Wall_F",
+"Land_Shoot_House_Wall_Stand_F",
+"Land_Shoot_House_Wall_Crouch_F",
+"Land_Shoot_House_Wall_Prone_F",
+"Land_Shoot_House_Wall_Long_F",
+"Land_Shoot_House_Wall_Long_Stand_F",
+"Land_Shoot_House_Wall_Long_Crouch_F",
+"Land_Shoot_House_Wall_Long_Prone_F",
+"Land_Shoot_House_Corner_F",
+"Land_Shoot_House_Corner_Stand_F",
+"Land_Shoot_House_Corner_Crouch_F",
+"Land_Shoot_House_Corner_Prone_F",
+"Land_Shoot_House_Panels_F",
+"Land_Shoot_House_Panels_Crouch_F",
+"Land_Shoot_House_Panels_Prone_F",
+"Land_Shoot_House_Panels_Vault_F",
+"Land_Shoot_House_Panels_Window_F",
+"Land_Shoot_House_Panels_Windows_F",
+"Land_Shoot_House_Tunnel_F",
+"Land_Shoot_House_Tunnel_Stand_F",
+"Land_Shoot_House_Tunnel_Crouch_F",
+"Land_Shoot_House_Tunnel_Prone_F",
+
+
+"Land_Obstacle_RunAround_F","Land_Obstacle_Saddle_F","Land_RampConcrete_F","Land_RampConcreteHigh_F","Land_GH_Stairs_F","Land_Billboard_F","Land_HBarrier_1_F","Land_HBarrier_3_F","Land_HBarrier_5_F","Land_Razorwire_F","Land_HBarrierWall6_F","WoodFloor_EPOCH","WoodLargeWall_EPOCH","Land_BagFence_Long_F","Land_BagFence_Corner_F","Land_BagFence_End_F","Land_BagFence_Round_F","Land_BagFence_Short_F"];
+EPOCH_buildClassesCount = count EPOCH_buildClasses - 1;
+Epoch_selectedBuildClasIndex = 0;
+EPOCH_selectedBuildClass = EPOCH_buildClasses select 0;
+
+EPOCH_buildWorldspace = [[0,0,0],[0,0,0],[0,0,0]];
+EPOCH_KeyDownFunctionhandler = {
+ _dikCode = _this select 1;
+ _shift = _this select 2;
+ _ctrl = _this select 3;
+ _alt = _this select 4;
+
+ switch (_dikCode) do {
+ case 0x39 : {
+ _worldspace = EPOCH_buildWorldspace;
+ _newObj = EPOCH_selectedBuildClass createVehicle (_worldspace select 0);
+ _newObj setVectorDirAndUp [_worldspace select 1,_worldspace select 2];
+ _newObj setposASL (_worldspace select 0);
+ _handled = true;
+ };
+ case 0xC9 : {
+ Epoch_selectedBuildClasIndex = ((Epoch_selectedBuildClasIndex + 1) min EPOCH_buildClassesCount) max 0;
+ EPOCH_selectedBuildClass = EPOCH_buildClasses select Epoch_selectedBuildClasIndex;
+
+ if !(isNull EPOCH_currentBuildObj) then {
+ deleteVehicle EPOCH_currentBuildObj;
+ EPOCH_currentBuildObj = EPOCH_selectedBuildClass createVehicle [0,0,0];
+ EPOCH_currentBuildObj disableCollisionWith player;
+ EPOCH_currentBuildObj setObjectTextureGlobal [0, "#(rgb,8,8,3)color(0,0,1,1)"];
+ };
+
+ hint EPOCH_selectedBuildClass;
+ _handled = true;
+ };
+ case 0xD1 : {
+ Epoch_selectedBuildClasIndex = ((Epoch_selectedBuildClasIndex - 1) min EPOCH_buildClassesCount) max 0;
+ EPOCH_selectedBuildClass = EPOCH_buildClasses select Epoch_selectedBuildClasIndex;
+ hint EPOCH_selectedBuildClass;
+
+ if !(isNull EPOCH_currentBuildObj) then {
+ deleteVehicle EPOCH_currentBuildObj;
+ EPOCH_currentBuildObj = EPOCH_selectedBuildClass createVehicle [0,0,0];
+ EPOCH_currentBuildObj disableCollisionWith player;
+ EPOCH_currentBuildObj setObjectTextureGlobal [0, "#(rgb,8,8,3)color(0,0,1,1)"];
+ };
+
+ _handled = true;
+ };
+ };
+ _handled
+};
+
+
+[] spawn {
+ (findDisplay 46) displayRemoveAllEventHandlers "KeyDown";
+ (findDisplay 46) displayAddEventHandler["KeyDown",{_this call EPOCH_KeyDownFunctionhandler}];
+};
+
+EPOCH_currentBuildObj = EPOCH_selectedBuildClass createVehicle [0,0,0];
+EPOCH_currentBuildObj disableCollisionWith player;
+EPOCH_currentBuildObj setObjectTextureGlobal [0, "#(rgb,8,8,3)color(0,0,1,1)"];
+
+onEachFrame {
+ _ins = lineIntersectsSurfaces [AGLToASL positionCameraToWorld [0,0,0],AGLToASL positionCameraToWorld [0,0,10],player,EPOCH_currentBuildObj];
+ if (count _ins == 0) exitWith {EPOCH_currentBuildObj setPosASL [0,0,0]};
+
+ _intersectObj = (_ins select 0 select 2);
+ if (isNull _intersectObj) then {_intersectObj = player};
+ EPOCH_currentBuildObj setVectorDirAndUp [vectordir _intersectObj,(_ins select 0 select 1)];
+ EPOCH_currentBuildObj setPosASL (_ins select 0 select 0);
+ EPOCH_buildWorldspace = [(_ins select 0 select 0),vectordir _intersectObj,(_ins select 0 select 1)];
+
+ _currentPos = (_ins select 0 select 0);
+ _numberOfContacts = 0;
+
+ _currentDir = direction EPOCH_currentBuildObj;
+
+ _bbr = boundingBoxReal EPOCH_currentBuildObj;
+ _p1 = _bbr select 0;
+ _p2 = _bbr select 1;
+ _maxWidth = abs ((_p2 select 0) - (_p1 select 0)) / 2;
+ _maxLength = abs ((_p2 select 1) - (_p1 select 1)) / 2;
+ _maxHeight = abs ((_p2 select 2) - (_p1 select 2)) / 2;
+
+ {
+ _pos1 = EPOCH_currentBuildObj modelToWorld [0,0,_maxHeight];
+ _pos2 = EPOCH_currentBuildObj modelToWorld _x;
+ _ins = lineIntersectsSurfaces [AGLToASL _pos1,AGLToASL _pos2,player,EPOCH_currentBuildObj];
+ _color = [0,0,1,1];
+
+ if (count _ins == 0) then {
+
+
+ _color = [0,0,1,1];
+ drawIcon3D ["a3\modules_f\data\iconunlock_ca.paa", [1,1,1,1], _pos2, 1, 1, 45, "", 1, 0.05, "TahomaB"];
+
+
+ } else {
+ _numberOfContacts = _numberOfContacts + 1;
+ drawIcon3D ["a3\modules_f\data\iconlock_ca.paa", [1,1,1,1], ASLToATL (_ins select 0 select 0), 1, 1, 45, "Snap", 1, 0.05, "TahomaB"];
+ _color = [1,0,0,1];
+ };
+
+ drawLine3D [
+ _pos1,
+ _pos2,
+ _color
+ ];
+
+ } forEach[[_maxWidth,0,_maxHeight], [0,_maxLength,_maxHeight], [-_maxWidth,0,_maxHeight], [0,-_maxLength,_maxHeight], [0,0,-_maxHeight]];
+};
diff --git a/Sources/epoch_code/compile/building/test.sqf b/Sources/epoch_code/compile/building/test.sqf
new file mode 100644
index 00000000..ed986674
--- /dev/null
+++ b/Sources/epoch_code/compile/building/test.sqf
@@ -0,0 +1,180 @@
+EPOCH_buildClasses = ["Land_Obstacle_Bridge_F",
+
+"Land_Shoot_House_Wall_F",
+"Land_Shoot_House_Wall_Stand_F",
+"Land_Shoot_House_Wall_Crouch_F",
+"Land_Shoot_House_Wall_Prone_F",
+"Land_Shoot_House_Wall_Long_F",
+"Land_Shoot_House_Wall_Long_Stand_F",
+"Land_Shoot_House_Wall_Long_Crouch_F",
+"Land_Shoot_House_Wall_Long_Prone_F",
+"Land_Shoot_House_Corner_F",
+"Land_Shoot_House_Corner_Stand_F",
+"Land_Shoot_House_Corner_Crouch_F",
+"Land_Shoot_House_Corner_Prone_F",
+"Land_Shoot_House_Panels_F",
+"Land_Shoot_House_Panels_Crouch_F",
+"Land_Shoot_House_Panels_Prone_F",
+"Land_Shoot_House_Panels_Vault_F",
+"Land_Shoot_House_Panels_Window_F",
+"Land_Shoot_House_Panels_Windows_F",
+"Land_Shoot_House_Tunnel_F",
+"Land_Shoot_House_Tunnel_Stand_F",
+"Land_Shoot_House_Tunnel_Crouch_F",
+"Land_Shoot_House_Tunnel_Prone_F",
+
+
+"Land_Obstacle_RunAround_F","Land_Obstacle_Saddle_F","Land_RampConcrete_F","Land_RampConcreteHigh_F","Land_GH_Stairs_F","Land_Billboard_F","Land_HBarrier_1_F","Land_HBarrier_3_F","Land_HBarrier_5_F","Land_Razorwire_F","Land_HBarrierWall6_F","WoodFloor_EPOCH","WoodLargeWall_EPOCH","Land_BagFence_Long_F","Land_BagFence_Corner_F","Land_BagFence_End_F","Land_BagFence_Round_F","Land_BagFence_Short_F"];
+EPOCH_buildClassesCount = count EPOCH_buildClasses - 1;
+Epoch_selectedBuildClasIndex = 0;
+EPOCH_selectedBuildClass = EPOCH_buildClasses select 0;
+
+EPOCH_snapExtents = [];
+
+EPOCH_buildWorldspace = [[0,0,0],[0,0,0],[0,0,0]];
+EPOCH_KeyDownFunctionhandler = {
+ _dikCode = _this select 1;
+ _shift = _this select 2;
+ _ctrl = _this select 3;
+ _alt = _this select 4;
+
+ switch (_dikCode) do {
+ case 0x39 : {
+ _worldspace = EPOCH_buildWorldspace;
+ _newObj = EPOCH_selectedBuildClass createVehicle (_worldspace select 0);
+ _newObj setVectorDirAndUp [_worldspace select 1,_worldspace select 2];
+ _newObj setposASL (_worldspace select 0);
+ _handled = true;
+ };
+ case 0xC9 : {
+ Epoch_selectedBuildClasIndex = ((Epoch_selectedBuildClasIndex + 1) min EPOCH_buildClassesCount) max 0;
+ EPOCH_selectedBuildClass = EPOCH_buildClasses select Epoch_selectedBuildClasIndex;
+
+ if !(isNull EPOCH_currentBuildObj) then {
+ deleteVehicle EPOCH_currentBuildObj;
+ EPOCH_currentBuildObj = EPOCH_selectedBuildClass createVehicle [0,0,0];
+ EPOCH_currentBuildObj disableCollisionWith player;
+ EPOCH_currentBuildObj setObjectTextureGlobal [0, "#(rgb,8,8,3)color(0,0,1,1)"];
+ };
+
+ hint EPOCH_selectedBuildClass;
+ _handled = true;
+ };
+ case 0xD1 : {
+ Epoch_selectedBuildClasIndex = ((Epoch_selectedBuildClasIndex - 1) min EPOCH_buildClassesCount) max 0;
+ EPOCH_selectedBuildClass = EPOCH_buildClasses select Epoch_selectedBuildClasIndex;
+ hint EPOCH_selectedBuildClass;
+
+ if !(isNull EPOCH_currentBuildObj) then {
+ deleteVehicle EPOCH_currentBuildObj;
+ EPOCH_currentBuildObj = EPOCH_selectedBuildClass createVehicle [0,0,0];
+ EPOCH_currentBuildObj disableCollisionWith player;
+ EPOCH_currentBuildObj setObjectTextureGlobal [0, "#(rgb,8,8,3)color(0,0,1,1)"];
+ };
+
+ _handled = true;
+ };
+ };
+ _handled
+};
+
+
+[] spawn {
+ (findDisplay 46) displayRemoveAllEventHandlers "KeyDown";
+ (findDisplay 46) displayAddEventHandler["KeyDown",{_this call EPOCH_KeyDownFunctionhandler}];
+};
+
+
+
+
+EPOCH_snapExtents = [];
+_playerPos = player modelToWorld [0,5,5];
+EPOCH_currentBuildObj = EPOCH_selectedBuildClass createVehicle _playerPos;
+EPOCH_currentBuildObj setPosATL _playerPos;
+EPOCH_currentBuildObj disableCollisionWith player;
+_numberOfContacts = 0;
+for "_i" from 0 to 10 do {
+};
+_pos1 = EPOCH_currentBuildObj modelToWorld [0,0,10];
+_pos2 = EPOCH_currentBuildObj modelToWorld [0,0,0];
+_ins = lineIntersectsSurfaces [AGLToASL _pos1,AGLToASL _pos2,player];
+if (count _ins == 0) then {
+} else {
+ _pos3 = (_ins select 0 select 0);
+ if !(surfaceIsWater _pos3) then {_pos3 = ASLtoATL _pos3};
+ _offset = EPOCH_currentBuildObj worldToModelVisual _pos3;
+ EPOCH_snapExtents pushBack _offset;
+ _numberOfContacts = _numberOfContacts + 1;
+
+ _fullHeight = _offset select 0;
+ _halfHeight = _fullHeight/2;
+
+
+
+ _pos1 = EPOCH_currentBuildObj modelToWorld [0,10,_halfHeight];
+ _pos2 = EPOCH_currentBuildObj modelToWorld [0,0,_halfHeight];
+ _ins = lineIntersectsSurfaces [AGLToASL _pos1,AGLToASL _pos2,player];
+ if (count _ins == 0) then {
+ } else {
+ _pos3 = (_ins select 0 select 0);
+ if !(surfaceIsWater _pos3) then {_pos3 = ASLtoATL _pos3};
+ _offset = EPOCH_currentBuildObj worldToModelVisual _pos3;
+ EPOCH_snapExtents pushBack _offset;
+ _numberOfContacts = _numberOfContacts + 1;
+ };
+
+ _pos1 = EPOCH_currentBuildObj modelToWorld [0,-10,_halfHeight];
+ _pos2 = EPOCH_currentBuildObj modelToWorld [0,0,_halfHeight];
+ _ins = lineIntersectsSurfaces [AGLToASL _pos1,AGLToASL _pos2,player];
+ if (count _ins == 0) then {
+ } else {
+ _pos3 = (_ins select 0 select 0);
+ if !(surfaceIsWater _pos3) then {_pos3 = ASLtoATL _pos3};
+ _offset = EPOCH_currentBuildObj worldToModelVisual _pos3;
+ EPOCH_snapExtents pushBack _offset;
+ _numberOfContacts = _numberOfContacts + 1;
+ };
+
+ _pos1 = EPOCH_currentBuildObj modelToWorld [10,0,_halfHeight];
+ _pos2 = EPOCH_currentBuildObj modelToWorld [0,0,_halfHeight];
+ _ins = lineIntersectsSurfaces [AGLToASL _pos1,AGLToASL _pos2,player];
+ if (count _ins == 0) then {
+ } else {
+ _pos3 = (_ins select 0 select 0);
+ if !(surfaceIsWater _pos3) then {_pos3 = ASLtoATL _pos3};
+ _offset = EPOCH_currentBuildObj worldToModelVisual _pos3;
+ EPOCH_snapExtents pushBack _offset;
+ _numberOfContacts = _numberOfContacts + 1;
+ };
+
+ _pos1 = EPOCH_currentBuildObj modelToWorld [-10,0,_halfHeight];
+ _pos2 = EPOCH_currentBuildObj modelToWorld [0,0,_halfHeight];
+ _ins = lineIntersectsSurfaces [AGLToASL _pos1,AGLToASL _pos2,player];
+ if (count _ins == 0) then {
+ } else {
+ _pos3 = (_ins select 0 select 0);
+ if !(surfaceIsWater _pos3) then {_pos3 = ASLtoATL _pos3};
+ _offset = EPOCH_currentBuildObj worldToModelVisual _pos3;
+ EPOCH_snapExtents pushBack _offset;
+ _numberOfContacts = _numberOfContacts + 1;
+ };
+
+
+ _pos1 = EPOCH_currentBuildObj modelToWorld [0,0,-4.5];
+ _pos2 = EPOCH_currentBuildObj modelToWorld [0,0,0];
+ _ins = lineIntersectsSurfaces [AGLToASL _pos1,AGLToASL _pos2,player];
+ if (count _ins == 0) then {
+ } else {
+ _pos3 = (_ins select 0 select 0);
+ if !(surfaceIsWater _pos3) then {_pos3 = ASLtoATL _pos3};
+ _offset = EPOCH_currentBuildObj worldToModelVisual _pos3;
+ EPOCH_snapExtents pushBack _offset;
+ _numberOfContacts = _numberOfContacts + 1;
+ };
+
+};
+onEachFrame {
+ {
+ drawIcon3D ["a3\modules_f\data\iconlock_ca.paa", [1,1,1,1], EPOCH_currentBuildObj modelToWorld _x, 1, 1, 45, "Snap", 1, 0.05, "TahomaB"];
+ } forEach EPOCH_snapExtents;
+};
diff --git a/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf b/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf
new file mode 100644
index 00000000..256b344c
--- /dev/null
+++ b/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf
@@ -0,0 +1,126 @@
+if !(isNull _this && alive _this) then {
+
+ _distance = 5;
+ _toxicChance = 0.1;
+ _bleedChance = 1;
+ _bloodpChance = 0;
+ _fatigueChance = 0.1;
+
+ _bleedAmount = 30;
+ _bloodpAmount = 2;
+
+ _soundEffect = -1;
+ _soundEffectGlobal = false;
+ _canSee = false;
+ _ppEffect = 0;
+
+ switch (typeOf _this) do {
+ case "Snake_random_EPOCH": {
+ _distance = 3;
+ _toxicChance = 0.2;
+ _bloodpChance = 1;
+ _fatigueChance = 0.5;
+ _bleedAmount = 30;
+ _bloodpAmount = 3;
+ _soundEffect = "snake_bite0";
+ _canSee = true;
+ _ppEffect = 0;
+ };
+ case "Snake2_random_EPOCH": {
+ _distance = 3;
+ _toxicChance = 0.1;
+ _bloodpChance = 1;
+ _fatigueChance = 0.5;
+ _bleedAmount = 30;
+ _bloodpAmount = 3;
+ _soundEffect = "snake_bite0";
+ _canSee = true;
+ _ppEffect = 0;
+ };
+ case "GreatWhite_F": {
+ _distance = 6;
+ _toxicChance = 0;
+ _bleedChance = 1;
+ _bloodpChance = 1;
+ _fatigueChance = 1;
+ _bleedAmount = 100;
+ _bloodpAmount = 3;
+ _canSee = true;
+ _ppEffect = 0;
+ };
+ case "SmokeShellCustom": {
+ _distance = 6;
+ _toxicChance = 1;
+ _bleedChance = 0;
+ _bloodpChance = 1;
+ _fatigueChance = 1;
+ _bleedAmount = 0;
+ _bloodpAmount = 3;
+ _canSee = true;
+ _ppEffect = 0;
+ };
+ case "Epoch_Cloak_F": {
+ _distance = 30;
+ _toxicChance = 0;
+ _bloodpChance = 0.9;
+ _fatigueChance = 0.5;
+ _bleedAmount = 66;
+ _bloodpAmount = 3;
+ _soundEffect = "cultist_nearby";
+ _canSee = !(lineIntersects[eyePos _this, aimPos player, _this, player]);
+ _ppEffect = 1;
+ };
+ };
+
+ if ((_this distance player) < _distance && _canSee) then {
+ _soundEffectIndex = EPOCH_sounds find _soundEffect;
+ if (_soundEffectIndex != -1) then {
+ _this say3D _soundEffect;
+ if (_soundEffectGlobal) then {
+ EPOCH_say3D_PVS = [player, _this, _soundEffectIndex, Epoch_personalToken];
+ publicVariableServer "EPOCH_say3D_PVS";
+ };
+ };
+ if (random 1 < _toxicChance) then {
+ EPOCH_playerToxicity = (EPOCH_playerToxicity + (random(100 - EPOCH_playerImmunity))) min 100;
+ };
+ if (random 1 < _bleedChance) then {
+ player setBleedingRemaining((getBleedingRemaining player) + _bleedAmount);
+ };
+ if (random 1 < _bloodpChance) then {
+ EPOCH_playerBloodP = (EPOCH_playerBloodP + (_bloodpAmount + (EPOCH_playerBloodP - 100))) min 190;
+ if (_ppEffect == 1) then {
+ [] spawn{
+ _ppGrain = ppEffectCreate["filmGrain", 2005];
+ _ppChrom = ppEffectCreate["chromAberration", 2006];
+ _ppColor = ppEffectCreate["colorCorrections", 2007];
+ _ppBlur = ppEffectCreate["radialBlur", 2008];
+ _ppColor ppEffectAdjust[1, 1, 0, [1.5, -1, -1.5, 0.5], [5, 3.5, -5, -0.5], [-3, 5, -5, -0.5]];
+ _ppColor ppEffectCommit 5;
+ _ppChrom ppEffectAdjust[0.01, 0.01, true];
+ _ppChrom ppEffectCommit 5;
+ _ppBlur ppEffectAdjust[0.02, 0.02, 0.15, 0.15];
+ _ppBlur ppEffectCommit 5;
+ _ppGrain ppEffectAdjust[0.1, -1, 0.05, 0.05, 2, false];
+ _ppGrain ppEffectCommit 1;
+ _ppGrain ppEffectEnable true;
+ _ppChrom ppEffectEnable true;
+ _ppColor ppEffectEnable true;
+ _ppBlur ppEffectEnable true;
+ uiSleep 2;
+ _ppColor ppEffectAdjust[1, 1, -0.01, [0.0, 0.0, 0.0, 0.0], [1.5, 1, 1.2, 0.6], [0.199, 0.587, 0.114, 0.20]];
+ _ppColor ppEffectCommit 5;
+ _ppChrom ppEffectAdjust[0, 0, true];
+ _ppChrom ppEffectCommit 5;
+ _ppBlur ppEffectAdjust[0, 0, 0, 0];
+ _ppBlur ppEffectCommit 5;
+ uiSleep 5;
+ ppEffectDestroy[_ppGrain, _ppChrom, _ppColor, _ppBlur];
+ };
+ };
+ };
+ if (random 1 < _fatigueChance) then {
+ player setFatigue 1;
+ };
+ };
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/environment/EPOCH_client_earthQuake.sqf b/Sources/epoch_code/compile/environment/EPOCH_client_earthQuake.sqf
new file mode 100644
index 00000000..8cf594c8
--- /dev/null
+++ b/Sources/epoch_code/compile/environment/EPOCH_client_earthQuake.sqf
@@ -0,0 +1,15 @@
+_epicenter = _this;
+_distance = player distance _epicenter;
+_intensity = 1;
+if (_distance < 250) then {
+ _intensity = 4;
+} else {
+ if (_distance < 500) then {
+ _intensity = 3;
+ } else {
+ if (_distance < 750) then {
+ _intensity = 2;
+ };
+ };
+};
+_intensity spawn BIS_fnc_earthQuake;
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/environment/EPOCH_client_loadAnimalBrain.sqf b/Sources/epoch_code/compile/environment/EPOCH_client_loadAnimalBrain.sqf
new file mode 100644
index 00000000..6cde01fe
--- /dev/null
+++ b/Sources/epoch_code/compile/environment/EPOCH_client_loadAnimalBrain.sqf
@@ -0,0 +1,42 @@
+private["_fightOrFlight", "_id", "_animal", "_tryAnimalPos", "_animalPos", "_randomIndex", "_randomAIClass", "_aiTables", "_plyrPos"];
+
+if (count(player nearEntities["Animal_Base_F", 200]) >= 1) exitWith{};
+
+_animalAiTables = ["Sheep_random_EPOCH", "Sheep_random_EPOCH", "Goat_random_EPOCH", "Goat_random_EPOCH", "Goat_random_EPOCH", ["Cock_random_EPOCH", "Hen_random_EPOCH"], ["Cock_random_EPOCH", "Hen_random_EPOCH"], "Rabbit_EPOCH", "Rabbit_EPOCH", "Rabbit_EPOCH", "Snake_random_EPOCH", "Snake2_random_EPOCH", ["Fin_random_EPOCH", "Alsatian_Random_EPOCH"]];
+_randomIndex = floor(random(count _animalAiTables));
+_randomAIClass = _animalAiTables select _randomIndex;
+_animalPos = nil;
+_plyrPos = position player;
+
+if (typeName _randomAIClass == "ARRAY") then {
+ _randomIndex = floor(random(count _randomAIClass));
+ _randomAIClass = _randomAIClass select _randomIndex;
+};
+
+for "_i" from 1 to 3 step 1 do {
+ _tryAnimalPos = [_plyrPos, floor(random 350) + 50, floor(random 360)] call BIS_fnc_relPos;
+ if!(surfaceIsWater _tryAnimalPos) exitWith {
+ _animalPos = _tryAnimalPos;
+ };
+};
+
+if!(isNil "_animalPos") then {
+ // diag_log format["DEBUG: Spawning animal at %1.",_animalPos];
+ _animal = createAgent[_randomAIClass, _animalPos, [], 5, "NONE"];
+ _animal setVariable["BIS_fnc_animalBehaviour_disable", true];
+
+ // diag_log format["DEBUG: spawned %1", _randomAIClass];
+
+ EPOCH_TEMPOBJ_PVS = _animal;
+ publicVariableServer "EPOCH_TEMPOBJ_PVS";
+
+ {
+ _animal disableAI _x;
+ }forEach ["TARGET","AUTOTARGET","FSM"];
+
+ if (_randomAIClass in ["Fin_random_EPOCH", "Alsatian_Random_EPOCH"]) then {
+ _id = [_animal] execFSM "\x\addons\a3_epoch_code\System\Dog_Brain.fsm";
+ }else{
+ _id = [_animal, _randomAIClass in ["Snake_random_EPOCH","Snake2_random_EPOCH"]] execFSM "\x\addons\a3_epoch_code\System\Animal_brain.fsm";
+ };
+};
diff --git a/Sources/epoch_code/compile/functions/EPOCH_fn_returnConfigEntryV2.sqf b/Sources/epoch_code/compile/functions/EPOCH_fn_returnConfigEntryV2.sqf
new file mode 100644
index 00000000..32fd4175
--- /dev/null
+++ b/Sources/epoch_code/compile/functions/EPOCH_fn_returnConfigEntryV2.sqf
@@ -0,0 +1,26 @@
+private["_defaultData", "_config", "_varData","_missionconfig","_finalconfig"];
+_defaultData = _this select 2;
+_config = (configfile >> (_this select 0));
+_missionconfig = (missionConfigFile >> (_this select 0));
+if (isClass _missionconfig) then{
+ if (configName(_missionconfig >> (_this select 1)) == (_this select 1)) then{
+ _config = _missionconfig;
+ };
+};
+if (isClass(_config)) then{
+ _finalconfig = _config >> (_this select 1);
+ if (configName(_finalconfig) == (_this select 1)) then{
+ _varData = switch (typeName _defaultData) do {
+ case "SCALAR": {getNumber _finalconfig};
+ case "BOOL": {(getNumber _finalconfig) == 1};
+ case "ARRAY": {getArray _finalconfig};
+ case "STRING": {getText _finalconfig};
+ default {_defaultData};
+ };
+ } else {
+ _varData = _defaultData;
+ };
+} else {
+ _varData = _defaultData;
+};
+_varData
diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_Weather.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_Weather.sqf
new file mode 100644
index 00000000..b34933c7
--- /dev/null
+++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_Weather.sqf
@@ -0,0 +1,64 @@
+private ["_warming","_isNearFire","_airTemp","_waterTemp","_playerPosATL"];
+_airTemp = EPOCH_CURRENT_WEATHER;
+_waterTemp = EPOCH_CURRENT_WEATHER/2;
+_warming = true;
+_wet = false;
+_maxTemp = 98.6;
+_increaseWet = 0;
+_wetsuit = (getText(configfile >> "cfgweapons" >> uniform player >> "itemInfo" >> "uniformType") == "Neopren");
+
+if (vehicle player == player) then {
+ _playerPosATL = getPosATL player;
+ if (surfaceIsWater _playerPosATL) then {
+ // do nothing if player is wearing a wetsuit
+ if (!_wetsuit) then {
+ if (_waterTemp <= 50) then {
+ _warming = false;
+ };
+ _wet = true;
+ _increaseWet = 10;
+ };
+ } else {
+ if (EPOCH_playerWet > 50 && _airTemp <= 32) then {
+ _isNearFire = {inflamed _x} count (nearestObjects [_playerPosATL, ["ALL"], 3]);
+ if (!(call EPOCH_fnc_isInsideBuilding) && _isNearFire == 0) then {
+ _warming = false;
+ };
+ };
+ if (rain >= 0.25) then {
+ if (!_wetsuit) then {
+ _isNearFire = { inflamed _x } count(nearestObjects[_playerPosATL, ["ALL"], 3]);
+ if (!(call EPOCH_fnc_isInsideBuilding) && _isNearFire == 0) then {
+ _wet = true;
+ _increaseWet = rain * 10;
+ };
+ };
+ };
+ };
+};
+
+if (EPOCH_playerToxicity > 0) then {
+ EPOCH_playerImmunity = (EPOCH_playerImmunity + 0.1) min 100;
+ EPOCH_playerToxicity = (EPOCH_playerToxicity - 0.1) max 0;
+ _maxTemp = 106.7 + 10;
+};
+
+if (_warming) then {
+ EPOCH_playerTemp = (EPOCH_playerTemp + 0.01) min _maxTemp;
+} else {
+ EPOCH_playerTemp = (EPOCH_playerTemp - 0.01) max (95.0 - 10);
+};
+
+if (_wet) then {
+ EPOCH_playerWet = (EPOCH_playerWet + _increaseWet) min 100;
+ if (EPOCH_playerWet > 50) then {
+ EPOCH_playerSoiled = (EPOCH_playerSoiled - 1) max 0;
+ };
+} else {
+ if (_warming) then {
+ EPOCH_playerWet = (EPOCH_playerWet - 1) max 0;
+ };
+};
+
+
+true
diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_dirToFuzzy.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_dirToFuzzy.sqf
new file mode 100644
index 00000000..d398a94b
--- /dev/null
+++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_dirToFuzzy.sqf
@@ -0,0 +1,19 @@
+private ["_pos1","_pos2","_ret"];
+
+_pos1 = _this select 0;
+_pos2 = _this select 1;
+_spread = 32;
+if(count _this > 2)then{
+_spread = _this select 2;
+};
+
+//if objects, not positions, were passed in, then get their positions
+if(typename _pos1 == "OBJECT") then {_pos1 = getpos _pos1};
+if(typename _pos2 == "OBJECT") then {_pos2 = getpos _pos2};
+
+//get compass heading from _pos1 to _pos2
+_ret = ((_pos2 select 0) - (_pos1 select 0)) atan2 ((_pos2 select 1) - (_pos1 select 1));
+_ret = _ret + ((random _spread) - (_spread / 2));
+if (_ret < 0) then {_ret = _ret + 360}; //remove negative value
+_ret = _ret % 360; //ensure return is 0-360
+_ret
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_findRandomPosBehind.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_findRandomPosBehind.sqf
new file mode 100644
index 00000000..75c9e5a0
--- /dev/null
+++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_findRandomPosBehind.sqf
@@ -0,0 +1,25 @@
+//Picks a random spot behind the player
+//usage: [200,50,60] call EPOCH_fnc_findRandomPosBehind
+//_maxIn - Maximum distance to choose point
+//_minIn - Minimum distance to choose point
+//_arcIn - Spread of arc in degrees behind player
+//_unitIn - Unit, player, vehicle etc.
+//_offset - offset initial angle, allows to pick position to the side with -90 or 90 (right or left)
+
+_maxIn = _this select 0;
+_minIn = _this select 1;
+_arcIn = _this select 2;
+_unitIn = _this select 3;
+_offset = 0;
+if ((count _this) > 4) then {
+ _offset = _this select 4;
+};
+
+_rnd = ((180 +_offset) - (_arcIn / 2)) + (random _arcIn);
+_pos = getPosATL _unitIn;
+_dist = ((random (_maxIn - _minIn)) + _minIn) max _minIn;
+_dir = (getDir _unitIn) - _rnd;
+if (_dir<0) then {_dir = _dir + 360};
+
+_outPos = [(_pos select 0) + (_dist*(sin _dir)), (_pos select 1) + (_dist*(cos _dir)), _pos select 2];
+_outPos
diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_findSafePos.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_findSafePos.sqf
new file mode 100644
index 00000000..dfad5d63
--- /dev/null
+++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_findSafePos.sqf
@@ -0,0 +1,37 @@
+//Currently only used to find random position
+//TODO: Expand upon to find spot on road || in field for unit spawn.
+//Usage: [centre, min distance, max distance, height, onRoad] call EPOCH_fnc_findSafePos;
+//centre - centre position (array)
+//min distance - minimum distance away from centre to choose a location
+//max distance - maximum distance away from centre to choose a location
+//height - is passed through
+//onRoad - (boolean) - will select a point on the nearest road (within 250m) from the randomly found position.
+//
+private["_MinDist","_MaxDist","_outHeight","_inPos","_rDist","_rDir","_outPos","_nrRoad","_nrRoads","_onRoad"];
+_inPos = _this select 0;
+_MinDist = _this select 1;
+_MaxDist = _this select 2;
+
+_outHeight = 0;
+if ((count _this) > 3) then {
+ _outHeight = _this select 3;
+};
+
+_onRoad = false;
+if ((count _this) > 4) then {
+ _onRoad = _this select 4;
+};
+
+
+_rDist = (random (_MaxDist - _MinDist))+_MinDist;
+_rDir = random 360;
+_outPos = [(_inPos select 0) + (sin _rDir) * _rDist, (_inPos select 1) + (cos _rDir) * _rDist, _outHeight];
+
+if (_onRoad) then {
+_nrRoads = _outPos nearRoads 250;
+ if (count _nrRoads > 0) then {
+ _nrRoad = _nrRoads select (floor(random (count _nrRoads)));
+ _outPos = getPosATL _nrRoad;
+ };
+};
+_outPos
diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_findSapperStalkLocation.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_findSapperStalkLocation.sqf
new file mode 100644
index 00000000..e4186aae
--- /dev/null
+++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_findSapperStalkLocation.sqf
@@ -0,0 +1,22 @@
+//Picks a random spot relative to the target with some randomness.
+//usage: [200,50,60] call EPOCH_fnc_findRandomPosBehind
+//_maxIn - Maximum distance to choose point
+//_minIn - Minimum distance to choose point
+//_arcIn - Spread of arc in degrees relative to _unitIn. Is randomised to add fuzziness to final location.
+//_unitIn - Unit, player, vehicle etc.
+//_offset - Offset initial angle, allows to pick position to the side of _unitIn with -90 or 90.
+//_trgtIn = Target to use for relative position from _unitIn. Allows to pick a position left of _trgtin for example.
+_maxIn = _this select 0;
+_minIn = _this select 1;
+_arcIn = _this select 2;
+_unitIn = _this select 3;
+_offset = _this select 4;
+_trgtIn = _this select 5;
+_dirTo = [position _unitIn, position _trgtIn] call BIS_fnc_dirTo;
+_rnd = _offset - (random _arcIn);
+_pos = getPosATL _trgtIn;
+_dist = ((random (_maxIn - _minIn)) + _minIn) max _minIn;
+_dir = _dirTo - _rnd;
+if (_dir<0) then {_dir = _dir + 360};
+_outPos = [(_pos select 0) + (_dist*(sin _dir)), (_pos select 1) + (_dist*(cos _dir)), _pos select 2];
+_outPos
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_isInsideBuilding.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_isInsideBuilding.sqf
new file mode 100644
index 00000000..36bfb4d0
--- /dev/null
+++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_isInsideBuilding.sqf
@@ -0,0 +1,5 @@
+private ["_playerPosASL","_abovePlayerPosASL"];
+_playerPosASL = visiblePositionASL player;
+_abovePlayerPosASL = [_playerPosASL select 0,_playerPosASL select 1,(_playerPosASL select 2) + 10];
+//Return:
+lineIntersects[_playerPosASL, _abovePlayerPosASL, player]
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeath.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeath.sqf
new file mode 100644
index 00000000..213354ff
--- /dev/null
+++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeath.sqf
@@ -0,0 +1,35 @@
+private["_unit", "_killer"];
+_unit = _this select 0;
+_killer = _this select 1;
+
+// test ejecting unit from vehicle if dead client side
+if (vehicle _unit != _unit) then {
+ _unit action["Eject", vehicle _unit];
+};
+
+EPOCH_deadPlayer_PVS = [player,_killer,toArray profileName,Epoch_personalToken];
+publicVariableServer "EPOCH_deadPlayer_PVS";
+
+// disable build mode
+EPOCH_buildMode = 0;
+EPOCH_snapDirection = 0;
+EPOCH_Target = objNull;
+
+if (Epoch_canBeRevived) then {
+ setPlayerRespawnTime 600;
+ createDialog "TapOut";
+} else {
+ setPlayerRespawnTime 15;
+ _dt = ["You can be just revived once per life!", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+};
+
+[] spawn{
+ while {!alive player} do {
+
+ if (playerRespawnTime <= 1) exitWith{ (findDisplay 46) closeDisplay 0; };
+ if (playerRespawnTime > 15 && !dialog) then {
+ createDialog "TapOut";
+ };
+ uiSleep 0.1;
+ };
+};
diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf
new file mode 100644
index 00000000..de3b475d
--- /dev/null
+++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf
@@ -0,0 +1,101 @@
+private ["_highestDMG","_currentHIT","_currentDMG","_attachments","_newDMG","_cursorTarget","_repaired","_unit","_weapon","_ammo","_projectile"];
+_unit = _this select 0;
+_weapon = _this select 1;
+_muzzle = _this select 2;
+_mode = _this select 3;
+_ammo = _this select 4;
+_magazine = _this select 5;
+_projectile = _this select 6;
+
+switch true do {
+ case (_ammo isKindOf "B_Test_45ACP_Ball"): {
+ // diag_log format["DEBUG AMMO: %1", _ammo];
+ if (!isNull cursorTarget) then {
+ _cursorTarget = cursorTarget;
+ _repaired = false;
+ if ((player distance _cursorTarget) <= 6) then {
+
+ _attachments = handgunItems player;
+ _heal = false;
+
+ if (_cursorTarget isKindOf "Man") then {
+ if ("Heal_EPOCH" in _attachments) then {
+ _heal = true;
+ };
+
+ if ("Defib_EPOCH" in _attachments) then {
+ if (!alive _cursorTarget) then {
+ EPOCH_revivePlayer_PVS = [_cursorTarget,player,Epoch_personalToken];
+ publicVariableServer "EPOCH_revivePlayer_PVS";
+ };
+ };
+ } else {
+ if ("Repair_EPOCH" in _attachments) then {
+ _heal = true;
+ };
+ };
+ if (_heal) then {
+ _highestDMG = 0;
+ _currentHIT = -1;
+ _currentDMG = 0;
+ {
+ _currentDMG = _x;
+ if (_currentDMG > _highestDMG) then{
+ _highestDMG = _currentDMG;
+ _currentHIT = _forEachIndex;
+ };
+ }forEach((getAllHitPointsDamage _cursorTarget) param[2,[]]);
+
+ if (_highestDMG > 0) then {
+
+ _newDMG = ((_highestDMG - 0.5) max 0);
+
+ if (local _cursorTarget) then {
+ [_cursorTarget,[_currentHIT,_newDMG]] call EPOCH_client_repairVehicle;
+ } else {
+ EPOCH_repairVehicle_PVS = [_cursorTarget,[_currentHIT,_newDMG],player,Epoch_personalToken];
+ publicVariableServer "EPOCH_repairVehicle_PVS";
+ };
+
+ //diag_log format["DEBUG HITPOINT REPAIRED: %1 %2 %3", _currentHIT, _newDMG, _attachments];
+ } else {
+ if ((damage _cursorTarget) > 0) then {
+ EPOCH_repairVehicle_PVS = [_cursorTarget,["ALL",0],player,Epoch_personalToken];
+ publicVariableServer "EPOCH_repairVehicle_PVS";
+ };
+ };
+ };
+ };
+ };
+ };
+
+ case (_ammo isKindOf "B_Hatchet"): {
+ _gesture = ["GestureSwing0", "GestureSwing1", "GestureSwing2"] select (floor(random 3));
+ player playActionNow _gesture;
+ call EPOCH_chopWood;
+ };
+
+ case (_ammo isKindOf "B_Swing" || _ammo isKindOf "B_Stick") : {
+ player playActionNow "SledgeSwing";
+ call EPOCH_mineRocks;
+ };
+
+ case (_ammo isKindOf "ChainSaw_Bullet"): {
+ call EPOCH_chopWood;
+ };
+
+ default {
+ _droneChance = 2;
+ if !(EPOCH_nearestLocations isEqualTo[]) then{
+ _droneChance = _droneChance * 2;
+ };
+ // reduce chance to spawn by 50% if weapon has silencer
+ if (((player weaponAccessories _muzzle) select 0) != "") then{
+ _droneChance = _droneChance / 2;
+ };
+ // 2% chance (+ 4% chance if in city) to spawn drone if shot fired (1% - 2% Half if using silencer)
+ if (random EPOCH_droneRndChance < _droneChance) then{
+ "I_UAV_01_F" call EPOCH_unitSpawnIncrease;
+ };
+ };
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_stringLeft.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_stringLeft.sqf
new file mode 100644
index 00000000..5855e66e
--- /dev/null
+++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_stringLeft.sqf
@@ -0,0 +1,14 @@
+private["_strIn","_strOut","_count","_return","_arrFull","_arrOut"];
+_arrOut = [];
+_strIn = _this select 0;
+if (count _this < 2)exitWith{"USAGE: [""String In"",] call EPOCH_fnc_stringLeft"};
+_count = _this select 1;
+if (typename _strIn != "STRING") then {_strIn = str(_this select 0)};
+_arrFull = toArray _strIn;
+{
+if (_forEachIndex < _count) then {
+_arrOut pushBack _x;
+};
+}forEach _arrFull;
+_return = toString _arrOut;
+_return
diff --git a/Sources/epoch_code/compile/functions/EPOCH_itemDisplayName.sqf b/Sources/epoch_code/compile/functions/EPOCH_itemDisplayName.sqf
new file mode 100644
index 00000000..19ae673b
--- /dev/null
+++ b/Sources/epoch_code/compile/functions/EPOCH_itemDisplayName.sqf
@@ -0,0 +1,17 @@
+
+private ["_item"];
+_item = _this;
+_return = "";
+
+if ([_item, "CfgVehicles"] call EPOCH_fnc_isAny) then {
+ _return = getText(configfile >> "CfgVehicles" >> _item >> "DisplayName");
+} else {
+ if ([_item, "CfgWeapons"] call EPOCH_fnc_isAny) then {
+ _return = getText(configfile >> "CfgWeapons" >> _item >> "DisplayName");
+ } else {
+ if ([_item, "CfgMagazines"] call EPOCH_fnc_isAny) then {
+ _return = getText(configfile >> "CfgMagazines" >> _item >> "DisplayName");
+ };
+ };
+};
+_return;
diff --git a/Sources/epoch_code/compile/functions/EPOCH_itemPicture.sqf b/Sources/epoch_code/compile/functions/EPOCH_itemPicture.sqf
new file mode 100644
index 00000000..b4f22ea3
--- /dev/null
+++ b/Sources/epoch_code/compile/functions/EPOCH_itemPicture.sqf
@@ -0,0 +1,16 @@
+private ["_item"];
+_item = _this;
+_return = "";
+
+if ([_item, "CfgVehicles"] call EPOCH_fnc_isAny) then {
+ _return = getText(configfile >> "CfgVehicles" >> _item >> "picture");
+} else {
+ if ([_item, "CfgWeapons"] call EPOCH_fnc_isAny) then {
+ _return = getText(configfile >> "CfgWeapons" >> _item >> "picture");
+ } else {
+ if ([_item, "CfgMagazines"] call EPOCH_fnc_isAny) then {
+ _return = getText(configfile >> "CfgMagazines" >> _item >> "picture");
+ };
+ };
+};
+_return
diff --git a/Sources/epoch_code/compile/functions/EPOCH_pushCustomVar.sqf b/Sources/epoch_code/compile/functions/EPOCH_pushCustomVar.sqf
new file mode 100644
index 00000000..dddcec13
--- /dev/null
+++ b/Sources/epoch_code/compile/functions/EPOCH_pushCustomVar.sqf
@@ -0,0 +1,32 @@
+private ["_tempVars","_tempVal","_tempIndex","_time"];
+_time = if (_this) then [{15},{80}];
+
+_EPOCH_lastSave = missionNamespace getVariable["EPOCH_lastSave", diag_tickTime];
+
+if ((diag_tickTime - _EPOCH_lastSave) >= _time) then {
+
+ missionNamespace setVariable["EPOCH_lastSave", diag_tickTime];
+
+ missionNamespace setVariable ["EPOCH_pushPlayer_PVS",
+ [ player,
+ [
+ missionNamespace getVariable "EPOCH_playerTemp",
+ missionNamespace getVariable "EPOCH_playerHunger",
+ missionNamespace getVariable "EPOCH_playerThirst",
+ missionNamespace getVariable "EPOCH_playerAliveTime",
+ missionNamespace getVariable "EPOCH_playerEnergy",
+ missionNamespace getVariable "EPOCH_playerWet",
+ missionNamespace getVariable "EPOCH_playerSoiled",
+ missionNamespace getVariable "EPOCH_playerImmunity",
+ missionNamespace getVariable "EPOCH_playerToxicity",
+ missionNamespace getVariable "EPOCH_playerStamina",
+ missionNamespace getVariable "EPOCH_playerCrypto",
+ ((getAllHitPointsDamage player) param [2,[]]),
+ missionNamespace getVariable "EPOCH_playerBloodP",
+ missionNamespace getVariable "EPOCH_playerSpawnArray"
+ ],
+ missionNamespace getVariable "Epoch_personalToken"
+ ]
+ ];
+ publicVariableServer "EPOCH_pushPlayer_PVS";
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/functions/EPOCH_returnConfig.sqf b/Sources/epoch_code/compile/functions/EPOCH_returnConfig.sqf
new file mode 100644
index 00000000..a1d8d31b
--- /dev/null
+++ b/Sources/epoch_code/compile/functions/EPOCH_returnConfig.sqf
@@ -0,0 +1,7 @@
+private["_return", "_config"];
+_return = (configfile >> _this);
+_config = (missionConfigFile >> _this);
+if (isClass _config) then{
+ _return = _config;
+};
+_return
diff --git a/Sources/epoch_code/compile/functions/Epoch_SortArrayByDistance.sqf b/Sources/epoch_code/compile/functions/Epoch_SortArrayByDistance.sqf
new file mode 100644
index 00000000..11be6f22
--- /dev/null
+++ b/Sources/epoch_code/compile/functions/Epoch_SortArrayByDistance.sqf
@@ -0,0 +1,20 @@
+private ["_sorted","_closest","_unsorted","_pos","_testPos","_closestPos"];
+_sorted = [];
+_closest = [];
+_unsorted = _this select 0;
+_pos = _this select 1;
+if (typename _pos == "OBJECT") then {_pos = getpos _pos;};
+_sorted = [];
+_testPos = [0,0,0];
+_closestPos = [0,0,0];
+{
+ _closest = _unsorted select count _unsorted -1;
+ {
+ if (typename _x == "OBJECT") then {_testPos = position _x}else{_testPos = _x};
+ if (typename _closest == "OBJECT") then {_closestPos = position _closest}else{_closestPos = _closest};
+ if ((_testPos distance _pos) < (_closestPos distance _pos)) then {_closest = _x};
+ } forEach _unsorted;
+ _sorted pushBack _closest;
+ _unsorted = _unsorted - [_closest];
+} forEach _unsorted;
+_sorted
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/interface_event_handlers/EPOCH_Interface_interact.sqf b/Sources/epoch_code/compile/interface_event_handlers/EPOCH_Interface_interact.sqf
new file mode 100644
index 00000000..9811089a
--- /dev/null
+++ b/Sources/epoch_code/compile/interface_event_handlers/EPOCH_Interface_interact.sqf
@@ -0,0 +1,75 @@
+disableSerialization;
+// diag_log format["DEBUG INTERACT: %1", _this];
+
+_control = _this select 0;
+_prevIndex = _this select 1;
+
+_selected = (_control lbValue _prevIndex);
+_data = (_control lbData _prevIndex);
+
+// diag_log format["DEBUG INTERACT SELECTED: %1 DATA: %2", _selected, _data];
+
+lbClear 1700;
+
+
+_selectedInteractID = format["%1_%2",_data,_selected];
+
+if (_data == "Shop") exitWith {
+ _shopArray = getArray (configFile >> "CfgInteract" >> _selectedInteractID >> "shop");
+ _dt = [format["START SHOP DIALOG: %1", _shopArray], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ closeDialog 0;
+};
+
+
+if (_data == "Mission") exitWith {
+ _missionArray = getArray (configFile >> "CfgInteract" >> _selectedInteractID >> "mission");
+ _dt = [format["START MISSION DIALOG: %1", _missionArray], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ closeDialog 0;
+};
+
+_responseArray = getArray (configFile >> "CfgInteract" >> _selectedInteractID >> "responseNPC");
+
+if !(_responseArray isEqualTo []) then {
+ _response = (_responseArray select floor(random(count _responseArray)));
+ if (_response != "") then {
+ _dt = [format["%1", _response], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+};
+
+// diag_log format["DEBUG INTERACT _interactID: %1", _selectedInteractID];
+
+
+_dataArray = getArray (configFile >> "CfgInteract" >> _selectedInteractID >> "interactMenu");
+{
+ _interactSecondID = format["Interact_%1", _x];
+ _interactName = getText (configFile >> "CfgInteract" >> _interactSecondID >> "interactName");
+ _index = lbAdd[1700,_interactName];
+
+
+ lbSetValue [1700, _index, _x];
+ lbSetData [1700, _index,"Interact"];
+}forEach _dataArray;
+
+
+
+_dataArray = getArray (configFile >> "CfgInteract" >> _selectedInteractID >> "missionMenu");
+{
+ _interactSecondID = format["Mission_%1", _x];
+ _interactName = getText (configFile >> "CfgInteract" >> _interactSecondID >> "interactName");
+ _index = lbAdd[1700,_interactName];
+
+ lbSetValue [1700, _index, _x];
+ lbSetData [1700, _index,"Mission"];
+}forEach _dataArray;
+
+
+
+_dataArray = getArray (configFile >> "CfgInteract" >> _selectedInteractID >> "shopMenu");
+{
+ _interactSecondID = format["Shop_%1", _x];
+ _interactName = getText (configFile >> "CfgInteract" >> _interactSecondID >> "interactName");
+ _index = lbAdd[1700,_interactName];
+
+ lbSetValue [1700, _index, _x];
+ lbSetData [1700, _index,"Shop"];
+}forEach _dataArray;
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyDown.sqf b/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyDown.sqf
new file mode 100644
index 00000000..aafce506
--- /dev/null
+++ b/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyDown.sqf
@@ -0,0 +1,264 @@
+private["_dikCode", "_handled"];
+_dikCode = _this select 1;
+_shift = _this select 2;
+_ctrl = _this select 3;
+_alt = _this select 4;
+_handled = false;
+
+// Developer Debug
+// if (_dikCode == 0x24) then {call compile preprocessFileLineNumbers "epoch.sqf";_handled = true;};
+
+
+if !(alive player) exitWith{ false };
+
+EPOCH_space = false;
+
+if (_dikCode in [0x02,0x03,0x04,0x58,0x57,0x44,0x43,0x42,0x41,0x40,0x3F,0x3E,0x3D,0x3C,0x3B,0x0B,0x0A,0x09,0x08,0x07,0x06,0x05,0x0E]) then {
+ _handled = true;
+};
+
+// rasie vol
+if (_ctrl && _dikCode == 0x0D) then {
+ EPOCH_soundLevel = (EPOCH_soundLevel + 0.1) min 1;
+ 5 fadeSound EPOCH_soundLevel;
+ _dt = [format["Internal sound level: %1%2 ", EPOCH_soundLevel * 100, "%"], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+};
+// lower vol
+if (_ctrl && _dikCode == 0x0C) then {
+ EPOCH_soundLevel = (EPOCH_soundLevel - 0.1) max 0.1;
+ 5 fadeSound EPOCH_soundLevel;
+ _dt = [format["Internal sound level: %1%2 ", EPOCH_soundLevel * 100,"%"], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+};
+
+// ESC default to cancel
+if (_dikCode == 0x01) then {
+
+ if !(isNull EPOCH_Target) then {
+ deleteVehicle EPOCH_Target;
+ _dt = ["Build Canceled", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+
+ if !(EPOCH_arr_interactedObjs isEqualTo[]) then {
+
+ EPOCH_arr_interactedObjs remoteExec["EPOCH_server_save_vehicles", 2];
+ EPOCH_arr_interactedObjs = [];
+ };
+};
+
+// Debug Monitor
+if (_dikCode == EPOCH_keysDebugMon) then {
+ EPOCH_debugMode = !EPOCH_debugMode;
+ if (EPOCH_debugMode) then {
+ _dt = ["Debug Mode Enabled", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ } else {
+ _dt = ["Debug Mode Disabled", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ hintSilent "";
+ };
+ _handled = true;
+};
+
+// Player only code
+if (vehicle player == player) then {
+
+ if (_dikCode == EPOCH_keysBuildMode1) then {
+ if (EPOCH_buildMode == 1) then {
+ EPOCH_buildMode = 0;
+ EPOCH_snapDirection = 0;
+ _dt = ["Build Mode Disabled", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ EPOCH_Target = objNull;
+ EPOCH_Z_OFFSET = 0;
+ EPOCH_X_OFFSET = 0;
+ EPOCH_Y_OFFSET = 5;
+ // EPOCH_SURVEY = [];
+ }
+ else {
+ if (EPOCH_playerEnergy > 0) then {
+ EPOCH_stabilityTarget = objNull;
+ EPOCH_buildMode = 1;
+ _dt = ["Build Mode Enabled: Snap alignment", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ EPOCH_buildDirection = 0;
+ }
+ else {
+ _dt = ["Need Energy", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+ _handled = true;
+ };
+ if (_dikCode == EPOCH_keysBuildMode2) then {
+ if (EPOCH_buildMode == 2) then {
+ EPOCH_buildMode = 0;
+ EPOCH_snapDirection = 0;
+ _dt = ["Build Mode Disabled", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ EPOCH_Target = objNull;
+ // EPOCH_SURVEY = [];
+ EPOCH_Z_OFFSET = 0;
+ EPOCH_X_OFFSET = 0;
+ EPOCH_Y_OFFSET = 5;
+ }
+ else {
+ if (EPOCH_playerEnergy > 0) then {
+ EPOCH_stabilityTarget = objNull;
+ EPOCH_buildMode = 2;
+ _dt = ["Build Mode Enabled: Free", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ EPOCH_buildDirection = 0;
+ }
+ else {
+ _dt = ["Need Energy", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+ _handled = true;
+ };
+
+ // H - holster unholster
+ if (_dikCode == EPOCH_keysHolster) then {
+ if (player nearObjects["Const_All_Walls_F", 3] isEqualTo[]) then {
+ if (currentweapon player != "") then {
+ EPOCH_Holstered = currentweapon player;
+ player action["switchWeapon", player, player, 100];
+ }
+ else {
+ if (EPOCH_Holstered != "") then {
+ player selectWeapon EPOCH_Holstered;
+ };
+ };
+ };
+ };
+
+ if (EPOCH_buildMode > 0) then {
+ if (_dikCode == EPOCH_keysBuildDir) then {
+ EPOCH_snapDirection = EPOCH_snapDirection + 1;
+ if (EPOCH_snapDirection > 3) then {
+ EPOCH_snapDirection = 0;
+ _dt = ["SNAP DIRECTION MODE: 0", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ }
+ else {
+ _dt = [format["SNAP DIRECTION MODE: %1", EPOCH_snapDirection], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ _handled = true;
+ };
+
+ if (!_ctrl) then {
+ switch (_dikCode) do {
+ case EPOCH_keysBuildMovUp: { EPOCH_Z_OFFSET = (EPOCH_Z_OFFSET + 0.1) min 6; _handled = true };
+ case EPOCH_keysBuildMovDn: { EPOCH_Z_OFFSET = (EPOCH_Z_OFFSET - 0.1) max - 3; _handled = true };
+ case EPOCH_keysBuildMovFwd: { EPOCH_Y_OFFSET = (EPOCH_Y_OFFSET + 0.1) min 5; _handled = true };
+ case EPOCH_keysBuildMovBak: { EPOCH_Y_OFFSET = (EPOCH_Y_OFFSET - 0.1) max 2; _handled = true };
+ case EPOCH_keysBuildMovL: { EPOCH_X_OFFSET = (EPOCH_X_OFFSET + 0.1) min 5; _handled = true };
+ case EPOCH_keysBuildMovR: { EPOCH_X_OFFSET = (EPOCH_X_OFFSET - 0.1) max - 5; _handled = true };
+ case EPOCH_keysBuildRotL: { EPOCH_buildDirection = (EPOCH_buildDirection + 1) min 360; EPOCH_space = true; hintsilent str(EPOCH_buildDirection); _handled = true };
+ case EPOCH_keysBuildRotR: { EPOCH_buildDirection = (EPOCH_buildDirection - 1) max 0; EPOCH_space = true; hintsilent str(EPOCH_buildDirection); _handled = true };
+ case EPOCH_keysBuildIt: { cursorTarget call EPOCH_fnc_SelectTarget; _handled = true };
+ };
+ };
+ };
+
+ if (_dikCode == EPOCH_keysAcceptTrade) then {
+ if (_ctrl) then {
+ if (!isNull cursorTarget) then {
+ if ((player distance cursorTarget) < 6) then {
+ if (cursorTarget != player && isPlayer cursorTarget && vehicle cursorTarget == cursorTarget) then {
+ [cursorTarget, player, Epoch_personalToken] call EPOCH_startTRADEREQ;
+ };
+ };
+ };
+ } else {
+ if !(isNull EPOCH_pendingP2ptradeTarget && isPlayer EPOCH_pendingP2ptradeTarget) then {
+ if ((player distance EPOCH_pendingP2ptradeTarget) < 6) then {
+ EPOCH_p2ptradeTarget = EPOCH_pendingP2ptradeTarget;
+ call EPOCH_startTrade;
+ };
+ };
+ };
+ _handled = true;
+ };
+
+ if (_dikCode in(actionKeys "moveFastForward") || _dikCode in(actionKeys "moveForward")) then {
+ if ((diag_tickTime - EPOCH_lastAGTime) > 1) then {
+ EPOCH_lastAGTime = diag_tickTime;
+ if !(player nearObjects["Const_All_Walls_F", 6] isEqualTo[]) then {
+ _currentPos = player modelToWorld[0, 1, 1];
+ if !(surfaceIsWater _currentPos) then {
+ _currentPos = ATLtoASL _currentPos;
+ };
+ player forceWalk(lineIntersects[eyePos player, _currentPos, player, objNull]);
+ };
+ };
+ };
+
+ if ((_dikCode in(actionKeys "moveDown") || _dikCode in(actionKeys "Prone")) && speed player > 0) then {
+ _currentPos = player modelToWorld[0, 5, 0.5];
+ if !(surfaceIsWater _currentPos) then {
+ _currentPos = ATLtoASL _currentPos;
+ };
+ _handled = (lineIntersects[eyePos player, _currentPos, player, objNull]);
+ };
+
+ if (!_ctrl && _dikCode in(actionKeys "GetOver")) then {
+ if ((diag_tickTime - EPOCH_lastJumptime) > 2) then {
+
+ _currentPos = player modelToWorld[0, 2, 1];
+ if !(surfaceIsWater _currentPos) then {
+ _currentPos = ATLtoASL _currentPos;
+ };
+
+ if !(lineIntersects[eyePos player, _currentPos, player, objNull]) then {
+ EPOCH_lastJumptime = diag_tickTime;
+ if (isTouchingGround player && speed player > 10) then {
+ if ((primaryWeapon player != "") && (currentWeapon player == primaryWeapon player)) then {
+ player switchMove "AovrPercMrunSrasWrflDf";
+ EPOCH_switchMove_PVS = [player, 1, Epoch_personalToken];
+ publicVariableServer "EPOCH_switchMove_PVS";
+ _handled = true;
+ } else {
+ if (currentWeapon player == "") then {
+ player switchMove "epoch_unarmed_jump";
+ EPOCH_switchMove_PVS = [player, 2, Epoch_personalToken];
+ publicVariableServer "EPOCH_switchMove_PVS";
+ _handled = true;
+ };
+ };
+ };
+ } else {
+ _handled = true;
+ };
+ } else {
+ _handled = true;
+ };
+ };
+
+ if (_dikCode in(actionKeys "Gear")) then {
+ if !(isNull EPOCH_Target) then {
+ deleteVehicle EPOCH_Target;
+ _dt = ["Build Canceled", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ if (isTouchingGround player) then {
+ _handled = call EPOCH_lootTrash;
+ };
+ if !(_handled) then {
+ if (!isNull(findDisplay 602)) then { //Inventory Open?
+ (findDisplay 602) closeDisplay 3000;
+ }
+ else {
+ _handled = _ctrl call EPOCH_startInteract;
+ };
+ };
+ };
+
+}; // end player only code
+
+if (_dikCode in (actionKeys "Salute")) then {
+ if (_ctrl) then {
+ player playactionNow "GestureFinger";
+ _handled = true;
+ };
+};
+if (_dikCode in (actionKeys "TacticalView")) then {
+ _handled = true;
+};
+if (_dikCode in (actionKeys "NightVision")) then {
+ if (EPOCH_playerEnergy == 0) then {
+ _handled = true;
+ };
+};
+
+_handled
diff --git a/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyUp.sqf b/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyUp.sqf
new file mode 100644
index 00000000..6a47242c
--- /dev/null
+++ b/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyUp.sqf
@@ -0,0 +1,6 @@
+_dikCode = _this select 1;
+_shift = _this select 2;
+_ctrl = _this select 3;
+_alt = _this select 4;
+
+if (_ctrl && _dikCode == 0x39) then { call EPOCH_lootTrash; };
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/interface_event_handlers/EPOCH_onChar.sqf b/Sources/epoch_code/compile/interface_event_handlers/EPOCH_onChar.sqf
new file mode 100644
index 00000000..e8ca86f4
--- /dev/null
+++ b/Sources/epoch_code/compile/interface_event_handlers/EPOCH_onChar.sqf
@@ -0,0 +1,12 @@
+_control = _this select 0;
+_textArr = toArray(ctrlText(_control select 0));
+{
+ if !(_x in [48,49,50,51,52,53,54,55,56,57]) then {
+ _textArr = _textArr - [_x];
+ };
+} forEach _textArr;
+if (count _textArr > 10) then {
+ _textArr resize 10;
+};
+_num = parseNumber(toString _textArr) min (_this select 1);
+(_control select 0) ctrlSetText str(_num);
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/inventory/EPOCH_factorArmor.sqf b/Sources/epoch_code/compile/inventory/EPOCH_factorArmor.sqf
new file mode 100644
index 00000000..5e71f4e1
--- /dev/null
+++ b/Sources/epoch_code/compile/inventory/EPOCH_factorArmor.sqf
@@ -0,0 +1,5 @@
+private ["_passThrough","_armor","_factor"];
+_passThrough = _this select 0;
+_armor = _this select 1;
+_factor = 2;
+((_armor - (_armor*_passThrough))/_factor + _armor)
diff --git a/Sources/epoch_code/compile/inventory/EPOCH_gearArmorCalc.sqf b/Sources/epoch_code/compile/inventory/EPOCH_gearArmorCalc.sqf
new file mode 100644
index 00000000..ce074dd5
--- /dev/null
+++ b/Sources/epoch_code/compile/inventory/EPOCH_gearArmorCalc.sqf
@@ -0,0 +1,4 @@
+private ["_passThrough","_armor"];
+_passThrough = getNumber(configFile >> "CfgWeapons" >> _this >> "ItemInfo" >> "passThrough");
+_armor = getNumber(configFile >> "CfgWeapons" >> _this >> "ItemInfo" >> "armor");
+([_passThrough,_armor] call EPOCH_factorArmor)
diff --git a/Sources/epoch_code/compile/inventory/EPOCH_initUI.sqf b/Sources/epoch_code/compile/inventory/EPOCH_initUI.sqf
new file mode 100644
index 00000000..ff4f8c94
--- /dev/null
+++ b/Sources/epoch_code/compile/inventory/EPOCH_initUI.sqf
@@ -0,0 +1,43 @@
+private ["_bar","_uniformArmor","_totalArmor","_finalArmor","_vestArmor","_headgearArmor","_bar_pos","_bar_compare","_color","_colorCompare","_display","_totalArmorMax"];
+disableSerialization;
+
+EPOCH_InteractedItem = [];
+
+if (isNil "EPOCH_MAX_ARMOR") then {
+ call EPOCH_maxArmorInit;
+};
+
+EPOCH_lastContainer = _this select 1;
+
+waitUntil {!isNull findDisplay 602};
+_display = (findDisplay 602);
+
+{(_display displayCtrl _x) ctrlEnable false} forEach [-13,-14];
+
+_totalArmor = 0;
+_totalArmorMax = EPOCH_MAX_ARMOR select 3;
+
+_color = [0.6,0.6,0.6,1];
+_colorCompare = [0.4,0.6,1,0.4];
+
+_bar = _display displayCtrl 7304;
+uiNameSpace setVariable ["RscCustomProgressUniform", _bar];
+_bar ctrlSetTextColor _color;
+
+_bar = _display displayCtrl 7305;
+uiNameSpace setVariable ["RscCustomProgressVest", _bar];
+_bar ctrlSetTextColor _color;
+
+_bar = _display displayCtrl 7240;
+uiNameSpace setVariable ["RscCustomProgressHeadgear", _bar];
+_bar ctrlSetTextColor _color;
+
+_bar = _display displayCtrl 7308;
+_bar ctrlSetTextColor _color;
+
+_bar_compare = _display displayCtrl 7309;
+_bar_compare ctrlSetTextColor _colorCompare;
+
+uiNameSpace setVariable ["RscCustomProgressTotal", [_bar,_bar_compare]];
+
+0 call EPOCH_refeshUI;
diff --git a/Sources/epoch_code/compile/inventory/EPOCH_itemInteractV2.sqf b/Sources/epoch_code/compile/inventory/EPOCH_itemInteractV2.sqf
new file mode 100644
index 00000000..ba235823
--- /dev/null
+++ b/Sources/epoch_code/compile/inventory/EPOCH_itemInteractV2.sqf
@@ -0,0 +1,62 @@
+private ["_data","_confData","_usedIn","_type","_interactOption","_buttonTXT","_control","_index","_text","_pic","_craftingArray","_craftingArrayNames","_config","_craftingConfig","_display","_useBtn"];
+
+EPOCH_InteractedItem = [];
+_control = _this select 0;
+_index = _this select 1;
+
+_text = _control lbText _index;
+_data = _control lbData _index;
+_pic = _control lbPicture _index;
+
+_craftingArray = [];
+_craftingArrayNames = [];
+
+if (_data == "") then {
+ _confData = "getText (_x >> 'displayName') == _text" configClasses(configFile >> "CfgWeapons");
+ if !(_confData isEqualTo[]) then {
+ _data = configName(_confData select 0);
+ };
+};
+
+_config = 'CfgCrafting' call EPOCH_returnConfig;
+_craftingConfig = _config >> _data;
+
+if (isClass (_craftingConfig)) then {
+ _usedIn = [] + getArray (_craftingConfig >> "usedIn");
+ {
+ _craftingArray pushBack (_x call EPOCH_itemPicture);
+ _craftingArrayNames pushBack (_x call EPOCH_itemDisplayName);
+ } forEach _usedIn;
+};
+
+EPOCH_InteractedItem = [_text,_data,_pic];
+
+_interactOption = 0;
+_buttonTXT = "";
+if (isClass (configfile >> "cfgweapons" >> _data)) then {
+ _type = getNumber (configfile >> "CfgWeapons" >> _data >> "type");
+ _interactOption = getNumber (configfile >> "CfgWeapons" >> _data >> "interactAction");
+ _buttonTXT = getText(configfile >> "CfgWeapons" >> _data >> "interactText");
+} else {
+ _type = getNumber (configfile >> "CfgMagazines" >> _data >> "type");
+ _interactOption = getNumber (configfile >> "CfgMagazines" >> _data >> "interactAction");
+ _buttonTXT = getText(configfile >> "CfgMagazines" >> _data >> "interactText");
+};
+
+_display = (findDisplay 602);
+_useBtn = _display displayCtrl -13;
+
+if (_buttonTXT != "") then {
+ _useBtn ctrlSetText _buttonTXT;
+ _useBtn ctrlEnable true;
+} else {
+ _useBtn ctrlSetText "EXAMINE";
+ _useBtn ctrlEnable false;
+};
+
+_useBtn = _display displayCtrl -14;
+if !(_craftingArray isEqualTo []) then {
+ _useBtn ctrlEnable true;
+} else {
+ _useBtn ctrlEnable false;
+};
diff --git a/Sources/epoch_code/compile/inventory/EPOCH_maxArmorInit.sqf b/Sources/epoch_code/compile/inventory/EPOCH_maxArmorInit.sqf
new file mode 100644
index 00000000..7eebe3eb
--- /dev/null
+++ b/Sources/epoch_code/compile/inventory/EPOCH_maxArmorInit.sqf
@@ -0,0 +1,29 @@
+private ["_tempArmor","_maxArmorUniform","_curArmor","_maxArmorVest","_maxArmorHeadgear"];
+_maxArmorUniform = 0;
+{
+
+ _tempArmor = 0;
+ {_tempArmor = _tempArmor + ([getNumber(_x >> 'passThrough'),getNumber(_x >> 'armor')] call EPOCH_factorArmor)} forEach ("isClass _x" configclasses (_x >> "HitPoints"));
+ _curArmor = ([getNumber(_x >> 'passThrough'),getNumber(_x >> 'armor')] call EPOCH_factorArmor) + getNumber(_x >> 'armorStructural') + _tempArmor;
+
+ if (_curArmor > _maxArmorUniform) then {
+ _maxArmorUniform = _curArmor;
+ };
+} forEach (("isclass _x && getnumber (_x >> 'scope') == 2 && getText (_x >> 'uniformClass') != ''") configclasses (configfile >> "CfgVehicles"));
+
+_maxArmorVest = 0;
+{
+ _curArmor = ([getNumber(_x >> 'itemInfo' >> 'passThrough'),getNumber(_x >> 'itemInfo' >> 'armor')] call EPOCH_factorArmor);
+ if (_curArmor > _maxArmorVest) then {
+ _maxArmorVest = _curArmor;
+ };
+} forEach (("isclass _x && getnumber (_x >> 'scope') == 2 && getnumber (_x >> 'itemInfo' >> 'type') in [701]") configclasses (configfile >> "cfgweapons"));
+
+_maxArmorHeadgear = 0;
+{
+ _curArmor = ([getNumber(_x >> 'itemInfo' >> 'passThrough'),getNumber(_x >> 'itemInfo' >> 'armor')] call EPOCH_factorArmor);
+ if (_curArmor > _maxArmorHeadgear) then {
+ _maxArmorHeadgear = _curArmor;
+ };
+} forEach (("isclass _x && getnumber (_x >> 'scope') == 2 && getnumber (_x >> 'itemInfo' >> 'type') in [605]") configclasses (configfile >> "cfgweapons"));
+missionNamespace setVariable ["EPOCH_MAX_ARMOR",[_maxArmorUniform,_maxArmorVest,_maxArmorHeadgear,(_maxArmorUniform + _maxArmorVest + _maxArmorHeadgear)]];
diff --git a/Sources/epoch_code/compile/inventory/EPOCH_refeshUI.sqf b/Sources/epoch_code/compile/inventory/EPOCH_refeshUI.sqf
new file mode 100644
index 00000000..9fe5861a
--- /dev/null
+++ b/Sources/epoch_code/compile/inventory/EPOCH_refeshUI.sqf
@@ -0,0 +1,62 @@
+private ["_newArmor","_totalArmor","_totalArmorMax","_selectedClass","_selectedItem","_bar","_uniformArmor","_finalArmor","_vestArmor","_headgearArmor","_totalArmorUI","_bar_compare"];
+disableSerialization;
+if (!isNull findDisplay 602) then {
+
+ _selectedClass = "";
+ if !(EPOCH_InteractedItem isEqualTo []) then {
+ _selectedClass = EPOCH_InteractedItem select 1;
+ };
+
+ _totalArmor = 0;
+ _totalArmorMax = EPOCH_MAX_ARMOR select 3;
+
+ _newArmor = 0;
+
+ _selectedItem = getnumber (configFile >> "CfgWeapons" >> _selectedClass >> "ItemInfo" >> "type");
+
+ _bar = uiNameSpace getVariable "RscCustomProgressUniform";
+ _uniformArmor = (uniform player) call EPOCH_uniformArmorCalc;
+ _totalArmor = _totalArmor + _uniformArmor;
+ _finalArmor = linearConversion [0,EPOCH_MAX_ARMOR select 0,_uniformArmor,0.01,1];
+ _bar progressSetPosition _finalArmor;
+
+ if (_selectedItem == 801) then {
+ _newArmor = _newArmor + (_selectedClass call EPOCH_uniformArmorCalc);
+ } else {
+ _newArmor = _newArmor + _uniformArmor;
+ };
+
+ _bar = uiNameSpace getVariable "RscCustomProgressVest";
+ _vestArmor = (vest player) call EPOCH_gearArmorCalc;
+ _totalArmor = _totalArmor + _vestArmor;
+ _finalArmor = linearConversion [0,EPOCH_MAX_ARMOR select 1,_vestArmor,0.01,1];
+ _bar progressSetPosition _finalArmor;
+
+ if (_selectedItem == 701) then {
+ _newArmor = _newArmor + (_selectedClass call EPOCH_gearArmorCalc);
+ } else {
+ _newArmor = _newArmor + _vestArmor;
+ };
+
+ _bar = uiNameSpace getVariable "RscCustomProgressHeadgear";
+ _headgearArmor = (headgear player) call EPOCH_gearArmorCalc;
+ _totalArmor = _totalArmor + _headgearArmor;
+ _finalArmor = linearConversion [0,EPOCH_MAX_ARMOR select 2,_headgearArmor,0.01,1];
+ _bar progressSetPosition _finalArmor;
+
+ if (_selectedItem == 605) then {
+ _newArmor = _newArmor + (_selectedClass call EPOCH_gearArmorCalc);
+ } else {
+ _newArmor = _newArmor + _headgearArmor;
+ };
+
+ _totalArmorUI = uiNameSpace getVariable "RscCustomProgressTotal";
+ _bar = _totalArmorUI select 0;
+ _finalArmor = linearConversion [0,_totalArmorMax,_totalArmor,0.01,1];
+ _bar progressSetPosition _finalArmor;
+
+ _bar_compare = _totalArmorUI select 1;
+ _finalArmor = linearConversion [0,_totalArmorMax,_newArmor,0.01,1];
+ _bar_compare progressSetPosition _finalArmor;
+
+};
diff --git a/Sources/epoch_code/compile/inventory/EPOCH_selectInventoryItem.sqf b/Sources/epoch_code/compile/inventory/EPOCH_selectInventoryItem.sqf
new file mode 100644
index 00000000..44324a1d
--- /dev/null
+++ b/Sources/epoch_code/compile/inventory/EPOCH_selectInventoryItem.sqf
@@ -0,0 +1,33 @@
+private ["_index","_data","_control","_text","_pic","_craftingArray","_craftingArrayNames"];
+
+EPOCH_InteractedItem = [];
+
+_control = _this select 0;
+_index = _this select 1;
+
+if (typeName _index == "ARRAY") then {
+ _index = (_index select 0) select 1;
+};
+
+_text = _control lbText _index;
+_data = _control lbData _index;
+_pic = _control lbPicture _index;
+
+_craftingArray = [];
+_craftingArrayNames = [];
+
+comment 'Not ideal This is needed as weapons do not return a class in the UI';
+comment 'This test is to over come an issue that causes the wrong class selected';
+comment 'when more than two classes share the same displayName';
+if (_data == "") then {
+ {
+ _name = configName(_x);
+ _exit = false;
+ if !(isNull EPOCH_lastContainer) then {
+ _arr = ((getItemCargo EPOCH_lastContainer) select 0) + [uniform player,vest player,headgear player];
+ _exit = (_name in _arr);
+ };
+ if (_exit) exitWith {_data = _name};
+ } forEach ("getText (_x >> 'displayName') == _text" configClasses(configFile >> "CfgWeapons"));
+};
+EPOCH_InteractedItem = [_text,_data,_pic];
diff --git a/Sources/epoch_code/compile/inventory/EPOCH_uniformArmorCalc.sqf b/Sources/epoch_code/compile/inventory/EPOCH_uniformArmorCalc.sqf
new file mode 100644
index 00000000..c73ba0a1
--- /dev/null
+++ b/Sources/epoch_code/compile/inventory/EPOCH_uniformArmorCalc.sqf
@@ -0,0 +1,13 @@
+private ["_uniformClass","_uniformArmor","_uniformConfig","_uniformArmorStructural"];
+
+_uniformClass = _this;
+if (isClass (configFile >> "CfgWeapons" >> _this)) then {
+ _uniformClass = gettext (configFile >> "CfgWeapons" >> _this >> "ItemInfo" >> "uniformclass");
+};
+_uniformConfig = (configfile >> "cfgvehicles" >> _uniformClass);
+_uniformArmor = getNumber(_uniformConfig >> "armor");
+_uniformArmorStructural = getNumber(_uniformConfig >> "armorStructural");
+{
+ _uniformArmor = _uniformArmorStructural + ([getNumber(_x >> 'passThrough'),getNumber(_x >> 'armor')] call EPOCH_factorArmor)
+} forEach ("isClass _x" configclasses (_uniformConfig >> "HitPoints"));
+_uniformArmor
diff --git a/Sources/epoch_code/compile/missions/EPOCH_mission_accept.sqf b/Sources/epoch_code/compile/missions/EPOCH_mission_accept.sqf
new file mode 100644
index 00000000..9d434515
--- /dev/null
+++ b/Sources/epoch_code/compile/missions/EPOCH_mission_accept.sqf
@@ -0,0 +1,91 @@
+_index = lbValue[1500, lbCurSel 1500];
+
+_disabledMissions = getArray(configfile >> "MissionList" >> "traderMissionDisabled");
+if (_index in _disabledMissions) exitWith{ titleText["Invalid Mission", "PLAIN", 3]; };
+
+_nrEnts = player nearEntities ["Man", 20];
+_trader = objNull;
+{
+ if ((_x getVariable ["AI_SLOT", -1 ] > -1)) exitWith {
+ _trader = _x;
+ };
+}forEach _nrEnts;
+
+if !(isNull _trader) then {
+ switch _index do {
+ case 0: {
+ [player,_trader] execFSM "\x\addons\a3_epoch_code\System\Trader_Missions_Delivery.fsm";
+ };
+ case 1: {
+ [player,_trader] execFSM "\x\addons\a3_epoch_code\System\Trader_Missions_Animal_Control.fsm";
+ };
+ case 2: {
+ [player,_trader] execFSM "\x\addons\a3_epoch_code\System\Trader_Missions_UAV.fsm";
+ };
+ case 3: {
+ [] execFSM "\x\addons\a3_epoch_code\System\Trader_Missions_VIP.fsm";
+ };
+ case 4: {
+ _formatMsg = format["The time is %1:%2.",date select 3, date select 4];
+ _dt = [_formatMsg, 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ case 5: {
+ _plyrs = [];
+ _plyrsOut = [];
+ _grpWith = false;
+ _msg = "Apart from you";
+ _grp = group player;
+ _plyrs = nearestObjects [player, ["Epoch_Man_base_F","Epoch_Female_base_F"], 750];
+ _plyrs = _plyrs - [player];
+ {
+ if!(group _x == _grp)then{
+ _plyrsOut pushBack _x;
+ }else{
+ _grpWith = true;
+ };
+ } forEach _plyrs;
+
+ if(_grpWith)then{
+ _msg = "Apart from your team and you";
+ };
+ _trdrMsg = format["%2 %1, I haven't seen anybody for a while.",name player,_msg];
+
+ if (count _plyrsOut > 0) then {
+ _plyr = _plyrsOut select (floor (random count _plyrsOut));
+ _trdrMsg = format["The last person picked up by the UAV was %1.",name _plyr];
+ };
+ _dt = [format["%1",_trdrMsg], 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ case 6:
+ {
+ _newsArr = ["My dog was shot. That made me sad.","Business has been quiet since word got out that sappers are in the area.","Looters are expecting too much crypto for all the junk they bring in.","What do I look like ? A newspaper vendor. Go Away.","The sun came up again this morning.. That's good news I suppose.","Keep your dog fed with raw or cooked carcasses.","Sappers are known to be good for their pelts. Just don't get too close to one","Some very strange rumours that a Construct was seen in the mountains. Those things are just bedtime stories to scare kids with.","UAVs are a good source of components.","Some say this town is haunted by malevolent spirits.","I hear the military are helping survivors with air drops. Your loot is always welcome here if you find one.","Jammers seem to scare away some of the bad.. things.","Help Military Support Crew spot you with smoke or chemlights.","Hmm, have heard bar stories of a new monster on the loose. You watch yourself out there."];
+ _config = 'CfgEpochClient' call EPOCH_returnConfig;
+ _customNews = getArray(_config >> "EPOCH_news");
+ if(count _customNews > 0)then{
+ {
+ _newsArr pushBack _x;
+ } forEach _customNews;
+ };
+ _formatMsg = format["%1",_newsArr select (floor (random count _newsArr))];
+ _dt = [_formatMsg, 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ case 7: {
+ _responseArr = ["My name..? What does it matter.","Hey buddy you rock up here unannounced and suddenly we're friends ? On your bike if you aren't buying or selling.",format["My name.. I am known as %1",name _trader], format["When names mattered I was called %1",name _trader],"I forget.. At least, I try to forget."];
+ _formatMsg = format["%1",_responseArr select (floor (random count _responseArr))];
+ _dt = [_formatMsg, 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ case 8: {
+ "Epoch_Sapper_F" call EPOCH_unitSpawn;
+ };
+ case 9: {
+ call EPOCH_spawn_looters;
+ };
+ default {
+ _dt = ["Quit your jabbering and get the hell out of here.", 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+
+} else {
+ titletext["Trader Lost. Goodbye.", "PLAIN DOWN", 3];
+};
+
diff --git a/Sources/epoch_code/compile/missions/EPOCH_mission_cage_sapper.sqf b/Sources/epoch_code/compile/missions/EPOCH_mission_cage_sapper.sqf
new file mode 100644
index 00000000..7c9af0b3
--- /dev/null
+++ b/Sources/epoch_code/compile/missions/EPOCH_mission_cage_sapper.sqf
@@ -0,0 +1,47 @@
+private["_sapper","_trader","_cage","_cage2","_cagePos","_sounds","_sound"];
+_sapper = _this select 0;
+_trader = _this select 1;
+
+_cagePos = (getPosATL _trader) findEmptyPosition [1,50,"Land_Cages_F"];
+_cage = createVehicle ["Land_Cages_F", _cagePos, [], 2, "CAN_COLLIDE"] ;
+_cage setVectorDirAndUp [[0,0,1],[0,1,0]];
+_cage2 = createVehicle ["Land_Cages_F", _cagePos, [], 2, "CAN_COLLIDE"] ;
+_cage2 setVectorDirAndUp [[0,0,1],[0,1,0]];
+_cage attachTo [_cage2,[0,1.3,0]];
+
+EPOCH_TEMPOBJ_PVS = [_cage,_cage2];
+publicVariableServer "EPOCH_TEMPOBJ_PVS";
+
+
+_startCage = diag_tickTime;
+while {_sapper distance _cage > 3 || diag_tickTime - _startCage < 12} do {
+ _sapper moveTo _cagePos;
+ uiSleep 3;
+};
+
+deleteVehicle _sapper;
+_sapper = createAgent ["Epoch_Sapper_F", getPos _cage2, [], 0, "FORM"];
+_sapper setUnitPos "UP";
+_sapper attachTo [_cage2,[0.4,-0.6,-0.4]];
+_sapper setVectorDirAndUp [[0,0,1],[0,1,0]];
+_sapper forcespeed 0;
+
+if !(isNull _sapper) then {
+ EPOCH_TEMPOBJ_PVS = _sapper;
+ publicVariableServer "EPOCH_TEMPOBJ_PVS";
+};
+
+EPOCH_FillContainer_PVS = [player,Epoch_personalToken,objNull,false,25];
+publicVariableServer "EPOCH_FillContainer_PVS";
+
+
+while {player distance _sapper < 100 && alive player} do {
+ if ((random 100) < 0.5) then {
+ _sounds = ["sapper_groan0","sapper_groan1","sapper_groan2"];
+ _sound = _sounds select (floor (random (count _sounds)));
+ _sapper say3D _sound;
+ EPOCH_say3D_PVS = [player, _sapper,(EPOCH_sounds find _sound), Epoch_personalToken];
+ publicVariableServer "EPOCH_say3D_PVS";
+ };
+ uiSleep 0.5;
+};
diff --git a/Sources/epoch_code/compile/missions/EPOCH_mission_returnObj.sqf b/Sources/epoch_code/compile/missions/EPOCH_mission_returnObj.sqf
new file mode 100644
index 00000000..4f295e3f
--- /dev/null
+++ b/Sources/epoch_code/compile/missions/EPOCH_mission_returnObj.sqf
@@ -0,0 +1 @@
+axeMissionObj = _this;
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/missions/EPOCH_spawn_construct.sqf b/Sources/epoch_code/compile/missions/EPOCH_spawn_construct.sqf
new file mode 100644
index 00000000..307a3b82
--- /dev/null
+++ b/Sources/epoch_code/compile/missions/EPOCH_spawn_construct.sqf
@@ -0,0 +1,5 @@
+private["_unit"];
+
+_unit = createAgent ["Construct_F", getPos player, [], 520, "FORM"];
+{_unit disableAI _x}forEach["TARGET","AUTOTARGET","FSM"];
+[_unit] execFSM "\x\addons\a3_epoch_code\System\Construct_Brain.fsm";
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/missions/EPOCH_spawn_looters.sqf b/Sources/epoch_code/compile/missions/EPOCH_spawn_looters.sqf
new file mode 100644
index 00000000..0e768b13
--- /dev/null
+++ b/Sources/epoch_code/compile/missions/EPOCH_spawn_looters.sqf
@@ -0,0 +1,13 @@
+
+private["_unit"];
+
+for "_i" from 0 to 4 step 1 do {
+ _unit = createGroup RESISTANCE createUnit ["Epoch_Female_F", getPos player, [], 400, "CAN_COLLIDE"];
+ _unit addBackPack "B_Kitbag_Base";
+ _unit addWeapon "Hatchet";
+ _unit addMagazine "hatchet_swing";
+ {_unit disableAI _x}count["TARGET","AUTOTARGET","FSM"];
+ _unit addEventHandler ["FiredNear", "_this select 0 setVariable [""firedNear"",_this select 2]"];
+ _unit addEventHandler ["Hit", "_this select 0 setVariable [""looterHit"",true];"]; //setDamage on the client && on Epoch_Female_F !? Not required ! Part of keeping health up on antagonists without custom armour !
+ [_unit] execFSM "\x\addons\a3_epoch_code\System\Looter_Brain.fsm";
+};
diff --git a/Sources/epoch_code/compile/p2p_trading/EPOCH_TradeLoop.sqf b/Sources/epoch_code/compile/p2p_trading/EPOCH_TradeLoop.sqf
new file mode 100644
index 00000000..add0a406
--- /dev/null
+++ b/Sources/epoch_code/compile/p2p_trading/EPOCH_TradeLoop.sqf
@@ -0,0 +1,74 @@
+private ["_item","_index","_sizeOut","_sizeIn","_array","_tradeOffer","_isAcceptedOther","_isAccepted"];
+if (EPOCH_p2ptradeTarget distance player > 8) exitWith{ EPOCH_p2ptradeTarget = ObjNull; };
+if (vehicle player != player || vehicle EPOCH_p2ptradeTarget != EPOCH_p2ptradeTarget) exitWith { EPOCH_p2ptradeTarget = ObjNull; };
+if (!isNull EPOCH_p2ptradeTarget) then {
+
+ _sizeOut = lbSize 1501;
+ _array = [];
+ if (_sizeOut > 0) then {
+ for "_i" from 0 to (_sizeOut - 1) do {
+ _item = lbData [1501, _i];
+ _array pushBack _item;
+ };
+ };
+
+ _cryptoOffer = parseNumber(ctrlText 1400) min EPOCH_playerCrypto;
+ _offerArray = [_array, _cryptoOffer];
+
+ if !(EPOCH_prevOffer isEqualTo _offerArray) then {
+ player setVariable ["Offer", _offerArray, true];
+ EPOCH_prevOffer = _offerArray;
+ };
+
+ lbClear 1502;
+ _tradeOffer = EPOCH_p2ptradeTarget getVariable["Offer", [[],0]];
+ {
+ _index = lbAdd [1502, _x call EPOCH_itemDisplayName];
+ lbSetData [1502, _index, _x];
+ lbSetPicture [1502, _index, _x call EPOCH_itemPicture];
+ } forEach (_tradeOffer select 0);
+
+ _tradeCryptoOffer = (_tradeOffer select 1);
+ if (_tradeCryptoOffer > 0) then {
+ _index = lbAdd[1502, format["%1 Krypto", _tradeCryptoOffer]];
+ lbSetData[1502, _index, "Krypto"];
+ lbSetPicture[1502, _index, "\x\addons\a3_epoch_code\Data\UI\cc_ca.paa"];
+ };
+
+ _isAcceptedOther = EPOCH_p2ptradeTarget getVariable["Accept", false];
+ _isAccepted = player getVariable ["Accept",false];
+
+ if (_isAccepted && _isAcceptedOther && !EPOCH_tradeDone) then {
+ EPOCH_tradeDone = true;
+ EPOCH_prevOffer = [];
+
+ _removeCount = 0;
+ {
+ if ([_x, "CfgWeapons"] call EPOCH_fnc_isAny) then {
+ if (_x in items player) then {
+ player removeItem _x;
+ _removeCount = _removeCount + 1;
+ };
+ } else {
+ if (_x in magazines player) then {
+ player removeMagazine _x;
+ _removeCount = _removeCount + 1;
+ };
+ };
+ }forEach _array;
+
+ if (_removeCount == count _array) then {
+ EPOCH_MAKETRADE = [player, EPOCH_p2ptradeTarget, _array, _tradeOffer, Epoch_personalToken];
+ publicVariableServer "EPOCH_MAKETRADE";
+ };
+
+ (findDisplay -1900) closeDisplay 1;
+ };
+
+ // cancel close menu if men not open on other player
+ /*
+ if !(EPOCH_p2ptradeTarget getVariable["TRADE_ACTIVE", objNull] == player) then {
+ (findDisplay -1900) closeDisplay 1;
+ };
+ */
+};
diff --git a/Sources/epoch_code/compile/p2p_trading/EPOCH_startTRADEREQ.sqf b/Sources/epoch_code/compile/p2p_trading/EPOCH_startTRADEREQ.sqf
new file mode 100644
index 00000000..4e02a297
--- /dev/null
+++ b/Sources/epoch_code/compile/p2p_trading/EPOCH_startTRADEREQ.sqf
@@ -0,0 +1,20 @@
+private["_distance"];
+
+_otherPlyr = _this select 0;
+if (!isNull _otherPlyr) then {
+
+ _distance = player distance _otherPlyr;
+ if (_distance < 10) then {
+
+ // restict to only players not in vehicles
+ if (vehicle player == player && vehicle _otherPlyr == _otherPlyr) then {
+
+ EPOCH_MAKETRADEREQ = _this;
+ publicVariableServer "EPOCH_MAKETRADEREQ";
+
+ // target other player
+ EPOCH_p2ptradeTarget = _otherPlyr;
+ call EPOCH_startTrade;
+ };
+ };
+};
diff --git a/Sources/epoch_code/compile/p2p_trading/EPOCH_startTrade.sqf b/Sources/epoch_code/compile/p2p_trading/EPOCH_startTrade.sqf
new file mode 100644
index 00000000..678b4ab8
--- /dev/null
+++ b/Sources/epoch_code/compile/p2p_trading/EPOCH_startTrade.sqf
@@ -0,0 +1,31 @@
+private[];
+
+closeDialog 0;
+if !(createdialog "Trade") exitWith {};
+
+9992 cutRsc["EpochGameUI2", "PLAIN", 2, false];
+((uiNamespace getVariable "EPOCH_EpochGameUI2") displayCtrl 21208) ctrlSetText format["%1", EPOCH_playerCrypto];
+
+{lbAdd[2100,_x]} forEach ["All","Magazines","Items"];
+// {lbAdd[2100, _x]} forEach["All", "Weapons", "Magazines", "Items"];
+{
+ if (getNumber(configfile >> "CfgMagazines" >> _x >> "count") == 1) then {
+ _index = lbAdd [1500, _x call EPOCH_itemDisplayName];
+ lbSetData [1500, _index, _x];
+ lbSetPicture [1500, _index, _x call EPOCH_itemPicture];
+ };
+}forEach magazines player;
+/*
+{
+ _index = lbAdd [1500, _x call EPOCH_itemDisplayName];
+ lbSetData [1500, _index, _x];
+ lbSetPicture [1500, _index, _x call EPOCH_itemPicture];
+}forEach weapons player;
+*/
+{
+ _index = lbAdd [1500, _x call EPOCH_itemDisplayName];
+ lbSetData [1500, _index, _x];
+ lbSetPicture [1500, _index, _x call EPOCH_itemPicture];
+}forEach items player;
+player setVariable ["Accept", false, true];
+EPOCH_tradeDone = false;
diff --git a/Sources/epoch_code/compile/p2p_trading/EPOCH_tradeRequest.sqf b/Sources/epoch_code/compile/p2p_trading/EPOCH_tradeRequest.sqf
new file mode 100644
index 00000000..3604608f
--- /dev/null
+++ b/Sources/epoch_code/compile/p2p_trading/EPOCH_tradeRequest.sqf
@@ -0,0 +1,7 @@
+if !(isNull _this) then {
+ // ignore request if either player is in a vehicle
+ if (vehicle player == player && vehicle _this == _this) then {
+ _dt = ["Trade request received, press 'T' to accept", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ EPOCH_pendingP2ptradeTarget = _this;
+ };
+};
diff --git a/Sources/epoch_code/compile/setup/EPOCH_clientInit.sqf b/Sources/epoch_code/compile/setup/EPOCH_clientInit.sqf
new file mode 100644
index 00000000..dbbfd22d
--- /dev/null
+++ b/Sources/epoch_code/compile/setup/EPOCH_clientInit.sqf
@@ -0,0 +1,33 @@
+EPOCH_buildMode = 0;
+EPOCH_buildDirection = 0;
+EPOCH_debugMode = false;
+EPOCH_snapDirection = 0;
+EPOCH_stabilityTarget = objNull;
+EPOCH_equippedItem_PVS = [];
+EPOCH_nearPower = false;
+EPOCH_pendingP2ptradeTarget = objNull;
+EPOCH_lastNPCtradeTarget = objNull;
+EPOCH_clientAliveTimer = diag_tickTime;
+EPOCH_lastJumptime = diag_tickTime;
+EPOCH_lastAGTime = diag_tickTime;
+EPOCH_lastMineRocks = diag_tickTime;
+EPOCH_target = objNull;
+EPOCH_Z_OFFSET = 0;
+EPOCH_X_OFFSET = 0;
+EPOCH_Y_OFFSET = 5;
+EPOCH_snapVisArray = [];
+EPOCH_prevTarget = objNull;
+EPOCH_interactOption = 0;
+
+EPOCH_playerStaminaMax = 100;
+EPOCH_playerEnergyMax = 2500;
+
+{
+ missionNamespace setVariable [format ["EPOCH_player%1",_x],EPOCH_defaultVars select _forEachIndex];
+}forEach EPOCH_customVars;
+
+// suppress group chatter
+0 fadeRadio 0;
+enableSentences false;
+enableRadio false;
+player setVariable["BIS_noCoreConversations", true];
diff --git a/Sources/epoch_code/compile/setup/EPOCH_clientRespawn.sqf b/Sources/epoch_code/compile/setup/EPOCH_clientRespawn.sqf
new file mode 100644
index 00000000..1b4e1bca
--- /dev/null
+++ b/Sources/epoch_code/compile/setup/EPOCH_clientRespawn.sqf
@@ -0,0 +1,10 @@
+call EPOCH_clientInit;
+[] spawn EPOCH_masterLoop;
+[5,100] call EPOCH_niteLight;
+
+Epoch_canBeRevived = true;
+
+[] execFSM "\x\addons\a3_epoch_code\system\gender_selection.fsm";
+
+
+true
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/setup/EPOCH_clientRevive.sqf b/Sources/epoch_code/compile/setup/EPOCH_clientRevive.sqf
new file mode 100644
index 00000000..e42a6025
--- /dev/null
+++ b/Sources/epoch_code/compile/setup/EPOCH_clientRevive.sqf
@@ -0,0 +1,32 @@
+//
+_playerObject = _this select 0;
+if !(alive player && alive _playerObject && !isPlayer _playerObject) then {
+ _ply = player;
+ _group = group player;
+ selectPlayer _playerObject;
+ deleteVehicle _ply;
+ // deleteGroup _group;
+
+ Epoch_canBeRevived = false;
+
+ Epoch_personalToken = _this select 1;
+
+ // call EPOCH_clientInit;
+ [] spawn EPOCH_masterLoop;
+ [5, 100] call EPOCH_niteLight;
+
+ closeDialog 0;
+ ("BIS_fnc_respawnCounter" call BIS_fnc_rscLayer) cutText ["","PLAIN"];
+
+ player addEventHandler ["Respawn", {(_this select 0) call EPOCH_clientRespawn}];
+ player addEventHandler ["Put", {(_this select 1) call EPOCH_interact;_this call EPOCH_PutHandler}];
+ player addEventHandler ["Take", {(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck}];
+ player addEventHandler["InventoryClosed", { if !(EPOCH_arr_interactedObjs isEqualTo[]) then{EPOCH_arr_interactedObjs remoteExec["EPOCH_server_save_vehicles", 2]; EPOCH_arr_interactedObjs = []; }; }];
+ player addEventHandler ["InventoryOpened", {_this spawn EPOCH_initUI;locked (_this select 1) in [2, 3]}];
+ player addEventHandler ["Fired", {_this call EPOCH_fnc_playerFired}];
+ player addEventHandler ["Killed", {_this call EPOCH_fnc_playerDeath}];
+} else {
+ deleteVehicle _playerObject;
+};
+
+true call EPOCH_pushCustomVar;
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/setup/EPOCH_client_publicEH.sqf b/Sources/epoch_code/compile/setup/EPOCH_client_publicEH.sqf
new file mode 100644
index 00000000..0e88f9e3
--- /dev/null
+++ b/Sources/epoch_code/compile/setup/EPOCH_client_publicEH.sqf
@@ -0,0 +1,28 @@
+call compile ("
+ '"+(_this select 0)+"' addPublicVariableEventHandler {
+ "+(_this select 0)+" = nil;
+ _data = (_this select 1) select 1;
+ switch ((_this select 1) select 0) do {
+ case "+str(_this select 1)+": { _data call EPOCH_tradeRequest };
+ case "+str(_this select 2)+": { _data call EPOCH_client_repairVehicle };
+ case "+str(_this select 3)+": { [_data,true] call EPOCH_client_lockVehicle };
+ case "+str(_this select 4)+": { [_data,false] call EPOCH_client_lockVehicle };
+ case "+str(_this select 5)+": { _data call EPOCH_client_fillVehicle };
+ case "+str(_this select 6)+": { _data call EPOCH_clientRevive };
+ case "+str(_this select 7)+": { _data call EPOCH_client_earthQuake };
+ case "+str(_this select 8)+": { _data call EPOCH_unitSpawnIncrease };
+ case "+str(_this select 9)+": { (_data select 0) say3D (EPOCH_sounds select (_data select 1)) };
+ case "+str(_this select 10)+": { (_data select 0) switchMove (_data select 1) };
+ case "+str(_this select 11)+": { EPOCH_bankBalance = _data; };
+ case "+str(_this select 12)+": { _data call EPOCH_effectCrypto };
+ case "+str(_this select 13)+": { Epoch_my_Group = []; Epoch_my_GroupUID = '' };
+ case "+str(_this select 14)+": { _data spawn EPOCH_client_rejectPlayer };
+ case "+str(_this select 15)+": { Epoch_my_Group = _data; call EPOCH_Group_update };
+ case "+str(_this select 16)+": { Epoch_my_GroupUID = _data };
+ case "+str(_this select 17)+": { _data call EPOCH_Group_invitePlayer };
+ case "+str(_this select 18)+": { _data call EPOCH_handleServerMessage };
+ case "+str(_this select 19)+": { {missionNamespace setVariable[format['EPOCH_player%1', _x], EPOCH_defaultVars select(EPOCH_customVars find _x)]} forEach['Temp','Hunger','Thirst','Toxicity','Stamina','HitPoints','BloodP']};
+ case "+str(_this select 20)+": { _data call EPOCH_mission_returnObj };
+ };
+ };
+");
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/setup/EPOCH_client_rejectPlayer.sqf b/Sources/epoch_code/compile/setup/EPOCH_client_rejectPlayer.sqf
new file mode 100644
index 00000000..fdc68c7e
--- /dev/null
+++ b/Sources/epoch_code/compile/setup/EPOCH_client_rejectPlayer.sqf
@@ -0,0 +1,4 @@
+if (_this) then {
+ PLAYER_BADHIVE = true;
+ publicVariableServer "PLAYER_BADHIVE";
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/setup/EPOCH_masterLoop.sqf b/Sources/epoch_code/compile/setup/EPOCH_masterLoop.sqf
new file mode 100644
index 00000000..2d26abcc
--- /dev/null
+++ b/Sources/epoch_code/compile/setup/EPOCH_masterLoop.sqf
@@ -0,0 +1,546 @@
+disableSerialization;
+
+_EPOCH_1 = diag_tickTime;
+_EPOCH_10 = diag_tickTime;
+_EPOCH_15 = diag_tickTime;
+_EPOCH_60 = diag_tickTime;
+_EPOCH_300 = diag_tickTime;
+_EPOCH_600 = diag_tickTime;
+
+_prevEquippedItem = [];
+_damagePlayer = damage player;
+_panic = false;
+_prevEnergy = EPOCH_playerEnergy;
+
+// init config data
+_sapperRndChance = ["CfgEpochClient", "sapperRngChance", 100] call EPOCH_fnc_returnConfigEntryV2;
+EPOCH_droneRndChance = ["CfgEpochClient", "droneRngChance", 100] call EPOCH_fnc_returnConfigEntryV2;
+_baseHTLoss = ["CfgEpochClient", "baseHTLoss", 8] call EPOCH_fnc_returnConfigEntryV2;
+_energyCostNV = ["CfgEpochClient", "energyCostNV", 3] call EPOCH_fnc_returnConfigEntryV2;
+_energyRegenMax = ["CfgEpochClient", "energyRegenMax", 5] call EPOCH_fnc_returnConfigEntryV2;
+_energyRange = ["CfgEpochClient", "energyRange", 75] call EPOCH_fnc_returnConfigEntryV2;
+
+EPOCH_chargeRate = 0;
+
+// default data if mismatch
+if (count EPOCH_playerSpawnArray != count EPOCH_spawnIndex) then{
+ { EPOCH_playerSpawnArray pushBack 0 } forEach EPOCH_spawnIndex;
+};
+
+9990 cutRsc ["EpochGameUI","PLAIN",2,false];
+_display = uiNamespace getVariable "EPOCH_EpochGameUI";
+
+_thirst = _display displayCtrl 21201;
+_hunger = _display displayCtrl 21202;
+_broken = _display displayCtrl 21203;
+_oxygen = _display displayCtrl 21204;
+_hazzard = _display displayCtrl 21205;
+_emergency = _display displayCtrl 21206;
+
+{
+ _x ctrlShow false;
+}forEach[_thirst,_hunger,_broken,_oxygen,_hazzard,_emergency];
+
+// find radio
+{
+ if (configName(inheritsFrom(configFile >> "CfgWeapons" >> _x)) == "ItemRadio") exitWith{
+ EPOCH_equippedItem_PVS = [_x, true, player];
+ };
+} forEach assignedItems player;
+
+// lootBubble Init
+_loots = ["CfgEpochClient", "lootClasses", EPOCH_lootClasses] call EPOCH_fnc_returnConfigEntryV2;
+
+_lootClasses = ('CfgBuildingLootPos' call EPOCH_returnConfig) call Bis_fnc_getCfgSubClasses;
+_lootClasses = _lootClasses - ["Default"];
+
+_lootBubble = {
+ private["_pos", "_others", "_objects", "_nearObjects", "_building", "_travelDir", "_lootDist", "_xPos", "_yPos", "_lootLoc", "_playerPos", "_distanceTraveled", "_class", "_dir", "_color", "_colors", "_item", "_randomColor", "_positions", "_lootBiasPos", "_lootType", "_config"];
+ _playerPos = getPosATL vehicle player;
+ _distanceTraveled = EPOCH_lastPlayerPos distance _playerPos;
+ if (_distanceTraveled > 10 && _distanceTraveled < 200) then {
+ _travelDir = [EPOCH_lastPlayerPos, _playerPos] call BIS_fnc_dirTo;
+ _lootDist = 30 + _distanceTraveled;
+ _xPos = (_playerPos select 0) + (_lootDist * sin(_travelDir));
+ _yPos = (_playerPos select 1) + (_lootDist * cos(_travelDir));
+ _lootLoc = [_xPos, _yPos, 0];
+
+ _objects = nearestObjects[_lootLoc, _lootClasses, 30];
+ _config = 'CfgEpochClient' call EPOCH_returnConfig;
+ _buildingJammerRange = getNumber(_config >> "buildingJammerRange");
+ if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; };
+
+ _jammer = nearestObjects [_lootLoc, ["PlotPole_EPOCH"], _buildingJammerRange];
+
+ if (!(_objects isEqualTo[]) && (_jammer isEqualTo[])) then {
+
+ _building = _objects select(floor(random(count _objects)));
+
+ if !(_building in EPOCH_LootedBlds) then {
+
+ _pos = getPosATL _building;
+ _others = _building nearEntities[["Epoch_Male_F", "Epoch_Female_F"], 15];
+ if (_others isEqualTo[]) then {
+
+ _nearObjects = nearestObjects[_pos, ["WH_Loot", "Animated_Loot"], 35];
+ if (_nearObjects isEqualTo[]) then {
+
+ _config = ('CfgBuildingLootPos' call EPOCH_returnConfig) >> (typeOf _building);
+
+ if (isClass(_config)) then {
+
+ _lootBiasPos = getNumber(_config >> "lootBiasPos");
+ _lootType = getText(_config >> "lootType");
+
+ EPOCH_LootedBlds pushBack _building;
+ if (count EPOCH_LootedBlds >= 20) then {
+ EPOCH_LootedBlds deleteAt 0;
+ };
+
+ {
+ _positions = [] + getArray(_config >> (_x select 0));
+ if !(_positions isEqualTo[]) then {
+ _class = _x select 1;
+ _randomColor = _x select 2;
+ {
+
+ if ((random 100) < _lootBiasPos) then {
+
+ _pos = _building modelToWorld(_x select 0);
+
+ if (nearestObjects[_pos, ["WH_Loot", "Animated_Loot"], 2] isEqualTo[]) then {
+
+ if ((typeName _class) == "ARRAY") then {
+ _class = _class select(floor(random(count _class)));
+ };
+
+ _dir = (_x select 1) + (getDir _building);
+ if (_dir > 360) then {
+ _dir = _dir - 360;
+ };
+
+ // Temp for now till we get more
+ if (_lootType == "mil" && _class == "Bed_EPOCH") then {
+ _class = "Bunk_EPOCH";
+ };
+
+ _item = createVehicle[_class, _pos, [], 0.0, "CAN_COLLIDE"];
+ _item setDir _dir;
+
+ // force item to ground level is resulting z pos is below ground.
+ if (_pos select 2 < 0) then {
+ _pos set[2, 0];
+ };
+
+ if (surfaceIsWater _pos) then {
+ _item setPosASL _pos;
+ } else {
+ _item setPosATL _pos;
+ };
+
+ if (typeName _randomColor isEqualTo "STRING") then {
+ _randomColor = _randomColor isEqualTo "true";
+ };
+
+ if (_randomColor) then {
+ _colors = [] + getArray(configFile >> "CfgVehicles" >> _class >> "availableTextures");
+ if !(_colors isEqualTo[]) then {
+ _color = _colors select floor(random(count _colors));
+ _item setObjectTextureGlobal[0, _color];
+ };
+ };
+ };
+ };
+ }forEach _positions;
+ };
+ }forEach _loots;
+ };
+ };
+ };
+ };
+ };
+ };
+ EPOCH_lastPlayerPos = _playerPos;
+};
+
+// [control,bool] call _fadeUI;
+_fadeUI = {
+ private ["_ctrl"];
+ _ctrl = _this select 0;
+ if (_this select 1) then {
+ if (ctrlFade _ctrl == 0) then {
+ _ctrl ctrlSetFade 1;
+ _ctrl ctrlCommit 0.5;
+ };
+ if (ctrlFade _ctrl == 1) then {
+ _ctrl ctrlSetFade 0;
+ _ctrl ctrlCommit 0.5;
+ };
+ } else {
+ if (ctrlFade _ctrl != 1) then {
+ _ctrl ctrlSetFade 0;
+ _ctrl ctrlCommit 0;
+ };
+ };
+};
+
+// Master Loop Start
+while {alive player} do {
+
+ _tickTime = diag_tickTime;
+
+ // 1 second
+ if ((_tickTime - _EPOCH_1) > 1) then {
+
+ _EPOCH_1 = _tickTime;
+
+ // current target
+
+ _currentTarget = objNull;
+ if (!isNull cursorTarget && !(EPOCH_target isEqualTo cursorTarget)) then {
+ _distance = player distance cursorTarget;
+ if (_distance < 9) then {
+ if (cursorTarget isKindOf "ThingX" || cursorTarget isKindOf "Constructions_static_F" || cursorTarget isKindOf "Constructions_foundation_F" || cursorTarget isKindOf "WeaponHolder" || cursorTarget isKindOf "AllVehicles" || cursorTarget isKindOf "PlotPole_EPOCH") then{
+ if (cursorTarget isKindOf "Animal_Base_F") then {
+ if !(alive cursorTarget) then {
+ _currentTarget = cursorTarget;
+ };
+ } else {
+ _currentTarget = cursorTarget;
+ };
+ };
+ };
+ };
+ EPOCH_currentTarget = _currentTarget;
+
+ _increaseStamina = false;
+ _vehicle = vehicle player;
+ if (_vehicle == player) then {
+ _val = log(abs(speed player));
+ if (_val>0.7) then {
+ EPOCH_playerStamina = (EPOCH_playerStamina - (_val/4)) max 0;
+ } else {
+ _increaseStamina = true;
+ };
+ } else {
+ if (EPOCH_buildMode > 0) then {
+ EPOCH_buildMode = 0;
+ EPOCH_snapDirection = 0;
+ hintsilent "BUILD MODE: DISABLED";
+ EPOCH_Target = objNull;
+ // EPOCH_SURVEY = [];
+ };
+ _increaseStamina = true;
+
+ switch (typeOf _vehicle) do {
+ case "jetski_epoch": {
+ _clock_hour10 = floor ((date select 3)/10);
+ _clock_minute10 = floor ((date select 4)/10);
+ {
+ _vehicle setObjectTexture [_forEachIndex,_x];
+ }forEach[
+ format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",_clock_hour10],
+ format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",(date select 3)-(_clock_hour10*10)],
+ format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",_clock_minute10],
+ format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",(date select 4)-(_clock_minute10*10)],
+ format["\x\addons\a3_epoch_vehicles\data\fuel%1_ca.paa",floor(fuel _vehicle*10)]
+ ];
+ };
+ case "ebike_epoch": {
+ {
+ _vehicle setObjectTexture [_forEachIndex,_x];
+ }forEach[
+ format["\x\addons\a3_epoch_vehicles\data\speed%1_ca.paa",floor(speed _vehicle/9) max 0],
+ format["\x\addons\a3_epoch_vehicles\data\energ%1_ca.paa",floor(fuel _vehicle*14)]
+ ];
+ };
+ };
+ };
+
+ _envCold = EPOCH_playerTemp <= 95.0;
+ _envHot = EPOCH_playerTemp >= 106.7;
+ _hungry = EPOCH_playerHunger <= 0;
+ _thirsty = EPOCH_playerThirst <= 0;
+ _warnbloodPressure = EPOCH_playerBloodP > 120;
+
+ _thirst ctrlShow (EPOCH_playerThirst <= 625);
+ if (ctrlShown _thirst) then {
+ [_thirst,_thirsty] call _fadeUI;
+ _thirstScale = linearConversion [0,EPOCH_playerThirst,2500,0.01,1];
+ _thirst ctrlSetTextColor [_thirstScale, _thirstScale, 0.9, 1];
+ };
+
+ _hunger ctrlShow (EPOCH_playerHunger <= 1250);
+ if (ctrlShown _hunger) then {
+ [_hunger,_hungry] call _fadeUI;
+ _hungerScale = linearConversion [0,EPOCH_playerHunger,5000,0.01,1];
+ _hunger ctrlSetTextColor [1, _hungerScale, _hungerScale, 1];
+ };
+
+ _playerOxygen = getOxygenRemaining player;
+ _oxygen ctrlShow (_playerOxygen < 1);
+ if (ctrlShown _oxygen) then {
+ [_oxygen,(_playerOxygen <= 0.55)] call _fadeUI;
+ _oxygen ctrlSetTextColor [1, _playerOxygen, _playerOxygen, 1];
+ };
+
+ _hazzard ctrlShow (EPOCH_playerToxicity > 1);
+ if (ctrlShown _hazzard) then {
+ [_hazzard,(EPOCH_playerToxicity >= 55)] call _fadeUI;
+ _toxicScale = 1-linearConversion [0,EPOCH_playerToxicity,100,0.01,1];
+ _hazzard ctrlSetTextColor [_toxicScale, 1, _toxicScale, 1];
+ };
+
+ _broken ctrlShow ((player getHitPointDamage "HitLegs") >= 0.5);
+ if (ctrlShown _broken) then {
+ [_broken,true] call _fadeUI;
+ };
+
+ if (_envCold || _envHot || _hungry || _thirsty) then {
+ if (_envHot || _envCold) then {
+ player setFatigue 1;
+ };
+ EPOCH_playerBloodP = (EPOCH_playerBloodP + 0.05) min 190;
+ _increaseStamina = false;
+ } else {
+ if (EPOCH_playerStamina > 0) then {
+ if !(_panic) then {
+ if (!_warnbloodPressure) then {
+ player setFatigue 0;
+ };
+ EPOCH_playerBloodP = EPOCH_playerBloodP - 1 max 100;
+ };
+ };
+ };
+
+ _critical = (damage player >= 0.7 || _warnbloodPressure);
+ _emergency ctrlShow _critical;
+ if (ctrlShown _emergency) then {
+ [_emergency,(EPOCH_playerBloodP > 140)] call _fadeUI;
+ _emergencyScale = 1-linearConversion [0,EPOCH_playerBloodP,180,0.01,1];
+ _emergency ctrlSetTextColor [1, _emergencyScale, _emergencyScale, 1];
+ };
+
+ if (EPOCH_playerBloodP >= 180) then {
+ true call EPOCH_pushCustomVar;
+ };
+ if (_increaseStamina && (getFatigue player) == 0) then {
+ EPOCH_playerStamina = (EPOCH_playerStamina + 0.5) min EPOCH_playerStaminaMax;
+ };
+ if (EPOCH_debugMode) then {
+ call EPOCH_debugMonitor;
+ };
+
+ call EPOCH_TradeLoop;
+
+ //Good bye onEachFrame hacks ;)
+ onEachFrame EPOCH_onEachFrame;
+ };
+
+ // 10 seconds
+ if ((_tickTime - _EPOCH_10) > 10) then {
+
+ _EPOCH_10 = _tickTime;
+
+ if !(EPOCH_arr_interactedObjs isEqualTo[]) then {
+ EPOCH_arr_interactedObjs remoteExec["EPOCH_server_save_vehicles", 2];
+ EPOCH_arr_interactedObjs = [];
+ };
+
+ if (damage player != _damagePlayer) then {
+ if (alive player) then {
+ true call EPOCH_pushCustomVar;
+ _damagePlayer = damage player;
+ };
+ };
+
+ if ((rating player) < 0) then {
+ player addRating abs(rating player);
+ };
+
+ // calculate total available power
+ // 1. number of power production devices within range 75m
+
+ // find share of power based on factors
+ // 1. number of players
+ // 2. Other sources of drain (Lights)
+
+ _energyValue = EPOCH_chargeRate min _energyRegenMax;
+ _vehicle = vehicle player;
+ if (_vehicle != player && isEngineOn _vehicle) then {
+ _energyValue = _energyValue + 5;
+ };
+
+ if (currentVisionMode player == 1) then { //NV enabled
+ _energyValue = _energyValue - _energyCostNV;
+ if (EPOCH_playerEnergy == 0) then {
+ player action["nvGogglesOff", player];
+ };
+ };
+
+ EPOCH_playerEnergy = ((EPOCH_playerEnergy + _energyValue) min EPOCH_playerEnergyMax) max 0;
+
+ if !(EPOCH_playerEnergy isEqualTo _prevEnergy) then {
+ 9993 cutRsc["EpochGameUI3", "PLAIN", 0, false];
+ _display3 = uiNamespace getVariable "EPOCH_EpochGameUI3";
+ _energyDiff = round(EPOCH_playerEnergy - _prevEnergy);
+ _diffText = if (_energyDiff > 0) then {format["+%1",_energyDiff]} else {format["%1",_energyDiff]};
+ // hint str [_energyValue,_prevEnergy,EPOCH_playerEnergy];
+ (_display3 displayCtrl 21210) ctrlSetText format["%1/%2 %3", round(EPOCH_playerEnergy), EPOCH_playerEnergyMax, _diffText];
+ _prevEnergy = EPOCH_playerEnergy;
+ };
+
+ if (EPOCH_playerEnergy == 0) then {
+ if (EPOCH_buildMode > 0) then {
+ EPOCH_buildMode = 0;
+ EPOCH_snapDirection = 0;
+ _dt = ["Build Mode Disabled: Need Energy< / t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ EPOCH_Target = objNull;
+ EPOCH_Z_OFFSET = 0;
+ EPOCH_X_OFFSET = 0;
+ EPOCH_Y_OFFSET = 5;
+ };
+ };
+
+ _attackers = player nearEntities[["Snake_random_EPOCH", "GreatWhite_F", "Epoch_Cloak_F"], 30];
+ if !(_attackers isEqualTo[]) then {
+ (_attackers select 0) call EPOCH_client_bitePlayer;
+ _panic = true;
+ } else {
+ // custom poision
+ _toxicObjs = player nearobjects["SmokeShellCustom", 6];
+ if!(_toxicObjs IsEqualTo[]) then {
+ (_toxicObjs select 0) call EPOCH_client_bitePlayer;
+ _panic = true;
+ } else {
+ _panic = false;
+ };
+ };
+
+ call EPOCH_fnc_Weather;
+
+ // Hunger / Thirst
+ _HTlossRate = _baseHTLoss;
+ if (EPOCH_playerStamina < 100) then {
+ if ((getFatigue player) > 0) then {
+ _HTlossRate = _HTlossRate + (_HTlossRate*(getFatigue player));
+ };
+ } else {
+ _HTlossRate = (_HTlossRate / 2);
+ };
+
+ EPOCH_playerHunger = (EPOCH_playerHunger - _HTlossRate) max 0;
+ EPOCH_playerThirst = (EPOCH_playerThirst - _HTlossRate) max 0;
+
+ call _lootBubble;
+
+ EPOCH_playerStaminaMax = (100 * (round(EPOCH_playerAliveTime/360)/10)) min 2500;
+ };
+
+ if ((_tickTime - _EPOCH_15) > 15) then {
+ _EPOCH_15 = _tickTime-10;
+
+ if !(_prevEquippedItem isEqualTo EPOCH_equippedItem_PVS) then {
+ _EPOCH_15 = _tickTime;
+ _prevEquippedItem = EPOCH_equippedItem_PVS;
+ publicVariableServer "EPOCH_equippedItem_PVS";
+ };
+ };
+
+ if ((_tickTime - _EPOCH_60) > 60) then {
+
+ _EPOCH_60 = _tickTime;
+ _position = getPosATL player;
+
+ EPOCH_nearestLocations = nearestLocations[player, ["NameCityCapital", "NameCity", "Airport"], 300];
+
+ if !(surfaceIsWater _position) then {
+ if (EPOCH_nearestLocations isEqualTo []) then{
+ if (count(_position nearEntities["Animal_Base_F", 800]) < 2) then {
+ // diag_log "DEBUG: Attempt to spawn animal";
+ call EPOCH_client_loadAnimalBrain;
+ };
+ };
+ } else {
+ // spawn shark if player is deep water and not in vehicle
+ if (vehicle player == player) then{
+ if (((_position vectorDiff getPosASL player) select 2) > 50) then {
+ "GreatWhite_F" call EPOCH_unitSpawn;
+ };
+ };
+ };
+
+
+ // energy Charge from nearby power plants
+ _powerSources = nearestObjects[player, ["Land_spp_Tower_F","Land_wpp_Turbine_V2_F","Land_wpp_Turbine_V1_F","SolarGen_EPOCH"], _energyRange];
+ if !(_powerSources isEqualTo[]) then {
+ _totalCapacity = 0;
+ {
+ _powerClass = typeOf _x;
+ _powerCap = getNumber(configFile >> "CfgVehicles" >> _powerClass >> "powerCapacity");
+ _powerType = getNumber(configFile >> "CfgVehicles" >> _powerClass >> "powerType");
+ if (_powerCap == 0) then {
+ _powerCap = 100;
+ };
+ if (_powerType == 1) then {
+ if (sunOrMoon < 1) then {
+ _powerCap = _powerCap/2;
+ };
+ };
+ _totalCapacity = _totalCapacity + _powerCap;
+ } forEach _powerSources;
+ _players = player nearEntities[["Epoch_Male_F", "Epoch_Female_F"], _energyRange];
+ EPOCH_chargeRate = ceil(_totalCapacity / (count _players));
+ EPOCH_nearPower = true;
+ } else {
+ EPOCH_nearPower = false;
+ EPOCH_chargeRate = 0;
+ };
+
+ EPOCH_playerAliveTime = round(EPOCH_playerAliveTime + (_tickTime - EPOCH_clientAliveTimer));
+ EPOCH_clientAliveTimer = _tickTime;
+ };
+
+ if ((_tickTime - _EPOCH_300) > 300) then {
+ _EPOCH_300 = _tickTime;
+ false call EPOCH_pushCustomVar;
+ };
+
+ if ((_tickTime - _EPOCH_600) > 600) then{
+ _EPOCH_600 = _tickTime;
+
+ if ((EPOCH_playerSpawnArray select(EPOCH_spawnIndex find "Epoch_Sapper_F")) <= 0) then{
+ _sapperChance = 1 + (EPOCH_playerSoiled / 2);
+ if !(EPOCH_nearestLocations isEqualTo[]) then{
+ _sapperChance = _sapperChance + 2;
+ };
+ // 1% - 55% if soiled (+ 2% if in city) chance to spawn sapper every 10 minutes
+ if (random _sapperRndChance < _sapperChance) then{
+ "Epoch_Sapper_F" call EPOCH_unitSpawnIncrease;
+ };
+ };
+
+ _spawnUnits = [];
+ {
+ if (_x > 0) then{
+ _spawnUnits pushBack(EPOCH_spawnIndex select _forEachIndex);
+ };
+ } forEach EPOCH_playerSpawnArray;
+
+ // test spawning one antagonist every 10 minutes select one unit at random to spawn
+
+ if !(_spawnUnits isEqualTo[]) then{
+ (_spawnUnits select(floor random(count _spawnUnits))) call EPOCH_unitSpawn;
+ };
+ };
+
+
+ if (vehicle player != player) then {
+ if (isNull EPOCH_currentVehicle) then {
+ EPOCH_currentVehicle = vehicle player;
+ EPOCH_currentVehicle addEventHandler["GetOut", "_this call EPOCH_antiWall"];
+ };
+ };
+
+ uiSleep 0.1;
+};
diff --git a/Sources/epoch_code/compile/startFlock.sqf b/Sources/epoch_code/compile/startFlock.sqf
new file mode 100644
index 00000000..cfd9fc9c
--- /dev/null
+++ b/Sources/epoch_code/compile/startFlock.sqf
@@ -0,0 +1,149 @@
+//
+//Flocking (Emergent) Behaviour AI Test / Demo
+//
+//An attempt to make UAVs fly with flock / bird / fly swarm like behaviour.
+//Using the three rules of flocking behaviour with some modifications for Arma
+//Currently only controls X & Y, Z to be added..
+//
+//USAGE
+//
+// As it's only testing at the moment you need to call this sqf (startFlock.sqf) with []execVM "\x\addons\epoch_code\compile\startFlock.sqf"
+//
+//CONTROLS:
+//
+//INS / DEL - Alignment Up / Down
+//Home / End - Cohesion Up / Down
+//PG Up / Pg Dn - Separate up / Down
+//Up / Down Arrow - Speed Up / Down
+//Left / Right Arrow - Script Speed Up / Down
+//
+//Notes
+//
+//Once you have a flock moving away try adding another. Flock spawns above player.
+
+_disableAI = {
+ {_this disableAI _x}forEach["TARGET","AUTOTARGET","FSM"];
+};
+_targetPos = getPosATL player;
+_targetPos set[2, 42];
+axeUAV = createVehicle["I_UAV_01_F", _targetPos, [], 56, "FLY"];
+addToRemainsCollector[axeUAV];
+axeUAV allowdamage false;
+axeUAV flyInHeight 42;
+_grp = createGroup RESISTANCE;
+_driver = _grp createUnit["I_UAV_AI", position axeUAV, [], 0, "CAN_COLLIDE"];
+_driver moveInAny axeUAV;
+axeUAV call _disableAI;
+axeHandle = [axeUAV] execFSM "\x\addons\epoch_code\system\flocking.fsm";
+for [{_i=0}, {_i<12}, {_i=_i+1}] do
+{
+_targetPos = getPosATL player;
+_targetPos set[2, 42];
+_uav = createVehicle["I_UAV_01_F", _targetPos, [], 56, "FLY"];
+addToRemainsCollector[_uav];
+_uav flyInHeight 42;
+_grp = createGroup RESISTANCE;
+_driver = _grp createUnit["I_UAV_AI", position _uav, [], 0, "CAN_COLLIDE"];
+_driver moveInAny _uav;
+_uav allowdamage false;
+_uav call _disableAI;
+ [_uav] execFSM "\x\addons\epoch_code\system\flocking.fsm";
+};
+
+axeLineStart = getPosATL player;
+axeLineFinish = getPosATL player;
+onEachFrame {
+ drawLine3D [axeLineStart, axeLineFinish, [1,1,1,1]];
+};
+
+EPOCH_KeyDownCustom = {
+ _dikCode = _this select 1;
+ _shift = _this select 2;
+ _ctrl = _this select 3;
+ _alt = _this select 4;
+_handled = false;
+
+ switch (_dikCode) do {
+
+ case 0xD2: {
+ axeWeightAlign = axeWeightAlign + 0.01;
+ hint format ["ALIGN: %1", axeWeightAlign];
+_handled = true;
+ };
+
+ case 0xD3: {
+ axeWeightAlign = axeWeightAlign - 0.01;
+ hint format ["ALIGN: %1", axeWeightAlign];
+_handled = true;
+ };
+
+ case 0xC7: {
+ axeWeightCohese = axeWeightCohese + 0.01;
+ hint format ["COHESE: %1", axeWeightCohese];
+_handled = true;
+ };
+
+ case 0xCF: {
+ axeWeightCohese = axeWeightCohese - 0.01;
+ hint format ["COHESE: %1", axeWeightCohese];
+_handled = true;
+ };
+
+ case 0xC9: {
+ axeWeightSpearate = axeWeightSpearate + 0.01;
+ hint format ["SEPARATE: %1", axeWeightSpearate];
+_handled = true;
+ };
+
+ case 0xD1: {
+ axeWeightSpearate = axeWeightSpearate - 0.01;
+ hint format ["SEPARATE: %1", axeWeightSpearate];
+_handled = true;
+ };
+
+ case 0xC8: {
+ axeSpeed = axeSpeed + 0.1;
+ hint format ["SPEED: %1", axeSpeed];
+_handled = true;
+ };
+
+ case 0xD0: {
+ axeSpeed = axeSpeed - 0.1;
+ hint format ["SPEED: %1", axeSpeed];
+_handled = true;
+ };
+
+ case 0xCB: {
+ axeLoopTime = axeLoopTime + 0.05;
+ hint format ["RESPONSE: %1", axeLoopTime];
+_handled = true;
+ };
+
+
+ case 0xCD: {
+ axeLoopTime = axeLoopTime - 0.05;
+ hint format ["RESPONSE: %1", axeLoopTime];
+_handled = true;
+ };
+
+
+
+ };
+_handled
+};
+
+
+[] spawn {
+ (findDisplay 46) displayRemoveAllEventHandlers "KeyDown";
+ (findDisplay 46) displayAddEventHandler["KeyDown",{_this call EPOCH_KeyDownCustom}];
+};
+
+while {true}
+do
+{
+if (!isNull player) then{
+
+ onMapSingleClick "player setpos _pos;true;";
+
+};
+};
diff --git a/Sources/epoch_code/compile/traders/EPOCH_NPCTraderMenuFilter.sqf b/Sources/epoch_code/compile/traders/EPOCH_NPCTraderMenuFilter.sqf
new file mode 100644
index 00000000..3283eae5
--- /dev/null
+++ b/Sources/epoch_code/compile/traders/EPOCH_NPCTraderMenuFilter.sqf
@@ -0,0 +1,160 @@
+private ["_item","_index","_itemCount","_itemOfferCount","_config","_name","_picture","_type","_vehicles","_sizeOut","_offerArray","_itemName","_itemIcon","_qty","_items","_qtys","_aiItems","_filterArray","_filterWeapons","_filterMagazines","_filterItems","_filterVehicle","_slot","_control","_isPlayerFilter"];
+
+disableSerialization;
+
+if !(isNull EPOCH_lastNPCtradeTarget) then {
+
+ _slot = EPOCH_lastNPCtradeTarget getVariable["AI_SLOT", -1];
+
+ _control = _this select 0;
+
+ _isPlayerFilter = (ctrlIDC _control == 42100);
+
+ _index = _this select 1;
+
+ if (_slot != -1) then {
+
+ _filterArray = [
+ [true,true,true,true], // all
+ // [true,false,false,false], // weapons only
+ [false,true,false,false], // mags only
+ [false,false,true,false], // items only
+ [false,false,false,true] // vehicles only
+ ];
+
+ //_filterWeapons = ((_filterArray select _index) select 0);
+ _filterMagazines = ((_filterArray select _index) select 1);
+ _filterItems = ((_filterArray select _index) select 2);
+ _filterVehicle = ((_filterArray select _index) select 3);
+
+ if (_isPlayerFilter) then {
+
+ _sizeOut = lbSize 41501;
+ _offerArray = [];
+ if (_sizeOut > 0) then {
+ for "_i" from 0 to (_sizeOut - 1) do {
+ _item = lbData [41501, _i];
+ _offerArray pushBack _item;
+ };
+ };
+
+ lbClear 41500;
+
+ if (_filterMagazines) then {
+ {
+ // make sure this exceeds the item count already offered
+ _item = _x;
+ _itemCount = {_x == _item} count magazines player;
+ _itemOfferCount = {_x == _item} count _offerArray;
+ if (_itemCount > _itemOfferCount) then {
+ _offerArray pushBack _item;
+ _index = lbAdd [41500, _x call EPOCH_itemDisplayName];
+ lbSetData [41500, _index, _x];
+ lbSetPicture [41500, _index, _x call EPOCH_itemPicture];
+ };
+ } forEach magazines player;
+ };
+
+ /* not used currently
+ if (_filterWeapons) then {
+ };
+ */
+
+ if (_filterItems) then {
+ {
+ _item = _x;
+ _itemCount = {_x == _item} count items player;
+ _itemOfferCount = {_x == _item} count _offerArray;
+ if (_itemCount > _itemOfferCount) then {
+ _offerArray pushBack _item;
+ _index = lbAdd [41500, _x call EPOCH_itemDisplayName];
+ lbSetData [41500, _index, _x];
+ lbSetPicture [41500, _index, _x call EPOCH_itemPicture];
+ };
+ } forEach items player;
+ };
+
+ if (_filterVehicle) then {
+ _vehicles = player nearEntities [["LandVehicle","Ship","Air","Tank"], 30];
+ {
+ if (local _x) then {
+ _type = typeOf _x;
+ _itemCount = { typeOf _x == _type } count _vehicles;
+ _itemOfferCount = { _x == _type } count _offerArray;
+ if (_itemCount > _itemOfferCount) then {
+ _offerArray pushBack _type;
+
+ _config = configFile >> "CfgVehicles" >> _type;
+
+ _name = getText(_config >> "displayName");
+ _picture = getText(_config >> "picture");
+
+ _index = lbAdd[41500, _name];
+ lbSetData[41500, _index, _type];
+ lbSetPicture[41500, _index, _picture];
+ };
+ };
+ } forEach _vehicles;
+ };
+
+ } else {
+
+ lbClear 41503;
+
+ _sizeOut = lbSize 41502;
+ _offerArray = [];
+ if (_sizeOut > 0) then {
+ for "_i" from 0 to (_sizeOut - 1) do {
+ _item = lbData [41502, _i];
+ _offerArray pushBack _item;
+ };
+ };
+ _aiItems = EPOCH_lastNPCtradeTarget getVariable["AI_ITEMS", []];
+ if ((count _aiItems) == 2) then {
+ _items = _aiItems select 0;
+ _qtys = _aiItems select 1;
+ {
+
+ _item = _x;
+ _itemName = "";
+ _itemIcon = "";
+ if ([_item, "CfgVehicles"] call EPOCH_fnc_isAny) then {
+ if (_filterVehicle) then {
+ _itemName = getText(configfile >> "CfgVehicles" >> _item >> "DisplayName");
+ _itemIcon = getText(configfile >> "CfgVehicles" >> _item >> "picture");
+ };
+ } else {
+ if ([_item, "CfgWeapons"] call EPOCH_fnc_isAny) then {
+ if (_filterItems) then {
+ _itemName = getText(configfile >> "CfgWeapons" >> _item >> "DisplayName");
+ _itemIcon = getText(configfile >> "CfgWeapons" >> _item >> "picture");
+ };
+ } else {
+ if ([_item, "CfgMagazines"] call EPOCH_fnc_isAny) then {
+ if (_filterMagazines) then {
+ _itemName = getText(configfile >> "CfgMagazines" >> _item >> "DisplayName");
+ _itemIcon = getText(configfile >> "CfgMagazines" >> _item >> "picture");
+ };
+ };
+ };
+ };
+ if (_itemName != "") then {
+
+ _qty = ((_qtys select _forEachIndex) - ({_x == _item} count _offerArray));
+ if (_qty > 0) then {
+
+ // _offerArray pushBack _item;
+ _index = lnbAddRow[41503, ["", str(_qty), _itemName]];
+ lnbSetData [41503, [_index,0], _item];
+ lnbSetValue [41503, [_index,0], _qty];
+ lnbSetPicture [41503, [_index,0], _itemIcon];
+ };
+ };
+
+ } forEach _items;
+ };
+ };
+ };
+} else {
+ closeDialog 0;
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/traders/EPOCH_buildingInteract.sqf b/Sources/epoch_code/compile/traders/EPOCH_buildingInteract.sqf
new file mode 100644
index 00000000..12ec6a43
--- /dev/null
+++ b/Sources/epoch_code/compile/traders/EPOCH_buildingInteract.sqf
@@ -0,0 +1,55 @@
+
+
+lbClear 1550;
+
+_class = configFile >> "CfgVehicles" >> (typeOf EPCH);
+
+if (isclass _class) then {
+
+ _useractions = _class >> "UserActions";
+ if (isclass _useractions) then {
+
+ _uniqueActions = [];
+
+ for "_u" from 0 to (count _useractions - 1) do {
+
+ _action = _useractions select _u;
+ _displayname = gettext (_action >> "displayname");
+
+ _position = gettext (_action >> "position");
+ if !(_position in _uniqueActions) then {
+ _uniqueActions pushBack _position;
+ };
+
+ _condition = gettext (_action >> "condition");
+ _statement = gettext (_action >> "statement");
+
+ _condition = [_condition,"this","EPCH"] call EPOCH_replaceWord;
+ _statement = [_statement,"this","EPCH"] call EPOCH_replaceWord;
+
+ if (call compile _condition) then {
+ _index = lbAdd[1550,_displayname];
+ lbSetData [1550, _index,_statement];
+ };
+ };
+
+ {
+ _doorIndex = _forEachIndex + 1;
+ _disabledDoor = EPCH getVariable [format["bis_disabled_Door_%1",_doorIndex],0];
+
+ //diag_log format["DEBUG DOORS: %1 %2", _doorIndex, _disabledDoor];
+
+ if (_disabledDoor == 0) then {
+ _index = lbAdd[1550,"Lock Door"];
+ _unlock = format["EPCH setVariable ['bis_disabled_Door_%1',1,true];",_doorIndex];
+ lbSetData [1550, _index,_unlock];
+ } else {
+ _index = lbAdd[1550,"Unlock Door"];
+ _unlock = format["EPCH setVariable ['bis_disabled_Door_%1',0,true];",_doorIndex];
+ lbSetData [1550, _index,_unlock];
+ };
+
+ } foreach _uniqueActions;
+
+ };
+};
diff --git a/Sources/epoch_code/compile/traders/EPOCH_makep2pTrade.sqf b/Sources/epoch_code/compile/traders/EPOCH_makep2pTrade.sqf
new file mode 100644
index 00000000..db99edc3
--- /dev/null
+++ b/Sources/epoch_code/compile/traders/EPOCH_makep2pTrade.sqf
@@ -0,0 +1,3 @@
+// get trade items
+
+player setVariable ["Accept", true, true];
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd.sqf b/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd.sqf
new file mode 100644
index 00000000..e2543dba
--- /dev/null
+++ b/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd.sqf
@@ -0,0 +1,104 @@
+private ["_uiItem","_item","_worth","_cryptoCount","_control","_selected","_index","_sizeOut","_array"];
+if !(isNull EPOCH_lastNPCtradeTarget) then {
+
+ _control = _this select 0;
+ _selected = _this select 1;
+ _allowAdd = true;
+ _stockLimit = false;
+ _uiItem = (_selected select 0) lbData (_selected select 1);
+
+ _config = 'CfgPricing' call EPOCH_returnConfig;
+ if (isClass(_config >> _uiItem)) then{
+
+ if !(_control in[41500, 41503]) then {
+
+ // limit adding more if item is over stocked
+ if (_control == 41501) then {
+ _slot = EPOCH_lastNPCtradeTarget getVariable["AI_SLOT", -1];
+ _aiItems = EPOCH_lastNPCtradeTarget getVariable["AI_ITEMS", [[], []]];
+ _itemClasses = _aiItems select 0;
+ _itemQtys = _aiItems select 1;
+
+ // find item and get current qty
+ _qtyIndex = _itemClasses find _uiItem;
+ if (_qtyIndex != -1) then {
+ // TODO allow config here
+ if (_itemQtys select _qtyIndex >= 100) then {
+ _stockLimit = true;
+ _allowAdd = false;
+ };
+ };
+ };
+
+ if (_uiItem isKindOf "Air" || _uiItem isKindOf "Ship" || _uiItem isKindOf "LandVehicle" || _uiItem isKindOf "Tank") then {
+
+ // check if a vehicle is already on the list
+ _sizeOut = lbSize 41501;
+ if (_sizeOut > 0) then {
+ for "_i" from 0 to(_sizeOut - 1) do {
+ _item = lbData[41501, _i];
+ if (_item isKindOf "Air" || _item isKindOf "Ship" || _item isKindOf "LandVehicle" || _item isKindOf "Tank") exitWith{
+ _allowAdd = false;
+ };
+ };
+ };
+ _sizeOut = lbSize 41502;
+ if (_sizeOut > 0) then {
+ for "_i" from 0 to(_sizeOut - 1) do {
+ _item = lbData[41502, _i];
+ if (_item isKindOf "Air" || _item isKindOf "Ship" || _item isKindOf "LandVehicle" || _item isKindOf "Tank") exitWith{
+ _allowAdd = false;
+ };
+ };
+ };
+ // disallow adding item to list of already one
+ };
+ };
+
+ if (_allowAdd) then {
+ _index = lbAdd[_control, ((_selected select 0) lbText(_selected select 1))];
+ lbSetData[_control, _index, _uiItem];
+
+ lbSetPicture[_control, _index, ((_selected select 0) lbPicture(_selected select 1))];
+ (_selected select 0) lbDelete(_selected select 1);
+
+ _cryptoCount = 0;
+ _sizeOut = lbSize 41501;
+ //_array = [];
+ if (_sizeOut > 0) then {
+ for "_i" from 0 to(_sizeOut - 1) do {
+ _item = lbData[41501, _i];
+ //_array pushBack _item;
+ _worth = getNumber(_config >> _item >> "price");
+ _cryptoCount = _cryptoCount + _worth;
+ };
+ };
+ ctrlSetText[41004, (format["%1 Krypto", _cryptoCount])];
+
+ _cryptoCount = 0;
+ _sizeOut = lbSize 41502;
+ //_array = [];
+ if (_sizeOut > 0) then {
+ for "_i" from 0 to(_sizeOut - 1) do {
+ _item = lbData[41502, _i];
+ //_array pushBack _item;
+ _itemWorth = getNumber(_config >> _item >> "price");
+ _itemTax = getNumber(_config >> _item >> "tax");
+ _tax = _itemWorth * (EPOCH_taxRate + _itemTax);
+ _itemWorth = ceil(_itemWorth + _tax);
+ //diag_log format["_finalWorth %1", _finalWorth];
+ _cryptoCount = _cryptoCount + _itemWorth;
+ };
+ };
+ ctrlSetText[41005, (format["%1 Krypto", _cryptoCount])];
+ } else {
+ if (_stockLimit) then{
+ _dt = ["Trader has the maximum amount of this item", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ } else {
+ _dt = ["Limit one per trade", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+ };
+} else {
+ closeDialog 0;
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd2.sqf b/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd2.sqf
new file mode 100644
index 00000000..4a77a98b
--- /dev/null
+++ b/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd2.sqf
@@ -0,0 +1,90 @@
+private ["_uiItem","_item","_worth","_cryptoCount","_control","_selected","_index","_sizeOut","_array"];
+_control = _this select 0;
+_selected = _this select 1;
+
+_allowAdd = true;
+
+_uiItem = (_selected select 0) lnbData[(_selected select 1), 0];
+
+_config = 'CfgPricing' call EPOCH_returnConfig;
+if (isClass (_config >> _uiItem)) then{
+
+ if (_uiItem isKindOf "Air" || _uiItem isKindOf "Ship" || _uiItem isKindOf "LandVehicle" || _uiItem isKindOf "Tank") then {
+
+ // check if a vehicle is already on the list
+ _sizeOut = lbSize 41501;
+ //_array = [];
+ if (_sizeOut > 0) then {
+ for "_i" from 0 to(_sizeOut - 1) do {
+ _item = lbData[41501, _i];
+ //_array pushBack _item;
+ if (_item isKindOf "Air" || _item isKindOf "Ship" || _item isKindOf "LandVehicle" || _item isKindOf "Tank") exitWith{
+ _allowAdd = false;
+ };
+ };
+ };
+ _sizeOut = lbSize 41502;
+ //_array = [];
+ if (_sizeOut > 0) then {
+ for "_i" from 0 to(_sizeOut - 1) do {
+ _item = lbData[41502, _i];
+ if (_item isKindOf "Air" || _item isKindOf "Ship" || _item isKindOf "LandVehicle" || _item isKindOf "Tank") exitWith{
+ _allowAdd = false;
+ };
+ };
+ };
+ // disallow adding item to list of already one
+
+
+ };
+
+ if (_allowAdd) then {
+ _itemName = (_selected select 0) lnbText[(_selected select 1), 2];
+ _index = lbAdd [_control, _itemName];
+ lbSetData [_control, _index, _uiItem];
+
+ _itemIcon = (_selected select 0) lnbPicture [(_selected select 1), 0];
+ lbSetPicture [_control, _index, _itemIcon];
+
+ _uiQty = (_selected select 0) lnbValue [(_selected select 1), 0];
+ if (_uiQty <= 1) then {
+ (_selected select 0) lnbDeleteRow (_selected select 1);
+ } else {
+ _qty = _uiQty - 1;
+ lnbSetText[41503, [(_selected select 1), 1], str(_qty)];
+ lnbSetValue[41503, [(_selected select 1), 0], _qty];
+ };
+
+ _cryptoCount = 0;
+ _sizeOut = lbSize 41501;
+ //_array = [];
+ if (_sizeOut > 0) then {
+ for "_i" from 0 to (_sizeOut - 1) do {
+ _item = lbData [41501, _i];
+ //_array pushBack _item;
+ _worth = getNumber(_config >> _item >> "price");
+ _cryptoCount = _cryptoCount + _worth;
+ };
+ };
+ ctrlSetText [41004, (format ["%1 Krypto", _cryptoCount])];
+
+ _cryptoCount = 0;
+ _sizeOut = lbSize 41502;
+ //_array = [];
+ if (_sizeOut > 0) then {
+ for "_i" from 0 to (_sizeOut - 1) do {
+ _item = lbData [41502, _i];
+ //_array pushBack _item;
+ _itemWorth = getNumber(_config >> _item >> "price");
+ _itemTax = getNumber(_config >> _item >> "tax");
+ _tax = _itemWorth * (EPOCH_taxRate + _itemTax);
+ _itemWorth = ceil(_itemWorth + _tax);
+ //diag_log format["_finalWorth %1", _finalWorth];
+ _cryptoCount = _cryptoCount + _itemWorth;
+ };
+ };
+ ctrlSetText [41005, (format ["%1 Krypto", _cryptoCount])];
+ } else {
+ _dt = ["Limit one per trade", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd3.sqf b/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd3.sqf
new file mode 100644
index 00000000..56add09b
--- /dev/null
+++ b/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd3.sqf
@@ -0,0 +1,43 @@
+private ["_uiItem","_item","_worth","_cryptoCount","_control","_selected","_index","_sizeOut","_array"];
+_control = _this select 0;
+_selected = _this select 1;
+
+_uiItem = (_selected select 0) lbData(_selected select 1);
+
+_config = 'CfgPricing' call EPOCH_returnConfig;
+if (isClass (_config >> _uiItem)) then{
+
+ (_selected select 0) lbDelete (_selected select 1);
+
+ lbSetCurSel[42101, 0];
+
+ _cryptoCount = 0;
+ _sizeOut = lbSize 41501;
+ //_array = [];
+ if (_sizeOut > 0) then {
+ for "_i" from 0 to (_sizeOut - 1) do {
+ _item = lbData [41501, _i];
+ //_array pushBack _item;
+ _worth = getNumber(_config >> _item >> "price");
+ _cryptoCount = _cryptoCount + _worth;
+ };
+ };
+ ctrlSetText [41004, (format ["%1 Krypto", _cryptoCount])];
+
+ _cryptoCount = 0;
+ _sizeOut = lbSize 41502;
+ //_array = [];
+ if (_sizeOut > 0) then {
+ for "_i" from 0 to (_sizeOut - 1) do {
+ _item = lbData [41502, _i];
+ //_array pushBack _item;
+ _itemWorth = getNumber(_config >> _item >> "price");
+ _itemTax = getNumber(_config >> _item >> "tax");
+ _tax = _itemWorth * (EPOCH_taxRate + _itemTax);
+ _itemWorth = ceil(_itemWorth + _tax);
+ //diag_log format["_finalWorth %1", _finalWorth];
+ _cryptoCount = _cryptoCount + _itemWorth;
+ };
+ };
+ ctrlSetText [41005, (format ["%1 Krypto", _cryptoCount])];
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/traders/EPOCH_startBankTransfer.sqf b/Sources/epoch_code/compile/traders/EPOCH_startBankTransfer.sqf
new file mode 100644
index 00000000..2a5e96e8
--- /dev/null
+++ b/Sources/epoch_code/compile/traders/EPOCH_startBankTransfer.sqf
@@ -0,0 +1,56 @@
+if (isNull(findDisplay -13)) exitWith{};
+// perform wait while menu is still open
+
+if (isNil "EPOCH_bankTransferActive") then {
+ EPOCH_bankTransferActive = true;
+
+ ctrlEnable[1600, false];
+
+ [] spawn {
+ ctrlSetText[1004,"Transfer started."];
+
+ _deposit = parseNumber(ctrlText 1401) min EPOCH_playerCrypto;
+ _withdraw = parseNumber(ctrlText 1402) min EPOCH_bankBalance;
+ _transfer = parseNumber(ctrlText 1400) min EPOCH_bankBalance;
+
+ _totalTransfer = (_deposit + _withdraw) + _transfer;
+ _progress = 0;
+
+ uiSleep 1;
+
+ _transferTarget = "";
+ if (_transfer > 0) then {
+ _transferTarget = lbData[21500, (lbCurSel 21500)];
+ };
+
+ if (_deposit > 0 || _withdraw > 0 || (_transfer > 0 && _transferTarget != "")) then {
+
+ _sleep = ((_totalTransfer * 0.0006) min 1.2) max 0.06;
+ for "_i" from 0 to 100 do {
+ if (isNull(findDisplay -13)) exitWith{};
+ _progress = _progress + 1;
+ if (_progress > 100) exitWith{};
+ ctrlSetText[1200, format["\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa", _progress]];
+ uiSleep _sleep;
+ };
+
+ if (_progress >= 100) then {
+
+ // if player waited the full time then send upload
+ EPOCH_storeCrypto_PVS = [player, [_deposit, _withdraw, [_transfer, _transferTarget]], Epoch_personalToken];
+ publicVariableServer "EPOCH_storeCrypto_PVS";
+
+ ctrlSetText[1004, "Transfer complete."];
+
+ uiSleep 1;
+
+ closeDialog 0;
+ }
+ else {
+ ctrlSetText[1004, "Transfer failed."];
+ };
+ };
+ EPOCH_bankTransferActive = nil;
+ ctrlEnable[1600, true];
+ };
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/traders/EPOCH_startInteract.sqf b/Sources/epoch_code/compile/traders/EPOCH_startInteract.sqf
new file mode 100644
index 00000000..21c3ae3d
--- /dev/null
+++ b/Sources/epoch_code/compile/traders/EPOCH_startInteract.sqf
@@ -0,0 +1,57 @@
+closeDialog 0;
+_dialog = "";
+_handled = false;
+_forceGear = false;
+_target = objNull;
+_ctrl = _this;
+
+_vehicle = vehicle player;
+if (_vehicle != player) exitWith {false};
+if (!isNull cursorTarget) then {
+ if ((player distance cursorTarget) < 6) then {
+ _target = cursorTarget;
+ };
+};
+if (isNull _target) then {
+ _targets = nearestObjects [getPosATL player, ["WeaponHolder", "WeaponHolderSimulated"], 3];
+ if !(_targets isEqualTo []) then {
+ _target = _targets select 0;
+ _forceGear = true;
+ };
+};
+
+if (!isNull _target) then {
+
+ if (alive _target) then {
+ if ((_target isKindOf "LandVehicle") || (_target isKindOf "Air") || (_target isKindOf "Ship") || (_target isKindOf "Tank")) then {
+ _dialog = "InteractVehicle";
+ };
+ /*
+ if (_ctrl) then {
+ if (_target isKindOf "Constructions_static_F" || _target isKindOf "Constructions_foundation_F") then {
+ _dialog = "InteractBaseBuilding";
+ };
+ };
+ */
+ if (_target isKindOf "Man") then {
+ if (_target != player) then {
+ if (!isPlayer _target) then {
+ if ((_target getVariable["AI_SLOT", -1]) != -1) then {
+ _dialog = "InteractNPC";
+ };
+ };
+ };
+ };
+ };
+
+ if (_forceGear) then {
+ player action ["Gear", _target];
+ _handled = true;
+ } else {
+ if (_dialog != "") then {
+ _handled = createdialog _dialog;
+ setMousePosition [0.5, 0.5];
+ };
+ };
+};
+_handled
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/traders/EPOCH_startInteractNPC.sqf b/Sources/epoch_code/compile/traders/EPOCH_startInteractNPC.sqf
new file mode 100644
index 00000000..69011c9c
--- /dev/null
+++ b/Sources/epoch_code/compile/traders/EPOCH_startInteractNPC.sqf
@@ -0,0 +1,3 @@
+private["_ok"];
+_ok = createdialog "MissionSelect";
+if (!_ok) exitWith {};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/traders/EPOCH_startNPCTraderMenu.sqf b/Sources/epoch_code/compile/traders/EPOCH_startNPCTraderMenu.sqf
new file mode 100644
index 00000000..fb763757
--- /dev/null
+++ b/Sources/epoch_code/compile/traders/EPOCH_startNPCTraderMenu.sqf
@@ -0,0 +1,14 @@
+private ["_index","_type","_config","_name","_picture","_qty","_items","_qtys","_ok","_vehicles","_aiItems","_target","_slot"];
+_target = cursorTarget;
+_slot = _target getVariable ["AI_SLOT",-1];
+if (_slot != -1) then {
+ EPOCH_lastNPCtradeTarget = _target;
+ closeDialog 0;
+ _ok = createdialog "TradeNPCMenu";
+ if (!_ok) exitWith {};
+ 9992 cutRsc["EpochGameUI2", "PLAIN", 2, false];
+ ((uiNamespace getVariable "EPOCH_EpochGameUI2") displayCtrl 21208) ctrlSetText format["%1", EPOCH_playerCrypto];
+ {lbAdd[42100,_x];lbAdd[42101,_x]} forEach ["All","Magazines","Items","Vehicles"];
+ lbSetCurSel[42100, 0];
+ lbSetCurSel[42101, 0];
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/traders/EPOCH_startNpcTrade.sqf b/Sources/epoch_code/compile/traders/EPOCH_startNpcTrade.sqf
new file mode 100644
index 00000000..341fba07
--- /dev/null
+++ b/Sources/epoch_code/compile/traders/EPOCH_startNpcTrade.sqf
@@ -0,0 +1,172 @@
+private["_item", "_currQty", "_tradeType", "_itemWorth", "_aiItems", "_itemClasses", "_itemQtys", "_qtyIndex", "_tradeTotal", "_tradeQtyTotal", "_errorMsg", "_target", "_sizeOut", "_array", "_makeTrade", "_vehSlot", "_vehicle", "_vehicles", "_display", "_addWeaponToHands", "_type", "_tax"];
+
+if (!isNil "EPOCH_TRADE_COMPLETE") exitWith {};
+if (!isNil "EPOCH_TRADE_STARTED") exitWith{};
+
+if (!isNull _this) then {
+
+ EPOCH_TRADE_STARTED = true;
+
+ _config = 'CfgPricing' call EPOCH_returnConfig;
+
+ _current_crypto = EPOCH_playerCrypto;
+
+ // _arrayIn = Sell Array
+ _sizeOut = lbSize 41501;
+ _arrayIn = [];
+ if (_sizeOut > 0) then {
+ for "_i" from 0 to(_sizeOut - 1) do {
+ _item = lbData[41501, _i];
+
+ if (isClass (_config >> _item)) then{
+
+ // test remove items to be sold and add to array
+ if ([_item, "CfgWeapons"] call EPOCH_fnc_isAny) then {
+ if (_item in items player) then {
+ player removeItem _item;
+ _arrayIn pushBack _item;
+ };
+ } else {
+ if ([_item, "CfgVehicles"] call EPOCH_fnc_isAny) then {
+ _vehicles = _this nearEntities[[_item], 30];
+ if (!(_vehicles isEqualTo[])) then {
+ _vehicle = _vehicles select 0;
+ if (!isNull _vehicle) then {
+ if (local _vehicle) then {
+ _vehSlot = _vehicle getVariable["VEHICLE_SLOT", "ABORT"];
+ if (_vehSlot != "ABORT") then {
+ _arrayIn pushBack _item;
+ // will be removed server side
+ };
+ };
+ };
+ };
+ } else {
+ if (_item in magazines player) then {
+ player removeMagazine _item;
+ _arrayIn pushBack _item;
+ };
+ };
+ };
+ // test
+
+
+
+ };
+ };
+ };
+
+ // _arrayOut = Purchase Array
+ _sizeOut = lbSize 41502;
+ _arrayOut = [];
+ if (_sizeOut > 0) then {
+ for "_i" from 0 to(_sizeOut - 1) do {
+ _item = lbData[41502, _i];
+
+ if (isClass (_config >> _item)) then{
+ _itemWorth = getNumber(_config >> "price");
+ _itemTax = getNumber(_config >> "tax");
+ _tax = _itemWorth * (EPOCH_taxRate + _itemTax);
+ _itemWorth = ceil(_itemWorth + _tax);
+
+ if (_current_crypto >= _itemWorth) then {
+ _current_crypto = _current_crypto - _itemWorth;
+ _arrayOut pushBack _item;
+ };
+ };
+ };
+ };
+
+ if (!(_arrayIn isEqualTo[]) || !(_arrayOut isEqualTo[])) then {
+
+ // make trade
+ EPOCH_MAKENPCTRADE = [_this, _arrayIn, _arrayOut, player, Epoch_personalToken];
+ publicVariableServer "EPOCH_MAKENPCTRADE";
+
+ // close menu
+ closeDialog 0;
+
+ [_arrayIn, _arrayOut] spawn{
+
+ waitUntil{ uiSleep 0.1; !isNil "EPOCH_TRADE_COMPLETE" };
+
+ // SOLD ITEMS ARRAY
+ if !((EPOCH_TRADE_COMPLETE select 0) isEqualTo[]) then {
+ if ((EPOCH_TRADE_COMPLETE select 0) isEqualTo(_this select 0)) then {
+ _errorMsg = 'Items Sold';
+ _dt = [format["%1", _errorMsg], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+
+ }
+ else {
+ _errorMsg = 'Failed To Sell Items';
+ _dt = [format["%1", _errorMsg], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+ };
+
+ // PURCHASED ITEMS ARRAY
+ if !((EPOCH_TRADE_COMPLETE select 1) isEqualTo[]) then {
+ if ((EPOCH_TRADE_COMPLETE select 1) isEqualTo(_this select 1)) then {
+
+ _errorMsg = 'Items Purchased';
+
+ // add purchased items
+ {
+ if ([_x, "CfgWeapons"] call EPOCH_fnc_isAny) then {
+ if (player canAdd _x) then {
+ player addItem _x;
+ }
+ else {
+ _type = getNumber(configfile >> "CfgWeapons" >> (_x) >> "type");
+ _addWeaponToHands = false;
+ switch (_type) do {
+ case 1: {
+ if (primaryWeapon player == "") then {
+ _addWeaponToHands = true;
+ };
+ };
+ case 2: {
+ if (secondaryWeapon player == "") then {
+ _addWeaponToHands = true;
+ };
+ };
+ case 4: {
+ if (handgunWeapon player == "") then {
+ _addWeaponToHands = true;
+ };
+ };
+ };
+ if (_addWeaponToHands) then {
+ player addWeapon _x;
+ }
+ else {
+ _errorMsg = "Not enough space";
+ };
+ };
+
+ }
+ else {
+ if ([_x, "CfgMagazines"] call EPOCH_fnc_isAny) then {
+ if (player canAdd _x) then {
+ player addMagazine _x;
+ }
+ else {
+ _errorMsg = "Not enough space";
+ };
+ };
+ };
+ } forEach(_this select 1);
+
+
+ _dt = [format["%1", _errorMsg], 0, 0.4, 5, 2, 0, 2] spawn bis_fnc_dynamictext;
+ }
+ else {
+ _errorMsg = 'Failed To Purchase Items';
+ _dt = [format["%1", _errorMsg], 0, 0.4, 5, 2, 0, 2] spawn bis_fnc_dynamictext;
+ };
+ };
+
+ EPOCH_TRADE_COMPLETE = nil;
+ EPOCH_TRADE_STARTED = nil;
+ };
+ };
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/traders/EPOCH_takeCrypto.sqf b/Sources/epoch_code/compile/traders/EPOCH_takeCrypto.sqf
new file mode 100644
index 00000000..11ac1f92
--- /dev/null
+++ b/Sources/epoch_code/compile/traders/EPOCH_takeCrypto.sqf
@@ -0,0 +1,25 @@
+private["_getCrypto","_display"];
+if !(isNil "EPOCH_takeCryptoLock") exitWith {};
+EPOCH_takeCryptoLock = true;
+if (!isNull _this) then {
+ if ((typeof _this) == "Land_MPS_EPOCH") then {
+
+ _getCrypto = _this getVariable["Crypto", 0];
+ // deleteVehicle _this;
+
+
+
+ // EPOCH_playerCrypto = (EPOCH_playerCrypto + _getCrypto) min 25000;
+
+ EPOCH_takeCrypto_PVS = [player, Epoch_personalToken, _this];
+ publicVariableServer "EPOCH_takeCrypto_PVS";
+
+
+
+ _dt = [format["You found %1 Krypto.", _getCrypto], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+ };
+};
+[] spawn{
+ uiSleep 2;
+ EPOCH_takeCryptoLock = nil;
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/traders/EPOCH_tradeFilter.sqf b/Sources/epoch_code/compile/traders/EPOCH_tradeFilter.sqf
new file mode 100644
index 00000000..200a0f7e
--- /dev/null
+++ b/Sources/epoch_code/compile/traders/EPOCH_tradeFilter.sqf
@@ -0,0 +1,68 @@
+private ["_item","_data","_index","_control","_filterArray","_weapons","_magazines","_items","_sizeOut","_arrayMags","_arrayWeapons"];
+
+disableSerialization;
+
+_control = _this select 0;
+_index = _this select 1;
+
+// [weapons, mags, items]
+_filterArray = [
+ [true,true,true], // all
+ // [true,false,false], // weapons only
+ [false,true,false], // mags only
+ [false,false,true] // items only
+];
+
+lbClear 1500;
+
+// _weapons = ((_filterArray select _index) select 0);
+_magazines = ((_filterArray select _index) select 1);
+_items = ((_filterArray select _index) select 2);
+
+_sizeOut = lbSize 1501;
+_array = [];
+if (_sizeOut > 0) then {
+ for "_i" from 0 to (_sizeOut - 1) do {
+ _item = lbData [1501, _i];
+ _array pushBack _item;
+ };
+};
+/*
+if (_weapons) then {
+ {
+ if !(_x in _array) then {
+ _index = lbAdd [1500, _x call EPOCH_itemDisplayName];
+ lbSetData [1500, _index, _x];
+ lbSetPicture [1500, _index, _x call EPOCH_itemPicture];
+ } else {
+ _array set [_array find _x,nil];
+ };
+ } forEach weapons player;
+};
+*/
+if (_magazines) then {
+ {
+ if (getNumber(configfile >> "CfgMagazines" >> _x >> "count") == 1) then {
+ if !(_x in _array) then {
+ _index = lbAdd[1500, _x call EPOCH_itemDisplayName];
+ lbSetData[1500, _index, _x];
+ lbSetPicture[1500, _index, _x call EPOCH_itemPicture];
+ }
+ else {
+ _array set[_array find _x, nil];
+ };
+ };
+ } forEach magazines player;
+};
+
+if (_items) then {
+ {
+ if !(_x in _array) then {
+ _index = lbAdd [1500, _x call EPOCH_itemDisplayName];
+ lbSetData [1500, _index, _x];
+ lbSetPicture [1500, _index, _x call EPOCH_itemPicture];
+ } else {
+ _array set [_array find _x,nil];
+ };
+ } forEach items player;
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/vehicles/EPOCH_client_fillVehicle.sqf b/Sources/epoch_code/compile/vehicles/EPOCH_client_fillVehicle.sqf
new file mode 100644
index 00000000..79ed92e2
--- /dev/null
+++ b/Sources/epoch_code/compile/vehicles/EPOCH_client_fillVehicle.sqf
@@ -0,0 +1,7 @@
+private["_vehicle","_value"];
+
+_vehicle = _this select 0;
+_value = _this select 1;
+if (local _vehicle) then {
+ _vehicle setFuel _value;
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/vehicles/EPOCH_client_gearVehicle.sqf b/Sources/epoch_code/compile/vehicles/EPOCH_client_gearVehicle.sqf
new file mode 100644
index 00000000..db0eec9b
--- /dev/null
+++ b/Sources/epoch_code/compile/vehicles/EPOCH_client_gearVehicle.sqf
@@ -0,0 +1,7 @@
+closeDialog 0;
+if (!isNull cursorTarget) then {
+ _vehicles = player nearEntities[["LandVehicle", "Ship", "Air", "Tank"], 6];
+ if (cursorTarget in _vehicles) then {
+ player action["Gear", cursorTarget];
+ };
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/vehicles/EPOCH_client_lockVehicle.sqf b/Sources/epoch_code/compile/vehicles/EPOCH_client_lockVehicle.sqf
new file mode 100644
index 00000000..488b5568
--- /dev/null
+++ b/Sources/epoch_code/compile/vehicles/EPOCH_client_lockVehicle.sqf
@@ -0,0 +1,7 @@
+private["_vehicle","_value"];
+
+_vehicle = _this select 0;
+_value = _this select 1;
+if (local _vehicle) then {
+ _vehicle lock _value;
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/compile/vehicles/EPOCH_client_repairVehicle.sqf b/Sources/epoch_code/compile/vehicles/EPOCH_client_repairVehicle.sqf
new file mode 100644
index 00000000..30ceedc6
--- /dev/null
+++ b/Sources/epoch_code/compile/vehicles/EPOCH_client_repairVehicle.sqf
@@ -0,0 +1,7 @@
+private ["_vehicle","_value"];
+_vehicle = _this select 0;
+_value = _this select 1;
+if (local _vehicle) then {
+ _currentDMG = _vehicle getHitIndex (_value select 0);
+ _vehicle setHitIndex[_value select 0, (_currentDMG - 0.5) max 0];
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/config.cpp b/Sources/epoch_code/config.cpp
new file mode 100644
index 00000000..125ba130
--- /dev/null
+++ b/Sources/epoch_code/config.cpp
@@ -0,0 +1,6395 @@
+class CfgPatches {
+ class A3_epoch_code {
+ units[] = {};
+ weapons[] = {};
+ requiredVersion = 0.1;
+ requiredAddons[] = { "A3_epoch_config" };
+ };
+};
+class CfgMods
+{
+ class Epoch
+ {
+ dir = "@epoch";
+ name = "Epoch Mod";
+ picture = "\x\addons\a3_epoch_assets\pictures\loadScreen_ca.paa";
+ hidePicture = 0;
+ hideName = 0;
+ action = "http://www.epochmod.com";
+ version = "0.3.3.0";
+ majorVersion = 0.3; //MUST BE A NUMBER!; Change this if we release a new major version, don't change if we push just push a hotfix
+ ArmAVersion = 150;
+ overview = "Open world survival mod set in the year 2035, Just two years after the mass extinction of billions of people. Those that remain are left with remnants of a once technological society. Try to survive, build, or explore your way through the harsh dynamic environment.";
+ };
+};
+class Epoch
+{
+ class Version
+ {
+ //Version System, Check if PBO Version is compatible with Code
+ A3_epoch_assets = "0.3.3.0";
+ A3_epoch_assets_1 = "0.3.3.0";
+ epoch_objects = "0.3.3.0";
+ A3_epoch_assets_3 = "0.3.3.0";
+ A3_epoch_config = "0.3.3.0";
+ A3_epoch_language = "0.3.3.0";
+ Underground_Epoch = "0.3.3.0";
+ A3_epoch_vehicles = "0.3.3.0";
+ a3_epoch_weapons = "0.3.3.0";
+ a2_epoch_weapons = "0.3.3.0";
+ a3_epoch_structures = "0.3.3.0";
+ A3_epoch_functions = "0.3.3.0";
+ A3_epoch_vehicles_1 = "0.3.3.0";
+ Enhanced_Epoch_AiASupport = "0.3.3.0";
+
+ };
+};
+
+class cfgScriptPaths
+{
+ /*default = "A3\ui_f\scripts\GUI\";
+ GUI = "A3\ui_f\scripts\GUI\";
+ IGUI = "A3\ui_f\scripts\IGUI\";
+ Loading = "A3\ui_f\scripts\Loading\";
+ CuratorDisplays = "A3\ui_f_curator\UI\displays\";
+ CuratorCommon = "A3\ui_f_curator\UI\RscCommon\";
+ CuratorTitles = "A3\ui_f_curator\UI\RscTitles\";
+ KartDisplays = "A3\ui_f_kart\UI\displays\";*/
+ Epoch = "\x\addons\a3_epoch_code\gui\scripts\";
+};
+class CfgInGameUI
+{
+ class PeripheralVision
+ {
+ cueColor[] = { 0, 0, 0, 0 };
+ cueFriendlyColor[] = { 0, 0, 0, 0 };
+ cueEnemyColor[] = { 0, 0, 0, 0 };
+ };
+};
+
+#include "\x\addons\a3_epoch_code\Data\UI\defineCommonGrids.inc"
+
+class cfgFunctions
+{
+ class A3
+ {
+ tag = "BIS";
+ class MP
+ {
+ file = "A3\functions_f\MP";
+ class MP {
+ file = "\x\addons\a3_epoch_code\compile\bis_functions\MP\fn_mp.sqf";
+ };
+ class MPexec {
+ file = "\x\addons\a3_epoch_code\compile\bis_functions\MP\fn_MPexec.sqf";
+ };
+ class initMultiplayer {
+ file = "\x\addons\a3_epoch_code\compile\bis_functions\MP\fn_initMultiplayer.sqf";
+ };
+ };
+ };
+ class EPOCH
+ {
+ tag = "EPOCH";
+ class functions {
+ class returnConfigEntryV2 {
+ file = "\x\addons\a3_epoch_code\compile\functions\EPOCH_fn_returnConfigEntryV2.sqf";
+ };
+ class getHitpoints {
+ file = "\x\addons\a3_epoch_code\compile\both\EPOCH_getHitpoints.sqf"
+ };
+ class isAny {
+ file = "\x\addons\a3_epoch_code\compile\both\EPOCH_isAny.sqf"
+ };
+ };
+ };
+};
+
+class CfgClientFunctions
+{
+ version = 1;
+ class A3E
+ {
+ tag = "EPOCH";
+ file = "\x\addons\a3_epoch_code\compile";
+
+ class generic {
+ file = "\x\addons\a3_epoch_code\compile";
+ class localCleanup {};
+ class unitSpawnIncrease {};
+ class unitSpawnDecrease {};
+ class QuickTakeAll {};
+ class QuickTakeLoad {};
+ class effectCrypto {};
+ class handleServerMessage {};
+ class updateLoadingScreen {};
+ class EnterBuilding {};
+ class lootTrash {};
+ class debugMonitor {};
+ class interact {};
+ class chopWood {};
+ class mineRocks {};
+ class UnisexCheck {};
+ class PutHandler {};
+ class niteLight {};
+ class LootIT {};
+ class supportCopter {};
+ class itemInteract {};
+ class consumeItem {};
+ class craftItemPreview {};
+ class craftItem {};
+ class unitSpawn {};
+ class antiWall {};
+ class onEachFrame {};
+ };
+
+ class building
+ {
+ class maintainIT {};
+ class lockCheck {};
+ class countdown {};
+ class fnc_SelectTarget {};
+ class fnc_SelectTargetBuild {};
+ class isBuildAllowed {};
+ class simulSwap {};
+ class staticMove {};
+ class returnVector {};
+ class upgradeBUILD {};
+ class upgradeBUILDv2 {};
+ class removeBUILD {};
+ class changeWallState {};
+ class QuickUpgrade {};
+ };
+
+ class traders
+ {
+ class startInteract {};
+ class startInteractNPC {};
+ class npcTraderAdd {};
+ class npcTraderAdd2 {};
+ class npcTraderAdd3 {};
+ class startNPCTraderMenu {};
+ class NPCTraderMenuFilter {};
+ class startNpcTrade {};
+ class makep2pTrade {};
+ class tradeFilter {};
+ class takeCrypto {};
+ class startBankTransfer {};
+ };
+
+ class interface_event_handlers
+ {
+ class KeyDown {};
+ class onChar {};
+ };
+
+ class setup
+ {
+ class client_publicEH {};
+ class masterLoop {};
+ class clientInit {};
+ class clientRespawn {};
+ class clientRevive {};
+ class client_rejectPlayer {};
+ };
+
+ class p2p_trading
+ {
+ class startTRADEREQ {};
+ class startTrade {};
+ class tradeRequest {};
+ class TradeLoop {};
+ };
+ class functions
+ {
+ class returnConfig {};
+
+ class fnc_playerDeath {};
+ class fnc_playerFired {};
+ class fnc_isInsideBuilding {};
+ class fnc_Weather {};
+ class fnc_findSafePos {};
+
+ class pushCustomVar {};
+ class itemPicture {};
+ class itemDisplayName {};
+ class SortArrayByDistance {};
+
+ class fnc_findRandomPosBehind {};
+ class fnc_stringLeft {};
+ class fnc_findSapperStalkLocation {};
+ class fnc_dirToFuzzy {};
+ };
+
+ class environment
+ {
+ class client_earthQuake {};
+ class client_loadAnimalBrain {};
+ class client_bitePlayer {};
+ };
+
+ class vehicles
+ {
+ class client_repairVehicle {};
+ class client_lockVehicle {};
+ class client_fillVehicle {};
+ class client_gearVehicle {};
+ };
+
+ class missions
+ {
+ class mission_accept {};
+ class mission_cage_sapper {};
+ class mission_returnObj {};
+ };
+
+ class inventory {
+ class selectInventoryItem {};
+ class itemInteractV2 {};
+ class uniformArmorCalc {};
+ class gearArmorCalc {};
+ class factorArmor {};
+ class maxArmorInit {};
+ class initUI {};
+ class refeshUI {};
+ };
+
+ class gui {
+ file = "\x\addons\a3_epoch_code\gui\scripts";
+ class onPause {};
+ class interactVehicle {};
+ class showStats {};
+ };
+
+ class group {
+ file = "\x\addons\a3_epoch_code\gui\scripts\group";
+ class Group_invitePlayer {};
+ class Group_BtnMod {};
+ class Group_BtnInvite {};
+ class Group_onLoad {};
+ class Group_List {};
+ class Group_Combo {};
+ class Group_BtnLeave {};
+ class Group_BtnKick {};
+ class cGroup_groupText {};
+ class cGroup_onLoad {};
+ class cGroup_BtnCreate {};
+ class iGroup_acceptInvite {};
+ class iGroup_onLoad {};
+ class iGroup_refresh {};
+ class Group_update {};
+ };
+
+ class gui_inventory {
+ file = "\x\addons\a3_epoch_code\gui\scripts\inventory";
+ class Inventory_Group {};
+ class Inventory_iGroup {};
+ };
+
+ class gui_missions {
+ file = "\x\addons\a3_epoch_code\gui\scripts\missions";
+ class mission_refresh {};
+ class mission_description {};
+ };
+
+ };
+};
+class CfgBuildingLootPos
+{
+ class Default
+ {
+ fridgePos[] = {};
+ shelfPos[] = {};
+ pelicanPos[] = {};
+ wardrobePos[] = {};
+ bedPos[] = {};
+ couchPos[] = {};
+ cookerPos[] = {};
+ tablePos[] = {};
+ lockerPos[] = {};
+ toolRackPos[] = {};
+ shoeboxPos[] = {};
+ lootBiasPos = 25;
+ lootType = "normal";
+ };
+// test
+ class Land_Kiosk_redburger_F : Default {
+ fridgePos[] = {
+ { { 1.64453, 1.43945, -2.897 }, 89.9032 }
+ };
+ cookerPos[] = {
+ { { 1.57813, -0.261719, -2.89732 }, 90.9244 }
+ };
+ filingPos[] = {
+ { { -1.65625, 1.67773, -2.89687 }, 272.463 }
+ };
+ shoeboxPos[] = {
+ { { -0.275391, -1.92188, -2.07339 }, 358 }
+ };
+ freezerPos[] = {
+ { { -1.51367, 0.0078125, -2.86339 }, 271.8 }
+ };
+ };
+ class Land_Kiosk_blueking_F : Default {
+ fridgePos[] = {
+ { { -1.56055, 1.67383, -1.79198 }, 0.076973 }
+ };
+ cookerPos[] = {
+ { { -1.62109, -0.296875, -1.79261 }, 269.732 }
+ };
+ filingPos[] = {
+ { { 1.82031, 0.972656, -1.75876 }, 91.8 },
+ { { 1.82031, 1.55664, -1.75876 }, 91.8 }
+ };
+ shoeboxPos[] = {
+ { { 1.86914, -1.18555, -0.645341 }, 90 }
+ };
+ freezerPos[] = {
+ { { 1.54297, -0.0410156, -1.75876 }, 91.8 }
+ };
+ };
+ class Land_Kiosk_gyros_F : Default {
+ fridgePos[] = {
+ { { 1.64258, 0.197266, -2.0025 }, 89.8823 }
+ };
+ cookerPos[] = {
+ { { 1.5, 1.62305, -2.0029 }, 89.3177 }
+ };
+ filingPos[] = {
+ { { -1.52344, 1.62109, -2.00235 }, 296.665 }
+ };
+ pelicanPos[] = {
+ { { 2.91016, -0.0703125, 0.187521 }, 263.525 }
+ };
+ shoeboxPos[] = {
+ { { -1.89844, -1.08008, -1.17894 }, 91.8 }
+ };
+ freezerPos[] = {
+ { { -1.57031, 0.199219, -1.96894 }, 269.8 }
+ };
+ };
+ class Land_Kiosk_papers_F : Default {
+ shelfPos[] = {
+ { { 1.36523, 1.79492, -2.0024 }, 1.00576 }
+ };
+ chairPos[] = {
+ { { -1.47852, 1.27148, -1.96894 }, 306.8 }
+ };
+ filingPos[] = {
+ { { 1.69336, 0.0625, -2.0024 }, 86.0276 },
+ { { -1.68164, -0.347656, -2.00241 }, 266.904 },
+ { { 1.71484, -0.404297, -2.0024 }, 90.176 }
+ };
+ shoeboxPos[] = {
+ { { 1.81055, -1.86133, -0.808939 }, 338.8 }
+ };
+ };
+ class Land_Research_HQ_F : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { 0.380859, 4.1875, -3.29264 }, 2.04878 },
+ { { -1.03125, -6.27734, -3.17222 }, 181.183 },
+ { { 8.52148, 3.01367, -3.17222 }, 90.053 }
+ };
+ fridgePos[] = {
+ { { 5.52148, 6.21094, -3.17237 }, 0.0829086 }
+ };
+ bedPos[] = {
+ { { 0.450195, 0.876953, -3.29266 }, 0 }
+ };
+ couchPos[] = {
+ { { 2.89746, 0.804688, -3.29266 }, 181.475 }
+ };
+ cookerPos[] = {
+ { { 6.66992, 6.10547, -3.17264 }, 358.477 }
+ };
+ chairPos[] = {
+ { { -3.59766, 3.67578, -3.29266 }, 325.551 }
+ };
+ filingPos[] = {
+ { { -1.17676, 4.13086, -3.29262 }, 358.166 },
+ { { -2.75781, -6.06445, -3.1722 }, 177.048 },
+ { { -3.52148, -5.88281, -3.17221 }, 202.305 },
+ { { 6.77246, -3.36914, -0.692615 }, 84.9868 },
+ { { 8.46094, 3.97266, -3.17206 }, 89.6625 }
+ };
+ pelicanPos[] = {
+ { { -0.431641, 0.957031, -0.767684 }, 213.601 },
+ { { 4.77832, -4.33398, -3.29265 }, 149.079 }
+ };
+ lockerPos[] = {
+ { { -3.9668, -4.05664, -3.29265 }, 268.178 },
+ { { 7.18848, 0.742188, -3.29265 }, 89.2752 }
+ };
+ palletPos[] = {
+ { { 0.328125, -3.94141, -0.740771 }, 174 },
+ { { 2.7959, -6.25977, -3.94077 }, 260 }
+ };
+ freezerPos[] = {
+ { { 2.64355, 5.34766, -3.14077 }, 271 }
+ };
+ cabinetPos[] = {
+ { { -4.21973, -1.09131, -1.87077 }, 0 },
+ { { 2.64795, -5.21143, -1.87077 }, 270 }
+ };
+ };
+
+
+
+ class Land_Research_house_V1_F : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { 0.408203, 3.9668, 0.00387025 }, 0.47818 },
+ { { -2.37891, 3.47461, 0.0038693 }, 272.048 }
+ };
+ fridgePos[] = {
+ { { 2.17383, 1.02539, -0.132167 }, 91.4155 }
+ };
+ filingPos[] = {
+ { { -2.18359, 2.4082, 0.00388861 }, 270 },
+ { { -0.384766, 3.89453, 0.00388622 }, 10.991 }
+ };
+ pelicanPos[] = {
+ { { -1.88477, 0.826172, -0.132179 }, 233.568 }
+ };
+ lockerPos[] = {
+ { { 2.18555, 3.36523, 0.00385499 }, 88.1972 }
+ };
+ palletPos[] = {
+ { { -1.45508, -1.11914, -0.671438 }, 174 }
+ };
+ cabinetPos[] = {
+ { { -0.443359, -0.0527344, 1.29856 }, 270 }
+ };
+ };
+ class Land_spp_Tower_F : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { 2.79297, -1.28906, -14.9882 }, 88.9351 },
+ { { -2.72266, -2.93164, -24.3965 }, 179.88 }
+ };
+ bedPos[] = {
+ { { -1.89648, -0.994141, 10.1607 }, 93.8027 }
+ };
+ couchPos[] = {
+ { { 1.39258, -2.8418, -14.9885 }, 89.9995 }
+ };
+ chairPos[] = {
+ { { 1.55859, -1.35156, 10.1608 }, 177.348 },
+ { { -1.16016, -3.20703, -14.9884 }, 187.768 }
+ };
+ filingPos[] = {
+ { { -3.67969, -2.19141, -24.3019 }, 180.033 },
+ { { 4.3125, 0.748047, 10.1609 }, 87.6986 },
+ { { -4.07617, -3.69531, 23.799 }, 181.064 }
+ };
+ pelicanPos[] = {
+ { { -1.03711, -2.03906, 25.6749 }, 180.506 },
+ { { 4.40625, -2.83008, 23.7991 }, 113.987 }
+ };
+ tablePos[] = {
+ { { -0.00390625, 0.507813, -14.9885 }, 0.00285339 }
+ };
+ lockerPos[] = {
+ { { -2.67773, 0.0273438, -14.9884 }, 270.033 }
+ };
+ toolRackPos[] = {
+ { { 4.57813, -0.574219, 10.1609 }, 89.1923 }
+ };
+ shoeboxPos[] = {
+ { { 2.64648, -2.03516, 25.6749 }, 195.354 },
+ { { -2.6582, -3.65625, -14.9885 }, 195.527 }
+ };
+ palletPos[] = {
+ { { 1.52539, 0.0351563, 23.8031 }, 272 },
+ { { 3.38477, 0.015625, 23.8031 }, 179 }
+ };
+ freezerPos[] = {
+ { { 3.29102, -1.50195, 10.1633 }, 179 }
+ };
+ cabinetPos[] = {
+ { { -3.93164, 0.230469, -22.7967 }, 0 }
+ };
+ };
+ class Land_MilOffices_V1_F : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { 5.89844, 0.773438, -2.89318 }, 269.647 },
+ { { 6.08203, -0.435547, -2.89318 }, 0.742516 },
+ { { -4.00781, -5.64648, -2.89318 }, 180.694 },
+ { { 7.26367, -2.26563, -2.89318 }, 267.774 },
+ { { 8.74219, -5.70313, -2.89318 }, 178.843 },
+ { { 5.89063, 9.54297, -2.89318 }, 270.185 },
+ { { -5.83789, 11.2949, -2.89318 }, 359.547 },
+ { { -13.8574, -5.7207, -2.89318 }, 179.686 },
+ { { -16.1719, -0.859375, -2.89318 }, 358.847 },
+ { { -16.9512, 0.576172, -2.89318 }, 268.745 },
+ { { -16.3457, 11.2871, -2.89318 }, 0.686188 }
+ };
+ fridgePos[] = {
+ { { 6.43945, -3.44531, -2.89318 }, 89.5034 },
+ { { 6.60547, 4.67578, -2.89318 }, 180.413 },
+ { { -10.707, -5.51563, -2.89318 }, 178.591 }
+ };
+ bedPos[] = {
+ { { 13.5332, 5.33789, -2.8932 }, 95.0654 }
+ };
+ couchPos[] = {
+ { { 4.08984, 8.96289, -2.8932 }, 4.74224 },
+ { { 15.9063, 9.83789, -2.8932 }, 357.568 }
+ };
+ wardrobePos[] = {
+ { { 16.7813, 6.91211, -2.89308 }, 89.005 }
+ };
+ cookerPos[] = {
+ { { -12.2871, -3.27539, -2.89359 }, 269.464 }
+ };
+ chairPos[] = {
+ { { -6.48242, -1.26172, -2.89333 }, 30.6329 },
+ { { -6.36328, -5.20898, -2.89321 }, 138.614 },
+ { { -9.26953, -5.20703, -2.89319 }, 221.625 },
+ { { 2.14844, 10.8848, -2.8932 }, 357.801 },
+ { { 16.2461, 0.330078, -2.89319 }, 58.6309 },
+ { { 12.3359, 10.6348, -2.8932 }, 349.887 },
+ { { 16.2637, -3.21289, -2.89318 }, 108.767 }
+ };
+ filingPos[] = {
+ { { -0.710938, -0.902344, -2.89316 }, 273.543 },
+ { { -1.625, -5.49219, -2.89316 }, 172.228 },
+ { { -2.56445, 6.4082, -2.89316 }, 86.596 },
+ { { 7.35742, -0.585938, -2.89316 }, 269.601 },
+ { { 6.50391, -5.62305, -2.89316 }, 103.818 },
+ { { -1.80859, 11.1055, -2.89316 }, 353.219 },
+ { { 10.082, -5.57422, -2.89316 }, 171.96 },
+ { { -11.4727, -5.625, -2.89316 }, 178.889 },
+ { { 7.61523, 11.1699, -2.89316 }, 357.944 },
+ { { 8.19141, 11.0684, -2.89316 }, 328.836 },
+ { { -14.7676, -0.96875, -2.89316 }, 359.13 },
+ { { -10.7695, 11.1172, -2.89316 }, 348.322 },
+ { { 16.793, 3.68164, -2.89316 }, 58.8697 },
+ { { -16.8691, -5.51758, -2.89316 }, 190.272 }
+ };
+ pelicanPos[] = {
+ { { -15.4648, -5.25586, -2.89319 }, 177.065 },
+ { { 16.1719, 5.08984, -2.89319 }, 160.192 }
+ };
+ tablePos[] = {
+ { { 0.990234, -5.35742, -2.8932 }, 181.381 },
+ { { -7.78516, -3.08789, -2.8932 }, 0.00653839 },
+ { { 16.6719, -1.39063, -2.8932 }, 90.476 },
+ { { 14.0918, 9.58008, -2.8932 }, 90.0005 }
+ };
+ lockerPos[] = {
+ { { 7.49805, -4.18359, -2.89319 }, 271.895 },
+ { { 10.3281, 4.60352, -2.89319 }, 179.863 },
+ { { -16.7461, -3.25195, -2.89319 }, 266.767 }
+ };
+ toolRackPos[] = {
+ { { 9.29297, -0.222656, -2.89323 }, 359.898 },
+ { { -13.0098, -3.95703, -2.89322 }, 89.093 }
+ };
+ palletPos[] = {
+ { { -15.3184, -3.625, -2.85274 }, 272 }
+ };
+ freezerPos[] = {
+ { { -12.2461, -4.50391, -2.85274 }, 272 }
+ };
+ cabinetPos[] = {
+ { { 5.3125, 4.95215, -1.47264 }, 180 },
+ { { 5.27734, -5.80957, -1.47264 }, 270 },
+ { { -12.1123, -2.60938, -1.47264 }, 270 }
+ };
+ };
+ class Land_Airport_Tower_F : Default {
+ shelfPos[] = {
+ { { 1.00195, 4.2207, -10.4679 }, 90 },
+ { { 2.09375, -5.83984, -1.46719 }, 136.235 }
+ };
+ fridgePos[] = {
+ { { -3.19922, -5.58789, -1.46735 }, 223.518 }
+ };
+ chairPos[] = {
+ { { 0.740234, -0.0332031, -1.46723 }, 3.7747 },
+ { { 2.19141, -1.23438, -1.46718 }, 54.1489 }
+ };
+ filingPos[] = {
+ { { -2.14844, 1.53906, -7.46764 }, 267.225 },
+ { { -0.503906, -3.69141, 2.22974 }, 268.915 },
+ { { -1.09375, -3.69727, 2.2298 }, 90.7877 },
+ { { -3.73633, -5.13086, -1.46725 }, 223.885 },
+ { { -2.69922, -6.11133, -1.46731 }, 226.111 }
+ };
+ pelicanPos[] = {
+ { { -0.482422, -6.20898, 3.00391 }, 187.096 },
+ { { -0.744141, 6.49414, 1.52821 }, 348.84 }
+ };
+ lockerPos[] = {
+ { { -3.26172, -0.542969, -1.4672 }, 314.971 }
+ };
+ palletPos[] = {
+ { { -4.09766, 1.40625, -10.6461 }, 272 }
+ };
+ cabinetPos[] = {
+ { { 2.48779, -0.672852, 2.53949 }, 135 },
+ { { -2.37842, 1.64404, -9.16051 }, 0 },
+ { { -3.85498, -0.772461, 2.53949 }, 45 }
+ };
+ };
+ class Land_Slum_House01_F : Default {
+ chairPos[] = {
+ { { 1.20313, 1.6582, -1.07285 }, 36.9507 }
+ };
+ filingPos[] = {
+ { { 0.351563, 2.05469, -1.08115 }, 8.25228 }
+ };
+ pelicanPos[] = {
+ { { 1.4668, 2.32031, 1.60821 }, 184.525 }
+ };
+ toolRackPos[] = {
+ { { -1.56641, 0.789063, -1.08133 }, 270.436 }
+ };
+ palletPos[] = {
+ { { 0.169922, 0.214844, -1.08145 }, 272 }
+ };
+ };
+ class Land_Slum_House02_F : Default {
+ shelfPos[] = {
+ { { 2.52148, 3.48438, -0.824517 }, 359.959 }
+ };
+ couchPos[] = {
+ { { 2.14844, 0.236328, -0.824545 }, 0.0984116 }
+ };
+ chairPos[] = {
+ { { 1.15234, 3.20508, -0.824523 }, 352.052 }
+ };
+ tablePos[] = {
+ { { -0.15625, 0.738281, -0.824542 }, 268.176 }
+ };
+ };
+ class Land_Slum_House03_F : Default {
+ bedPos[] = {
+ { { 0.166016, 0.230469, -1.07675 }, 95 }
+ };
+ chairPos[] = {
+ { { -1.99414, 2.25586, -1.07675 }, 335 }
+ };
+ filingPos[] = {
+ { { 3.98633, -0.507813, -1.07675 }, 95 }
+ };
+ toolRackPos[] = {
+ { { 0.773438, 2.98633, -1.07675 }, 0 }
+ };
+ palletPos[] = {
+ { { 3.60938, 2.14453, -1.07675 }, 272 }
+ };
+ };
+ class Land_cargo_house_slum_F : Default {
+ shelfPos[] = {
+ { { -0.891602, -1.20117, -0.38667 }, 181.006 }
+ };
+ bedPos[] = {
+ { { -3.16504, -0.253906, -0.386693 }, 276.075 }
+ };
+ chairPos[] = {
+ { { 0.650391, -0.734375, -0.383496 }, 90.6667 }
+ };
+ filingPos[] = {
+ { { -4.45898, -1.12109, -0.386626 }, 269.224 }
+ };
+ };
+ class Land_FuelStation_Build_F : Default {
+ shelfPos[] = {
+ { { 0.415039, 1.52734, -1.36232 }, 0.956482 }
+ };
+ filingPos[] = {
+ { { -2.31543, -1.1582, -1.3623 }, 259.317 }
+ };
+ pelicanPos[] = {
+ { { -2.79199, 0.658203, 2.11388 }, 86.4283 }
+ };
+ shoeboxPos[] = {
+ { { -1.99316, 0.386719, -0.361005 }, 112 }
+ };
+ freezerPos[] = {
+ { { 2.10938, -0.701172, -1.391 }, 90 }
+ };
+ };
+ class Land_Factory_Main_F : Default {
+ shelfPos[] = {
+ { { -3.72852, 3.85742, -6.35809 }, 178.041 },
+ { { 5.62012, -9.38477, 2.34198 }, 89.9969 },
+ { { -6.9209, 10.8223, -6.32809 }, 95.4476 },
+ { { -10.208, 14.8887, -6.32809 }, 1.97624 }
+ };
+ fridgePos[] = {
+ { { -1.76074, 8.24805, -6.35806 }, 94.2797 }
+ };
+ couchPos[] = {
+ { { -2.44629, 5.73047, -6.35812 }, 2.06058 },
+ { { -3.50684, 16.8828, -6.41408 }, 90.0061 }
+ };
+ cookerPos[] = {
+ { { -5.74609, 5.52734, -6.35851 }, 183.545 }
+ };
+ chairPos[] = {
+ { { -5.46777, 4.26367, -6.35815 }, 231.258 },
+ { { -7.42676, 14.3906, -6.3281 }, 42.1397 }
+ };
+ filingPos[] = {
+ { { -5.79004, 6.72266, -6.35807 }, 270.867 },
+ { { -4.03516, -9.26758, 2.34797 }, 0.889618 },
+ { { 5.33691, -11.1738, 2.34195 }, 75.1523 },
+ { { 5.16602, -12.2598, 2.34194 }, 135.024 },
+ { { -10.5898, 12.2129, -6.32807 }, 270 },
+ { { -10.6104, 12.6699, -6.32807 }, 267.548 }
+ };
+ pelicanPos[] = {
+ { { 2.81738, -9.37305, 2.3419 }, 2.64822 }
+ };
+ toolRackPos[] = {
+ { { -3.79004, 9.14063, -6.35813 }, 0.489624 },
+ { { -6.61133, 12.8359, -6.32813 }, 89.3704 }
+ };
+ palletPos[] = {
+ { { -3.94238, -16.6523, -6.65465 }, 94 },
+ { { 4.20313, 16.6426, -6.35465 }, 95 }
+ };
+ };
+ class Land_Airport_right_F : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { -4.19922, -2.1543, -1.76375 }, 359.705 },
+ { { -4.57422, 2.20508, -1.76375 }, 270.932 },
+ { { 5.27734, -5.37891, -1.76368 }, 357.591 },
+ { { -15.0703, -7.48633, -6.76375 }, 89.4887 },
+ { { -14.4297, -11.0059, -6.76375 }, 270.174 },
+ { { -15.1445, -10.3418, -6.76375 }, 89.1635 },
+ { { -23.3359, -3.69922, -6.76375 }, 358.136 },
+ { { -21.1836, 14.7402, -6.77192 }, 359.554 }
+ };
+ fridgePos[] = {
+ { { -2.48633, 3.61719, -1.76375 }, 0.951996 },
+ { { -15.4355, 13.5039, -6.76375 }, 90.2176 }
+ };
+ bedPos[] = {
+ { { -3.82422, -10.3633, -1.76377 }, 184.477 }
+ };
+ couchPos[] = {
+ { { 4.75195, 2.29883, -1.76378 }, 4.22821 },
+ { { 0.705078, -6.63281, -6.76378 }, 269.802 },
+ { { -16.1621, 7.51172, -6.76378 }, 358.918 },
+ { { -25.6094, 1.10938, -6.76377 }, 183.238 }
+ };
+ wardrobePos[] = {
+ { { 0.699219, -5.58203, -1.76363 }, 1.96878 }
+ };
+ cookerPos[] = {
+ { { -0.195313, 3.53906, -1.74532 }, 0 }
+ };
+ chairPos[] = {
+ { { -5.11133, 3.41406, -6.76377 }, 358.691 },
+ { { -5.23047, 5.16602, -6.76375 }, 180.383 },
+ { { 5.21094, -6.4082, -6.76376 }, 49.2284 },
+ { { 5.05273, -13.168, -1.76375 }, 29.6497 },
+ { { -4.29688, -14.416, -6.73171 }, 205.019 },
+ { { 5.29102, -14.1387, -6.76376 }, 130.737 },
+ { { 5.28906, 14.3145, -6.76377 }, 41.909 },
+ { { -15.7715, -2.20508, -6.76376 }, 122.506 },
+ { { -16.5605, -3.95313, -6.76376 }, 1.55649 },
+ { { -23.498, -2.37891, -6.76377 }, 177.809 },
+ { { -26.168, 5.07813, -6.76375 }, 276.716 }
+ };
+ filingPos[] = {
+ { { -4.57031, -1.3418, -1.76373 }, 183.677 },
+ { { 5.76953, -4.5918, -6.76376 }, 164.562 },
+ { { -15.1465, -9.57227, -6.76368 }, 88.7803 },
+ { { -24.3516, -3.79688, -6.76373 }, 359.584 }
+ };
+ pelicanPos[] = {
+ { { 7.55078, -11.002, -6.78875 }, 217.643 },
+ { { 4.91406, -16.5039, -3.16119 }, 5.77048 },
+ { { -25.8477, -2.27734, -6.76375 }, 202.245 }
+ };
+ tablePos[] = {
+ { { 2.9707, 2.35352, -1.74532 }, 278 },
+ { { -4.41406, -6.25391, -1.76377 }, 271.909 },
+ { { 5.57227, -10.1172, -6.76377 }, 90.0333 },
+ { { -23.7207, 1.08594, -6.76377 }, 89.9196 }
+ };
+ lockerPos[] = {
+ { { 3.54688, -1.14844, -6.76377 }, 179.474 },
+ { { 5.26563, -1.10938, -6.76372 }, 179.41 },
+ { { -14.2656, -1.27734, -6.76377 }, 269.09 },
+ { { -14.1992, 6.67188, -6.76373 }, 269.966 },
+ { { -14.2227, 8.41016, -6.76367 }, 268.618 },
+ { { -26.5117, 9.03516, -6.76376 }, 269.173 },
+ { { -26.5234, 10.9512, -6.76368 }, 270.17 },
+ { { -26.5176, 12.9082, -6.76377 }, 270.361 }
+ };
+ toolRackPos[] = {
+ { { 1.51953, -1.72852, -1.76373 }, 179.724 },
+ { { -14.9082, -12.3223, -6.76378 }, 89.5845 }
+ };
+ shoeboxPos[] = {
+ { { -8.14258, -16.0605, -3.27531 }, 278 }
+ };
+ palletPos[] = {
+ { { 3.84766, -3.8418, -6.74531 }, 350 },
+ { { -6.58008, 0.285156, -1.86532 }, 278 },
+ { { -6.44922, -1.64844, -1.86532 }, 264 },
+ { { -23.873, -11.5293, -6.74531 }, 350 },
+ { { -23.8867, -13.6484, -6.74531 }, 86 }
+ };
+ freezerPos[] = {
+ { { -1.31055, 3.54297, -1.74532 }, 0 }
+ };
+ };
+ class Land_Airport_center_F : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { 11.7051, 7.16016, -2.74629 }, 359.37 }
+ };
+ couchPos[] = {
+ { { -4.50391, -7.57422, 1.62245 }, 88.2815 },
+ { { 11.8594, -11.0684, -2.74632 }, 2.03362 }
+ };
+ chairPos[] = {
+ { { -12.3184, 6.87109, -2.74437 }, 280.834 },
+ { { -12.2793, -14.4258, -2.7463 }, 272.565 }
+ };
+ filingPos[] = {
+ { { 12.8184, 7.07422, -2.74627 }, 358.116 },
+ { { 12.7363, -16.0586, -2.74625 }, 90.9752 }
+ };
+ pelicanPos[] = {
+ { { -1.08398, -10.5664, 1.59369 }, 341.766 },
+ { { -12.0918, -15.8086, -2.74628 }, 213.62 }
+ };
+ tablePos[] = {
+ { { 12.5625, -14.0469, -2.74631 }, 92.4684 }
+ };
+ lockerPos[] = {
+ { { 12.6758, -6.87891, -2.7463 }, 90.0581 },
+ { { -12.5391, -7.84961, -2.7463 }, 270.451 },
+ { { -12.541, -9.83398, -2.7463 }, 268.378 },
+ { { -12.4824, -11.8047, -2.7463 }, 269.442 }
+ };
+ };
+ class Land_Airport_left_F : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { 3.91211, -1.41797, -1.76377 }, 184.071 },
+ { { -1.94336, -5.52148, -1.76367 }, 0.193413 },
+ { { -5.31641, -4.6875, -6.76368 }, 179.512 },
+ { { 6.14258, 13.9648, -6.76367 }, 268.974 },
+ { { 15.1094, -8.04102, -6.76375 }, 270.202 },
+ { { 15.6563, -14.7227, -6.76375 }, 180.679 },
+ { { 16.9883, 14.7461, -6.76375 }, 359.573 }
+ };
+ fridgePos[] = {
+ { { 1.42773, 3.67578, -1.76375 }, 359.297 },
+ { { 15.7793, -2.51563, -6.76374 }, 178.661 }
+ };
+ bedPos[] = {
+ { { -4.95898, -6.73047, -1.76377 }, 179.773 }
+ };
+ couchPos[] = {
+ { { -4.08008, 2.0957, -1.76377 }, 241.929 },
+ { { 3.72461, -6.98047, -1.76378 }, 4.04132 },
+ { { 13.4414, 7.67383, -6.76378 }, 3.19656 },
+ { { 25.5898, 12.5527, -6.76377 }, 0.251305 }
+ };
+ wardrobePos[] = {
+ { { -1.35547, 3.14844, -1.7637 }, 62.9544 }
+ };
+ cookerPos[] = {
+ { { 2.95117, 3.63477, -1.76408 }, 0.722954 },
+ { { 16.668, -2.55078, -6.76418 }, 179.019 }
+ };
+ chairPos[] = {
+ { { -0.699219, -1.14844, -1.76373 }, 179.434 },
+ { { -2.9707, -1.18555, -1.76369 }, 181.435 },
+ { { 4.33398, 4.2832, -6.76373 }, 89.2875 },
+ { { -3.68945, -5.95117, -6.75249 }, 352.602 },
+ { { 5.99023, 4.28711, -6.76371 }, 269.261 },
+ { { -5.23438, -13.1641, -1.76377 }, 338.538 },
+ { { 4.23047, -14.3047, -6.76375 }, 167.634 },
+ { { -5.30859, 14.2852, -6.76372 }, 297.672 },
+ { { 23.127, 4.48242, -6.76377 }, 209.073 },
+ { { 22.8613, 7.83984, -6.76376 }, 313.711 },
+ { { 26.1641, 4.21094, -6.76375 }, 135.598 },
+ { { 26.2402, 8.27734, -6.76374 }, 47.2424 }
+ };
+ filingPos[] = {
+ { { -0.0703125, 3.63086, -1.76371 }, 1.43237 },
+ { { 15.2598, -11.4375, -6.76373 }, 268.46 },
+ { { 15.2832, -11.8906, -6.76373 }, 270.436 },
+ { { 15.1895, 14.6602, -6.76373 }, 344.677 },
+ { { 24.4355, -2.6543, -6.76369 }, 180.398 },
+ { { 26.6348, -2.56055, -6.76373 }, 172.362 }
+ };
+ pelicanPos[] = {
+ { { 6.28711, 0.486328, -1.80376 }, 285.45 },
+ { { 9.81641, -16.4297, -3.16111 }, 3.09702 }
+ };
+ tablePos[] = {
+ { { 4.40625, 1.19727, -1.76377 }, 89.5157 },
+ { { -5.57227, -7.76367, -6.76377 }, 270.379 },
+ { { 26.3789, 6.25, -6.76377 }, 90.3904 }
+ };
+ lockerPos[] = {
+ { { 3.56445, -1.11523, -6.76379 }, 179.89 },
+ { { -5.07617, -1.12891, -6.76377 }, 178.63 },
+ { { -0.271484, -5.82422, -6.7637 }, 0.334862 },
+ { { 1.68945, -5.81836, -6.7637 }, 0.41259 },
+ { { 15.3574, 5.5957, -6.76373 }, 268.91 },
+ { { 15.2949, 7.52344, -6.76377 }, 270.217 }
+ };
+ toolRackPos[] = {
+ { { 14.8926, -9.83789, -6.76369 }, 269.885 },
+ { { 23.1777, -3.47266, -6.76379 }, 0.366142 }
+ };
+ palletPos[] = {
+ { { 23.9648, -7.17188, -6.77531 }, 357 },
+ { { 23.6523, -13.7891, -6.77531 }, 90 }
+ };
+ freezerPos[] = {
+ { { 0.832031, -1.19531, -1.75531 }, 182 },
+ { { 24.3145, -10.5938, -6.77531 }, 90 }
+ };
+ };
+ class Land_Hangar_F : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { -14.3125, 1.24023, -5.40771 }, 270.363 },
+ { { -14.2754, 6.36328, -5.4077 }, 269.988 },
+ { { -14.5117, -19.8359, -5.4077 }, 268.904 },
+ { { 8.80469, 23.3691, -5.4077 }, 359.987 },
+ { { 13.6602, -21.0078, -5.40769 }, 180.14 }
+ };
+ couchPos[] = {
+ { { 11.9082, 22.3652, -5.40773 }, 267.453 }
+ };
+ chairPos[] = {
+ { { -14.3223, -5.03906, -5.40451 }, 270.026 }
+ };
+ filingPos[] = {
+ { { -14.5059, -2.35352, -5.40699 }, 272.098 },
+ { { -14.4941, -3.14453, -5.40626 }, 278.808 },
+ { { -14.457, -3.89453, -5.40769 }, 265.43 },
+ { { 14.4023, 19.6953, -5.40768 }, 91.5292 },
+ { { 14.4004, 20.4277, -5.40769 }, 86.6895 },
+ { { 9.92969, 23.1992, -5.40769 }, 352.998 }
+ };
+ pelicanPos[] = {
+ { { 14.5156, -8.02148, -5.40772 }, 90 },
+ { { -14.6602, 12.4863, -5.40772 }, 270 }
+ };
+ shoeboxPos[] = {
+ { { 14.9688, -20.9824, -5.375 }, 86 }
+ };
+ palletPos[] = {
+ { { 13.8945, 12.375, -5.375 }, 86 },
+ { { -12.043, 22.7324, -5.375 }, 86 },
+ { { -14.209, 22.5332, -5.375 }, 86 }
+ };
+ freezerPos[] = {
+ { { 14.6035, 21.8516, -5.375 }, 86 }
+ };
+ };
+ class Land_CarService_F : Default {
+ shelfPos[] = {
+ { { -5.08594, -0.996094, -1.28249 }, 271.675 },
+ { { 4.69141, 5.75781, -1.28248 }, 88.5845 },
+ { { -0.40625, 7.68945, -1.28235 }, 89.3095 },
+ { { 0.767578, 8.21289, -1.28248 }, 358.72 }
+ };
+ fridgePos[] = {
+ { { 1.85352, 8.18359, -1.28246 }, 358.017 }
+ };
+ couchPos[] = {
+ { { 3.74219, 0.666016, -1.2825 }, 2.03192 }
+ };
+ chairPos[] = {
+ { { 4.28711, 3.18164, -1.28249 }, 83.2968 }
+ };
+ filingPos[] = {
+ { { 4.66992, 4.72852, -1.28246 }, 90.2187 },
+ { { 4.56055, 8.21484, -1.28246 }, 359.503 }
+ };
+ pelicanPos[] = {
+ { { -2.64063, 3.3418, -1.36499 }, 279.695 }
+ };
+ tablePos[] = {
+ { { 0.695313, 2.63086, -1.2825 }, 269.367 }
+ };
+ lockerPos[] = {
+ { { -4.9668, 7.55469, -1.28248 }, 268.961 }
+ };
+ toolRackPos[] = {
+ { { -5.35742, 4.21484, -1.28251 }, 268.905 },
+ { { -2.66602, 8.53711, -1.28252 }, 359.227 }
+ };
+ palletPos[] = {
+ { { 1.45898, 10.209, -10 }, 271 }
+ };
+ freezerPos[] = {
+ { { 0.634766, 0.9375, -1.29904 }, 271 }
+ };
+ };
+ class Land_Cargo_Tower_V1_F : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { 0.552734, -1.625, 5.05352 }, 178.136 },
+ { { -5.64844, -0.777344, -0.146542 }, 268.528 },
+ { { 3.00781, 5.08984, -0.14654 }, 0.118889 },
+ { { 5.29297, -4.09766, 2.45352 }, 181.726 },
+ { { 5.87109, 3.71094, -0.146542 }, 90.215 }
+ };
+ fridgePos[] = {
+ { { -4.76172, 6.00391, 2.58955 }, 0.860298 }
+ };
+ bedPos[] = {
+ { { -1.06836, -2.64844, 2.45344 }, 1.62634 },
+ { { -1.98633, -5.37109, 2.58947 }, 90.633 }
+ };
+ couchPos[] = {
+ { { -2.73828, -4.30469, 0.0657005 }, 92.6866 },
+ { { 3.06641, 4.15234, 2.45343 }, 270.898 }
+ };
+ cookerPos[] = {
+ { { -3.72461, 5.85938, 2.58907 }, 354.227 }
+ };
+ chairPos[] = {
+ { { -5.20117, 4.55859, -0.146549 }, 342.563 }
+ };
+ filingPos[] = {
+ { { -4.07422, 0.931641, 5.05348 }, 270.343 },
+ { { 1.67773, -3.90039, -0.146523 }, 178.258 },
+ { { 2.23047, -3.91016, -0.146523 }, 176.187 },
+ { { 2.77344, -3.92188, -0.146523 }, 177.87 },
+ { { -0.625, 6.09961, 2.58951 }, 5.7925 },
+ { { -1.2207, 6.14258, 2.58951 }, 348.149 },
+ { { 5.6582, 4.91406, -0.14642 }, 44.1073 }
+ };
+ pelicanPos[] = {
+ { { -0.595703, 1.38867, -4.32224 }, 95.4843 },
+ { { -2.75977, -0.216797, 4.97829 }, 358.108 },
+ { { -6.13672, 4.19727, 2.66941 }, 266.308 }
+ };
+ tablePos[] = {
+ { { 6.55664, -0.714844, 2.64038 }, 89.4977 }
+ };
+ lockerPos[] = {
+ { { 5.69727, 1.50391, -0.146555 }, 90.7961 },
+ { { -5.09961, -5.55469, 2.5895 }, 267.631 }
+ };
+ toolRackPos[] = {
+ { { -5.85156, -0.675781, 2.45344 }, 267.998 }
+ };
+ palletPos[] = {
+ { { 4.88086, 3.89453, 4.99228 }, 0 }
+ };
+ freezerPos[] = {
+ { { -2.78516, 4.82227, 0.0422649 }, 0 },
+ { { -2.44922, 6.07422, 2.59228 }, 0 }
+ };
+ cabinetPos[] = {
+ { { -0.0439453, 1.71631, 1.22235 }, 180 },
+ { { 5.98682, 1.67432, 3.82235 }, 180 }
+ };
+ };
+ class Land_Cargo_Tower_V1_No1_F : Land_Cargo_Tower_V1_F { };
+ class Land_Cargo_Tower_V1_No2_F : Land_Cargo_Tower_V1_F { };
+ class Land_Cargo_Tower_V1_No3_F : Land_Cargo_Tower_V1_F { };
+ class Land_Cargo_Tower_V1_No4_F : Land_Cargo_Tower_V1_F { };
+ class Land_Cargo_Tower_V1_No5_F : Land_Cargo_Tower_V1_F { };
+ class Land_Cargo_Tower_V1_No6_F : Land_Cargo_Tower_V1_F { };
+ class Land_Cargo_Tower_V1_No7_F : Land_Cargo_Tower_V1_F { };
+ class Land_Cargo_Tower_V2_F : Land_Cargo_Tower_V1_F { };
+ class Land_Cargo_Tower_V3_F : Land_Cargo_Tower_V1_F { };
+
+ class Land_Cargo_Patrol_V1_F : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { 2.61914, 0.96875, -0.789934 }, 90 }
+ };
+ filingPos[] = {
+ { { 0.0117188, -0.283203, -0.585847 }, 1.42631 }
+ };
+ pelicanPos[] = {
+ { { 2.00977, -1.52344, -0.585956 }, 133.857 }
+ };
+ palletPos[] = {
+ { { -2, -1.18555, -0.546541 }, 0 }
+ };
+ };
+ class Land_Cargo_Patrol_V2_F : Land_Cargo_Patrol_V1_F { };
+ class Land_Cargo_Patrol_V3_F : Land_Cargo_Patrol_V1_F { };
+
+ class Land_Medevac_house_V1_F : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { -2.61328, 1.0918, -0.132166 }, 268.449 }
+ };
+ fridgePos[] = {
+ { { 1.60156, 3.75977, 0.00387168 }, 355.287 }
+ };
+ filingPos[] = {
+ { { 0.804688, 3.71875, 0.0038867 }, 7.82585 },
+ { { -0.345703, 3.80273, 0.00388789 }, 352.697 },
+ { { 0.230469, 3.85742, 0.00388765 }, 358.782 }
+ };
+ pelicanPos[] = {
+ { { -1.60938, 3.26563, 0.00385642 }, 310.616 }
+ };
+ palletPos[] = {
+ { { -0.992188, -1.05469, -10 }, 0 }
+ };
+ freezerPos[] = {
+ { { 1.92969, 0.728516, -0.141539 }, 93 }
+ };
+ cabinetPos[] = {
+ { { -0.466309, -0.0532227, 1.20856 }, 270 }
+ };
+ };
+ class Land_Medevac_HQ_V1_F : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { 2.64648, -5.00391, -3.29263 }, 179.273 },
+ { { 2.29688, 5.35156, -3.17222 }, 270.045 },
+ { { -3.0918, -6.20117, -3.17222 }, 179.371 },
+ { { 7.07422, 5.46094, -3.17222 }, 89.2793 }
+ };
+ fridgePos[] = {
+ { { 0.632813, -6.04492, -3.17222 }, 175.967 }
+ };
+ bedPos[] = {
+ { { -2.65625, 3.33594, -3.29266 }, 272.831 }
+ };
+ couchPos[] = {
+ { { 0.324219, 1.95313, -3.29266 }, 358.773 },
+ { { 2.9082, 1.72461, -3.29266 }, 179.738 }
+ };
+ cookerPos[] = {
+ { { -0.855469, -6.01172, -3.17265 }, 179.15 }
+ };
+ filingPos[] = {
+ { { 8.4043, 2.6875, -3.1722 }, 89.7649 },
+ { { 8.46094, 3.30469, -3.17216 }, 91.4351 },
+ { { 8.44336, 3.92969, -3.1722 }, 86.4131 }
+ };
+ pelicanPos[] = {
+ { { -1.37891, 1.34375, -0.767792 }, 314.355 },
+ { { 8.10742, -1.68359, -3.17223 }, 92.3688 }
+ };
+ lockerPos[] = {
+ { { 4.35938, 6.0918, -3.17224 }, 356.684 }
+ };
+ palletPos[] = {
+ { { 0.730469, -4.40039, -0.740871 }, 88 },
+ { { 0.443359, 5.44727, -10 }, 88 },
+ { { 8.66406, 0.873047, -10 }, 93 }
+ };
+ freezerPos[] = {
+ { { 3.97852, -4.58594, -3.27087 }, 182 }
+ };
+ cabinetPos[] = {
+ { { -4.21851, -3.41992, -1.96077 }, 0 },
+ { { 7.48828, 0.931152, -1.96077 }, 180 }
+ };
+ };
+ class Land_Cargo_HQ_V1_F : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { 0.302734, 4.1875, -3.2987 }, 357.597 },
+ { { -4.12695, -4.01367, -3.2987 }, 270.059 },
+ { { 2.70313, -5.11328, -3.2987 }, 177.669 }
+ };
+ fridgePos[] = {
+ { { 2.61328, 5.1543, -3.17829 }, 267.807 }
+ };
+ bedPos[] = {
+ { { -2.7832, 3.32227, -3.29873 }, 275.975 }
+ };
+ couchPos[] = {
+ { { 3.13867, 1.7832, -3.29873 }, 191.466 }
+ };
+ cookerPos[] = {
+ { { 6.47852, 6.01563, -3.17872 }, 359.818 }
+ };
+ filingPos[] = {
+ { { 1.13867, 4.03906, -3.29869 }, 0.783356 },
+ { { 8.12305, 2.75586, -3.17827 }, 92.0529 },
+ { { 8.17969, 3.33203, -3.17827 }, 94.1181 },
+ { { 8.21094, 3.93945, -3.17827 }, 88.4099 }
+ };
+ pelicanPos[] = {
+ { { 1.14453, -4.05273, -0.773856 }, 93.1656 },
+ { { 7.8418, -1.64844, -0.784355 }, 90.2845 }
+ };
+ tablePos[] = {
+ { { -4.81055, 0.771484, -3.1762 }, 270.808 }
+ };
+ lockerPos[] = {
+ { { 0.353516, -6.19727, -3.17831 }, 179.945 },
+ { { -3.07031, -6.14453, -3.1783 }, 178.945 }
+ };
+ palletPos[] = {
+ { { -4.98828, 2.61328, -10 }, 182 },
+ { { 8.20508, 0.830078, -10 }, 182 }
+ };
+ freezerPos[] = {
+ { { 4.70508, 6.0332, -3.14694 }, 1.99997 }
+ };
+ cabinetPos[] = {
+ { { 7.48877, 0.866943, -1.96684 }, 180 }
+ };
+ };
+ class Land_Cargo_HQ_V2_F : Land_Cargo_HQ_V1_F { };
+ class Land_Cargo_HQ_V3_F : Land_Cargo_HQ_V1_F { };
+
+ class Land_Cargo_House_V1_F : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { 2.3457, 3.13867, 0.0138698 }, 90 }
+ };
+ fridgePos[] = {
+ { { -2.57031, 1.02148, -0.122166 }, 267.298 }
+ };
+ chairPos[] = {
+ { { 1.95898, 1.5293, -0.122179 }, 85.5595 },
+ { { -1.5293, 2.88867, 0.0138509 }, 322.238 }
+ };
+ filingPos[] = {
+ { { 2.32617, 0.175781, -0.122146 }, 94.7773 }
+ };
+ pelicanPos[] = {
+ { { -1.85352, 3.45898, 0.0138566 }, 317.925 }
+ };
+ palletPos[] = {
+ { { -0.875, -0.892578, -10 }, 1.99997 }
+ };
+ freezerPos[] = {
+ { { 0.539063, 3.60547, 0.048461 }, 1.99997 }
+ };
+ cabinetPos[] = {
+ { { -0.491699, -0.0534668, 1.21856 }, 270 }
+ };
+ };
+ class Land_Cargo_House_V2_F : Land_Cargo_House_V1_F {};
+ class Land_Cargo_House_V3_F : Land_Cargo_House_V1_F {};
+
+ class Land_dp_smallFactory_F : Default {
+ shelfPos[] = {
+ { { -1.50586, 4.79297, -1.87129 }, 180.159 }
+ };
+ pelicanPos[] = {
+ { { 0.976563, 3.16797, 2.601 }, 97.492 }
+ };
+ palletPos[] = {
+ { { 10.5059, 3.17969, 1.18859 }, 1.99997 }
+ };
+ cabinetPos[] = {
+ { { 5.49805, 4.76367, -0.461309 }, 270 }
+ };
+ };
+ class Land_i_Garage_V2_F : Default {
+ shelfPos[] = {
+ { { 4.90039, -1.19922, -0.123899 }, 88.7339 }
+ };
+ fridgePos[] = {
+ { { 4.73438, 0.322266, -0.123898 }, 87.5145 }
+ };
+ chairPos[] = {
+ { { 0.949219, -2.05469, -0.124453 }, 180.041 },
+ { { 0.75, 2.23828, -0.120063 }, 0.105377 }
+ };
+ filingPos[] = {
+ { { -0.519531, -2.26758, -0.123836 }, 181.535 },
+ { { -1.18945, -2.25, -0.123765 }, 172.485 },
+ { { 4.83203, -2.30273, -0.123735 }, 99.5615 }
+ };
+ tablePos[] = {
+ { { -2.72266, -2.13672, -0.132633 }, 179.857 }
+ };
+ toolRackPos[] = {
+ { { 2.37305, 2.75977, -0.124017 }, 0.339203 },
+ { { 2.76563, -2.57422, -0.124016 }, 179.612 }
+ };
+ palletPos[] = {
+ { { 4.86719, -2.50781, 3.25354 }, 1.99997 }
+ };
+ freezerPos[] = {
+ { { -0.976563, 2.29883, -0.116461 }, 1.99997 }
+ };
+ };
+ class Land_u_Barracks_V2_F : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { -2.01953, 3.59766, 1.40866 }, 86.5322 },
+ { { -1.18555, 4.4082, 1.40866 }, 267.099 },
+ { { 5.37695, -2.42773, -1.92432 }, 268.209 },
+ { { -6.13281, 2.58594, -1.92432 }, 177.59 },
+ { { 5.46289, 3.92578, 1.40866 }, 274.739 },
+ { { 7.93555, -0.273438, 1.40866 }, 358.598 },
+ { { 8.07617, -0.306641, -1.92432 }, 358.744 },
+ { { 8.76172, 2.60547, -1.92432 }, 177.537 },
+ { { -9.86914, 3.00391, -1.92432 }, 269.405 },
+ { { -10.7129, 3.96875, -1.92432 }, 83.8923 },
+ { { -12.1953, -0.359375, 1.40871 }, 357.971 },
+ { { -14.7266, 2.57813, 1.40876 }, 181.364 },
+ { { -16.127, -0.359375, -1.92432 }, 357.877 }
+ };
+ fridgePos[] = {
+ { { 5.38867, -2.61719, 1.40864 }, 268.987 },
+ { { -10.6797, -1.86133, 1.40864 }, 89.0169 },
+ { { 10.7656, 4.75586, -1.92426 }, 91.9329 }
+ };
+ bedPos[] = {
+ { { 0.00390625, 3.40234, -1.92435 }, 91.4153 },
+ { { 3.58984, -1.56055, 1.40863 }, 1.31381 },
+ { { 9.80469, 3.27344, 1.40863 }, 97.6807 },
+ { { -11.7617, -1.10547, -1.92435 }, 269.367 }
+ };
+ couchPos[] = {
+ { { 2.72656, -1.28516, -1.92434 }, 273.867 },
+ { { -12.2988, 4.4668, 1.40864 }, 273.1 },
+ { { -14.6855, 3.48633, -1.92434 }, 92.4456 }
+ };
+ wardrobePos[] = {
+ { { -1.10742, -2.48438, 1.40877 }, 271.139 },
+ { { 4.26367, 4.1543, -1.92423 }, 90.3193 }
+ };
+ cookerPos[] = {
+ { { 5.52148, -1.29688, 1.40827 }, 269.9 },
+ { { 10.6504, 3.61328, -1.92474 }, 90.6279 },
+ { { -10.916, -2.91406, 1.40832 }, 90.6295 }
+ };
+ chairPos[] = {
+ { { -0.787109, -2.87109, -1.92433 }, 243.978 },
+ { { -0.953125, 5.07422, -1.92361 }, 283.609 },
+ { { -4.85156, -2.75781, -1.92434 }, 47.0285 },
+ { { 10.4219, 5.0625, 1.40864 }, 65.2562 },
+ { { -16.418, 2.94922, 1.40865 }, 214.598 },
+ { { -16.4785, -2.82031, -1.91074 }, 233.102 }
+ };
+ filingPos[] = {
+ { { -1.01953, -0.453125, -1.92431 }, 357.404 },
+ { { -2.16602, 2.66797, -1.92431 }, 110.166 },
+ { { -2.17773, 4.83203, -1.9243 }, 85.2777 },
+ { { -2.19727, 5.30664, 1.40868 }, 84.274 },
+ { { -2.1875, 5.33203, -1.9243 }, 86.7386 },
+ { { 4.37109, 4.39844, 1.40868 }, 71.7087 },
+ { { 5.33984, -3.24219, -1.9243 }, 266.113 },
+ { { 5.41602, 3.54102, -1.9243 }, 263.452 },
+ { { 4.29102, 4.91797, 1.40868 }, 85.4132 },
+ { { 5.37891, 4.10938, -1.9243 }, 275.738 },
+ { { 4.30859, 5.38086, 1.40868 }, 86.1467 },
+ { { 5.42188, 4.70898, -1.9243 }, 265.797 },
+ { { -8.33398, 2.60352, 1.40874 }, 182.724 },
+ { { -8.9707, 2.60156, 1.40873 }, 180.321 },
+ { { -9.7832, 2.66797, 1.40867 }, 195.667 },
+ { { 10.8789, -0.318359, 1.40868 }, 73.9709 },
+ { { 10.9199, -2.47656, -1.9243 }, 90.1058 },
+ { { 10.9004, -3.0625, -1.9243 }, 90.2496 },
+ { { -10.8066, 5.09375, -1.9243 }, 83.8553 },
+ { { -16.6758, -2.74023, 1.40868 }, 269.525 },
+ { { -16.7051, -3.23438, 1.40868 }, 265.732 },
+ { { -16.6211, 5.41211, 1.40871 }, 281.602 }
+ };
+ pelicanPos[] = {
+ { { -9.26563, -4.74609, 1.40864 }, 207.949 },
+ { { 10.4531, -2.80273, 1.40864 }, 136.408 },
+ { { -16.666, 6.80859, 1.40864 }, 268.101 }
+ };
+ tablePos[] = {
+ { { 1.79883, -0.546875, 1.40863 }, 0.30365 },
+ { { 7.95117, -3.04688, 1.40863 }, 181.397 },
+ { { -16.5781, 4.66797, -1.92435 }, 269.307 }
+ };
+ lockerPos[] = {
+ { { 0.539063, 2.65234, 1.40864 }, 180.316 },
+ { { 6.29492, -0.507813, -1.92434 }, 359.612 },
+ { { -6.15625, 2.65625, 1.40874 }, 178.513 },
+ { { -7.85352, 2.64844, -1.92434 }, 178.304 }
+ };
+ freezerPos[] = {
+ { { -5.82227, -4.86328, 1.49066 }, 185 },
+ { { -6.21875, 5.08398, 1.49066 }, 1.99997 },
+ { { -16.0039, -0.580078, 1.49066 }, 1.99997 }
+ };
+ cabinetPos[] = {
+ { { -7.6416, -5.42383, -0.409235 }, 270 },
+ { { -17.0132, 1.60693, 2.89076 }, 0 }
+ };
+ };
+ class Land_i_Barracks_V2_F : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { -3.91406, 4.36816, 0.579132 }, 0.755371 },
+ { { -7.16211, -2.42676, 3.91308 }, 90 },
+ { { -7.08789, -3.69434, 0.579177 }, 88.7136 },
+ { { 7.91797, 2.16504, 0.579097 }, 93.2098 },
+ { { 8.86719, 2.98145, 0.579103 }, 265.996 },
+ { { 12.2988, 1.54297, 3.91308 }, 180.227 }
+ };
+ fridgePos[] = {
+ { { -13.209, -3.86133, 0.579104 }, 267.951 },
+ { { -13.1953, -3.96875, 3.91308 }, 266.429 }
+ };
+ bedPos[] = {
+ { { 3.25391, 2.82422, 0.579081 }, 181.072 },
+ { { 7.13086, -3.10645, 0.579082 }, 359.996 },
+ { { 10.2598, -2.19531, 3.91306 }, 274.345 },
+ { { -12.0977, 2.37695, 3.91306 }, 91.0109 },
+ { { -12.6543, 3.00977, 0.579082 }, 184.452 }
+ };
+ couchPos[] = {
+ { { 6.04297, -2.55762, 3.91306 }, 280.83 },
+ { { 10.2754, -2.4502, 0.579081 }, 280.799 }
+ };
+ cookerPos[] = {
+ { { -12.6621, -1.54199, 0.578749 }, 358.466 },
+ { { -13.2383, -2.48926, 3.91281 }, 270.982 }
+ };
+ chairPos[] = {
+ { { 2.58594, -3.91309, 0.579165 }, 261.223 },
+ { { -1.79297, -5.75391, 3.91291 }, 133.686 },
+ { { -5.79688, -5.7041, 3.91307 }, 219.674 },
+ { { -7.625, 3.94141, 0.579091 }, 54.7852 },
+ { { -7.74414, 3.70801, 3.91307 }, 37.1618 },
+ { { 9.36328, -3.69824, 3.91306 }, 252.24 },
+ { { 13.834, -3.76172, 0.579099 }, 137.181 }
+ };
+ filingPos[] = {
+ { { 2.26172, -1.52051, 3.91319 }, 357.145 },
+ { { 1.2832, 3.91797, 3.9131 }, 85.9261 },
+ { { 1.24609, 4.37402, 3.9131 }, 83.3282 },
+ { { 4.24805, 1.63574, 3.9131 }, 173.705 },
+ { { 4.69336, 1.63379, 3.9131 }, 177.094 },
+ { { -6.30273, 3.34766, 0.579124 }, 266.774 },
+ { { -6.23438, 3.84766, 0.579123 }, 274.501 },
+ { { -7.2832, -4.13379, 3.91315 }, 178.61 },
+ { { 7.93555, 3.07422, 0.57919 }, 82.7785 },
+ { { 9.14648, 1.65332, 3.91318 }, 184.404 },
+ { { -13.1055, 4.26563, 3.91319 }, 288.672 },
+ { { 14.2305, 1.56543, 3.9131 }, 90.9699 }
+ };
+ pelicanPos[] = {
+ { { -2.50391, -5.04199, 7.4924 }, 169.602 },
+ { { -12.8242, 5.72266, 3.82744 }, 317.876 }
+ };
+ tablePos[] = {
+ { { -2.72852, 1.75391, 3.91306 }, 178.339 },
+ { { -3.75781, -6.08105, 3.91306 }, 180.247 },
+ { { -9.46484, 4.12988, 3.91306 }, 359.779 },
+ { { -10.1289, 4.10156, 0.579082 }, 0.00921631 }
+ };
+ lockerPos[] = {
+ { { 1.2793, 3.78418, 0.579087 }, 86.8882 },
+ { { -2.58789, -3.3584, 0.579131 }, 359.544 },
+ { { -6.10352, 2.22168, 3.9131 }, 269.383 },
+ { { -6.22266, 2.14551, 0.57918 }, 271.326 },
+ { { 7.8125, 3.70313, 3.91307 }, 88.2042 },
+ { { 14.0723, -3.22754, 3.91322 }, 88.3252 },
+ { { 14.2012, 3.70703, 0.579188 }, 88.1507 }
+ };
+ toolRackPos[] = {
+ { { -2.93359, 1.23438, 0.579066 }, 180.737 }
+ };
+ freezerPos[] = {
+ { { -8.96094, -1.70605, 0.508462 }, 360 },
+ { { -9.27344, -1.7334, 3.85846 }, 360 }
+ };
+ cabinetPos[] = {
+ { { -6.55322, -2.76904, 5.30856 }, 0 }
+ };
+ };
+ class Land_i_Barracks_V1_F : Land_i_Barracks_V2_F {};
+
+ class Land_d_Windmill01_F : Default {
+ pelicanPos[] = {
+ { { -0.888672, 0.150391, 0.965859 }, 132.301 },
+ { { -2.92773, 2.72852, 0.965859 }, 132.301 }
+ };
+ shoeboxPos[] = {
+ { { -1.11328, 1.94141, -2.32494 }, 0 }
+ };
+ palletPos[] = {
+ { { -1.2168, -0.789063, -2.31882 }, 360 }
+ };
+ };
+ class Land_u_Shed_Ind_F : Default {
+ shelfPos[] = {
+ { { -5.90234, -1.64453, -1.45137 }, 179.958 },
+ { { -0.0195313, 8.39648, -1.43504 }, 6.50078 }
+ };
+ chairPos[] = {
+ { { -6.70703, 1.93359, -1.43049 }, 357.957 }
+ };
+ filingPos[] = {
+ { { -4.83203, 2.18359, -1.43498 }, 3.3181 },
+ { { 6.72266, -1.33984, -1.43502 }, 208.603 }
+ };
+ pelicanPos[] = {
+ { { -4.81055, 2.53125, 1.51679 }, 180.197 }
+ };
+ palletPos[] = {
+ { { -2.47266, 7.94922, -1.51769 }, 360 },
+ { { 8.92383, 3.15039, -1.51769 }, 91 },
+ { { 14.834, -0.927734, -1.51769 }, 360 }
+ };
+ freezerPos[] = {
+ { { -4.94141, 0.177734, -1.51769 }, 91 }
+ };
+ };
+ class Land_i_Shed_Ind_F : Default {
+ shelfPos[] = {
+ { { 3.75781, -1.39844, -1.43597 }, 178.598 },
+ { { -6.29688, -1.64844, -1.43597 }, 180.042 },
+ { { -1.85938, 8.64844, -1.43597 }, 1.254 },
+ { { 15.8086, 5.01367, -1.43592 }, 90.0259 }
+ };
+ fridgePos[] = {
+ { { -4.0918, 2.25391, -1.43614 }, 269.878 }
+ };
+ couchPos[] = {
+ { { 0.0527344, 3.64453, -1.43621 }, 214.408 }
+ };
+ cookerPos[] = {
+ { { -5.86523, 2.00391, -1.43661 }, 358.838 }
+ };
+ chairPos[] = {
+ { { 15.4688, 7.75586, -1.43558 }, 90.0616 }
+ };
+ filingPos[] = {
+ { { -4.89648, -1.49609, -1.43617 }, 178.115 },
+ { { -0.6875, 8.5293, -1.43617 }, 358.177 },
+ { { 15.6309, 6.44336, -1.43617 }, 86.6001 }
+ };
+ lockerPos[] = {
+ { { 8.71875, -1.44141, -1.43617 }, 179.064 }
+ };
+ toolRackPos[] = {
+ { { -1.60742, -1.83594, -1.43602 }, 181.024 },
+ { { 8.53906, 8.82422, -1.43602 }, 0.0482483 }
+ };
+ shoeboxPos[] = {
+ { { -6.76953, 2.15039, -1.43621 }, 356.704 }
+ };
+ palletPos[] = {
+ { { -3.32031, -0.679688, -1.50884 }, 0 },
+ { { 2.86133, 7.82031, -1.50884 }, 0 },
+ { { 4.82617, 7.72266, -1.50884 }, 91 }
+ };
+ freezerPos[] = {
+ { { -5.0293, 0.304688, -1.47884 }, 91 }
+ };
+ };
+ class Land_BagBunker_Large_F : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { 0.0820313, -0.914063, -0.766759 }, 269.689 },
+ { { -3.85156, -1.18555, -0.76676 }, 272.369 }
+ };
+ couchPos[] = {
+ { { 2.64648, -3.39258, -0.766787 }, 87.3199 }
+ };
+ filingPos[] = {
+ { { 1.02148, 1.80078, -0.766742 }, 359.841 },
+ { { -1.57031, 1.58008, -0.766741 }, 359.563 }
+ };
+ pelicanPos[] = {
+ { { 0.382813, 0.970703, -0.766773 }, 269.105 },
+ { { -0.769531, -1.35352, -0.766773 }, 73.6849 }
+ };
+ tablePos[] = {
+ { { -0.646484, 0.492188, -0.766783 }, 90.0316 }
+ };
+ palletPos[] = {
+ { { 3.13672, -1.19922, -0.69166 }, 0 },
+ { { -3.17773, -3.54102, -0.69166 }, 0 }
+ };
+ };
+ class Land_BagBunker_Tower_F : Default {
+ lootType = "mil";
+ pelicanPos[] = {
+ { { -1.95508, -0.0195313, -0.90682 }, 269.117 },
+ { { -0.703125, -2.67383, 0.543192 }, 212.824 }
+ };
+ shoeboxPos[] = {
+ { { 2.37891, -1.93555, -0.873341 }, 0 }
+ };
+ palletPos[] = {
+ { { -0.732422, 2.07617, -2.17334 }, 348 },
+ { { -0.771484, -2.21094, -2.17334 }, 0 }
+ };
+ };
+ class Land_Offices_01_V1_F : Default {
+ shelfPos[] = {
+ { { 1.18555, 3.91016, 0.712739 }, 359.463 },
+ { { -1.66797, -5.50195, -7.10147 }, 270.268 },
+ { { 7.38477, 1.79688, 4.63913 }, 89.9385 },
+ { { 7.48047, -4.49414, -3.18539 }, 87.3787 },
+ { { 8.3457, 2.93164, -7.08514 }, 270.832 },
+ { { 12.4883, 3.5293, -7.08517 }, 89.032 },
+ { { -16.5742, 6.37695, -7.08533 }, 269.995 }
+ };
+ fridgePos[] = {
+ { { 8.60547, 1.05273, -7.08536 }, 261.917 }
+ };
+ couchPos[] = {
+ { { 6.63086, 2.61133, -7.08539 }, 359.378 }
+ };
+ cookerPos[] = {
+ { { 12.3555, 2.48438, -7.0863 }, 88.735 }
+ };
+ chairPos[] = {
+ { { 7.04297, -3.23633, 0.71985 }, 54.2617 },
+ { { 6.82813, -6.80273, 0.698915 }, 116.603 },
+ { { 12.1465, 7.50391, -7.08539 }, 21.1554 },
+ { { -15.248, 7.0293, 9.81961 }, 126.25 }
+ };
+ filingPos[] = {
+ { { -0.162109, 3.8457, 0.712403 }, 355.347 },
+ { { -1.60547, -3.98047, -7.10168 }, 270.008 },
+ { { 5.1582, 0.861328, 4.62234 }, 186.369 },
+ { { 4.81445, 3.93164, -3.18698 }, 86.2954 },
+ { { 5.69531, 3.77148, -3.18649 }, 2.55798 },
+ { { 7.20898, 3.4082, 4.63931 }, 72.0425 },
+ { { 7.27148, 3.89648, 4.63947 }, 84.6359 },
+ { { 7.46289, -5.73047, -3.18564 }, 89.5913 },
+ { { 9.43164, -0.173828, 4.63879 }, 355.477 },
+ { { 9.89063, -0.171875, 4.63889 }, 357.143 },
+ { { 8.54883, 7.85352, -7.08539 }, 354.434 },
+ { { 9.14648, 7.85742, -7.08536 }, 342.434 },
+ { { -16.377, 4.77148, -7.08542 }, 249.62 },
+ { { -16.3945, 5.33789, -7.08539 }, 272.711 }
+ };
+ pelicanPos[] = {
+ { { -7.70508, 3.27539, 9.80328 }, 165.226 },
+ { { 11.9551, -0.947266, 4.63934 }, 22.6672 },
+ { { -11.2246, -9.87695, 9.81973 }, 358.384 }
+ };
+ tablePos[] = {
+ { { 7.39453, -4.98242, 0.717866 }, 89.9971 }
+ };
+ lockerPos[] = {
+ { { 10.3047, 7.74805, -7.08533 }, 359.889 }
+ };
+ toolRackPos[] = {
+ { { 5.50781, 4.16016, 4.63971 }, 0.0171576 }
+ };
+ shoeboxPos[] = {
+ { { 3.23438, -0.361328, 4.62201 }, 314.676 },
+ { { -13.8223, 3.53125, 9.81958 }, 272.283 }
+ };
+ palletPos[] = {
+ { { -5.23438, 1.21875, 9.83307 }, 348 },
+ { { 6.88477, -4.91602, 9.83307 }, 348 },
+ { { -7.91797, -7.52734, 9.83307 }, 348 },
+ { { 10.6992, -4.91602, 4.62271 }, 0 },
+ { { 11.6484, 6.89063, 9.83307 }, 348 }
+ };
+ freezerPos[] = {
+ { { 12.332, 1.18555, -7.08542 }, 90 }
+ };
+ cabinetPos[] = {
+ { { 4.25293, 0.552734, 5.96314 }, 270 },
+ { { 10.2202, 0.577637, -5.76687 }, 270 }
+ };
+ };
+ class Land_d_Stone_Shed_V1_F : Default {
+ bedPos[] = {
+ { { 2.83203, 1.8418, -0.0155029 }, 269.824 }
+ };
+ palletPos[] = {
+ { { 1.93164, -3.32227, -0.204259 }, 348 }
+ };
+ };
+ class Land_i_House_Small_01_V1_F : Default {
+ shelfPos[] = {
+ { { 0.712891, 2.01953, -1.06801 }, 179.636 }
+ };
+ fridgePos[] = {
+ { { 2.66992, 4.35742, -1.06878 }, 359.99 }
+ };
+ bedPos[] = {
+ { { -3.06641, 0.388672, -1.06846 }, 273.681 }
+ };
+ couchPos[] = {
+ { { -1.00195, -3.09766, -1.06751 }, 91.678 }
+ };
+ wardrobePos[] = {
+ { { -4.11914, -1.85938, -1.08958 }, 269.028 }
+ };
+ cookerPos[] = {
+ { { 3.91992, 4.31055, -1.06914 }, 359.993 }
+ };
+ chairPos[] = {
+ { { 0.800781, -1.12109, -1.06701 }, 74.3133 },
+ { { -3.79492, 2.57031, -1.06882 }, 227.565 },
+ { { -3.71875, -3.625, -1.05222 }, 229.261 }
+ };
+ tablePos[] = {
+ { { -1.875, 2.26172, -1.06836 }, 180.248 }
+ };
+ };
+ class Land_i_House_Small_01_V2_F : Land_i_House_Small_01_V1_F {};
+ class Land_i_House_Small_01_V3_F : Land_i_House_Small_01_V1_F {};
+
+ class Land_u_House_Big_01_V1_F : Default {
+ shelfPos[] = {
+ { { 1.56055, 0.982422, -2.59135 }, 359.087 },
+ { { 3.06836, -2.5918, 0.82871 }, 183.405 },
+ { { 1.39258, -6.70508, -2.59135 }, 182.249 },
+ { { 3.20703, 6.94922, -2.59135 }, 3.01586 }
+ };
+ fridgePos[] = {
+ { { 0.0546875, 6.88477, -2.59135 }, 357.87 }
+ };
+ bedPos[] = {
+ { { -3.03711, -5.87109, 0.828626 }, 91.7906 },
+ { { 3.26758, -5.99805, 0.828626 }, 95.6288 },
+ { { 3.30273, 6.26758, 0.828626 }, 272.1 }
+ };
+ couchPos[] = {
+ { { 0.482422, -1.69141, 0.828588 }, 90.019 },
+ { { -0.523438, -2.12305, -2.59137 }, 184.381 },
+ { { -3.01172, 5.27344, -2.59138 }, 177.246 },
+ { { -2.76172, 6.18164, 0.828629 }, 269.359 }
+ };
+ wardrobePos[] = {
+ { { 4.35352, -3.9375, 0.828695 }, 91.5199 },
+ { { 4.29102, 4.18945, 0.828744 }, 90.0946 }
+ };
+ cookerPos[] = {
+ { { 1.33398, 6.96289, -2.59177 }, 359.496 }
+ };
+ chairPos[] = {
+ { { -2.83594, -0.570313, -2.68137 }, 75.9432 },
+ { { -2.95898, -2.29102, -2.68137 }, 82.8292 },
+ { { 0.705078, 3.7832, 0.828643 }, 180.005 },
+ { { -3.65039, 2.18164, 0.828628 }, 313.022 },
+ { { 4.05078, 3.9043, -2.5792 }, 111.554 }
+ };
+ tablePos[] = {
+ { { 1.75977, 0.580078, 0.828625 }, 359.479 },
+ { { 0.232422, -6.57813, 0.828625 }, 180.157 },
+ { { 4.20898, -5.11133, -2.59138 }, 90.4264 }
+ };
+ toolRackPos[] = {
+ { { -2.86523, 1.09375, -2.5914 }, 179.843 }
+ };
+ freezerPos[] = {
+ { { 1.55859, 3.71289, -2.61788 }, 177 }
+ };
+ };
+ class Land_i_House_Big_01_V1_F : Default {
+ shelfPos[] = {
+ { { -3.33594, 2.69336, 0.828649 }, 0.965714 },
+ { { 2.96875, 3.44531, -2.59135 }, 182.75 },
+ { { 3.70898, -2.63867, 0.828707 }, 180.077 },
+ { { -4.09961, 2.03516, -2.59135 }, 269.739 }
+ };
+ fridgePos[] = {
+ { { 4.11914, 3.69922, -2.59135 }, 168.186 },
+ { { -3.92578, 6.73633, 0.828675 }, 290.478 }
+ };
+ bedPos[] = {
+ { { 0.835938, -4.21289, 0.828626 }, 273.228 },
+ { { 3.64844, -4.54688, 0.828626 }, 1.43391 },
+ { { 3.29297, 6.20508, 0.828626 }, 273.903 }
+ };
+ couchPos[] = {
+ { { -3.18359, -1.30273, 0.828621 }, 181.307 },
+ { { 3.11328, 4.48633, 0.828624 }, 89.1209 },
+ { { -2.99609, 5.30859, -2.59138 }, 178.667 },
+ { { 3.05664, -5.85938, -2.59137 }, 90.8967 }
+ };
+ wardrobePos[] = {
+ { { -3.63281, 3.60742, 0.828697 }, 179.668 },
+ { { 4.30273, -3.64844, -2.59128 }, 90 },
+ { { -2.66016, -6.70117, 0.828702 }, 181.241 }
+ };
+ cookerPos[] = {
+ { { 1.91016, 3.75781, -2.59176 }, 181.387 }
+ };
+ chairPos[] = {
+ { { 1.875, 0.488281, -2.59136 }, 12.1387 },
+ { { 2.37305, 0.478516, 0.85181 }, 84.246 },
+ { { -3, -0.240234, -2.68137 }, 57.9483 },
+ { { -2.76953, -2.30664, -2.68137 }, 80.3317 }
+ };
+ tablePos[] = {
+ { { -1.17188, -1.95703, -2.59138 }, 270.249 },
+ { { 0.105469, 6.84375, 0.828627 }, 0.00192261 }
+ };
+ toolRackPos[] = {
+ { { -2.8125, 1.09375, -2.59139 }, 180.224 }
+ };
+ freezerPos[] = {
+ { { 0.59375, 6.80273, -2.61788 }, 3 }
+ };
+ };
+ class Land_i_House_Big_01_V2_F : Land_i_House_Big_01_V1_F {};
+ class Land_i_House_Big_01_V3_F : Land_i_House_Big_01_V1_F {};
+
+ class Land_Hospital_side1_F : Default {
+ lootBiasPos = 50;
+ lootType = "mil";
+ shelfPos[] = {
+ { { -5.40039, 2.9082, -7.91957 }, 2.14935 },
+ { { -6.25, -7.61719, -7.92645 }, 270.854 },
+ { { 2.96484, 10.916, 7.44774 }, 359.647 },
+ { { 9.71289, -6.21289, -7.92565 }, 87.4192 }
+ };
+ fridgePos[] = {
+ { { -2.66797, -11.2949, -7.92739 }, 179.351 }
+ };
+ bedPos[] = {
+ { { -0.912109, -3.25195, -7.92176 }, 91.7708 },
+ { { 4.10547, -3.19141, -7.92099 }, 89.6996 },
+ { { -0.625, -5.79688, -7.92326 }, 266.29 }
+ };
+ couchPos[] = {
+ { { -0.386719, 1.90234, -7.91998 }, 271.421 }
+ };
+ cookerPos[] = {
+ { { -3.70898, -11.1738, -7.92829 }, 180.136 }
+ };
+ chairPos[] = {
+ { { 7.83008, 2.53906, -7.92018 }, 340.336 },
+ { { 9.28516, 2.51367, -7.92017 }, 27.1802 }
+ };
+ pelicanPos[] = {
+ { { -4.66016, 7.12695, -0.617266 }, 177.338 }
+ };
+ lockerPos[] = {
+ { { -6.14063, 0.242188, -7.92175 }, 268.608 },
+ { { 9.47656, 0.0429688, -7.92081 }, 89.4555 }
+ };
+ toolRackPos[] = {
+ { { -0.167969, 6.7832, 7.44031 }, 0.197876 },
+ { { 9.93164, 5.09375, -7.92028 }, 90.4358 }
+ };
+ shoeboxPos[] = {
+ { { 9.5293, -5.36328, 7.43984 }, 95.593 },
+ { { 0.126953, 11.4395, 2.38099 }, 90 }
+ };
+ palletPos[] = {
+ { { 5.7207, 5.69727, 7.451 }, 90 },
+ { { -2.02539, 10.0586, -7.89901 }, 90 },
+ { { 8.43945, -6.91016, 7.451 }, 90 }
+ };
+ freezerPos[] = {
+ { { 9.43945, -8.53906, -7.90901 }, 90 }
+ };
+ cabinetPos[] = {
+ { { -6.39502, -5.93945, -6.56894 }, 0 },
+ { { 9.81006, -4.22998, -6.56894 }, 180 }
+ };
+ };
+ class Land_Hospital_side2_F : Default {
+ lootBiasPos = 100;
+ lootType = "mil";
+ shelfPos[] = {
+ { { 4.34766, -10.8809, -8.13902 }, 179.22 },
+ { { -5.95703, -10.9258, -8.13085 }, 178.43 },
+ { { 15.5547, -1.91211, -8.13092 }, 359.336 }
+ };
+ fridgePos[] = {
+ { { -8.25586, -8.94922, -8.13093 }, 267.631 }
+ };
+ couchPos[] = {
+ { { -7.19336, 1.38867, -8.13095 }, 179.136 }
+ };
+ cookerPos[] = {
+ { { -8.17969, -10.1816, -8.13134 }, 269.372 }
+ };
+ pelicanPos[] = {
+ { { -7.36133, 3.00391, 11.219 }, 282.51 },
+ { { -10.5195, -4.00586, 7.23841 }, 237.441 }
+ };
+ lockerPos[] = {
+ { { -1.35938, -10.7207, -8.13079 }, 180.383 },
+ { { 8.24609, -10.7422, -8.13077 }, 178.528 },
+ { { 11.8438, -10.709, -8.13078 }, 179.892 }
+ };
+ toolRackPos[] = {
+ { { -8.71094, -3.51367, -8.13078 }, 270 }
+ };
+ palletPos[] = {
+ { { 1.34766, -0.410156, -8.14045 }, 90 },
+ { { -5.58203, -0.400391, -8.14045 }, 90 },
+ { { 6.58008, 3.79297, -8.14045 }, 90 }
+ };
+ freezerPos[] = {
+ { { -4.11914, -10.6406, -8.14045 }, 180 }
+ };
+ cabinetPos[] = {
+ { { 0.117188, -1.76221, -6.77038 }, 90 },
+ { { 1.33496, -11.0347, -6.77038 }, 270 },
+ { { 14.6304, -11.0347, -6.77038 }, 270 }
+ };
+ };
+ class Land_Hospital_main_F : Default {
+ lootBiasPos = 50;
+ lootType = "mil";
+ shelfPos[] = {
+ { { 14.3516, -2.75781, -8.04017 }, 90.0092 },
+ { { 14.4102, -10.8027, -8.04031 }, 88.6201 },
+ { { 6.71875, -18.9082, 7.32756 }, 88.904 }
+ };
+ chairPos[] = {
+ { { -10.5098, -12.3008, -8.04206 }, 272.027 },
+ { { 4.49805, 19.1055, -8.03925 }, 359.681 },
+ { { 6.66016, 19.1504, -8.0383 }, 356.209 },
+ { { 0.691406, -20.6602, -8.03756 }, 178.007 },
+ { { 9.58594, 19.1191, -8.03699 }, 359.114 },
+ { { 5.51953, -20.6738, -8.03836 }, 179.692 }
+ };
+ pelicanPos[] = {
+ { { 5.98242, -6.33008, 7.32735 }, 22.9554 },
+ { { 10.6816, 0.878906, -7.01696 }, 300.456 }
+ };
+ tablePos[] = {
+ { { 3.35938, -20.6563, -8.04205 }, 179.332 }
+ };
+ lockerPos[] = {
+ { { 14.1875, 10.0137, -8.03923 }, 88.9373 },
+ { { 14.1895, 12.209, -8.03929 }, 89.9901 },
+ { { 14.2285, 14.4941, -8.03952 }, 89.9901 }
+ };
+ shoeboxPos[] = {
+ { { -1.01367, -4.61133, -1.04287 }, 188.531 },
+ { { 12.9023, -7.36914, 7.32734 }, 210.758 }
+ };
+ palletPos[] = {
+ { { -10.0547, -6.80469, -8.05151 }, 180 },
+ { { 1.62305, 18.627, -8.05151 }, 180 }
+ };
+ cabinetPos[] = {
+ { { 14.5366, -0.879883, -6.88591 }, 180 },
+ { { 14.5056, -9.5127, -6.88591 }, 180 }
+ };
+ };
+ class Land_d_Shop_02_V1_F : Default {
+ shelfPos[] = {
+ { { -1.25195, -3.0293, -2.79755 }, 250.062 },
+ { { 1.2793, -4.13867, -2.79765 }, 178.402 },
+ { { -5.04688, 2.14063, 1.0899 }, 273.409 }
+ };
+ fridgePos[] = {
+ { { -1.77148, 4.04688, -2.79756 }, 99.5686 }
+ };
+ couchPos[] = {
+ { { 2.12891, -2.2168, 1.09474 }, 94.155 }
+ };
+ chairPos[] = {
+ { { 4.9707, -3.16992, 1.09518 }, 180.623 },
+ { { -4.48633, 4.00586, -2.79765 }, 325.405 },
+ { { -4.54883, 4.10352, 1.08889 }, 330.581 }
+ };
+ pelicanPos[] = {
+ { { 0.566406, 1.81445, 4.50349 }, 353.316 }
+ };
+ palletPos[] = {
+ { { -4.0918, -2.88086, -2.45702 }, 238 },
+ { { 4.7832, 4.58984, -2.52702 }, 238 }
+ };
+ };
+ class Land_d_House_Small_01_V1_F : Default {
+ shelfPos[] = {
+ { { 6.82813, 6.42285, -0.861197 }, 354.675 }
+ };
+ fridgePos[] = {
+ { { 8.44141, 2.11035, -0.859908 }, 88.0808 }
+ };
+ couchPos[] = {
+ { { 4.75, -0.15918, -0.859535 }, 359.982 }
+ };
+ chairPos[] = {
+ { { 3.43359, 4.36914, -0.860575 }, 180.154 },
+ { { 8.06641, 5.74316, -0.861 }, 27.7226 }
+ };
+ pelicanPos[] = {
+ { { 1.42969, -1.45898, 2.73048 }, 98.759 }
+ };
+ palletPos[] = {
+ { { 0.865234, -1.24414, -0.196001 }, 238 }
+ };
+ };
+ class Land_Church_01_V1_F : Default {
+ wardrobePos[] = {
+ { { 4.5957, 5.27051, -6.49416 }, 180.222 }
+ };
+ chairPos[] = {
+ { { 5.29492, -5.31055, -6.49177 }, 10.1886 }
+ };
+ pelicanPos[] = {
+ { { -5.17969, 5.49414, -5.52077 }, 284.503 }
+ };
+ shoeboxPos[] = {
+ { { -5.70313, -4.57422, -5.49586 }, 271.096 }
+ };
+ palletPos[] = {
+ { { -4.17969, -5.43848, -5.50872 }, 238 }
+ };
+ };
+ class Land_Castle_01_tower_F : Default {
+ shelfPos[] = {
+ { { 2.58398, 2.0791, -9.50637 }, 85.6591 }
+ };
+ couchPos[] = {
+ { { -1.63281, -1.07617, -9.50639 }, 183.524 }
+ };
+ chairPos[] = {
+ { { -2.01953, -1.68555, 7.91612 }, 225.648 }
+ };
+ pelicanPos[] = {
+ { { 2.05469, -1.40527, 7.91612 }, 117.265 }
+ };
+ palletPos[] = {
+ { { -1.76758, 2.14648, -9.5529 }, 238 }
+ };
+ };
+ class Land_dp_bigTank_F : Default {
+ pelicanPos[] = {
+ { { 0.326172, -0.174805, 3.57153 }, 253.033 }
+ };
+ palletPos[] = {
+ { { -2.50781, -3.73828, 3.60099 }, 180 },
+ { { -2.02734, 4.60449, 3.60099 }, 238 }
+ };
+ };
+ class Land_i_House_Small_02_V1_F : Default {
+ fridgePos[] = {
+ { { -3.27148, 0.0527344, -0.734623 }, 270.037 }
+ };
+ bedPos[] = {
+ { { 6.20313, -2.11328, -0.726701 }, 91.5496 }
+ };
+ couchPos[] = {
+ { { -0.511719, -1.35156, -0.735134 }, 1.5394 },
+ { { 6.25391, 0.796875, -0.726635 }, 2.02849 }
+ };
+ wardrobePos[] = {
+ { { 1.42578, -2.14453, -0.732787 }, 274.294 }
+ };
+ cookerPos[] = {
+ { { -3.22266, 2.26367, -0.727057 }, 270.633 }
+ };
+ chairPos[] = {
+ { { 1.82813, -0.0859375, -0.732331 }, 294.633 },
+ { { 3.58398, -2.61719, -0.730065 }, 188.429 }
+ };
+ tablePos[] = {
+ { { 4.15039, 2.44727, -0.726453 }, 0.13829 }
+ };
+ };
+ class Land_i_House_Small_02_V2_F : Land_i_House_Small_02_V1_F { };
+ class Land_i_House_Small_02_V3_F : Land_i_House_Small_02_V1_F { };
+
+ class Land_Chapel_V1_F : Default {
+ wardrobePos[] = {
+ { { 6.00195, -3.92969, -2.83485 }, 179.372 },
+ { { 6.51758, 3.87891, -2.83486 }, 0.951279 }
+ };
+ chairPos[] = {
+ { { -5.87305, -3.24414, -2.83491 }, 100.36 }
+ };
+ pelicanPos[] = {
+ { { 6.86914, 0.0175781, -2.63492 }, 267.468 }
+ };
+ tablePos[] = {
+ { { -4.00977, -1.36523, -2.83493 }, 269.847 }
+ };
+ shoeboxPos[] = {
+ { { 1.01758, -1.21484, -2.83492 }, 277.811 },
+ { { 3.37695, 3.05078, -2.83492 }, 276.733 },
+ { { -1.56445, -4.63281, -1.51178 }, 1.34718 }
+ };
+ palletPos[] = {
+ { { -6.60352, -0.580078, -2.83143 }, 107 }
+ };
+ };
+ class Land_Chapel_V2_F : Land_Chapel_V1_F {};
+
+ class Land_Chapel_Small_V1_F : Default {
+ chairPos[] = {
+ { { 3.26953, 0.988281, -0.894284 }, 95.6997 }
+ };
+ pelicanPos[] = {
+ { { 1.88379, -1, -0.54896 }, 269.755 }
+ };
+ shoeboxPos[] = {
+ { { -0.423828, -1.18945, -0.9293 }, 272.97 }
+ };
+ palletPos[] = {
+ { { 5.34961, 1.12695, -0.990805 }, 107 }
+ };
+ };
+ class Land_Chapel_Small_V2_F : Default {
+ chairPos[] = {
+ { { 1.81445, 1.00391, -0.894289 }, 263.639 },
+ { { 1.86621, -1.23633, -0.894289 }, 264.855 }
+ };
+ pelicanPos[] = {
+ { { -0.228516, -0.994141, -0.54997 }, 264.521 }
+ };
+ tablePos[] = {
+ { { 3.75586, -0.105469, -0.894377 }, 89.9709 }
+ };
+ shoeboxPos[] = {
+ { { -0.333984, -0.396484, -0.9293 }, 269.367 }
+ };
+ };
+ class Land_Unfinished_Building_02_F : Default {
+ shelfPos[] = {
+ { { -3.17188, -1.88086, 0.949918 }, 269.1 },
+ { { 5.81641, 1.0918, -2.52319 }, 89.9583 },
+ { { 5.91406, 0.357422, 0.950038 }, 90.0202 },
+ { { -7.89746, 0.162109, 0.949969 }, 268.502 }
+ };
+ bedPos[] = {
+ { { -4.95898, 3.81641, 0.949724 }, 2.84769 }
+ };
+ couchPos[] = {
+ { { -0.923828, -4.65039, 0.949726 }, 89.1011 },
+ { { -6.69727, 1.0293, -2.52443 }, 191.658 }
+ };
+ pelicanPos[] = {
+ { { 0.539063, 3.33398, 0.949805 }, 48.6076 }
+ };
+ lockerPos[] = {
+ { { 2.0166, 4.06055, 0.949846 }, 269.094 }
+ };
+ toolRackPos[] = {
+ { { 1.55176, -1.90625, 0.949803 }, 90 }
+ };
+ shoeboxPos[] = {
+ { { -2.40234, 3.50586, -2.29579 }, 316.814 }
+ };
+ palletPos[] = {
+ { { 3.5625, -2.18359, -2.38678 }, 107 },
+ { { -4.375, 3.11133, -2.43678 }, 107 },
+ { { -7.12988, -2.27539, -2.38678 }, 107 }
+ };
+ };
+ class Land_Unfinished_Building_01_F : Default {
+ shelfPos[] = {
+ { { 1.72168, -2.44336, 1.17171 }, 270.818 },
+ { { -4.88184, 2.35938, 1.17171 }, 269.023 },
+ { { -3.98438, 6.07227, -2.33344 }, 359.657 }
+ };
+ pelicanPos[] = {
+ { { -0.557617, 5.36523, 4.46878 }, 7.08017 },
+ { { -1.00684, 5.38867, -2.33351 }, 80.4785 }
+ };
+ toolRackPos[] = {
+ { { -5.13184, 4.25, 1.1717 }, 270.006 }
+ };
+ shoeboxPos[] = {
+ { { -0.368164, 5.74023, -2.31357 }, 26.9766 }
+ };
+ palletPos[] = {
+ { { -2.25879, -1.67578, 1.17496 }, 107 },
+ { { -3.6416, -1.50586, -2.30504 }, 107 }
+ };
+ };
+ class Land_i_Garage_V1_F : Default {
+ shelfPos[] = {
+ { { -1.55078, 2.56055, -0.123878 }, 2.39618 },
+ { { 1.91309, 2.57422, -0.123676 }, 359.724 }
+ };
+ fridgePos[] = {
+ { { 2.73438, -2.17188, -0.123873 }, 182.516 },
+ { { 4.35547, -1.73828, -0.123592 }, 152.206 }
+ };
+ cookerPos[] = {
+ { { 0.046875, -2.07031, -0.124327 }, 178.265 },
+ { { 4.73438, -0.0839844, -0.124328 }, 90 }
+ };
+ chairPos[] = {
+ { { -3.29883, 2.07813, -0.115259 }, 30.7671 },
+ { { -3.37695, -2.0293, -0.108249 }, 179.713 }
+ };
+ toolRackPos[] = {
+ { { 0.271484, 2.77539, -0.124063 }, 0.0454407 }
+ };
+ freezerPos[] = {
+ { { 1.19922, -1.98047, -0.116426 }, 176 }
+ };
+ };
+ class Land_i_Shop_01_V1_F : Default {
+ shelfPos[] = {
+ { { -3.48438, -1.17578, -2.788 }, 268.197 },
+ { { 3.14453, 4.45508, -2.78799 }, 180.136 }
+ };
+ fridgePos[] = {
+ { { 1.59961, 4.04297, -2.78796 }, 85.053 }
+ };
+ bedPos[] = {
+ { { -2.6543, 2.58594, 1.08346 }, 176.063 }
+ };
+ couchPos[] = {
+ { { -2.60742, 2.36133, -2.78802 }, 178.997 }
+ };
+ wardrobePos[] = {
+ { { 1.71094, 1.96094, 1.10037 }, 90.3614 }
+ };
+ cookerPos[] = {
+ { { 1.47656, 0.724609, -2.7976 }, 91.1 }
+ };
+ chairPos[] = {
+ { { -3.06836, -1.5293, 1.08361 }, 216.965 },
+ { { -3.23242, 6.06445, 1.08373 }, 271.268 },
+ { { -3.09766, 6.14063, -2.78284 }, 312.75 }
+ };
+ pelicanPos[] = {
+ { { -2.66016, -3.25195, 1.07017 }, 300.566 }
+ };
+ freezerPos[] = {
+ { { 1.54688, 2.13867, -2.7976 }, 91.1 }
+ };
+ };
+ class Land_i_Shop_01_V2_F : Land_i_Shop_01_V1_F {};
+ class Land_i_Shop_01_V3_F : Land_i_Shop_01_V1_F {};
+
+ class Land_u_Shop_01_V1_F : Default {
+ shelfPos[] = {
+ { { 1.78516, -0.0390625, -2.90725 }, 88.4493 },
+ { { -3.54688, -0.136719, -2.90725 }, 269.105 },
+ { { -3.5332, -1.28711, -2.90719 }, 270 }
+ };
+ fridgePos[] = {
+ { { 1.63086, 4.2793, -2.90721 }, 88.9036 }
+ };
+ bedPos[] = {
+ { { -2.75195, -0.902344, 0.964377 }, 184.931 }
+ };
+ couchPos[] = {
+ { { 0.546875, 1.35742, 0.963423 }, 8.58237 },
+ { { -2.38672, 2.46484, -2.90728 }, 183.604 }
+ };
+ wardrobePos[] = {
+ { { -3.41992, 2.08984, 0.964587 }, 270.137 },
+ { { -3.36719, 5.67578, -2.90725 }, 269.105 }
+ };
+ cookerPos[] = {
+ { { 3.19727, 4.55469, -2.90767 }, 182.053 }
+ };
+ chairPos[] = {
+ { { 0.945313, 4.17188, 0.962904 }, 81.2836 },
+ { { -2.9707, 3.94727, 0.964307 }, 304.317 }
+ };
+ pelicanPos[] = {
+ { { -2.71094, 6.19141, 0.964416 }, 326.125 }
+ };
+ toolRackPos[] = {
+ { { 2.03125, 1.91406, -2.90729 }, 90 }
+ };
+ palletPos[] = {
+ { { 0.800781, -1.02539, 0.953138 }, 91.1 },
+ { { 0.273438, 8.36328, -3.16686 }, 91.1 }
+ };
+ };
+ class Land_u_Shop_02_V1_F : Default {
+ shelfPos[] = {
+ { { -0.126953, 2.28711, -2.7004 }, 358.842 },
+ { { -4.41406, 4.35938, -2.69497 }, 355.221 }
+ };
+ bedPos[] = {
+ { { -4.14648, -3.36914, 1.21215 }, 101.364 }
+ };
+ couchPos[] = {
+ { { -0.917969, 1.4707, 1.21215 }, 275.214 },
+ { { -0.701172, -2.85156, -2.69499 }, 179.577 }
+ };
+ wardrobePos[] = {
+ { { -5.29297, 1.41602, 1.21222 }, 274.211 }
+ };
+ cookerPos[] = {
+ { { -2, 3.81641, -2.69536 }, 88.9063 }
+ };
+ chairPos[] = {
+ { { 2.67773, -3.54297, 1.21222 }, 123.36 },
+ { { -3.26953, -3.9375, -2.69715 }, 150.356 }
+ };
+ pelicanPos[] = {
+ { { 2.83984, 3.80273, 1.21219 }, 68.5479 }
+ };
+ lockerPos[] = {
+ { { -5.19336, 1.49219, -2.69484 }, 269.367 }
+ };
+ toolRackPos[] = {
+ { { -2.47852, -1.13086, -2.69459 }, 89.5903 }
+ };
+ palletPos[] = {
+ { { 2.65234, -3.43359, -2.68103 }, 91.1 }
+ };
+ };
+ class Land_i_Shop_02_V1_F : Default {
+ shelfPos[] = {
+ { { 3.26367, -1.38867, 1.21217 }, 90.8952 },
+ { { -2.08203, -2.95703, -2.69497 }, 269.105 },
+ { { -1.02539, -4.35742, -2.69497 }, 180.056 },
+ { { -5.05078, 4.06055, -2.69497 }, 316.341 }
+ };
+ fridgePos[] = {
+ { { -1.98047, 3.92383, -2.6833 }, 90.3202 },
+ { { -5.27734, 3.7793, 1.21222 }, 279.71 }
+ };
+ bedPos[] = {
+ { { -0.222656, 1.53906, 1.21215 }, 273.796 }
+ };
+ couchPos[] = {
+ { { 0.4375, 1.25391, -2.70038 }, 267.738 },
+ { { 0.759766, -3.41016, 1.21215 }, 92.1877 }
+ };
+ wardrobePos[] = {
+ { { 2.8125, 4.05664, 1.21287 }, 9.59067 }
+ };
+ cookerPos[] = {
+ { { -5.24609, 1.91992, -2.69537 }, 270 }
+ };
+ chairPos[] = {
+ { { -2.39258, -3.73633, 1.21216 }, 148.243 },
+ { { -4.91406, -1.41211, 1.21217 }, 307.249 },
+ { { 4.62891, 3.41992, 1.21202 }, 300.318 },
+ { { -4.88477, -3.74023, 1.21216 }, 223.381 }
+ };
+ pelicanPos[] = {
+ { { 4.62695, -3.32031, 1.21216 }, 96.5193 }
+ };
+ tablePos[] = {
+ { { -1.75391, -1.13086, -2.69498 }, 258.801 },
+ { { -3.5957, -2.40234, 1.21215 }, 178.44 }
+ };
+ lockerPos[] = {
+ { { -2.96484, -3.17773, -2.6967 }, 86.8359 }
+ };
+ toolRackPos[] = {
+ { { -2.52344, -0.677734, -2.69483 }, 89.3848 }
+ };
+ freezerPos[] = {
+ { { 0.943359, -4.0625, -2.69103 }, 179.201 }
+ };
+ };
+ class Land_i_Shop_02_V2_F : Land_i_Shop_02_V1_F {};
+ class Land_i_Shop_02_V3_F : Land_i_Shop_02_V1_F {};
+
+ class Land_d_Shop_01_V1_F : Default {
+ shelfPos[] = {
+ { { 0.605469, -1.54102, -2.90717 }, 299.385 },
+ { { 4.18555, 0.601563, -2.90725 }, 61.8762 }
+ };
+ fridgePos[] = {
+ { { 4.00195, 2.49414, -2.90721 }, 89.2228 }
+ };
+ bedPos[] = {
+ { { 3.50781, -0.328125, 0.96386 }, 7.76801 }
+ };
+ couchPos[] = {
+ { { 0.0292969, -2.46289, 0.964392 }, 181.746 }
+ };
+ cookerPos[] = {
+ { { 4.14648, 2.53125, 0.962579 }, 89.109 }
+ };
+ chairPos[] = {
+ { { -0.193359, 1.15234, -2.90727 }, 319.613 },
+ { { 3.76758, -3.32617, 0.964494 }, 152.858 }
+ };
+ pelicanPos[] = {
+ { { 1.72461, 1.38086, 4.25002 }, 148.152 }
+ };
+ lockerPos[] = {
+ { { 4.16016, 3.7207, -2.90727 }, 177.719 }
+ };
+ toolRackPos[] = {
+ { { 4.625, -1.60938, -2.90729 }, 90.0519 }
+ };
+ palletPos[] = {
+ { { -0.757813, 4.76367, -2.69686 }, 179.201 },
+ { { -0.251953, -5.05664, -3.17686 }, 179.201 }
+ };
+ };
+ class Land_i_Addon_02_V1_F : Default {
+ fridgePos[] = {
+ { { 3.17969, 3.81641, 0.0858996 }, 89.972 }
+ };
+ bedPos[] = {
+ { { -0.154297, 3.38086, 0.085825 }, 276.397 }
+ };
+ wardrobePos[] = {
+ { { -2.44922, 3.91602, 0.0865476 }, 359.106 }
+ };
+ chairPos[] = {
+ { { 0.693359, 0.376953, 0.0858068 }, 160.478 }
+ };
+ tablePos[] = {
+ { { -2.86133, 1.26953, 0.0858243 }, 269.367 }
+ };
+ palletPos[] = {
+ { { 0.777344, -0.1875, 2.85581 }, 187.201 }
+ };
+ };
+ class Land_u_Addon_02_V1_F : Land_i_Addon_02_V1_F {};
+
+ class Land_d_Addon_02_V1_F : Default {
+ couchPos[] = {
+ { { -0.962891, 2.74805, 0.41301 }, 261.447 }
+ };
+ pelicanPos[] = {
+ { { 1.94531, 2.58301, 0.439629 }, 350.421 }
+ };
+ palletPos[] = {
+ { { -2.35156, 0.995117, 0.423958 }, 187.201 },
+ { { 3.19336, 1.2168, 0.413958 }, 187.201 }
+ };
+ };
+ class Land_d_Stone_HouseSmall_V1_F : Default {
+ shelfPos[] = {
+ { { 7.36328, 2.99121, -0.59085 }, 87.8075 }
+ };
+ fridgePos[] = {
+ { { 3.63281, -1.93262, -0.616286 }, 268.761 }
+ };
+ bedPos[] = {
+ { { 10.1387, 2.39941, -0.585113 }, 271.572 }
+ };
+ couchPos[] = {
+ { { -0.128906, -0.958008, -0.578321 }, 80.7286 }
+ };
+ tablePos[] = {
+ { { 1.56055, 2.4541, -0.599906 }, 3.8147 },
+ { { 7.77539, -0.0078125, -0.597849 }, 341.959 }
+ };
+ palletPos[] = {
+ { { -6.20508, 1.12988, -0.453797 }, 187.201 }
+ };
+ };
+ class Land_i_Stone_HouseSmall_V3_F : Default {
+ shelfPos[] = {
+ { { 0.423828, 0.0566406, -0.65061 }, 91.2415 },
+ { { 8.48047, -0.707031, -0.614687 }, 178.388 }
+ };
+ fridgePos[] = {
+ { { 1.63477, -0.37207, -0.645178 }, 237.969 }
+ };
+ bedPos[] = {
+ { { -7.63867, 3.78809, -0.637772 }, 284.46 }
+ };
+ couchPos[] = {
+ { { -3.54297, 3.81445, -0.635458 }, 279.006 },
+ { { 6.89453, 3.41211, -0.618565 }, 306.201 }
+ };
+ wardrobePos[] = {
+ { { -5.28516, -0.365234, -0.67601 }, 152.535 }
+ };
+ cookerPos[] = {
+ { { 3.74414, -0.546875, -0.636206 }, 178.279 }
+ };
+ chairPos[] = {
+ { { -0.378906, 4.13086, -0.630233 }, 34.7144 }
+ };
+ tablePos[] = {
+ { { -2.85547, 1.70898, -0.659347 }, 164.896 },
+ { { 5.85547, 2.18652, -0.626413 }, 196.919 }
+ };
+ palletPos[] = {
+ { { 9.33398, -2.30273, -10 }, 187.201 }
+ };
+ };
+ class Land_i_Stone_HouseSmall_V2_F : Default {
+ shelfPos[] = {
+ { { 4.76758, -0.796875, -0.631255 }, 179.539 },
+ { { -9.4043, 1.01563, -0.670586 }, 267.808 }
+ };
+ fridgePos[] = {
+ { { 1.48047, -0.0341797, -0.645909 }, 258.003 }
+ };
+ bedPos[] = {
+ { { -1.64648, 4.09277, -0.631337 }, 292.711 }
+ };
+ couchPos[] = {
+ { { -5.07031, 0.208008, -0.67044 }, 95.3583 }
+ };
+ wardrobePos[] = {
+ { { -0.00585938, -0.03125, -0.648986 }, 126.318 }
+ };
+ cookerPos[] = {
+ { { 5.89258, 4.7959, -0.619837 }, 359.875 }
+ };
+ chairPos[] = {
+ { { 8.50977, 0.861328, -0.614511 }, 139.91 },
+ { { 8.43945, 3.40625, -0.614825 }, 57.7087 }
+ };
+ pelicanPos[] = {
+ { { -8.76563, 4.50488, -0.630112 }, 339.768 }
+ };
+ tablePos[] = {
+ { { -5.22852, 2.18652, -0.655036 }, 2.32285 }
+ };
+ };
+ class Land_i_Stone_HouseSmall_V1_F : Land_i_Stone_HouseSmall_V2_F {};
+
+ class Land_i_Stone_Shed_V3_F : Default {
+ bedPos[] = {
+ { { -2.78711, 2.84375, -0.126943 }, 174.67 }
+ };
+ wardrobePos[] = {
+ { { 0.425781, 4.04688, -0.139276 }, 1.30153 }
+ };
+ cookerPos[] = {
+ { { -1.9375, -0.209961, -0.127349 }, 176.707 }
+ };
+ tablePos[] = {
+ { { 2.2207, 2.56445, -0.126943 }, 75.8372 }
+ };
+ palletPos[] = {
+ { { -0.837891, 1.98828, 2.30655 }, 187.201 }
+ };
+ };
+ class Land_i_Stone_Shed_V2_F : Default {
+ fridgePos[] = {
+ { { 2.71875, 3.87891, -0.126784 }, 68.5485 }
+ };
+ bedPos[] = {
+ { { -2.76758, 2.82813, -0.126943 }, 180.094 }
+ };
+ couchPos[] = {
+ { { -1.91602, 0.928711, 0.00655437 }, 98.2006 }
+ };
+ pelicanPos[] = {
+ { { -1.00195, 2.06738, 2.21351 }, 305.061 }
+ };
+ tablePos[] = {
+ { { 0.671875, 1.21875, -0.126942 }, 176.837 }
+ };
+ };
+ class Land_i_Stone_Shed_V1_F : Default {
+ bedPos[] = {
+ { { -2.9209, 0.884766, -0.126943 }, 183.73 }
+ };
+ couchPos[] = {
+ { { -0.408203, 3.18359, -0.126948 }, 274.981 }
+ };
+ chairPos[] = {
+ { { -3.11133, 3.29883, -0.126935 }, 304.61 }
+ };
+ pelicanPos[] = {
+ { { -0.580078, 1.9082, 2.23559 }, 286.89 }
+ };
+ tablePos[] = {
+ { { 0.279297, -0.111328, -0.126944 }, 178.227 }
+ };
+ toolRackPos[] = {
+ { { 3.20313, 3.35938, -0.126961 }, 88.6889 }
+ };
+ };
+ class Land_d_Stone_HouseBig_V1_F : Default {
+ shelfPos[] = {
+ { { -1.88477, 1.23047, -1.6673 }, 89.1051 }
+ };
+ fridgePos[] = {
+ { { -2.71875, -3.03711, -1.66745 }, 188.243 }
+ };
+ bedPos[] = {
+ { { -2.0498, -2.62891, 1.19249 }, 98.1494 }
+ };
+ couchPos[] = {
+ { { 2.18457, -1.48438, -1.61955 }, 5.4863 }
+ };
+ wardrobePos[] = {
+ { { -1.54102, 1.11914, 1.19367 }, 340.004 }
+ };
+ chairPos[] = {
+ { { -0.714844, -3.05078, -1.6675 }, 178.582 }
+ };
+ pelicanPos[] = {
+ { { 4.28516, -0.453125, 1.20476 }, 87.2772 }
+ };
+ tablePos[] = {
+ { { -2.75977, -0.654297, 1.19248 }, 274.611 }
+ };
+ shoeboxPos[] = {
+ { { -0.728516, 0.9375, -0.647514 }, 33.2239 }
+ };
+ palletPos[] = {
+ { { 1.16309, -2.74805, 1.18598 }, 98.2006 }
+ };
+ };
+ class Land_i_Stone_HouseBig_V3_F : Default {
+ shelfPos[] = {
+ { { -1.8916, 1.73047, -1.68199 }, 270.888 },
+ { { 0.605469, 3.55469, 1.19272 }, 359.924 },
+ { { 4.22168, -1.08594, 1.19272 }, 175.587 }
+ };
+ fridgePos[] = {
+ { { -1.59277, -0.886719, -1.68134 }, 246.969 }
+ };
+ bedPos[] = {
+ { { -0.640625, -0.460938, 1.19249 }, 91.5507 }
+ };
+ couchPos[] = {
+ { { 3.75488, 1.30664, -1.66749 }, 9.91046 }
+ };
+ wardrobePos[] = {
+ { { -1.41113, 2.97461, 1.19534 }, 300.8 }
+ };
+ chairPos[] = {
+ { { -1.52539, 1.28516, 1.1925 }, 266.593 }
+ };
+ tablePos[] = {
+ { { 0.642578, -0.855469, -1.67561 }, 187.85 },
+ { { 2.20898, -0.970703, 1.19249 }, 176.776 }
+ };
+ shoeboxPos[] = {
+ { { 0.287109, 3.42773, -0.594017 }, 98.2006 }
+ };
+ };
+ class Land_i_Stone_HouseBig_V2_F : Land_i_Stone_HouseBig_V3_F { };
+ class Land_i_Stone_HouseBig_V1_F : Land_i_Stone_HouseBig_V3_F { };
+
+ class Land_d_House_Big_02_V1_F : Default {
+ shelfPos[] = {
+ { { 0.669922, -1.39453, -3.06634 }, 90 },
+ { { 2.7373, 4.13477, 0.463613 }, 90 },
+ { { -5.60547, 4.73633, -3.0663 }, 338.985 }
+ };
+ fridgePos[] = {
+ { { 2.41797, 0.193359, -3.06639 }, 156.125 }
+ };
+ bedPos[] = {
+ { { 0.832031, 1.24023, 0.463591 }, 73.8195 }
+ };
+ couchPos[] = {
+ { { 1.16406, 3.83398, -3.06641 }, 285.269 }
+ };
+ wardrobePos[] = {
+ { { -5.1709, 0.628906, 0.46367 }, 210.054 }
+ };
+ cookerPos[] = {
+ { { -5.51367, -5.44727, -2.91562 }, 283.817 }
+ };
+ chairPos[] = {
+ { { -5.57617, 0.324219, -3.06635 }, 249.612 },
+ { { -5.49219, -2.3457, 0.523658 }, 265.17 }
+ };
+ pelicanPos[] = {
+ { { 1.33398, 6.15625, 0.40361 }, 34.738 }
+ };
+ tablePos[] = {
+ { { -1.68457, 4.60742, 0.463591 }, 357.124 }
+ };
+ palletPos[] = {
+ { { 1.80078, -5.45703, -2.37291 }, 98.2006 }
+ };
+ };
+ class Land_u_House_Big_02_V1_F : Default {
+ shelfPos[] = {
+ { { -3.04102, -1.03125, 0.962879 }, 0 },
+ { { -3.25195, 0.0253906, -2.40712 }, 185.201 }
+ };
+ fridgePos[] = {
+ { { 2.1748, -1.3457, -2.40712 }, 85 }
+ };
+ bedPos[] = {
+ { { 3.27832, 0.75, 0.939383 }, 94.647 }
+ };
+ couchPos[] = {
+ { { 3.25391, 0.902344, -2.57062 }, 90.0017 },
+ { { -3.19824, 2.6543, 0.939378 }, 187.634 }
+ };
+ wardrobePos[] = {
+ { { 1.70801, 4.85156, 0.939409 }, 359.848 }
+ };
+ cookerPos[] = {
+ { { -1.25, -3.69336, -2.40712 }, 185.201 }
+ };
+ chairPos[] = {
+ { { -3.16992, 0.291016, 0.939465 }, 245.407 },
+ { { -3.71875, -3.23047, -2.40712 }, 215.201 },
+ { { 3.91016, 4.31836, -2.40712 }, 49.2006 }
+ };
+ pelicanPos[] = {
+ { { 3.94434, 4.5, 0.939445 }, 20.8601 }
+ };
+ tablePos[] = {
+ { { -1.43262, 2.4707, 0.939383 }, 85.2193 },
+ { { -3.81055, 3.12305, -2.40712 }, 272.201 }
+ };
+ };
+ class Land_i_House_Big_02_V1_F : Default {
+ shelfPos[] = {
+ { { -4.27734, 0.900391, 0.757645 }, 273.29 },
+ { { 4.46875, 4.30664, -2.64969 }, 89.2152 }
+ };
+ fridgePos[] = {
+ { { 1.91797, -1.44141, -2.64966 }, 87.5481 }
+ };
+ bedPos[] = {
+ { { 2.97656, 0.740234, 0.757623 }, 89.4966 }
+ };
+ couchPos[] = {
+ { { 2.94531, 0.919922, -2.64972 }, 92.2641 },
+ { { 0.375, 4.0293, 0.757618 }, 270.255 }
+ };
+ wardrobePos[] = {
+ { { 4.24219, 4.36523, 0.757747 }, 92.8048 }
+ };
+ cookerPos[] = {
+ { { -1.25, -3.58008, -2.63541 }, 184.944 }
+ };
+ chairPos[] = {
+ { { -3.75586, 0.412109, -2.6497 }, 231.099 },
+ { { -3.82227, -1.31445, 0.757625 }, 308.225 },
+ { { 2.06641, 4.59961, -2.6497 }, 7.39194 }
+ };
+ pelicanPos[] = {
+ { { 3.12305, 6.2168, 0.697647 }, 31.1078 }
+ };
+ tablePos[] = {
+ { { -4.03906, 2.14258, -2.64971 }, 268.404 }
+ };
+ freezerPos[] = {
+ { { -3.42383, -1.25195, -2.63541 }, 360 }
+ };
+ };
+ class Land_i_House_Big_02_V2_F : Land_i_House_Big_02_V1_F {};
+ class Land_i_House_Big_02_V3_F : Land_i_House_Big_02_V1_F {};
+
+ class Land_i_House_Small_03_V1_F : Default {
+ shelfPos[] = {
+ { { 0.273438, 1.06055, -0.398047 }, 178.213 },
+ { { 5.03125, 4.3418, -0.398025 }, 55.5188 }
+ };
+ fridgePos[] = {
+ { { 1.30078, 3.96289, -0.398048 }, 85.9457 }
+ };
+ bedPos[] = {
+ { { -4.09961, 3.68945, -0.39807 }, 268.584 }
+ };
+ couchPos[] = {
+ { { -4.36719, -0.742188, -0.398075 }, 183.015 }
+ };
+ wardrobePos[] = {
+ { { -2.23438, -1.9375, -0.397993 }, 183.121 },
+ { { 5.0918, 1.56055, -0.397933 }, 90.0051 }
+ };
+ cookerPos[] = {
+ { { 1.32813, 2.72852, -0.398477 }, 89.3721 }
+ };
+ chairPos[] = {
+ { { -1.32031, -3.61523, -0.694491 }, 357.783 },
+ { { -2.01563, 4.09961, -0.398058 }, 39.0805 },
+ { { 2.7168, -5.76758, -0.398058 }, 216.364 },
+ { { 4.70508, -5.81641, -0.398057 }, 145.992 }
+ };
+ tablePos[] = {
+ { { 4.98828, -2.87695, -0.398071 }, 89.3266 }
+ };
+ palletPos[] = {
+ { { -2.04102, -5.83398, -10 }, 360 }
+ };
+ };
+ class Land_u_House_Small_02_V1_F : Default {
+ shelfPos[] = {
+ { { -0.0351563, -3.38086, -0.744917 }, 179.437 }
+ };
+ fridgePos[] = {
+ { { 0.369141, -0.267578, -0.743873 }, 91.2655 }
+ };
+ bedPos[] = {
+ { { 6.56055, 1.06641, -0.735898 }, 9.02117 }
+ };
+ couchPos[] = {
+ { { 5.23047, -2.19336, -0.738171 }, 98.8483 }
+ };
+ wardrobePos[] = {
+ { { 1.43945, -2.625, -0.74296 }, 270.844 }
+ };
+ cookerPos[] = {
+ { { -3.2168, 0.0839844, -0.745483 }, 269.137 }
+ };
+ tablePos[] = {
+ { { 4.68359, 2.11523, -0.736894 }, 356.553 }
+ };
+ };
+ class Land_d_House_Small_02_V1_F : Default {
+ fridgePos[] = {
+ { { 7.47266, -0.1875, -0.999054 }, 79.7224 }
+ };
+ bedPos[] = {
+ { { 2.45508, -0.201172, -0.981503 }, 187.343 },
+ { { 6.89844, 1.89258, -1.00027 }, 4.89485 }
+ };
+ chairPos[] = {
+ { { 4.09766, -2.04297, -0.9844 }, 210.762 },
+ { { 7.12305, -2.12109, -0.994862 }, 135.992 }
+ };
+ palletPos[] = {
+ { { -0.767578, -0.916016, -10 }, 276 }
+ };
+ };
+ class Land_Lighthouse_small_F : Default {
+ shelfPos[] = {
+ { { -1.35547, -2.18555, -3.42188 }, 191.463 }
+ };
+ chairPos[] = {
+ { { -1.66309, 1.66602, -3.4219 }, 311.523 }
+ };
+ pelicanPos[] = {
+ { { -1.16602, 1.19336, -0.0622997 }, 276 }
+ };
+ toolRackPos[] = {
+ { { 5.70996, 0.291016, -3.42193 }, 90 }
+ };
+ palletPos[] = {
+ { { 4.57031, -1.70898, -3.3823 }, 276 }
+ };
+ };
+ class Land_WIP_F : Default {
+ shelfPos[] = {
+ { { -0.957031, -4.42969, 12.2029 }, 358.087 },
+ { { -0.919922, -5.26563, 0.396693 }, 178.896 },
+ { { -2.20313, 5.43164, 0.323569 }, 1.17821 },
+ { { 2.03516, -6.10938, 0.397176 }, 14.9686 },
+ { { 5.12598, -5.45313, 8.32229 }, 181.318 },
+ { { -6.88477, 5.69922, 8.33006 }, 356.041 },
+ { { -6.33203, 9.34375, 4.2993 }, 267.673 },
+ { { -5.47656, -11.3945, 0.348352 }, 178.537 },
+ { { -13.2139, 1.17383, 0.390545 }, 90.2068 },
+ { { -13.2334, -2.94336, 4.2993 }, 86.318 },
+ { { 14.3809, 6.43945, 4.29953 }, 181.218 },
+ { { -9.65625, -12.791, 12.2983 }, 180.234 },
+ { { -12.9834, -10.2734, 0.319984 }, 89.2757 }
+ };
+ fridgePos[] = {
+ { { -3.39063, -7.63477, 0.37021 }, 91.2212 }
+ };
+ bedPos[] = {
+ { { 6.81055, 9.57617, 0.352686 }, 180.055 }
+ };
+ couchPos[] = {
+ { { -0.21875, 7.48438, 0.331759 }, 112.451 },
+ { { 4.41992, -9.9707, 4.29707 }, 53.0242 },
+ { { -10.5244, 4.81836, 12.2371 }, 79.3503 },
+ { { 17.5283, -2.80859, 0.327501 }, 353.002 },
+ { { -16.7871, 9.91406, 0.370766 }, 207.103 }
+ };
+ chairPos[] = {
+ { { -8.98828, 4.98828, 0.37769 }, 307.949 },
+ { { 10.1426, -6.32813, 0.338495 }, 11.358 },
+ { { -14, 6.58594, 4.29928 }, 138.034 },
+ { { -15.9365, 7.62305, 8.31643 }, 107.749 },
+ { { -14.8984, 9.5293, 8.31799 }, 137.305 },
+ { { -9.3418, -17.8223, 0.310942 }, 136.534 }
+ };
+ filingPos[] = {
+ { { 5.73438, 6.36328, 4.29928 }, 183.682 }
+ };
+ pelicanPos[] = {
+ { { 9.72461, -10.5352, 8.31388 }, 118.227 },
+ { { -7.59766, -14.3633, 12.2979 }, 67.7859 },
+ { { 23.1895, 1.08008, 4.30315 }, 277.918 }
+ };
+ tablePos[] = {
+ { { -17.8965, 10.6133, 8.31348 }, 303.712 }
+ };
+ lockerPos[] = {
+ { { -7.36816, -9.47852, 4.29681 }, 90.0775 },
+ { { -9.44043, -11.1738, 4.29663 }, 177.772 },
+ { { -8.14551, -14.9766, 8.31173 }, 180.659 }
+ };
+ toolRackPos[] = {
+ { { 1.60059, -5.43945, 0.405369 }, 180.797 },
+ { { 2.0918, 5.63867, 0.351912 }, 357.597 },
+ { { -2.88086, -12.0996, -0.00143886 }, 360 },
+ { { 14.0498, -5.80859, 4.29928 }, 359.535 },
+ { { -10.501, -15.4023, 8.312 }, 179.968 }
+ };
+ shoeboxPos[] = {
+ { { 9.66016, 6.35352, 4.31021 }, 190.576 },
+ { { -3.89844, -11.2754, 0.345911 }, 173.847 },
+ { { 28.7275, -2.26172, 0.302157 }, 142.217 }
+ };
+ palletPos[] = {
+ { { -2.81641, 3.73828, 12.2086 }, 15 },
+ { { -3.99902, -3.44336, 12.2086 }, 15 },
+ { { 0.981445, -6.29688, 8.33855 }, 15 },
+ { { 3.71094, 6.82617, 4.32855 }, 182 },
+ { { -3.94727, -10.5742, 8.33855 }, 15 },
+ { { -5.66602, -9.97656, 4.32855 }, 345.6 },
+ { { -8.00586, 10.6641, 4.32855 }, 182 },
+ { { -13.8838, -1.19727, 0.338561 }, 360 },
+ { { -15.0645, 1.19141, 8.33855 }, 15 },
+ { { 12.4063, 10.8125, 0.368561 }, 265.5 },
+ { { -17.6748, -1.5, 0.368561 }, 265.5 },
+ { { -17.7871, -4.42773, 4.32855 }, 182 },
+ { { -15.6992, -10.6797, 0.338561 }, 360 },
+ { { 23.7109, -1.23633, 8.23855 }, 289.5 }
+ };
+ };
+ class Land_i_Addon_03mid_V1_F : Default {
+ couchPos[] = {
+ { { -3.33203, 0.30957, -0.0338135 }, 176.588 }
+ };
+ pelicanPos[] = {
+ { { 3.95313, 1.0918, -0.0338745 }, 101.571 }
+ };
+ palletPos[] = {
+ { { 0.703125, -0.210938, -0.000281334 }, 15 }
+ };
+ };
+ class Land_i_Addon_03_V1_F : Default {
+ chairPos[] = {
+ { { 2.5, -0.929688, -0.0765305 }, 346.611 },
+ { { -2.61914, -1.03125, -0.0765266 }, 17.8128 }
+ };
+ palletPos[] = {
+ { { 3.56641, 2.50391, -10 }, 344 },
+ { { -3.58594, 2.75, -10 }, 15 }
+ };
+ };
+ class Land_i_Addon_04_V1_F : Default {
+ chairPos[] = {
+ { { -3.78711, -1.16211, 0.050499 }, 21.1258 }
+ };
+ pelicanPos[] = {
+ { { -2.04883, 0.263672, 0.0532227 }, 215.663 }
+ };
+ palletPos[] = {
+ { { -0.130859, 2.37695, -10 }, 344 }
+ };
+ };
+ class Land_LightHouse_F : Default {
+ chairPos[] = {
+ { { 1.64063, -3.0918, -11.1061 }, 121.303 }
+ };
+ pelicanPos[] = {
+ { { -0.318359, -3.61328, 8.12647 }, 220.41 },
+ { { 0.697266, -4.32227, -11.1665 }, 248.695 }
+ };
+ shoeboxPos[] = {
+ { { -0.214844, -4.24609, -11.1689 }, 225.43 },
+ { { 1.87109, -4.14453, 8.13151 }, 344 }
+ };
+ };
+ class Land_GH_Gazebo_F : Default {
+ shelfPos[] = {
+ { { -5.49609, -1.95898, -1.76052 }, 180.195 }
+ };
+ bedPos[] = {
+ { { 6.02734, 1.77734, -1.76616 }, 1.01784 }
+ };
+ couchPos[] = {
+ { { -5.99219, 1.83398, -1.76616 }, 175.953 }
+ };
+ wardrobePos[] = {
+ { { 6.67773, -0.783203, -1.7661 }, 88.4633 }
+ };
+ pelicanPos[] = {
+ { { -0.517578, 0.345703, -1.76613 }, 47.9599 }
+ };
+ tablePos[] = {
+ { { -6.71094, -0.613281, -1.76616 }, 269.48 }
+ };
+ palletPos[] = {
+ { { 1.63672, 1.53516, -1.76332 }, 358 },
+ { { -2.40039, 2.01953, -1.76332 }, 290 }
+ };
+ };
+ class Land_GH_MainBuilding_right_F : Default {
+ shelfPos[] = {
+ { { 1.30273, -7.28516, -1.06903 }, 104.132 }
+ };
+ fridgePos[] = {
+ { { 3.30859, 1.99219, -5.50915 }, 196.553 },
+ { { 0.769531, -6.8125, 3.37646 }, 185.624 },
+ { { 1.35352, -11.4238, 3.83718 }, 14.2214 },
+ { { -14.1602, 5.25781, -1.06901 }, 244.418 }
+ };
+ bedPos[] = {
+ { { -1.76758, 1.86133, 3.37644 }, 290.999 },
+ { { -4.86328, 1.69727, 3.37644 }, 18.4142 },
+ { { -1.08398, 5.9043, -1.06907 }, 197.348 },
+ { { 6.74609, -1.57813, 3.37643 }, 24.4042 },
+ { { -3.48242, 6.48047, -1.06907 }, 21.0007 },
+ { { 7.32031, 1.24609, -1.06908 }, 25.1119 },
+ { { -2.52734, 10.3438, -5.50922 }, 20.4328 },
+ { { 8.82813, 7.0293, -5.50922 }, 26.5858 },
+ { { -10.5645, 8.5625, -1.06908 }, 24.9801 },
+ { { -13.9043, 3.83008, 3.37644 }, 196.357 },
+ { { -12.2109, 10.7422, -5.50922 }, 201.181 }
+ };
+ couchPos[] = {
+ { { 4.1582, 8.32813, -5.50922 }, 23.8942 }
+ };
+ wardrobePos[] = {
+ { { 1.61328, -2.05078, -1.06904 }, 192.819 },
+ { { 1.00977, 5.89063, -5.50915 }, 195.313 },
+ { { 5.52734, -4.44531, 3.37651 }, 170.013 },
+ { { -9.79492, 0.988281, -1.06905 }, 197.093 },
+ { { -10.9043, -3.53125, 3.37651 }, 199.701 },
+ { { -8.48242, 13.2871, -5.50919 }, 104.652 }
+ };
+ cookerPos[] = {
+ { { 2.11328, 2.37109, -5.50961 }, 195.987 }
+ };
+ chairPos[] = {
+ { { -1.2207, -2.72656, 3.37645 }, 193.938 },
+ { { 3.36523, 2.84375, -1.06907 }, 101.74 },
+ { { -10.2559, 1.17578, 3.37646 }, 283.356 },
+ { { -9.08008, 5.47266, -1.06906 }, 268.731 },
+ { { -0.0585938, 11.2246, -5.50921 }, 304.857 },
+ { { -11.377, 2.25977, 3.37684 }, 104.34 }
+ };
+ filingPos[] = {
+ { { -4.86328, -8.57031, -1.069 }, 282.224 }
+ };
+ pelicanPos[] = {
+ { { -0.679688, -0.609375, -1.06897 }, 139.998 },
+ { { -8.87891, 5.31641, -5.50921 }, 202.579 },
+ { { -15.1152, -1.07031, 3.37656 }, 307.599 },
+ { { -15.6387, -10.627, -5.5092 }, 130.018 }
+ };
+ tablePos[] = {
+ { { -0.0839844, 1.53516, -1.06908 }, 192.028 },
+ { { 2.57422, -1.21094, 3.37644 }, 104.506 },
+ { { -6.80078, 3.25781, -1.06908 }, 194.092 },
+ { { -7.66602, -1.30859, 3.37644 }, 194.642 },
+ { { -0.845703, 9.5293, -5.50922 }, 284.72 },
+ { { -14.7227, 0.589844, 3.37643 }, 196.169 }
+ };
+ lockerPos[] = {
+ { { -4.8125, -5.11523, -1.06906 }, 15.9695 }
+ };
+ palletPos[] = {
+ { { 8.36523, 7.57813, -1.0171 }, 37.2845 },
+ { { -4.83398, 11.3008, -1.0171 }, 357 },
+ { { -10.7734, 12.9609, -1.0171 }, 96 }
+ };
+ freezerPos[] = {
+ { { -6.79492, -6.25781, -1.0171 }, 283 }
+ };
+ };
+ class Land_GH_MainBuilding_middle_F : Default {
+ shelfPos[] = {
+ { { 2.69238, 3.21484, -8.37759 }, 179.858 },
+ { { -5.88867, 0.726563, -3.91598 }, 105.411 },
+ { { 5.24609, 11.0605, -3.91652 }, 270.656 },
+ { { -15.541, -6.12305, 0.521439 }, 14.5104 },
+ { { 14.248, -9.52734, 0.521439 }, 256.088 }
+ };
+ fridgePos[] = {
+ { { -15.1309, -2.81836, 0.521437 }, 13.9473 }
+ };
+ couchPos[] = {
+ { { -13.6484, -0.876953, 4.97235 }, 195.253 }
+ };
+ wardrobePos[] = {
+ { { 14.1123, -3.39453, 0.521494 }, 346.293 }
+ };
+ chairPos[] = {
+ { { 6.45313, 0.845703, -3.91599 }, 247.596 },
+ { { -12.459, -3.85938, 0.521418 }, 73.8369 },
+ { { -5.72656, 11.7988, -3.90909 }, 37.8367 },
+ { { 12.8564, 5.21484, 0.521416 }, 112.013 },
+ { { -0.03125, -16.3359, 4.97174 }, 184.279 },
+ { { -6.17188, -16.8965, 0.521433 }, 185.345 },
+ { { -3.02246, 21.9258, -9.01524 }, 195.022 }
+ };
+ filingPos[] = {
+ { { -4.35156, 3.39844, -8.37744 }, 205.858 },
+ { { -16.0371, -5.33398, 0.521456 }, 268.695 }
+ };
+ pelicanPos[] = {
+ { { -1.16016, 8.58008, -9.13322 }, 288.066 }
+ };
+ tablePos[] = {
+ { { 14.1885, 0.773438, 4.97233 }, 74.1932 }
+ };
+ lockerPos[] = {
+ { { -16.1133, -9.58789, 0.521435 }, 196.292 }
+ };
+ toolRackPos[] = {
+ { { 4.72754, 4.68555, -8.37762 }, 90.6886 }
+ };
+ palletPos[] = {
+ { { -6.27344, 10.8496, 0.576112 }, 251 },
+ { { -14.5596, -8.70117, 0.576112 }, 251 }
+ };
+ freezerPos[] = {
+ { { 13.5488, -5.76953, 0.576112 }, 251 }
+ };
+ };
+ class Land_GH_MainBuilding_left_F : Default {
+ shelfPos[] = {
+ { { -1.02734, -7.3623, -1.06904 }, 255.179 },
+ { { -8.17188, 1.39258, -1.06893 }, 255.243 }
+ };
+ fridgePos[] = {
+ { { 0.386719, -6.67578, 3.37653 }, 165.302 },
+ { { -6.97656, -0.431641, -1.06901 }, 172.301 },
+ { { 11.0391, -3.58008, 3.37646 }, 160.127 }
+ };
+ bedPos[] = {
+ { { -1.83594, -0.640625, 3.37644 }, 165.641 },
+ { { -1.66797, -1.12305, -1.06908 }, 167.488 },
+ { { -4.0625, 8.01367, -5.50922 }, 163.408 },
+ { { 0.40625, 9.14844, -5.50922 }, 345.918 },
+ { { 9.70313, 1.55859, 3.37644 }, 345.36 },
+ { { 8.6582, 6.32422, -5.50922 }, 165.048 },
+ { { 8.26172, 7.47852, -1.06907 }, 348.908 },
+ { { -8.69336, 7.13867, -5.50922 }, 165.97 },
+ { { 14.4043, 2.89258, 3.37643 }, 345.42 }
+ };
+ couchPos[] = {
+ { { 1.23242, 5.67188, -1.06907 }, 350.466 },
+ { { 2.88281, 10.3672, -5.50922 }, 167.118 },
+ { { -2.56641, -12.8418, 3.83704 }, 261.041 },
+ { { 12.6992, 8.72461, -1.06908 }, 347.645 }
+ };
+ wardrobePos[] = {
+ { { -2.58008, 2.1709, -5.5092 }, 167.528 },
+ { { 10.0078, 0.827148, -1.06901 }, 166.411 }
+ };
+ cookerPos[] = {
+ { { -0.742188, -6.74805, 3.37604 }, 172.375 }
+ };
+ chairPos[] = {
+ { { 2.68555, 2.31445, 3.37668 }, 40.9297 },
+ { { -3.30078, 4.20117, -1.06905 }, 248.905 },
+ { { -1.18945, 6.18945, -5.5092 }, 164.369 },
+ { { -5.23242, 4.45508, -1.05902 }, 44.6127 },
+ { { -6.14648, -4.5498, 3.37645 }, 208.166 },
+ { { -4.16016, -12.752, -1.06894 }, 256.238 },
+ { { 7.50781, 12.041, -5.50921 }, 65.2004 },
+ { { 14.0137, 5.32227, -1.06907 }, 108.336 },
+ { { 15.3516, 0.828125, 3.37644 }, 89.9532 },
+ { { 9.25, 12.7598, -5.50921 }, 264.026 },
+ { { 12.9297, 9.67383, -5.50699 }, 117.822 }
+ };
+ filingPos[] = {
+ { { 1.83984, -8.47363, -1.069 }, 160.823 },
+ { { 15.752, -11.3574, -5.50917 }, 164.969 }
+ };
+ pelicanPos[] = {
+ { { 8.55664, -2.79004, 3.37645 }, 36.1098 }
+ };
+ tablePos[] = {
+ { { 0.234375, 1.52344, -1.06908 }, 163.886 },
+ { { 1.57422, -2.80469, 3.37644 }, 166.456 },
+ { { -3.63672, -1.45117, 3.37644 }, 75.2335 },
+ { { 4.10352, 2.30273, 3.37644 }, 254.907 },
+ { { 6.85156, 3.26758, -1.06908 }, 163.381 },
+ { { 5.79492, 7.67578, -5.50922 }, 167.512 },
+ { { -8.66992, 4.4082, -5.50922 }, 256.113 },
+ { { -4.61719, -11.2539, -1.06898 }, 257.112 },
+ { { 12.7383, 11.5723, -5.50922 }, 74.4651 },
+ { { -4.82617, -19.6475, 3.83704 }, 168.125 }
+ };
+ lockerPos[] = {
+ { { 7.10742, -5.75781, -1.06905 }, 75.8703 }
+ };
+ palletPos[] = {
+ { { -1.95898, 8.42969, -1.0371 }, 77 },
+ { { -8.23242, 7.49414, -1.0371 }, 321 },
+ { { 5.07422, 10.7188, -1.0371 }, 54 }
+ };
+ };
+ class Land_GH_House_2_F : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { -3.61914, -1.67969, -0.301109 }, 359.443 },
+ { { 4.32227, -6.37305, -0.301155 }, 91.0395 }
+ };
+ fridgePos[] = {
+ { { -4.25, -5.02637, -0.301128 }, 269.6 }
+ };
+ bedPos[] = {
+ { { -1.24805, -4.87793, -0.301178 }, 5.78317 }
+ };
+ couchPos[] = {
+ { { 3.05664, -3.25195, -0.301193 }, 2.05902 }
+ };
+ chairPos[] = {
+ { { 0.806641, -6.70605, -0.301163 }, 224.27 }
+ };
+ filingPos[] = {
+ { { -2.39844, 1.31348, -0.301136 }, 11.8617 }
+ };
+ pelicanPos[] = {
+ { { 3.53711, 0.832031, -0.30117 }, 35.7628 }
+ };
+ tablePos[] = {
+ { { 0.587891, -3.72168, -0.301182 }, 271.612 }
+ };
+ palletPos[] = {
+ { { 2.25586, -8.62695, -0.307613 }, 54 }
+ };
+ };
+ class Land_GH_House_1_F : Default {
+ lootType = "mil";
+ fridgePos[] = { { { -4.17383, -2.11719, 1.37387 }, 356.381 } };
+ shelfPos[] = { { { 3.35352, 1.26758, -2.12615 }, 0.862475 }, { { -3.58203, -1.93359, -2.12615 }, 1.86357 } };
+ pelicanPos[] = { { { -3.33398, 0.990234, -2.12616 }, 359.887 } };
+ wardrobePos[] = { { { -4.21094, -4.39258, -2.12611 }, 272.378 } };
+ bedPos[] = { { { 1.22852, -4.24219, -2.12617 }, 181.084 }, { { 3.54102, -5.65625, 1.37383 }, 4.33171 } };
+ couchPos[] = { { { -1.45703, -5.70703, -2.12618 }, 0.461905 }, { { -3.22266, -5.88867, 1.37383 }, 180.141 } };
+ chairPos[] = { { { 0.833984, -6.78516, 1.37384 }, 217.232 }, { { -0.796875, -7.06055, 1.38113 }, 139.376 }, { { -3.92773, -6.72656, -2.12617 }, 216.64 }, { { 3.77539, -7.01172, -2.12617 }, 144.922 } };
+ filingPos[] = { { { 2.1543, -1.97656, 1.37398 }, 1.26754 } };
+ tablePos[] = { { { -0.554688, -4.24219, 1.35334 }, 88.7164 }, { { 4.14453, -2.66797, 1.37383 }, 87.9678 }, { { 3.95898, -3.00781, -2.12617 }, 85.0581 } };
+ };
+ class Land_Stadium_p9_F : Default {
+ shelfPos[] = {
+ { { -0.947266, -2.85645, 0.260189 }, 177.78 },
+ { { -3.80273, -1.29102, 3.35416 }, 268.338 }
+ };
+ fridgePos[] = {
+ { { -3.57031, -2.56543, 0.270462 }, 268.533 }
+ };
+ couchPos[] = {
+ { { -1.27344, 2.86328, 3.35296 }, 92.8845 }
+ };
+ cookerPos[] = {
+ { { -3.52734, -1.58203, 0.259689 }, 273.789 }
+ };
+ chairPos[] = {
+ { { 1.47656, 3.48535, 3.35328 }, 160.404 }
+ };
+ filingPos[] = {
+ { { -0.632813, 1.39258, 3.35342 }, 1.10306 },
+ { { -1.58594, 1.4082, 3.35342 }, 1.39755 }
+ };
+ pelicanPos[] = {
+ { { -2.21484, 2.33984, 7.08003 }, 44.2351 }
+ };
+ toolRackPos[] = {
+ { { 1.81055, -1.7666, 3.35528 }, 89.8722 }
+ };
+ };
+
+
+ //AIA Terrain Pack - Chernarus
+
+ // found missing since 0.3 - start
+ class Land_HouseB_Tenement : Default {
+ lootBiasPos = 20;
+ fridgePos[] = { { { 3.94238, 10.9263, -20.8109 }, 271.337 } };
+ shelfPos[] = { { { -12.9045, 4.21875, -20.8107 }, 269.047 } };
+ pelicanPos[] = { { { -1.07813, 4.78125, -20.8109 }, 174.223 } };
+ couchPos[] = { { { 2.45361, -4.50049, -20.8027 }, 276.133 } };
+ chairPos[] = { { { -3.4668, -1.78467, -20.8109 }, 190.415 } };
+ filingPos[] = { { { -6.31909, 6.52441, -20.8109 }, 1.58827 } };
+ tablePos[] = { { { -0.552246, -1.95654, -20.8043 }, 181.181 } };
+ shoeboxPos[] = { { { -12.9771, -2.2373, -20.8109 }, 269.642 } };
+ freezerPos[] = { { { 5.33984, 14.1865, -20.8109 }, 0.00699411 } };
+ };
+ class Land_HouseV2_01A : Default {
+ lootBiasPos = 20;
+ shelfPos[] = { { { -0.443115, -3.33936, -5.62667 }, 90.1773 } };
+ shoeboxPos[] = { { { -3.60864, -3.06836, -5.62945 }, 278.015 } };
+ };
+ class Land_Barn_W_02 : Default {
+ lootBiasPos = 20;
+ fridgePos[] = { { { 4.66504, 5.95215, -2.34131 }, 73.4104 } };
+ shelfPos[] = { { { 3.54199, -6.98242, -2.3354 }, 180.843 } };
+ pelicanPos[] = { { { -4.61279, 1.50342, 1.06024 }, 189.27 } };
+ couchPos[] = { { { 3.75586, -2.53906, -2.33824 }, 4.32959 } };
+ filingPos[] = { { { -6.13037, 7.19189, -2.33458 }, 357.942 } };
+ toolRackPos[] = { { { -6.70459, -3.06445, -2.33691 }, 271.665 } };
+ shoeboxPos[] = { { { -0.72168, 7.42285, 1.0585 }, 359.807 } };
+ palletPos[] = { { { -5.00684, -5.97168, -2.33609 }, 251.999 } };
+ freezerPos[] = { { { 3.05176, 6.89844, -2.34122 }, 1.42345 } };
+ };
+ class Land_Shed_W01 : Default {
+ chairPos[] = { { { -1.21777, 0.42627, -1.44093 }, 66.292 } };
+ toolRackPos[] = { { { 2.47363, -0.0288086, -1.31694 }, 269.634 } };
+ };
+ class Land_A_Castle_Bergfrit : Default {
+ shelfPos[] = { { { -0.993164, 2.89014, -2.8378 }, 356.361 }, { { 1.80957, 4.87695, 8.74091 }, 358.335 } };
+ pelicanPos[] = { { { -3.03516, -5.00195, 16.8296 }, 195.125 } };
+ couchPos[] = { { { 2.07031, -1.73779, -2.85995 }, 359.982 } };
+ chairPos[] = { { { 1.5791, -0.515137, 8.74054 }, 62.6844 }, { { 1.63281, -2.84229, 8.74051 }, 127.602 } };
+ tablePos[] = { { { -1.22559, -1.10742, 8.74051 }, 270.108 } };
+ shoeboxPos[] = { { { 3.47461, 3.8999, 8.80176 }, 0.625621 } };
+ };
+ class Land_Shed_wooden : Default {
+ shelfPos[] = { { { 0.172363, -1.19922, -1.31766 }, 189.191 } };
+ filingPos[] = { { { -1.19043, 1.20996, -1.31787 }, 273.29 } };
+ shoeboxPos[] = { { { -0.77002, -1.16211, -1.31796 }, 0 } };
+ palletPos[] = { { { 1.97168, 0.560547, -1.31796 }, 357.8 } };
+ freezerPos[] = { { { 1.86523, -0.863281, -1.31796 }, 178.905 } };
+ };
+ class Land_HouseV_1L2 : Default {
+ shelfPos[] = { { { 2.33252, -5.83691, -3.1355 }, 267.989 } };
+ pelicanPos[] = { { { -1.02002, 4.17871, -0.403534 }, 51.0824 } };
+ bedPos[] = { { { 2.53662, 4.57813, -2.63803 }, 95.5054 } };
+ filingPos[] = { { { 3.8457, 2.2998, -2.71201 }, 266.031 } };
+ toolRackPos[] = { { { 4.28125, -3.77441, -2.97101 }, 270.154 } };
+ shoeboxPos[] = { { { 0.916016, 7.69043, -0.397675 }, 175.886 } };
+ palletPos[] = { { { -4.99902, 2.96875, -3.10464 }, 89.0781 } };
+ freezerPos[] = { { { -0.606934, 4.00098, -2.83835 }, 180.414 } };
+ };
+ class Land_HouseV_1I1 : Default {
+ fridgePos[] = { { { -5.5127, 4.8623, -3.33844 }, 117.119 } };
+ chairPos[] = { { { -0.822754, -2.1123, -2.8017 }, 270.285 } };
+ filingPos[] = { { { 0.899414, -1.97656, -2.83847 }, 43.1203 } };
+ shoeboxPos[] = { { { -1.65918, -1.8125, -1.67868 }, 90.0296 } };
+ };
+ class Land_HouseV_1L1 : Default {
+ chairPos[] = { { { 1.31738, 5.71338, -1.08368 }, 88.2198 } };
+ shoeboxPos[] = { { { 0.444336, 6.01123, -1.09442 }, 88.1007 } };
+ };
+ class Land_Misc_deerstand : Default {
+ pelicanPos[] = { { { 0.587158, -0.0830078, 1.05899 }, 94.5891 } };
+ shoeboxPos[] = { { { -0.863037, -0.864258, 1.05893 }, 355.986 } };
+ };
+ class Land_HouseBlock_A1_1 : Default {
+ shelfPos[] = { { { -2.89551, -2.44434, -4.69214 }, 92.8328 } };
+ filingPos[] = { { { -2.95898, -0.0991211, -4.69229 }, 91.0289 } };
+ lockerPos[] = { { { -4.78516, 3.52197, -4.69232 }, 270.002 } };
+ toolRackPos[] = { { { -2.58105, 3.7561, -4.69196 }, 87.6312 } };
+ shoeboxPos[] = { { { 0.851563, 4.91016, -4.69232 }, 160.104 } };
+ freezerPos[] = { { { -3.1582, -3.96021, -4.69235 }, 95.443 } };
+ };
+ class Land_HouseBlock_A3 : Default {
+ fridgePos[] = { { { -1.21191, -4.7356, -5.44312 }, 280.564 } };
+ couchPos[] = { { { -0.486328, 4.81421, -5.44312 }, 179.643 } };
+ chairPos[] = { { { -0.952148, 2.76099, -5.44305 }, 272.88 } };
+ shoeboxPos[] = { { { -7.55859, 4.49561, -5.44315 }, 146.992 } };
+ palletPos[] = { { { 1.05273, 0.597656, -5.44315 }, 358.168 } };
+ };
+ class Land_Hut06 : Default {
+ chairPos[] = { { { 0.739502, 2.50977, -1.58963 }, 76.0347 } };
+ filingPos[] = { { { -0.806396, 2.76465, -1.61115 }, 322.16 } };
+ shoeboxPos[] = { { { -1.33862, -0.988281, -1.82275 }, 312.382 } };
+ freezerPos[] = { { { -0.840332, 1.09473, -1.56879 }, 269.861 } };
+ };
+ // found missing since 0.3 - end
+
+
+
+
+
+ class Land_A_FuelStation_Build : Default {
+ shelfPos[] = {
+ { { 0.511719, 1.52344, -1.6008 }, 359.975 }
+ };
+ filingPos[] = {
+ { { 2.38086, 1.33203, -1.60098 }, 29.5354 }
+ };
+ pelicanPos[] = {
+ { { 0.268066, 1.60449, 1.51318 }, 196.822 }
+ };
+ toolRackPos[] = {
+ { { -0.960938, 1.66895, -1.60083 }, 356.645 }
+ };
+ shoeboxPos[] = {
+ { { -1.02441, 0.646484, -1.10098 }, 30.3502 }
+ };
+ palletPos[] = {
+ { { 2.10742, -3.15625, -1.62936 }, 89.5756 }
+ };
+ freezerPos[] = {
+ { { 2.17334, -0.862305, -1.57938 }, 89.5756 }
+ };
+ };
+ class Land_HouseV2_04_interier : Default {
+ fridgePos[] = {
+ { { -0.904297, 6.40674, -5.76508 }, 92.3811 }
+ };
+ couchPos[] = {
+ { { 6.14941, -5.21924, -5.76886 }, 359.884 }
+ };
+ cookerPos[] = {
+ { { -5.65234, 2.6543, -5.7666 }, 177.307 }
+ };
+ chairPos[] = {
+ { { -1.33594, 2.95557, -5.76614 }, 133.309 }
+ };
+ filingPos[] = {
+ { { 7.92773, -2.18066, -5.76855 }, 179.469 }
+ };
+ pelicanPos[] = {
+ { { 0.557617, 1.16406, -2.91656 }, 341.166 }
+ };
+ tablePos[] = {
+ { { -5.5498, 5.12793, -5.7655 }, 271.134 }
+ };
+ lockerPos[] = {
+ { { 7.20996, 7.07715, -5.76495 }, 358.294 }
+ };
+ toolRackPos[] = {
+ { { 8.28613, 2.40527, -5.76694 }, 89.7594 }
+ };
+ shoeboxPos[] = {
+ { { -3.81738, 6.99902, -5.76492 }, 253.823 }
+ };
+ freezerPos[] = {
+ { { 2.98145, 7.00977, -5.7554 }, 0 }
+ };
+ };
+ class Land_Ind_Garage01 : Default {
+ shelfPos[] = {
+ { { 0.32373, 3.56543, -1.25259 }, 357.258 }
+ };
+ fridgePos[] = {
+ { { 2.79932, 1.31641, -1.26077 }, 84.1437 }
+ };
+ filingPos[] = {
+ { { -1.06348, 3.40234, -1.25024 }, 351.15 }
+ };
+ lockerPos[] = {
+ { { 2.82422, -0.936523, -1.26364 }, 88.0941 }
+ };
+ toolRackPos[] = {
+ { { -1.65771, -1.39258, -1.25879 }, 269.614 }
+ };
+ shoeboxPos[] = {
+ { { 2.21729, 3.40918, -1.25677 }, 63.3963 }
+ };
+ palletPos[] = {
+ { { -0.140625, -1.52051, -1.2254 }, 0 }
+ };
+ };
+ class Land_HouseV2_02_Interier : Default {
+ shelfPos[] = {
+ { { 8.94824, 4.19141, -5.55692 }, 90.8873 }
+ };
+ fridgePos[] = {
+ { { 6.06299, -2.00977, -5.55707 }, 176.197 }
+ };
+ bedPos[] = {
+ { { -8.03711, -0.987305, -5.5571 }, 184.341 }
+ };
+ couchPos[] = {
+ { { -6.82422, 5.68262, -5.5571 }, 274.703 }
+ };
+ wardrobePos[] = {
+ { { -8.83203, 1.7168, -5.56403 }, 268.499 }
+ };
+ cookerPos[] = {
+ { { 8.7959, -2.00684, -5.5574 }, 179.624 }
+ };
+ chairPos[] = {
+ { { -2.62451, 0.544922, -5.5571 }, 78.4276 }
+ };
+ filingPos[] = {
+ { { 2.37305, 5.25586, -5.55707 }, 270.596 }
+ };
+ pelicanPos[] = {
+ { { 8.31055, 6.2832, -5.5571 }, 37.3391 }
+ };
+ tablePos[] = {
+ { { -7.00488, 4.00879, -5.5571 }, 181.978 }
+ };
+ lockerPos[] = {
+ { { -1.11523, 1.34863, -5.5571 }, 269.367 }
+ };
+ shoeboxPos[] = {
+ { { -5.84717, -2.15918, -3.53598 }, 182.785 }
+ };
+ freezerPos[] = {
+ { { 4.64551, -2.0127, -5.55713 }, 179.15 }
+ };
+ };
+ class Land_A_Office02 : Default {
+ shelfPos[] = {
+ { { 2.7417, -4.16504, -8.17639 }, 11.0089 }
+ };
+ fridgePos[] = {
+ { { -23.2476, 2.61133, -8.16403 }, 25.3519 }
+ };
+ couchPos[] = {
+ { { 2.26904, 2.13965, 6.55609 }, 272.088 }
+ };
+ chairPos[] = {
+ { { -0.574707, -6.89551, -8.17813 }, 228.796 },
+ { { 5.17578, -6.96777, -8.17719 }, 126.645 }
+ };
+ filingPos[] = {
+ { { 1.70068, -4.21973, -8.17661 }, 317.714 }
+ };
+ pelicanPos[] = {
+ { { -18.9556, 3.99902, 8.6904 }, 298.688 }
+ };
+ tablePos[] = {
+ { { 4.73682, -4.41992, -8.17679 }, 358.645 }
+ };
+ toolRackPos[] = {
+ { { -15.4028, 0.609375, 5.35764 }, 270.07 }
+ };
+ shoeboxPos[] = {
+ { { -0.565918, -4.23535, -8.17667 }, 351.414 }
+ };
+ palletPos[] = {
+ { { 9.29248, 2.92676, 5.40057 }, 291 },
+ { { -21.335, 0.68457, 5.40057 }, 0 }
+ };
+ };
+ class Land_Ind_Workshop01_04 : Default {
+ shelfPos[] = {
+ { { 1.25928, -3.33008, -1.55847 }, 27.2942 }
+ };
+ filingPos[] = {
+ { { -2.01318, -3.40186, -1.55435 }, 293.278 }
+ };
+ tablePos[] = {
+ { { -1.75049, -5.65186, -1.55209 }, 271.116 }
+ };
+ lockerPos[] = {
+ { { -1.34473, 4.75293, -1.55695 }, 352.726 }
+ };
+ toolRackPos[] = {
+ { { 0.178711, -7.25537, -1.54968 }, 178.882 }
+ };
+ shoeboxPos[] = {
+ { { 1.73438, 4.83691, -1.55429 }, 114.503 }
+ };
+ palletPos[] = {
+ { { -0.102539, -4.55371, -1.51132 }, 340.1 }
+ };
+ };
+ class Land_Ind_TankBig : Default {
+ pelicanPos[] = {
+ { { -6.74146, 1.74805, 5.31989 }, 321.741 }
+ };
+ palletPos[] = {
+ { { 0.539551, 2.4082, 5.36334 }, 25 },
+ { { -3.41626, -2.57813, 5.36334 }, 340.1 }
+ };
+ };
+ class Land_Ind_Workshop01_L : Default {
+ shelfPos[] = {
+ { { 1.93359, -1.50195, -1.33884 }, 358.185 },
+ { { -0.805664, 3.11865, -1.33203 }, 181.507 }
+ };
+ filingPos[] = {
+ { { 0.609375, -3.6875, -1.33704 }, 245.604 }
+ };
+ tablePos[] = {
+ { { 3.36523, -5.01807, -1.3364 }, 176.426 }
+ };
+ toolRackPos[] = {
+ { { 3.47949, -5.65381, -1.33569 }, 177.054 }
+ };
+ shoeboxPos[] = {
+ { { -1.85254, 1.84229, -1.30463 }, 25 }
+ };
+ palletPos[] = {
+ { { 2.75781, -3.29102, -1.30463 }, 0.999969 },
+ { { -2.88086, 4.13037, -1.30463 }, 0.999969 }
+ };
+ };
+ class Land_Ind_Vysypka : Default {
+ shelfPos[] = {
+ { { 2.80957, 4.73828, -5.03592 }, 90.1414 }
+ };
+ fridgePos[] = {
+ { { -4.28125, 27.6045, -5.04321 }, 357.803 }
+ };
+ couchPos[] = {
+ { { -3.60791, 1.55469, 4.09406 }, 183 },
+ { { 4.81934, -11.9766, -5.03705 }, 184.375 }
+ };
+ chairPos[] = {
+ { { -3.03857, -1.72754, 4.09406 }, 227 },
+ { { -2.76172, 4.26465, 4.09406 }, 320 }
+ };
+ filingPos[] = {
+ { { 2.69727, 3.66992, -5.03604 }, 91.3547 }
+ };
+ pelicanPos[] = {
+ { { -5.5249, 24.7314, -3.82114 }, 358.775 }
+ };
+ tablePos[] = {
+ { { -0.984375, 1.59863, 4.09406 }, 91 }
+ };
+ lockerPos[] = {
+ { { -2.91016, 27.584, -5.04214 }, 358.97 }
+ };
+ toolRackPos[] = {
+ { { 3.44922, 1.56738, -5.03577 }, 270.011 },
+ { { 3.0127, -14.3877, -5.03381 }, 89.987 }
+ };
+ shoeboxPos[] = {
+ { { -0.418945, -22.6094, -5.034 }, 17.1755 }
+ };
+ palletPos[] = {
+ { { 1.82861, -1.39258, -4.99594 }, 0.999969 },
+ { { 1.86621, -8.21387, -4.99594 }, 0.999969 },
+ { { -8.73828, 22.5186, -4.99594 }, 0.999969 },
+ { { -11.6133, -21.9463, 4.08408 }, 183 },
+ { { -6.85107, 26.7197, -4.99594 }, 0.999969 }
+ };
+ };
+ class Land_Tovarna2 : Default {
+ shelfPos[] = {
+ { { -0.157715, 8.94824, -5.58551 }, 359.048 },
+ { { -8.91797, 8.95117, -2.25754 }, 359.07 }
+ };
+ fridgePos[] = {
+ { { -8.09814, 6.00781, -5.58575 }, 93.4298 },
+ { { -7.38135, 7.14648, 1.59531 }, 270.644 }
+ };
+ couchPos[] = {
+ { { -12.2339, 6.00293, 1.64017 }, 192.359 }
+ };
+ cookerPos[] = {
+ { { -7.34717, 8.47168, 1.59488 }, 269.304 }
+ };
+ chairPos[] = {
+ { { -11.0293, -1.44824, 0.397858 }, 288.29 },
+ { { -12.7896, 1.66406, -2.25778 }, 256.194 },
+ { { -10.5977, 8.53906, -5.58542 }, 7.869 }
+ };
+ filingPos[] = {
+ { { -3.76074, 4.69141, -2.25797 }, 160.402 },
+ { { -11.9707, 1.33887, -5.58572 }, 179.608 },
+ { { -13.021, 1.52051, 1.64032 }, 262.552 },
+ { { 20.0762, 16.4258, -5.52646 }, 270.183 }
+ };
+ pelicanPos[] = {
+ { { -2.12793, 7.01758, 6.65506 }, 287.139 }
+ };
+ tablePos[] = {
+ { { -8.11768, 0.283203, 0.376648 }, 359.581 },
+ { { -10.749, 8.58691, 1.64017 }, 359.286 },
+ { { -13.1201, 7.74902, -5.58578 }, 270.804 }
+ };
+ lockerPos[] = {
+ { { 3.74805, 5.08203, -4.64661 }, 269.986 },
+ { { -13.2759, 2.98828, -2.25778 }, 271.412 }
+ };
+ toolRackPos[] = {
+ { { -7.78174, 8.01758, -2.25754 }, 271.288 },
+ { { -13.6577, 2.94336, -5.5856 }, 269.477 }
+ };
+ shoeboxPos[] = {
+ { { -3.45215, -9.0332, 3.39786 }, 287.139 }
+ };
+ palletPos[] = {
+ { { 1.72998, 4.39844, -5.59995 }, 23.0657 },
+ { { -5.87061, -0.490234, -5.58575 }, 0 },
+ { { -4.23682, 5.16309, 1.59531 }, 92.0019 },
+ { { 1.79346, 6.75781, -5.58884 }, 0.010498 },
+ { { 9.70654, 4.69238, -4.60858 }, 183 },
+ { { -12.2871, -5.12402, -5.58575 }, 360 },
+ { { -11.9155, -7.37012, -5.58566 }, 197.387 }
+ };
+ freezerPos[] = {
+ { { -4.59424, 9.50977, 1.59531 }, 6.14914 }
+ };
+ };
+ class Land_Rail_House_01 : Default {
+ lockerPos[] = {
+ { { 1.89893, 2.44336, -1.30908 }, 183.214 }
+ };
+ palletPos[] = {
+ { { -3.34912, 3.12109, -1.27396 }, 183 }
+ };
+ };
+ class Land_Ind_Pec_03b : Default {
+ couchPos[] = {
+ { { 3.66602, -4.47949, 5.7338 }, 181.985 }
+ };
+ chairPos[] = {
+ { { 4.10938, -1.91309, 5.73383 }, 287.772 },
+ { { 3.68262, -6.99902, 5.73383 }, 247.919 }
+ };
+ pelicanPos[] = {
+ { { 2.27197, -4.89648, 5.73383 }, 89.1607 }
+ };
+ tablePos[] = {
+ { { 5.6416, -4.37207, 5.7338 }, 88.5916 }
+ };
+ palletPos[] = {
+ { { -11.5796, -12.9551, 0.982483 }, 183 },
+ { { -9.27979, -17.4229, 0.982483 }, 142 }
+ };
+ };
+ class Land_HouseV_1I4 : Default {
+ fridgePos[] = {
+ { { -3.25146, -0.897461, -2.78665 }, 356.197 }
+ };
+ wardrobePos[] = {
+ { { 0.701172, 3.27832, -2.746 }, 90.7671 }
+ };
+ cookerPos[] = {
+ { { -4.33691, -3.19141, -2.79153 }, 270.746 }
+ };
+ chairPos[] = {
+ { { 0.333496, -4.5752, -2.73975 }, 134 }
+ };
+ tablePos[] = {
+ { { -0.798584, 4.34863, -2.76721 }, 1.79366 }
+ };
+ shoeboxPos[] = {
+ { { -1.82813, -5.14746, -2.73975 }, 25 }
+ };
+ freezerPos[] = {
+ { { -1.84106, -1.0957, -2.73975 }, 358 }
+ };
+ };
+ class Land_A_Hospital : Default {
+ shelfPos[] = {
+ { { -7.99219, -2.12891, -7.36588 }, 268.792 }
+ };
+ couchPos[] = {
+ { { -14.5566, 1.18652, 3.26541 }, 321.707 }
+ };
+ chairPos[] = {
+ { { -12.1943, -1.09375, 3.26541 }, 77.6588 }
+ };
+ filingPos[] = {
+ { { 1.95996, -2.26953, -7.36606 }, 269.665 },
+ { { -1.56006, -2.83984, -7.36606 }, 1.40195 },
+ { { -8.75537, -3.58887, -7.36606 }, 359.532 },
+ { { -9.37305, -3.63574, -7.36606 }, 359.169 }
+ };
+ pelicanPos[] = {
+ { { 16.3394, 4.99512, 6.13242 }, 0.903763 }
+ };
+ tablePos[] = {
+ { { 14.708, -4.07813, -7.36609 }, 359.602 }
+ };
+ lockerPos[] = {
+ { { -1.64258, -1.69824, -7.36609 }, 179.931 }
+ };
+ toolRackPos[] = {
+ { { 17.5059, -2.06738, 3.26559 }, 0.163071 }
+ };
+ shoeboxPos[] = {
+ { { -5.40625, 8.16602, -4.35254 }, 39 },
+ { { 9.88281, -1.00098, -7.36609 }, 39.1093 },
+ { { -14.6543, -1.31641, -7.36609 }, 321.711 }
+ };
+ palletPos[] = {
+ { { -8.12305, -5.10742, 3.30746 }, 97 },
+ { { 17.8105, -5.44922, 3.30746 }, 359 }
+ };
+ freezerPos[] = {
+ { { 1.0166, -3.02148, -7.34253 }, 359 }
+ };
+ };
+ class Land_Panelak2 : Default {
+ shelfPos[] = {
+ { { 4.20508, -4.24121, 5.41052 }, 90.3016 }
+ };
+ fridgePos[] = {
+ { { 7.20898, 3.8916, 5.41022 }, 90.4745 }
+ };
+ couchPos[] = {
+ { { -4.25195, 0.902344, 8.29941 }, 59.4268 }
+ };
+ wardrobePos[] = {
+ { { 5.46094, 1.24414, 5.41287 }, 357.96 }
+ };
+ cookerPos[] = {
+ { { 2.14648, 4.04395, 5.40982 }, 270.01 }
+ };
+ chairPos[] = {
+ { { 4.50977, -1.51123, 5.44611 }, 241.946 },
+ { { -6.61035, 0.507813, 8.29944 }, 165.78 }
+ };
+ filingPos[] = {
+ { { 2.0459, -6.52539, 5.41025 }, 206.326 }
+ };
+ pelicanPos[] = {
+ { { -0.511719, 4.30273, 4.026 }, 343.273 }
+ };
+ tablePos[] = {
+ { { 7.14258, -0.713867, 5.41226 }, 89.9922 }
+ };
+ shoeboxPos[] = {
+ { { -5.76758, 0.51709, 8.29941 }, 287.425 },
+ { { 5.38281, -6.46777, 5.41022 }, 321.607 }
+ };
+ palletPos[] = {
+ { { 0.361328, -0.00292969, -4.00781 }, 39 },
+ { { 6.25586, 3.7168, 8.33218 }, 89 }
+ };
+ freezerPos[] = {
+ { { 4.01465, -5.87646, 5.49216 }, 89 }
+ };
+ };
+ class Land_Panelak : Default {
+ shelfPos[] = {
+ { { -1.18066, 4.3916, -1.39282 }, 269.731 }
+ };
+ fridgePos[] = {
+ { { 2.1582, 3.72363, 0.0450439 }, 274.269 },
+ { { 2.12598, 3.95801, 2.74509 }, 269.888 }
+ };
+ bedPos[] = {
+ { { -6.67578, -0.548828, 2.745 }, 187.481 }
+ };
+ couchPos[] = {
+ { { 6.28906, -0.512695, 0.0449829 }, 2.62378 }
+ };
+ wardrobePos[] = {
+ { { 4.10449, -4.86182, 2.74927 }, 89.2451 },
+ { { -7.1543, -1.32568, 0.0450439 }, 273.001 }
+ };
+ cookerPos[] = {
+ { { 7.18164, 4.19922, 0.0445557 }, 91.3201 },
+ { { 7.18164, 4.20068, 2.7446 }, 90.3307 }
+ };
+ chairPos[] = {
+ { { -2.27051, 3.78564, 0.0449829 }, 56.0406 },
+ { { -4.54883, -0.710938, 0.0562744 }, 107.616 },
+ { { 4.48535, -1.09717, 2.74661 }, 248.12 }
+ };
+ filingPos[] = {
+ { { 4.16895, -3.5332, 0.045105 }, 7.97333 },
+ { { -5.07324, -6.33447, 0.0450745 }, 89.5886 }
+ };
+ pelicanPos[] = {
+ { { -6.6582, 3.63037, 5.59943 }, 286.286 }
+ };
+ tablePos[] = {
+ { { -3.85254, -5.19385, 2.745 }, 265.362 },
+ { { 7.02734, -0.689453, 2.745 }, 87.3795 }
+ };
+ lockerPos[] = {
+ { { -3.9502, -5.51221, 0.0449829 }, 268.107 }
+ };
+ shoeboxPos[] = {
+ { { -1.06641, -6.35303, 0.0449829 }, 206.957 },
+ { { 0.953125, -6.38086, 0.0449829 }, 141.218 }
+ };
+ palletPos[] = {
+ { { 0.506836, -0.0400391, -1.26782 }, 89 },
+ { { 4.21777, -3.08203, 5.59943 }, 25.7308 }
+ };
+ freezerPos[] = {
+ { { 4.03906, -6.05371, 0.0449829 }, 90 }
+ };
+ };
+ class Land_Hangar_2 : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { 1.82813, -9.84717, -2.58939 }, 181.468 },
+ { { 5.83984, 11.563, -2.58939 }, 358.914 },
+ { { 14.6816, -1.41748, -2.59756 }, 90.4656 },
+ { { -14.6836, 1.73828, -2.58939 }, 269.242 }
+ };
+ fridgePos[] = {
+ { { 12.8926, 11.2778, -2.59778 }, 3.16315 }
+ };
+ couchPos[] = {
+ { { 1.27832, 10.2305, -2.58963 }, 273.856 }
+ };
+ filingPos[] = {
+ { { 0.000976563, 1.3833, -2.58926 }, 178.715 }
+ };
+ lockerPos[] = {
+ { { 13.5166, -9.63965, -2.58951 }, 180.232 }
+ };
+ toolRackPos[] = {
+ { { -2.47949, -10.0684, -2.58923 }, 178.901 },
+ { { 9.01953, 11.8232, -2.58923 }, 358.139 }
+ };
+ shoeboxPos[] = {
+ { { -14.5693, -9.69629, -2.58963 }, 188.48 }
+ };
+ palletPos[] = {
+ { { -0.00195313, -3.16113, -2.5896 }, 332.619 },
+ { { -8.97656, -4.14404, -2.5896 }, 219.281 },
+ { { -12.9932, 10.293, -2.5896 }, 336.817 }
+ };
+ freezerPos[] = {
+ { { 14.3408, 9.39063, -2.58963 }, 81.9611 }
+ };
+ };
+ class Land_rail_station_big : Default {
+ shelfPos[] = {
+ { { 2.86035, 3.51221, -5.07059 }, 91.0331 }
+ };
+ fridgePos[] = {
+ { { 1.66113, -3.65674, -5.0708 }, 180.242 }
+ };
+ couchPos[] = {
+ { { -4.33789, -1.56836, -5.07083 }, 178.466 },
+ { { 8.63281, -5.13672, -5.07083 }, 1.14301 }
+ };
+ chairPos[] = {
+ { { 1.39844, -4.95752, -5.06161 }, 4.04407 },
+ { { -4.96484, 3.36914, -5.0708 }, 284.166 },
+ { { -5.01758, -5.00488, -5.05701 }, 344.841 }
+ };
+ filingPos[] = {
+ { { 2.84961, 4.2832, -5.07077 }, 90.7927 }
+ };
+ pelicanPos[] = {
+ { { 0.118164, -6.59912, -2.26553 }, 21.0414 }
+ };
+ tablePos[] = {
+ { { -5.13184, 1.67041, -5.07083 }, 269.411 }
+ };
+ lockerPos[] = {
+ { { -1.66504, -3.61719, -5.07083 }, 180.479 },
+ { { 1.15527, 5.48584, -5.07065 }, 0.986969 },
+ { { -4.39453, 5.34619, -5.07083 }, 338.371 }
+ };
+ toolRackPos[] = {
+ { { 6.75195, 1.96289, -5.07056 }, 271.441 }
+ };
+ shoeboxPos[] = {
+ { { 2.43164, 0.785156, -4.09598 }, 58.5217 }
+ };
+ palletPos[] = {
+ { { 8.96973, -2.03564, -5.02618 }, 89 },
+ { { -9.24902, -4.90479, -5.02618 }, 89 }
+ };
+ };
+ class Land_a_stationhouse : Default {
+ shelfPos[] = {
+ { { 0.554688, -4.70068, -9.49698 }, 272.253 },
+ { { -0.933594, -5.35596, 4.38522 }, 27.5935 },
+ { { -0.828125, -8.54004, -4.67508 }, 110.344 },
+ { { -1.08203, -8.95215, 4.38516 }, 185.611 },
+ { { -4.35742, -8.55957, -0.0701904 }, 262.53 },
+ { { 6.66406, -7.6665, -9.49698 }, 181.745 },
+ { { 19.1992, -5.00488, -9.49698 }, 88.5043 }
+ };
+ fridgePos[] = {
+ { { 0.871094, -1.74805, -9.49701 }, 271.521 }
+ };
+ couchPos[] = {
+ { { -10.5244, -3.94482, -0.534332 }, 278.335 }
+ };
+ chairPos[] = {
+ { { -13.3145, -3.94189, -0.534332 }, 334.169 }
+ };
+ filingPos[] = {
+ { { -0.786133, -5.13428, -9.49701 }, 78.6633 }
+ };
+ pelicanPos[] = {
+ { { 7.44531, 0.904785, -4.53433 }, 267.207 },
+ { { -4.35156, -7.64502, 8.46567 }, 268.821 }
+ };
+ lockerPos[] = {
+ { { 0.811523, -3.3418, -9.49701 }, 269.999 },
+ { { 19.0117, 0.613281, -9.49701 }, 90.2636 },
+ { { 18.9961, -1.15674, -9.49704 }, 89.3234 },
+ { { 19.042, -2.92578, -9.49701 }, 87.0602 }
+ };
+ toolRackPos[] = {
+ { { 7.23633, 3.84961, -9.4968 }, 359.928 }
+ };
+ shoeboxPos[] = {
+ { { -0.743164, -8.33643, -0.0702209 }, 110.554 },
+ { { 19.1836, -7.53174, -9.49701 }, 105.566 }
+ };
+ palletPos[] = {
+ { { 2.03418, 1.7915, -9.49701 }, 289.015 },
+ { { -6.86621, 3.25586, -0.534332 }, 3.05176e-005 },
+ { { 13.0293, -7.22363, -9.49701 }, 90 },
+ { { 15.542, -4.56006, -4.53433 }, 6.10352e-005 }
+ };
+ freezerPos[] = {
+ { { -4.1084, -7.31787, -9.49701 }, 268.732 }
+ };
+ };
+ class Land_Mil_ControlTower : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { 1.49512, 2.23389, -1.09485 }, 268.083 },
+ { { 9.91406, 3.22559, -9.65488 }, 179.209 }
+ };
+ fridgePos[] = {
+ { { 9.67773, 5.91309, -9.65503 }, 83.7454 }
+ };
+ chairPos[] = {
+ { { 7.19434, -1.62061, 2.92548 }, 262.144 }
+ };
+ filingPos[] = {
+ { { 2.79297, 3.34814, -5.49008 }, 190.556 },
+ { { 3.33105, 3.35791, -5.49011 }, 179.417 },
+ { { 6.89648, -1.87549, -1.09503 }, 164.743 },
+ { { 7.53906, -1.85107, -1.09503 }, 187.813 }
+ };
+ pelicanPos[] = {
+ { { 2.01172, -0.6875, -1.09509 }, 259.256 },
+ { { 9.32324, 4.80322, -1.08328 }, 41.8877 }
+ };
+ lockerPos[] = {
+ { { 0.925781, 3.41895, -9.65512 }, 179.859 },
+ { { 3.19531, 6.13867, -5.49011 }, 0.121094 }
+ };
+ toolRackPos[] = {
+ { { 4.21484, 6.64795, -9.65485 }, 359.603 }
+ };
+ shoeboxPos[] = {
+ { { 4.94727, -1.88574, -1.09512 }, 209.993 },
+ { { 7.66211, 3.85303, -9.65512 }, 210.035 }
+ };
+ };
+ class Land_Ind_Workshop01_01 : Default {
+ shelfPos[] = {
+ { { 0.558594, -3.47168, -1.3168 }, 176.163 }
+ };
+ fridgePos[] = {
+ { { 2.12305, -1.83838, -1.315 }, 94.8075 }
+ };
+ filingPos[] = {
+ { { -1.55566, -0.881836, -1.3237 }, 271.559 }
+ };
+ lockerPos[] = {
+ { { 2.12109, -0.290039, -1.31625 }, 91.8605 }
+ };
+ toolRackPos[] = {
+ { { 2.43848, 1.60547, -1.31653 }, 88.4978 }
+ };
+ shoeboxPos[] = {
+ { { -0.980469, 0.617188, -1.32367 }, 120.007 }
+ };
+ palletPos[] = {
+ { { 0.501953, 0.146484, -1.27002 }, 251 }
+ };
+ };
+ class Land_Shed_Ind02 : Default {
+ shelfPos[] = {
+ { { -0.442383, -9.33105, -4.6525 }, 178.364 }
+ };
+ fridgePos[] = {
+ { { 4.19824, 10.2627, -4.6524 }, 7.46219 }
+ };
+ bedPos[] = {
+ { { 2.77148, 2.2832, -4.6524 }, 95.4069 }
+ };
+ couchPos[] = {
+ { { 2.4043, 0.115234, -4.6524 }, 273.531 }
+ };
+ cookerPos[] = {
+ { { 4.43066, 7.04907, -4.6528 }, 90.7597 }
+ };
+ chairPos[] = {
+ { { 3.70605, -2.95898, -4.65234 }, 134.818 }
+ };
+ filingPos[] = {
+ { { -4.03906, 12.3835, -1.30353 }, 1.1741 }
+ };
+ pelicanPos[] = {
+ { { -0.52832, 11.6462, -1.30273 }, 62.2241 }
+ };
+ tablePos[] = {
+ { { 1.62695, -1.86011, -4.6524 }, 178.21 }
+ };
+ lockerPos[] = {
+ { { -2.87305, 12.2234, -1.30331 }, 2.62267 }
+ };
+ toolRackPos[] = {
+ { { 2.56738, 10.6775, -4.65201 }, 0.953941 }
+ };
+ shoeboxPos[] = {
+ { { -1.70313, -9.60083, -4.65237 }, 10.367 }
+ };
+ palletPos[] = {
+ { { -0.0283203, 5.60742, -4.6524 }, 317.381 },
+ { { 4.12695, -5.37256, -4.64841 }, 251 }
+ };
+ };
+ class Land_Mil_Barracks_i : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { 0.902344, -2.39502, -1.12442 }, 238.007 },
+ { { 0.548828, 2.81006, -1.12292 }, 1.08441 },
+ { { -9.37012, 2.427, -1.12442 }, 268.201 }
+ };
+ filingPos[] = {
+ { { 6.55566, 2.81738, -1.12451 }, 92.1856 }
+ };
+ pelicanPos[] = {
+ { { -2.24316, -1.36963, -1.12463 }, 263.64 },
+ { { 4.36621, -1.57617, -0.137878 }, 258.932 },
+ { { -5.0752, -2.4939, -1.12466 }, 183.946 },
+ { { -8.75977, -0.048584, -1.12463 }, 327.595 }
+ };
+ lockerPos[] = {
+ { { -5.60156, -1.32373, -1.12164 }, 269.99 }
+ };
+ shoeboxPos[] = {
+ { { -0.0751953, -1.9834, -0.699829 }, 251 },
+ { { -3.13574, 0.466797, 0.760162 }, 360 },
+ { { 3.02734, -1.34937, 0.0901794 }, 251 },
+ { { 3.02441, -1.40112, -1.12466 }, 302.031 },
+ { { -6.55371, -2.66333, -1.09982 }, 360 }
+ };
+ };
+ class Land_Ss_hangar : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { 14.2314, -8.46289, -5.89868 }, 173.905 },
+ { { 14.3447, 19.8936, -5.8782 }, 357.293 },
+ { { 13.5869, -20.874, -5.89853 }, 180.148 }
+ };
+ fridgePos[] = {
+ { { 14.1895, 12.5049, -5.96277 }, 147.17 }
+ };
+ bedPos[] = {
+ { { 14.1436, 21.6729, -5.89896 }, 7.74948 }
+ };
+ couchPos[] = {
+ { { 9.54492, 21.0107, -5.89896 }, 181.695 }
+ };
+ cookerPos[] = {
+ { { 14.5332, 15.3887, -5.92621 }, 89.5229 }
+ };
+ chairPos[] = {
+ { { 12.9268, 19.6445, -5.89896 }, 132.385 }
+ };
+ filingPos[] = {
+ { { 14.2803, -9.54688, -5.89865 }, 14.8827 },
+ { { -14.4658, -20.7148, -5.89896 }, 255.86 }
+ };
+ pelicanPos[] = {
+ { { -14.79, 12.7246, -5.89896 }, 273.845 },
+ { { 14.877, -20.2988, -5.89896 }, 89.7007 }
+ };
+ tablePos[] = {
+ { { 11.3418, 23.2334, -5.89896 }, 0.0492706 }
+ };
+ lockerPos[] = {
+ { { 6.78076, 23.332, -5.89896 }, 0.014267 }
+ };
+ toolRackPos[] = {
+ { { 2.44531, 23.7109, -5.89871 }, 0.000427246 }
+ };
+ shoeboxPos[] = {
+ { { -14.8848, 23.3271, -5.89899 }, 279.193 }
+ };
+ palletPos[] = {
+ { { -8.33643, -6.57617, -5.89896 }, 135.758 },
+ { { 6.4082, 10.2188, -5.89896 }, 115.033 },
+ { { 14.167, 10.5293, -5.89896 }, 0 },
+ { { -13.6675, 22.0801, -5.89896 }, 325.134 }
+ };
+ };
+ class Land_Ind_IlluminantTower : Default {
+ pelicanPos[] = {
+ { { -0.791992, -0.320313, 10.3249 }, 212.76 }
+ };
+ palletPos[] = {
+ { { -0.012207, 0.503906, -9.74222 }, 360 }
+ };
+ };
+ class Land_Vez : Default {
+ shoeboxPos[] = {
+ { { 0.286133, 0.867188, 1.36356 }, 1.99998 }
+ };
+ };
+ class Land_Hlidac_budka : Default {
+ shelfPos[] = {
+ { { 0.84668, 0.125977, -0.809265 }, 172.613 }
+ };
+ filingPos[] = {
+ { { 0.0673828, 2.31836, -0.809967 }, 357.487 },
+ { { 2.76709, 2.25684, -0.809967 }, 4.6116 }
+ };
+ tablePos[] = {
+ { { -2.32129, 1.41016, -0.810028 }, 279.786 }
+ };
+ toolRackPos[] = {
+ { { 3.00098, 0.819336, -0.809723 }, 90.0308 }
+ };
+ shoeboxPos[] = {
+ { { 1.62109, 2.32031, -0.810089 }, 349.179 }
+ };
+ };
+ class Land_A_GeneralStore_01a : Default {
+ shelfPos[] = {
+ { { -2.68848, -5.06152, -1.22772 }, 178.035 },
+ { { -8.81641, 1.98926, -1.22772 }, 270.025 },
+ { { 9.85986, 1.51953, -1.22772 }, 179.333 },
+ { { -5.52783, 9.13184, -1.22772 }, 1.40732 }
+ };
+ fridgePos[] = {
+ { { -5.12402, -0.585938, -1.20645 }, 180 },
+ { { -6.17725, -0.568359, -1.20645 }, 180 },
+ { { 5.68555, -4.8418, -1.20645 }, 188 }
+ };
+ cookerPos[] = {
+ { { 7.99414, -0.348633, -1.22836 }, 89.6747 }
+ };
+ filingPos[] = {
+ { { 9.23584, -1.02637, -1.22794 }, 275.138 },
+ { { 8.26953, -4.60156, -1.22794 }, 92.7205 }
+ };
+ pelicanPos[] = {
+ { { 14.3594, 0.392578, -1.22797 }, 91.3482 }
+ };
+ tablePos[] = {
+ { { 14.1704, -3.93848, -1.22797 }, 103.927 }
+ };
+ lockerPos[] = {
+ { { -7.1709, -1.75488, -1.20645 }, 1.99997 }
+ };
+ toolRackPos[] = {
+ { { 6.76514, -1.17969, -1.22775 }, 0.137085 }
+ };
+ shoeboxPos[] = {
+ { { -4.61426, 4.45996, -1.228 }, 198.535 },
+ { { 12.5962, 0.78418, -1.228 }, 358.034 },
+ { { 12.3564, 3.56055, -0.333557 }, 265.418 }
+ };
+ palletPos[] = {
+ { { 9.37988, 5.22168, -1.22797 }, 156.892 }
+ };
+ freezerPos[] = {
+ { { -1.78906, 0.975586, -1.228 }, 180.781 }
+ };
+ };
+ class Land_A_GeneralStore_01 : Default {
+ shelfPos[] = {
+ { { 6.03076, -5.04883, -1.22775 }, 359.162 },
+ { { 12.563, 5.48535, -1.22772 }, 0.496719 },
+ { { 13.5098, -7.02734, -1.22775 }, 88.7328 }
+ };
+ fridgePos[] = {
+ { { -9.77979, -1.54102, -1.22797 }, 269.735 },
+ { { -9.80176, -4.10938, -1.22797 }, 269.049 },
+ { { 8.25488, -9.58496, -1.23712 }, 0.202225 }
+ };
+ couchPos[] = {
+ { { -0.619629, -10.2949, -1.23727 }, 270.908 }
+ };
+ cookerPos[] = {
+ { { 6.6792, -4.2373, -1.22833 }, 91.644 }
+ };
+ chairPos[] = {
+ { { -2.94092, -9.89746, -1.23715 }, 42.039 },
+ { { -8.54541, 6.65723, -1.23798 }, 184.459 }
+ };
+ filingPos[] = {
+ { { 13.4648, -2.1582, -1.22797 }, 116.635 }
+ };
+ tablePos[] = {
+ { { -9.23096, 5.1709, -1.228 }, 357.131 }
+ };
+ lockerPos[] = {
+ { { 7.98193, -5.34863, -1.22797 }, 269.751 }
+ };
+ toolRackPos[] = {
+ { { -10.2231, -7.87598, -1.22778 }, 270.182 }
+ };
+ shoeboxPos[] = {
+ { { 4.97266, -2.66504, -0.632507 }, 196.652 },
+ { { -9.93848, -6.0293, -1.228 }, 2.52339 }
+ };
+ palletPos[] = {
+ { { -5.75488, -1.74707, -1.228 }, 46.8216 },
+ { { -1.28467, 7.54199, -1.23798 }, 116.447 },
+ { { 4.78857, 8.44824, -1.23798 }, 46.8216 }
+ };
+ freezerPos[] = {
+ { { 8.1875, -1.88184, -1.228 }, 186.869 },
+ { { -7.14307, 5.19238, -1.228 }, 0.0339508 }
+ };
+ };
+ class Land_A_Office01 : Default {
+ shelfPos[] = {
+ { { 4.0542, 2.89648, -4.55417 }, 178.477 },
+ { { -1.47119, 4.86328, 0.44574 }, 0.16153 },
+ { { 10.6284, -3.50879, -2.0542 }, 92.1019 },
+ { { 11.4131, -4.21387, -4.5542 }, 270.255 }
+ };
+ fridgePos[] = {
+ { { -0.907715, 5.50684, -2.05441 }, 272.559 }
+ };
+ couchPos[] = {
+ { { -7.35449, 4.9502, -4.55441 }, 189.687 }
+ };
+ cookerPos[] = {
+ { { -8.35449, 3.17188, -2.05484 }, 179.618 }
+ };
+ chairPos[] = {
+ { { -3.1958, -1.04395, -4.55441 }, 275.876 }
+ };
+ filingPos[] = {
+ { { -3.70752, 2.91797, 0.445648 }, 267.617 },
+ { { -0.938965, 7.15039, -4.55438 }, 269.465 },
+ { { -11.54, 0.328125, -2.05438 }, 178.477 },
+ { { 10.4766, 6.3418, -4.55438 }, 91.5126 },
+ { { 15.6548, -1.88672, -4.55438 }, 83.8964 }
+ };
+ pelicanPos[] = {
+ { { 2.34717, -1.2002, 6.6937 }, 215.707 }
+ };
+ tablePos[] = {
+ { { -3.19434, -2.84082, -4.55441 }, 267.186 },
+ { { 5.38916, 5.21582, -2.05441 }, 89.0818 },
+ { { 14.9824, 3.75391, -2.05441 }, 181.475 }
+ };
+ lockerPos[] = {
+ { { -4.50391, 3.8418, -4.55444 }, 91.5282 }
+ };
+ toolRackPos[] = {
+ { { 1.45557, 2.6543, -2.05414 }, 178.943 }
+ };
+ shoeboxPos[] = {
+ { { 5.2876, -1.88086, -4.53268 }, 180 },
+ { { 3.9707, -5.65234, -2.03021 }, 305.956 },
+ { { 11.6138, 6.93262, -2.05444 }, 292.589 }
+ };
+ palletPos[] = {
+ { { -0.465332, 4.62598, -4.53268 }, 180 },
+ { { 14.7656, -3.98438, -4.53268 }, 176 }
+ };
+ };
+ class Land_A_Pub_01 : Default {
+ shelfPos[] = {
+ { { 3.4812, 3.81738, -5.77243 }, 179.635 },
+ { { 2.49878, -4.70703, -1.78745 }, 180.503 },
+ { { -7.37402, 1.03516, -1.78741 }, 328.603 }
+ };
+ fridgePos[] = {
+ { { -3.38892, -4.0459, -5.76288 }, 90 }
+ };
+ bedPos[] = {
+ { { -4.10889, -0.928711, -1.78766 }, 8.16519 },
+ { { 3.50171, 2.69043, -1.78766 }, 94.542 }
+ };
+ couchPos[] = {
+ { { 0.366699, 5.18652, -1.78766 }, 189.226 },
+ { { -5.29517, 0.333984, -5.77267 }, 4.48228 }
+ };
+ wardrobePos[] = {
+ { { 4.41479, 7.93848, -1.78766 }, 2.10324 }
+ };
+ cookerPos[] = {
+ { { -3.19385, -1.17285, -5.77298 }, 270.462 }
+ };
+ chairPos[] = {
+ { { 2.81494, 0.904297, -5.76315 }, 61.6914 },
+ { { -7.10742, -5.75293, -1.78763 }, 350.056 }
+ };
+ filingPos[] = {
+ { { -0.388672, -1.30469, -5.77255 }, 181.526 },
+ { { 4.94727, 1.18066, -1.78763 }, 42.2747 }
+ };
+ pelicanPos[] = {
+ { { 4.75977, 5.4834, -1.78757 }, 88.4654 },
+ { { 6.82202, -3.58984, -5.77252 }, 82.7529 }
+ };
+ tablePos[] = {
+ { { -7.43481, -3.70313, -1.78766 }, 273.649 },
+ { { -7.42432, -4.37988, -5.77267 }, 273.367 }
+ };
+ toolRackPos[] = {
+ { { -0.121582, -5.72266, -5.7724 }, 89.0577 }
+ };
+ shoeboxPos[] = {
+ { { -0.593018, 2.19141, -5.77267 }, 255.46 },
+ { { 4.81665, -2.40332, -1.78766 }, 105.138 },
+ { { 1.49854, -6.26074, -5.01288 }, 176 },
+ { { 0.81665, 7.73535, -5.76288 }, 176 },
+ { { 6.86157, 5.98242, -1.76291 }, 268 }
+ };
+ freezerPos[] = {
+ { { 0.44751, -0.999023, -1.76291 }, 268 }
+ };
+ };
+ class Land_Barn_W_01 : Default {
+ shelfPos[] = {
+ { { 6.55371, -5.96289, -2.65878 }, 88.4798 },
+ { { -6.56934, -7.53516, -2.65848 }, 265.499 },
+ { { -4.05664, 19.6274, -2.66928 }, 0.626892 }
+ };
+ couchPos[] = {
+ { { 5.04297, -17.8179, -2.65564 }, 48.1573 }
+ };
+ chairPos[] = {
+ { { 6.02441, -15.0469, -2.65741 }, 70.2096 },
+ { { 2.39844, -19.5591, -2.65125 }, 198.607 }
+ };
+ tablePos[] = {
+ { { 3.33691, -16.0547, -2.65723 }, 300.369 }
+ };
+ toolRackPos[] = {
+ { { -6.80078, 2.37402, -2.66006 }, 268.437 },
+ { { 6.71387, 4.32422, -2.66052 }, 89.4215 },
+ { { -4.89844, -19.9951, -2.65622 }, 180.001 }
+ };
+ shoeboxPos[] = {
+ { { -6.57617, 7.07227, -2.66177 }, 270.003 }
+ };
+ palletPos[] = {
+ { { 5.37402, -1.0918, -2.65982 }, 38.9155 },
+ { { -5.49023, -1.3877, -2.65979 }, 41.5356 },
+ { { -0.188477, -10.4546, -2.54559 }, 268 },
+ { { -2.21777, 10.7607, -2.54559 }, 268 },
+ { { 2.44043, 14.0454, -2.54559 }, 268 }
+ };
+ freezerPos[] = {
+ { { -6.14258, 14.0566, -2.66248 }, 279.4 }
+ };
+ };
+ class Land_Church_03 : Default {
+ shelfPos[] = {
+ { { -8.8877, 4.48535, -14.3282 }, 270.093 }
+ };
+ wardrobePos[] = {
+ { { -3.39648, 7.18848, -14.3284 }, 272.593 }
+ };
+ chairPos[] = {
+ { { -8.41113, -4.42725, -14.3249 }, 235.951 }
+ };
+ filingPos[] = {
+ { { 6.03809, 8.75146, -14.2857 }, 360 },
+ { { 6.50879, 8.73438, -14.2857 }, 1.99998 }
+ };
+ pelicanPos[] = {
+ { { 4.48633, -8.17334, -14.3448 }, 228.938 }
+ };
+ tablePos[] = {
+ { { -8.48633, -0.0556641, -14.3285 }, 269.825 }
+ };
+ shoeboxPos[] = {
+ { { 6.20117, 1.86279, -14.3285 }, 261.718 }
+ };
+ };
+ class Land_Stodola_open : Default {
+ shelfPos[] = {
+ { { 2.08691, -3.11719, -4.14142 }, 89.2592 }
+ };
+ fridgePos[] = {
+ { { 1.88672, -6.01465, -4.13022 }, 119.538 }
+ };
+ couchPos[] = {
+ { { -3.63477, -0.27832, -4.13867 }, 190.732 }
+ };
+ pelicanPos[] = {
+ { { -1.71191, -5.06445, 0.297943 }, 33.203 }
+ };
+ tablePos[] = {
+ { { -3.62988, 6.59473, -4.12482 }, 357.638 }
+ };
+ toolRackPos[] = {
+ { { -0.110352, 7.2373, -3.92352 }, 357.513 }
+ };
+ shoeboxPos[] = {
+ { { -4.24609, -6.01855, -3.31656 }, 2.337 }
+ };
+ palletPos[] = {
+ { { 1.70313, 3.39844, -4.13934 }, 92.8326 },
+ { { -3.4292, 3.97168, -4.14297 }, 255.32 }
+ };
+ };
+ class Land_Stodola_old_open : Default {
+ shelfPos[] = {
+ { { 4.81055, 2.76367, -5.10672 }, 359.199 },
+ { { -3.54004, 7.10645, -1.01971 }, 270.013 }
+ };
+ bedPos[] = {
+ { { -2.76221, 8.75, -5.10696 }, 179.304 }
+ };
+ couchPos[] = {
+ { { 0.687988, -8.36133, -5.10693 }, 4.33433 }
+ };
+ chairPos[] = {
+ { { -1.06543, -5.28418, -1.04489 }, 195.228 }
+ };
+ filingPos[] = {
+ { { 5.25879, -8.9043, -5.1069 }, 9.83752 }
+ };
+ pelicanPos[] = {
+ { { -1.12891, -10.7266, 2.93811 }, 260.837 }
+ };
+ tablePos[] = {
+ { { -2.98828, 10.5127, -1.0199 }, 281.235 }
+ };
+ toolRackPos[] = {
+ { { 5.54102, 6.0625, -5.10693 }, 90.7204 },
+ { { -1.74854, -11.5723, -5.10672 }, 178.397 }
+ };
+ shoeboxPos[] = {
+ { { 5.70313, 11.2139, 0.829681 }, 91 }
+ };
+ palletPos[] = {
+ { { 2.06445, 3.54102, -5.10696 }, 337.003 },
+ { { -2.80469, 5.27539, -1.01993 }, 264.974 },
+ { { 2.44336, 10.6328, 2.93802 }, 86.0969 },
+ { { 4.44727, 10.3809, -5.07031 }, 91 }
+ };
+ freezerPos[] = {
+ { { -3.05957, -4.44141, -5.10699 }, 359.822 }
+ };
+ };
+ class Land_Farm_Cowshed_a : Default {
+ shelfPos[] = {
+ { { 9.65234, 4.23633, -3.1138 }, 359.83 }
+ };
+ bedPos[] = {
+ { { 7.85938, -5.01221, -3.11404 }, 274.383 }
+ };
+ wardrobePos[] = {
+ { { 10.21, -4.81543, -3.11401 }, 71.5758 }
+ };
+ filingPos[] = {
+ { { -2.51855, -6.98389, -3.08054 }, 202 }
+ };
+ tablePos[] = {
+ { { 0.553711, -6.81055, -3.11404 }, 179.415 }
+ };
+ toolRackPos[] = {
+ { { 3.21973, -3.75781, -3.11374 }, 182.361 }
+ };
+ shoeboxPos[] = {
+ { { -3.04883, -0.802246, -3.11407 }, 198.771 }
+ };
+ palletPos[] = {
+ { { -2.58008, 3.32617, -3.11404 }, 6.63828 },
+ { { -6.11816, -2.65527, -3.11404 }, 314.264 }
+ };
+ freezerPos[] = {
+ { { 10.4248, -2.19531, -3.11407 }, 92.3688 }
+ };
+ };
+ class Land_Farm_Cowshed_b : Default {
+ shelfPos[] = {
+ { { -9.05615, -3.76465, -3.12729 }, 178.703 }
+ };
+ couchPos[] = {
+ { { -9.82813, 2.41113, -3.1275 }, 296.045 }
+ };
+ chairPos[] = {
+ { { 8.15674, -3.28955, -3.1275 }, 182.81 }
+ };
+ toolRackPos[] = {
+ { { 3.27734, -3.9209, -3.12726 }, 178.757 }
+ };
+ palletPos[] = {
+ { { -4.85059, -2.72949, -3.12753 }, 360 },
+ { { 5.6416, -2.8208, -3.12753 }, 0.0419464 }
+ };
+ };
+ class Land_Farm_Cowshed_c : Default {
+ shelfPos[] = {
+ { { -2.79785, 3.14209, -3.15216 }, 295.449 }
+ };
+ filingPos[] = {
+ { { -2.97998, -4.05469, -3.15222 }, 179.983 }
+ };
+ palletPos[] = {
+ { { 2.44531, 2.57227, -3.14557 }, 0.00511169 }
+ };
+ };
+ class Land_Barn_Metal : Default {
+ shelfPos[] = {
+ { { 0.265625, -14.7627, -5.46832 }, 89.0258 }
+ };
+ fridgePos[] = {
+ { { 10.749, -15.9448, -5.46857 }, 39.8741 }
+ };
+ bedPos[] = {
+ { { -9.12109, 21.7661, -5.46857 }, 175.889 }
+ };
+ couchPos[] = {
+ { { 0.614746, -24.1509, -5.46857 }, 96.7518 }
+ };
+ cookerPos[] = {
+ { { 10.8979, -14.4751, -5.46899 }, 90.5039 }
+ };
+ chairPos[] = {
+ { { 10.4609, 17.1284, -5.46857 }, 39.8881 }
+ };
+ filingPos[] = {
+ { { -9.91895, -9.12695, -5.46854 }, 268.516 }
+ };
+ pelicanPos[] = {
+ { { 10.5273, 22.7065, 5.56143 }, 37.3798 }
+ };
+ tablePos[] = {
+ { { 10.7944, 13.7324, -5.46857 }, 87.4971 }
+ };
+ lockerPos[] = {
+ { { 11.0068, 6.05371, -5.46857 }, 89.1326 }
+ };
+ toolRackPos[] = {
+ { { -10.2012, 9.57422, -5.46823 }, 272.816 }
+ };
+ shoeboxPos[] = {
+ { { -9.87012, -20.9902, -5.4425 }, 298.809 }
+ };
+ palletPos[] = {
+ { { 3.24316, 2.2959, -5.44501 }, 135.351 },
+ { { -4.39014, -9.8374, -5.44501 }, 141.049 },
+ { { 4.74316, 12.5591, -5.44501 }, 199 },
+ { { -8.59766, 15.3638, -5.44501 }, 335.835 }
+ };
+ freezerPos[] = {
+ { { 10.8242, -10.4863, -5.44501 }, 87.998 }
+ };
+ };
+ class Land_A_TVTower_Base : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { -0.569824, -2.05078, -2.25824 }, 91.0596 }
+ };
+ filingPos[] = {
+ { { -2.6377, -4.59082, -2.26028 }, 188.775 }
+ };
+ pelicanPos[] = {
+ { { 4.38086, -0.0766602, 1.15182 }, 274.734 }
+ };
+ toolRackPos[] = {
+ { { -0.304199, 2.37402, -2.25836 }, 85.8353 }
+ };
+ shoeboxPos[] = {
+ { { -1.10449, 6.4873, -2.25751 }, 134.996 }
+ };
+ };
+ class Land_Mil_Guardhouse : Default {
+ shelfPos[] = {
+ { { -2.07324, 2.70703, -1.69559 }, 89.8322 }
+ };
+ pelicanPos[] = {
+ { { -2.46729, 0.0585938, -1.69565 }, 113.271 }
+ };
+ shoeboxPos[] = {
+ { { 5.75781, 1.48828, -1.99878 }, 202 }
+ };
+ };
+ class Land_Mil_House : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { 12.2617, 0.839355, -5.67438 }, 181.266 }
+ };
+ fridgePos[] = {
+ { { 15.2783, 4.78369, -5.67462 }, 52.5764 }
+ };
+ pelicanPos[] = {
+ { { -1.56152, 6.73584, -1.87274 }, 179.391 }
+ };
+ lockerPos[] = {
+ { { 10.856, 4.21094, -5.67462 }, 268.532 }
+ };
+ toolRackPos[] = {
+ { { 10.5098, 1.98584, -5.67413 }, 270.325 }
+ };
+ shoeboxPos[] = {
+ { { 5.61719, 6.21191, -5.24442 }, 152.873 }
+ };
+ palletPos[] = {
+ { { 13.2031, 2.67773, -5.67609 }, 202 }
+ };
+ };
+ class Land_houseV_2T2 : Default {
+ chairPos[] = {
+ { { -3.60352, 1.40381, -4.05566 }, 60.0702 }
+ };
+ pelicanPos[] = {
+ { { 2.81348, -4.28516, -1.45676 }, 39.1084 }
+ };
+ shoeboxPos[] = {
+ { { -3.23193, 0.272461, -4.06165 }, 128.845 }
+ };
+ };
+
+ //Cherno End//
+
+ //// Taki Start ///
+
+ class Land_Mil_hangar_EP1 : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { 13.5303, -21.2351, -5.37346 }, 179 },
+ { { -14.126, -21.2678, -5.37346 }, 179 }
+ };
+ bedPos[] = {
+ { { 14.0625, 22.0742, -5.3957 }, 7 }
+ };
+ couchPos[] = {
+ { { 11.0576, 22.5518, -5.3945 }, 277 }
+ };
+ filingPos[] = {
+ { { 14.5166, 19.895, -5.39077 }, 90 }
+ };
+ pelicanPos[] = {
+ { { -14.792, 12.4836, -5.37346 }, 270 }
+ };
+ tablePos[] = {
+ { { 10.9473, 20.2598, -5.38906 }, 200 }
+ };
+ lockerPos[] = {
+ { { 5.74609, 23.2769, -5.38878 }, 1.99997 }
+ };
+ toolRackPos[] = {
+ { { -1.87793, 23.8599, -5.38821 }, 0 },
+ { { 3.83594, 23.8569, -5.38976 }, 0 },
+ { { -4.74805, 23.8733, -5.38261 }, 0 }
+ };
+ palletPos[] = {
+ { { -13.4512, -7.20068, -5.37346 }, 270 },
+ { { -13.5586, 9.13232, -5.37346 }, 270 },
+ { { 14.1084, -11.3062, -5.37346 }, 270 },
+ { { 14.123, 12.8301, -5.37681 }, 270 }
+ };
+ freezerPos[] = {
+ { { 7.4668, 23.3438, -5.39095 }, 1.99997 }
+ };
+ };
+ class Land_Mil_ControlTower_EP1 : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { 3.03467, 2.64453, -1.16014 }, 0 },
+ { { 3.44043, 3.19238, -5.52014 }, 180 },
+ { { 10.312, 5.80469, -9.65014 }, 90.8 }
+ };
+ chairPos[] = {
+ { { 7.3042, -1.58887, 2.98985 }, 270 }
+ };
+ filingPos[] = {
+ { { 1.48389, 2.47754, -1.08014 }, 350 },
+ { { 2.1123, 2.47852, -1.08014 }, 0 },
+ { { 4.2417, 3.28027, -5.52014 }, 180 },
+ { { -0.137207, 6.33496, -9.65014 }, 270.8 }
+ };
+ pelicanPos[] = {
+ { { 3.23828, 0.329102, 2.73985 }, 270 },
+ { { 6.84424, -1.66113, -1.08014 }, 180 },
+ { { 6.38379, 5.06836, -1.11015 }, 180 }
+ };
+ tablePos[] = {
+ { { 7.49512, 0.382813, -1.16014 }, 90 }
+ };
+ lockerPos[] = {
+ { { 4.08936, 6.23438, -9.65014 }, 360 }
+ };
+ shoeboxPos[] = {
+ { { 6.70996, 3.96582, -1.08014 }, 180 }
+ };
+ palletPos[] = {
+ { { 8.53418, 4.22461, -9.65014 }, 90.8 }
+ };
+ };
+ class Land_House_K_1_EP1 : Default {
+ fridgePos[] = {
+ { { 1.96729, 5.96875, 1.53209 }, 360 }
+ };
+ bedPos[] = {
+ { { -3.29297, 2.14844, 1.53209 }, 187 }
+ };
+ cookerPos[] = {
+ { { 4.28125, 4.49707, 1.53209 }, 90 }
+ };
+ chairPos[] = {
+ { { 1.74805, 1.2832, 1.45209 }, 7.99997 }
+ };
+ tablePos[] = {
+ { { 1.18652, 2.95605, 1.54209 }, 179 }
+ };
+ shoeboxPos[] = {
+ { { -3.5874, 5.99609, 1.93209 }, 265 }
+ };
+ };
+ class Land_House_K_7_EP1 : Default {
+ shelfPos[] = {
+ { { -4.74609, 2.42871, 3.25069 }, 0 }
+ };
+ bedPos[] = {
+ { { -2.32715, 3.7876, 3.23069 }, 273 }
+ };
+ couchPos[] = {
+ { { -7.00684, 2.23486, 6.33068 }, 180 }
+ };
+ cookerPos[] = {
+ { { -3.0957, 4.38916, -0.309311 }, 0 }
+ };
+ chairPos[] = {
+ { { -5.16113, 0.416992, 3.25069 }, 220 }
+ };
+ filingPos[] = {
+ { { -6.82422, 0.91748, -0.279312 }, 180 }
+ };
+ pelicanPos[] = {
+ { { -3.28223, -1.62939, 3.13068 }, 180 }
+ };
+ toolRackPos[] = {
+ { { -7.16309, 3.74512, -0.27932 }, 0.600037 }
+ };
+ shoeboxPos[] = {
+ { { 0.185547, 2.03467, -0.26931 }, 90 }
+ };
+ palletPos[] = {
+ { { 0.12793, 3.51074, 6.31068 }, 180 },
+ { { -6.24219, -1.57227, -0.479317 }, 0.600037 }
+ };
+ freezerPos[] = {
+ { { -4.16406, 4.40723, -0.309311 }, 0 }
+ };
+ };
+ class Land_House_K_8_EP1 : Default {
+ shelfPos[] = {
+ { { -2.79102, -1.12793, 0.246132 }, 180 },
+ { { 3.0918, -1.73926, 0.246132 }, 180 }
+ };
+ fridgePos[] = {
+ { { 0.333008, 3.72217, 3.35612 }, 90 }
+ };
+ bedPos[] = {
+ { { -2.45508, -0.746582, -2.63387 }, 183.6 }
+ };
+ couchPos[] = {
+ { { 0.733398, -0.199707, 0.246132 }, 90 }
+ };
+ wardrobePos[] = {
+ { { 2.45313, -3.42871, -2.63387 }, 178.6 }
+ };
+ cookerPos[] = {
+ { { -2.93066, -0.961914, 3.35612 }, 270.9 }
+ };
+ chairPos[] = {
+ { { 0.383789, -3.7002, -2.70387 }, 14.6 }
+ };
+ filingPos[] = {
+ { { -3.12109, 2.6582, 0.246132 }, 270 }
+ };
+ pelicanPos[] = {
+ { { -4.36133, 1.78027, 0.0861282 }, 89.9 }
+ };
+ tablePos[] = {
+ { { 0.0976563, 3.64941, 0.246132 }, 0 }
+ };
+ shoeboxPos[] = {
+ { { 3.11035, -0.191406, -1.81387 }, 90 },
+ { { -2.76172, 4.86816, 0.276131 }, 90 }
+ };
+ palletPos[] = {
+ { { -0.880859, 2.4375, 5.95612 }, 90 },
+ { { 2.48926, -3.10742, 0.336128 }, 90 }
+ };
+ freezerPos[] = {
+ { { 2.14258, 1.05176, -2.62387 }, 90 },
+ { { -2.89063, 0.299316, 3.35612 }, 270.9 }
+ };
+ };
+ class Land_House_K_3_EP1 : Default {
+ shelfPos[] = {
+ { { -6.08594, -1.3042, -0.833199 }, 270 }
+ };
+ fridgePos[] = {
+ { { 2.39648, 3.49902, -0.523193 }, 93 }
+ };
+ bedPos[] = {
+ { { -0.318359, 4.32129, 2.7168 }, 180 }
+ };
+ couchPos[] = {
+ { { 1.73438, -0.850586, -0.833199 }, 0 }
+ };
+ cookerPos[] = {
+ { { -2.74316, 5.83447, -0.523193 }, 270 }
+ };
+ filingPos[] = {
+ { { -0.918945, 4.41162, -0.5532 }, 273 }
+ };
+ shoeboxPos[] = {
+ { { 1.85449, -3.16846, 0.0268021 }, 90 }
+ };
+ palletPos[] = {
+ { { -1.43359, -2.14697, 3.0168 }, 180 }
+ };
+ };
+ class Land_House_K_5_EP1 : Default {
+ bedPos[] = {
+ { { 3.78613, 0.527832, 2.3232 }, 184 }
+ };
+ cookerPos[] = {
+ { { -2.3457, 1.2207, 1.5132 }, 188 }
+ };
+ chairPos[] = {
+ { { 5.12695, 3.30615, 2.3232 }, 64 }
+ };
+ filingPos[] = {
+ { { -7.18164, -0.956055, 0.493202 }, 198 }
+ };
+ tablePos[] = {
+ { { 0.817383, 1.22754, 1.5232 }, 181 }
+ };
+ toolRackPos[] = {
+ { { -7.52832, 1.88867, 0.5532 }, 271 }
+ };
+ shoeboxPos[] = {
+ { { -5.31934, 2.41211, 0.823196 }, 47 }
+ };
+ };
+ class Land_House_K_6_EP1 : Default {
+ shelfPos[] = {
+ { { -0.28418, 5.72656, 1.47783 }, 0 },
+ { { 5.16602, -2.67188, 4.40265 }, 98 }
+ };
+ fridgePos[] = {
+ { { -0.412109, 5.45508, -1.62217 }, 0 }
+ };
+ bedPos[] = {
+ { { 0.00683594, 0.544434, 1.47783 }, 186 },
+ { { 0.00390625, 0.682617, -1.62217 }, 181 },
+ { { 1.93848, -2.26953, 4.40265 }, 98 },
+ { { 0.609375, 4.77393, 4.40783 }, 276 }
+ };
+ couchPos[] = {
+ { { -2.81738, 0.666504, 1.47783 }, 0 },
+ { { -4.17773, 5.6582, -1.63217 }, 95 }
+ };
+ wardrobePos[] = {
+ { { 3.08594, 3.81934, -1.63217 }, 91 }
+ };
+ cookerPos[] = {
+ { { 0.499023, 5.37695, -1.62217 }, 0 }
+ };
+ chairPos[] = {
+ { { -2.29883, 3.50537, 4.40265 }, 48 }
+ };
+ filingPos[] = {
+ { { 4.90918, 5.43604, 4.40265 }, 48 }
+ };
+ tablePos[] = {
+ { { 2.20313, -2.98926, -1.62217 }, 180 },
+ { { -4.65527, 0.294922, 1.49783 }, 276 }
+ };
+ shoeboxPos[] = {
+ { { 2.70117, 2.21973, 1.47783 }, 180 }
+ };
+ palletPos[] = {
+ { { -2.96582, -2.4082, -1.60735 }, 48 }
+ };
+ freezerPos[] = {
+ { { 1.55273, 5.40479, -1.62217 }, 0 }
+ };
+ };
+ class Land_A_Mosque_small_1_EP1 : Default {
+ couchPos[] = {
+ { { 6.44385, 2.74609, -2.0341 }, 2 }
+ };
+ chairPos[] = {
+ { { 1.59668, -1.55762, -1.7141 }, 357 },
+ { { 3.95605, -1.53418, -1.7141 }, 2 }
+ };
+ pelicanPos[] = {
+ { { 1.90137, 4.70996, -1.2041 }, 357 }
+ };
+ toolRackPos[] = {
+ { { -0.34375, -1.05762, -1.7041 }, 357 }
+ };
+ shoeboxPos[] = {
+ { { 2.07715, 0.0810547, -1.1841 }, 180 }
+ };
+ };
+ class Land_A_Mosque_small_2_EP1 : Default {
+ tablePos[] = {
+ { { -0.952637, 2.83398, -2.48343 }, 1.52588e-005 }
+ };
+ toolRackPos[] = {
+ { { -0.880371, -3.7002, -2.37343 }, 1.52588e-005 }
+ };
+ shoeboxPos[] = {
+ { { 0.770508, -3.40137, -1.69343 }, 1.52588e-005 },
+ { { -2.49805, -3.33887, -1.69343 }, 1.52588e-005 }
+ };
+ };
+ class Land_House_L_1_EP1 : Default {
+ cookerPos[] = {
+ { { 0.925293, 0.850586, -0.629326 }, 355 }
+ };
+ tablePos[] = {
+ { { 0.134766, -1.86328, -0.629326 }, 185 }
+ };
+ shoeboxPos[] = {
+ { { 2.03125, -1.08301, -0.689323 }, 180 }
+ };
+ };
+ class Land_House_L_3_EP1 : Default {
+ couchPos[] = {
+ { { -4.16162, 1.71777, 2.56979 }, 278 }
+ };
+ pelicanPos[] = {
+ { { -5.42822, 0.783203, -0.190216 }, 296 }
+ };
+ tablePos[] = {
+ { { -3.4624, 2.94727, -0.27021 }, 0 }
+ };
+ shoeboxPos[] = {
+ { { -0.625488, 3.21289, 0.559784 }, 323 }
+ };
+ palletPos[] = {
+ { { 0.00488281, 0.0605469, -0.27021 }, 267 },
+ { { 2.24951, 2.31934, -0.27021 }, 323 }
+ };
+ };
+ class Land_Misc_Well_L_EP1 : Default {
+ shoeboxPos[] = {
+ { { 0.611328, -0.0751953, 0.135979 }, 278 }
+ };
+ };
+ class Land_House_L_4_EP1 : Default {
+ shelfPos[] = {
+ { { -6.77441, -0.744141, -1.33775 }, 270 }
+ };
+ fridgePos[] = {
+ { { 4.71045, -0.0517578, -1.10775 }, 180 }
+ };
+ bedPos[] = {
+ { { 0.240723, 2.24023, -1.33775 }, 0 }
+ };
+ cookerPos[] = {
+ { { 6.61816, 1.50781, -1.10775 }, 90 }
+ };
+ chairPos[] = {
+ { { 0.864258, -0.628906, -1.27775 }, 120 }
+ };
+ tablePos[] = {
+ { { -3.76367, 1.76953, -1.33775 }, 0 }
+ };
+ shoeboxPos[] = {
+ { { 4.05518, 3.79492, -0.687752 }, 180 }
+ };
+ palletPos[] = {
+ { { -4.59863, 0.929688, 1.72225 }, 0 },
+ { { 4.38574, 2.06152, 1.44225 }, 0 }
+ };
+ freezerPos[] = {
+ { { 2.82861, 2.85352, -1.03775 }, 270 }
+ };
+ };
+ class Land_House_L_8_EP1 : Default {
+ fridgePos[] = {
+ { { -1.23047, 0.239258, -1.10685 }, 173 }
+ };
+ couchPos[] = {
+ { { 4.48242, 0.755859, 1.59315 }, 270 }
+ };
+ cookerPos[] = {
+ { { 1.48291, 5.91797, -1.10685 }, 90 }
+ };
+ chairPos[] = {
+ { { 1.6333, 3.23535, 1.59315 }, 109 }
+ };
+ pelicanPos[] = {
+ { { 5.0166, 3.38574, 1.79315 }, 170 }
+ };
+ tablePos[] = {
+ { { -3.3335, 2.53906, -1.10685 }, 267 }
+ };
+ toolRackPos[] = {
+ { { 3.69043, 1.83301, -1.10685 }, 357 }
+ };
+ shoeboxPos[] = {
+ { { 4.80859, 4.89551, -0.726845 }, 180 }
+ };
+ palletPos[] = {
+ { { -2.80469, 3.25488, 1.59315 }, 109 },
+ { { -2.77539, -3.80273, 1.29315 }, 109 }
+ };
+ freezerPos[] = {
+ { { 1.80957, 2.24609, -1.10685 }, 83 }
+ };
+ };
+ class Land_House_L_6_EP1 : Default {
+ shelfPos[] = {
+ { { 7.42285, 2.09961, 1.28293 }, 90 }
+ };
+ fridgePos[] = {
+ { { 1.31592, -2.31445, -1.50707 }, 180 }
+ };
+ bedPos[] = {
+ { { 6.03418, 1.56738, -1.54707 }, 274 }
+ };
+ couchPos[] = {
+ { { -3.1333, -1.29785, -1.54707 }, 184 }
+ };
+ wardrobePos[] = {
+ { { 3.08252, 0.0664063, -1.54707 }, 274 }
+ };
+ chairPos[] = {
+ { { -3.73486, 2.18555, -1.54707 }, 330 }
+ };
+ filingPos[] = {
+ { { 7.31006, 1.4082, 1.28293 }, 90 }
+ };
+ lockerPos[] = {
+ { { 7.1626, 0.398438, 1.28293 }, 90 }
+ };
+ shoeboxPos[] = {
+ { { 1.97461, 1.40332, -0.347069 }, 79 }
+ };
+ palletPos[] = {
+ { { 0.405762, 1.2666, 1.18293 }, 90 },
+ { { -3.02832, -1.68848, 1.18293 }, 90 }
+ };
+ };
+ class Land_House_L_7_EP1 : Default {
+ shelfPos[] = {
+ { { -2.28809, -2.28809, -0.939278 }, 87.8875 }
+ };
+ fridgePos[] = {
+ { { -5.4751, 3.71777, -0.639275 }, 1.52588e-005 }
+ };
+ bedPos[] = {
+ { { 3.79248, 2.42188, -0.269272 }, 270 }
+ };
+ wardrobePos[] = {
+ { { 5.65527, 0.724609, -0.269272 }, 90 }
+ };
+ cookerPos[] = {
+ { { -4.51172, 3.5752, -0.609276 }, 1.52588e-005 }
+ };
+ chairPos[] = {
+ { { -0.388672, 3.22656, -0.269272 }, 290 }
+ };
+ filingPos[] = {
+ { { -5.10986, -2.08984, -0.939278 }, 350 }
+ };
+ tablePos[] = {
+ { { 1.99707, -1.52637, -0.239273 }, 180 }
+ };
+ shoeboxPos[] = {
+ { { -5.84033, -7.11621, 0.0807266 }, 180 }
+ };
+ palletPos[] = {
+ { { -0.26416, -6.77637, -1.06927 }, 180 }
+ };
+ freezerPos[] = {
+ { { -2.71533, -6.71777, -0.909271 }, 180 }
+ };
+ };
+ class Land_House_C_1_EP1 : Default {
+ shelfPos[] = {
+ { { -4.81006, 1.55078, -0.937073 }, 0 }
+ };
+ fridgePos[] = {
+ { { -8.3042, -0.625977, -0.937073 }, 270 }
+ };
+ cookerPos[] = {
+ { { -8.23047, 0.216797, -0.937073 }, 270 }
+ };
+ chairPos[] = {
+ { { -2.89355, -0.30957, -0.937073 }, 80 }
+ };
+ filingPos[] = {
+ { { -5.55566, 1.49609, -0.937073 }, 0 },
+ { { -6.02295, 1.42188, -0.937073 }, 350 }
+ };
+ pelicanPos[] = {
+ { { 4.00537, -1.68848, 3.61293 }, 90 }
+ };
+ tablePos[] = {
+ { { 8.03906, -0.804688, -0.937073 }, 90 }
+ };
+ lockerPos[] = {
+ { { -1.39746, -0.689453, -1.01707 }, 270 }
+ };
+ toolRackPos[] = {
+ { { 5.82568, 1.81348, -0.937073 }, 0 }
+ };
+ shoeboxPos[] = {
+ { { 7.98096, -4.17969, -0.247078 }, 0 }
+ };
+ palletPos[] = {
+ { { 1.82275, -3.33984, 3.51293 }, 90 },
+ { { -6.08203, 0.685547, 3.61293 }, 90 },
+ { { 6.38721, 0.277344, -0.947075 }, 90 }
+ };
+ };
+ class Land_A_Minaret_Porto_EP1 : Default {
+ chairPos[] = {
+ { { 1.95752, 0.271484, 9.38245 }, 349 }
+ };
+ pelicanPos[] = {
+ { { 2.31885, 1.9375, 6.58245 }, 229 },
+ { { 3.31494, -0.510742, -3.39755 }, 113 }
+ };
+ shoeboxPos[] = {
+ { { 2.27197, -2.94531, 9.39245 }, 349 }
+ };
+ palletPos[] = {
+ { { 1.25195, 0.685547, -20.5975 }, 100 }
+ };
+ };
+ class Land_House_C_2_EP1 : Default {
+ shelfPos[] = {
+ { { -4.66211, -0.90918, -2.31334 }, 266.8 }
+ };
+ bedPos[] = {
+ { { 1.67383, -0.817383, 0.763084 }, 90 },
+ { { -3.94336, 1.43262, 0.603081 }, 180 }
+ };
+ couchPos[] = {
+ { { 3.84131, -3.79883, 0.786659 }, 271.8 }
+ };
+ wardrobePos[] = {
+ { { 5.73877, 2.78125, 0.786659 }, 90 }
+ };
+ chairPos[] = {
+ { { -2.6167, -1.23535, 0.603081 }, 170 },
+ { { -4.00146, -1.05664, 0.603081 }, 220 }
+ };
+ filingPos[] = {
+ { { 5.95459, -0.53418, -2.31334 }, 104 },
+ { { 6.07373, 2.55176, -2.31334 }, 80 }
+ };
+ tablePos[] = {
+ { { 2.34131, 2.0918, 0.763084 }, 1.52588e-005 }
+ };
+ lockerPos[] = {
+ { { -1.74707, 2.39355, -2.31334 }, 89.8 }
+ };
+ toolRackPos[] = {
+ { { -1.31445, 0.375, -2.31334 }, 89.8 }
+ };
+ shoeboxPos[] = {
+ { { -0.350098, 2.94238, -2.28334 }, 180 },
+ { { 5.8457, -1.50684, 1.57308 }, 180 }
+ };
+ palletPos[] = {
+ { { -2.55518, -0.786133, -2.31334 }, 110.8 },
+ { { -3.98584, 1.06055, -2.31334 }, 89.8 }
+ };
+ freezerPos[] = {
+ { { 2.02002, 0.932617, -2.31334 }, 270 }
+ };
+ };
+ class Land_Misc_Well_C_EP1 : Default {
+ shoeboxPos[] = {
+ { { 0.225098, 0.355469, 0.0676193 }, 170 }
+ };
+ };
+ class Land_House_C_1_v2_EP1 : Default {
+ fridgePos[] = {
+ { { -8.29102, 0.782227, -1.35837 }, 270 }
+ };
+ couchPos[] = {
+ { { 4.57666, -1.00195, 3.16163 }, 270 },
+ { { -5.02783, 2.07422, -1.38837 }, 270 }
+ };
+ cookerPos[] = {
+ { { -2.74414, 1.1748, -1.38837 }, 90 }
+ };
+ chairPos[] = {
+ { { 1.5708, -1.56641, 3.16163 }, 320 },
+ { { 3.31299, -1.47852, -1.35837 }, 40 },
+ { { 6.86572, -0.859375, 3.16163 }, 30 }
+ };
+ filingPos[] = {
+ { { 6.08252, 2.9502, -1.35837 }, 1.52588e-005 }
+ };
+ tablePos[] = {
+ { { 4.56787, -2.96875, 3.16163 }, 180 },
+ { { 7.90332, 1.12305, -1.35837 }, 90 }
+ };
+ shoeboxPos[] = {
+ { { -8.38037, -0.833008, -0.93837 }, 270 }
+ };
+ freezerPos[] = {
+ { { 5.20557, 2.90332, -1.35837 }, 1.52588e-005 }
+ };
+ };
+ class Land_House_C_5_V1_EP1 : Default {
+ bedPos[] = {
+ { { -1.40234, -0.685547, -1.48295 }, 0 }
+ };
+ couchPos[] = {
+ { { -3.50098, -0.208008, -1.48295 }, 180 }
+ };
+ wardrobePos[] = {
+ { { 0.958984, 1.01758, 1.42705 }, 180 }
+ };
+ chairPos[] = {
+ { { -2.87109, 3.71875, -1.48295 }, 0 },
+ { { 2.50684, 4.94287, -1.48295 }, 0 }
+ };
+ filingPos[] = {
+ { { 3.30664, 1.04639, -1.48295 }, 180 }
+ };
+ tablePos[] = {
+ { { -2.96191, -4.95508, -1.48295 }, 180 }
+ };
+ palletPos[] = {
+ { { -3.12891, 0.384277, 1.15705 }, 250 },
+ { { -1.73926, -4.29883, 1.15705 }, 180 }
+ };
+ };
+ class Land_House_C_3_EP1 : Default {
+ shelfPos[] = {
+ { { -2.11621, -1.87402, 1.91428 }, 265 }
+ };
+ fridgePos[] = {
+ { { 5.75879, 3.84033, -3.87573 }, 0 }
+ };
+ bedPos[] = {
+ { { -7.35449, -1.97705, 0.514275 }, 178 }
+ };
+ couchPos[] = {
+ { { 4.89453, -0.709961, -0.485725 }, 178 },
+ { { 4.43359, -2.51904, 4.04428 }, 178 }
+ };
+ wardrobePos[] = {
+ { { -8.02637, 1.10938, 0.514275 }, 268 }
+ };
+ cookerPos[] = {
+ { { 4.0166, -1.12305, -3.87573 }, 270 }
+ };
+ chairPos[] = {
+ { { -4.25684, 3.56934, 0.514275 }, 40 },
+ { { 6.07715, 0.655273, -3.88573 }, 339 }
+ };
+ filingPos[] = {
+ { { 8.17969, -2.87256, -3.87573 }, 130 }
+ };
+ pelicanPos[] = {
+ { { 2.22266, -1.98633, 4.91428 }, 88 }
+ };
+ tablePos[] = {
+ { { -4.11621, -1.11475, 0.514275 }, 90 },
+ { { 4.09082, 1.39307, -3.87573 }, 270 }
+ };
+ lockerPos[] = {
+ { { -8.1543, 2.12549, -3.81573 }, 269 }
+ };
+ toolRackPos[] = {
+ { { -8.44434, 0.203125, -3.81573 }, 269 }
+ };
+ shoeboxPos[] = {
+ { { -3.90039, -3.58984, -3.83573 }, 270 },
+ { { -8.08105, 3.58545, 1.58427 }, 0 }
+ };
+ palletPos[] = {
+ { { 6.55469, -1.37988, 4.11428 }, 178 },
+ { { -6.69141, 2.4873, 4.31428 }, 178 }
+ };
+ freezerPos[] = {
+ { { 4.03809, -2.17529, -3.87573 }, 270 }
+ };
+ };
+ class Land_House_C_12_EP1 : Default {
+ shelfPos[] = {
+ { { 3.25391, -5.70898, 0.10778 }, 91 },
+ { { 7.60742, 2.00098, -3.52222 }, 90 }
+ };
+ fridgePos[] = {
+ { { -3.77637, -8.55176, 0.137779 }, 271 }
+ };
+ couchPos[] = {
+ { { 3.50244, -2.55566, 0.137779 }, 110 },
+ { { -0.932129, -7.9502, -3.52222 }, 90 }
+ };
+ cookerPos[] = {
+ { { 3.01709, -8.48047, -3.52222 }, 91 }
+ };
+ chairPos[] = {
+ { { 2.45898, -8.51855, 0.10778 }, 141 },
+ { { -3.55371, -8.52734, -3.52222 }, 221 }
+ };
+ filingPos[] = {
+ { { 4.61963, -4.02148, -3.52222 }, 180 }
+ };
+ pelicanPos[] = {
+ { { -4.01465, -5.48633, 3.38778 }, 269 }
+ };
+ lockerPos[] = {
+ { { -0.582031, -3.9248, -3.52222 }, 180 }
+ };
+ toolRackPos[] = {
+ { { 1.37695, -4.39941, -3.52222 }, 180 },
+ { { 3.40576, -4.42773, -3.52222 }, 180 }
+ };
+ shoeboxPos[] = {
+ { { 1.32813, 0.0283203, -3.52222 }, 88 }
+ };
+ palletPos[] = {
+ { { -1.87988, 1.13379, 0.137779 }, 230 },
+ { { -2.9873, 0.550781, -3.48222 }, 88 },
+ { { 5.65186, 0.637695, 0.137779 }, 110 }
+ };
+ freezerPos[] = {
+ { { 3.05566, -5.78223, -3.50222 }, 88 }
+ };
+ };
+ class Land_House_C_5_V3_EP1 : Default {
+ shelfPos[] = {
+ { { 0.881836, 0.848633, 1.42705 }, 180 }
+ };
+ fridgePos[] = {
+ { { 2.83398, 5.10059, -1.48295 }, 0.999985 }
+ };
+ bedPos[] = {
+ { { -1.33838, -0.811523, -1.48295 }, 0.999985 }
+ };
+ wardrobePos[] = {
+ { { 4.41846, 1.59082, 1.42705 }, 90 },
+ { { -2.9209, 3.87598, -1.48295 }, 1.00179e-005 }
+ };
+ chairPos[] = {
+ { { -3.97998, 1.91797, -1.48295 }, 289 },
+ { { -1.0791, -4.83398, 1.12706 }, 130 }
+ };
+ filingPos[] = {
+ { { -4.45752, -5.25781, -1.49295 }, 269 }
+ };
+ shoeboxPos[] = {
+ { { 4.48828, 1.01172, -1.40295 }, 1.00179e-005 },
+ { { 0.500977, 4.9834, -0.672951 }, 30 }
+ };
+ palletPos[] = {
+ { { -1.72168, -1.9375, 1.17705 }, 1.00179e-005 }
+ };
+ };
+ class Land_House_C_5_V2_EP1 : Default {
+ shelfPos[] = {
+ { { 0.882813, 0.848145, 1.42705 }, 180 }
+ };
+ fridgePos[] = {
+ { { 2.83398, 5.1001, -1.48295 }, 1 }
+ };
+ bedPos[] = {
+ { { -1.33789, -0.811523, -1.48295 }, 1 }
+ };
+ wardrobePos[] = {
+ { { -2.85547, 3.81055, -1.38295 }, 360 }
+ };
+ chairPos[] = {
+ { { -3.86914, 1.87793, -1.39295 }, 320 },
+ { { -1.0752, -4.77148, 1.32706 }, 130 }
+ };
+ filingPos[] = {
+ { { -4.45703, -5.25781, -1.49295 }, 269 }
+ };
+ shoeboxPos[] = {
+ { { 4.48828, 1.01172, -1.40295 }, 0 },
+ { { 0.507813, 5.10352, -0.572945 }, 130 }
+ };
+ palletPos[] = {
+ { { -1.72168, -1.9375, 1.17705 }, 0 }
+ };
+ };
+ class Land_Mil_Guardhouse_EP1 : Default {
+ lootType = "mil";
+ shelfPos[] = {
+ { { -2.9021, -0.569336, -1.69236 }, 180 }
+ };
+ shoeboxPos[] = {
+ { { -2.94189, 3.83496, -1.69236 }, 180 }
+ };
+ };
+ class Land_Mil_House_EP1 : Default {
+ lootType = "mil";
+ toolRackPos[] = {
+ { { 10.4844, 2.79492, -5.67967 }, 270 }
+ };
+ palletPos[] = {
+ { { 12.9678, 2.14258, -5.67967 }, 180 },
+ { { 13.7964, 4.08594, -5.67967 }, 220 }
+ };
+ };
+ class Land_Mil_Repair_center_EP1 : Default {
+ lootType = "mil";
+ toolRackPos[] = {
+ { { 3.14893, 3.31836, -2.52654 }, 270 }
+ };
+ palletPos[] = {
+ { { -2.75195, 0.446289, -1.52654 }, 180 },
+ { { -2.63037, 3.28516, -1.52654 }, 270 }
+ };
+ };
+ class Land_Misc_Cargo1Ao_EP1 : Default {
+ palletPos[] = {
+ { { 0.109863, -0.517578, -1.05425 }, 180 },
+ { { 0.0776367, 2.01465, -1.05425 }, 180 }
+ };
+ };
+ class Land_Mil_Barracks_i_EP1 : Default {
+ pelicanPos[] = {
+ { { -0.560303, -1.47656, 0.0566254 }, 88 },
+ { { 2.65845, -1.47168, -0.743378 }, 108 },
+ { { -3.68701, -1.2627, 0.0566254 }, 100 },
+ { { -7.04419, -1.5918, -0.743378 }, 100 }
+ };
+ lockerPos[] = {
+ { { 0.652588, -1.77637, -1.10338 }, 270 },
+ { { -5.80908, -1.9834, -1.10338 }, 270 },
+ { { -9.33643, -2.05957, -1.10338 }, 270 }
+ };
+ toolRackPos[] = {
+ { { -9.41846, 2.02148, -1.10338 }, 270 }
+ };
+ shoeboxPos[] = {
+ { { -3.3457, -0.0791016, -1.11338 }, 108 },
+ { { 2.53003, -2.44336, -1.08338 }, 108 },
+ { { 4.00269, -1.91797, -0.083374 }, 290 },
+ { { -10.4619, 1.45313, 0.296623 }, 90 }
+ };
+ };
+ class Land_Ind_Oil_Pump_EP1 : Default {
+ shoeboxPos[] = {
+ { { 1.8894, -2.20605, 2.53654 }, 90 }
+ };
+ };
+ class Land_Ind_Oil_Tower_EP1 : Default {
+ couchPos[] = {
+ { { 3.39233, -5.47461, 3.74753 }, 270 }
+ };
+ pelicanPos[] = {
+ { { 3.07495, -2.38086, 16.4475 }, 270 }
+ };
+ toolRackPos[] = {
+ { { -1.66919, 0.807617, -13.0425 }, 270 }
+ };
+ palletPos[] = {
+ { { 3.64136, 0.131836, -8.04248 }, 30 },
+ { { -1.99316, -6.2207, -13.0225 }, 270 },
+ { { 4.45459, -5.50098, -12.9225 }, 270 },
+ { { 5.33862, -6.28711, -8.04248 }, 30 }
+ };
+ };
+ class Land_House_L_9_EP1 : Default {
+ bedPos[] = {
+ { { 1.09448, 1.40039, -0.611443 }, 275 }
+ };
+ };
+ class Land_fortified_nest_big_EP1 : Default {
+ shelfPos[] = {
+ { { -0.359375, -0.337891, -0.721558 }, 95 }
+ };
+ couchPos[] = {
+ { { 1.25781, -0.414063, -0.721558 }, 185 }
+ };
+ pelicanPos[] = {
+ { { -1.12036, 0.962891, -0.721558 }, 85 }
+ };
+ };
+ class Land_A_Mosque_big_wall_EP1 : Default {
+ shelfPos[] = {
+ { { 4.53857, 4.61914, -2.04966 }, 350 }
+ };
+ couchPos[] = {
+ { { 0.288574, 3.51367, -2.04966 }, 270 }
+ };
+ };
+ class Land_A_Mosque_big_wall_corner_EP1 : Default {
+ couchPos[] = {
+ { { -1.2417, 3.2666, -2.03097 }, 270 }
+ };
+ chairPos[] = {
+ { { 1.03223, 3.80176, -2.03097 }, 20 }
+ };
+ palletPos[] = {
+ { { 3.88086, -2.67383, -2.03097 }, 20 }
+ };
+ };
+ class Land_A_Mosque_big_minaret_1_EP1 : Default {
+ pelicanPos[] = {
+ { { -0.907227, -1.69336, 7.16152 }, 280 }
+ };
+ shoeboxPos[] = {
+ { { 0.124023, -0.527344, 7.16152 }, 4.89996 }
+ };
+ };
+ class Land_A_Mosque_big_addon_EP1 : Default {
+ tablePos[] = {
+ { { 5.93506, -2.10156, -6.46501 }, 90 },
+ { { 5.84326, 2.80566, -6.46501 }, 90 }
+ };
+ shoeboxPos[] = {
+ { { 2.78027, -5.18164, -5.965 }, 360 },
+ { { 2.78857, 5.36914, -5.965 }, 360 }
+ };
+ };
+ class Land_A_Mosque_big_hq_EP1 : Default {
+ couchPos[] = {
+ { { 5.84619, -2.89648, -9.35999 }, 41 },
+ { { 8.43701, 8.60352, 0.520004 }, 150 }
+ };
+ chairPos[] = {
+ { { -6.1582, -2.72852, -9.33999 }, 249 },
+ { { -5.3042, -4.38379, -9.33999 }, 239 },
+ { { 9.77832, -7.29395, 0.520004 }, 320 },
+ { { 8.51709, -9.12793, 0.520004 }, 300 },
+ { { 9.05273, -10.5879, -4.05999 }, 340 }
+ };
+ pelicanPos[] = {
+ { { 2.45459, 9.20313, 0.520004 }, 340 }
+ };
+ tablePos[] = {
+ { { 5.96045, 3.45703, -9.36999 }, 49 }
+ };
+ shoeboxPos[] = {
+ { { -9.6084, -10.9482, -4.05999 }, 41 }
+ };
+ palletPos[] = {
+ { { -5.69385, -8.7002, 0.520004 }, 320 },
+ { { -8.27783, 7.9248, 0.520004 }, 70 }
+ };
+ };
+ class Land_A_Mosque_big_minaret_2_EP1 : Default {
+ pelicanPos[] = {
+ { { -1.92383, -1.92188, 3.61214 }, 80 }
+ };
+ shoeboxPos[] = {
+ { { -0.0258789, -0.837891, 3.60214 }, 9.99997 }
+ };
+ };
+ class Land_House_C_11_EP1 : Default {
+ shelfPos[] = {
+ { { 4.04883, -0.507813, -2.07991 }, 180 }
+ };
+ couchPos[] = {
+ { { 0.967773, -3.72266, -2.07991 }, 89.9999 },
+ { { 5.21924, -3.53809, 0.940094 }, 93 }
+ };
+ wardrobePos[] = {
+ { { 3.57471, 2.49023, 1.04009 }, 265.8 }
+ };
+ cookerPos[] = {
+ { { 4.06836, -1.44141, -2.07991 }, 0 }
+ };
+ chairPos[] = {
+ { { 7.38379, -1.58594, 0.940094 }, 43 }
+ };
+ filingPos[] = {
+ { { 2.47314, -4.53809, 0.940094 }, 179 },
+ { { 2.99756, -4.46582, 0.940094 }, 173 }
+ };
+ toolRackPos[] = {
+ { { 6.90332, -0.748047, -2.07991 }, 180 }
+ };
+ palletPos[] = {
+ { { 0.493652, -1.9248, 0.960091 }, 179 },
+ { { 1.26855, 4.18555, -2.45991 }, 185.8 }
+ };
+ freezerPos[] = {
+ { { -1.55713, -2.66016, -2.07991 }, 272 }
+ };
+ };
+ class Land_House_C_9_EP1 : Default {
+ shelfPos[] = {
+ { { 0.668945, -4.66406, -3.85899 }, 180 }
+ };
+ fridgePos[] = {
+ { { 3.50098, 2.56934, -3.82899 }, 356 }
+ };
+ bedPos[] = {
+ { { 1.76123, 4.54102, -0.278992 }, 92.1 }
+ };
+ couchPos[] = {
+ { { 1.69629, -4.80762, -0.278992 }, 90 }
+ };
+ cookerPos[] = {
+ { { 2.63574, 2.44336, -3.82899 }, 356 }
+ };
+ chairPos[] = {
+ { { -4.98926, 0.46582, -0.278992 }, 262.1 }
+ };
+ filingPos[] = {
+ { { 5.79541, -5.37012, -0.278992 }, 94 },
+ { { 5.7334, -5.89941, -0.278992 }, 100 }
+ };
+ pelicanPos[] = {
+ { { -5.09424, -1.93359, -0.278992 }, 94 }
+ };
+ lockerPos[] = {
+ { { 2.80615, 2.62598, -0.278992 }, 0 }
+ };
+ toolRackPos[] = {
+ { { 1.40625, 6.66602, -3.85899 }, 0 }
+ };
+ shoeboxPos[] = {
+ { { -2.22803, 0.438477, -2.99899 }, 360 }
+ };
+ palletPos[] = {
+ { { 0.508301, -2.66895, 2.53101 }, 144 },
+ { { -3.3208, 1.07031, 2.53101 }, 144 },
+ { { -1.89307, 4.89941, 2.53101 }, 94 }
+ };
+ freezerPos[] = {
+ { { 5.66406, 0.332031, -3.83899 }, 89 }
+ };
+ };
+ class Land_Fort_Watchtower_EP1 : Default {
+ pelicanPos[] = {
+ { { -0.390137, 0.0634766, 0.56675 }, 144 }
+ };
+ shoeboxPos[] = {
+ { { -1.28271, 2.67969, -2.21325 }, 360 }
+ };
+ palletPos[] = {
+ { { -0.77832, -2.00293, -2.20325 }, 144 }
+ };
+ };
+ class Land_Misc_Cargo1Bo_EP1 : Default {
+ palletPos[] = {
+ { { 0.0737305, -0.0507813, -1.06068 }, 184 },
+ { { 0.0981445, -1.95898, -1.06068 }, 184 },
+ { { -0.0107422, 1.99707, -1.06068 }, 184 }
+ };
+ };
+ class Land_A_Minaret_EP1 : Default {
+ pelicanPos[] = {
+ { { -1.50244, -0.742188, 5.06781 }, 123.5 }
+ };
+ };
+ //Taki End//
+
+
+
+ // BornHolm Start //
+ class Land_bo_HouseV2_04_Interier : Land_HouseV2_04_interier {};
+ class Land_bo_HouseV2_02_Interier : Land_HouseV2_02_Interier {};
+ class Land_bo_HouseV_1I4 : Land_HouseV_1I4 {};
+ class Land_bo_Panelak2 : Land_Panelak2 {};
+ class Land_bo_Panelak : Land_Panelak {};
+ class Land_bo_Shed_Ind02 : Land_Shed_Ind02 {};
+ class Land_bo_Hlidac_budka : Land_Hlidac_budka {};
+ class Land_bo_A_GeneralStore_01 : Land_A_GeneralStore_01 {};
+ class Land_bo_A_Office01 : Land_A_Office01 {};
+ class Land_bo_Barn_W_01 : Land_Barn_W_01 {};
+ class Land_bo_stodola_open : Land_Stodola_open {};
+ class Land_bo_stodola_old_open : Land_Stodola_old_open {};
+ class Land_bo_Farm_Cowshed_a : Land_Farm_Cowshed_a {};
+ class Land_bo_Farm_Cowshed_b : Land_Farm_Cowshed_b {};
+ class Land_bo_Farm_Cowshed_c : Land_Farm_Cowshed_c {};
+ class Land_bo_A_TVTower_Base : Land_A_TVTower_Base {};
+ class Land_bo_HouseV_2T2 : Land_houseV_2T2 {};
+ class Land_bo_HouseB_Tenement : Land_HouseB_Tenement {};
+ class Land_bo_HouseV2_01A : Land_HouseV2_01A {};
+ class Land_bo_Barn_W_02 : Land_Barn_W_02 {};
+ class Land_bo_Shed_W01 : Land_Shed_W01 {};
+ class Land_bo_A_Castle_Bergfrit : Land_A_Castle_Bergfrit {};
+ class Land_bo_Shed_wooden : Land_Shed_wooden {};
+ class Land_bo_HouseV_1L2 : Land_HouseV_1L2 {};
+ class Land_bo_HouseV_1I1 : Land_HouseV_1I1 {};
+ class Land_bo_HouseV_1L1 : Land_HouseV_1L1 {};
+ class Land_bo_misc_deerstand : Land_Misc_deerstand {};
+ class Land_bo_HouseBlock_A1_1 : Land_HouseBlock_A1_1 {};
+ class Land_bo_HouseBlock_A3 : Land_HouseBlock_A3 {};
+ class Land_bo_hut06 : Land_Hut06 {};
+
+
+ class Land_bo_dum_rasovna : Default {
+ shelfPos[] = {
+ { { -1.56299, -4.67383, -2.69722 }, 185 },
+ { { 3.88159, -3.92139, -2.69722 }, 90 }
+ };
+ fridgePos[] = {
+ { { -1.78345, 1.78662, -2.70722 }, 275.214 }
+ };
+ bedPos[] = {
+ { { 2.92578, 2.73438, -2.70722 }, 1.99997 }
+ };
+ wardrobePos[] = {
+ { { 0.281494, -0.0371094, 0.232777 }, 261 }
+ };
+ cookerPos[] = {
+ { { -1.76978, -1.74072, -2.69722 }, 356 }
+ };
+ chairPos[] = {
+ { { 3.47705, -0.510742, -2.69722 }, 101 }
+ };
+ filingPos[] = {
+ { { 0.485352, -1.99902, 0.232777 }, 0 },
+ { { -0.095459, -2.09375, 0.232777 }, 354 }
+ };
+ pelicanPos[] = {
+ { { -0.732422, 3.80762, 0.202777 }, 329 }
+ };
+ tablePos[] = {
+ { { 0.746094, 4.27881, -2.67722 }, 360 }
+ };
+ toolRackPos[] = {
+ { { -0.824707, -1.08301, -2.69722 }, 182 }
+ };
+ shoeboxPos[] = {
+ { { -1.76807, -4.44385, 0.232777 }, 44 }
+ };
+ freezerPos[] = {
+ { { 0.0822754, -1.64063, -2.69722 }, 0.999985 }
+ };
+ };
+ class Land_bo_Nasypka : Default {
+ shoeboxPos[] = {
+ { { -1.81689, -0.786621, 6.56536 }, 213 }
+ };
+ };
+ class Land_TTowerBig_2_F : Default {
+ pelicanPos[] = {
+ { { 1.03027, 1.00903, 0.757229 }, 41 }
+ };
+ };
+ class Land_bo_Sara_domek_sedy : Default {
+ fridgePos[] = {
+ { { 0.498047, 1.38989, -2.14814 }, 270 }
+ };
+ bedPos[] = {
+ { { -1.31494, 0.212891, -2.13814 }, 4 },
+ { { -5.03027, 3.2019, -2.14814 }, 183 }
+ };
+ couchPos[] = {
+ { { 4.9209, 1.72778, -2.12814 }, 5 }
+ };
+ wardrobePos[] = {
+ { { -4.1416, -0.853271, -2.14814 }, 182 }
+ };
+ cookerPos[] = {
+ { { 1.86279, 4.21411, -2.13814 }, 0 }
+ };
+ chairPos[] = {
+ { { -2.82324, -0.666504, -2.13814 }, 170 },
+ { { -5.49121, -0.572998, -2.13814 }, 200 }
+ };
+ filingPos[] = {
+ { { 6.03662, -1.00024, -2.13814 }, 97 }
+ };
+ tablePos[] = {
+ { { -3.23926, 4.17554, -2.11814 }, 0 }
+ };
+ shoeboxPos[] = {
+ { { 0.770508, -0.9021, -2.14814 }, 161 }
+ };
+ freezerPos[] = {
+ { { 0.799805, 4.23804, -2.11814 }, 0 }
+ };
+ };
+ class Land_bo_Ind_SawMill : Default {
+ toolRackPos[] = {
+ { { 9.0686, 5.12646, -5.83683 }, 270 }
+ };
+ palletPos[] = {
+ { { -7.46265, -5.69971, -5.83683 }, 142 },
+ { { 7.71216, -10.9746, -5.83683 }, 290 },
+ { { -3.50049, 16.1409, -5.83683 }, 142 },
+ { { 5.49878, 16.4333, -5.83683 }, 40 }
+ };
+ };
+ class Land_bo_Dum_mesto2 : Default {
+ shelfPos[] = {
+ { { -0.732422, 3.7876, -4.33935 }, 179 },
+ { { 3.63647, -6.50879, -4.34044 }, 91 },
+ { { 2.20728, -8.04883, -4.34044 }, 175 }
+ };
+ fridgePos[] = {
+ { { -3.60547, 6.22559, -4.34935 }, 269 }
+ };
+ bedPos[] = {
+ { { -2.60498, -1.65088, -0.949348 }, 270 },
+ { { -2.51392, -7.01904, -0.970444 }, 90 },
+ { { -2.25952, 7.11084, -0.949348 }, 272 }
+ };
+ couchPos[] = {
+ { { -2.60498, -2.21436, -4.33935 }, 187 },
+ { { -0.407959, -6.73047, -4.35044 }, 94 }
+ };
+ wardrobePos[] = {
+ { { 0.216064, 3.9668, -0.949348 }, 180 }
+ };
+ cookerPos[] = {
+ { { -3.6228, 7.73877, -4.34935 }, 269 }
+ };
+ chairPos[] = {
+ { { 3.14673, 4.25439, -4.33935 }, 119 },
+ { { 3.18701, 7.4751, -0.970444 }, 20 },
+ { { 3.13452, 7.49902, -4.33935 }, 60 },
+ { { 3.17065, -7.49072, -0.970444 }, 119 },
+ { { -3.35864, -7.4707, -4.34044 }, 220 }
+ };
+ filingPos[] = {
+ { { 3.42749, -7.72949, -4.34044 }, 121 }
+ };
+ tablePos[] = {
+ { { -0.68042, -0.654297, -4.35044 }, 0 },
+ { { -3.53101, -3.4668, -0.970444 }, 270 },
+ { { -3.49878, -5.11523, -4.34044 }, 271 },
+ { { -0.356445, 7.76953, -4.33935 }, 359 }
+ };
+ toolRackPos[] = {
+ { { -2.99243, 0.0361328, -4.34044 }, 181 }
+ };
+ shoeboxPos[] = {
+ { { 1.50415, -0.472656, -4.35044 }, 207 },
+ { { -3.74072, 0.48584, -4.34935 }, 90 }
+ };
+ freezerPos[] = {
+ { { -2.49731, 0.472168, -4.34935 }, 178 }
+ };
+ };
+ class Land_bo_HouseV_3I4 : Default {
+ shoeboxPos[] = {
+ { { 5.35449, 3.04028, -2.60763 }, 280 }
+ };
+ };
+ class Land_bo_Dum_mesto3 : Default {
+ palletPos[] = {
+ { { 5.67578, -0.140137, -5.89724 }, 250 }
+ };
+ };
+ class Land_bo_HouseV_1T : Default {
+ shoeboxPos[] = {
+ { { -4.95142, 6.46045, -3.09068 }, 130 }
+ };
+ };
+ class Land_bo_Ind_Stack_Big : Default {
+ shelfPos[] = {
+ { { 0.137939, 0.352539, -28.5862 }, 270 }
+ };
+ pelicanPos[] = {
+ { { -2.85278, 0.0292969, -23.3062 }, 290 }
+ };
+ shoeboxPos[] = {
+ { { -1.56006, -2.29297, -28.5862 }, 260 }
+ };
+ };
+
+ class Land_bo_Deutshe_mini : Default {
+ shelfPos[] = {
+ { { 3.57666, -1.0437, -2.74453 }, 0 }
+ };
+ fridgePos[] = {
+ { { -0.42334, -0.501709, -2.75453 }, 90 }
+ };
+ bedPos[] = {
+ { { -3.61914, 2.44849, -2.74453 }, 89 }
+ };
+ couchPos[] = {
+ { { 3.54443, 0.63208, -2.75453 }, 90 }
+ };
+ wardrobePos[] = {
+ { { -0.290039, 2.47217, -2.74453 }, 89 }
+ };
+ chairPos[] = {
+ { { 0.885254, 2.83154, -2.75453 }, 310 }
+ };
+ filingPos[] = {
+ { { 0.569336, -3.05029, -2.74453 }, 259 }
+ };
+ shoeboxPos[] = {
+ { { -3.51465, -1.95581, -1.98453 }, 209 }
+ };
+ freezerPos[] = {
+ { { -4.28613, 0.733887, -2.74453 }, 359 }
+ };
+ };
+ class Land_u_House_Small_01_V1_F : Default {
+ fridgePos[] = { { { 0.867188, 4.2207, -0.931187 }, 81.6768 } };
+ shelfPos[] = { { { 1.16602, -1.34766, -0.929543 }, 86.5322 }, { { -2.17383, 1.22656, -0.930841 }, 1.30102 } };
+ wardrobePos[] = { { { 0.298828, -3.75586, -0.929366 }, 164.186 } };
+ bedPos[] = { { { -3.52344, -2.83594, -0.931075 }, 183.389 } };
+ couchPos[] = { { { 2.90234, -1.70313, -0.929456 }, 179.44 } };
+ cookerPos[] = { { { -1.41602, 2.18359, -0.931049 }, 180.625 } };
+ chairPos[] = { { { 2.46484, 1.8125, -0.930511 }, 270.894 }, { { -4.09766, -0.542969, -0.925941 }, 270.019 }, { { 2.42383, 3.95703, -0.931158 }, 329.895 } };
+ };
+
+
+ // Bornholm End
+
+
+ class Land_TTowerBig_1_F : Default {
+ pelicanPos[] = {
+ { { 0.920898, 0.00317383, 2.89364 }, 270 }
+ };
+ };
+ class Land_u_Addon_01_V1_F : Default {
+ shoeboxPos[] = {
+ { { 5.52515, 0.521484, -0.014668 }, 270 }
+ };
+ palletPos[] = {
+ { { -0.227783, 0.866699, -0.0246677 }, 270 }
+ };
+ };
+ class Land_SlideCastle_F : Default {
+ shoeboxPos[] = {
+ { { 0.0908203, 2.18799, -1.94149 }, 193 }
+ };
+ palletPos[] = {
+ { { -0.841309, -3.05469, -1.94149 }, 193 }
+ };
+ };
+ class Land_Shed_Big_F : Default {
+ palletPos[] = {
+ { { 6.66553, 4.03369, -10 }, 177 },
+ { { -7.18652, -10.4651, -10 }, 177 },
+ { { -5.99561, 11.2573, -10 }, 177 }
+ };
+ };
+ class Land_Radar_F : Default {
+ pelicanPos[] = {
+ { { 9.36694, 4.97949, -4.86368 }, 247 }
+ };
+ shoeboxPos[] = {
+ { { -9.92847, -8.72461, -4.86368 }, 44 }
+ };
+ };
+ class Land_ReservoirTower_F : Default {
+ pelicanPos[] = {
+ { { -1.41553, 1.15063, -1.81942 }, 130 }
+ };
+ shoeboxPos[] = {
+ { { -3.8374, 1.81421, -1.81942 }, 320 }
+ };
+ palletPos[] = {
+ { { 0.737793, -3.30981, -1.80942 }, 250 }
+ };
+ };
+ class Land_i_Stone_Shed_V2_dam_F : Default {
+ tablePos[] = {
+ { { 3.07764, 2.17139, 0.0703425 }, 11 }
+ };
+ shoeboxPos[] = {
+ { { -2.41211, 0.305664, 0.660343 }, 11 }
+ };
+ };
+ class Land_Cargo_HQ_V1_ruins_F : Default {
+ lootType = "mil";
+ filingPos[] = {
+ { { 0.798828, -3.87012, -1.28783 }, 250 }
+ };
+ pelicanPos[] = {
+ { { -4.96582, -4.61182, 1.13217 }, 250 }
+ };
+ lockerPos[] = {
+ { { -5.49561, -3.40796, -1.28783 }, 270 }
+ };
+ };
+ class Land_cmp_Tower_F : Default {
+ palletPos[] = {
+ { { 0.0551758, 1.01294, -7.64906 }, 250 }
+ };
+ };
+ class Land_Crane_F : Default {
+ pelicanPos[] = {
+ { { -7.11475, -1.31665, 5.74081 }, 90 }
+ };
+ shoeboxPos[] = {
+ { { -6.86523, 1.83765, 5.74081 }, 230 }
+ };
+ };
+
+ class Land_WIP_ruins_F : Default {
+ shelfPos[] = {
+ { { 2.08887, -10.4897, -1.32377 }, 180.2 },
+ { { -17.3643, -11.3889, 2.47623 }, 2 }
+ };
+ pelicanPos[] = {
+ { { 16.8608, -8.03442, 0.106226 }, 266 }
+ };
+ shoeboxPos[] = {
+ { { 3.64453, 7.38965, 0.126227 }, 350 }
+ };
+ palletPos[] = {
+ { { 15.3921, 8.71045, 2.38622 }, 350 },
+ { { -21.7849, 11.9456, 2.45622 }, 350 }
+ };
+ };
+ class Land_i_Stone_HouseBig_V2_dam_F : Default {
+ fridgePos[] = {
+ { { -3.23608, -3.12744, -1.70506 }, 220 }
+ };
+ bedPos[] = {
+ { { -2.40332, 0.169434, 1.17494 }, 180 }
+ };
+ wardrobePos[] = {
+ { { 2.80518, -3.146, 1.17494 }, 170 }
+ };
+ shoeboxPos[] = {
+ { { -0.989014, 1.07861, -0.595063 }, 20 }
+ };
+ freezerPos[] = {
+ { { 2.25952, 0.718262, -1.63506 }, 20 }
+ };
+ };
+ class Land_u_House_Big_02_V1_dam_F : Default {
+ shelfPos[] = {
+ { { 3.21387, -1.56421, -2.44914 }, 90 }
+ };
+ fridgePos[] = {
+ { { -3.24658, -3.44507, -2.44914 }, 260 }
+ };
+ couchPos[] = {
+ { { 3.49512, 0.929443, -2.44234 }, 90.0046 }
+ };
+ cookerPos[] = {
+ { { -3.28662, -1.65698, -2.44914 }, 273 }
+ };
+ chairPos[] = {
+ { { 4.87988, 4.62207, -2.43914 }, 66 }
+ };
+ filingPos[] = {
+ { { -3.41895, -0.0644531, 0.940861 }, 260 },
+ { { -3.42285, 0.570068, 0.940861 }, 270 }
+ };
+ pelicanPos[] = {
+ { { 4.70313, 4.34985, 0.870861 }, 55 }
+ };
+ tablePos[] = {
+ { { -3.23535, 2.41211, -2.43914 }, 270 },
+ { { -3.29639, 2.79614, 0.940861 }, 270 }
+ };
+ lockerPos[] = {
+ { { 2.81396, 0.00561523, 0.940861 }, 181 }
+ };
+ toolRackPos[] = {
+ { { -3.71387, 2.81152, 0.940861 }, 270 }
+ };
+ shoeboxPos[] = {
+ { { 5.19873, -0.0888672, 0.940861 }, 160 }
+ };
+ };
+ class Land_Cargo_HQ_V2_ruins_F : Default {
+ shelfPos[] = {
+ { { -5.3606, -5.2832, -1.15784 }, 270 }
+ };
+ pelicanPos[] = {
+ { { 3.18213, -3.80811, -1.30784 }, 160 }
+ };
+ };
+ class Land_i_Stone_HouseSmall_V2_dam_F : Default {
+ couchPos[] = {
+ { { -6.25098, 1.86572, -0.594842 }, 270 }
+ };
+ filingPos[] = {
+ { { 8.93213, -2.67773, -0.594842 }, 176 }
+ };
+ pelicanPos[] = {
+ { { -8.89941, -2.2583, -0.644842 }, 260 }
+ };
+ tablePos[] = {
+ { { -3.21045, -2.5564, -0.594842 }, 180 }
+ };
+ shoeboxPos[] = {
+ { { 1.99609, 2.25684, -0.274842 }, 320 }
+ };
+ };
+ class Land_cmp_Shed_dam_F : Default {
+ palletPos[] = {
+ { { 0.482422, -2.13721, -3.10882 }, 329 },
+ { { -3.94287, 1.30518, -3.10882 }, 260 }
+ };
+ };
+ class Land_Cargo_Tower_V1_ruins_F : Default {
+ pelicanPos[] = {
+ { { 3.30298, 3.41357, -1.80046 }, 329 }
+ };
+ };
+
+ class Land_dp_mainFactory_F : Default {
+ lootBias = 100;
+ shelfPos[] = { { { 12.6934, -1.76367, -4.24943 }, 359.454 }, { { 13.9473, 5.0918, -4.24943 }, 88.7339 }, { { 19.9414, 1.03125, -7.43432 }, 269.954 }, { { 19.9355, -2.62891, -7.43443 }, 271.718 } };
+ pelicanPos[] = { { { -2.5332, 1.13477, 1.24025 }, 333.827 }, { { -11.8926, -2.99023, -4.39045 }, 104.689 }, { { 7.52734, -16.5059, -0.257848 }, 243.576 } };
+ toolRackPos[] = { { { 14.1328, 0.527344, -4.33314 }, 90.5367 } };
+ };
+
+
+
+
+ class Land_i_Windmill01_F : Default { pelicanPos[] = { { { -0.910156, 1.28125, -3.54742 }, 289.979 } }; tablePos[] = { { { 0.111328, -1.23047, -3.50127 }, 181.768 } }; };
+ class Land_d_House_Big_01_V1_F : Default { fridgePos[] = { { { -5.62891, 6.35156, -2.19721 }, 269.825 } }; shelfPos[] = { { { -0.492188, 1.82031, 1.22279 }, 163.832 }, { { 0.046875, 5.28125, -2.19721 }, 359.157 }, { { 2.66797, 8.1875, -2.19721 }, 122.214 } }; pelicanPos[] = { { { 0.826172, 0.384766, 4.54293 }, 312.651 } }; wardrobePos[] = { { { -4.50781, 7.97852, 1.22285 }, 181.679 } }; bedPos[] = { { { 1.57227, 8.62891, 1.22277 }, 96.399 } }; couchPos[] = { { { -5.1582, 3.05859, -2.28722 }, 352.256 }, { { -4.88086, 4.26758, 1.2291 }, 179.049 }, { { -4.02344, 10.252, -2.19723 }, 254.622 } }; cookerPos[] = { { { -1.58008, 6.79102, -2.19759 }, 3.80292 } }; chairPos[] = { { { -0.201172, 0.566406, 1.23667 }, 21.1155 }, { { -5.29688, 8.16406, -2.19722 }, 259.465 }, { { 2.27734, 11.0098, 1.22278 }, 48.7725 }, { { -5.27539, 10.9121, 1.22279 }, 288.988 } }; tablePos[] = { { { -0.554688, 11.1719, -2.19723 }, 0.0478998 }, { { -1.80469, 11.25, 1.22271 }, 358.754 } }; };
+ class Land_Sara_hasic_zbroj : Default {
+ lootBiasPos = 20;
+ fridgePos[] = { { { 2.29688, -2.56055, -2.67931 }, 181.134 } };
+ shelfPos[] = { { { -3.21436, 2.60376, -2.67923 }, 3.40094 } };
+ couchPos[] = { { { 0.914063, 1.76172, -2.67932 }, 266.479 } };
+ chairPos[] = { { { 6.72656, 1.56543, -2.67931 }, 88.7719 } };
+ filingPos[] = { { { 7.02832, 2.61157, -2.67928 }, 59.8147 } };
+ tablePos[] = { { { 6.98535, -0.0251465, -2.67932 }, 92.6988 } };
+ toolRackPos[] = { { { 7.46631, -1.93945, -2.67892 }, 89.8589 } };
+ shoeboxPos[] = { { { -3.5083, -2.67578, -2.67946 }, 263.378 } };
+ palletPos[] = { { { 3.6665, -0.135742, -2.67929 }, 42.8049 } };
+ freezerPos[] = { { { 1.00684, -2.44629, -2.67932 }, 171.556 } };
+ };
+ class Land_Sara_domek_zluty : Default {
+ lootBiasPos = 20;
+ fridgePos[] = { { { 2.29858, 3.92969, -2.46014 }, 0.136902 } };
+ shelfPos[] = { { { 7.44385, 1.58789, -2.45992 }, 97.2181 } };
+ wardrobePos[] = { { { -2.31445, -3.1958, -2.4576 }, 90.1546 } };
+ bedPos[] = { { { -5.8606, -2.66113, -2.46011 }, 272.354 } };
+ couchPos[] = { { { -6.51392, 1.26953, -2.45143 }, 180.056 } };
+ cookerPos[] = { { { 4.7998, 3.88477, -2.46054 }, 0.147873 } };
+ chairPos[] = { { { 6.95801, -0.59668, -2.45824 }, 129.461 } };
+ filingPos[] = { { { -1.29907, 4.00537, -2.45987 }, 359.897 } };
+ tablePos[] = { { { -2.49561, 3.39307, -2.45992 }, 90.2344 } };
+ toolRackPos[] = { { { 0.131104, 4.27246, -2.45967 }, 2.38939 } };
+ shoeboxPos[] = { { { 4.66724, -0.834961, -2.46021 }, 90.2617 } };
+ freezerPos[] = { { { 2.16602, 1.70801, -2.44791 }, 269.45 } };
+ };
+ class Land_Misc_PowerStation : Default {
+ lootBiasPos = 20;
+ shelfPos[] = { { { 3.3877, -0.776367, -1.29452 }, 268.884 } };
+ lockerPos[] = { { { 3.64697, -4.25073, -1.29468 }, 270.752 } };
+ toolRackPos[] = { { { 3.20557, 5.78613, -1.33632 }, 269.596 } };
+ shoeboxPos[] = { { { -5.59229, 1.92871, -0.186357 }, 90.4582 } };
+ };
+ class Land_A_CraneCon : Default {
+ pelicanPos[] = { { { -7.55273, 1.50537, 5.76163 }, 28.6669 } };
+ };
+ class Land_A_BuildingWIP : Default {
+ lootBiasPos = 20;
+ fridgePos[] = { { { 2.03711, 11.1831, -6.49124 }, 305.356 }, { { -3.37573, 12.2183, 1.48757 }, 305.492 }, { { -24.4121, 7.55957, -2.55824 }, 228.742 } };
+ shelfPos[] = { { { -5.80249, -5.0332, -2.55812 }, 356.037 }, { { 12.1133, -4.3042, -6.54318 }, 179.13 }, { { -21.0371, 1.47168, -6.46016 }, 178.598 } };
+ pelicanPos[] = { { { -7.40625, -9.28955, -6.50476 }, 210.36 }, { { -20.8247, -11.5005, 5.44375 }, 191.623 }, { { -24.6577, 11.9438, 1.45556 }, 293.971 } };
+ bedPos[] = { { { -13.3503, 2.34912, 1.47256 }, 91.8744 } };
+ couchPos[] = { { { -4.99951, -3.28564, -6.43938 }, 90.7108 }, { { 0.594727, 9.11768, 5.4154 }, 148.196 }, { { 7.01099, 10.9351, -6.42719 }, 225.517 } };
+ cookerPos[] = { { { 3.14282, -10.0327, 1.45506 }, 208.035 }, { { -3.64502, 12.6104, -2.55869 }, 359.938 } };
+ chairPos[] = { { { 2.41162, 6.28955, 5.44231 }, 221.29 }, { { 3.62207, -9.91504, -2.56085 }, 177.773 }, { { -0.971924, 11.6572, 5.4412 }, 260.795 } };
+ filingPos[] = { { { -10.2527, -10.1606, -6.51096 }, 127.045 }, { { -16.0825, -6.36279, -6.53292 }, 282.391 }, { { -19.718, -6.7124, -6.54208 }, 87.3864 } };
+ tablePos[] = { { { 1.70239, -3.92871, -6.48336 }, 180.567 }, { { 3.09351, 9.49219, 5.38227 }, 48.7191 }, { { 22.1931, 1.64893, -6.55645 }, 90.8045 } };
+ lockerPos[] = { { { 13.3423, -1.85791, -6.54581 }, 268.445 }, { { 18.0183, -1.11426, -6.55955 }, 89.6342 }, { { -20.8777, 0.597656, -6.46828 }, 359.864 } };
+ toolRackPos[] = { { { -9.04224, 6.72314, -6.52912 }, 357.538 }, { { -15.5667, -10.561, -2.5611 }, 180.234 }, { { -15.666, -14.3716, 1.45426 }, 179.938 } };
+ shoeboxPos[] = { { { 3.03394, 7.42188, -2.55826 }, 176.357 }, { { -7.98242, -10.2471, -2.56173 }, 129.945 }, { { -16.2637, -5.07031, -6.53438 }, 305.636 } };
+ palletPos[] = { { { 5.09961, 0.015625, -6.47375 }, 270.66 }, { { -10.7837, -0.00585938, 5.26227 }, 0.0174896 }, { { -14.4409, 11.9912, -6.45401 }, 359.986 }, { { -24.2383, -9.16699, -2.55823 }, 359.993 } };
+ freezerPos[] = { { { -15.1563, -5.16211, -2.55844 }, 359.99 }, { { -24.2168, 12.3633, -6.50327 }, 0.00699433 } };
+ };
+ class Land_A_MunicipalOffice : Default {
+ lootBiasPos = 20;
+ pelicanPos[] = { { { 3.55029, -5.18726, -0.195372 }, 283.895 } };
+ chairPos[] = { { { 4.35693, -5.59839, -18.4382 }, 65.3313 }, { { -4.6333, -5.60132, -18.4559 }, 295.001 } };
+ tablePos[] = { { { -3.02002, -7.53784, -18.4554 }, 177.998 } };
+ shoeboxPos[] = { { { 4.2832, -8.80542, -18.4554 }, 136.305 }, { { 6.69727, -9.01831, -3.18546 }, 279.196 } };
+ };
+ class Land_Ind_Pec_01 : Default {
+ lootBiasPos = 20;
+ fridgePos[] = { { { -2.46875, -0.492676, -3.98998 }, 359.611 } };
+ shelfPos[] = { { { 2.24902, -2.04834, -17.6013 }, 177.989 }, { { -7.08789, -0.345215, -3.98975 }, 359.84 }, { { 5.65918, -7.55225, -17.6013 }, 271.929 }, { { -7.43311, -7.98193, 6.06143 }, 181.606 }, { { -4.87256, -11.603, -17.6013 }, 87.6155 } };
+ pelicanPos[] = { { { -4.57373, -7.05566, 15.777 }, 275.886 } };
+ couchPos[] = { { { -0.665527, -7.01172, -22.6032 }, 319.689 }, { { 5.09033, -8.23584, 1.00238 }, 267.37 } };
+ chairPos[] = { { { -0.938965, -1.05859, 6.05994 }, 148.592 } };
+ filingPos[] = { { { -1.88159, -15.1143, 6.06143 }, 274.02 } };
+ lockerPos[] = { { { -1.07202, -15.2251, -17.6016 }, 178.66 }, { { 2.56372, -15.189, -4.00633 }, 179.789 } };
+ toolRackPos[] = { { { -4.23755, -9.12012, -22.6029 }, 181.414 }, { { 0.57666, -15.625, 1.00255 }, 179.995 } };
+ shoeboxPos[] = { { { -4.63867, -7.03174, 10.4987 }, 320.834 }, { { 0.787842, -9.5957, -14.8937 }, 85.2537 } };
+ };
+ class Land_Ind_SiloVelke_01 : Default {
+ lootBiasPos = 20;
+ shelfPos[] = { { { 0.950195, -2.19312, -5.47868 }, 269.46 }, { { 1.01416, 5.71167, 11.865 }, 268.444 }, { { -11.5195, 2.36597, 11.865 }, 357.551 } };
+ pelicanPos[] = { { { 1.54297, -3.29761, 24.2848 }, 69.2792 } };
+ filingPos[] = { { { 0.224121, -0.709229, 11.8648 }, 98.1473 } };
+ lockerPos[] = { { { -5.82715, 3.93359, 11.8648 }, 359.3 } };
+ toolRackPos[] = { { { 0.811523, 5.54248, -5.47879 }, 272.599 } };
+ shoeboxPos[] = { { { -5.8335, 9.96069, 21.9903 }, 115.472 } };
+ };
+ class Land_Ind_Expedice_1 : Default {
+ lootBiasPos = 20;
+ shelfPos[] = { { { 1.92285, -0.303223, -5.71009 }, 178.232 }, { { 0.276855, 12.5483, -3.51293 }, 203.944 } };
+ pelicanPos[] = { { { -0.432617, 10.3877, 9.68375 }, 299.993 }, { { 5.82813, -18.415, -5.78366 }, 292.046 } };
+ chairPos[] = { { { 9.70801, -12.1228, -5.78367 }, 325.934 } };
+ filingPos[] = { { { 5.53857, -16.9548, -5.78365 }, 270.844 } };
+ tablePos[] = { { { 13.5181, -12.0178, -5.78368 }, 4.86572 } };
+ lockerPos[] = { { { 3.24707, -0.168457, -12.9662 }, 180.509 } };
+ toolRackPos[] = { { { -2.06592, -0.598389, -12.9654 }, 180.956 } };
+ shoeboxPos[] = { { { -8.35303, -7.32837, -3.51317 }, 29.0581 } };
+ palletPos[] = { { { 2.58789, -6.03125, -3.51315 }, 1.43912e-005 }, { { 0.29248, -18.708, -3.51315 }, 1.43571e-005 } };
+ };
+ class Land_Repair_center : Default {
+ lootBiasPos = 20;
+ shelfPos[] = { { { -2.13965, 2.55408, -1.55488 }, 88.8949 } };
+ };
+ class Land_Church_01 : Default {
+ lootBiasPos = 20;
+ chairPos[] = { { { -6.88208, 0.851563, -4.24353 }, 6.01111 } };
+ };
+ class Land_NAV_Lighthouse2 : Default {
+ lootBiasPos = 20;
+ shoeboxPos[] = { { { -0.019043, 1.00098, 2.39268 }, 0.452068 } };
+ };
+ class Land_A_Castle_Gate : Default {
+ fridgePos[] = { { { 7.84082, 4.31982, -2.93036 }, 21.3658 } };
+ bedPos[] = { { { 7.11719, 0.841797, -2.94727 }, 93.608 } };
+ cookerPos[] = { { { 4.0166, 4.29834, -2.97534 }, 0.0874265 } };
+ chairPos[] = { { { 4.8916, -3.36182, -2.96021 }, 149.004 } };
+ filingPos[] = { { { 3.54395, -3.67285, -2.97525 }, 177.859 } };
+ tablePos[] = { { { 5.6875, 4.36865, -2.9592 }, 0 } };
+ toolRackPos[] = { { { 3.1123, 0.0239258, -2.97498 }, 273.35 } };
+ };
+ class Land_A_Castle_Donjon : Default {
+ pelicanPos[] = { { { 2.69727, -2.01953, 12.4763 }, 148.853 } };
+ tablePos[] = { { { -1.54395, 5.67383, 12.4445 }, 0.407131 } };
+ };
+ class Land_A_Castle_Stairs_A : Default {
+ shelfPos[] = { { { 6.63232, 2.28223, 0.998962 }, 356.642 } };
+ };
+ class Land_Ind_Quarry : Default {
+ fridgePos[] = { { { -3.92188, -16.6865, -7.50379 }, 222.564 } };
+ shelfPos[] = { { { -5.69775, -2.96875, -7.5061 }, 89.9894 }, { { -0.436035, -9.52051, -7.50609 }, 358.647 }, { { -4.89355, -8.41016, 5.26832 }, 178.014 } };
+ pelicanPos[] = { { { -5.05762, -3.05859, 5.26825 }, 270.152 } };
+ bedPos[] = { { { 1.77393, -13.1133, -7.49595 }, 252.259 } };
+ couchPos[] = { { { 1.89893, -10.4531, -7.45486 }, 270.008 } };
+ cookerPos[] = { { { -1.72217, -16.9697, -7.50663 }, 173.088 } };
+ chairPos[] = { { { -6.30176, -7.69727, -7.50632 }, 152.678 } };
+ filingPos[] = { { { -3.79004, -8.23633, 5.26811 }, 173.701 } };
+ tablePos[] = { { { -3.25244, -9.7373, -7.48993 }, 0.00806808 } };
+ lockerPos[] = { { { -6.44287, 11.9883, -7.50632 }, 358.505 } };
+ toolRackPos[] = { { { -5.43994, -4.68066, -7.50566 }, 88.4867 } };
+ shoeboxPos[] = { { { -3.70996, 15.8828, 5.26807 }, 106.559 } };
+ };
+ class Land_Barrack2 : Default {
+ shelfPos[] = { { { -1.14063, 5.67578, -0.714874 }, 359.937 } };
+ pelicanPos[] = { { { 0.917969, 1.40234, 0.507111 }, 62.1253 } };
+ chairPos[] = { { { 1.83398, -2.77344, -0.720093 }, 121.012 } };
+ filingPos[] = { { { -0.944336, -3.10254, -0.720245 }, 197.347 } };
+ shoeboxPos[] = { { { 0.393555, 5.52734, -0.71524 }, 0.0174853 } };
+ freezerPos[] = { { { -2.02344, -3.13086, -0.720337 }, 181.294 } };
+ };
+ class Land_Ind_Mlyn_01 : Default {
+ shelfPos[] = { { { -1.02686, 8.37012, -7.73514 }, 84.5525 } };
+ pelicanPos[] = { { { -6.94873, 2.21094, 9.19446 }, 187.886 } };
+ couchPos[] = { { { -7.31543, 7.59277, -20.8141 }, 0 } };
+ lockerPos[] = { { { -8.98828, 1.93848, -2.84921 }, 179.976 } };
+ toolRackPos[] = { { { -9.06104, 1.60645, -8.90338 }, 180.213 } };
+ shoeboxPos[] = { { { -1.24268, 7.89355, 0.201904 }, 123.572 } };
+ palletPos[] = { { { -9.00732, 8.61621, -20.8141 }, 23.6484 } };
+ };
+ class Land_wagon_box : Default {
+ palletPos[] = { { { 0.342285, -0.0380859, -0.80304 }, 0 }, { { 0.271973, 2.38574, -0.80304 }, 354.097 }, { { 0.399414, -2.41504, -0.803101 }, 0 } };
+ };
+ class CampEast_EP1 : Default {
+ shelfPos[] = { { { -1.97852, 2.84473, -1.35312 }, 308.338 }, { { -1.98438, -3.44043, -1.35312 }, 205.956 } };
+ pelicanPos[] = { { { -2.32422, 0.889648, -1.35324 }, 274.054 } };
+ bedPos[] = { { { 1.50342, 1.74512, -1.35336 }, 6.52914 }, { { 1.42969, -2.29004, -1.35336 }, 0.577024 } };
+ shoeboxPos[] = { { { 2.55762, -0.0185547, -1.35336 }, 78.3071 } };
+ };
+ class Land_Barrack2_EP1 : Default {
+ fridgePos[] = { { { 1.29102, -3.15332, -0.720306 }, 178.283 } };
+ shelfPos[] = { { { -0.526855, 5.5127, -0.714996 }, 357.779 } };
+ pelicanPos[] = { { { 1.26465, 3.2002, -0.319916 }, 355.705 } };
+ chairPos[] = { { { -2.10107, -2.88477, -0.720154 }, 187.124 } };
+ filingPos[] = { { { -1.48193, 5.50488, -0.715179 }, 359.955 } };
+ tablePos[] = { { { -2.27539, 3.22363, -0.716583 }, 274.247 } };
+ shoeboxPos[] = { { { 2.25586, 0.362305, -0.0941467 }, 29.4483 } };
+ };
+ class Land_Hlidac_Budka_EP1 : Default {
+ shelfPos[] = { { { 1.20264, 0.0732422, -0.809814 }, 179.636 } };
+ filingPos[] = { { { 2.69629, 2.27246, -0.809937 }, 21.4708 } };
+ tablePos[] = { { { -2.5376, 1.29883, -0.810028 }, 271.096 } };
+ toolRackPos[] = { { { 2.77783, 0.842773, -0.799316 }, 82.7987 } };
+ shoeboxPos[] = { { { 1.61768, 2.3584, -0.810059 }, 356.431 } };
+ };
+ class Land_HouseV_2L : Default {
+ shelfPos[] = { { { 4.29199, 2.60913, -3.95322 }, 7.9453 } };
+ filingPos[] = { { { 4.08594, 1.27734, -3.9534 }, 243.743 } };
+ shoeboxPos[] = { { { -3.90137, -3.46313, -4.01404 }, 65.2182 } };
+ freezerPos[] = { { { -5.02051, -0.899658, -4.10532 }, 87.6906 } };
+ };
+ class Land_Shed_M02 : Default {
+ shoeboxPos[] = { { { 1.05371, 0.0397949, -1.03354 }, 83.8544 } };
+ palletPos[] = { { { -0.0595703, -2.57153, -1.53342 }, 122.62 } };
+ };
+ class ferrisWheel_EPOCH : Default {
+ lootBiasPos = 50;
+ palletPos[] = { { { 2, 2, -10 }, 322.16 }, { { -2, -2, -10 }, 232.16 } };
+ shoeboxPos[] = { { { -3.33862, -0.988281, -10 }, 312.382 } };
+ pelicanPos[] = { { { -0.840332, 1.09473, -10 }, 269.861 } };
+ };
+ class Carnival_Tent : Default {
+ lootBiasPos = 50;
+ shelfPos[] = { { { -1, -1, -10 }, 178.014 } };
+ chairPos[] = { { { 1, 1, -10 }, 152.678 } };
+ filingPos[] = { { { -1, 0, -10 }, 173.701 } };
+ tablePos[] = { { { 0, 0, -10 }, 120.893 } };
+ shoeboxPos[] = { { { 0, 1, -10 }, 106.559 } };
+ palletPos[] = { { { 1, 0, -10 }, 322.16 } };
+ };
+};
+#include "\x\addons\a3_epoch_code\gui\Epoch_GUI_Config.hpp"
diff --git a/Sources/epoch_code/gui/Epoch_GUI_Config.hpp b/Sources/epoch_code/gui/Epoch_GUI_Config.hpp
new file mode 100644
index 00000000..51f56e42
--- /dev/null
+++ b/Sources/epoch_code/gui/Epoch_GUI_Config.hpp
@@ -0,0 +1,10955 @@
+#include "\a3\functions_f\GUI\editor\GUI_styles.hpp"
+class RscListbox;
+class RscListNBox;
+class RscButtonMenuOK;
+class RscButtonMenuCancel;
+class RscText;
+class RscPicture;
+class RscActiveText;
+class RscCombo;
+class RscProgress;
+class RscButton;
+class RscButtonMenu;
+class RscObject;
+class RscStandardDisplay;
+class RscStructuredText;
+class RscControlsGroupNoScrollbars;
+class RscHTML;
+class RscEdit;
+class RscTitle;
+class RscVignette;
+class RscFrame;
+class RscControlsGroupNoHScrollbars;
+class RscControlsGroup;
+class RscIGProgress;
+class RscHitZones;
+class RscIGUIValue;
+class RscIGUIText;
+class RscPictureKeepAspect;
+class RscUnitInfo;
+class VScrollbar;
+class HScrollbar;
+class RscOpticsValue;
+class RscOpticsText;
+class RscLadderPicture;
+class Attributes;
+class RscDisplayGetReady;
+class IGUIBack;
+class CA_Title;
+class ScrollBar;
+
+class RscCustomProgress : RscProgress
+{
+ texture = "";
+ textureExt = "";
+ colorBar[] = { 0.9, 0.9, 0.9, 0.9 };
+ colorExtBar[] = { 1, 1, 1, 1 };
+ colorFrame[] = { 1, 1, 1, 1 };
+ idc = 23868;
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "16 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "26 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorBackground[] = { 1, 1, 1, 0.75 };
+};
+
+class SKN_RscEdit
+{
+ access = 0;
+ type = 2;
+ x = 0;
+ y = 0;
+ h = 0.04;
+ w = 0.2;
+ colorBackground[] = { 0, 0, 0, 1 };
+ colorText[] = { 0.95, 0.95, 0.95, 1 };
+ colorDisabled[] = { 1, 1, 1, 0.25 };
+ colorSelection[] = { "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", 1 };
+ autocomplete = "";
+ text = "";
+ size = 0.2;
+ style = "0x00 + 0x40";
+ font = "PuristaMedium";
+ shadow = 2;
+ sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ canModify = 1;
+ tooltipColorText[] = { 1, 1, 1, 1 };
+ tooltipColorBox[] = { 1, 1, 1, 1 };
+ tooltipColorShade[] = { 0, 0, 0, 0.65 };
+};
+
+class RscTitles
+{
+ class EpochGameUI
+ {
+ idd = -2;
+ duration = 999999;
+ onLoad = "uiNamespace setVariable ['EPOCH_EpochGameUI', _this select 0];";
+ class controls
+ {
+
+ class custom_picture: RscPicture
+ {
+ style = 48 + 0x800;
+ };
+ class icon1: custom_picture
+ {
+ idc = 21201;
+ text = "\x\addons\a3_epoch_code\Data\UI\thirst_ca.paa";
+ x = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_WEAPON_X"", ((safezoneX + safezoneW) - (12.4 * ( ((safezoneW / safezoneH) min 1.2) / 40)) - 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_WEAPON_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "2.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+
+ };
+ class icon2: custom_picture
+ {
+ idc = 21202;
+ text = "\x\addons\a3_epoch_code\Data\UI\hunger_ca.paa";
+ x = "7.5 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_WEAPON_X"", ((safezoneX + safezoneW) - (12.4 * ( ((safezoneW / safezoneH) min 1.2) / 40)) - 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_WEAPON_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "2.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+
+ };
+ class icon3: custom_picture
+ {
+ idc = 21203;
+ text = "\x\addons\a3_epoch_code\Data\UI\broken_ca.paa";
+ x = "5 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_WEAPON_X"", ((safezoneX + safezoneW) - (12.4 * ( ((safezoneW / safezoneH) min 1.2) / 40)) - 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_WEAPON_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "2.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+
+ };
+ class icon4: custom_picture
+ {
+ idc = 21204;
+ text = "\x\addons\a3_epoch_code\Data\UI\oxygen_ca.paa";
+ x = "2.5 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_WEAPON_X"", ((safezoneX + safezoneW) - (12.4 * ( ((safezoneW / safezoneH) min 1.2) / 40)) - 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_WEAPON_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "2.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+
+ };
+ class icon5: custom_picture
+ {
+ idc = 21205;
+ text = "\x\addons\a3_epoch_code\Data\UI\hazzard_ca.paa";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_WEAPON_X"", ((safezoneX + safezoneW) - (12.4 * ( ((safezoneW / safezoneH) min 1.2) / 40)) - 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_WEAPON_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "2.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+
+ };
+ class icon6: custom_picture
+ {
+ idc = 21206;
+ text = "\x\addons\a3_epoch_code\Data\UI\bleeding_ca.paa";
+ x = "-2.5 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_WEAPON_X"", ((safezoneX + safezoneW) - (12.4 * ( ((safezoneW / safezoneH) min 1.2) / 40)) - 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_WEAPON_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "2.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+
+ };
+ };
+ };
+
+ class EpochGameUI2
+ {
+ idd = -3;
+ duration = 10;
+ onLoad = "uiNamespace setVariable ['EPOCH_EpochGameUI2', _this select 0];";
+ class controls
+ {
+
+ class custom_picture : RscPicture
+ {
+ style = 48 + 0x800;
+ };
+ class icon1 : custom_picture
+ {
+ idc = 21207;
+ text = "\x\addons\a3_epoch_code\Data\UI\cc_ca.paa";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_X"", (safezoneX + 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "-2.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2)) + 18 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20))";
+ w = "2.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+
+ };
+ class RscCryptoText : RscText
+ {
+ idc = 21208;
+ text = "";
+ colorText[] = { 1, 1, 1, 0.5 };
+ shadow = 0;
+ sizeEx = 0.08;
+ x = "2.1 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_X"", (safezoneX + 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "-2.2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2)) + 18 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20))";
+ w = "15 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+
+ };
+
+ };
+ };
+
+ class EpochGameUI3
+ {
+ idd = -4;
+ duration = 10;
+ onLoad = "uiNamespace setVariable ['EPOCH_EpochGameUI3', _this select 0];";
+ class controls
+ {
+
+ class custom_picture : RscPicture
+ {
+ style = 48 + 0x800;
+ };
+ class icon1 : custom_picture
+ {
+ idc = 21209;
+ text = "\x\addons\a3_epoch_code\Data\UI\battery_ca.paa";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_X"", (safezoneX + 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2)) + 18 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20))";
+ w = "2.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+
+ };
+ class RscEnergyText : RscText
+ {
+ idc = 21210;
+ text = "";
+ colorText[] = { 1, 1, 1, 0.5 };
+ shadow = 0;
+ sizeEx = 0.08;
+ x = "2.1 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_X"", (safezoneX + 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "-0.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2)) + 18 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20))";
+ w = "15 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+
+ };
+ };
+ };
+
+};
+
+/*
+class TradeRequest
+{
+ idd = -1;
+ duration = -1;
+ class controls
+ {
+ class RscPicture_1201: RscPicture
+ {
+ idc = 1201;
+ text = "#(argb,8,8,3)color(0,0,0,0.5)";
+ x = 0.425497 * safezoneW + safezoneX;
+ y = 0.720018 * safezoneH + safezoneY;
+ w = 0.149006 * safezoneW;
+ h = 0.0550046 * safezoneH;
+ };
+ class RscButtonMenu_2403: RscButtonMenu
+ {
+ idc = 2403;
+ text = "Accept Trade Request";
+ x = 0.431228 * safezoneW + safezoneX;
+ y = 0.731019 * safezoneH + safezoneY;
+ w = 0.137544 * safezoneW;
+ h = 0.0330028 * safezoneH;
+ action = "call EPOCH_startTrade";
+ };
+ };
+};
+*/
+
+class QuickUpgrade
+{
+ idd = -15;
+ duration = -1;
+ onload = "setMousePosition [0.5, 0.5];";
+ class controls
+ {
+ class quick_take_bg : IGUIBack
+ {
+ idc = 2201;
+ x = 0.411875 * safezoneW + safezoneX;
+ y = 0.264874 * safezoneH + safezoneY;
+ w = 0.17625 * safezoneW;
+ h = 0.470252 * safezoneH;
+ };
+ class RscListbox_1500: RscListbox
+ {
+ idc = 1500;
+ style = LB_MULTI;
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx2 = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ rowHeight = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ canDrag = 1;
+ colorText[] = { 1, 1, 1, 1 };
+ colorBackground[] = { 0, 0, 0, 0 };
+ itemBackground[] = { 1, 1, 1, 0.1 };
+ itemSpacing = 0.001;
+ x = 0.431458 * safezoneW + safezoneX;
+ y = 0.330709 * safezoneH + safezoneY;
+ w = 0.127292 * safezoneW;
+ h = 0.291556 * safezoneH;
+ };
+ class RscButtonMenuCancel_2700: RscButtonMenuCancel
+ {
+ x = 0.504896 * safezoneW + safezoneX;
+ y = 0.622266 * safezoneH + safezoneY;
+ w = 0.0538542 * safezoneW;
+ h = 0.0282151 * safezoneH;
+ };
+ class RscButtonMenu_2400: RscButtonMenu
+ {
+ idc = 2400;
+ text = "Upgrade"; //--- ToDo: Localize;
+ x = 0.431458 * safezoneW + safezoneX;
+ y = 0.622266 * safezoneH + safezoneY;
+ w = 0.05875 * safezoneW;
+ h = 0.0282151 * safezoneH;
+ action = "cursorTarget call EPOCH_upgradeBUILDv2";
+ };
+
+ };
+};
+
+class QuickTake
+{
+ idd = -5;
+ duration = -1;
+ onload = "setMousePosition [0.5, 0.5];";
+ class controls
+ {
+ class quick_take_bg : IGUIBack
+ {
+ idc = 2201;
+ x = 0.411875 * safezoneW + safezoneX;
+ y = 0.264874 * safezoneH + safezoneY;
+ w = 0.17625 * safezoneW;
+ h = 0.470252 * safezoneH;
+ };
+
+ class GroundContainer : RscListBox
+ {
+ idc = 1500;
+ style = LB_MULTI;
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx2 = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ rowHeight = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ canDrag = 1;
+ colorText[] = { 1, 1, 1, 1 };
+ colorBackground[] = { 0, 0, 0, 0 };
+ itemBackground[] = { 1, 1, 1, 0.1 };
+ itemSpacing = 0.001;
+ x = 0.416771 * safezoneW + safezoneX;
+ y = 0.274279 * safezoneH + safezoneY;
+ w = 0.166458 * safezoneW;
+ h = 0.413822 * safezoneH;
+ };
+ /*
+ class Take_Btn : RscButtonMenu
+ {
+ idc = 2400;
+ text = "Take";
+ x = 0.416771 * safezoneW + safezoneX;
+ y = 0.697506 * safezoneH + safezoneY;
+ w = 0.0489583 * safezoneW;
+ h = 0.0282151 * safezoneH;
+ action = "call EPOCH_QuickTake";
+ };
+ */
+ class RscButtonMenu_2401 : RscButtonMenu
+ {
+ idc = 2401;
+ text = "Take All";
+ x = 0.534271 * safezoneW + safezoneX;
+ y = 0.697506 * safezoneH + safezoneY;
+ w = 0.0489583 * safezoneW;
+ h = 0.0282151 * safezoneH;
+ action = "call EPOCH_QuickTakeAll";
+ };
+ };
+};
+
+
+class TapOut
+{
+ idd = -6;
+ duration = -1;
+ onload = "setMousePosition [0.5, 0.5];";
+ class controls
+ {
+ class RscText_1000: RscText
+ {
+ idc = 1000;
+ text = "Vital signs critical";
+ x = 0.392292 * safezoneW + safezoneX;
+ y = 0.46238 * safezoneH + safezoneY;
+ w = 0.381875 * safezoneW;
+ h = 0.0564303 * safezoneH;
+ colorBackground[] = {0,0,0,0};
+ colorText[] = {1,1,1,0.7};
+ shadow = 0;
+ sizeEx = 0.08;
+ };
+ class RscPicture_1200: RscPicture
+ {
+ idc = 1200;
+ style = 48 + 0x800;
+ text = "\x\addons\a3_epoch_code\Data\UI\heart_ca.paa";
+ x = 0.568542 * safezoneW + safezoneX;
+ y = 0.434165 * safezoneH + safezoneY;
+ w = 0.078125 * safezoneW;
+ h = 0.131671 * safezoneH;
+ };
+
+ class tapout : RscButton
+ {
+ idc = 1600;
+ text = "Respawn";
+ x = 0.436354 * safezoneW + safezoneX;
+ y = 0.631671 * safezoneH + safezoneY;
+ w = 0.127292 * safezoneW;
+ h = 0.0376202 * safezoneH;
+ action = "(findDisplay 46) closeDisplay 0;";
+ onKeyDown = "if (_this select 1 == 0x01) then {(findDisplay 46) closeDisplay 0;};";
+ };
+ };
+};
+
+
+
+class SelectGender
+{
+ idd = -7;
+ duration = -1;
+ onload = "setMousePosition [0.5, 0.5];";
+ class controls
+ {
+ class RscText_PickYourGender : RscText
+ {
+ idc = 1000;
+ text = "Select your gender:";
+ x = 0.2875;
+ y = 0;
+ w = 0.5125;
+ h = 0.12;
+ colorBackground[] = { 0, 0, 0, 0 };
+ colorText[] = { 1, 1, 1, 0.7 };
+ shadow = 0;
+ sizeEx = 0.08;
+ };
+ class RscButtonMenu_Male : RscButtonMenu
+ {
+ idc = 2401;
+ text = "Male";
+ x = 0.3875;
+ y = 0.52;
+ w = 0.1125;
+ h = 0.08;
+ action = "closeDialog 0; EPOCH_PlayerIsMale = true;";
+ };
+ class RscButtonMenu_Female : RscButtonMenu
+ {
+ idc = 2403;
+ text = "Female";
+ x = 0.5125;
+ y = 0.52;
+ w = 0.1125;
+ h = 0.08;
+ action = "closeDialog 0; EPOCH_PlayerIsMale = false;";
+ };
+ };
+};
+
+class TradeNPCMenu
+{
+ idd = -8;
+ duration = -1;
+ onload = "setMousePosition [0.5, 0.5];";
+ class controls
+ {
+ class RscPicture_1203 : RscPicture
+ {
+ idc = 1203;
+ text = "\x\addons\a3_epoch_code\data\UI\UIBG_ca.paa";
+ x = 0.460833 * safezoneW + safezoneX;
+ y = 0.142608 * safezoneH + safezoneY;
+ w = 0.279063 * safezoneW;
+ h = 0.526683 * safezoneH;
+ };
+ class RscPicture_1201 : RscPicture
+ {
+ idc = 1201;
+ text = "\x\addons\a3_epoch_code\data\UI\UIBG_ca.paa";
+ x = 0.460833 * safezoneW + safezoneX;
+ y = 0.51881 * safezoneH + safezoneY;
+ w = 0.279063 * safezoneW;
+ h = 0.291556 * safezoneH;
+ };
+ class RscPicture_1202 : RscPicture
+ {
+ idc = 1202;
+ text = "\x\addons\a3_epoch_code\data\UI\UIBG_ca.paa";
+ x = 0.260104 * safezoneW + safezoneX;
+ y = 0.142608 * safezoneH + safezoneY;
+ w = 0.279063 * safezoneW;
+ h = 0.526683 * safezoneH;
+ };
+ class RscPicture_1200 : RscPicture
+ {
+ idc = 1200;
+ text = "\x\addons\a3_epoch_code\data\UI\UIBG_ca.paa";
+ x = 0.260104 * safezoneW + safezoneX;
+ y = 0.51881 * safezoneH + safezoneY;
+ w = 0.279063 * safezoneW;
+ h = 0.291556 * safezoneH;
+ };
+
+ class RscCombo_2100: RscCombo
+ {
+ idc = 42100;
+ x = 0.377604 * safezoneW + safezoneX;
+ y = 0.227254 * safezoneH + safezoneY;
+ w = 0.1175 * safezoneW;
+ h = 0.0188101 * safezoneH;
+ onLBSelChanged = "_this call EPOCH_NPCTraderMenuFilter";
+ };
+ class RscCombo_2101: RscCombo
+ {
+ idc = 42101;
+ x = 0.578333 * safezoneW + safezoneX;
+ y = 0.227254 * safezoneH + safezoneY;
+ w = 0.0979167 * safezoneW;
+ h = 0.0188101 * safezoneH;
+ onLBSelChanged = "_this call EPOCH_NPCTraderMenuFilter";
+ };
+ class RscListbox_playerInventory: RscListbox
+ {
+ idc = 41500;
+ x = 0.304167 * safezoneW + safezoneX;
+ y = 0.264874 * safezoneH + safezoneY;
+ w = 0.190937 * safezoneW;
+ h = 0.282151 * safezoneH;
+ onLBDblClick = "[41501,_this] call EPOCH_npcTraderAdd";
+ onLBDrop = "[41501,_this] call EPOCH_npcTraderAdd";
+ };
+ class RscListbox_playerOffer: RscListbox
+ {
+ idc = 41501;
+ x = 0.304167 * safezoneW + safezoneX;
+ y = 0.584645 * safezoneH + safezoneY;
+ w = 0.190937 * safezoneW;
+ h = 0.150481 * safezoneH;
+ onLBDblClick = "[41500,_this] call EPOCH_npcTraderAdd";
+ onLBDrop = "[41500,_this] call EPOCH_npcTraderAdd";
+ };
+ class RscListbox_npcOffer: RscListbox
+ {
+ idc = 41502;
+ x = 0.504896 * safezoneW + safezoneX;
+ y = 0.584645 * safezoneH + safezoneY;
+ w = 0.190937 * safezoneW;
+ h = 0.150481 * safezoneH;
+ onLBDblClick = "[41503,_this] call EPOCH_npcTraderAdd3";
+ onLBDrop = "[41503,_this] call EPOCH_npcTraderAdd3";
+ };
+ class RscListbox_npcInventory : RscListNBox
+ {
+ idc = 41503;
+ columns[] = { 0.1, 0, 0.2 };
+
+ colorPicture[] = { 1, 1, 1, 1 };
+ colorPictureSelected[] = { 1, 1, 1, 1 };
+ colorPictureDisabled[] = { 1, 1, 1, 1 };
+
+ // canDrag = 1;
+ //colorText[] = { 1, 1, 1, 1 };
+ //colorBackground[] = { 0, 0, 0, 0.7 };
+ //itemBackground[] = { 1, 1, 1, 0.1 };
+
+ /*
+ x = "1.5 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "3.7 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "11 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "18.4 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ */
+ x = 0.504896 * safezoneW + safezoneX;
+ y = 0.255469 * safezoneH + safezoneY;
+ w = 0.190937 * safezoneW;
+ h = 0.282151 * safezoneH;
+
+ onLBDblClick = "[41502,_this] call EPOCH_npcTraderAdd2";
+ onLBDrop = "[41502,_this] call EPOCH_npcTraderAdd2";
+ };
+
+ class RscText_1000: RscText
+ {
+ idc = -1;
+ text = "INVENTORY";
+ x = 0.304167 * safezoneW + safezoneX;
+ y = 0.227254 * safezoneH + safezoneY;
+ w = 0.0783333 * safezoneW;
+ h = 0.0188101 * safezoneH;
+ };
+ class RscText_1001: RscText
+ {
+ idc = -1;
+ text = "SELLING";
+ x = 0.304167 * safezoneW + safezoneX;
+ y = 0.55643 * safezoneH + safezoneY;
+ w = 0.0783333 * safezoneW;
+ h = 0.0188101 * safezoneH;
+ };
+ class RscText_1002: RscText
+ {
+ idc = -1;
+ text = "BUYING";
+ x = 0.5 * safezoneW + safezoneX;
+ y = 0.55643 * safezoneH + safezoneY;
+ w = 0.0783333 * safezoneW;
+ h = 0.0188101 * safezoneH;
+ };
+ class RscText_1003: RscText
+ {
+ idc = -1;
+ text = "VENDOR ITEMS";
+ x = 0.504896 * safezoneW + safezoneX;
+ y = 0.227254 * safezoneH + safezoneY;
+ w = 0.0783333 * safezoneW;
+ h = 0.0188101 * safezoneH;
+ };
+ class RscText_1004: RscText
+ {
+ idc = 41004;
+ text = "0 Krypto";
+ x = 0.377604 * safezoneW + safezoneX;
+ y = 0.55643 * safezoneH + safezoneY;
+ w = 0.112604 * safezoneW;
+ h = 0.0188101 * safezoneH;
+ };
+ class RscText_1005: RscText
+ {
+ idc = 41005;
+ text = "0 Krypto";
+ x = 0.583229 * safezoneW + safezoneX;
+ y = 0.55643 * safezoneH + safezoneY;
+ w = 0.112604 * safezoneW;
+ h = 0.0188101 * safezoneH;
+ };
+ class RscButtonMenu_2400: RscButtonMenu
+ {
+ idc = 42400;
+ text = "TRADE";
+ x = 0.480417 * safezoneW + safezoneX;
+ y = 0.763341 * safezoneH + safezoneY;
+ w = 0.0391667 * safezoneW;
+ h = 0.0282151 * safezoneH;
+ action = "cursorTarget call EPOCH_startNpcTrade";
+ };
+ /*/
+ class RscButtonMenu_2401: RscButtonMenu
+ {
+ idc = 42401;
+ text = "BUY";
+ x = 0.545707;
+ y = 0.929495;
+ w = 0.0987372;
+ h = 0.0534678;
+ action = "cursorTarget call EPOCH_startNpcTrade";
+ };
+ */
+ class RscButtonMenuCancel_2700: RscButtonMenuCancel
+ {
+ idc = -1;
+ text = "X";
+ x = 0.681146 * safezoneW + safezoneX;
+ y = 0.227254 * safezoneH + safezoneY;
+ w = 0.0146875 * safezoneW;
+ h = 0.0188101 * safezoneH;
+ action = "closeDialog 0";
+ };
+
+ };
+
+};
+
+/*
+class RscEpochObjectUI: RscStandardDisplay
+{
+ idd = -9;
+ class objects
+ {
+ class TestObject: RscObject
+ {
+ type = 82;
+ idc = -1;
+ scale = 1;
+
+ model = "\x\addons\a3_epoch_assets_3\CfgVehicles\center_plane.p3d";
+
+ position[] = {0,0,1.15};
+ positionBack[] = {0,0,1.15};
+ inBack = 0;
+ enableZoom = 1;
+ zoomDuration = 0.5;
+ direction[] = {0,0,1};
+ up[] = {0,1,0};
+ class Areas
+ {
+ class UsertextureL
+ {
+ selection = "usertextureL";
+ class controls
+ {
+ class Test: RscText
+ {
+ text = "Schnobble";
+ idc = 4201;
+ sizeEx = 0.1;
+ colorText[] = {0,1,0,1};
+ colorBackground[] = {0,0,0,0};
+ x = 0;
+ y = 0;
+ w = 1;
+ h = 0.1;
+ shadow = 0;
+ };
+ class EPOCH_playerTemp: RscText
+ {
+ text = "Temp";
+ idc = 4202;
+ sizeEx = 0.1;
+ colorText[] = {0,1,0,1};
+ colorBackground[] = {0,0,0,0};
+ x = 0;
+ y = 0.1;
+ w = 1;
+ h = 0.1;
+ shadow = 0;
+ };
+ class EPOCH_playerHunger: RscText
+ {
+ text = "Hunger";
+ idc = 4203;
+ sizeEx = 0.1;
+ colorText[] = {0,1,0,1};
+ colorBackground[] = {0,0,0,0};
+ x = 0;
+ y = 0.2;
+ w = 1;
+ h = 0.1;
+ shadow = 0;
+ };
+ class EPOCH_playerThirst: RscText
+ {
+ text = "Thirst";
+ idc = 4204;
+ sizeEx = 0.1;
+ colorText[] = {0,1,0,1};
+ colorBackground[] = {0,0,0,0};
+ x = 0;
+ y = 0.3;
+ w = 1;
+ h = 0.1;
+ shadow = 0;
+ };
+ class EPOCH_playerEnergy: RscText
+ {
+ text = "Energy";
+ idc = 4205;
+ sizeEx = 0.1;
+ colorText[] = {0,1,0,1};
+ colorBackground[] = {0,0,0,0};
+ x = 0;
+ y = 0.4;
+ w = 1;
+ h = 0.1;
+ shadow = 0;
+ };
+ class Picture: RscPicture
+ {
+ idc = 4206;
+ text = "";
+ x = 0;
+ y = 0.5;
+ w = 0.5;
+ h = 0.5;
+ };
+ };
+ };
+ class Usertexture
+ {
+ selection = "usertexture";
+ class controls
+ {
+ class Test: RscText
+ {
+ text = "";
+ idc = 4207;
+ sizeEx = 0.07;
+ colorText[] = {0,1,0,1};
+ colorBackground[] = {1,0,0,1};
+ x = 0;
+ y = 0;
+ w = 1;
+ h = 0.1;
+ shadow = 0;
+ };
+ class EPOCH_playerTemp: RscText
+ {
+ text = "";
+ idc = 4208;
+ sizeEx = 0.07;
+ colorText[] = {0,1,0,1};
+ colorBackground[] = {0,0,0,0};
+ x = 0;
+ y = 0.1;
+ w = 1;
+ h = 0.1;
+ shadow = 0;
+ };
+ class EPOCH_playerHunger: RscText
+ {
+ text = "";
+ idc = 4209;
+ sizeEx = 0.07;
+ colorText[] = {0,1,0,1};
+ colorBackground[] = {0,0,0,0};
+ x = 0;
+ y = 0.2;
+ w = 1;
+ h = 0.1;
+ shadow = 0;
+ };
+ class EPOCH_playerThirst: RscText
+ {
+ text = "";
+ idc = 4210;
+ sizeEx = 0.07;
+ colorText[] = {0,1,0,1};
+ colorBackground[] = {0,0,0,0};
+ x = 0;
+ y = 0.3;
+ w = 1;
+ h = 0.1;
+ shadow = 0;
+ };
+ class EPOCH_playerEnergy: RscText
+ {
+ text = "";
+ idc = 4211;
+ sizeEx = 0.07;
+ colorText[] = {0,1,0,1};
+ colorBackground[] = {0,0,0,0};
+ x = 0;
+ y = 0.4;
+ w = 1;
+ h = 0.1;
+ shadow = 0;
+ };
+ class Picture: RscPicture
+ {
+ idc = 4212;
+ text = "";
+ x = 0;
+ y = 0.5;
+ w = 0.5;
+ h = 0.5;
+ };
+ };
+ };
+ class UsertextureR
+ {
+ selection = "usertextureR";
+ class controls
+ {
+ class Test: RscText
+ {
+ text = "";
+ idc = 4213;
+ sizeEx = 0.1;
+ colorText[] = {0,1,0,1};
+ colorBackground[] = {0,0,1,1};
+ x = 0;
+ y = 0;
+ w = 1;
+ h = 0.1;
+ shadow = 0;
+ };
+ class EPOCH_playerTemp: RscText
+ {
+ text = "";
+ idc = 4214;
+ sizeEx = 0.1;
+ colorText[] = {0,1,0,1};
+ colorBackground[] = {0,0,0,0};
+ x = 0;
+ y = 0.1;
+ w = 1;
+ h = 0.1;
+ shadow = 0;
+ };
+ class EPOCH_playerHunger: RscText
+ {
+ text = "";
+ idc = 4215;
+ sizeEx = 0.1;
+ colorText[] = {0,1,0,1};
+ colorBackground[] = {0,0,0,0};
+ x = 0;
+ y = 0.2;
+ w = 1;
+ h = 0.1;
+ shadow = 0;
+ };
+ class EPOCH_playerThirst: RscText
+ {
+ text = "";
+ idc = 4216;
+ sizeEx = 0.1;
+ colorText[] = {0,1,0,1};
+ colorBackground[] = {0,0,0,0};
+ x = 0;
+ y = 0.3;
+ w = 1;
+ h = 0.1;
+ shadow = 0;
+ };
+ class EPOCH_playerEnergy: RscText
+ {
+ text = "";
+ idc = 4217;
+ sizeEx = 0.1;
+ colorText[] = {0,1,0,1};
+ colorBackground[] = {0,0,0,0};
+ x = 0;
+ y = 0.4;
+ w = 1;
+ h = 0.1;
+ shadow = 0;
+ };
+ class Picture: RscPicture
+ {
+ idc = 4218;
+ text = "";
+ x = 0;
+ y = 0.5;
+ w = 0.5;
+ h = 0.5;
+ };
+ };
+ };
+ };
+ };
+ };
+};
+
+
+class Interact
+{
+ idd = -9;
+ duration = -1;
+ onload = "setMousePosition [0.5, 0.5];";
+ //onLoad = "";
+ class controls
+ {
+ class interactive_box: RscListbox
+ {
+ idc = 1700;
+ x = 0.15;
+ y = 0.46;
+ w = 0.6;
+ h = 0.04;
+ onLBDblClick = "_this call EPOCH_Interface_interact";
+ };
+ class interactive_cancel: RscButtonMenuCancel
+ {
+ x = 0.7625;
+ y = 0.46;
+ w = 0.1;
+ h = 0.04;
+ };
+ };
+};
+
+*/
+
+class GroupRequests
+{
+ idd = -1500;
+ duration = -1;
+ onLoad = "setMousePosition [0.5, 0.5]; [] spawn { uiSleep 0.5; waitUntil {_this call EPOCH_iGroup_refresh; uiSleep 1; isNull (findDisplay -1500)};}";
+ class controls
+ {
+ class IGUIBack_2200 : IGUIBack
+ {
+ idc = 2200;
+ x = 0.304167 * safezoneW + safezoneX;
+ y = 0.264874 * safezoneH + safezoneY;
+ w = 0.391667 * safezoneW;
+ h = 0.470252 * safezoneH;
+ };
+ class RscListbox_1500 : RscListbox
+ {
+ idc = 1500;
+ x = 0.309062 * safezoneW + safezoneX;
+ y = 0.311899 * safezoneH + safezoneY;
+ w = 0.381875 * safezoneW;
+ h = 0.376202 * safezoneH;
+ onLBSelChanged = "missionNamespace setVariable [""Epoch_invited_GroupUID"",(_this select 0) lbData (_this select 1)]; missionNamespace setVariable [""Epoch_invited_GroupName"",(_this select 0) lbText (_this select 1)];";
+ };
+ class RscButtonMenu_2400 : RscButtonMenu
+ {
+ idc = 2400;
+ text = "ACCEPT";
+ x = 0.304167 * safezoneW + safezoneX;
+ y = 0.697506 * safezoneH + safezoneY;
+ w = 0.0832292 * safezoneW;
+ h = 0.0376202 * safezoneH;
+ action = "if ((lbCurSel 1500) >= 0) then { call EPOCH_iGroup_acceptInvite; Epoch_invited_GroupUIDs deleteAt (lbCurSel 1500); closeDialog 0;};";
+ };
+ class RscButtonMenu_2401 : RscButtonMenu
+ {
+ idc = 2401;
+ text = "CANCEL";
+ x = 0.612604 * safezoneW + safezoneX;
+ y = 0.697506 * safezoneH + safezoneY;
+ w = 0.0832292 * safezoneW;
+ h = 0.0376202 * safezoneH;
+ action = "closeDialog 0";
+ };
+ class RscText_1000 : RscText
+ {
+ idc = 1000;
+ text = "Group requests";
+ x = 0.309062 * safezoneW + safezoneX;
+ y = 0.274279 * safezoneH + safezoneY;
+ w = 0.0685417 * safezoneW;
+ h = 0.0376202 * safezoneH;
+ };
+ class RscButtonMenu_2402 : RscButtonMenu
+ {
+ idc = 2402;
+ text = "REMOVE";
+ x = 0.387396 * safezoneW + safezoneX;
+ y = 0.697506 * safezoneH + safezoneY;
+ w = 0.0832292 * safezoneW;
+ h = 0.0376202 * safezoneH;
+ action = "if ((lbCurSel 1500) >= 0) then {Epoch_invited_GroupUIDs deleteAt (lbCurSel 1500); }; ";
+ };
+ class RscButtonMenu_2403 : RscButtonMenu
+ {
+ idc = 2403;
+ text = "CLEAR ALL";
+ x = 0.470625 * safezoneW + safezoneX;
+ y = 0.697506 * safezoneH + safezoneY;
+ w = 0.0832292 * safezoneW;
+ h = 0.0376202 * safezoneH;
+ action = "Epoch_invited_GroupUIDs = [];";
+ };
+ };
+};
+
+
+/*
+class Crafting
+{
+ idd = 419999;
+ duration = -1;
+ //onLoad = "";
+ class controls
+ {
+ class RscButtonMenuCancel_2700: RscButtonMenuCancel
+ {
+ x = 0.9;
+ y = 0.9;
+ w = 0.1;
+ h = 0.1;
+ };
+ class RscListNBox_1557: RscListNBox
+ {
+ idc = 1557;
+ x = 0;
+ y = 0;
+ w = 0.9;
+ h = 1;
+ canDrag=true;
+ rows=10;
+ lineSpacing = 1.3;
+ };
+ };
+};
+*/
+
+class CraftItem
+{
+ idd = -10;
+ duration = -1;
+ onload = "setMousePosition [0.5, 0.5];";
+ //onLoad = "";
+ class controls
+ {
+
+ class CraftButton : RscButton
+ {
+ idc = 1600;
+ text = "CRAFT";
+ x = 0.654739 * safezoneW + safezoneX;
+ y = 0.728222 * safezoneH + safezoneY;
+ w = 0.04125 * safezoneW;
+ h = 0.033 * safezoneH;
+ action = "call EPOCH_craftItem;";
+ };
+
+
+ class CraftQuantity : RscText
+ {
+ idc = 1000;
+ text = "QTY";
+ x = 0.588546 * safezoneW + safezoneX;
+ y = 0.729102 * safezoneH + safezoneY;
+ w = 0.020625 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class Quantity : RscCombo
+ {
+ idc = 2100;
+ x = 0.611771 * safezoneW + safezoneX;
+ y = 0.732842 * safezoneH + safezoneY;
+ w = 0.0360937 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+
+
+
+ class isof1 : RscText
+ {
+ idc = 1001;
+ text = "";
+ x = 0.515469 * safezoneW + safezoneX;
+ y = 0.577 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class isof2 : RscText
+ {
+ idc = 1002;
+ text = "";
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.577 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class isof3 : RscText
+ {
+ idc = 1003;
+ text = "";
+ x = 0.649531 * safezoneW + safezoneX;
+ y = 0.577 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class isof4 : RscText
+ {
+ idc = 1004;
+ text = "";
+ x = 0.515469 * safezoneW + safezoneX;
+ y = 0.698 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class isof5 : RscText
+ {
+ idc = 1005;
+ text = "";
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.698 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class isof6 : RscText
+ {
+ idc = 1006;
+ text = "";
+ x = 0.649531 * safezoneW + safezoneX;
+ y = 0.698 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+
+
+ class bBox1 : RscPicture
+ {
+ idc = 1200;
+ x = 0.515469 * safezoneW + safezoneX;
+ y = 0.489 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class bBox2 : RscPicture
+ {
+ idc = 1201;
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.489 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class bBox3 : RscPicture
+ {
+ idc = 1202;
+ x = 0.649531 * safezoneW + safezoneX;
+ y = 0.489 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class bBox4 : RscPicture
+ {
+ idc = 1203;
+ x = 0.515469 * safezoneW + safezoneX;
+ y = 0.61 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class bBox5 : RscPicture
+ {
+ idc = 1204;
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.61 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class bBox6 : RscPicture
+ {
+ idc = 1205;
+ x = 0.649531 * safezoneW + safezoneX;
+ y = 0.61 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+
+ class s1: RscPicture
+ {
+ idc = 41200;
+ x = 0.515469 * safezoneW + safezoneX;
+ y = 0.489 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class s2: RscPicture
+ {
+ idc = 41201;
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.489 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class s3: RscPicture
+ {
+ idc = 41202;
+ x = 0.649531 * safezoneW + safezoneX;
+ y = 0.489 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class s4: RscPicture
+ {
+ idc = 41203;
+ x = 0.515469 * safezoneW + safezoneX;
+ y = 0.61 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class s5: RscPicture
+ {
+ idc = 41204;
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.61 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class s6: RscPicture
+ {
+ idc = 41205;
+ x = 0.649531 * safezoneW + safezoneX;
+ y = 0.61 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+
+
+
+
+ /*
+ class bBtn1 : RscPicture
+ {
+ idc = 1213;
+ x = 0.515469 * safezoneW + safezoneX;
+ y = 0.489 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class bBtn2 : RscPicture
+ {
+ idc = 1214;
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.489 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class bBtn3 : RscPicture
+ {
+ idc = 1215;
+ x = 0.649531 * safezoneW + safezoneX;
+ y = 0.489 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class bBtn4 : RscPicture
+ {
+ idc = 1216;
+ x = 0.515469 * safezoneW + safezoneX;
+ y = 0.61 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class bBtn5 : RscPicture
+ {
+ idc = 1217;
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.61 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class bBtn6 : RscPicture
+ {
+ idc = 1218;
+ x = 0.649531 * safezoneW + safezoneX;
+ y = 0.61 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ */
+
+ };
+};
+
+
+class InteractVehicle
+{
+ idd = -11;
+ duration = -1;
+ onLoad = "setMousePosition [0.5, 0.5]; [""onLoad"",_this select 0] call Epoch_interactVehicle;";
+ class controls
+ {
+ class RscButtonMenu_2400: RscButtonMenu
+ {
+ idc = 2400;
+ text = "Lock";
+ x = 0.3875;
+ y = 0.42;
+ w = 0.1125;
+ h = 0.08;
+ action = "[""Lock""] call Epoch_interactVehicle";
+ };
+ class RscButtonMenu_2401: RscButtonMenu
+ {
+ idc = 2401;
+ text = "Unlock";
+ x = 0.5125;
+ y = 0.42;
+ w = 0.1125;
+ h = 0.08;
+ action = "[""Unlock""] call Epoch_interactVehicle";
+ };
+ class RscButtonMenu_2402: RscButtonMenu
+ {
+ idc = 2402;
+ text = "Inspect";
+ x = 0.3875;
+ y = 0.52;
+ w = 0.1125;
+ h = 0.08;
+ action = "call Epoch_client_gearVehicle";
+ };
+ class RscButtonMenu_2403: RscButtonMenu
+ {
+ idc = 2403;
+ text = "Cancel";
+ x = 0.5125;
+ y = 0.52;
+ w = 0.1125;
+ h = 0.08;
+ action = "closeDialog 0";
+ };
+ };
+};
+
+/*
+class InteractPlayer
+{
+ idd = 420002;
+ duration = -1;
+ //onLoad = "";
+ class controls
+ {
+ class RscButtonMenu_2401: RscButtonMenu
+ {
+ idc = 2401;
+ text = "Trade";
+ x = 0.3875;
+ y = 0.52;
+ w = 0.1125;
+ h = 0.08;
+ action = "closeDialog 0; [cursorTarget,player] call EPOCH_startTRADEREQ";
+ };
+ class RscButtonMenu_2403: RscButtonMenu
+ {
+ idc = 2403;
+ text = "Cancel";
+ x = 0.5125;
+ y = 0.52;
+ w = 0.1125;
+ h = 0.08;
+ action = "closeDialog 0";
+ };
+ };
+};
+*/
+
+class InteractNPC
+{
+ idd = -12;
+ duration = -1;
+ onload = "setMousePosition [0.5, 0.5];";
+ //onLoad = "";
+ class controls
+ {
+ class RscButtonMenu_2401: RscButtonMenu
+ {
+ idc = 2401;
+ text = "Talk";
+ x = 0.5125;
+ y = 0.42;
+ w = 0.1125;
+ h = 0.08;
+ action = "closeDialog 0; cursorTarget call EPOCH_startInteractNPC";
+ };
+ class RscButtonMenu_2402: RscButtonMenu
+ {
+ idc = 2402;
+ text = "Shop";
+ x = 0.3875;
+ y = 0.42;
+ w = 0.1125;
+ h = 0.08;
+ action = "call EPOCH_startNPCTraderMenu;";
+ };
+ /*
+ class RscButtonMenu_2403: RscButtonMenu
+ {
+ idc = 2403;
+ text = "Steal";
+ x = 0.3875;
+ y = 0.52;
+ w = 0.1125;
+ h = 0.08;
+ action = "closeDialog 0; player action [""Gear"", cursorTarget];";
+ };
+ */
+ class RscButtonMenu_2404: RscButtonMenu
+ {
+ idc = 2405;
+ text = "Cancel";
+ x = 0.5125;
+ y = 0.52;
+ w = 0.1125;
+ h = 0.08;
+ action = "closeDialog 0";
+ };
+ };
+};
+
+/*
+class InteractBuilding
+{
+ idd = 420004;
+ duration = -1;
+ //onLoad = "";
+ class controls
+ {
+ class RscListbox_1550: RscListbox
+ {
+ idc = 1550;
+ x = 0.2125;
+ y = 0.08;
+ w = 0.6;
+ h = 0.84;
+ onLBDblClick = "call compile ((_this select 0) lbData (_this select 1)); call EPOCH_buildingInteract;";
+ };
+ class RscButtonMenuCancel_2700: RscButtonMenuCancel
+ {
+ x = 0.4625;
+ y = 0.92;
+ w = 0.1125;
+ h = 0.08;
+ };
+ };
+};
+*/
+
+class InteractBank
+{
+ idd = -13;
+ duration = -1;
+ onLoad = "setMousePosition[0.5, 0.5]; call EPOCH_showStats; [] spawn { uiSleep 0.5; waitUntil {ctrlSetText [1005,format['%1',EPOCH_bankBalance]]; uiSleep 1; isNull (findDisplay -13)};}";
+ class controls
+ {
+ class IGUIBack_2200 : IGUIBack
+ {
+ idc = 2200;
+ x = 0;
+ y = 0;
+ w = 1;
+ h = 1;
+ };
+ class RscListbox_1500 : RscListbox
+ {
+ idc = 21500;
+ x = 0.7375;
+ y = 0.04;
+ w = 0.2375;
+ h = 0.64;
+ };
+ class transfer_amount : RscEdit
+ {
+ idc = 1400;
+ text = "0";
+ x = 0.7375;
+ y = 0.78;
+ w = 0.2375;
+ h = 0.08;
+ onKeyUp = "[_this,EPOCH_bankBalance] call EPOCH_onChar;";
+ };
+ class transfer_btn : RscButton
+ {
+ idc = 1600;
+ text = "Transfer";
+ x = 0.375;
+ y = 0.9;
+ w = 0.2375;
+ h = 0.08;
+ // action = "closeDialog 0; EPOCH_storeCrypto_PVS = [player,[parseNumber(ctrlText 1401),parseNumber(ctrlText 1402),[parseNumber(ctrlText 1400),(lbData [21500, (lbCurSel 21500)])]],Epoch_personalToken]; publicVariableServer 'EPOCH_storeCrypto_PVS'; ";
+ action = "call EPOCH_startBankTransfer;";
+ };
+ class RscEdit_deposit : RscEdit
+ {
+ idc = 1401;
+ text = "0";
+ x = 0.375;
+ y = 0.78;
+ w = 0.2375;
+ h = 0.08;
+ onKeyUp = "[_this,EPOCH_playerCrypto] call EPOCH_onChar;";
+ };
+ class RscEdit_withdraw : RscEdit
+ {
+ idc = 1402;
+ text = "0";
+ x = 0.025;
+ y = 0.78;
+ w = 0.2375;
+ h = 0.08;
+ onKeyUp = "[_this,EPOCH_bankBalance] call EPOCH_onChar;";
+ };
+ class RscText_1001 : RscText
+ {
+ idc = 1001;
+ text = "Withdraw";
+ shadow = 0;
+ x = 0.025;
+ y = 0.7;
+ w = 0.2375;
+ h = 0.06;
+ };
+ class RscText_1002 : RscText
+ {
+ idc = 1002;
+ text = "Deposit";
+ shadow = 0;
+ x = 0.375;
+ y = 0.7;
+ w = 0.2375;
+ h = 0.06;
+ };
+ class RscText_1003 : RscText
+ {
+ idc = 1003;
+ text = "Transfer";
+ shadow = 0;
+ x = 0.7375;
+ y = 0.7;
+ w = 0.2375;
+ h = 0.06;
+ };
+ class RscPicture_1200 : RscPicture
+ {
+ idc = 1200;
+ style = 48 + 0x800;
+ text = "";
+ x = 0.9;
+ y = 0.88;
+ w = 0.1;
+ h = 0.1;
+ };
+ class RscText_1004 : RscText
+ {
+ idc = 1004;
+ text = "Epoch Corp. Retrocrypt v0.217";
+ shadow = 0;
+ x = 0.175;
+ y = 0.38;
+ w = 0.3625;
+ h = 0.04;
+ };
+ class RscText_1005 : RscText
+ {
+ idc = 1005;
+ text = "0";
+ shadow = 0;
+ x = 0.1125;
+ y = 0.02;
+ w = 0.5875;
+ h = 0.08;
+ sizeEx = "2.0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class RscPicture_1201 : RscPicture
+ {
+ idc = 1201;
+ style = 48 + 0x800;
+ text = "\x\addons\a3_epoch_code\Data\UI\cc_ca.paa";
+ x = 0;
+ y = 0;
+ w = 0.1;
+ h = 0.1;
+ };
+ };
+};
+class InteractBaseBuilding
+{
+ idd = -14;
+ duration = -1;
+ onload = "setMousePosition [0.5, 0.5];";
+ //onLoad = "";
+ class controls
+ {
+ class RscButtonMenu_2400 : RscButtonMenu
+ {
+ idc = 2400;
+ text = "Upgrade";
+ x = 0.5125;
+ y = 0.42;
+ w = 0.125;
+ h = 0.08;
+ action = "closeDialog 0; cursorTarget call EPOCH_QuickUpgrade;";
+ };
+ class RscButtonMenu_2401 : RscButtonMenu
+ {
+ idc = 2401;
+ text = "Remove";
+ x = 0.3625;
+ y = 0.42;
+ w = 0.125;
+ h = 0.08;
+ action = "closeDialog 0; cursorTarget call EPOCH_removeBUILD;";
+ };
+
+ class RscButtonMenu_2403: RscButtonMenu
+ {
+ idc = 2403;
+ text = "Cancel";
+ x = 0.5125;
+ y = 0.52;
+ w = 0.125;
+ h = 0.08;
+ action = "closeDialog 0";
+ };
+
+ /*
+ class RscButtonMenu_2402 : RscButtonMenu
+ {
+ idc = 2402;
+ text = "Move";
+ x = 0.3625;
+ y = 0.52;
+ w = 0.125;
+ h = 0.08;
+ action = "closeDialog 0; cursorTarget call EPOCH_fnc_SelectTargetBuild;";
+ };
+ */
+ };
+};
+
+class InteractItem
+{
+ idd = -15;
+ duration = -1;
+ onload = "setMousePosition [0.5, 0.5];";
+ //onLoad = "";
+
+ class custom_button : RscButton
+ {
+ idc = -1;
+ text = "";
+ style = "0x02 + 0x100";
+ colorText[] = { 1, 1, 1, 0 };
+ colorDisabled[] = { 1, 1, 1, 0 };
+ colorBackground[] = { 1, 1, 1, 0 };
+ colorBackgroundDisabled[] = { 1, 1, 1, 0 };
+ colorBackgroundActive[] = { 1, 1, 1, 0.1 };
+ colorShadow[] = { 1, 1, 1, 0 };
+ colorFocused[] = { 1, 1, 1, 0.1 };
+ soundClick[] = { "", 0.6, 1 };
+ };
+
+ class controls
+ {
+ class IGUIBack_2200 : IGUIBack
+ {
+ idc = 2200;
+ x = 0.29375 * safezoneW + safezoneX;
+ y = 0.225 * safezoneH + safezoneY;
+ w = 0.4125 * safezoneW;
+ h = 0.55 * safezoneH;
+ };
+ class RscButton_1600 : RscButton
+ {
+ idc = 41201;
+ text = "USE";
+ x = 0.324687 * safezoneW + safezoneX;
+ y = 0.456 * safezoneH + safezoneY;
+ w = 0.0721875 * safezoneW;
+ h = 0.044 * safezoneH;
+ action = "closeDialog 0; call EPOCH_consumeItem;";
+ };
+ class RscButton_1601 : RscButton
+ {
+ idc = 1601;
+ text = "CANCEL";
+ x = 0.412344 * safezoneW + safezoneX;
+ y = 0.456 * safezoneH + safezoneY;
+ w = 0.0721875 * safezoneW;
+ h = 0.044 * safezoneH;
+ action = "closeDialog 0";
+ };
+ class p1: RscPicture
+ {
+ idc = 41202;
+ x = 0.515469 * safezoneW + safezoneX;
+ y = 0.258 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class p2: RscPicture
+ {
+ idc = 41203;
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.258 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class p3: RscPicture
+ {
+ idc = 41204;
+ x = 0.649531 * safezoneW + safezoneX;
+ y = 0.258 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class p4: RscPicture
+ {
+ idc = 41205;
+ x = 0.515469 * safezoneW + safezoneX;
+ y = 0.368 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class p5: RscPicture
+ {
+ idc = 41206;
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.368 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class p6: RscPicture
+ {
+ idc = 41207;
+ x = 0.649531 * safezoneW + safezoneX;
+ y = 0.368 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+
+ class b1: custom_button
+ {
+ idc = 1602;
+ x = 0.515469 * safezoneW + safezoneX;
+ y = 0.258 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ action = "[0] call EPOCH_craftItemPreview";
+ };
+ class b2: custom_button
+ {
+ idc = 1603;
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.258 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ action = "[1] call EPOCH_craftItemPreview";
+ };
+ class b3: custom_button
+ {
+ idc = 1604;
+ x = 0.649531 * safezoneW + safezoneX;
+ y = 0.258 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ action = "[2] call EPOCH_craftItemPreview";
+ };
+ class b4: custom_button
+ {
+ idc = 1605;
+ x = 0.515469 * safezoneW + safezoneX;
+ y = 0.368 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ action = "[3] call EPOCH_craftItemPreview";
+ };
+ class b5: custom_button
+ {
+ idc = 1606;
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.368 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ action = "[4] call EPOCH_craftItemPreview";
+ };
+ class b6: custom_button
+ {
+ idc = 1607;
+ x = 0.649531 * safezoneW + safezoneX;
+ y = 0.368 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ action = "[5] call EPOCH_craftItemPreview";
+ };
+
+ class MainPicture : RscPicture
+ {
+ style = 48 + 0x800;
+ idc = 41200;
+ x = 0.298906 * safezoneW + safezoneX;
+ y = 0.258 * safezoneH + safezoneY;
+ w = 0.211406 * safezoneW;
+ h = 0.187 * safezoneH;
+ };
+
+
+
+
+
+
+
+
+ class CraftButton : RscButton
+ {
+ idc = 1600;
+ text = "CRAFT";
+ x = 0.654739 * safezoneW + safezoneX;
+ y = 0.728222 * safezoneH + safezoneY;
+ w = 0.04125 * safezoneW;
+ h = 0.033 * safezoneH;
+ action = "call EPOCH_craftItem;";
+ };
+
+
+ class CraftQuantity : RscText
+ {
+ idc = 1000;
+ text = "QTY";
+ x = 0.588546 * safezoneW + safezoneX;
+ y = 0.729102 * safezoneH + safezoneY;
+ w = 0.020625 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class Quantity : RscCombo
+ {
+ idc = 2100;
+ x = 0.611771 * safezoneW + safezoneX;
+ y = 0.732842 * safezoneH + safezoneY;
+ w = 0.0360937 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+
+
+
+ class isof1 : RscText
+ {
+ idc = 41001;
+ text = "";
+ x = 0.515469 * safezoneW + safezoneX;
+ y = 0.577 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class isof2 : RscText
+ {
+ idc = 41002;
+ text = "";
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.577 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class isof3 : RscText
+ {
+ idc = 41003;
+ text = "";
+ x = 0.649531 * safezoneW + safezoneX;
+ y = 0.577 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class isof4 : RscText
+ {
+ idc = 41004;
+ text = "";
+ x = 0.515469 * safezoneW + safezoneX;
+ y = 0.698 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class isof5 : RscText
+ {
+ idc = 41005;
+ text = "";
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.698 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class isof6 : RscText
+ {
+ idc = 41006;
+ text = "";
+ x = 0.649531 * safezoneW + safezoneX;
+ y = 0.698 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+
+
+ class bBox1 : RscPicture
+ {
+ idc = 1200;
+ x = 0.515469 * safezoneW + safezoneX;
+ y = 0.489 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class bBox2 : RscPicture
+ {
+ idc = 1201;
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.489 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class bBox3 : RscPicture
+ {
+ idc = 1202;
+ x = 0.649531 * safezoneW + safezoneX;
+ y = 0.489 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class bBox4 : RscPicture
+ {
+ idc = 1203;
+ x = 0.515469 * safezoneW + safezoneX;
+ y = 0.61 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class bBox5 : RscPicture
+ {
+ idc = 1204;
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.61 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class bBox6 : RscPicture
+ {
+ idc = 1205;
+ x = 0.649531 * safezoneW + safezoneX;
+ y = 0.61 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+
+ class s1 : RscPicture
+ {
+ idc = 42200;
+ x = 0.515469 * safezoneW + safezoneX;
+ y = 0.489 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class s2 : RscPicture
+ {
+ idc = 42201;
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.489 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class s3 : RscPicture
+ {
+ idc = 42202;
+ x = 0.649531 * safezoneW + safezoneX;
+ y = 0.489 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class s4 : RscPicture
+ {
+ idc = 42203;
+ x = 0.515469 * safezoneW + safezoneX;
+ y = 0.61 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class s5 : RscPicture
+ {
+ idc = 42204;
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.61 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class s6 : RscPicture
+ {
+ idc = 42205;
+ x = 0.649531 * safezoneW + safezoneX;
+ y = 0.61 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+
+ class sbtn1 : custom_button
+ {
+ idc = 43200;
+ x = 0.515469 * safezoneW + safezoneX;
+ y = 0.489 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class sbtn2 : custom_button
+ {
+ idc = 43201;
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.489 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class sbtn3 : custom_button
+ {
+ idc = 43202;
+ x = 0.649531 * safezoneW + safezoneX;
+ y = 0.489 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class sbtn4 : custom_button
+ {
+ idc = 43203;
+ x = 0.515469 * safezoneW + safezoneX;
+ y = 0.61 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class sbtn5 : custom_button
+ {
+ idc = 43204;
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.61 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+ class sbtn6 : custom_button
+ {
+ idc = 43205;
+ x = 0.649531 * safezoneW + safezoneX;
+ y = 0.61 * safezoneH + safezoneY;
+ w = 0.0515625 * safezoneW;
+ h = 0.088 * safezoneH;
+ };
+
+
+ class Top6Text : RscText
+ {
+ idc = -1;
+ text = "Craftables";
+ x = 0.568855 * safezoneW + safezoneX;
+ y = 0.228704 * safezoneH + safezoneY;
+ w = 0.0773437 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+
+ class Bottom6Text : RscText
+ {
+ idc = 41008;
+ text = "Materials";
+ x = 0.569376 * safezoneW + safezoneX;
+ y = 0.462426 * safezoneH + safezoneY;
+ w = 0.0825 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+
+
+ // Resources
+ class resource1 : RscPicture
+ {
+ idc = 45202;
+ text = "";
+ x = 0.313958 * safezoneW + safezoneX;
+ y = 0.547025 * safezoneH + safezoneY;
+ w = 0.0489583 * safezoneW;
+ h = 0.0846454 * safezoneH;
+ };
+ class rbtn1 : custom_button
+ {
+ idc = 44202;
+ x = 0.313958 * safezoneW + safezoneX;
+ y = 0.547025 * safezoneH + safezoneY;
+ w = 0.0489583 * safezoneW;
+ h = 0.0846454 * safezoneH;
+ };
+
+ class resource2 : RscPicture
+ {
+ idc = 45203;
+ text = "";
+ x = 0.372708 * safezoneW + safezoneX;
+ y = 0.547025 * safezoneH + safezoneY;
+ w = 0.0489583 * safezoneW;
+ h = 0.0846454 * safezoneH;
+ };
+ class rbtn2 : custom_button
+ {
+ idc = 44203;
+ x = 0.372708 * safezoneW + safezoneX;
+ y = 0.547025 * safezoneH + safezoneY;
+ w = 0.0489583 * safezoneW;
+ h = 0.0846454 * safezoneH;
+ };
+
+ class resource3 : RscPicture
+ {
+ idc = 45204;
+ text = "";
+ x = 0.431458 * safezoneW + safezoneX;
+ y = 0.547025 * safezoneH + safezoneY;
+ w = 0.0489583 * safezoneW;
+ h = 0.0846454 * safezoneH;
+ };
+ class rbtn3 : custom_button
+ {
+ idc = 44204;
+ x = 0.431458 * safezoneW + safezoneX;
+ y = 0.547025 * safezoneH + safezoneY;
+ w = 0.0489583 * safezoneW;
+ h = 0.0846454 * safezoneH;
+ };
+
+ class resource4 : RscPicture
+ {
+ idc = 45205;
+ text = "";
+ x = 0.313958 * safezoneW + safezoneX;
+ y = 0.650481 * safezoneH + safezoneY;
+ w = 0.0489583 * safezoneW;
+ h = 0.0846454 * safezoneH;
+ };
+ class rbtn4 : custom_button
+ {
+ idc = 44205;
+ x = 0.313958 * safezoneW + safezoneX;
+ y = 0.650481 * safezoneH + safezoneY;
+ w = 0.0489583 * safezoneW;
+ h = 0.0846454 * safezoneH;
+ };
+
+ class resource5 : RscPicture
+ {
+ idc = 45206;
+ text = "";
+ x = 0.372708 * safezoneW + safezoneX;
+ y = 0.650481 * safezoneH + safezoneY;
+ w = 0.0489583 * safezoneW;
+ h = 0.0846454 * safezoneH;
+ };
+ class rbtn5 : custom_button
+ {
+ idc = 44206;
+ x = 0.372708 * safezoneW + safezoneX;
+ y = 0.650481 * safezoneH + safezoneY;
+ w = 0.0489583 * safezoneW;
+ h = 0.0846454 * safezoneH;
+ };
+
+ class resource6 : RscPicture
+ {
+ idc = 45207;
+ text = "";
+ x = 0.431458 * safezoneW + safezoneX;
+ y = 0.650481 * safezoneH + safezoneY;
+ w = 0.0489583 * safezoneW;
+ h = 0.0846454 * safezoneH;
+ };
+ class rbtn6 : custom_button
+ {
+ idc = 44207;
+ x = 0.431458 * safezoneW + safezoneX;
+ y = 0.650481 * safezoneH + safezoneY;
+ w = 0.0489583 * safezoneW;
+ h = 0.0846454 * safezoneH;
+ };
+
+ class RscText_Resources : RscText
+ {
+ idc = 42000;
+ text = "Resources";
+ x = 0.353125 * safezoneW + safezoneX;
+ y = 0.509405 * safezoneH + safezoneY;
+ w = 0.112604 * safezoneW;
+ h = 0.0376202 * safezoneH;
+ };
+
+
+
+
+
+
+
+
+
+
+
+
+ };
+};
+
+class Trade
+{
+ idd = -1900;
+ // onLoad = "player setVariable [""TRADE_ACTIVE"", EPOCH_p2ptradeTarget, true];";
+ onload = "setMousePosition [0.5, 0.5];";
+ onUnload = "EPOCH_pendingP2ptradeTarget = ObjNull;";
+ class controls
+ {
+ class IGUIBack_2200 : IGUIBack
+ {
+ idc = 2200;
+ x = 0.29375 * safezoneW + safezoneX;
+ y = 0.225 * safezoneH + safezoneY;
+ w = 0.4125 * safezoneW;
+ h = 0.55 * safezoneH;
+ };
+ class Inventorylist: RscListbox
+ {
+ idc = 1500;
+ canDrag = 1;
+ x = 0.298906 * safezoneW + safezoneX;
+ y = 0.302 * safezoneH + safezoneY;
+ w = 0.134062 * safezoneW;
+ h = 0.385 * safezoneH;
+ onLBDblClick = "_index = lbAdd [1501, ((_this select 0) lbText (_this select 1))]; lbSetData [1501, _index, ((_this select 0) lbData (_this select 1))]; lbSetPicture [1501, _index, ((_this select 0) lbPicture (_this select 1))]; (_this select 0) lbDelete (_this select 1);";
+ onLBDrop = "_index = lbAdd [1501, ((_this select 0) lbText (_this select 1))]; lbSetData [1501, _index, ((_this select 0) lbData (_this select 1))]; lbSetPicture [1501, _index, ((_this select 0) lbPicture (_this select 1))]; (_this select 0) lbDelete (_this select 1);";
+ };
+ class RscCombo_2100: RscCombo
+ {
+ idc = 2100;
+ x = 0.309219 * safezoneW + safezoneX;
+ y = 0.269 * safezoneH + safezoneY;
+ w = 0.113437 * safezoneW;
+ h = 0.022 * safezoneH;
+ onLBSelChanged = "_this call EPOCH_tradeFilter";
+ };
+ class youroffer: RscListbox
+ {
+ idc = 1501;
+ canDrag = 1;
+ x = 0.438125 * safezoneW + safezoneX;
+ y = 0.28 * safezoneH + safezoneY;
+ w = 0.128906 * safezoneW;
+ h = 0.407 * safezoneH;
+ onLBDblClick = "_index = lbAdd [1500, ((_this select 0) lbText (_this select 1))]; lbSetData [1500, _index, ((_this select 0) lbData (_this select 1))]; lbSetPicture [1500, _index, ((_this select 0) lbPicture (_this select 1))]; (_this select 0) lbDelete (_this select 1);";
+ onLBDrop = "_index = lbAdd [1500, ((_this select 0) lbText (_this select 1))]; lbSetData [1500, _index, ((_this select 0) lbData (_this select 1))]; lbSetPicture [1500, _index, ((_this select 0) lbPicture (_this select 1))]; (_this select 0) lbDelete (_this select 1);";
+ };
+ class othersoffer: RscListbox
+ {
+ idc = 1502;
+ x = 0.572187 * safezoneW + safezoneX;
+ y = 0.28 * safezoneH + safezoneY;
+ w = 0.128906 * safezoneW;
+ h = 0.407 * safezoneH;
+ };
+ class RscText_1000: RscText
+ {
+ idc = 1000;
+ text = "Your Offer";
+ x = 0.448438 * safezoneW + safezoneX;
+ y = 0.236 * safezoneH + safezoneY;
+ w = 0.108281 * safezoneW;
+ h = 0.033 * safezoneH;
+ //sizeEx = 2 * GUI_GRID_H;
+ };
+ class RscText_1001: RscText
+ {
+ idc = 1001;
+ text = "Trade Offer";
+ x = 0.5825 * safezoneW + safezoneX;
+ y = 0.236 * safezoneH + safezoneY;
+ w = 0.113437 * safezoneW;
+ h = 0.033 * safezoneH;
+ //sizeEx = 2 * GUI_GRID_H;
+ };
+ class RscText_1002: RscText
+ {
+ idc = 1002;
+ text = "Inventory";
+ x = 0.309219 * safezoneW + safezoneX;
+ y = 0.225 * safezoneH + safezoneY;
+ w = 0.0979687 * safezoneW;
+ h = 0.033 * safezoneH;
+ //sizeEx = 2 * GUI_GRID_H;
+ };
+ class RscButtonMenu_2400: RscButtonMenu
+ {
+ idc = 2400;
+ text = "ACCEPT";
+ x = 0.587656 * safezoneW + safezoneX;
+ y = 0.709 * safezoneH + safezoneY;
+ w = 0.0464062 * safezoneW;
+ h = 0.033 * safezoneH;
+ //sizeEx = 1 * GUI_GRID_H;
+ action = "call EPOCH_makep2pTrade";
+ };
+ class RscButtonMenu_2401: RscButtonMenu
+ {
+ idc = 2401;
+ text = "Decline";
+ x = 0.644375 * safezoneW + safezoneX;
+ y = 0.709 * safezoneH + safezoneY;
+ w = 0.0464062 * safezoneW;
+ h = 0.033 * safezoneH;
+ //sizeEx = 1 * GUI_GRID_H;
+ action = "closeDialog 0";
+ };
+ class RscPicture_1200 : RscPicture
+ {
+ idc = 1200;
+ style = 48 + 0x800;
+ text = "\x\addons\a3_epoch_code\Data\UI\cc_ca.paa";
+ x = 0.298906 * safezoneW + safezoneX;
+ y = 0.698 * safezoneH + safezoneY;
+ w = 0.04125 * safezoneW;
+ h = 0.066 * safezoneH;
+ };
+
+ // Crypto
+ class RscEdit_1400 : RscEdit
+ {
+ idc = 1400;
+ colorBackground[] = { 0, 0, 0, 0.1 };
+ x = 0.345312 * safezoneW + safezoneX;
+ y = 0.709 * safezoneH + safezoneY;
+ w = 0.061875 * safezoneW;
+ h = 0.033 * safezoneH;
+ onKeyUp = "[_this,EPOCH_playerCrypto] call EPOCH_onChar;";
+ };
+
+ };
+};
+
+class CfgInteract
+{
+ class Default
+ {
+ responseNPC[] = {"How can I help you?"};
+ interactMenu[] = {0,1,2};
+ shopMenu[] = {};
+ shop[] = {};
+ mission[] = {};
+ };
+
+ class Interact_NPC_0 : Default
+ {
+ };
+ class Interact_NPC_1 : Default
+ {
+ };
+ class Interact_NPC_2 : Default
+ {
+ };
+ class Interact_NPC_3 : Default
+ {
+ };
+ class Interact_NPC_4 : Default
+ {
+ };
+ class Interact_NPC_5 : Default
+ {
+ };
+ class Interact_NPC_6 : Default
+ {
+ };
+ class Interact_NPC_7 : Default
+ {
+ };
+ class Interact_NPC_8 : Default
+ {
+ };
+ class Interact_NPC_9 : Default
+ {
+ };
+ class Interact_NPC_10 : Default
+ {
+ };
+ class Interact_NPC_11 : Default
+ {
+ };
+ class Interact_NPC_12 : Default
+ {
+ };
+ class Interact_NPC_13 : Default
+ {
+ };
+ class Interact_NPC_14 : Default
+ {
+ };
+ class Interact_NPC_15 : Default
+ {
+ };
+ class Interact_NPC_16 : Default
+ {
+ };
+ class Interact_NPC_17 : Default
+ {
+ };
+ class Interact_NPC_18 : Default
+ {
+ };
+ class Interact_NPC_19 : Default
+ {
+ };
+ class Interact_NPC_20 : Default
+ {
+ };
+
+ class Default_Menu
+ {
+ responseNPC[] = {};
+ interactMenu[] = {};
+ shopMenu[] = {};
+ shop[] = {};
+ mission[] = {};
+ };
+
+ class Interact_0 : Default_Menu {
+ interactName = "What do you have for Sell?";
+ responseNPC[] = {"I have the follwing items:"};
+ shopMenu[] = {0,1,2};
+ };
+
+ class Shop_0 : Default_Menu {
+ interactName = "Pistols";
+ shop[] = {"hgun_Rook40_snds_F"};
+ };
+ class Shop_1 : Default_Menu {
+ interactName = "Rifles";
+ shop[] = {"LMG_Mk200_MRCO_F"};
+ };
+ class Shop_2 : Default_Menu {
+ interactName = "Backpacks";
+ shop[] = {"B_FieldPack_blk"};
+ };
+
+ class Interact_1 : Default_Menu {
+ interactName = "How can I gain faction?";
+ responseNPC[] = {"By doing a job for me..."};
+ missionMenu[] = {0,1};
+ };
+
+ class Mission_0 : Default_Menu {
+ interactName = "Find and return an Item";
+ mission[] = {"Book","Two"};
+ };
+
+ class Mission_1 : Default_Menu {
+ interactName = "Kill someone that has low faction";
+ };
+
+ class Interact_2 : Default_Menu {
+ interactName = "What is going on around here?";
+ responseNPC[] = {"Not much these days."};
+ interactMenu[] = {3};
+ };
+
+ class Interact_3 : Default_Menu {
+ interactName = "Ok, Thanks.";
+ };
+
+};
+
+class RscDisplayInventory_DLCTemplate
+{
+ class controls
+ {
+ class DlcBg
+ {
+ idc = 101;
+ text = "\A3\Ui_f\data\GUI\Rsc\RscDisplayInventory\InventoryStripe_ca.paa";
+ color[] = { 1, 1, 1, 1 };
+ x = 0;
+ y = 0;
+ w = "1.8 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class DlcIcon
+ {
+ idc = 100;
+ text = "";
+ color[] = { 1, 1, 1, 1 };
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ };
+};
+
+class RscDisplayInventory
+{
+ scriptName = "RscDisplayInventory";
+ scriptPath = "IGUI";
+ onLoad = "setMousePosition[0.5, 0.5]; call EPOCH_showStats; [""onLoad"",_this,""RscDisplayInventory"",'IGUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')";
+ onUnload = "[""onUnload"",_this,""RscDisplayInventory"",'IGUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay')";
+ idd = 602;
+ enableSimulation = 1;
+ class Colors
+ {
+ dragValidBgr[] = { "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", 0.5 };
+ dragInvalidBgr[] = { "(profilenamespace getvariable ['IGUI_ERROR_RGB_R',0.8])", "(profilenamespace getvariable ['IGUI_ERROR_RGB_G',0.0])", "(profilenamespace getvariable ['IGUI_ERROR_RGB_B',0.0])", 0.5 };
+ dragValidBar[] = { "(profilenamespace getvariable ['IGUI_WARNING_RGB_R',0.8])", "(profilenamespace getvariable ['IGUI_WARNING_RGB_G',0.5])", "(profilenamespace getvariable ['IGUI_WARNING_RGB_B',0.0])", 0.5 };
+ dragInvalidBar[] = { "(profilenamespace getvariable ['IGUI_ERROR_RGB_R',0.8])", "(profilenamespace getvariable ['IGUI_ERROR_RGB_G',0.0])", "(profilenamespace getvariable ['IGUI_ERROR_RGB_B',0.0])", 0.5 };
+ progressBar[] = { "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", 1 };
+ progressBarBgr[] = { "(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])", "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])", "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])", 0.75 };
+ highlight[] = { "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", 0.5 };
+ };
+ class controlsBackground{};
+ class controls
+ {
+ delete Background;
+ delete Title;
+ delete ButtonOK;
+ delete ButtonCancel;
+ class CA_ContainerBackground : RscText
+ {
+ idc = 1001;
+ x = "1 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "12 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "23 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorBackground[] = { 0.05, 0.05, 0.05, 0.7 };
+ };
+ class CA_PlayerBackground : RscText
+ {
+ idc = 1002;
+ x = "14.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "24.4 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "22 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorBackground[] = { 0.05, 0.05, 0.05, 0.7 };
+ };
+ class TitleBackground : RscText
+ {
+ idc = 1020;
+ x = "14.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "24.4 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorBackground[] = { 0.1, 0.1, 0.1, 1 };
+ };
+ class PlayersName : RscText
+ {
+ idc = 111;
+ text = "$STR_DIARY_PLAYER_NAME";
+ x = "15.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "19.8 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class RankBackground : RscText
+ {
+ idc = 1014;
+ x = "15.1 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "1.25 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "0.6 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorBackground[] = { 1, 1, 1, 0.2 };
+ };
+ class RankPicture : RscPicture
+ {
+ idc = 1203;
+ text = "\A3\Ui_f\data\GUI\Cfg\Ranks\corporal_gs.paa";
+ x = "15.1 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "1.25 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "0.6 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class ButtonBack : RscActiveText
+ {
+ idc = 2;
+ style = 48;
+ color[] = { 1, 1, 1, 0.7 };
+ text = "\A3\Ui_f\data\GUI\Rsc\RscDisplayArcadeMap\icon_exit_cross_ca.paa";
+ x = "38 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 1, 1, 1, 0.7 };
+ colorActive[] = { 1, 1, 1, 1 };
+ tooltip = "$STR_DISP_CLOSE";
+ };
+ class BackgroundSlotPrimary : RscPicture
+ {
+ idc = 1242;
+ x = "26.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "11.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotPrimaryMuzzle : BackgroundSlotPrimary
+ {
+ idc = 1243;
+ x = "26.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "9.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotPrimaryUnderBarrel : BackgroundSlotPrimary
+ {
+ idc = 1200;
+ x = "29 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "9.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotPrimaryFlashlight : BackgroundSlotPrimary
+ {
+ idc = 1244;
+ x = "31.4 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "9.2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotPrimaryOptics : BackgroundSlotPrimary
+ {
+ idc = 1245;
+ x = "33.8 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "9.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotPrimaryMagazine : BackgroundSlotPrimary
+ {
+ idc = 1246;
+ x = "36.2 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "9.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotSecondary : BackgroundSlotPrimary
+ {
+ idc = 1247;
+ x = "26.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "11.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "11.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotSecondaryMuzzle : BackgroundSlotPrimary
+ {
+ idc = 1248;
+ x = "26.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "14.6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotSecondaryUnderBarrel : BackgroundSlotPrimary
+ {
+ idc = 1266;
+ x = "29 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "14.6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotSecondaryFlashlight : BackgroundSlotPrimary
+ {
+ idc = 1249;
+ x = "31.4 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "14.6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotSecondaryOptics : BackgroundSlotPrimary
+ {
+ idc = 1250;
+ x = "33.8 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "14.6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotSecondaryMagazine : BackgroundSlotPrimary
+ {
+ idc = 1251;
+ x = "36.2 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "14.6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotHandgun : BackgroundSlotPrimary
+ {
+ idc = 1252;
+ x = "26.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "17 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "11.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotHandgunMuzzle : BackgroundSlotPrimary
+ {
+ idc = 1253;
+ x = "26.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "20.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotHandgunUnderBarrel : BackgroundSlotPrimary
+ {
+ idc = 1268;
+ x = "29 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "20.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotHandgunFlashlight : BackgroundSlotPrimary
+ {
+ idc = 1254;
+ x = "31.4 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "20.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotHandgunOptics : BackgroundSlotPrimary
+ {
+ idc = 1255;
+ x = "33.8 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "20.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotHandgunMagazine : BackgroundSlotPrimary
+ {
+ idc = 1256;
+ x = "36.2 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "20.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotHeadgear : BackgroundSlotPrimary
+ {
+ idc = 1257;
+ x = "26.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.9 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotGoggles : BackgroundSlotPrimary
+ {
+ idc = 1258;
+ x = "29.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.9 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotHMD : BackgroundSlotPrimary
+ {
+ idc = 1259;
+ x = "32.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.9 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotBinoculars : BackgroundSlotPrimary
+ {
+ idc = 1260;
+ x = "35.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.9 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotMap : BackgroundSlotPrimary
+ {
+ idc = 1261;
+ x = "15.1 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "20.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.12 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotGPS : BackgroundSlotPrimary
+ {
+ idc = 1262;
+ x = "17.32 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "20.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.12 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotCompass : BackgroundSlotPrimary
+ {
+ idc = 1263;
+ x = "21.76 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "20.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.12 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotRadio : BackgroundSlotPrimary
+ {
+ idc = 1264;
+ x = "19.54 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "20.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.12 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackgroundSlotWatch : BackgroundSlotPrimary
+ {
+ idc = 1265;
+ x = "23.98 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "20.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.12 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class ExternalContainerBackground : RscPicture
+ {
+ colorText[] = { 1, 1, 1, 0.1 };
+ idc = 1240;
+ x = "1.5 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "3.7 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "11 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "18.4 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class PlayerContainerBackground : ExternalContainerBackground
+ {
+ idc = 1241;
+ x = "15.1 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "11 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "14 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class GroundTab : RscActiveText
+ {
+ idc = 6321;
+ colorBackgroundSelected[] = { 1, 1, 1, 1 };
+ colorFocused[] = { 1, 1, 1, 0 };
+ soundDoubleClick[] = { "", 0.1, 1 };
+ color[] = { 1, 1, 1, 1 };
+ colorBackground[] = { 0, 0, 0, 1 };
+ x = "1.5 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "5.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class SoldierTab : GroundTab
+ {
+ idc = 6401;
+ x = "7 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "5.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class GroundContainer : RscListBox
+ {
+ class DLCTemplate : RscDisplayInventory_DLCTemplate
+ {
+ class Controls;
+ };
+ idc = 632;
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx2 = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ rowHeight = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ canDrag = 1;
+ colorText[] = { 1, 1, 1, 1 };
+ colorBackground[] = { 0, 0, 0, 0 };
+ itemBackground[] = { 1, 1, 1, 0.1 };
+ itemSpacing = 0.001;
+ x = "1.5 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "3.7 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "11 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "18.4 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+
+ onLBDrag = "_this call EPOCH_selectInventoryItem; _this call EPOCH_refeshUI";
+ onLBSelChanged = "_this call EPOCH_selectInventoryItem; _this call EPOCH_refeshUI";
+
+ };
+ class SoldierContainer : GroundContainer
+ {
+ idc = 640;
+ };
+ class GroundFilter : RscCombo
+ {
+ idc = 6554;
+ x = "1.5 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "2.6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "11 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class GroundLoad : RscProgress
+ {
+ idc = 6307;
+ texture = "";
+ textureExt = "";
+ colorBar[] = { 0.9, 0.9, 0.9, 0.9 };
+ colorExtBar[] = { 1, 1, 1, 1 };
+ colorFrame[] = { 1, 1, 1, 1 };
+ x = "1.5 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "22.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "11 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class SlotPrimary : GroundTab
+ {
+ class DLCTemplate : RscDisplayInventory_DLCTemplate
+ {
+ class Controls;
+ };
+ idc = 610;
+ style = "0x30 + 0x800";
+ color[] = { 1, 1, 1, 1 };
+ colorBackground[] = { 1, 1, 1, 0.1 };
+ colorBackgroundSelected[] = { 1, 1, 1, 0.1 };
+ colorFocused[] = { 0, 0, 0, 0 };
+ canDrag = 1;
+ x = "26.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "11.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotPrimaryMuzzle : SlotPrimary
+ {
+ idc = 620;
+ x = "26.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "9.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotPrimaryUnderBarrel : SlotPrimary
+ {
+ idc = 641;
+ x = "29 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "9.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotPrimaryFlashlight : SlotPrimary
+ {
+ idc = 622;
+ x = "31.4 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "9.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotPrimaryOptics : SlotPrimary
+ {
+ idc = 621;
+ x = "33.8 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "9.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotPrimaryMagazine : SlotPrimary
+ {
+ idc = 623;
+ x = "36.2 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "9.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotSecondary : SlotPrimary
+ {
+ idc = 611;
+ x = "26.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "11.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "11.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotSecondaryMuzzle : SlotPrimary
+ {
+ idc = 624;
+ x = "26.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "14.6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotSecondaryUnderBarrel : SlotPrimary
+ {
+ idc = 642;
+ x = "29 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "14.59 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotSecondaryFlashlight : SlotPrimary
+ {
+ idc = 626;
+ x = "31.4 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "14.6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotSecondaryOptics : SlotPrimary
+ {
+ idc = 625;
+ x = "33.8 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "14.6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotSecondaryMagazine : SlotPrimary
+ {
+ idc = 627;
+ x = "36.2 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "14.6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotHandgun : SlotPrimary
+ {
+ idc = 612;
+ x = "26.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "17 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "11.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotHandgunMuzzle : SlotPrimary
+ {
+ idc = 628;
+ x = "26.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "20.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotHandgunUnderBarrel : SlotPrimary
+ {
+ idc = 643;
+ x = "29 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "20.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotHandgunFlashlight : SlotPrimary
+ {
+ idc = 630;
+ x = "31.4 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "20.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotHandgunOptics : SlotPrimary
+ {
+ idc = 629;
+ x = "33.8 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "20.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotHandgunMagazine : SlotPrimary
+ {
+ idc = 631;
+ x = "36.2 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "20.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotHeadgear : SlotPrimary
+ {
+ idc = 6240;
+ x = "26.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.9 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ // Custom
+ class SlotHeadgearArmor : GroundLoad
+ {
+ idc = 7240;
+ x = "26.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "5.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.25 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0.6,0.6,0.6,1 };
+ };
+
+ class SlotGoggles : SlotPrimary
+ {
+ idc = 6216;
+ x = "29.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.9 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotHMD : SlotPrimary
+ {
+ idc = 6217;
+ x = "32.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.9 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotBinoculars : SlotPrimary
+ {
+ idc = 6238;
+ x = "35.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.9 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotMap : SlotPrimary
+ {
+ idc = 6211;
+ x = "15.16 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "20.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotGPS : SlotPrimary
+ {
+ idc = 6215;
+ x = "17.38 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "20.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotCompass : SlotPrimary
+ {
+ idc = 6212;
+ x = "21.82 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "20.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotRadio : SlotPrimary
+ {
+ idc = 6214;
+ x = "19.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "20.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class SlotWatch : SlotPrimary
+ {
+ idc = 6213;
+ x = "24.04 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "20.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class UniformTab : GroundTab
+ {
+ idc = 6332;
+ x = "15.1 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "3.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorBackground[] = { 1, 1, 1, 0.5 };
+ };
+ class UniformSlot : SlotPrimary
+ {
+ idc = 6331;
+ x = "15.35 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class UniformLoad : GroundLoad
+ {
+ idc = 6304;
+ x = "15.1 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "5.75 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "3.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.25 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ // Custom
+ class UniformArmor : GroundLoad
+ {
+ idc = 7304;
+ x = "15.1 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "5.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "3.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.25 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0.6,0.6,0.6,1 };
+ };
+
+ class UniformContainer : GroundContainer
+ {
+ onLBDblClick = "_this call EPOCH_itemInteract";
+ onLBSelChanged = "_this call EPOCH_itemInteractV2";
+ onLBDrag = "";
+ onLBSelChanged = "";
+
+ idc = 633;
+ x = "15.1 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "11 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "14 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class VestTab : UniformTab
+ {
+ idc = 6382;
+ x = "18.85 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "3.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class VestSlot : SlotPrimary
+ {
+ idc = 6381;
+ x = "19.1 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class VestLoad : GroundLoad
+ {
+ idc = 6305;
+ x = "18.85 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "5.75 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "3.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.25 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+
+ // Custom
+ class VestArmor : GroundLoad
+ {
+ idc = 7305;
+ x = "18.85 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "5.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "3.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.25 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0.6,0.6,0.6,1 };
+ };
+
+ class VestContainer : UniformContainer
+ {
+ idc = 638;
+ };
+ class BackpackTab : UniformTab
+ {
+ idc = 6192;
+ x = "22.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "3.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+
+ class BackpackSlot : SlotPrimary
+ {
+ idc = 6191;
+ x = "22.85 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0, 0, 0, 0.5 };
+ };
+ class BackpackLoad : GroundLoad
+ {
+ idc = 6306;
+ x = "22.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "5.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "3.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class BackpackContainer : UniformContainer
+ {
+ idc = 619;
+ };
+ class TotalLoad : GroundLoad
+ {
+ idc = 6308;
+ x = "15.1 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "23.0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "23.4 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ // Custom
+ class TotalArmor : GroundLoad
+ {
+ idc = 7308;
+ x = "15.1 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "22.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "23.4 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0.6,0.6,0.6,1 };
+ };
+ class TotalArmorCompare : RscCustomProgress
+ {
+ idc = 7309;
+ x = "15.1 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "22.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "23.4 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = { 0.4,0.6,1,0.4 };
+ };
+
+ class ContainerMarker : GroundTab
+ {
+ idc = 6325;
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "24 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class GroundMarker : ContainerMarker
+ {
+ idc = 6385;
+ x = "1.5 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "24 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class SoldierMarker : ContainerMarker
+ {
+ idc = 6405;
+ x = "3 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "24 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+
+ class EpochBtnBG : IGUIBack
+ {
+ idc = -10;
+ /*
+
+ x = 0.433468 * safezoneW + safezoneX;
+ y = 0.75872 * safezoneH + safezoneY;
+ w = 0.30231 * safezoneW;
+ h = 0.0337482 * safezoneH;
+ */
+ x = "14.5 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "23.9 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "24.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1.7 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+
+ colorBackground[] = { 0.05, 0.05, 0.05, 0.7 };
+ };
+ class EpochBTN1 : RscButtonMenu
+ {
+ idc = -11;
+ text = "Group Menu";
+ onMouseButtonDown = "_this call EPOCH_Inventory_Group";
+ /*
+ x = 0.437079 * safezoneW + safezoneX;
+ y = 0.764 * safezoneH + safezoneY;
+ w = 0.0711741 * safezoneW;
+ h = 0.022 * safezoneH;
+ */
+ x = "33.2 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "24 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class EpochBTN2 : RscButtonMenu
+ {
+ idc = -12;
+ text = "Requests";
+ onMouseButtonDown = "_this call EPOCH_Inventory_iGroup";
+ /*
+ x = 0.511347 * safezoneW + safezoneX;
+ y = 0.764 * safezoneH + safezoneY;
+ w = 0.0711741 * safezoneW;
+ h = 0.022 * safezoneH;
+ */
+ x = "27.0 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "24 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class EpochBTN3 : RscButtonMenu
+ {
+ idc = -13;
+ text = "EXAMINE";
+ onMouseButtonDown = "call EPOCH_consumeItem";
+ /*
+ x = 0.585617 * safezoneW + safezoneX;
+ y = 0.764 * safezoneH + safezoneY;
+ w = 0.0711741 * safezoneW;
+ h = 0.022 * safezoneH;
+ */
+ x = "14.62 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "24 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class EpochBTN4 : RscButtonMenu
+ {
+ idc = -14;
+ text = "CRAFT";
+ onMouseButtonDown = "true call EPOCH_itemInteract";
+ /*
+ x = 0.659883 * safezoneW + safezoneX;
+ y = 0.764 * safezoneH + safezoneY;
+ w = 0.0711741 * safezoneW;
+ h = 0.022 * safezoneH;
+ */
+ x = "20.8 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "24 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+
+
+ };
+ };
+};
+
+class RscDisplayMPInterrupt: RscStandardDisplay
+{
+ onLoad = "[""onLoad"",_this,""Epoch_onPause"",'Epoch'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf"";[""onLoad"",_this,""RscDisplayMPInterrupt"",'Epoch'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
+ //onLoad = "[""onLoad"",_this,""RscDisplayMPInterrupt"",'GUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
+ onUnload = "[""onUnload"",_this,""RscDisplayMPInterrupt"",'Epoch'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
+};
+class RscDisplayRemoteMissions: RscStandardDisplay
+{
+ onLoad = "[""onLoad"",_this,""RscDisplayRemoteMissions"",'GUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf"";execVM ""\x\addons\a3_epoch_code\system\dummy.sqf""";
+};
+class RscDisplayPassword: RscStandardDisplay
+{
+ onLoad = "[""onLoad"",_this,""RscDisplayPassword"",'GUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf"";execVM ""\x\addons\a3_epoch_code\system\dummy.sqf""";
+};
+class RscConfigEditor_Main{onLoad = "missionNamespace setVariable ['yolo',true];(_this select 0) closeDisplay 0";};
+class RscDisplayDebriefing: RscStandardDisplay
+{
+ onLoad = "(_this select 0) closeDisplay 0";
+};
+class RscDisplayMain: RscStandardDisplay
+{
+ onLoad = "_this call compile preprocessfilelinenumbers ""\x\addons\a3_epoch_code\gui\scripts\Epoch_handleWelcomeScreen.sqf""";
+ //onLoad = "_this call compile preprocessfilelinenumbers ""\x\addons\a3_epoch_code\gui\scripts\Epoch_handleWelcomeScreen.sqf"";[""onLoad"",_this,""RscDisplayMain"",'BootcampDisplays'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
+};
+class RscDisplayClientGetReady: RscDisplayGetReady
+{
+ onLoad = "uiNamespace setVariable ['Epoch_freshServer', true]; ctrlActivate ((_this select 0) displayCtrl 1); (_this select 0) closeDisplay 1";
+ //onLoad = "[""onLoad"",_this,""RscDiary"",'GUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
+};
+class RscDisplayWelcome;
+class RscWelcomeEpoch : RscDisplayWelcome
+{
+ idd = -666;
+ onLoad = "[""onLoad"",[(_this select 0),""Welcome""],""Epoch_welcomeScreen"",'Epoch'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf"""; //Used when we have it outside of the game
+};
+class RscDisplayInfo : RscWelcomeEpoch
+{
+ onLoad = "[""onLoad"",[(_this select 0),""Custom""],""Epoch_welcomeScreen"",'Epoch'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf"""; //Used when we have it outside of the game}
+};
+class RscVersionUpdateEpoch : RscWelcomeEpoch
+{
+ onLoad = "[""onLoad"",[(_this select 0),""Changelog""],""Epoch_welcomeScreen"",'Epoch'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf"""; //Used when we have it outside of the game}
+};
+class RscInGameUI
+{
+ colorReady[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ colorPrepare[] = {"(profilenamespace getvariable ['IGUI_WARNING_RGB_R',0.8])","(profilenamespace getvariable ['IGUI_WARNING_RGB_G',0.5])","(profilenamespace getvariable ['IGUI_WARNING_RGB_B',0.0])","(profilenamespace getvariable ['IGUI_WARNING_RGB_A',0.8])"};
+ colorUnload[] = {"(profilenamespace getvariable ['IGUI_ERROR_RGB_R',0.8])","(profilenamespace getvariable ['IGUI_ERROR_RGB_G',0.0])","(profilenamespace getvariable ['IGUI_ERROR_RGB_B',0.0])","(profilenamespace getvariable ['IGUI_ERROR_RGB_A',1.0])"};
+ class RscUnitInfo
+ {
+ onLoad = "[""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
+ onUnload = "[""onUnload"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
+ idd = 300;
+ updateWidthByWeapon = 0;
+ updateHeightByCrew = 0;
+ updateWidthByCrew = 0;
+ controls[] = {"WeaponInfoControlsGroupRight","CA_BackgroundVehicle","CA_BackgroundVehicleTitle","CA_BackgroundVehicleTitleDark","CA_BackgroundFuel","CA_Vehicle","CA_VehicleRole","CA_HitZones","CA_SpeedBackground","CA_SpeedUnits","CA_Speed","CA_ValueFuel"};
+ class WeaponInfoControlsGroupLeft: RscControlsGroup
+ {
+ idc = 2302;
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_WEAPON_X"", ((safezoneX + safezoneW) - (12.4 * ( ((safezoneW / safezoneH) min 1.2) / 40)) - 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2)) + 18 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20))";
+
+
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ class controls
+ {
+ class CA_BackgroundWeapon: RscPicture
+ {
+ colorText[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])","(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"};
+ idc = 1202;
+ text = "\A3\ui_f\data\igui\rscingameui\rscunitinfo\gradient_ca.paa";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "1.2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_BackgroundWeaponTitle: RscText
+ {
+ colorBackground[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])","(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"};
+ idc = 1001;
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_BackgroundWeaponTitleDark: RscText
+ {
+ idc = 1008;
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorBackground[] = {0,0,0,0.1};
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_BackgroundWeaponMode: RscPicture
+ {
+ colorText[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])","(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"};
+ idc = 1203;
+ text = "\A3\ui_f\data\igui\rscingameui\rscunitinfo\mode_background_ca.paa";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_ValueReload: RscIGProgress
+ {
+ idc = 154;
+ colorBar[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])",0.25};
+ colorFrame[] = {0,0,0,0};
+ style = 0;
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_Weapon: RscText
+ {
+ idc = 118;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ style = 1;
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_ModeTexture: RscPicture
+ {
+ idc = 187;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_Mode: RscText
+ {
+ idc = 149;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ y = -1;
+ x = "-5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ w = "4.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_AmmoCount: RscText
+ {
+ idc = 184;
+ style = 1;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ x = "4.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "3.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_MagCount: RscText
+ {
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ idc = 185;
+ x = "8 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_AmmoType: RscText
+ {
+ idc = 155;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "4.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_GrenadeType: RscText
+ {
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ style = 2;
+ idc = 152;
+ x = "3.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "4.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_GrenadeCount: RscText
+ {
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ style = 1;
+ idc = 151;
+ x = "8 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_GunnerWeapon: RscText
+ {
+ idc = 150;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ colorBackground[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])","(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"};
+ style = 1;
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "4 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ };
+ };
+ class WeaponInfoControlsGroupRight: RscControlsGroup
+ {
+ idc = 2303;
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_WEAPON_X"", ((safezoneX + safezoneW) - (12.4 * ( ((safezoneW / safezoneH) min 1.2) / 40)) - 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2)) + 18 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20))";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ class controls
+ {
+ class CA_BackgroundWeapon: RscPicture
+ {
+ colorText[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])","(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"};
+ idc = 1202;
+ text = "\A3\ui_f\data\igui\rscingameui\rscunitinfo\gradient_ca.paa";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "1.2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_BackgroundWeaponTitle: RscText
+ {
+ colorBackground[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])","(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"};
+ idc = 1001;
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_BackgroundWeaponTitleDark: RscText
+ {
+ idc = 1008;
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorBackground[] = {0,0,0,0.1};
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_BackgroundWeaponMode: RscPicture
+ {
+ colorText[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])","(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"};
+ idc = 1203;
+ text = "\A3\ui_f\data\igui\rscingameui\rscunitinfo\mode_background_ca.paa";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_ValueReload: RscIGProgress
+ {
+ idc = 154;
+ colorBar[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])",0.25};
+ colorFrame[] = {0,0,0,0};
+ style = 0;
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_Weapon: RscText
+ {
+ idc = 118;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ style = 1;
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_ModeTexture: RscPicture
+ {
+ idc = 187;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_Mode: RscText
+ {
+ idc = 149;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ y = -1;
+ x = "-5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ w = "4.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_AmmoCount: RscText
+ {
+ idc = 184;
+ style = 1;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ x = "4.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "3.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_MagCount: RscText
+ {
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ idc = 185;
+ x = "8 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_AmmoType: RscText
+ {
+ idc = 155;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "4.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_GrenadeType: RscText
+ {
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ style = 2;
+ idc = 152;
+ x = "3.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "4.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_GrenadeCount: RscText
+ {
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ style = 1;
+ idc = 151;
+ x = "8 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_GunnerWeapon: RscText
+ {
+ idc = 150;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ colorBackground[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])","(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"};
+ style = 1;
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "4 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ };
+ };
+ class CA_BackgroundVehicle: RscPicture
+ {
+ colorText[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])","(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"};
+ idc = 1200;
+ text = "\A3\ui_f\data\igui\rscingameui\rscunitinfo\gradient_ca.paa";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_X"", (safezoneX + 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "1.2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_BackgroundVehicleTitle: RscText
+ {
+ colorBackground[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])","(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"};
+ idc = 1000;
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_X"", (safezoneX + 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_BackgroundVehicleTitleDark: RscText
+ {
+ idc = 1013;
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_X"", (safezoneX + 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorBackground[] = {0,0,0,0.1};
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_BackgroundFuel: RscPicture
+ {
+ colorText[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])","(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"};
+ idc = 1202;
+ text = "\A3\ui_f\data\igui\rscingameui\rscunitinfo\fuelBackground_ca.paa";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_X"", (safezoneX + 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_Vehicle: RscText
+ {
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ idc = 120;
+ text = "AH-99 Blackfoot";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_X"", (safezoneX + 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "8.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_VehicleRole: RscPicture
+ {
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ shadow = 1;
+ idc = 208;
+ textureCargo = "\A3\ui_f\data\igui\rscingameui\rscunitinfo\role_cargo_ca.paa";
+ textureCommander = "\A3\ui_f\data\igui\rscingameui\rscunitinfo\role_commander_ca.paa";
+ textureDriver = "\A3\ui_f\data\igui\rscingameui\rscunitinfo\role_driver_ca.paa";
+ textureGunner = "\A3\ui_f\data\igui\rscingameui\rscunitinfo\role_gunner_ca.paa";
+ text = "#(argb,8,8,3)color(1,1,1,0)";
+ x = "9 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_X"", (safezoneX + 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_ValueFuel: RscProgress
+ {
+ idc = 113;
+ texture = "#(argb,8,8,3)color(1,1,1,1)";
+ text = "#(argb,8,8,3)color(1,1,1,1)";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_X"", (safezoneX + 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_SpeedBackground: RscText
+ {
+ shadow = 0;
+ font = "PuristaSemibold";
+ idc = 1006;
+ x = "5.5 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_X"", (safezoneX + 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "1.3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "4.4 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.9 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = {0,0,0,1};
+ colorBackground[] = {1,1,1,0.1};
+ sizeEx = "0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_Speed: RscText
+ {
+ idc = 121;
+ style = 1;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ text = "9999";
+ x = "6.3 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_X"", (safezoneX + 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "1.3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_SpeedUnits: RscText
+ {
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ idc = 1004;
+ text = "km/h";
+ x = "8 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_X"", (safezoneX + 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "1.3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_AltBackground: RscText
+ {
+ shadow = 0;
+ font = "PuristaSemibold";
+ idc = 1014;
+ x = "5.5 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_X"", (safezoneX + 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "2.3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "4.4 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.9 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = {0,0,0,1};
+ colorBackground[] = {1,1,1,0.1};
+ sizeEx = "0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_Alt: RscText
+ {
+ idc = 122;
+ style = 1;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ text = "9999";
+ x = "6.3 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_X"", (safezoneX + 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "2.3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_AltUnits: RscText
+ {
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ idc = 1005;
+ text = "m";
+ x = "8 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_X"", (safezoneX + 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "2.3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_Depth: RscText
+ {
+ idc = 186;
+ style = 1;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ text = "9999";
+ x = "6.3 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_X"", (safezoneX + 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "2.3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_Stabilize: RscPicture
+ {
+ shadow = 1;
+ idc = 1204;
+ text = "\A3\Ui_f\data\IGUI\Cfg\Actions\autohover_ca.paa";
+ x = "5.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_X"", (safezoneX + 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "2.4 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "0.8 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_HitZones: RscHitZones
+ {
+ idc = 111;
+ x = "0.1 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_X"", (safezoneX + 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "1.3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_VEHICLE_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "5.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1.9 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ xCount = 3;
+ yCount = 2;
+ xSpace = "0.1 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ ySpace = "0.1 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ };
+ class CA_Radar: RscControlsGroupNoScrollbars
+ {
+ idc = 2301;
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_RADAR_X"", (safezoneX + safezoneW / 2 - 2.8 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable [""IGUI_GRID_RADAR_Y"", (safezoneY + 0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])";
+ w = "5.6 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "5.6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ class controls
+ {
+ class CA_RadarBackground: RscPicture
+ {
+ colorText[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])","(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"};
+ idc = 1200;
+ text = "A3\Ui_f\data\igui\cfg\radar\radarBackground_ca.paa";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "5.6 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "5.6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_RadarIcon: RscPicture
+ {
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ idc = 250;
+ x = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "2.3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_Heading: RscText
+ {
+ idc = 148;
+ style = 2;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ text = " 359";
+ x = "1.8 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "4.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ };
+ };
+ class CA_Zeroing: RscText
+ {
+ idc = 168;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_WEAPON_X"", ((safezoneX + safezoneW) - (12.4 * ( ((safezoneW / safezoneH) min 1.2) / 40)) - 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2)) + 18 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20))";
+ w = "3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class CA_Speed_Freefall: RscIGUIValue
+ {
+ idc = 380;
+ style = 1;
+ colorText[] = {0.95,0.95,0.95,1};
+ x = 0.258;
+ y = "0.015 + SafeZoneY";
+ w = 0.12;
+ };
+ class CA_Alt_Freefall: RscIGUIValue
+ {
+ idc = 382;
+ style = 0;
+ colorText[] = {0.95,0.95,0.95,1};
+ x = 0.644;
+ y = "0.015 + SafeZoneY";
+ w = 0.12;
+ };
+ class CA_TextFlaresMode: RscIGUIText
+ {
+ idc = 152;
+ style = 0;
+ sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
+ x = "0.078 + SafeZoneX";
+ y = "0.012 + SafeZoneY";
+ w = "0.161*SafezoneW";
+ };
+ class CA_TextFlares: RscIGUIValue
+ {
+ idc = 151;
+ style = 1;
+ sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
+ x = "0.078 + SafeZoneX";
+ y = "0.012 + SafeZoneY";
+ w = "0.161*SafezoneW";
+ };
+ };
+ class RscStanceInfo
+ {
+ idd = 303;
+ onLoad = "[""onLoad"",_this,""RscStanceInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
+ onUnload = "[""onUnload"",_this,""RscStanceInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
+ controls[] = {"StanceIndicatorBackground","StanceIndicator"};
+ class StanceIndicatorBackground: RscPicture
+ {
+ colorText[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])","(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"};
+ idc = 1201;
+ text = "\A3\Ui_f\data\IGUI\RscIngameUI\RscUnitInfo\gradient_ca.paa";
+ x = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_WEAPON_X"", ((safezoneX + safezoneW) - (12.4 * ( ((safezoneW / safezoneH) min 1.2) / 40)) - 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2)) + 18 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20))";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "3.7 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class StanceIndicator: RscPictureKeepAspect
+ {
+ idc = 188;
+ text = "\A3\Ui_f\data\IGUI\RscIngameUI\RscUnitInfo\SI_stand_ca.paa";
+ x = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_WEAPON_X"", ((safezoneX + safezoneW) - (12.4 * ( ((safezoneW / safezoneH) min 1.2) / 40)) - 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2)) + 18 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20))";
+ w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ };
+ class RscUnitInfoNoHUD
+ {
+ idd = 300;
+ movingEnable = 0;
+ };
+ class RscUnitInfoSoldier: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"WeaponInfoControlsGroupLeft","CA_Speed_Freefall","CA_Alt_Freefall"};
+ };
+ class RscUnitInfoTank: RscUnitInfo
+ {
+ idd = 300;
+ updateWidthByWeapon = 0;
+ updateHeightByCrew = 0;
+ updateWidthByCrew = 0;
+ controls[] = {"WeaponInfoControlsGroupRight","CA_Zeroing","CA_BackgroundVehicle","CA_BackgroundVehicleTitle","CA_BackgroundVehicleTitleDark","CA_BackgroundFuel","CA_Vehicle","CA_VehicleRole","CA_HitZones","CA_SpeedBackground","CA_SpeedUnits","CA_Speed","CA_ValueFuel","CA_Radar"};
+ };
+ class CA_HUDRscControlsGroup: RscControlsGroup
+ {
+ class VScrollbar: VScrollbar
+ {
+ autoScrollSpeed = -1;
+ autoScrollDelay = 5;
+ autoScrollRewind = 0;
+ color[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ width = 0.001;
+ };
+ class HScrollbar: HScrollbar
+ {
+ color[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ height = 0.001;
+ };
+ };
+ class RscUnitInfoAir: RscUnitInfo
+ {
+ controls[] = {"WeaponInfoControlsGroupRight","CA_BackgroundVehicle","CA_BackgroundVehicleTitle","CA_BackgroundVehicleTitleDark","CA_BackgroundFuel","CA_Vehicle","CA_VehicleRole","CA_HitZones","CA_SpeedBackground","CA_SpeedUnits","CA_Speed","CA_ValueFuel","CA_AltBackground","CA_AltUnits","CA_Alt","CA_Stabilize","CA_Radar"};
+ };
+ class RscUnitInfo_AH64D_gunner
+ {
+ idd = 300;
+ controls[] = {"CA_Distance","CA_VisionMode","CA_FlirMode","CA_FOVMode","CA_Compass","CA_Heading","CA_Autohover","CA_BalisticComputer","CA_BallRange","CA_LaserMarker","CA_WeaponZeroingText","CA_WeaponZeroing"};
+ class CA_Distance: RscOpticsValue
+ {
+ idc = 151;
+ x = 0.438;
+ y = 0.908;
+ w = 0.123;
+ style = 2;
+ };
+ class CA_LaserMarker: RscOpticsText
+ {
+ idc = 158;
+ x = 0.27;
+ y = 0.908;
+ w = 0.154;
+ text = "LASE TRGT";
+ };
+ class CA_BallRange: RscOpticsValue
+ {
+ idc = 164;
+ x = 0.626;
+ y = 0.908;
+ w = 0.3;
+ };
+ class CA_BalisticComputer: RscOpticsText
+ {
+ idc = 165;
+ x = 0.594;
+ y = 0.908;
+ text = "*";
+ sizeEx = 0.06;
+ };
+ class CA_FOVMode: RscOpticsText
+ {
+ idc = 154;
+ x = 0.052;
+ y = 0.248;
+ };
+ class CA_VisionMode: RscOpticsText
+ {
+ idc = 152;
+ x = 0.052;
+ y = 0.296;
+ };
+ class CA_Autohover: RscOpticsText
+ {
+ idc = 157;
+ x = 0.664;
+ y = 0.248;
+ style = 1;
+ text = "HOV";
+ };
+ class CA_FlirMode: RscOpticsText
+ {
+ idc = 153;
+ x = 0.664;
+ y = 0.296;
+ style = 1;
+ };
+ class CA_Compass: RscOpticsText
+ {
+ idc = 155;
+ x = 0;
+ y = 0.7;
+ w = 0.3;
+ h = 0.05;
+ };
+ class CA_Heading: RscOpticsText
+ {
+ idc = 156;
+ x = 0;
+ y = 0.75;
+ w = 0.3;
+ h = 0.05;
+ };
+ };
+ class RscUnitVehicle
+ {
+ idd = 300;
+ updateWidthByWeapon = 0;
+ updateHeightByCrew = 0;
+ updateWidthByCrew = 0;
+ controls[] = {"WeaponInfoControlsGroupRight","CA_Zeroing","CA_BackgroundVehicle","CA_BackgroundVehicleTitle","CA_BackgroundVehicleTitleDark","CA_BackgroundFuel","CA_Vehicle","CA_VehicleRole","CA_HitZones","CA_SpeedBackground","CA_SpeedUnits","CA_Speed","CA_ValueFuel","CA_AltBackground","CA_AltUnits","CA_Alt","CA_Stabilize"};
+ };
+ class RscUnitInfoUAV
+ {
+ idd = 300;
+ controls[] = {"WeaponInfoControlsGroupRight","CA_BackgroundVehicle","CA_BackgroundVehicleTitle","CA_BackgroundVehicleTitleDark","CA_BackgroundFuel","CA_Vehicle","CA_VehicleRole","CA_HitZones","CA_SpeedBackground","CA_SpeedUnits","CA_Speed","CA_ValueFuel","CA_AltBackground","CA_AltUnits","CA_Alt","CA_Stabilize","CA_Radar","RscTextUAV","TextPosition","Position","TextZoom","Zoom","Time","Date"};
+ class RscTextUAV: RscText
+ {
+ x = "safezoneX";
+ y = "safezoneY";
+ w = "safezoneW";
+ h = "safezoneH";
+ colorbackground[] = {0,0,0,0};
+ type = 0;
+ IDC = 1004;
+ linespacing = 1;
+ text = "";
+ style = "0x00 + 0x10 + 0x200";
+ };
+ class TextPosition: RscTextUAV
+ {
+ text = "GRID";
+ x = "0.5 + 0.13 * safezoneW * 2 + 0.05 / 2";
+ y = "SafeZoneY + SafezoneH - 0.12";
+ h = 0.05;
+ w = "safezoneW - ((safezoneW - 1) / 2 + (0.5 + 0.13 * safezoneW * 2 + 0.05 / 2))";
+ style = "0x00 + 0x100 + 0x200";
+ colortext[] = {1,1,1,1};
+ font = "EtelkaMonospacePro";
+ sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)*1";
+ };
+ class Position: TextPosition
+ {
+ idc = 130;
+ x = "0.5 + 0.13 * safezoneW * 2 + 0.05 / 2";
+ y = "SafeZoneY + SafezoneH - 0.12";
+ style = "0x01 + 0x100";
+ };
+ class TextZoom: TextPosition
+ {
+ text = "ZOOM";
+ y = "SafeZoneY + SafezoneH - 0.08";
+ };
+ class Zoom: Position
+ {
+ idc = 131;
+ y = "SafeZoneY + SafezoneH - 0.08";
+ };
+ class Time: TextPosition
+ {
+ idc = 101;
+ style = "0x02 + 0x100 + 0x200";
+ x = "0.5 - 0.2";
+ y = "SafeZoneY + SafezoneH - 0.12";
+ w = 0.4;
+ sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)*1 * 1.5";
+ };
+ class Date: Time
+ {
+ idc = 102;
+ y = "SafeZoneY + SafezoneH - 0.09";
+ sizeEx = "0.024*1.2";
+ };
+ };
+ class RscUnitInfoSubmarine: RscUnitInfo
+ {
+ idd = 300;
+ updateWidthByWeapon = 0;
+ updateHeightByCrew = 0;
+ updateWidthByCrew = 0;
+ controls[] = {"WeaponInfoControlsGroupRight","CA_BackgroundVehicle","CA_BackgroundVehicleTitle","CA_BackgroundVehicleTitleDark","CA_BackgroundFuel","CA_Vehicle","CA_VehicleRole","CA_HitZones","CA_SpeedBackground","CA_SpeedUnits","CA_Speed","CA_ValueFuel","CA_AltBackground","CA_AltUnits","CA_Depth"};
+ };
+ class RscUnitInfoShip: RscUnitInfo
+ {
+ idd = 300;
+ updateWidthByWeapon = 0;
+ updateHeightByCrew = 0;
+ updateWidthByCrew = 0;
+ controls[] = {"WeaponInfoControlsGroupRight","CA_Zeroing","CA_BackgroundVehicle","CA_BackgroundVehicleTitle","CA_BackgroundVehicleTitleDark","CA_BackgroundFuel","CA_Vehicle","CA_VehicleRole","CA_HitZones","CA_SpeedBackground","CA_SpeedUnits","CA_Speed","CA_ValueFuel","CA_Radar"};
+ };
+ class RscWeaponEmpty
+ {
+ idd = 300;
+ controls[] = {};
+ };
+ class RscWeaponRangeFinder
+ {
+ idd = 300;
+ controls[] = {"CA_Distance"};
+ class CA_Distance: RscOpticsValue
+ {
+ idc = 151;
+ style = 2;
+ sizeEx = "0.028*SafezoneH";
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ x = 0.4;
+ y = "(SafezoneY+SafezoneH*0.665)";
+ w = 0.2;
+ h = "0.05*SafezoneH";
+ };
+ };
+ class RscWeaponRangeArtillery
+ {
+ idd = 300;
+ controls[] = {"CA_IGUI_elements_group","CA_RangeElements_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_Heading: RscText
+ {
+ idc = 156;
+ style = 0;
+ colorText[] = {0.706,0.0745,0.0196,1};
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "015";
+ x = "25.3 * (0.01875 * SafezoneH)";
+ y = "6.3 * (0.025 * SafezoneH)";
+ w = "2.2 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class CA_OpticsPitch: RscText
+ {
+ idc = 182;
+ style = 1;
+ colorText[] = {0.706,0.0745,0.0196,1};
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "34.5";
+ x = "11.8 * (0.01875 * SafezoneH)";
+ y = "19.46 * (0.025 * SafezoneH)";
+ w = "3.5 * (0.01875 * SafezoneH)";
+ h = "1.1 * (0.025 * SafezoneH)";
+ };
+ class CA_OpticsZoom: RscText
+ {
+ idc = 180;
+ style = 1;
+ colorText[] = {0.706,0.0745,0.0196,1};
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "4.5";
+ x = "38.3 * (0.01875 * SafezoneH)";
+ y = "19.46 * (0.025 * SafezoneH)";
+ w = "3.5 * (0.01875 * SafezoneH)";
+ h = "1.1 * (0.025 * SafezoneH)";
+ };
+ class CA_Solution_text: RscText
+ {
+ style = 0;
+ sizeEx = "0.028*SafezoneH";
+ colorText[] = {0.95,0.95,0.95,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1011;
+ text = "SOLUTION";
+ x = "10.8 * (0.01875 * SafezoneH)";
+ y = "27.8 * (0.025 * SafezoneH)";
+ w = "7.5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class CA_distance_text: RscText
+ {
+ style = 0;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.95,0.95,0.95,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1010;
+ text = "RNG";
+ x = "10.8 * (0.01875 * SafezoneH)";
+ y = "29.3 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Distance: RscText
+ {
+ idc = 173;
+ style = 1;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "2456";
+ x = "13.8 * (0.01875 * SafezoneH)";
+ y = "29.3 * (0.025 * SafezoneH)";
+ w = "5.2 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_time_text: RscText
+ {
+ style = 0;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.95,0.95,0.95,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1012;
+ text = "TRV";
+ x = "10.8 * (0.01875 * SafezoneH)";
+ y = "30.8 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Time: RscText
+ {
+ idc = 174;
+ style = 1;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "25";
+ x = "13.8 * (0.01875 * SafezoneH)";
+ y = "30.8 * (0.025 * SafezoneH)";
+ w = "5.2 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_ElevCtrl_text: RscText
+ {
+ style = 0;
+ sizeEx = "0.028*SafezoneH";
+ colorText[] = {0.95,0.95,0.95,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1015;
+ text = "ELEV CTRL";
+ x = "33.8 * (0.01875 * SafezoneH)";
+ y = "27.8 * (0.025 * SafezoneH)";
+ w = "7.5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class CA_Elev_text: RscText
+ {
+ style = 0;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.95,0.95,0.95,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1013;
+ text = "ELV";
+ x = "33.8 * (0.01875 * SafezoneH)";
+ y = "29.3 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Elev: RscText
+ {
+ idc = 175;
+ style = 1;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "80.5";
+ x = "36.8 * (0.01875 * SafezoneH)";
+ y = "29.3 * (0.025 * SafezoneH)";
+ w = "5.2 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Elev_Need_text: RscText
+ {
+ style = 0;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.95,0.95,0.95,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1014;
+ text = "REL";
+ x = "33.8 * (0.01875 * SafezoneH)";
+ y = "30.8 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Elev_Need: RscText
+ {
+ idc = 176;
+ style = 1;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "35.4";
+ x = "36.8 * (0.01875 * SafezoneH)";
+ y = "30.8 * (0.025 * SafezoneH)";
+ w = "5.2 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode: RscText
+ {
+ idc = 179;
+ style = 0;
+ sizeEx = "0.028*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "VIS";
+ x = "10.5 * (0.01875 * SafezoneH)";
+ y = "32.6 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_RangeElements_group: RscControlsGroup
+ {
+ idc = 177;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_OORange: RscText
+ {
+ style = 2;
+ sizeEx = "0.028*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1007;
+ text = "[RANGE]";
+ x = "24.5 * (0.01875 * SafezoneH)";
+ y = "32.6 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_OORangeCross: RscText
+ {
+ style = "0x30 + 0x800";
+ sizeEx = "0.36*SafezoneH";
+ shadow = 0;
+ idc = 1009;
+ text = "A3\weapons_f\acc\Data\reticle_mk6_outofrange_CA.paa";
+ x = "20.5 * (0.01875 * SafezoneH)";
+ y = "14 * (0.025 * SafezoneH)";
+ w = "12.5 * (0.01875 * SafezoneH)";
+ h = "12 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscWeaponRangeArtilleryAuto
+ {
+ idd = 300;
+ controls[] = {"CA_IGUI_elements_group","CA_RangeElements_group","CA_AutoElements_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_Heading: RscText
+ {
+ idc = 156;
+ style = 0;
+ colorText[] = {0.706,0.0745,0.0196,1};
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "015";
+ x = "25.3 * (0.01875 * SafezoneH)";
+ y = "6.3 * (0.025 * SafezoneH)";
+ w = "2.2 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class CA_OpticsPitch: RscText
+ {
+ idc = 182;
+ style = 1;
+ colorText[] = {0.706,0.0745,0.0196,1};
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "34.5";
+ x = "11.8 * (0.01875 * SafezoneH)";
+ y = "19.46 * (0.025 * SafezoneH)";
+ w = "3.5 * (0.01875 * SafezoneH)";
+ h = "1.1 * (0.025 * SafezoneH)";
+ };
+ class CA_OpticsZoom: RscText
+ {
+ idc = 180;
+ style = 1;
+ colorText[] = {0.706,0.0745,0.0196,1};
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "4.5";
+ x = "38.3 * (0.01875 * SafezoneH)";
+ y = "19.46 * (0.025 * SafezoneH)";
+ w = "3.5 * (0.01875 * SafezoneH)";
+ h = "1.1 * (0.025 * SafezoneH)";
+ };
+ class CA_Solution_text: RscText
+ {
+ style = 0;
+ sizeEx = "0.028*SafezoneH";
+ colorText[] = {0.95,0.95,0.95,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1011;
+ text = "SOLUTION";
+ x = "10.8 * (0.01875 * SafezoneH)";
+ y = "27.8 * (0.025 * SafezoneH)";
+ w = "7.5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class CA_distance_text: RscText
+ {
+ style = 0;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.95,0.95,0.95,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1010;
+ text = "RNG";
+ x = "10.8 * (0.01875 * SafezoneH)";
+ y = "29.3 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Distance: RscText
+ {
+ idc = 173;
+ style = 1;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "2456";
+ x = "13.8 * (0.01875 * SafezoneH)";
+ y = "29.3 * (0.025 * SafezoneH)";
+ w = "5.2 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_time_text: RscText
+ {
+ style = 0;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.95,0.95,0.95,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1012;
+ text = "TRV";
+ x = "10.8 * (0.01875 * SafezoneH)";
+ y = "30.8 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Time: RscText
+ {
+ idc = 174;
+ style = 1;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "25";
+ x = "13.8 * (0.01875 * SafezoneH)";
+ y = "30.8 * (0.025 * SafezoneH)";
+ w = "5.2 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_ElevCtrl_text: RscText
+ {
+ style = 0;
+ sizeEx = "0.028*SafezoneH";
+ colorText[] = {0.95,0.95,0.95,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1015;
+ text = "ELEV CTRL";
+ x = "33.8 * (0.01875 * SafezoneH)";
+ y = "27.8 * (0.025 * SafezoneH)";
+ w = "7.5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class CA_Elev_text: RscText
+ {
+ style = 0;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.95,0.95,0.95,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1013;
+ text = "ELV";
+ x = "33.8 * (0.01875 * SafezoneH)";
+ y = "29.3 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Elev: RscText
+ {
+ idc = 175;
+ style = 1;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "-80.5";
+ x = "36.8 * (0.01875 * SafezoneH)";
+ y = "29.3 * (0.025 * SafezoneH)";
+ w = "5.2 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Elev_Need_text: RscText
+ {
+ style = 0;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.95,0.95,0.95,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1014;
+ text = "REL";
+ x = "33.8 * (0.01875 * SafezoneH)";
+ y = "30.8 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Elev_Need: RscText
+ {
+ idc = 176;
+ style = 1;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "-35.4";
+ x = "36.8 * (0.01875 * SafezoneH)";
+ y = "30.8 * (0.025 * SafezoneH)";
+ w = "5.2 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode: RscText
+ {
+ idc = 179;
+ style = 0;
+ sizeEx = "0.028*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "VIS";
+ x = "10.5 * (0.01875 * SafezoneH)";
+ y = "32.6 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_RangeElements_group: RscControlsGroup
+ {
+ idc = 177;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_OORange: RscText
+ {
+ style = 2;
+ sizeEx = "0.028*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1007;
+ text = "[RANGE]";
+ x = "24.5 * (0.01875 * SafezoneH)";
+ y = "32.6 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_OORangeCross: RscText
+ {
+ style = "0x30 + 0x800";
+ sizeEx = "0.36*SafezoneH";
+ shadow = 0;
+ idc = 1009;
+ text = "A3\weapons_f\acc\Data\reticle_mk6_outofrange_CA.paa";
+ x = "20.5 * (0.01875 * SafezoneH)";
+ y = "14 * (0.025 * SafezoneH)";
+ w = "12.5 * (0.01875 * SafezoneH)";
+ h = "12 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_AutoElements_group: RscControlsGroup
+ {
+ idc = 178;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_Auto: RscText
+ {
+ style = 1;
+ sizeEx = "0.028*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1016;
+ text = "AUTO";
+ x = "38.7 * (0.01875 * SafezoneH)";
+ y = "32.6 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscWeaponRangeFinderPAS13
+ {
+ idd = 300;
+ controls[] = {"CA_Distance"};
+ class CA_Distance: RscOpticsValue
+ {
+ idc = 151;
+ style = 2;
+ sizeEx = "0.038*SafezoneH";
+ x = 0.4;
+ y = "(SafezoneY+SafezoneH*0.8)";
+ w = 0.207;
+ h = "0.05*SafezoneH";
+ };
+ };
+ class RscOptics_Rangefinder: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_IGUI_elements_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 1;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "2456";
+ x = "45.5 * (0.01875 * SafezoneH)";
+ y = "19.5 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode: RscText
+ {
+ idc = 179;
+ style = 0;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "VIS";
+ x = "6.7 * (0.01875 * SafezoneH)";
+ y = "19.5 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Heading: RscText
+ {
+ idc = 156;
+ style = 0;
+ sizeEx = "0.0285*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "023";
+ x = "25.3 * (0.01875 * SafezoneH)";
+ y = "9.5 * (0.025 * SafezoneH)";
+ w = "3.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_LaserDesignator
+ {
+ idd = 300;
+ controls[] = {"CA_IGUI_elements_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_OpticsZoom: RscText
+ {
+ idc = 180;
+ style = 1;
+ colorText[] = {0.706,0.0745,0.0196,1};
+ sizeEx = "0.038*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "4.5";
+ x = "43.85 * (0.01875 * SafezoneH)";
+ y = "19.6 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.1 * (0.025 * SafezoneH)";
+ };
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 0;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "2456";
+ x = "24.5 * (0.01875 * SafezoneH)";
+ y = "3 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1.5 * (0.025 * SafezoneH)";
+ };
+ class CA_Elev: RscText
+ {
+ idc = 175;
+ style = 1;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "80.5";
+ x = "32.7 * (0.01875 * SafezoneH)";
+ y = "3 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.5 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode: RscText
+ {
+ idc = 179;
+ style = 0;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "VIS";
+ x = "6.5 * (0.01875 * SafezoneH)";
+ y = "19.6 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1.1 * (0.025 * SafezoneH)";
+ };
+ class CA_Laser: RscText
+ {
+ idc = 158;
+ style = "0x30 + 0x800";
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "\A3\ui_f\data\igui\rscingameui\rscoptics\laser_designator_iconLaserOn.paa";
+ x = "29.2 * (0.01875 * SafezoneH)";
+ y = "3 * (0.025 * SafezoneH)";
+ w = "3.5 * (0.01875 * SafezoneH)";
+ h = "1.5 * (0.025 * SafezoneH)";
+ };
+ class CA_Heading: RscText
+ {
+ idc = 156;
+ style = 0;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "023";
+ x = "16.1 * (0.01875 * SafezoneH)";
+ y = "3 * (0.025 * SafezoneH)";
+ w = "3.5 * (0.01875 * SafezoneH)";
+ h = "1.6 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscWeaponRangeFinderMAAWS
+ {
+ idd = 300;
+ controls[] = {"CA_IGUI_elements_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ x = "SafezoneX";
+ y = "SafezoneY";
+ w = "SafezoneW";
+ h = "SafezoneH";
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ autoScrollSpeed = -1;
+ autoScrollDelay = 5;
+ autoScrollRewind = 0;
+ color[] = {1,1,1,0};
+ width = 0.001;
+ };
+ class HScrollbar: HScrollbar
+ {
+ color[] = {1,1,1,0};
+ height = 0.001;
+ };
+ class Controls
+ {
+ class CA_Distance: RscOpticsValue
+ {
+ idc = 151;
+ style = 2;
+ shadow = 0;
+ colorText[] = {0.8196,0.1412,0.1412,1.0};
+ sizeEx = "0.038*SafezoneH";
+ x = "0.4-SafeZoneX";
+ y = "SafezoneH*0.8";
+ w = 0.207;
+ h = "0.05*SafezoneH";
+ };
+ };
+ };
+ };
+ class RscWeaponRangeFinderAbramsCom
+ {
+ idd = 300;
+ controls[] = {"CA_Distance"};
+ class CA_Distance: RscOpticsValue
+ {
+ idc = 151;
+ style = 2;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.8706,0.2275,0.2,1.0};
+ x = 0.4;
+ y = "(SafezoneY+SafezoneH*0.8)";
+ w = 0.207;
+ h = "0.05*SafezoneH";
+ };
+ };
+ class RscWeaponRangeFinderAbramsGun
+ {
+ idd = 300;
+ controls[] = {"CA_Distance"};
+ class CA_Distance: RscOpticsValue
+ {
+ idc = 151;
+ style = 2;
+ sizeEx = "0.038*SafezoneH";
+ x = 0.4;
+ y = "(SafezoneY+SafezoneH*0.8)";
+ w = 0.207;
+ h = "0.05*SafezoneH";
+ };
+ };
+ class RscWeaponRangeFinderStrykerMGSGun
+ {
+ idd = 300;
+ controls[] = {"CA_Distance"};
+ class CA_Distance: RscOpticsValue
+ {
+ idc = 151;
+ style = 2;
+ sizeEx = "0.038*SafezoneH";
+ x = 0.4;
+ y = "(SafezoneY+SafezoneH*0.8)";
+ w = 0.207;
+ h = "0.05*SafezoneH";
+ };
+ };
+ class RscOptics_crows: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_Zeroing","CA_IGUI_elements_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 0;
+ sizeEx = "0.03*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,0.6};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "2456";
+ x = "31.5 * (0.01875 * SafezoneH)";
+ y = "28.2 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode: RscText
+ {
+ idc = 179;
+ style = 0;
+ sizeEx = "0.03*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,0.6};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "VIS";
+ x = "31.5 * (0.01875 * SafezoneH)";
+ y = "29.5 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class CA_FlirMode: RscText
+ {
+ idc = 153;
+ style = 0;
+ sizeEx = "0.03*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,0.6};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "BHOT";
+ x = "33.5 * (0.01875 * SafezoneH)";
+ y = "29.5 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class CA_distance_text: RscText
+ {
+ style = 0;
+ sizeEx = "0.03*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,0.6};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1003;
+ text = "RANGE:";
+ x = "27 * (0.01875 * SafezoneH)";
+ y = "28.2 * (0.025 * SafezoneH)";
+ w = "5.5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode_text: RscText
+ {
+ style = 0;
+ sizeEx = "0.03*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,0.6};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1004;
+ text = "MODE:";
+ x = "27 * (0.01875 * SafezoneH)";
+ y = "29.5 * (0.025 * SafezoneH)";
+ w = "5.5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_strider_commander
+ {
+ idd = 300;
+ controls[] = {"CA_IGUI_elements_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_OpticsZoom: RscText
+ {
+ idc = 180;
+ style = 1;
+ colorText[] = {0.706,0.0745,0.0196,1};
+ sizeEx = "0.038*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "4.5";
+ x = "43.85 * (0.01875 * SafezoneH)";
+ y = "19.6 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.1 * (0.025 * SafezoneH)";
+ };
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 0;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "2456";
+ x = "24.5 * (0.01875 * SafezoneH)";
+ y = "3 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1.5 * (0.025 * SafezoneH)";
+ };
+ class CA_Elev: RscText
+ {
+ idc = 175;
+ style = 1;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "80.5";
+ x = "32.7 * (0.01875 * SafezoneH)";
+ y = "3 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.5 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode: RscText
+ {
+ idc = 179;
+ style = 0;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "VIS";
+ x = "6.5 * (0.01875 * SafezoneH)";
+ y = "19.6 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1.1 * (0.025 * SafezoneH)";
+ };
+ class CA_Laser: RscText
+ {
+ idc = 158;
+ style = "0x30 + 0x800";
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "\A3\ui_f\data\igui\rscingameui\rscoptics\laser_designator_iconLaserOn.paa";
+ x = "29.2 * (0.01875 * SafezoneH)";
+ y = "3 * (0.025 * SafezoneH)";
+ w = "3.5 * (0.01875 * SafezoneH)";
+ h = "1.5 * (0.025 * SafezoneH)";
+ };
+ class CA_Heading: RscText
+ {
+ idc = 156;
+ style = 0;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "023";
+ x = "16.1 * (0.01875 * SafezoneH)";
+ y = "3 * (0.025 * SafezoneH)";
+ w = "3.5 * (0.01875 * SafezoneH)";
+ h = "1.6 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscWeaponZeroing: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_Zeroing"};
+ class CA_Zeroing: RscText
+ {
+ idc = 168;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_WEAPON_X"", ((safezoneX + safezoneW) - (12.4 * ( ((safezoneW / safezoneH) min 1.2) / 40)) - 0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40))])";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2)) + 18 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20))";
+ w = "3 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ };
+ class RscWeaponRangeZeroing: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_Zeroing","CA_DistanceText","CA_Distance"};
+ class CA_DistanceText: RscOpticsText
+ {
+ idc = -1;
+ style = 2;
+ colorText[] = {1,0,0,1};
+ x = 0;
+ y = "(SafezoneY+SafezoneH) - 0.05";
+ w = 1;
+ h = 0.05;
+ };
+ class CA_Distance: RscOpticsValue
+ {
+ idc = 151;
+ style = 2;
+ colorText[] = {1,0.15,0.15,0.65};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ x = 0;
+ y = "(SafezoneY+SafezoneH) - 0.195";
+ w = 1;
+ h = 0.05;
+ };
+ };
+ class RscOptics_sos: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_IGUI_elements_group","CA_Sniper_WFOV_mode_group","CA_Sniper_NFOV_mode_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 0;
+ sizeEx = "0.036*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ x = "40.35 * (0.01875 * SafezoneH)";
+ y = "19.7 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_Sniper_NFOV_mode_group: RscControlsGroup
+ {
+ idc = 162;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeNFOV: RscText
+ {
+ style = 1;
+ sizeEx = "0.036*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1002;
+ text = "NFOV";
+ x = "9.15 * (0.01875 * SafezoneH)";
+ y = "19.7 * (0.025 * SafezoneH)";
+ w = "3.9 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_Sniper_WFOV_mode_group: RscControlsGroup
+ {
+ idc = 163;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeWFOV: RscText
+ {
+ style = 1;
+ sizeEx = "0.036*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1001;
+ text = "WFOV";
+ x = "9.15 * (0.01875 * SafezoneH)";
+ y = "19.7 * (0.025 * SafezoneH)";
+ w = "3.9 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_nightstalker: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_IGUI_elements_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 0;
+ sizeEx = "0.045*SafezoneH";
+ colorText[] = {0,1,0,0.5};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "- - - -";
+ x = "38 * (0.01875 * SafezoneH)";
+ y = "19.1 * (0.025 * SafezoneH)";
+ w = "5.6 * (0.01875 * SafezoneH)";
+ h = "2 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode: RscText
+ {
+ idc = 179;
+ style = 0;
+ sizeEx = "0.045*SafezoneH";
+ colorText[] = {0,1,0,0.5};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "VIS";
+ x = "10.5 * (0.01875 * SafezoneH)";
+ y = "19.1 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "2 * (0.025 * SafezoneH)";
+ };
+ class CA_OpticsZoom: RscText
+ {
+ idc = 180;
+ style = 1;
+ sizeEx = "0.028*SafezoneH";
+ colorText[] = {0,1,0,0.5};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "5.5";
+ x = "38.8 * (0.01875 * SafezoneH)";
+ y = "20.8 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1.5 * (0.025 * SafezoneH)";
+ };
+ class CA_Bracket: RscText
+ {
+ idc = 181;
+ style = "0x30 + 0x800";
+ sizeEx = "0.035*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "A3\weapons_f\acc\Data\reticle_nightstalker_bracket_ca.paa";
+ x = "16.5 * (0.01875 * SafezoneH)";
+ y = "9.75 * (0.025 * SafezoneH)";
+ w = "20.5 * (0.01875 * SafezoneH)";
+ h = "20.5 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_tws: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_IGUI_elements_group","CA_WFOV_mode_group","CA_NFOV_mode_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 0;
+ sizeEx = "0.036*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "- - - -";
+ x = "24.75 * (0.01875 * SafezoneH)";
+ y = "33.2 * (0.025 * SafezoneH)";
+ w = "3.6 * (0.01875 * SafezoneH)";
+ h = "1.3 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode: RscText
+ {
+ idc = 152;
+ style = 0;
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "FLIR";
+ x = "8.8 * (0.01875 * SafezoneH)";
+ y = "18.7 * (0.025 * SafezoneH)";
+ w = "3.5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class CA_FlirMode: RscText
+ {
+ idc = 153;
+ style = 0;
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "BHOT";
+ x = "11.8 * (0.01875 * SafezoneH)";
+ y = "18.7 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_NFOV_mode_group: RscControlsGroup
+ {
+ idc = 162;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeNFOV: RscText
+ {
+ style = 1;
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1002;
+ text = "NFOV";
+ x = "41.7 * (0.01875 * SafezoneH)";
+ y = "18.7 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_WFOV_mode_group: RscControlsGroup
+ {
+ idc = 163;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeWFOV: RscText
+ {
+ style = 1;
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1001;
+ text = "WFOV";
+ x = "41.7 * (0.01875 * SafezoneH)";
+ y = "18.7 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class CA_BracketNFOV: RscText
+ {
+ style = "0x30 + 0x800";
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1005;
+ text = "A3\weapons_f\acc\Data\reticle_tws_bracket_ca.paa";
+ x = "17.75 * (0.01875 * SafezoneH)";
+ y = "11 * (0.025 * SafezoneH)";
+ w = "18 * (0.01875 * SafezoneH)";
+ h = "18 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_cows: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_WFOV_mode_group","CA_NFOV_mode_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls{};
+ };
+ class CA_NFOV_mode_group: RscControlsGroup
+ {
+ idc = 162;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_Distance_NFOV: RscText
+ {
+ idc = 183;
+ style = 0;
+ sizeEx = "0.06*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "0000";
+ x = "38.2 * (0.01875 * SafezoneH)";
+ y = "19.1 * (0.025 * SafezoneH)";
+ w = "8 * (0.01875 * SafezoneH)";
+ h = "2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_WFOV_mode_group: RscControlsGroup
+ {
+ idc = 163;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_Distance_WFOV: RscText
+ {
+ idc = 151;
+ style = 0;
+ sizeEx = "0.03*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "0000";
+ x = "31.45 * (0.01875 * SafezoneH)";
+ y = "19.6 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_titan
+ {
+ idd = 300;
+ controls[] = {"CA_javelin_elements_group"};
+ class CA_javelin_elements_group: RscControlsGroup
+ {
+ x = "SafezoneX";
+ y = "SafezoneY";
+ w = "SafezoneW";
+ h = "SafezoneH";
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ autoScrollSpeed = -1;
+ autoScrollDelay = 5;
+ autoScrollRewind = 0;
+ color[] = {1,1,1,0};
+ width = 0.001;
+ };
+ class HScrollbar: HScrollbar
+ {
+ color[] = {1,1,1,0};
+ height = 0.001;
+ };
+ class Controls
+ {
+ class CA_Javelin_Day_mode_off: RscPicture
+ {
+ idc = 1001;
+ x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.03/4)*3*SafezoneH - SafezoneX";
+ y = "SafezoneY+SafezoneH*0.031 - SafezoneY";
+ w = "0.1045752* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)";
+ h = "SafezoneH*0.1045752";
+ colorText[] = {0.2941,0.2941,0.2941,1.0};
+ text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\day_co.paa";
+ };
+ class CA_Javelin_Day_mode: CA_Javelin_Day_mode_off
+ {
+ idc = 160;
+ colorText[] = {0.2941,0.8745,0.2157,1.0};
+ };
+ class CA_Javelin_WFOV_mode_off: CA_Javelin_Day_mode_off
+ {
+ idc = 1004;
+ x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.307/4)*3*SafezoneH - SafezoneX";
+ text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\wfov_co.paa";
+ };
+ class CA_Javelin_WFOV_mode_group: RscControlsGroup
+ {
+ x = "SafezoneX";
+ y = "SafezoneY";
+ w = "SafezoneW";
+ h = "SafezoneH";
+ idc = 163;
+ class VScrollbar: VScrollbar
+ {
+ autoScrollSpeed = -1;
+ autoScrollDelay = 5;
+ autoScrollRewind = 0;
+ color[] = {1,1,1,0};
+ width = 0.001;
+ };
+ class HScrollbar: HScrollbar
+ {
+ color[] = {1,1,1,0};
+ height = 0.001;
+ };
+ class Controls
+ {
+ class CA_Javelin_WFOV_mode: CA_Javelin_WFOV_mode_off
+ {
+ idc = -1;
+ y = "0.031*SafeZoneH - SafezoneY";
+ x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.307/4)*3*SafezoneH - SafezoneX";
+ colorText[] = {0.2941,0.8745,0.2157,1.0};
+ };
+ };
+ };
+ class CA_Javelin_NFOV_mode_off: CA_Javelin_Day_mode_off
+ {
+ idc = 1003;
+ x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.586/4)*3*SafezoneH - SafezoneX";
+ text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\nfov_co.paa";
+ };
+ class CA_Javelin_NFOV_mode_group: RscControlsGroup
+ {
+ x = "SafezoneX";
+ y = "SafezoneY";
+ w = "SafezoneW-SafezoneX";
+ h = "SafezoneH-SafezoneY";
+ idc = 162;
+ class VScrollbar: VScrollbar
+ {
+ autoScrollSpeed = -1;
+ autoScrollDelay = 5;
+ autoScrollRewind = 0;
+ color[] = {1,1,1,0};
+ width = 0.001;
+ };
+ class HScrollbar: HScrollbar
+ {
+ color[] = {1,1,1,0};
+ height = 0.001;
+ };
+ class Controls
+ {
+ class CA_Javelin_NFOV_mode: CA_Javelin_NFOV_mode_off
+ {
+ idc = -1;
+ x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.586/4)*3*SafezoneH - SafezoneX";
+ y = "0.031*SafeZoneH - SafezoneY";
+ colorText[] = {0.2941,0.8745,0.2157,1.0};
+ };
+ };
+ };
+ class CA_Javelin_SEEK_off: CA_Javelin_Day_mode_off
+ {
+ x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.863/4)*3*SafezoneH - SafezoneX";
+ text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\seek_co.paa";
+ };
+ class CA_Javelin_SEEK: CA_Javelin_SEEK_off
+ {
+ idc = 166;
+ colorText[] = {0.2941,0.8745,0.2157,1.0};
+ };
+ class CA_Javelin_Missle_off: CA_Javelin_Day_mode_off
+ {
+ idc = 1032;
+ x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (-0.134/4)*3*SafezoneH - SafezoneX";
+ y = "(SafezoneY + 0.208*SafezoneH) - SafezoneY";
+ colorText[] = {0.2941,0.2941,0.2941,1.0};
+ text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\missle_co.paa";
+ };
+ class CA_Javelin_Missle: CA_Javelin_Missle_off
+ {
+ idc = 167;
+ colorText[] = {0.9255,0.5216,0.1216,1.0};
+ };
+ class CA_Javelin_CLU_off: CA_Javelin_Missle_off
+ {
+ idc = 1027;
+ y = "(SafezoneY + 0.436*SafezoneH) - SafezoneY";
+ text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\clu_co.paa";
+ };
+ class CA_Javelin_HangFire_off: CA_Javelin_Missle_off
+ {
+ idc = 1028;
+ y = "(SafezoneY + 0.669*SafezoneH) - SafezoneY";
+ text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\hangfire_co.paa";
+ };
+ class CA_Javelin_TOP_off: CA_Javelin_Day_mode_off
+ {
+ idc = 1006;
+ x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX";
+ y = "(SafezoneY + 0.208*SafezoneH) - SafezoneY";
+ text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\top_co.paa";
+ };
+ class CA_Javelin_DIR: CA_Javelin_Day_mode
+ {
+ idc = 1007;
+ x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX";
+ y = "(SafezoneY + 0.436*SafezoneH) - SafezoneY";
+ text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\dir_co.paa";
+ };
+ class CA_Javelin_FLTR_mode_off: CA_Javelin_Day_mode_off
+ {
+ idc = 1002;
+ x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX";
+ y = "(SafezoneY + 0.669*SafezoneH) - SafezoneY";
+ text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\fltr_co.paa";
+ };
+ class CA_Javelin_FLTR_mode: CA_Javelin_FLTR_mode_off
+ {
+ idc = 161;
+ colorText[] = {0.2941,0.8745,0.2157,1.0};
+ };
+ };
+ };
+ };
+ class RscOptics_punisher
+ {
+ idd = 300;
+ controls[] = {"CA_IGUI_elements_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ x = "SafezoneX + ((SafezoneW - SafezoneH) / 2)";
+ y = "SafezoneY";
+ w = "SafezoneH";
+ h = "SafezoneH";
+ class VScrollbar: VScrollbar
+ {
+ autoScrollSpeed = -1;
+ autoScrollDelay = 5;
+ autoScrollRewind = 0;
+ color[] = {1,1,1,0};
+ width = 0.001;
+ };
+ class HScrollbar: HScrollbar
+ {
+ color[] = {1,1,1,0};
+ height = 0.001;
+ };
+ class Controls
+ {
+ class CA_DistanceBackground: RscEdit
+ {
+ idc = -1;
+ sizeEx = "0.038*SafezoneH";
+ colorBackground[] = {0,0,0,0};
+ colorText[] = {0,0,0,0};
+ colorSelection[] = {0,0,0,0};
+ style = "0x01 + 0x40";
+ shadow = 0;
+ type = 0;
+ x = "0.3*SafezoneW";
+ y = "0.05*SafezoneH";
+ w = "0.112222 * safezoneH";
+ h = "0.0676503 * safezoneH";
+ };
+ class CA_Distance: RscOpticsValue
+ {
+ idc = 151;
+ style = 1;
+ colorText[] = {0.706,0.0745,0.0196,1};
+ sizeEx = "0.038*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ x = "0.41 * safezoneH";
+ y = "0.42 * safezoneH";
+ w = "0.09 * safezoneH";
+ h = "0.03 * safezoneH";
+ };
+ class CA_VisionMode: RscText
+ {
+ idc = 179;
+ style = 1;
+ colorText[] = {0.706,0.0745,0.0196,1};
+ sizeEx = "0.038*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ x = "0.72 * safezoneH";
+ y = "0.25 * safezoneH";
+ w = "0.12 * safezoneH";
+ h = "0.03 * safezoneH";
+ };
+ class A3_DEG_text: RscText
+ {
+ idc = -1;
+ style = 1;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ x = "0.72 * safezoneH";
+ y = "0.29 * safezoneH";
+ w = "0.12 * safezoneH";
+ h = "0.03 * safezoneH";
+ text = "DEG";
+ };
+ class CA_Elev: RscOpticsValue
+ {
+ idc = 175;
+ style = 1;
+ colorText[] = {0.706,0.0745,0.0196,1};
+ sizeEx = "0.038*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ x = "0.72 * safezoneH";
+ y = "0.33 * safezoneH";
+ w = "0.12 * safezoneH";
+ h = "0.03 * safezoneH";
+ };
+ class A3_FuseRange: RscText
+ {
+ idc = -1;
+ style = 1;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ x = "0.72 * safezoneH";
+ y = "0.48 * safezoneH";
+ w = "0.12 * safezoneH";
+ h = "0.03 * safezoneH";
+ text = "520";
+ };
+ };
+ };
+ };
+ class RscUnitInfoParachute: RscUnitInfo
+ {
+ idd = 300;
+ updateWidthByWeapon = 0;
+ updateHeightByCrew = 0;
+ updateWidthByCrew = 0;
+ controls[] = {"WeaponInfoControlsGroupRight","CA_BackgroundVehicle","CA_BackgroundVehicleTitle","CA_BackgroundVehicleTitleDark","CA_BackgroundFuel","CA_Vehicle","CA_VehicleRole","CA_HitZones","CA_SpeedBackground","CA_SpeedUnits","CA_Speed","CA_ValueFuel","CA_AltBackground","CA_AltUnits","CA_Alt","CA_Stabilize"};
+ };
+ class RscOptics_tws_sniper: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_IGUI_elements_group","CA_WFOV_mode_group","CA_NFOV_mode_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 0;
+ sizeEx = "0.036*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "- - - -";
+ x = "24.75 * (0.01875 * SafezoneH)";
+ y = "31.5 * (0.025 * SafezoneH)";
+ w = "3.6 * (0.01875 * SafezoneH)";
+ h = "1.3 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode: RscText
+ {
+ idc = 152;
+ style = 0;
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "FLIR";
+ x = "8.8 * (0.01875 * SafezoneH)";
+ y = "18.7 * (0.025 * SafezoneH)";
+ w = "3.5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class CA_FlirMode: RscText
+ {
+ idc = 153;
+ style = 0;
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "BHOT";
+ x = "11.8 * (0.01875 * SafezoneH)";
+ y = "18.7 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_NFOV_mode_group: RscControlsGroup
+ {
+ idc = 162;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeNFOV: RscText
+ {
+ style = 1;
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1002;
+ text = "NFOV";
+ x = "41.7 * (0.01875 * SafezoneH)";
+ y = "18.7 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_WFOV_mode_group: RscControlsGroup
+ {
+ idc = 163;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeWFOV: RscText
+ {
+ style = 1;
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1001;
+ text = "WFOV";
+ x = "41.7 * (0.01875 * SafezoneH)";
+ y = "18.7 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class CA_BracketNFOV: RscText
+ {
+ style = "0x30 + 0x800";
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1005;
+ text = "A3\weapons_f\acc\Data\reticle_tws_bracket_ca.paa";
+ x = "17.75 * (0.01875 * SafezoneH)";
+ y = "11 * (0.025 * SafezoneH)";
+ w = "18 * (0.01875 * SafezoneH)";
+ h = "18 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_tws_mg: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_IGUI_elements_group","CA_WFOV_mode_group","CA_NFOV_mode_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_VisionMode: RscText
+ {
+ idc = 152;
+ style = 0;
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "FLIR";
+ x = "8.8 * (0.01875 * SafezoneH)";
+ y = "18.7 * (0.025 * SafezoneH)";
+ w = "3.5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class CA_FlirMode: RscText
+ {
+ idc = 153;
+ style = 0;
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "BHOT";
+ x = "11.8 * (0.01875 * SafezoneH)";
+ y = "18.7 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_NFOV_mode_group: RscControlsGroup
+ {
+ idc = 162;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeNFOV: RscText
+ {
+ style = 1;
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1002;
+ text = "NFOV";
+ x = "41.7 * (0.01875 * SafezoneH)";
+ y = "18.7 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_WFOV_mode_group: RscControlsGroup
+ {
+ idc = 163;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeWFOV: RscText
+ {
+ style = 1;
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1001;
+ text = "WFOV";
+ x = "41.7 * (0.01875 * SafezoneH)";
+ y = "18.7 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class CA_BracketNFOV: RscText
+ {
+ style = "0x30 + 0x800";
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1005;
+ text = "A3\weapons_f\acc\Data\reticle_tws_bracket_ca.paa";
+ x = "17.75 * (0.01875 * SafezoneH)";
+ y = "11 * (0.025 * SafezoneH)";
+ w = "18 * (0.01875 * SafezoneH)";
+ h = "18 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_SDV_driver: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"DriverOpticsGroup","WeaponInfoControlsGroupRight","CA_BackgroundVehicle","CA_BackgroundVehicleTitle","CA_BackgroundVehicleTitleDark","CA_BackgroundFuel","CA_Vehicle","CA_VehicleRole","CA_HitZones","CA_SpeedBackground","CA_SpeedUnits","CA_Speed","CA_ValueFuel","CA_Radar","CA_AltBackground","CA_AltUnits","CA_Depth"};
+ class DriverOpticsGroup: RscControlsGroup
+ {
+ idc = 392;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class ValuePitch: RscText
+ {
+ idc = 393;
+ style = 0;
+ colorText[] = {0.706,0.0745,0.0196,1};
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ x = "39 * (0.01875 * SafezoneH)";
+ y = "19.54 * (0.025 * SafezoneH)";
+ w = "3.5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class AnalogueHorizon: RscLadderPicture
+ {
+ idc = 383;
+ topValue = 90;
+ bottomValue = -90;
+ visibleRange = 0.25;
+ text = "A3\weapons_F_Beta\reticle\data\reticle_horizon_CA.paa";
+ x = "22.5 * (0.01875 * SafezoneH)";
+ y = "11 * (0.025 * SafezoneH)";
+ w = "8 * (0.01875 * SafezoneH)";
+ h = "18 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_SDV_periscope
+ {
+ idd = 300;
+ controls[] = {"CA_IGUI_elements_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_Elev: RscText
+ {
+ idc = 175;
+ style = 1;
+ sizeEx = "0.02*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "80.5";
+ x = "30.2 * (0.01875 * SafezoneH)";
+ y = "21.2 * (0.025 * SafezoneH)";
+ w = "2.5 * (0.01875 * SafezoneH)";
+ h = "0.6 * (0.025 * SafezoneH)";
+ };
+ class CA_OpticsZoom: RscText
+ {
+ idc = 180;
+ style = 1;
+ colorText[] = {0.706,0.0745,0.0196,1};
+ sizeEx = "0.02*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "4.5";
+ x = "30.2 * (0.01875 * SafezoneH)";
+ y = "22 * (0.025 * SafezoneH)";
+ w = "2.5 * (0.01875 * SafezoneH)";
+ h = "0.6 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode: RscText
+ {
+ idc = 179;
+ style = 1;
+ sizeEx = "0.02*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "VIS";
+ x = "30.2 * (0.01875 * SafezoneH)";
+ y = "22.8 * (0.025 * SafezoneH)";
+ w = "2.5 * (0.01875 * SafezoneH)";
+ h = "0.6 * (0.025 * SafezoneH)";
+ };
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 0;
+ sizeEx = "0.03*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "2456";
+ x = "28.75 * (0.01875 * SafezoneH)";
+ y = "23.82 * (0.025 * SafezoneH)";
+ w = "3.5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class CA_Laser: RscPicture
+ {
+ idc = 158;
+ style = "0x30 + 0x800";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ text = "A3\ui_f\data\igui\cfg\cursors\select_target_ca.paa";
+ x = "25.05 * (0.01875 * SafezoneH)";
+ y = "18.44 * (0.025 * SafezoneH)";
+ w = "3.2 * (0.01875 * SafezoneH)";
+ h = "3.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_Heli_Attack_02_gunner: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_Zeroing","CA_IGUI_elements_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 2;
+ sizeEx = "0.024*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "2456";
+ x = "24.7 * (0.01875 * SafezoneH)";
+ y = "29.3 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode: RscText
+ {
+ idc = 179;
+ style = 0;
+ sizeEx = "0.024*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "VIS";
+ x = "14.5 * (0.01875 * SafezoneH)";
+ y = "18.8 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_Heli_Attack_01_gunner: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_Zeroing","CA_IGUI_elements_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 2;
+ sizeEx = "0.0295*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "2456";
+ x = "24.78 * (0.01875 * SafezoneH)";
+ y = "30.88 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode: RscText
+ {
+ idc = 179;
+ style = 0;
+ sizeEx = "0.0295*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "VIS";
+ x = "9.3 * (0.01875 * SafezoneH)";
+ y = "15.34 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_FlirMode: RscText
+ {
+ idc = 153;
+ style = 0;
+ sizeEx = "0.0295*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "BHOT";
+ x = "11.15 * (0.01875 * SafezoneH)";
+ y = "15.34 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscHint
+ {
+ idd = 301;
+ movingEnable = 0;
+ controls[] = {"Background","Hint"};
+ class Background: RscText
+ {
+ idc = 101;
+ style = 128;
+ x = "((safezoneX + safezoneW) - (12 * ( ((safezoneW / safezoneH) min 1.2) / 40)) - 1 * ( ((safezoneW / safezoneH) min 1.2) / 40))";
+ y = "(safezoneY + 6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))";
+ w = "(12 * ( ((safezoneW / safezoneH) min 1.2) / 40))";
+ h = "(8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))";
+ text = "";
+ colorBackground[] = {0,0,0,0.7};
+ shadow = 1;
+ };
+ class Hint: RscStructuredText
+ {
+ idc = 102;
+ x = "((safezoneX + safezoneW) - (12 * ( ((safezoneW / safezoneH) min 1.2) / 40)) - 1 * ( ((safezoneW / safezoneH) min 1.2) / 40)) + 0.4* ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "(safezoneY + 6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)) + 0.3* ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "(12 * ( ((safezoneW / safezoneH) min 1.2) / 40)) - 0.8* ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "(8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)) - 0.8* ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ style = 16;
+ shadow = 1;
+ size = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
+ class Attributes: Attributes{};
+ };
+ };
+ class RscTaskHint
+ {
+ idd = 302;
+ movingEnable = 0;
+ class controlsBackground
+ {
+ class Background: RscText
+ {
+ type = 0;
+ idc = 103;
+ x = "(10 * ( ((safezoneW / safezoneH) min 1.2) / 32) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2)) / 2))";
+ y = "(1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + safezoneY)";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ text = "";
+ colorBackground[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])","(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"};
+ };
+ class Warning: RscText
+ {
+ x = "(10 * ( ((safezoneW / safezoneH) min 1.2) / 32) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2)) / 2)) - 2 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "(1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + safezoneY) + 2.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "14 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ style = "0x10 + 0x200";
+ text = "Designers, taskHint is obsolete, use new notifications:\nhttp://community.bistudio.com/wiki/Notification";
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {"(profilenamespace getvariable ['IGUI_WARNING_RGB_R',0.8])","(profilenamespace getvariable ['IGUI_WARNING_RGB_G',0.5])","(profilenamespace getvariable ['IGUI_WARNING_RGB_B',0.0])",0.7};
+ sizeEx = "0.6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ };
+ class Controls
+ {
+ class Hint: RscStructuredText
+ {
+ idc = 104;
+ x = "1.5 * ( ((safezoneW / safezoneH) min 1.2) / 32) + (10 * ( ((safezoneW / safezoneH) min 1.2) / 32) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2)) / 2))";
+ y = "0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + safezoneY)";
+ w = "8 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ style = 16;
+ lineSpacing = 1;
+ sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0};
+ font = "PuristaMedium";
+ size = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ text = "$STR_DISP_ERROR";
+ class Attributes: Attributes
+ {
+ color = "#ffffff";
+ align = "left";
+ shadow = 1;
+ };
+ };
+ };
+ class TaskIcon
+ {
+ x = "0.5 * ( ((safezoneW / safezoneH) min 1.2) / 32) + (10 * ( ((safezoneW / safezoneH) min 1.2) / 32) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2)) / 2))";
+ y = "0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + safezoneY)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ };
+ class RscOptics_AV_pilot: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"WeaponInfoControlsGroupRight","CA_BackgroundVehicle","CA_BackgroundVehicleTitle","CA_BackgroundVehicleTitleDark","CA_BackgroundFuel","CA_Vehicle","CA_VehicleRole","CA_HitZones","CA_SpeedBackground","CA_SpeedUnits","CA_Speed","CA_ValueFuel","CA_AltBackground","CA_AltUnits","CA_Alt","CA_Stabilize","CA_Radar","DriverOpticsGroup"};
+ class DriverOpticsGroup: RscControlsGroup
+ {
+ idc = 392;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class TextGrid: RscText
+ {
+ style = 0;
+ sizeEx = "0.02*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1005;
+ text = "GRID:";
+ x = "5.8 * (0.01875 * SafezoneH)";
+ y = "31.8 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class ValueGrid: TextGrid
+ {
+ idc = 189;
+ text = "382546";
+ x = "10.3 * (0.01875 * SafezoneH)";
+ y = "31.8 * (0.025 * SafezoneH)";
+ w = "6 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class TextTime: TextGrid
+ {
+ idc = 1010;
+ text = "TIME [UTC]:";
+ x = "5.8 * (0.01875 * SafezoneH)";
+ y = "32.6 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class ValueTime: TextGrid
+ {
+ idc = 101;
+ text = "20:28:35";
+ x = "10 * (0.01875 * SafezoneH)";
+ y = "32.6 * (0.025 * SafezoneH)";
+ w = "6 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class TextMag: TextGrid
+ {
+ idc = 1011;
+ text = "CAM MAG:";
+ x = "5.8 * (0.01875 * SafezoneH)";
+ y = "7 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class OpticsZoom: TextGrid
+ {
+ idc = 192;
+ text = "28x";
+ x = "10.3 * (0.01875 * SafezoneH)";
+ y = "7 * (0.025 * SafezoneH)";
+ w = "6 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class BorderLineSpdTop: RscPicture
+ {
+ idc = 1203;
+ text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa";
+ x = "3.343 * (0.01875 * SafezoneH)";
+ y = "12.4 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class BorderLineSpdBottom: RscPicture
+ {
+ idc = 1207;
+ text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa";
+ x = "3.343 * (0.01875 * SafezoneH)";
+ y = "26.5 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class BorderLineAltTop: RscPicture
+ {
+ idc = 1205;
+ text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa";
+ x = "47.16 * (0.01875 * SafezoneH)";
+ y = "12.4 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class BorderLineAltBottom: RscPicture
+ {
+ idc = 1206;
+ text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa";
+ x = "47.16 * (0.01875 * SafezoneH)";
+ y = "26.5 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class TextSpd: TextGrid
+ {
+ idc = 1004;
+ text = "SPD";
+ x = "4.8 * (0.01875 * SafezoneH)";
+ y = "11.8 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class SpeedValueBorder: RscPicture
+ {
+ idc = 1200;
+ text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\altimeter_value_ca.paa";
+ x = "6.3 * (0.01875 * SafezoneH)";
+ y = "19 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "2 * (0.025 * SafezoneH)";
+ };
+ class CA_Speed: TextGrid
+ {
+ idc = 190;
+ sizeEx = "0.03*SafezoneH";
+ text = "120";
+ x = "7.5 * (0.01875 * SafezoneH)";
+ y = "19.5 * (0.025 * SafezoneH)";
+ w = "6 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class AnalogueSpeed: RscLadderPicture
+ {
+ idc = 384;
+ topValue = 1312;
+ bottomValue = -345;
+ visibleRange = -1;
+ text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\UAVspeedLadder_ca.paa";
+ x = "1.5 * (0.01875 * SafezoneH)";
+ y = "13 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "14 * (0.025 * SafezoneH)";
+ };
+ class TextAlt: TextGrid
+ {
+ idc = 1006;
+ text = "ALT";
+ x = "46.9 * (0.01875 * SafezoneH)";
+ y = "11.8 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class AltValueBorder: RscPicture
+ {
+ idc = 1201;
+ text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\airspeed_value_ca.paa";
+ x = "42.25 * (0.01875 * SafezoneH)";
+ y = "19 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "2 * (0.025 * SafezoneH)";
+ };
+ class CA_Alt: TextGrid
+ {
+ idc = 191;
+ sizeEx = "0.03*SafezoneH";
+ style = 1;
+ text = "3825";
+ x = "43 * (0.01875 * SafezoneH)";
+ y = "19.5 * (0.025 * SafezoneH)";
+ w = "3.2 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class AnalogueAlt: RscLadderPicture
+ {
+ idc = 385;
+ topValue = 14430;
+ bottomValue = -2110;
+ visibleRange = -1;
+ text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\UAValtLadder_ca.paa";
+ x = "47 * (0.01875 * SafezoneH)";
+ y = "13 * (0.025 * SafezoneH)";
+ w = "2.5 * (0.01875 * SafezoneH)";
+ h = "14 * (0.025 * SafezoneH)";
+ };
+ class AnalogueHorizon: RscLadderPicture
+ {
+ idc = 383;
+ topValue = 90;
+ bottomValue = -90;
+ visibleRange = -1;
+ text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\horizon_ladder_ca.paa";
+ x = "16.75 * (0.01875 * SafezoneH)";
+ y = "5 * (0.025 * SafezoneH)";
+ w = "20 * (0.01875 * SafezoneH)";
+ h = "30 * (0.025 * SafezoneH)";
+ };
+ class HorizonCenter: RscPicture
+ {
+ idc = 1202;
+ text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\horizon_aircraft_ca.paa";
+ x = "24.75 * (0.01875 * SafezoneH)";
+ y = "19 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_AV_driver: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"WeaponInfoControlsGroupRight","CA_Zeroing","CA_BackgroundVehicle","CA_BackgroundVehicleTitle","CA_BackgroundVehicleTitleDark","CA_BackgroundFuel","CA_Vehicle","CA_VehicleRole","CA_HitZones","CA_SpeedBackground","CA_SpeedUnits","CA_Speed","CA_ValueFuel","CA_Radar","DriverOpticsGroup"};
+ class DriverOpticsGroup: RscControlsGroup
+ {
+ idc = 392;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class TextGrid: RscText
+ {
+ style = 0;
+ sizeEx = "0.02*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1006;
+ text = "GRID:";
+ x = "5.8 * (0.01875 * SafezoneH)";
+ y = "31.8 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class TextTime: TextGrid
+ {
+ idc = 1010;
+ text = "TIME [UTC]:";
+ x = "5.8 * (0.01875 * SafezoneH)";
+ y = "32.6 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class ValueTime: TextGrid
+ {
+ idc = 101;
+ text = "20:28:35";
+ x = "10 * (0.01875 * SafezoneH)";
+ y = "32.6 * (0.025 * SafezoneH)";
+ w = "6 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class TextMag: TextGrid
+ {
+ idc = 1011;
+ text = "CAM MAG:";
+ x = "5.8 * (0.01875 * SafezoneH)";
+ y = "7 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class OpticsZoom: TextGrid
+ {
+ idc = 192;
+ text = "28x";
+ x = "10.3 * (0.01875 * SafezoneH)";
+ y = "7 * (0.025 * SafezoneH)";
+ w = "6 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class BorderLineSpdTop: RscPicture
+ {
+ idc = 1203;
+ text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa";
+ x = "3.343 * (0.01875 * SafezoneH)";
+ y = "12.4 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class BorderLineSpdBottom: RscPicture
+ {
+ idc = 1207;
+ text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa";
+ x = "3.343 * (0.01875 * SafezoneH)";
+ y = "26.5 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class TextSpd: TextGrid
+ {
+ idc = 1000;
+ text = "SPD";
+ x = "4.8 * (0.01875 * SafezoneH)";
+ y = "11.8 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class SpeedValueBorder: RscPictureKeepAspect
+ {
+ idc = 1200;
+ text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\altimeter_value_ca.paa";
+ x = "6.3 * (0.01875 * SafezoneH)";
+ y = "19 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "2 * (0.025 * SafezoneH)";
+ };
+ class CA_Speed: TextGrid
+ {
+ idc = 190;
+ sizeEx = "0.03*SafezoneH";
+ text = "120";
+ x = "7.2 * (0.01875 * SafezoneH)";
+ y = "19.5 * (0.025 * SafezoneH)";
+ w = "6 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class AnalogueSpeed: RscLadderPicture
+ {
+ idc = 384;
+ topValue = 82.5;
+ bottomValue = -82.5;
+ visibleRange = -1;
+ text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\UGVspeedLadder_ca.paa";
+ x = "4 * (0.01875 * SafezoneH)";
+ y = "13 * (0.025 * SafezoneH)";
+ w = "2.5 * (0.01875 * SafezoneH)";
+ h = "14 * (0.025 * SafezoneH)";
+ };
+ class ValueGrid: TextGrid
+ {
+ idc = 189;
+ text = "382546";
+ x = "10.3 * (0.01875 * SafezoneH)";
+ y = "31.8 * (0.025 * SafezoneH)";
+ w = "6 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_UAV_gunner: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_IGUI_elements_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class RangeText: RscText
+ {
+ style = 0;
+ sizeEx = "0.02*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1000;
+ text = "RANGE:";
+ x = "18.5 * (0.01875 * SafezoneH)";
+ y = "13.2 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Distance: RangeText
+ {
+ idc = 151;
+ text = "2456";
+ x = "21.3 * (0.01875 * SafezoneH)";
+ y = "13.2 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class ModeText: RangeText
+ {
+ idc = 1002;
+ text = "MODE:";
+ x = "18.5 * (0.01875 * SafezoneH)";
+ y = "26.8 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode: RangeText
+ {
+ idc = 179;
+ style = 0;
+ text = "VIS";
+ x = "22.2 * (0.01875 * SafezoneH)";
+ y = "26.8 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_FlirMode: RangeText
+ {
+ idc = 153;
+ style = 0;
+ text = "BHOT";
+ x = "23.4 * (0.01875 * SafezoneH)";
+ y = "26.8 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class TextSpd: RangeText
+ {
+ idc = 1009;
+ text = "SPD [KM/H]:";
+ x = "5.8 * (0.01875 * SafezoneH)";
+ y = "12.4 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Speed: RangeText
+ {
+ idc = 188;
+ text = "120";
+ x = "10.3 * (0.01875 * SafezoneH)";
+ y = "12.4 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class TextAlt: RangeText
+ {
+ idc = 1007;
+ text = "ALT [AGL]:";
+ x = "5.8 * (0.01875 * SafezoneH)";
+ y = "13.2 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Alt: RangeText
+ {
+ idc = 189;
+ text = "3825";
+ x = "10.3 * (0.01875 * SafezoneH)";
+ y = "13.2 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class TextGrid: RangeText
+ {
+ idc = 1005;
+ text = "GRID:";
+ x = "5.8 * (0.01875 * SafezoneH)";
+ y = "31.8 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class ValueGrid: RangeText
+ {
+ idc = 171;
+ text = "382546";
+ x = "10.3 * (0.01875 * SafezoneH)";
+ y = "31.8 * (0.025 * SafezoneH)";
+ w = "6 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class TextTime: RangeText
+ {
+ idc = 1010;
+ text = "TIME [UTC]:";
+ x = "5.8 * (0.01875 * SafezoneH)";
+ y = "32.6 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class ValueTime: RangeText
+ {
+ idc = 190;
+ text = "20:28:35";
+ x = "10 * (0.01875 * SafezoneH)";
+ y = "32.6 * (0.025 * SafezoneH)";
+ w = "6 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class TextMag: RangeText
+ {
+ idc = 1011;
+ text = "CAM MAG:";
+ x = "18.5 * (0.01875 * SafezoneH)";
+ y = "26 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_OpticsZoom: RangeText
+ {
+ idc = 180;
+ text = "28x";
+ x = "22.2 * (0.01875 * SafezoneH)";
+ y = "26 * (0.025 * SafezoneH)";
+ w = "6 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Laser: RscText
+ {
+ idc = 158;
+ style = "0x30 + 0x800";
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "\A3\ui_f\data\igui\rscingameui\rscoptics\laser_designator_iconLaserOn.paa";
+ x = "31.1 * (0.01875 * SafezoneH)";
+ y = "12.85 * (0.025 * SafezoneH)";
+ w = "3.5 * (0.01875 * SafezoneH)";
+ h = "1.5 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_UGV_gunner: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_Zeroing","CA_IGUI_elements_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class RangeText: RscText
+ {
+ style = 0;
+ sizeEx = "0.02*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1000;
+ text = "RANGE:";
+ x = "26.6 * (0.01875 * SafezoneH)";
+ y = "28.8 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Distance: RangeText
+ {
+ idc = 151;
+ text = "2456";
+ x = "29.4 * (0.01875 * SafezoneH)";
+ y = "28.8 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class ModeText: RangeText
+ {
+ idc = 1002;
+ text = "MODE:";
+ x = "26.6 * (0.01875 * SafezoneH)";
+ y = "29.6 * (0.025 * SafezoneH)";
+ w = "3 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode: RangeText
+ {
+ idc = 179;
+ style = 0;
+ text = "VIS";
+ x = "29.4 * (0.01875 * SafezoneH)";
+ y = "29.6 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_FlirMode: RangeText
+ {
+ idc = 153;
+ style = 0;
+ text = "BHOT";
+ x = "30.6 * (0.01875 * SafezoneH)";
+ y = "29.6 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class TextGrid: RangeText
+ {
+ idc = 1005;
+ text = "GRID:";
+ x = "5.8 * (0.01875 * SafezoneH)";
+ y = "31.8 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class ValueGrid: RangeText
+ {
+ idc = 171;
+ text = "382546";
+ x = "10.3 * (0.01875 * SafezoneH)";
+ y = "31.8 * (0.025 * SafezoneH)";
+ w = "6 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class TextTime: RangeText
+ {
+ idc = 1010;
+ text = "TIME [UTC]:";
+ x = "5.8 * (0.01875 * SafezoneH)";
+ y = "32.6 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class ValueTime: RangeText
+ {
+ idc = 190;
+ text = "20:28:35";
+ x = "10 * (0.01875 * SafezoneH)";
+ y = "32.6 * (0.025 * SafezoneH)";
+ w = "6 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ };
+ class TextMag: RangeText
+ {
+ idc = 1011;
+ text = "CAM MAG:";
+ x = "5.8 * (0.01875 * SafezoneH)";
+ y = "7 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_OpticsZoom: RangeText
+ {
+ idc = 180;
+ text = "28x";
+ x = "10.3 * (0.01875 * SafezoneH)";
+ y = "7 * (0.025 * SafezoneH)";
+ w = "6 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_APC_Tracked_01_gunner: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_Zeroing","CA_IGUI_elements_group","CA_APC_WFOV_mode_group","CA_APC_NFOV_mode_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "-4 * (0.01875 * SafezoneH) + (safezoneX)";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "61.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class TextDist: RscText
+ {
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ sizeEx = "0.028*SafezoneH";
+ idc = 1003;
+ text = "DIST";
+ x = "5.4 * (0.01875 * SafezoneH)";
+ y = "19 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ colorBackground[] = {0,0,0,1};
+ };
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 0;
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "2456";
+ x = "10.1 * (0.01875 * SafezoneH)";
+ y = "19 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ colorBackground[] = {0,0,0,1};
+ };
+ class TextColonDist: RscText
+ {
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ sizeEx = "0.028*SafezoneH";
+ idc = 1008;
+ text = ":";
+ x = "9.3 * (0.01875 * SafezoneH)";
+ y = "19 * (0.025 * SafezoneH)";
+ w = "1 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ colorBackground[] = {0,0,0,1};
+ };
+ class TextEL: RscText
+ {
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ sizeEx = "0.028*SafezoneH";
+ idc = 1010;
+ text = "EL";
+ x = "5.4 * (0.01875 * SafezoneH)";
+ y = "20 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ colorBackground[] = {0,0,0,1};
+ };
+ class CA_OpticsPitch: RscText
+ {
+ idc = 182;
+ style = 0;
+ sizeEx = "0.028*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "36";
+ x = "10.1 * (0.01875 * SafezoneH)";
+ y = "20 * (0.025 * SafezoneH)";
+ w = "4 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ colorBackground[] = {0,0,0,1};
+ };
+ class TextColonEL: RscText
+ {
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ sizeEx = "0.028*SafezoneH";
+ idc = 1009;
+ text = ":";
+ x = "9.3 * (0.01875 * SafezoneH)";
+ y = "20 * (0.025 * SafezoneH)";
+ w = "1 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ colorBackground[] = {0,0,0,1};
+ };
+ class TextRadar: RscText
+ {
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ sizeEx = "0.028*SafezoneH";
+ idc = 1011;
+ text = "RADAR";
+ x = "5.4 * (0.01875 * SafezoneH)";
+ y = "20.98 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ colorBackground[] = {0,0,0,1};
+ };
+ class TextACQ: RscText
+ {
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ sizeEx = "0.028*SafezoneH";
+ idc = 1012;
+ text = "ACQ:CENT-Au";
+ x = "5.4 * (0.01875 * SafezoneH)";
+ y = "30 * (0.025 * SafezoneH)";
+ w = "7.5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ colorBackground[] = {0,0,0,1};
+ };
+ class TextCENT: RscText
+ {
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ sizeEx = "0.028*SafezoneH";
+ idc = 1014;
+ text = "CENT-Wt";
+ x = "15.5 * (0.01875 * SafezoneH)";
+ y = "30 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ colorBackground[] = {0,0,0,1};
+ };
+ class TextCST: RscText
+ {
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ sizeEx = "0.028*SafezoneH";
+ idc = 1013;
+ text = "CST:";
+ x = "12.9 * (0.01875 * SafezoneH)";
+ y = "30 * (0.025 * SafezoneH)";
+ w = "2.8 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ colorText[] = {0,0,0,1};
+ colorBackground[] = {1,1,1,1};
+ };
+ };
+ };
+ class CA_APC_WFOV_mode_group: RscControlsGroupNoScrollbars
+ {
+ idc = 163;
+ x = "-4 * (0.01875 * SafezoneH) + (safezoneX)";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "61.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeWFOV: RscText
+ {
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ sizeEx = "0.028*SafezoneH";
+ idc = 1002;
+ text = "WFOV";
+ x = "5.4 * (0.01875 * SafezoneH)";
+ y = "21.95 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ colorBackground[] = {0,0,0,1};
+ };
+ };
+ };
+ class CA_APC_NFOV_mode_group: RscControlsGroupNoScrollbars
+ {
+ idc = 162;
+ x = "-4 * (0.01875 * SafezoneH) + (safezoneX)";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "61.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeNFOV: RscText
+ {
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ sizeEx = "0.028*SafezoneH";
+ idc = 1007;
+ text = "NFOV";
+ x = "5.4 * (0.01875 * SafezoneH)";
+ y = "21.95 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1 * (0.025 * SafezoneH)";
+ colorBackground[] = {0,0,0,1};
+ };
+ };
+ };
+ };
+ class RscOptics_APC_Tracked_03_gunner: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_Zeroing","CA_IGUI_elements_group","CA_APC_WFOV_mode_group","CA_APC_NFOV_mode_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_OpticsPitch: RscText
+ {
+ idc = 182;
+ style = 1;
+ sizeEx = "0.038*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "36";
+ x = "1 * (0.01875 * SafezoneH)";
+ y = "19.3 * (0.025 * SafezoneH)";
+ w = "5.2 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 2;
+ sizeEx = "0.038*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "2456";
+ x = "24.3 * (0.01875 * SafezoneH)";
+ y = "31.3 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode: RscText
+ {
+ idc = 152;
+ style = 0;
+ sizeEx = "0.038*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "FLIR";
+ x = "40.2 * (0.01875 * SafezoneH)";
+ y = "11 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_FlirMode: RscText
+ {
+ idc = 153;
+ style = 0;
+ sizeEx = "0.038*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "BHOT";
+ x = "44.2 * (0.01875 * SafezoneH)";
+ y = "11 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_APC_WFOV_mode_group: RscControlsGroupNoScrollbars
+ {
+ idc = 163;
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeWFOV: RscText
+ {
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ sizeEx = "0.038*SafezoneH";
+ idc = 1002;
+ text = "WFOV";
+ x = "8 * (0.01875 * SafezoneH)";
+ y = "11 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_APC_NFOV_mode_group: RscControlsGroupNoScrollbars
+ {
+ idc = 162;
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeNFOV: RscText
+ {
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ sizeEx = "0.038*SafezoneH";
+ idc = 1007;
+ text = "NFOV";
+ x = "8 * (0.01875 * SafezoneH)";
+ y = "11 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_APC_Wheeled_01_gunner: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_Zeroing","CA_IGUI_elements_group","CA_APC_WFOV_mode_group","CA_APC_NFOV_mode_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_OpticsPitch: RscText
+ {
+ idc = 182;
+ style = 1;
+ colorText[] = {0.706,0.0745,0.0196,1};
+ sizeEx = "0.038*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "36";
+ x = "1 * (0.01875 * SafezoneH)";
+ y = "19.3 * (0.025 * SafezoneH)";
+ w = "5.2 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 2;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "2456";
+ x = "24.3 * (0.01875 * SafezoneH)";
+ y = "31.3 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode: RscText
+ {
+ idc = 152;
+ style = 0;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "FLIR";
+ x = "40.2 * (0.01875 * SafezoneH)";
+ y = "11 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_FlirMode: RscText
+ {
+ idc = 153;
+ style = 0;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "BHOT";
+ x = "44.2 * (0.01875 * SafezoneH)";
+ y = "11 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_APC_WFOV_mode_group: RscControlsGroupNoScrollbars
+ {
+ idc = 163;
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeWFOV: RscText
+ {
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ sizeEx = "0.038*SafezoneH";
+ idc = 1002;
+ text = "WFOV";
+ x = "8 * (0.01875 * SafezoneH)";
+ y = "11 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_APC_NFOV_mode_group: RscControlsGroupNoScrollbars
+ {
+ idc = 162;
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeNFOV: RscText
+ {
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ sizeEx = "0.038*SafezoneH";
+ idc = 1007;
+ text = "NFOV";
+ x = "8 * (0.01875 * SafezoneH)";
+ y = "11 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_APC_Wheeled_03_commander: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_Zeroing","CA_IGUI_elements_group","CA_APC_WFOV_mode_group","CA_APC_NFOV_mode_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class TextOpticsPitch: RscText
+ {
+ style = 0;
+ sizeEx = "0.032*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1008;
+ text = "E:";
+ x = "7.8 * (0.01875 * SafezoneH)";
+ y = "9.6 * (0.025 * SafezoneH)";
+ w = "2 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_OpticsPitch: RscText
+ {
+ idc = 182;
+ style = 0;
+ sizeEx = "0.032*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "36";
+ x = "9 * (0.01875 * SafezoneH)";
+ y = "9.6 * (0.025 * SafezoneH)";
+ w = "5.2 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 0;
+ sizeEx = "0.032*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "2456";
+ x = "40.4 * (0.01875 * SafezoneH)";
+ y = "9.6 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode: RscText
+ {
+ idc = 152;
+ style = 0;
+ sizeEx = "0.032*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "FLIR";
+ x = "44 * (0.01875 * SafezoneH)";
+ y = "29.2 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_FlirMode: RscText
+ {
+ idc = 153;
+ style = 0;
+ sizeEx = "0.032*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "BHOT";
+ x = "47.5 * (0.01875 * SafezoneH)";
+ y = "29.2 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_APC_WFOV_mode_group: RscControlsGroupNoScrollbars
+ {
+ idc = 163;
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeWFOV: RscText
+ {
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ sizeEx = "0.032*SafezoneH";
+ idc = 1002;
+ text = "WFOV";
+ x = "40.4 * (0.01875 * SafezoneH)";
+ y = "29.2 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_APC_NFOV_mode_group: RscControlsGroupNoScrollbars
+ {
+ idc = 162;
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeNFOV: RscText
+ {
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ sizeEx = "0.032*SafezoneH";
+ idc = 1007;
+ text = "NFOV";
+ x = "40.4 * (0.01875 * SafezoneH)";
+ y = "29.2 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_APC_Wheeled_03_gunner: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_Zeroing","CA_IGUI_elements_group","CA_APC_WFOV_mode_group","CA_APC_NFOV_mode_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class TextOpticsPitch: RscText
+ {
+ style = 0;
+ sizeEx = "0.032*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ idc = 1008;
+ text = "E:";
+ x = "7.8 * (0.01875 * SafezoneH)";
+ y = "9.6 * (0.025 * SafezoneH)";
+ w = "2 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_OpticsPitch: RscText
+ {
+ idc = 182;
+ style = 0;
+ sizeEx = "0.032*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "36";
+ x = "9 * (0.01875 * SafezoneH)";
+ y = "9.6 * (0.025 * SafezoneH)";
+ w = "5.2 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 0;
+ sizeEx = "0.032*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "2456";
+ x = "40.4 * (0.01875 * SafezoneH)";
+ y = "9.6 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode: RscText
+ {
+ idc = 152;
+ style = 0;
+ sizeEx = "0.032*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "FLIR";
+ x = "44 * (0.01875 * SafezoneH)";
+ y = "29.2 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_FlirMode: RscText
+ {
+ idc = 153;
+ style = 0;
+ sizeEx = "0.032*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "BHOT";
+ x = "47.5 * (0.01875 * SafezoneH)";
+ y = "29.2 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_APC_WFOV_mode_group: RscControlsGroupNoScrollbars
+ {
+ idc = 163;
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeWFOV: RscText
+ {
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ sizeEx = "0.032*SafezoneH";
+ idc = 1002;
+ text = "WFOV";
+ x = "40.4 * (0.01875 * SafezoneH)";
+ y = "29.2 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_APC_NFOV_mode_group: RscControlsGroupNoScrollbars
+ {
+ idc = 162;
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeNFOV: RscText
+ {
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ sizeEx = "0.032*SafezoneH";
+ idc = 1007;
+ text = "NFOV";
+ x = "40.4 * (0.01875 * SafezoneH)";
+ y = "29.2 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_MBT_01_commander: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_Zeroing","CA_IGUI_elements_group","CA_APC_WFOV_mode_group","CA_APC_NFOV_mode_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class TextOpticsPitch: RscText
+ {
+ style = 0;
+ sizeEx = "0.032*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ colorText[] = {0.709,0.972,0.384,1};
+ idc = 1008;
+ text = "E:";
+ x = "7.8 * (0.01875 * SafezoneH)";
+ y = "9.6 * (0.025 * SafezoneH)";
+ w = "2 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_OpticsPitch: RscText
+ {
+ idc = 182;
+ style = 0;
+ sizeEx = "0.032*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ colorText[] = {0.709,0.972,0.384,1};
+ text = "36";
+ x = "9 * (0.01875 * SafezoneH)";
+ y = "9.6 * (0.025 * SafezoneH)";
+ w = "5.2 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 0;
+ sizeEx = "0.032*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ colorText[] = {0.709,0.972,0.384,1};
+ text = "2456";
+ x = "40.4 * (0.01875 * SafezoneH)";
+ y = "9.6 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode: RscText
+ {
+ idc = 152;
+ style = 0;
+ sizeEx = "0.032*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ colorText[] = {0.709,0.972,0.384,1};
+ text = "FLIR";
+ x = "44 * (0.01875 * SafezoneH)";
+ y = "29.2 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_FlirMode: RscText
+ {
+ idc = 153;
+ style = 0;
+ sizeEx = "0.032*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ colorText[] = {0.709,0.972,0.384,1};
+ text = "BHOT";
+ x = "47.5 * (0.01875 * SafezoneH)";
+ y = "29.2 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_APC_WFOV_mode_group: RscControlsGroupNoScrollbars
+ {
+ idc = 163;
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeWFOV: RscText
+ {
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ colorText[] = {0.709,0.972,0.384,1};
+ sizeEx = "0.032*SafezoneH";
+ idc = 1002;
+ text = "WFOV";
+ x = "40.4 * (0.01875 * SafezoneH)";
+ y = "29.2 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_APC_NFOV_mode_group: RscControlsGroupNoScrollbars
+ {
+ idc = 162;
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeNFOV: RscText
+ {
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ colorText[] = {0.709,0.972,0.384,1};
+ sizeEx = "0.032*SafezoneH";
+ idc = 1007;
+ text = "NFOV";
+ x = "40.4 * (0.01875 * SafezoneH)";
+ y = "29.2 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_MBT_01_gunner: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_Zeroing","CA_IGUI_elements_group","CA_APC_WFOV_mode_group","CA_APC_NFOV_mode_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class TextOpticsPitch: RscText
+ {
+ style = 0;
+ sizeEx = "0.032*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ colorText[] = {0.709,0.972,0.384,1};
+ idc = 1008;
+ text = "E:";
+ x = "7.8 * (0.01875 * SafezoneH)";
+ y = "9.6 * (0.025 * SafezoneH)";
+ w = "2 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_OpticsPitch: RscText
+ {
+ idc = 182;
+ style = 0;
+ sizeEx = "0.032*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ colorText[] = {0.709,0.972,0.384,1};
+ text = "36";
+ x = "9 * (0.01875 * SafezoneH)";
+ y = "9.6 * (0.025 * SafezoneH)";
+ w = "5.2 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 0;
+ sizeEx = "0.032*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ colorText[] = {0.709,0.972,0.384,1};
+ text = "2456";
+ x = "40.4 * (0.01875 * SafezoneH)";
+ y = "9.6 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_VisionMode: RscText
+ {
+ idc = 152;
+ style = 0;
+ sizeEx = "0.032*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ colorText[] = {0.709,0.972,0.384,1};
+ text = "FLIR";
+ x = "44 * (0.01875 * SafezoneH)";
+ y = "29.2 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ class CA_FlirMode: RscText
+ {
+ idc = 153;
+ style = 0;
+ sizeEx = "0.032*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ colorText[] = {0.709,0.972,0.384,1};
+ text = "BHOT";
+ x = "47.5 * (0.01875 * SafezoneH)";
+ y = "29.2 * (0.025 * SafezoneH)";
+ w = "4.5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_APC_WFOV_mode_group: RscControlsGroupNoScrollbars
+ {
+ idc = 163;
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeWFOV: RscText
+ {
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ colorText[] = {0.709,0.972,0.384,1};
+ sizeEx = "0.032*SafezoneH";
+ idc = 1002;
+ text = "WFOV";
+ x = "40.4 * (0.01875 * SafezoneH)";
+ y = "29.2 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ class CA_APC_NFOV_mode_group: RscControlsGroupNoScrollbars
+ {
+ idc = 162;
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_FOVModeNFOV: RscText
+ {
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ colorText[] = {0.709,0.972,0.384,1};
+ sizeEx = "0.032*SafezoneH";
+ idc = 1007;
+ text = "NFOV";
+ x = "40.4 * (0.01875 * SafezoneH)";
+ y = "29.2 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_MBT_02_commander: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_Zeroing","CA_IGUI_elements_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 2;
+ sizeEx = "0.038*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "2456";
+ x = "24.3 * (0.01875 * SafezoneH)";
+ y = "31 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_MBT_02_gunner: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_Zeroing","CA_IGUI_elements_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 2;
+ sizeEx = "0.038*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "2456";
+ x = "24.3 * (0.01875 * SafezoneH)";
+ y = "31 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_MBT_03_gunner: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_Zeroing","CA_IGUI_elements_group"};
+ class CA_IGUI_elements_group: RscControlsGroup
+ {
+ idc = 170;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
+ y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
+ w = "53.5 * (0.01875 * SafezoneH)";
+ h = "40 * (0.025 * SafezoneH)";
+ class controls
+ {
+ class CA_OpticsPitch: RscText
+ {
+ idc = 182;
+ style = 1;
+ sizeEx = "0.038*SafezoneH";
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "36";
+ x = "1 * (0.01875 * SafezoneH)";
+ y = "19.4 * (0.025 * SafezoneH)";
+ w = "5.2 * (0.01875 * SafezoneH)";
+ h = "1.1 * (0.025 * SafezoneH)";
+ };
+ class CA_Distance: RscText
+ {
+ idc = 151;
+ style = 2;
+ sizeEx = "0.038*SafezoneH";
+ colorText[] = {0.706,0.0745,0.0196,1};
+ shadow = 0;
+ font = "EtelkaMonospacePro";
+ text = "2456";
+ x = "24.3 * (0.01875 * SafezoneH)";
+ y = "30 * (0.025 * SafezoneH)";
+ w = "5 * (0.01875 * SafezoneH)";
+ h = "1.2 * (0.025 * SafezoneH)";
+ };
+ };
+ };
+ };
+ class RscOptics_Offroad_01: RscUnitInfo
+ {
+ idd = 300;
+ controls[] = {"CA_Zeroing"};
+ };
+ class RscUnitInfoAirRTDBasic: RscUnitInfoAir
+ {
+ onload = "uinamespace setvariable ['RscUnitInfoAir',_this select 0];";
+ controls[] = {};
+ controlsx[] = {"WeaponInfoControlsGroupRight","CA_SpeedBackground","CA_TextSpeed","CA_Speed","CA_AltBackground","CA_TextAlt","CA_Alt","CA_HeadingBackground","CA_Heading","CA_ValueColective"};
+ class CA_Horizon: CA_HUDRscControlsGroup
+ {
+ idc = 540;
+ x = 0.2;
+ y = 0.2;
+ w = 0.6;
+ h = 0.6;
+ };
+ class CA_AirSpeedIndicator: CA_HUDRscControlsGroup
+ {
+ idc = 530;
+ x = 0.1;
+ y = 0.2;
+ w = 0.15;
+ h = 0.4;
+ class ControlsBackground
+ {
+ class Bcg: RscText
+ {
+ x = 0;
+ y = 0;
+ w = 100;
+ h = 100;
+ colorbackground[] = {1,0,0,0.5};
+ };
+ };
+ class Controls
+ {
+ class CA_AirSpeedIndicator_Axis: CA_HUDRscControlsGroup
+ {
+ idc = 531;
+ x = 0.1;
+ y = 0.0;
+ w = 0.04;
+ h = 0.4;
+ };
+ class CA_RadarAltmeterValue_Value: RscIGUIValue
+ {
+ idc = 532;
+ style = 1;
+ x = -0.01;
+ y = 0.187;
+ w = 0.1;
+ shadow = 0;
+ SizeEx = 0.035;
+ };
+ class CA_AltimeterBorder: RscPicture
+ {
+ x = 0.0;
+ y = 0.182;
+ w = 0.1;
+ h = 0.05;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ text = "\A3\ui_f\data\igui_airspeed_value_ca.paa";
+ };
+ };
+ };
+ class CA_Altimeter: CA_HUDRscControlsGroup
+ {
+ idc = 535;
+ x = 0.8;
+ y = 0.2;
+ w = 0.28;
+ h = 0.4;
+ class ControlsBackground
+ {
+ class Bcg: RscText
+ {
+ x = 0;
+ y = 0;
+ w = 100;
+ h = 100;
+ colorbackground[] = {0,1,0,0.5};
+ };
+ };
+ class Controls
+ {
+ class CA_AirSpeedIndicator_Axis: CA_HUDRscControlsGroup
+ {
+ idc = 536;
+ x = 0.05;
+ y = 0.0;
+ w = 0.04;
+ h = 0.4;
+ };
+ class CA_RadarAltmeterValue_Value: RscIGUIValue
+ {
+ idc = 537;
+ style = 0;
+ x = 0.102;
+ y = 0.187;
+ w = 0.1;
+ shadow = 0;
+ sizeEx = 0.035;
+ };
+ class CA_AltimeterBorder: RscPicture
+ {
+ x = 0.092;
+ y = 0.182;
+ w = 0.1;
+ h = 0.05;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ text = "\A3\ui_f\data\igui_altimeter_value_ca.paa";
+ };
+ };
+ };
+ class CA_RadarAltmeter: CA_HUDRscControlsGroup
+ {
+ idc = 505;
+ x = 0.8;
+ y = 0.6;
+ w = 0.25;
+ h = 0.25;
+ shadow = 0;
+ class ControlsBackground
+ {
+ class Bcg: RscText
+ {
+ x = 0;
+ y = 0;
+ w = 100;
+ h = 100;
+ colorbackground[] = {0,0,1,0.5};
+ };
+ };
+ class Controls
+ {
+ class CA_RadarAltmeterBar: RscIGProgress
+ {
+ idc = 506;
+ x = 0.05;
+ y = 0.0;
+ w = 0.01;
+ h = 0.2;
+ texture = "#(argb,8,8,3)color(1,1,1,1)";
+ };
+ class CA_RadarAltmeterValue: RscIGUIValue
+ {
+ idc = 507;
+ style = 0;
+ x = 0.065;
+ y = 0.17;
+ w = 0.1;
+ shadow = 0;
+ sizeEx = 0.035;
+ };
+ };
+ };
+ class CA_WindIndicator: CA_HUDRscControlsGroup
+ {
+ idc = 515;
+ x = 0.1;
+ y = 0.7;
+ w = 0.1;
+ h = 0.1;
+ };
+ class CA_StabilityIdicator: CA_HUDRscControlsGroup
+ {
+ idc = 520;
+ x = 0.65;
+ y = 0.7;
+ w = 0.065;
+ h = 0.1;
+ };
+ class CA_ValueColective: RscIGProgress
+ {
+ x = "0.018 + SafeZoneX";
+ y = "0.01 + SafeZoneY";
+ w = 0.0196078;
+ h = 0.2091503;
+ idc = 525;
+ texture = "#(argb,8,8,3)color(1,1,1,1)";
+ colorFrame[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ };
+ class CA_AutoTrim: RscIGUIValue
+ {
+ x = 0.85;
+ y = 0.8;
+ w = 0.05;
+ h = 0.05;
+ idc = 545;
+ shadow = 0;
+ SizeEx = 0.025;
+ text = "TRIM";
+ };
+ class CA_AutoHover: RscIGUIValue
+ {
+ x = 0.8;
+ y = 0.8;
+ w = 0.05;
+ h = 0.05;
+ idc = 546;
+ shadow = 0;
+ SizeEx = 0.025;
+ text = "HOVER";
+ };
+ class CA_Torque: RscIGUIValue
+ {
+ idc = 510;
+ style = 1;
+ x = 0.45;
+ y = 0.75;
+ w = 0.12;
+ shadow = 0;
+ SizeEx = 0.035;
+ };
+ class CA_GMeter: RscIGUIValue
+ {
+ idc = 501;
+ style = 1;
+ x = 0.45;
+ y = 0.8;
+ w = 0.12;
+ shadow = 0;
+ SizeEx = 0.035;
+ };
+ class Batteries: RscIGUIValue
+ {
+ idc = 11831;
+ x = "0.08 + SafeZoneX";
+ y = "0.036 + SafeZoneY";
+ w = 0.3;
+ h = 0.039;
+ sizeEx = 0.02674;
+ shadow = 2;
+ text = "";
+ };
+ class Starter: Batteries
+ {
+ idc = 11833;
+ y = "0.075 + SafeZoneY";
+ };
+ class Throttles: Batteries
+ {
+ idc = 11834;
+ y = "0.114 + SafeZoneY";
+ };
+ class EnginesRPMs: Batteries
+ {
+ idc = 11835;
+ y = "0.153 + SafeZoneY";
+ };
+ class APU: Batteries
+ {
+ idc = 11832;
+ y = "0.192 + SafeZoneY";
+ };
+ };
+ class RscUnitInfoAirRTDFull: RscUnitInfoAir
+ {
+ onload = "uinamespace setvariable ['RscUnitInfoAir',_this select 0];";
+ controls[] = {"WeaponInfoControlsGroupRight","CA_Horizon_Lite","CA_Horizon_Analogue","CA_Speed_Analogue","CA_Compass_Analogue","CA_Altitude_Analogue","CA_Stability_Analogue","CA_Damage_Status"};
+ class CA_Horizon_Lite: CA_HUDRscControlsGroup
+ {
+ idc = 541;
+ x = "safezoneX";
+ y = "safezoneY";
+ w = "safezoneW";
+ h = "safezoneH";
+ };
+ class CA_Speed_Analogue: CA_HUDRscControlsGroup
+ {
+ idc = 601;
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 32) + (1 * ( ((safezoneW / safezoneH) min 1.2) / 32) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2)) / 2))";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (13.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2)))";
+ w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ class controls
+ {
+ class CA_Speed_Analogue_Background: RscPicture
+ {
+ idc = 607;
+ text = "A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\analogue_background_speed_ca.paa";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Speed_Analogue_Background_Imperial: RscPicture
+ {
+ idc = 606;
+ text = "A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\analogue_background_speed_imp_ca.paa";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Speed_Analogue_Needle: RscPicture
+ {
+ idc = 602;
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\analogue_arrow_ca.paa";
+ x = "1 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "4 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "4 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Speed_Analogue_Min: RscPicture
+ {
+ idc = 603;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])",1};
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\MarkerMIN_CA.paa";
+ x = "2.25 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "2.25 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Speed_Analogue_Max: RscPicture
+ {
+ idc = 604;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])",1};
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\MarkerMAX_CA.paa";
+ x = "2.25 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "2.25 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Speed_Analogue_Value: RscText
+ {
+ idc = 605;
+ sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
+ style = 2;
+ x = "2 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "2 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ };
+ };
+ class CA_Altitude_Analogue: CA_HUDRscControlsGroup
+ {
+ idc = 611;
+ x = "6 * ( ((safezoneW / safezoneH) min 1.2) / 32) + (1 * ( ((safezoneW / safezoneH) min 1.2) / 32) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2)) / 2))";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (13.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2)))";
+ w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ class controls
+ {
+ class CA_Altitude_Analogue_Background: RscPicture
+ {
+ idc = 617;
+ text = "A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\analogue_background_altitude_ca.paa";
+ x = "-3.37704e-007 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Altitude_Analogue_Background_Imperial: RscPicture
+ {
+ idc = 616;
+ text = "A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\analogue_background_altitude_imp_ca.paa";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Altitude_Analogue_Needle: RscPicture
+ {
+ idc = 612;
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\analogue_arrow_ca.paa";
+ x = "1 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "4 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "4 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Altitude_Analogue_Min: RscPicture
+ {
+ idc = 613;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])",1};
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\MarkerMIN_CA.paa";
+ x = "2.25 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "2.25 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Altitude_Analogue_Max: RscPicture
+ {
+ idc = 614;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])",1};
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\MarkerMAX_CA.paa";
+ x = "2.25 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "2.25 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Altitude_Analogue_Value: RscText
+ {
+ idc = 615;
+ sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
+ style = 2;
+ x = "2 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "2 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ };
+ };
+ class CA_Horizon_Analogue: CA_HUDRscControlsGroup
+ {
+ idc = 621;
+ x = "12 * ( ((safezoneW / safezoneH) min 1.2) / 32) + (1 * ( ((safezoneW / safezoneH) min 1.2) / 32) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2)) / 2))";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (13.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2)))";
+ w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ class controls
+ {
+ class CA_Horizon_Analogue_Background: RscPicture
+ {
+ idc = 1208;
+ text = "A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\analogue_background_horizon_ca.paa";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Horizon_Analogue_Needle: RscPicture
+ {
+ idc = 622;
+ text = "\A3\ui_f\data\igui_horizon_axes_ca.paa";
+ x = "1.5 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "3 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ colorText[] = {1,1,1,1};
+ };
+ class CA_Horizon_Analogue_Value: RscText
+ {
+ idc = 623;
+ sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
+ style = 2;
+ x = "2 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "2 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Horizon_Analogue_Aircraft: RscPicture
+ {
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])",1};
+ shadow = 2;
+ idc = 1232;
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\analogue_horizon_aircraft_ca.paa";
+ x = "1.5 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "3 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ };
+ };
+ class CA_Stability_Analogue: CA_HUDRscControlsGroup
+ {
+ idc = 641;
+ x = "18 * ( ((safezoneW / safezoneH) min 1.2) / 32) + (1 * ( ((safezoneW / safezoneH) min 1.2) / 32) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2)) / 2))";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (13.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2)))";
+ w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ class controls
+ {
+ class CA_Stability_Analogue_Background: RscPicture
+ {
+ idc = 648;
+ text = "A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\analogue_background_stability_ca.paa";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Stability_Analogue_Background_Imperial: RscPicture
+ {
+ idc = 647;
+ text = "A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\analogue_background_stability_imp_ca.paa";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Stability_Analogue_Speed: RscPicture
+ {
+ idc = 642;
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\WhiteDot_CA.paa";
+ x = "1.75 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "1.75 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "0.5 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ colorText[] = {1,1,1,1};
+ };
+ class CA_Stability_Analogue_Autohover: RscPicture
+ {
+ idc = 546;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])",1};
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\WhiteDot_CA.paa";
+ x = "2.75 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "2.75 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "0.5 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Stability_Analogue_Vertical_Speed_Needle: RscPicture
+ {
+ idc = 644;
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\analogue_arrow_VSI_ca.paa";
+ x = "1 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "4 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "4 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ colorText[] = {1,1,1,1};
+ };
+ class CA_Stability_Analogue_Collective: RscPicture
+ {
+ idc = 645;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])",1};
+ text = "A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\analogue_right_ca.paa";
+ x = "3 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "3 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Stability_Analogue_Value: RscText
+ {
+ idc = 643;
+ sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
+ style = 2;
+ x = "2 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "2 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ };
+ };
+ class CA_Compass_Analogue: CA_HUDRscControlsGroup
+ {
+ idc = 631;
+ x = "24 * ( ((safezoneW / safezoneH) min 1.2) / 32) + (1 * ( ((safezoneW / safezoneH) min 1.2) / 32) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2)) / 2))";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (13.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2)))";
+ w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ class controls
+ {
+ class CA_Compass_Analogue_Background: RscPicture
+ {
+ idc = 1215;
+ text = "A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\analogue_background_compass_ca.paa";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Compass_Analogue_Needle: RscPicture
+ {
+ idc = 632;
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\analogue_compass_ca.paa";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Compass_Analogue_Wind: RscPicture
+ {
+ idc = 633;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])",1};
+ text = "\A3\ui_f\data\igui_wind_ca.paa";
+ x = "1.5 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "3 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Compass_Analogue_Waypoint: RscPicture
+ {
+ idc = 634;
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\MarkerWPT_CA.paa";
+ x = "2.25 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "2.25 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "0.5 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ colorText[] = {1,0.5,0,1};
+ };
+ class CA_Compass_Analogue_Min: RscPicture
+ {
+ idc = 635;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])",1};
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\MarkerMIN_CA.paa";
+ x = "2.25 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "2.25 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Compass_Analogue_Max: RscPicture
+ {
+ idc = 636;
+ colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])",1};
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\MarkerMAX_CA.paa";
+ x = "2.25 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "2.25 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Compass_Analogue_Value: RscText
+ {
+ idc = 637;
+ sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
+ style = 2;
+ x = "2 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "2 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "0.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ };
+ };
+ class CA_Damage_Status: CA_HUDRscControlsGroup
+ {
+ idc = 660;
+ class VScrollbar: VScrollbar
+ {
+ width = 0;
+ };
+ class HScrollbar: HScrollbar
+ {
+ height = 0;
+ };
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 32) + (1 * ( ((safezoneW / safezoneH) min 1.2) / 32) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2)) / 2))";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (13.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2)))";
+ w = "30 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "6 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ class controls
+ {
+ class CA_Damage_Temperature: RscPicture
+ {
+ idc = 667;
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\igui_WLight2_TEMP_CA.paa";
+ x = "5.5 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "4 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Damage_RPM: RscPicture
+ {
+ idc = 662;
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\igui_WLight2_RPM_CA.paa";
+ x = "11.5 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Damage_Torque: RscPicture
+ {
+ idc = 664;
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\igui_WLight2_TRQ_CA.paa";
+ x = "17.5 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Damage_Electricity: RscPicture
+ {
+ idc = 665;
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\igui_WLight2_DC_CA.paa";
+ x = "23.5 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Damage_Engine: RscPicture
+ {
+ idc = 663;
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\igui_WLight_ENG_CA.paa";
+ x = "5.5 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Damage_MainRotor: RscPicture
+ {
+ idc = 668;
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\igui_WLight_MROT_CA.paa";
+ x = "11.5 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "4 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Damage_Autohover: RscPicture
+ {
+ idc = 669;
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\igui_WLight_ATRQ_CA.paa";
+ x = "17.5 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "4 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ class CA_Damage_Fuel: RscPicture
+ {
+ idc = 666;
+ text = "\A3\ui_f\data\igui\rscingameui\RscUnitInfoAirRTDFull\igui_WLight_FUEL_CA.paa";
+ x = "23.5 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ y = "4 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 32)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ };
+ };
+ };
+ };
+ class RscOptics_Gunner_AAA_01: RscWeaponRangeZeroing
+ {
+ class CA_Distance: CA_Distance
+ {
+ colorText[] = {1,1,1,0.8};
+ };
+ };
+ class RscOptics_Gunner_APC_01: RscWeaponRangeZeroing
+ {
+ class CA_Distance: CA_Distance
+ {
+ colorText[] = {1,0,0,0.8};
+ };
+ };
+ class RscOptics_Gunner_APC_02: RscWeaponRangeZeroing
+ {
+ class CA_Distance: CA_Distance
+ {
+ colorText[] = {1,1,1,0.8};
+ };
+ };
+ class RscOptics_Gunner_APC_03: RscWeaponRangeZeroing
+ {
+ class CA_Distance: CA_Distance
+ {
+ colorText[] = {1,1,1,0.8};
+ };
+ };
+ class RscOptics_Gunner_MBT_01: RscWeaponRangeZeroing
+ {
+ class CA_Distance: CA_Distance
+ {
+ colorText[] = {0.675,1,0.4,0.8};
+ };
+ };
+ class RscOptics_Gunner_MBT_02: RscWeaponRangeZeroing
+ {
+ class CA_Distance: CA_Distance
+ {
+ colorText[] = {1,1,1,0.8};
+ };
+ };
+ class RscOptics_Gunner_MBT_03: RscWeaponRangeZeroing
+ {
+ class CA_Distance: CA_Distance
+ {
+ colorText[] = {1,1,1,0.8};
+ };
+ };
+ class RscOptics_Commander_01: RscWeaponRangeZeroing
+ {
+ class CA_Distance: CA_Distance
+ {
+ colorText[] = {0.675,1,0.4,0.8};
+ };
+ };
+ class RscOptics_Commander_02: RscWeaponRangeZeroing
+ {
+ class CA_Distance: CA_Distance
+ {
+ colorText[] = {1,1,1,0.8};
+ };
+ };
+ class RscOptics_Commander_03: RscWeaponRangeZeroing
+ {
+ class CA_Distance: CA_Distance
+ {
+ colorText[] = {1,1,1,0.8};
+ };
+ };
+};
+class EpochLoadingScreen
+{
+ idd = 13377;
+ onLoad = "uiNamespace setVariable ['EPOCH_loadingScreen',_this select 0]";
+ onUnload = "uiNamespace setVariable ['EPOCH_loadingScreen',displayNull]";
+ //onLoad = "[""onLoad"",_this,""RscDisplayLoading"",'Loading'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
+ //onUnload = "[""onUnload"",_this,""RscDisplayLoading"",'Loading'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
+
+ class controls
+ {
+ class ProgressMap: RscProgress
+ {
+ idc = 104; // progress bar, has to have idc 104
+ colorBar[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])","(profilenamespace getvariable ['GUI_BCG_RGB_A',0.8])"};
+ texture = "#(argb,8,8,3)color(1,1,1,1)";
+ x = 0.295761 * safezoneW + safezoneX;
+ y = 0.764 * safezoneH + safezoneY;
+ w = 0.408477 * safezoneW;
+ h = 0.0066 * safezoneH;
+ };
+ class EpochLogo: RscPicture
+ {
+ idc = 40;
+ text = "\x\addons\a3_epoch_code\Data\EpochLogo.paa";
+ x = 0.291635 * safezoneW + safezoneX;
+ y = 0.214 * safezoneH + safezoneY;
+ w = 0.417761 * safezoneW;
+ h = 0.2046 * safezoneH;
+ };
+ class LoadingText: RscStructuredText
+ {
+ idc = 50;
+ text = "";
+ class Attributes
+ {
+ size = "0.8 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ align = "center";
+ };
+ x = 0.314328 * safezoneW + safezoneX;
+ y = 0.709 * safezoneH + safezoneY;
+ w = 0.350767 * safezoneW;
+ h = 0.0396 * safezoneH;
+ sizeEx = "0.8 *((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ };
+
+
+
+ /*
+ class controls
+ {
+ class MapBackTop: RscText
+ {
+ x = "safezoneX";
+ y = "safezoneY";
+ w = "safezoneW";
+ idc = 1000;
+ h = "2.7 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorBackground[] = {0,0,0,1};
+ };
+ class MapName: RscText
+ {
+ x = "safezoneX + 0.2 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "safezoneY";
+ w = "safezoneW - 0.4 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ idc = 1001;
+ h = "1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class MapAuthor: RscText
+ {
+ x = "safezoneX + 0.2 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "safezoneY + 1.3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ font = "PuristaLight";
+ idc = 1002;
+ w = "16 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorText[] = {1,1,1,0.5};
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class MapBackBottom: RscText
+ {
+ x = "safezoneX";
+ y = "safezoneY + safezoneH - 2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "safezoneW";
+ idc = 1003;
+ h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ colorBackground[] = {0,0,0,0.6};
+ };
+ class MapDescription: RscStructuredText //Map Description
+ {
+ style = 2;
+ x = 0;
+ y = "safezoneY + safezoneH - 1.75 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = 1;
+ class Attributes
+ {
+ size = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ align = "center";
+ };
+ idc = 1102;
+ h = "1.75 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class ProgressMap: RscProgress
+ {
+ colorBar[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])","(profilenamespace getvariable ['GUI_BCG_RGB_A',0.8])"};
+ texture = "#(argb,8,8,3)color(1,1,1,1)";
+ x = "safezoneX";
+ y = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + safezoneY";
+ w = "safezoneW";
+ idc = 104;
+ h = "0.2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class ProgressMission: ProgressMap
+ {
+ idc = 1013;
+ x = "1.5 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
+ y = "10 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
+ w = "16 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "0.2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class Disclaimer: RscControlsGroupNoScrollbars
+ {
+ x = "safezoneX + safezoneW - 19.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "safezoneY + 3.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ idc = 2301;
+ w = "18.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "3.7 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ class controls
+ {
+ class DisclaimerName: RscText
+ {
+ colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])","(profilenamespace getvariable ['GUI_BCG_RGB_A',0.8])"};
+ idc = 1009;
+ text = "BETA";
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "18.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ class DisclaimerDescription: RscStructuredText
+ {
+ class Attributes
+ {
+ font = "PuristaLight";
+ size = 0.8;
+ };
+ shadow = 0;
+ colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",0.3};
+ colorText[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])","(profilenamespace getvariable ['GUI_BCG_RGB_A',0.8])"};
+ text = "This is not final software; content and technology is subject to change and may still contain errors / lack certain features.";
+ idc = 1101;
+ x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "1.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "18.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "2.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ };
+ };
+ };
+ class LoadingStart: RscControlsGroup
+ {
+ idc = 2310;
+ x = "0 * safezoneW + safezoneX";
+ y = "0 * safezoneH + safezoneY";
+ w = "1 * safezoneW";
+ h = "1 * safezoneH";
+ class controls
+ {
+ class Black: RscText
+ {
+ idc = 1000;
+ x = "0 * safezoneW";
+ y = "0 * safezoneH";
+ w = "1 * safezoneW";
+ h = "1 * safezoneH";
+ colorBackground[] = {0,0,0,1};
+ };
+ class Noise: RscPicture
+ {
+ idc = 1201;
+ text = "\A3\Ui_f\data\IGUI\RscTitles\SplashArma3\arma3_splashNoise_ca.paa";
+ x = "0 * safezoneW";
+ y = "0 * safezoneH";
+ w = "1 * safezoneW";
+ h = "1 * safezoneH";
+ };
+ class Logo: RscPictureKeepAspect
+ {
+ idc = 1200;
+ text = "\A3\Ui_f\data\Logos\arma3_splash_ca.paa";
+ x = "0.25 * safezoneW";
+ y = "0.3125 * safezoneH";
+ w = "0.5 * safezoneW";
+ h = "0.25 * safezoneH";
+ };
+ };
+ };
+ };
+ */
+ class controlsBackground
+ {
+ class Black: RscText
+ {
+ colorBackground[] = {0,0,0,1};
+ x = "safezoneXAbs";
+ y = "safezoneY";
+ w = "safezoneWAbs";
+ h = "safezoneH";
+ };
+ class Map: RscPicture
+ {
+ idc = 999;
+ text = "#(argb,8,8,3)color(0,0,0,1)";
+ colorText[] = {1,1,1,0.42};
+ x = "safezoneX";
+ y = "safezoneY - (safezoneW * 4/3) / 4";
+ w = "safezoneW";
+ h = "safezoneW * 4/3";
+ };
+ class CA_Vignette: RscVignette
+ {
+ colorText[] = {0,0,0,1};
+ };
+ class Noise: RscPicture
+ {
+ text = "\A3\Ui_f\data\GUI\Cfg\LoadingScreens\LoadingNoise_ca.paa";
+ colorText[] = {1,1,1,1};
+ x = "safezoneX";
+ y = "safezoneY";
+ w = "safezoneW";
+ h = "safezoneH";
+ };
+ };
+};
+class EPOCH_createGrp {
+ idd = -1200;
+ movingEnable = 0;
+ enableSimulation = 1;
+ onLoad = "[] spawn { waitUntil {!isNull (findDisplay -1200)};_this call EPOCH_cGroup_onLoad}";
+ class controlsBackground {
+ class TopBG: IGUIBack
+ {
+ idc = 10;
+
+ x = 0.334649 * safezoneW + safezoneX;
+ y = 0.4076 * safezoneH + safezoneY;
+ w = 0.319769 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])","(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"};
+ };
+ class MainBG: IGUIBack
+ {
+ idc = 11;
+
+ x = 0.334959 * safezoneW + safezoneX;
+ y = 0.4296 * safezoneH + safezoneY;
+ w = 0.319767 * safezoneW;
+ h = 0.0704 * safezoneH;
+ colorBackground[] = {0,0,0,0.7};
+ };
+ };
+ class controls {
+ class MainText: RscText
+ {
+ idc = 20;
+
+ text = "Epoch Group Menu";
+ x = 0.333927 * safezoneW + safezoneX;
+ y = 0.4076 * safezoneH + safezoneY;
+ w = 0.128939 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class GroupName: RscEdit
+ {
+ idc = 21;
+ onKeyDown = "_this call EPOCH_cGroup_groupText";
+ x = 0.392723 * safezoneW + safezoneX;
+ y = 0.4384 * safezoneH + safezoneY;
+ w = 0.192892 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class InfoText: RscText
+ {
+ idc = 22;
+
+ text = ""; //Dynamic, check onLoad!
+ x = 0.340116 * safezoneW + safezoneX;
+ y = 0.467 * safezoneH + safezoneY;
+ w = 0.245499 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class GroupNameText: RscText
+ {
+ idc = 23;
+ text = "Groupname:";
+ x = 0.340116 * safezoneW + safezoneX;
+ y = 0.4362 * safezoneH + safezoneY;
+ w = 0.0515754 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class BtnCreateGroup: RscButton
+ {
+ idc = 30;
+
+ text = "Create Group";
+ action = "call EPOCH_cGroup_BtnCreate";
+ x = 0.588297 * safezoneW + safezoneX;
+ y = 0.43686 * safezoneH + safezoneY;
+ w = 0.0618905 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class BtnClose: RscButton
+ {
+ idc = 31;
+ action = "closeDialog 0";
+ text = "Close";
+ x = 0.588297 * safezoneW + safezoneX;
+ y = 0.4681 * safezoneH + safezoneY;
+ w = 0.0619394 * safezoneW;
+ h = 0.0221111 * safezoneH;
+ };
+ };
+};
+class Epoch_myGroup {
+ idd = -1300;
+ movingEnable = 0;
+ enableSimulation = 1;
+ onLoad = "[] spawn { waitUntil {!isNull (findDisplay -1300)};_this call EPOCH_Group_onLoad}";
+ class controlsBackground {
+ class TopBG: IGUIBack
+ {
+ idc = 10;
+
+ x = 0.334649 * safezoneW + safezoneX;
+ y = 0.3174 * safezoneH + safezoneY;
+ w = 0.319769 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])","(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"};
+ };
+ class MainBG: IGUIBack
+ {
+ idc = 11;
+
+ x = 0.334959 * safezoneW + safezoneX;
+ y = 0.3394 * safezoneH + safezoneY;
+ w = 0.319767 * safezoneW;
+ h = 0.319 * safezoneH;
+ colorBackground[] = {0,0,0,0.7};
+ };
+ };
+ class controls {
+ class MainText: RscText
+ {
+ idc = 20;
+
+ text = "Epoch Group Menu";
+ x = 0.334959 * safezoneW + safezoneX;
+ y = 0.3174 * safezoneH + safezoneY;
+ w = 0.128939 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class GroupNameText: RscText
+ {
+ idc = 21;
+
+ text = "Groupname:";
+ x = 0.341149 * safezoneW + safezoneX;
+ y = 0.3526 * safezoneH + safezoneY;
+ w = 0.307403 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class InviteText: RscText
+ {
+ idc = 22;
+
+ text = "Invite Player";
+ x = 0.494843 * safezoneW + safezoneX;
+ y = 0.3966 * safezoneH + safezoneY;
+ w = 0.153712 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class BtnInvite: RscButton
+ {
+ idc = 30;
+
+ text = "";
+ action = "call EPOCH_Group_BtnInvite";
+ x = 0.492783 * safezoneW + safezoneX;
+ y = 0.5968 * safezoneH + safezoneY;
+ w = 0.157841 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class BtnClose: RscButton
+ {
+ idc = 34;
+ action = "closeDialog 0";
+
+ text = "Close";
+ x = 0.574269 * safezoneW + safezoneX;
+ y = 0.6276 * safezoneH + safezoneY;
+ w = 0.075349 * safezoneW;
+ h = 0.0221111 * safezoneH;
+ };
+ class BtnSetMod: RscButton
+ {
+ idc = 32;
+
+ text = "Set Mod";
+ tooltip = "Moderators can Invite or Kick Groupmember but can't set other player to Moderator";
+ action = "call EPOCH_Group_BtnMod";
+ x = 0.417476 * safezoneW + safezoneX;
+ y = 0.6276 * safezoneH + safezoneY;
+ w = 0.0701425 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class BtnKick: RscButton
+ {
+ idc = 33;
+
+ text = "Kick Member";
+ action = "call EPOCH_Group_BtnKick";
+ x = 0.340116 * safezoneW + safezoneX;
+ y = 0.6276 * safezoneH + safezoneY;
+ w = 0.0701425 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class BtnLeave: RscButton
+ {
+ idc = 31;
+ text = "Leave Group";
+ action = "call EPOCH_Group_BtnLeave";
+ x = 0.492779 * safezoneW + safezoneX;
+ y = 0.6276 * safezoneH + safezoneY;
+ w = 0.075349 * safezoneW;
+ h = 0.0221111 * safezoneH;
+ };
+ class GroupMemberList: RscListbox
+ {
+ idc = 40;
+ onLBSelChanged = "_this call EPOCH_Group_List";
+ x = 0.340116 * safezoneW + safezoneX;
+ y = 0.3922 * safezoneH + safezoneY;
+ w = 0.148556 * safezoneW;
+ h = 0.2266 * safezoneH;
+ };
+ class InvitePlayerCombo: RscCombo
+ {
+ idc = 41;
+ onLBSelChanged = "_this call EPOCH_Group_Combo";
+ x = 0.492779 * safezoneW + safezoneX;
+ y = 0.4296 * safezoneH + safezoneY;
+ w = 0.156793 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ };
+};
+
+class Epoch_GroupInvite {
+ idd = -1400;
+ movingEnable = 0;
+ enableSimulation = 1;
+ onLoad = "[] spawn { waitUntil {!isNull (findDisplay -1400)};_this call EPOCH_iGroup_onLoad}";
+ class controlsBackground {
+ class TopBG: IGUIBack
+ {
+ idc = 10;
+
+ x = 0.334649 * safezoneW + safezoneX;
+ y = 0.4076 * safezoneH + safezoneY;
+ w = 0.319769 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])","(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"};
+ };
+ class MainBG: IGUIBack
+ {
+ idc = 11;
+
+ x = 0.334959 * safezoneW + safezoneX;
+ y = 0.4296 * safezoneH + safezoneY;
+ w = 0.319767 * safezoneW;
+ h = 0.1056 * safezoneH;
+ colorBackground[] = {0,0,0,0.7};
+ };
+ };
+ class controls {
+ class MainText: RscText
+ {
+ idc = 20;
+
+ text = "Epoch Group Menu";
+ x = 0.333927 * safezoneW + safezoneX;
+ y = 0.4076 * safezoneH + safezoneY;
+ w = 0.128939 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class InfoText: RscText
+ {
+ idc = 21;
+ text = "";
+ x = 0.340116 * safezoneW + safezoneX;
+ y = 0.4384 * safezoneH + safezoneY;
+ w = 0.309452 * safezoneW;
+ h = 0.0594 * safezoneH;
+ };
+ class BtnAccept: RscButton
+ {
+ idc = 30;
+ action = "call EPOCH_iGroup_acceptInvite";
+
+ text = "Accept Invite";
+ x = 0.432952 * safezoneW + safezoneX;
+ y = 0.5066 * safezoneH + safezoneY;
+ w = 0.0618905 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class BtnRefuse: RscButton
+ {
+ idc = 31;
+ action = "Epoch_invited_GroupUID = """";Epoch_invited_GroupName = """"; closeDialog 0"; //Should work but not sure about the script scope
+
+ text = "Refuse Invite";
+ x = 0.505158 * safezoneW + safezoneX;
+ y = 0.5066 * safezoneH + safezoneY;
+ w = 0.0619394 * safezoneW;
+ h = 0.0221111 * safezoneH;
+ };
+ };
+};
+class SKN_RscShortcutButton {
+ idc = -1;
+ style = 0;
+ default = 0;
+ shadow = 1;
+ w = 0.183825;
+ h = "( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ color[] = {1,1,1,1.0};
+ colorFocused[] = {1,1,1,1.0};
+ color2[] = {0.95,0.95,0.95,1};
+ colorDisabled[] = {1,1,1,0.25};
+ colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1};
+ colorBackgroundFocused[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1};
+ colorBackground2[] = {1,1,1,1};
+ animTextureDefault = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa";
+ animTextureNormal = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa";
+ animTextureDisabled = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa";
+ animTextureOver = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\over_ca.paa";
+ animTextureFocused = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\focus_ca.paa";
+ animTexturePressed = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\down_ca.paa";
+ periodFocus = 1.2;
+ periodOver = 0.8;
+ class HitZone
+ {
+ left = 0.0;
+ top = 0.0;
+ right = 0.0;
+ bottom = 0.0;
+ };
+ class ShortcutPos
+ {
+ left = 0;
+ top = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - ( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2";
+ w = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)";
+ h = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ };
+ class TextPos
+ {
+ left = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)";
+ top = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - ( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2";
+ right = 0.005;
+ bottom = 0.0;
+ };
+ period = 0.4;
+ font = "PuristaMedium";
+ size = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ text = "";
+ soundEnter[] = {"\A3\ui_f\data\sound\RscButton\soundEnter",0.09,1};
+ soundPush[] = {"\A3\ui_f\data\sound\RscButton\soundPush",0.09,1};
+ soundClick[] = {"\A3\ui_f\data\sound\RscButton\soundClick",0.09,1};
+ soundEscape[] = {"\A3\ui_f\data\sound\RscButton\soundEscape",0.09,1};
+ action = "";
+ class Attributes
+ {
+ font = "PuristaMedium";
+ color = "#E5E5E5";
+ align = "left";
+ shadow = "true";
+ };
+ class AttributesImage
+ {
+ font = "PuristaMedium";
+ color = "#E5E5E5";
+ align = "left";
+ };
+};
+
+class SKN_RscButtonMenu : SKN_RscShortcutButton {
+ idc = -1;
+ type = 16;
+ onButtonClick = "_this spawn Skaronator_fnc_handleButton;";
+ style = "0x02 + 0xC0";
+ default = 0;
+ shadow = 0;
+ x = 0;
+ y = 0;
+ w = 0.095589;
+ h = 0.039216;
+ animTextureNormal = "#(argb,8,8,3)color(1,1,1,1)";
+ animTextureDisabled = "#(argb,8,8,3)color(1,1,1,1)";
+ animTextureOver = "#(argb,8,8,3)color(1,1,1,1)";
+ animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)";
+ animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)";
+ animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)";
+ colorBackground[] = {0,0,0,0.8};
+ colorBackgroundFocused[] = {1,1,1,1};
+ colorBackground2[] = {0.75,0.75,0.75,1};
+ color[] = {1,1,1,1};
+ colorFocused[] = {0,0,0,1};
+ color2[] = {0,0,0,1};
+ colorText[] = {1,1,1,1};
+ colorDisabled[] = {1,1,1,0.25};
+ period = 0;
+ periodFocus = 1.2;
+ periodOver = 1.2;
+ size = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ tooltipColorText[] = {1,1,1,1};
+ tooltipColorBox[] = {1,1,1,1};
+ tooltipColorShade[] = {0,0,0,0.65};
+ class TextPos
+ {
+ left = "0.25 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ top = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) - ( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2";
+ right = 0.005;
+ bottom = 0.0;
+ };
+ class Attributes
+ {
+ font = "PuristaLight";
+ color = "#E5E5E5";
+ align = "left";
+ shadow = "false";
+ };
+ class ShortcutPos
+ {
+ left = "(6.25 * ( ((safezoneW / safezoneH) min 1.2) / 40)) - 0.0225 - 0.005";
+ top = 0.005;
+ w = 0.0225;
+ h = 0.03;
+ };
+ soundEnter[] = {"\A3\ui_f\data\sound\RscButtonMenu\soundEnter",0.09,1};
+ soundPush[] = {"\A3\ui_f\data\sound\RscButtonMenu\soundPush",0.09,1};
+ soundClick[] = {"\A3\ui_f\data\sound\RscButtonMenu\soundClick",0.09,1};
+ soundEscape[] = {"\A3\ui_f\data\sound\RscButtonMenu\soundEscape",0.09,1};
+ textureNoShortcut = "";
+};
+
+class SKN_RscListBox
+{
+ access = 0;
+ type = 5;
+ w = 0.4;
+ h = 0.4;
+ rowHeight = 0;
+ colorText[] = {1,1,1,1};
+ colorDisabled[] = {1,1,1,0.25};
+ colorScrollbar[] = {1,0,0,0};
+ colorSelect[] = {0,0,0,1};
+ colorSelect2[] = {0,0,0,1};
+ colorSelectBackground[] = {1,1,1,0.25};
+ colorSelectBackground2[] = {1,1,1,0.25};
+ colorBackground[] = {0,0,0,0.25};
+ colorPicture[] = { 1, 1, 1, 1 };
+ colorPictureSelected[] = { 1, 1, 1, 1 };
+ colorPictureDisabled[] = { 1, 1, 1, 1 };
+ soundSelect[] = {"\A3\ui_f\data\sound\RscListbox\soundSelect",0.09,1};
+ autoScrollSpeed = -1;
+ autoScrollDelay = 5;
+ autoScrollRewind = 0;
+ arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)";
+ arrowFull = "#(argb,8,8,3)color(1,1,1,1)";
+ class ListScrollBar: ScrollBar
+ {
+ color[] = {1,1,1,1};
+ autoScrollEnabled = 1;
+ };
+ style = 16;
+ font = "PuristaMedium";
+ sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ shadow = 0;
+ colorShadow[] = {0,0,0,0.5};
+ period = 0;
+ maxHistoryDelay = 1;
+ tooltipColorText[] = {1,1,1,1};
+ tooltipColorBox[] = {1,1,1,1};
+ tooltipColorShade[] = {0,0,0,0.65};
+};
+
+class SKN_RscListNBox
+{
+ style = 16;
+ access = 0;
+ type = 102;
+ w = 0.4;
+ h = 0.4;
+ rowHeight = 0;
+ colorText[] = {1,1,1,1};
+ colorScrollbar[] = {0.95,0.95,0.95,1};
+ colorSelect[] = {0,0,0,1};
+ colorSelect2[] = {0,0,0,1};
+ colorSelectBackground[] = {0.95,0.95,0.95,1};
+ colorSelectBackground2[] = {1,1,1,0.5};
+ colorBackground[] = {0,0,0,1};
+ colorPicture[] = { 1, 1, 1, 1 };
+ colorPictureSelected[] = { 1, 1, 1, 1 };
+ colorPictureDisabled[] = { 1, 1, 1, 1 };
+ maxHistoryDelay = 1;
+ soundSelect[] = {"",0.1,1};
+ autoScrollSpeed = -1;
+ autoScrollDelay = 5;
+ autoScrollRewind = 0;
+ arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)";
+ arrowFull = "#(argb,8,8,3)color(1,1,1,1)";
+ drawSideArrows = 0;
+ columns[] = {0, 0.06,0.2,0.26};
+ idcLeft = -1;
+ idcRight = -1;
+ class ListScrollBar: ScrollBar{};
+ shadow = 0;
+ font = "PuristaMedium";
+ sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ color[] = {0.95,0.95,0.95,1};
+ colorDisabled[] = {1,1,1,0.25};
+ period = 1.2;
+ class ScrollBar: ScrollBar{ };
+};
+
+class SKN_RscMapControl
+{
+ access = 0;
+ type = 101;
+ idc = 51;
+ style = 48;
+ colorBackground[] = {0.969,0.957,0.949,1};
+ colorOutside[] = {0,0,0,1};
+ colorText[] = {0,0,0,1};
+ font = "TahomaB";
+ sizeEx = 0.04;
+ colorSea[] = {0.467,0.631,0.851,0.5};
+ colorForest[] = {0.624,0.78,0.388,0.5};
+ colorRocks[] = {0,0,0,0.3};
+ colorCountlines[] = {0.572,0.354,0.188,0.25};
+ colorMainCountlines[] = {0.572,0.354,0.188,0.5};
+ colorCountlinesWater[] = {0.491,0.577,0.702,0.3};
+ colorMainCountlinesWater[] = {0.491,0.577,0.702,0.6};
+ colorForestBorder[] = {0,0,0,0};
+ colorRocksBorder[] = {0,0,0,0};
+ colorPowerLines[] = {0.1,0.1,0.1,1};
+ colorRailWay[] = {0.8,0.2,0,1};
+ colorNames[] = {0.1,0.1,0.1,0.9};
+ colorInactive[] = {1,1,1,0.5};
+ colorLevels[] = {0.286,0.177,0.094,0.5};
+ colorTracks[] = {0.84,0.76,0.65,0.15};
+ colorRoads[] = {0.7,0.7,0.7,1};
+ colorMainRoads[] = {0.9,0.5,0.3,1};
+ colorTracksFill[] = {0.84,0.76,0.65,1};
+ colorRoadsFill[] = {1,1,1,1};
+ colorMainRoadsFill[] = {1,0.6,0.4,1};
+ colorGrid[] = {0.1,0.1,0.1,0.6};
+ colorGridMap[] = {0.1,0.1,0.1,0.6};
+ stickX[] = {0.2,{"Gamma",1,1.5}};
+ stickY[] = {0.2,{"Gamma",1,1.5}};
+ moveOnEdges = 0;//1;
+ x = "SafeZoneXAbs";
+ y = "SafeZoneY + 1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "SafeZoneWAbs";
+ h = "SafeZoneH - 1.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ shadow = 0;
+ ptsPerSquareSea = 5;
+ ptsPerSquareTxt = 3;
+ ptsPerSquareCLn = 10;
+ ptsPerSquareExp = 10;
+ ptsPerSquareCost = 10;
+ ptsPerSquareFor = 9;
+ ptsPerSquareForEdge = 9;
+ ptsPerSquareRoad = 6;
+ ptsPerSquareObj = 9;
+ showCountourInterval = 0;
+ scaleMin = 0.001;
+ scaleMax = 1.9; //Default: 1
+ scaleDefault = 0.2;
+ maxSatelliteAlpha = 0.85;
+ //alphaFadeStartScale = 0.35;
+ //alphaFadeEndScale = 0.4;
+ alphaFadeStartScale = 1.9;
+ alphaFadeEndScale = 2;
+ fontLabel = "PuristaMedium";
+ sizeExLabel = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
+ fontGrid = "TahomaB";
+ sizeExGrid = 0.02;
+ fontUnits = "TahomaB";
+ sizeExUnits = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
+ fontNames = "PuristaMedium";
+ sizeExNames = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8) * 2";
+ fontInfo = "PuristaMedium";
+ sizeExInfo = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
+ fontLevel = "TahomaB";
+ sizeExLevel = 0.02;
+ text = "#(argb,8,8,3)color(1,1,1,1)";
+ //text = "\a3\ui_f\data\map_background2_co.paa";
+ class Legend
+ {
+ colorBackground[] = {1,1,1,0.5};
+ color[] = {0,0,0,1};
+ x = "SafeZoneX + ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ y = "SafeZoneY + safezoneH - 4.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
+ h = "3.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
+ font = "PuristaMedium";
+ sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
+ };
+ class ActiveMarker
+ {
+ color[] = {0.3,0.1,0.9,1};
+ size = 50;
+ };
+ class Command
+ {
+ color[] = {1,1,1,1};
+ icon = "\A3\ui_f\data\map\mapcontrol\waypoint_ca.paa";
+ size = 18;
+ importance = 1;
+ coefMin = 1;
+ coefMax = 1;
+ };
+ class Task
+ {
+ colorCreated[] = {1,1,1,1};
+ colorCanceled[] = {0.7,0.7,0.7,1};
+ colorDone[] = {0.7,1,0.3,1};
+ colorFailed[] = {1,0.3,0.2,1};
+ color[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
+ icon = "\A3\ui_f\data\map\mapcontrol\taskIcon_CA.paa";
+ iconCreated = "\A3\ui_f\data\map\mapcontrol\taskIconCreated_CA.paa";
+ iconCanceled = "\A3\ui_f\data\map\mapcontrol\taskIconCanceled_CA.paa";
+ iconDone = "\A3\ui_f\data\map\mapcontrol\taskIconDone_CA.paa";
+ iconFailed = "\A3\ui_f\data\map\mapcontrol\taskIconFailed_CA.paa";
+ size = 27;
+ importance = 1;
+ coefMin = 1;
+ coefMax = 1;
+ };
+ class CustomMark
+ {
+ color[] = {0,0,0,1};
+ icon = "\A3\ui_f\data\map\mapcontrol\custommark_ca.paa";
+ size = 24;
+ importance = 1;
+ coefMin = 1;
+ coefMax = 1;
+ };
+ class Tree
+ {
+ color[] = {0.45,0.64,0.33,0.4};
+ icon = "\A3\ui_f\data\map\mapcontrol\bush_ca.paa";
+ size = 12;
+ importance = "0.9 * 16 * 0.05";
+ coefMin = 0.25;
+ coefMax = 4;
+ };
+ class SmallTree
+ {
+ color[] = {0.45,0.64,0.33,0.4};
+ icon = "\A3\ui_f\data\map\mapcontrol\bush_ca.paa";
+ size = 12;
+ importance = "0.6 * 12 * 0.05";
+ coefMin = 0.25;
+ coefMax = 4;
+ };
+ class Bush
+ {
+ color[] = {0.45,0.64,0.33,0.4};
+ icon = "\A3\ui_f\data\map\mapcontrol\bush_ca.paa";
+ size = "14/2";
+ importance = "0.2 * 14 * 0.05 * 0.05";
+ coefMin = 0.25;
+ coefMax = 4;
+ };
+ class Church
+ {
+ color[] = {1,1,1,1};
+ icon = "\A3\ui_f\data\map\mapcontrol\church_CA.paa";
+ size = 24;
+ importance = 1;
+ coefMin = 0.85;
+ coefMax = 1;
+ };
+ class Chapel
+ {
+ color[] = {0,0,0,1};
+ icon = "\A3\ui_f\data\map\mapcontrol\Chapel_CA.paa";
+ size = 24;
+ importance = 1;
+ coefMin = 0.85;
+ coefMax = 1;
+ };
+ class Cross
+ {
+ color[] = {0,0,0,1};
+ icon = "\A3\ui_f\data\map\mapcontrol\Cross_CA.paa";
+ size = 24;
+ importance = 1;
+ coefMin = 0.85;
+ coefMax = 1;
+ };
+ class Rock
+ {
+ color[] = {0.1,0.1,0.1,0.8};
+ icon = "\A3\ui_f\data\map\mapcontrol\rock_ca.paa";
+ size = 12;
+ importance = "0.5 * 12 * 0.05";
+ coefMin = 0.25;
+ coefMax = 4;
+ };
+ class Bunker
+ {
+ color[] = {0,0,0,1};
+ icon = "\A3\ui_f\data\map\mapcontrol\bunker_ca.paa";
+ size = 14;
+ importance = "1.5 * 14 * 0.05";
+ coefMin = 0.25;
+ coefMax = 4;
+ };
+ class Fortress
+ {
+ color[] = {0,0,0,1};
+ icon = "\A3\ui_f\data\map\mapcontrol\bunker_ca.paa";
+ size = 16;
+ importance = "2 * 16 * 0.05";
+ coefMin = 0.25;
+ coefMax = 4;
+ };
+ class Fountain
+ {
+ color[] = {0,0,0,1};
+ icon = "\A3\ui_f\data\map\mapcontrol\fountain_ca.paa";
+ size = 11;
+ importance = "1 * 12 * 0.05";
+ coefMin = 0.25;
+ coefMax = 4;
+ };
+ class ViewTower
+ {
+ color[] = {0,0,0,1};
+ icon = "\A3\ui_f\data\map\mapcontrol\viewtower_ca.paa";
+ size = 16;
+ importance = "2.5 * 16 * 0.05";
+ coefMin = 0.5;
+ coefMax = 4;
+ };
+ class Lighthouse
+ {
+ color[] = {1,1,1,1};
+ icon = "\A3\ui_f\data\map\mapcontrol\lighthouse_CA.paa";
+ size = 24;
+ importance = 1;
+ coefMin = 0.85;
+ coefMax = 1;
+ };
+ class Quay
+ {
+ color[] = {1,1,1,1};
+ icon = "\A3\ui_f\data\map\mapcontrol\quay_CA.paa";
+ size = 24;
+ importance = 1;
+ coefMin = 0.85;
+ coefMax = 1;
+ };
+ class Fuelstation
+ {
+ color[] = {1,1,1,1};
+ icon = "\A3\ui_f\data\map\mapcontrol\fuelstation_CA.paa";
+ size = 24;
+ importance = 1;
+ coefMin = 0.85;
+ coefMax = 1;
+ };
+ class Hospital
+ {
+ color[] = {1,1,1,1};
+ icon = "\A3\ui_f\data\map\mapcontrol\hospital_CA.paa";
+ size = 24;
+ importance = 1;
+ coefMin = 0.85;
+ coefMax = 1;
+ };
+ class BusStop
+ {
+ color[] = {1,1,1,1};
+ icon = "\A3\ui_f\data\map\mapcontrol\busstop_CA.paa";
+ size = 24;
+ importance = 1;
+ coefMin = 0.85;
+ coefMax = 1;
+ };
+ class Transmitter
+ {
+ color[] = {1,1,1,1};
+ icon = "\A3\ui_f\data\map\mapcontrol\transmitter_CA.paa";
+ size = 24;
+ importance = 1;
+ coefMin = 0.85;
+ coefMax = 1;
+ };
+ class Stack
+ {
+ color[] = {0,0,0,1};
+ icon = "\A3\ui_f\data\map\mapcontrol\stack_ca.paa";
+ size = 20;
+ importance = "2 * 16 * 0.05";
+ coefMin = 0.9;
+ coefMax = 4;
+ };
+ class Ruin
+ {
+ color[] = {0,0,0,1};
+ icon = "\A3\ui_f\data\map\mapcontrol\ruin_ca.paa";
+ size = 16;
+ importance = "1.2 * 16 * 0.05";
+ coefMin = 1;
+ coefMax = 4;
+ };
+ class Tourism
+ {
+ color[] = {0,0,0,1};
+ icon = "\A3\ui_f\data\map\mapcontrol\tourism_ca.paa";
+ size = 16;
+ importance = "1 * 16 * 0.05";
+ coefMin = 0.7;
+ coefMax = 4;
+ };
+ class Watertower
+ {
+ color[] = {1,1,1,1};
+ icon = "\A3\ui_f\data\map\mapcontrol\watertower_CA.paa";
+ size = 24;
+ importance = 1;
+ coefMin = 0.85;
+ coefMax = 1;
+ };
+ class Waypoint
+ {
+ color[] = {0,0,0,1};
+ size = 24;
+ importance = 1;
+ coefMin = 1;
+ coefMax = 1;
+ icon = "\A3\ui_f\data\map\mapcontrol\waypoint_ca.paa";
+ };
+ class WaypointCompleted
+ {
+ color[] = {0,0,0,1};
+ size = 24;
+ importance = 1;
+ coefMin = 1;
+ coefMax = 1;
+ icon = "\A3\ui_f\data\map\mapcontrol\waypointCompleted_ca.paa";
+ };
+ class power
+ {
+ icon = "\A3\ui_f\data\map\mapcontrol\power_CA.paa";
+ size = 24;
+ importance = 1;
+ coefMin = 0.85;
+ coefMax = 1;
+ color[] = {1,1,1,1};
+ };
+ class powersolar
+ {
+ icon = "\A3\ui_f\data\map\mapcontrol\powersolar_CA.paa";
+ size = 24;
+ importance = 1;
+ coefMin = 0.85;
+ coefMax = 1;
+ color[] = {1,1,1,1};
+ };
+ class powerwave
+ {
+ icon = "\A3\ui_f\data\map\mapcontrol\powerwave_CA.paa";
+ size = 24;
+ importance = 1;
+ coefMin = 0.85;
+ coefMax = 1;
+ color[] = {1,1,1,1};
+ };
+ class powerwind
+ {
+ icon = "\A3\ui_f\data\map\mapcontrol\powerwind_CA.paa";
+ size = 24;
+ importance = 1;
+ coefMin = 0.85;
+ coefMax = 1;
+ color[] = {1,1,1,1};
+ };
+ class shipwreck
+ {
+ icon = "\A3\ui_f\data\map\mapcontrol\shipwreck_CA.paa";
+ size = 24;
+ importance = 1;
+ coefMin = 0.85;
+ coefMax = 1;
+ color[] = {1,1,1,1};
+ };
+};
+
+class Skaronator_AdminMenu
+{
+ idd = -1337;
+ onload = "setMousePosition [0.5, 0.5];";
+ // onLoad = "[] spawn {disableSerialization;waitUntil {!isNull (findDisplay -1337)};_e0=findDisplay -1337;_e1=_e0 displayCtrl 10;_e2=_e0 displayCtrl 11;_e3=_e0 displayCtrl 20;_e4=_e0 displayCtrl 21;_e5=_e0 displayCtrl 22;_e6=_e0 displayCtrl 1;_sw=safezoneW;_sx=safezoneX;_sy=safezoneY;_sh=safezoneH;waitUntil {_e7=toArray(ctrlText 2);_e7 resize 38;if (ctrlText _e1!='Range'||ctrlText _e2!='Alphabet'||ctrlText _e3!='Main Menu'||ctrlText _e4!='Spawn Menu'||ctrlText _e5!='Server Menu'||!ctrlShown _e1||!ctrlShown _e2||!ctrlShown _e3||!ctrlShown _e4||!ctrlShown _e5||!ctrlShown _e6||!(ctrlPosition _e1 isEqualTo[0.180954*_sw+_sx,0.25844*_sh+_sy,0.0526068*_sw,0.022*_sh])||!(ctrlPosition _e2 isEqualTo[0.236966*_sw+_sx,0.258*_sh+_sy,0.0536383*_sw,0.022*_sh])||!(ctrlPosition _e3 isEqualTo[0.296277*_sw+_sx,0.258*_sh+_sy,0.0649849*_sw,0.022*_sh])||!(ctrlPosition _e4 isEqualTo[0.364253*_sw+_sx,0.258*_sh+_sy,0.0649849*_sw,0.022*_sh])||!(ctrlPosition _e5 isEqualTo[0.431714*_sw+_sx,0.258*_sh+_sy,0.0649849*_sw,0.022*_sh])||!(ctrlPosition _e6 isEqualTo[0.179201*_sw+_sx,0.225*_sh+_sy,0.113573*_sw,0.0242*_sh])||!(_e7 isEqualTo[69,112,111,99,104,32,77,111,100,32,65,100,109,105,110,32,77,101,110,117,32,98,121,32,83,107,97,114,111,110,97,116,111,114,46,99,111,109])) exitWith {if (!isNull (findDisplay -1337)) then {(findDisplay -1337) closeDisplay 0;true}};uiSleep 0.2;isNull (findDisplay -1337)}}";
+ onUnload = "";
+ movingEnable = 1;
+ class Controls {
+ class PlayerBar: RscText
+ {
+ idc = 1;
+ x = 0.179201 * safezoneW + safezoneX;
+ y = 0.225 * safezoneH + safezoneY;
+ w = 0.113573 * safezoneW;
+ h = 0.0242 * safezoneH;
+ colorBackground[] = {0.78,0.37,0,1};
+ colorActive[] = {0.78,0.37,0,1};
+ };
+ class MainBar: RscText
+ {
+ idc = 2;
+ text = "Epoch Mod Admin Menu by Skaronator.com";
+ x = 0.293698 * safezoneW + safezoneX;
+ y = 0.225 * safezoneH + safezoneY;
+ w = 0.412705 * safezoneW;
+ h = 0.0242 * safezoneH;
+ colorBackground[] = {0.78,0.37,0,1};
+ colorActive[] = {0.78,0.37,0,1};
+ };
+ class PlayerBtnBackground: IGUIBack
+ {
+ idc = 3;
+ x = 0.178995 * safezoneW + safezoneX;
+ y = 0.25206 * safezoneH + safezoneY;
+ w = 0.113466 * safezoneW;
+ h = 0.0352 * safezoneH;
+ colorBackground[] = {0,0,0,0.75};
+ colorActive[] = {0,0,0,0.75};
+ };
+ class BtnMainBackground: IGUIBack
+ {
+ idc = 4;
+ x = 0.293698 * safezoneW + safezoneX;
+ y = 0.2514 * safezoneH + safezoneY;
+ w = 0.412629 * safezoneW;
+ h = 0.0352 * safezoneH;
+ colorBackground[] = {0,0,0,0.75};
+ colorActive[] = {0,0,0,0.75};
+ };
+ class PlayerList: SKN_RscListBox
+ {
+ idc = 5;
+ sizeEx = 0.035;
+ x = 0.179201 * safezoneW + safezoneX;
+ y = 0.2888 * safezoneH + safezoneY;
+ w = 0.113466 * safezoneW;
+ h = 0.4862 * safezoneH;
+ colorBackground[] = {0,0,0,0.75};
+ colorActive[] = {0,0,0,0.75};
+ };
+ class MainList: SKN_RscListBox
+ {
+ idc = 6;
+ sizeEx = 0.035;
+ x = 0.293698 * safezoneW + safezoneX;
+ y = 0.2888 * safezoneH + safezoneY;
+ w = 0.206297 * safezoneW;
+ h = 0.4862 * safezoneH;
+ colorBackground[] = {0,0,0,0.75};
+ colorActive[] = {0,0,0,0.75};
+ };
+ class BtnRange: SKN_RscButtonMenu
+ {
+ idc = 10;
+ size = 0.037;
+
+ text = "Range";
+ x = 0.180954 * safezoneW + safezoneX;
+ y = 0.25844 * safezoneH + safezoneY;
+ w = 0.0526068 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0.9};
+ colorActive[] = {0,0,0,0.9};
+ };
+ class BtnAlphabet: SKN_RscButtonMenu
+ {
+ idc = 11;
+ size = 0.037;
+
+ text = "Alphabet";
+ x = 0.236966 * safezoneW + safezoneX;
+ y = 0.258 * safezoneH + safezoneY;
+ w = 0.0536383 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0.9};
+ colorActive[] = {0,0,0,0.9};
+ };
+ class BtnMainMenu: SKN_RscButtonMenu
+ {
+ idc = 20;
+ size = 0.037;
+
+ text = "Main Menu";
+ x = 0.296277 * safezoneW + safezoneX;
+ y = 0.258 * safezoneH + safezoneY;
+ w = 0.0649849 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0.9};
+ colorActive[] = {0,0,0,0.9};
+ };
+ class BtnSpawnMenu: SKN_RscButtonMenu
+ {
+ idc = 21;
+ size = 0.037;
+
+ text = "Spawn Menu";
+ x = 0.364253 * safezoneW + safezoneX;
+ y = 0.258 * safezoneH + safezoneY;
+ w = 0.0649849 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0.9};
+ colorActive[] = {0,0,0,0.9};
+ };
+ class BtnServerMenu: SKN_RscButtonMenu
+ {
+ idc = 22;
+ size = 0.037;
+
+ text = "Server Menu";
+ x = 0.431714 * safezoneW + safezoneX;
+ y = 0.258 * safezoneH + safezoneY;
+ w = 0.0649849 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0.9};
+ colorActive[] = {0,0,0,0.9};
+ };
+ class BtnAntihackLog: SKN_RscButtonMenu
+ {
+ idc = 23;
+
+ text = "Antihack Log (666)";
+ x = 0.503094 * safezoneW + safezoneX;
+ y = 0.258 * safezoneH + safezoneY;
+ w = 0.0990245 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0.9};
+ colorActive[] = {0,0,0,0.9};
+ };
+ class BtnAdminLog: SKN_RscButtonMenu
+ {
+ idc = 24;
+
+ text = "Admin Log (666)";
+ x = 0.605008 * safezoneW + safezoneX;
+ y = 0.258 * safezoneH + safezoneY;
+ w = 0.0979928 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0.9};
+ colorActive[] = {0,0,0,0.9};
+ };
+ class BackgroundInputbox: IGUIBack
+ {
+ idc = 30;
+
+ x = 0.501031 * safezoneW + safezoneX;
+ y = 0.2888 * safezoneH + safezoneY;
+ w = 0.205296 * safezoneW;
+ h = 0.1276 * safezoneH;
+ colorBackground[] = {0,0,0,0.75};
+ colorActive[] = {0,0,0,0.75};
+ };
+ class RscText: RscText
+ {
+ idc = 34;
+ text = "Ban reason for";
+ x = 0.509283 * safezoneW + safezoneX;
+ y = 0.3108 * safezoneH + safezoneY;
+ w = 0.182603 * safezoneW;
+ h = 0.0176 * safezoneH;
+ };
+ class RscInputBox: SKN_RscEdit
+ {
+ idc = 31;
+ x = 0.513415 * safezoneW + safezoneX;
+ y = 0.3438 * safezoneH + safezoneY;
+ w = 0.161969 * safezoneW;
+ h = 0.0198 * safezoneH;
+ };
+ class RscButtonMenuOK: SKN_RscButtonMenu
+ {
+ text = "OK";
+ idc = 32;
+ x = 0.639254 * safezoneW + safezoneX;
+ y = 0.4186 * safezoneH + safezoneY;
+ w = 0.067048 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class RscButtonMenuCancel: SKN_RscButtonMenu
+ {
+ text = "CANCEL";
+ idc = 33;
+ x = 0.501031 * safezoneW + safezoneX;
+ y = 0.4186 * safezoneH + safezoneY;
+ w = 0.067048 * safezoneW;
+ h = 0.022 * safezoneH;
+ };
+ class MapView: SKN_RscMapControl
+ {
+ idc = 7;
+ x = 0.501031 * safezoneW + safezoneX;
+ y = 0.28836 * safezoneH + safezoneY;
+ w = 0.205265 * safezoneW;
+ h = 0.486548 * safezoneH;
+ };
+ class MainListNBox: SKN_RscListNBox
+ {
+ idc = 8;
+ sizeEx = 0.035;
+ x = 0.293698 * safezoneW + safezoneX;
+ y = 0.2888 * safezoneH + safezoneY;
+ w = 0.206297 * safezoneW;
+ h = 0.4862 * safezoneH;
+ colorBackground[] = {0,0,0,0.75};
+ colorActive[] = {0,0,0,0.75};
+ };
+ class BtnClear: SKN_RscButtonMenu
+ {
+ idc = 50;
+ size = 0.037;
+
+ text = "CLEAR";
+ x = 0.504126 * safezoneW + safezoneX;
+ y = 0.753 * safezoneH + safezoneY;
+ w = 0.0361028 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0.9};
+ colorActive[] = {0,0,0,0.9};
+ };
+ class BtnGiveTrgt: SKN_RscButtonMenu
+ {
+ idc = 51;
+ size = 0.037;
+
+ text = "Give to Target";
+ x = 0.542292 * safezoneW + safezoneX;
+ y = 0.7783 * safezoneH + safezoneY;
+ w = 0.0804576 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0.9};
+ colorActive[] = {0,0,0,0.9};
+ };
+ class BtnGiveMySelf: SKN_RscButtonMenu
+ {
+ idc = 52;
+ size = 0.037;
+
+ text = "GIVE TO SELF";
+ x = 0.626257 * safezoneW + safezoneX;
+ y = 0.7783 * safezoneH + safezoneY;
+ w = 0.0804576 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0.9};
+ colorActive[] = {0,0,0,0.9};
+ };
+ class LeftSide: RscText
+ {
+ idc = 40;
+
+ text = "Available Items";
+ x = 0.29473 * safezoneW + safezoneX;
+ y = 0.291 * safezoneH + safezoneY;
+ w = 0.164117 * safezoneW;
+ h = 0.0242 * safezoneH;
+ colorBackground[] = {0.78,0.37,0,1};
+ colorActive[] = {0.78,0.37,0,1};
+ };
+ class ListBoxLeft: SKN_RscListBox
+ {
+ idc = 41;
+
+ x = 0.294627 * safezoneW + safezoneX;
+ y = 0.3174 * safezoneH + safezoneY;
+ w = 0.16401 * safezoneW;
+ h = 0.4576 * safezoneH;
+ colorBackground[] = {0,0,0,0.75};
+ colorActive[] = {0,0,0,0.75};
+ };
+ class RightSide: RscText
+ {
+ idc = 42;
+
+ text = "Adding to Gear";
+ x = 0.542292 * safezoneW + safezoneX;
+ y = 0.291 * safezoneH + safezoneY;
+ w = 0.164117 * safezoneW;
+ h = 0.0242 * safezoneH;
+ colorBackground[] = {0.78,0.37,0,1};
+ colorActive[] = {0.78,0.37,0,1};
+ };
+ class ListBoxRight: SKN_RscListBox
+ {
+ idc = 43;
+
+ x = 0.542292 * safezoneW + safezoneX;
+ y = 0.31652 * safezoneH + safezoneY;
+ w = 0.163892 * safezoneW;
+ h = 0.458993 * safezoneH;
+ colorBackground[] = {0,0,0,0.75};
+ colorActive[] = {0,0,0,0.75};
+ };
+ class CenterTitle: RscText
+ {
+ idc = 60;
+
+ text = "Categories";
+ x = 0.46596 * safezoneW + safezoneX;
+ y = 0.291 * safezoneH + safezoneY;
+ w = 0.0670479 * safezoneW;
+ h = 0.0242 * safezoneH;
+ colorBackground[] = {0.78,0.37,0,1};
+ colorActive[] = {0.78,0.37,0,1};
+ };
+ class BtnSpawnVehicleAir: SKN_RscButtonMenu
+ {
+ idc = 61;
+ size = 0.037;
+
+ text = "V: AIR";
+ x = 0.46596 * safezoneW + safezoneX;
+ y = 0.3196 * safezoneH + safezoneY;
+ w = 0.0670479 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0.9};
+ colorActive[] = {0,0,0,0.9};
+ };
+ class BtnSpawnVehicleLand: SKN_RscButtonMenu
+ {
+ idc = 62;
+ size = 0.037;
+
+ text = "V: LAND";
+ x = 0.46596 * safezoneW + safezoneX;
+ y = 0.346 * safezoneH + safezoneY;
+ w = 0.0670479 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0.9};
+ colorActive[] = {0,0,0,0.9};
+ };
+ class BtnSpawnVehicleShip: SKN_RscButtonMenu
+ {
+ idc = 63;
+ size = 0.037;
+
+ text = "V: SHIP";
+ x = 0.46596 * safezoneW + safezoneX;
+ y = 0.3724 * safezoneH + safezoneY;
+ w = 0.0670479 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0.9};
+ colorActive[] = {0,0,0,0.9};
+ };
+ class BtnSpawnWeapons: SKN_RscButtonMenu
+ {
+ idc = 64;
+ size = 0.037;
+
+ text = "WEAPONS";
+ x = 0.46596 * safezoneW + safezoneX;
+ y = 0.3988 * safezoneH + safezoneY;
+ w = 0.0670479 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0.9};
+ colorActive[] = {0,0,0,0.9};
+ };
+ class BtnSpawnMagazines: SKN_RscButtonMenu
+ {
+ idc = 65;
+ size = 0.037;
+
+ text = "MAGAZINES";
+ x = 0.46596 * safezoneW + safezoneX;
+ y = 0.4252 * safezoneH + safezoneY;
+ w = 0.0670479 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0.9};
+ colorActive[] = {0,0,0,0.9};
+ };
+ class BtnSpawnItems: SKN_RscButtonMenu
+ {
+ idc = 66;
+ size = 0.037;
+
+ text = "ITEMS";
+ x = 0.46596 * safezoneW + safezoneX;
+ y = 0.4516 * safezoneH + safezoneY;
+ w = 0.0670479 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0.9};
+ colorActive[] = {0,0,0,0.9};
+ };
+ class BtnSpawnBackpacks: SKN_RscButtonMenu
+ {
+ idc = 67;
+ size = 0.037;
+
+ text = "BACKPACKS";
+ x = 0.46596 * safezoneW + safezoneX;
+ y = 0.478 * safezoneH + safezoneY;
+ w = 0.0670479 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0.9};
+ colorActive[] = {0,0,0,0.9};
+ };
+ class BtnSpawnUniforms: SKN_RscButtonMenu
+ {
+ idc = 68;
+ size = 0.037;
+
+ text = "UNIFORMS";
+ x = 0.46596 * safezoneW + safezoneX;
+ y = 0.5044 * safezoneH + safezoneY;
+ w = 0.0670479 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0.9};
+ colorActive[] = {0,0,0,0.9};
+ };
+ class BtnSpawnAttachments: SKN_RscButtonMenu
+ {
+ idc = 69;
+ size = 0.037;
+
+ text = "ATTACHMENTS";
+ x = 0.46596 * safezoneW + safezoneX;
+ y = 0.5308 * safezoneH + safezoneY;
+ w = 0.0670479 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = {1,1,1,1};
+ colorBackground[] = {0,0,0,0.9};
+ colorActive[] = {0,0,0,0.9};
+ };
+ class BtnSpawnHeadGear : SKN_RscButtonMenu
+ {
+ idc = 70;
+ size = 0.037;
+
+ text = "HEADGEAR";
+ x = 0.46596 * safezoneW + safezoneX;
+ y = 0.5572 * safezoneH + safezoneY;
+ w = 0.0670479 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = { 1, 1, 1, 1 };
+ colorBackground[] = { 0, 0, 0, 0.9 };
+ colorActive[] = { 0, 0, 0, 0.9 };
+ };
+ class BtnSpawnVests : SKN_RscButtonMenu
+ {
+ idc = 71;
+ size = 0.037;
+
+ text = "VESTS";
+ x = 0.46596 * safezoneW + safezoneX;
+ y = 0.5836 * safezoneH + safezoneY;
+ w = 0.0670479 * safezoneW;
+ h = 0.022 * safezoneH;
+ colorText[] = { 1, 1, 1, 1 };
+ colorBackground[] = { 0, 0, 0, 0.9 };
+ colorActive[] = { 0, 0, 0, 0.9 };
+ };
+
+ };
+};
diff --git a/Sources/epoch_code/gui/scripts/Epoch_handleWelcomeScreen.sqf b/Sources/epoch_code/gui/scripts/Epoch_handleWelcomeScreen.sqf
new file mode 100644
index 00000000..039ff3ea
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/Epoch_handleWelcomeScreen.sqf
@@ -0,0 +1,45 @@
+/*
+ Possible Ways:
+ 1. Display always on game start
+ 2. Display only one time, then never again
+ 3. Display once and just again when a update released
+
+ Current way: 2 but with possibility to use 3rd way
+*/
+private ["_display","_version","_shouldShow_Main","_shouldShow_Boot"];
+
+_display = _this select 0;
+if ((configName (configFile >> "CfgPatches" >> "A3_Missions_F_EPC")) != "") then { //Full game
+
+ _shouldShow_Main = profileNamespace getVariable ["BIS_welcomeScreenShown", 0] == 0;
+ _shouldShow_Boot = profileNamespace getVariable ["BIS_welcomeScreenBootcampShown", 0] == 0;
+ _currentVersion = getNumber(configFile >> "CfgMods" >> "Epoch" >> "majorVersion");
+ _oldVersion = profileNamespace getVariable ["EPOCH_welcomeScreenShown_majorVersion", 0];
+
+ if (_currentVersion > _oldVersion) then {
+ _display createDisplay "RscWelcomeEpoch";
+
+ profileNamespace setVariable ["EPOCH_welcomeScreenShown_majorVersion", _currentVersion];
+ profileNamespace setVariable ["BIS_welcomeScreenShown", 1];
+ profileNamespace setVariable ["BIS_welcomeScreenBootcampShown", 1];
+ profileNamespace setVariable ["EPOCH_welcomeScreenShown_Version", getText(configFile >> "CfgMods" >> "Epoch" >> "version")];
+ saveProfileNamespace;
+ };
+};
+
+/*
+ HANDLE DEVELOPMENT BRANCH / BOOTCAMP MAIN MANU
+*/
+//if (productVersion select 2 > 126) then {} else {};
+
+
+["onLoad",_this,"RscDisplayMain","GUI"] call compile preprocessFileLineNumbers "A3\ui_f\scripts\initDisplay.sqf";
+
+if (_shouldShow_Main) then {
+ profileNamespace setVariable ["BIS_welcomeScreenShown", 0];
+ saveProfileNamespace;
+};
+if (_shouldShow_Boot) then {
+ profileNamespace setVariable ["BIS_welcomeScreenBootcampShown", 0];
+ saveProfileNamespace;
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/gui/scripts/Epoch_interactVehicle.sqf b/Sources/epoch_code/gui/scripts/Epoch_interactVehicle.sqf
new file mode 100644
index 00000000..0c549d0a
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/Epoch_interactVehicle.sqf
@@ -0,0 +1,43 @@
+private["_mode","_display","_vehicle","_isLock"];
+_mode = [_this,0,"",[""]] call bis_fnc_param;
+_display = [_this,1,displayNull,[displayNull]] call bis_fnc_param;
+
+_vehicle = cursorTarget;
+
+if (vehicle player != player) then {
+ _vehicle = vehicle player;
+};
+
+if (isNull _vehicle) exitWith { closeDialog 0 };
+disableSerialization;
+
+_isLock = locked _vehicle in [2,3];
+switch _mode do {
+ case "onLoad": {
+ if !((crew _vehicle) isEqualTo []) then {
+ (_display displayCtrl 2400) ctrlEnable false;
+ };
+ if (_isLock) then {
+ (_display displayCtrl 2400) ctrlEnable false; //Lock Button
+ (_display displayCtrl 2402) ctrlEnable false; //Inspect Button
+ } else {
+ (_display displayCtrl 2401) ctrlEnable false; //Unlock Button
+ };
+ };
+ case "Lock": {
+ if (!_isLock) then {
+ EPOCH_lockVehicle_PVS = [_vehicle, true, player, Epoch_personalToken];
+ publicVariableServer "EPOCH_lockVehicle_PVS";
+ };
+ closeDialog 0;
+ };
+ case "Unlock": {
+ if (_isLock) then {
+ EPOCH_lockVehicle_PVS = [_vehicle, false, player, Epoch_personalToken];
+ publicVariableServer "EPOCH_lockVehicle_PVS";
+ };
+ closeDialog 0;
+ };
+
+ default { closeDialog 0 };
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/gui/scripts/Epoch_onPause.sqf b/Sources/epoch_code/gui/scripts/Epoch_onPause.sqf
new file mode 100644
index 00000000..331cbb2d
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/Epoch_onPause.sqf
@@ -0,0 +1,74 @@
+private ["_fieldManual","_btnAbort"];
+
+_fieldManual = _display displayCtrl 122;
+_fieldManual ctrlEnable false;
+_btnSave = _display displayCtrl 103;
+_btnSave ctrlEnable false;
+_btnAbort = _display displayCtrl 104;
+_btnAbort ctrlEnable false;
+
+
+_respawnButton = _display displayCtrl 1010;
+_respawnButton ctrlEnable false;
+
+//Change to a scheduled environment
+
+[_btnAbort,_display] spawn {
+ disableSerialization;
+ _startTime = diag_tickTime+10;
+ _btnAbort = _this select 0;
+ _display = _this select 1;
+ waitUntil {
+ _time = _startTime - diag_tickTime;
+ if (isNull _display || _time <= 0) exitWith {true};
+ _btnAbort ctrlSetText format[localize "str_epoch_abort",[_time,"SS.MS"] call BIS_fnc_secondsToString];
+ false
+ };
+ if (!isNull _display) then {
+ _btnAbort ctrlSetText localize "str_disp_int_abort";
+ _btnAbort ctrlEnable true;
+ };
+};
+[_display,_btnAbort,_fieldManual,_btnSave] spawn {
+ disableSerialization;
+ _display = _this select 0;
+ _btnAbort = _this select 1;
+ _fieldManual = _this select 2;
+ _btnSave = _this select 3;
+ _profilName = _display displayctrl 109;
+ _pauseText = _display displayctrl 523;
+ _pauseSetText = toUpper(localize "str_a3_cfguigrids_gui_0");
+ _fieldManualText = toUpper(localize "str_a3_rscdisplaywelcome_pare_list3_title");
+ _btnSaveText = toUpper(localize "str_disp_int_save");
+
+ waitUntil {
+ _fieldManual ctrlShow true;
+ _fieldManual ctrlEnable false;
+ _fieldManual ctrlSetText _fieldManualText;
+
+ _btnSave ctrlShow true;
+ _btnSave ctrlSetText _btnSaveText;
+
+ _pauseText ctrlSetText _pauseSetText;
+ _profilName ctrlSetText profileName;
+
+ uiSleep 0.2;
+ isNull _display
+ };
+};
+[_display] spawn {
+ disableSerialization;
+ _display = _this select 0;
+ _pushCustomVar = compile preprocessFileLineNumbers "\x\addons\a3_epoch_code\compile\functions\EPOCH_pushCustomVar.sqf";
+ false call _pushCustomVar;
+
+ _startTime = diag_tickTime+5;
+ waitUntil {
+ uiSleep 0.2;
+ (isNull _display) || ((_startTime - diag_tickTime) <= 0)
+ };
+ if (!isNull _display) then {
+ true call _pushCustomVar;
+ };
+};
+true
\ No newline at end of file
diff --git a/Sources/epoch_code/gui/scripts/Epoch_showStats.sqf b/Sources/epoch_code/gui/scripts/Epoch_showStats.sqf
new file mode 100644
index 00000000..4c486c83
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/Epoch_showStats.sqf
@@ -0,0 +1,9 @@
+disableSerialization;
+
+9992 cutRsc["EpochGameUI2", "PLAIN", 2, false];
+_display = uiNamespace getVariable "EPOCH_EpochGameUI2";
+(_display displayCtrl 21208) ctrlSetText format["%1", EPOCH_playerCrypto];
+
+9993 cutRsc["EpochGameUI3", "PLAIN", 2, false];
+_display3 = uiNamespace getVariable "EPOCH_EpochGameUI3";
+(_display3 displayCtrl 21210) ctrlSetText format["%1/%2", round(EPOCH_playerEnergy), EPOCH_playerEnergyMax];
\ No newline at end of file
diff --git a/Sources/epoch_code/gui/scripts/Epoch_welcomeScreen.sqf b/Sources/epoch_code/gui/scripts/Epoch_welcomeScreen.sqf
new file mode 100644
index 00000000..12a15697
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/Epoch_welcomeScreen.sqf
@@ -0,0 +1,61 @@
+private ["_display","_case","_colorHighlight","_bullet","_message","_yText1","_hText1","_positionTextField","_textField"];
+_display = _this select 1 select 0;
+_case = _this select 1 select 1;
+
+_buttonSpoiler = _display displayctrl 2400;
+
+[_display,"RscWelcomeEpoch"] call bis_fnc_guiEffectTiles;
+
+_colorHighlight = ["GUI", "BCG_RGB"] call BIS_fnc_displayColorGet;
+_colorHighlight = _colorHighlight call BIS_fnc_colorRGBtoHTML;
+
+_bullet = "";
+_message = "
";
+
+switch _case do {
+ case "Welcome": {
+ _message = _message + "
";
+ _message = _message + "NEW TO EPOCH?
";
+ _message = _message + "Epoch is a open world survival mod set in the year 2035, Just two years after the mass extinction of billions of people.
+ Those that remain are left with remnants of a once technological society. Try to survive, build, or explore your way through the harsh dynamic environment.
";
+
+ _message = _message + _bullet + " Fully persistent open world with custom hive backend made just for A3 Epoch.
";
+ _message = _message + _bullet + " Base building re-envisioned for Arma 3 PhysX. Persists exact position, direction, and angle.
";
+ _message = _message + _bullet + " Persistent tracking of vehicles position, color, direction, and inventory.
";
+ _message = _message + _bullet + " Random encounters with several different types of antagonists.
";
+ _message = _message + _bullet + " Custom vehicles and weapons including melee weapons.
";
+ _message = _message + _bullet + " Male and Female players with custom apparel.
";
+ _message = _message + _bullet + " Explore and Loot: Wrecked ships, Abandoned vehicles and buildings, and more!
";
+ _message = _message + "
";
+
+ _message = _message + "EPOCH VETERAN?
";
+ _message = _message + "As compared to Arma 2 Epoch, ...
";
+ _message = _message + _bullet + " Barter based economy backed by a crypto currency.
";
+ _message = _message + _bullet + " Roaming and city based NPC traders.
";
+ _message = _message + _bullet + " Improved base building with snap assisted placement.
";
+
+ _message = _message + "
";
+
+ _message = _message + "More at www.epochmod.com
";
+ _message = _message + "Epoch Mod is currently in development by AWOL, Skaronator, Axeman, Sequisha, Fank and Kiory.
";
+ };
+ case "Changelog": {
+
+ };
+ case "Custom": {
+ if (!isNil "Epoch_customMessage") then {
+ _message = Epoch_customMessage;
+ Epoch_customMessage = nil;
+ };
+ };
+};
+_textField = _display displayCtrl 1100;
+_textField ctrlSetStructuredText (parseText _message);
+_positionTextField = ctrlPosition _textField;
+_yText1 = _positionTextField select 1;
+_hText1 = ctrlTextHeight _textField;
+
+_textField ctrlSetPosition [_positionTextField select 0, _yText1, _positionTextField select 2, _hText1];
+_textField ctrlcommit 0;
+
+_buttonSpoiler ctrlShow false;
diff --git a/Sources/epoch_code/gui/scripts/RscDebugConsole.sqf b/Sources/epoch_code/gui/scripts/RscDebugConsole.sqf
new file mode 100644
index 00000000..c44362a7
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/RscDebugConsole.sqf
@@ -0,0 +1,214 @@
+#include "\A3\ui_f\hpp\defineResincl.inc"
+#include "\A3\ui_f\hpp\defineResinclDesign.inc"
+#include "\A3\ui_f\hpp\defineDIKCodes.inc"
+
+disableserialization;
+
+_mode = _this select 0;
+_params = _this select 1;
+_class = _this select 2;
+
+_allowDebugConsole = if (isnil "_allowDebugConsole") then {false} else {_allowDebugConsole};
+_enableDebugConsole = ["DebugConsole",getnumber (missionconfigfile >> "enableDebugConsole")] call bis_fnc_getParamValue;
+
+if (
+ //--- Editor
+ (((uinamespace getvariable "gui_displays") find (finddisplay 26) in [0,1]) && !ismultiplayer)
+ ||
+ //--- In mission with enableDebugConsole entry set to 1 (only for host/admin)
+ {(_enableDebugConsole == 1 && (isserver || serverCommandAvailable "#shutdown"))}
+ ||
+ //--- In mission with enableDebugConsole entry set to 2 (for everyone)
+ {(_enableDebugConsole == 2)}
+ ||
+ //--- Allowed by script
+ {_allowDebugConsole}
+ //||
+ //--- Dev version
+ //cheatsEnabled
+) then {
+
+ switch _mode do {
+
+ case "onLoad": {
+
+ _display = _params select 0;
+
+ _ctrlLink = _display displayctrl IDC_RSCDEBUGCONSOLE_LINK;
+ _ctrlLink htmlLoad "a3\ui_f\data\html\RscDebugConsole.html";
+
+ Epoch_Debug_GUI_onLoad = compileFinal ('true');
+
+ //--- Set focus to expression field
+ _ctrlExpression = _display displayctrl IDC_RSCDEBUGCONSOLE_EXPRESSION;
+ _ctrlExpression ctrlsettext (profilenamespace getvariable ["RscDebugConsole_expression",""]);
+ ctrlsetfocus _ctrlExpression;
+
+ //--- Execute buttons
+ RscDebugConsole_execute = {
+ _args = _this select 0;
+ _mode = _this select 1;
+
+ _display = ctrlparent (_args select 0);
+ _input = _display displayctrl IDC_RSCDEBUGCONSOLE_EXPRESSION;
+ _inputValue = "";
+ with missionnamespace do {
+ _inputCode = compile ctrltext _input;
+ switch _mode do {
+ //--- Local
+ case 0: {EPOCH_DebugGUI_exec = ["LOCAL",_inputCode];publicVariableServer "EPOCH_DebugGUI_exec"};
+ //--- Global
+ case 1: {EPOCH_DebugGUI_exec = ["GLOBAL",_inputCode];publicVariableServer "EPOCH_DebugGUI_exec"};
+ //--- Server
+ case 2: {EPOCH_DebugGUI_exec = ["SERVER",_inputCode];publicVariableServer "EPOCH_DebugGUI_exec"};
+ };
+ };
+ true
+ };
+
+ _ctrlExecuteLocal = _display displayctrl IDC_OK;
+ _ctrlExecuteLocal ctrladdeventhandler ["buttonclick","with uinamespace do {[_this,0] call RscDebugConsole_execute};"];
+
+ _ctrlExecuteGlobal = _display displayctrl IDC_RSCDEBUGCONSOLE_BUTTONEXECUTEALL;
+ _ctrlExecuteGlobal ctrladdeventhandler ["buttonclick","with uinamespace do {[_this,1] call RscDebugConsole_execute};"];
+
+ _ctrlExecuteServer = _display displayctrl IDC_RSCDEBUGCONSOLE_BUTTONEXECUTESERVER;
+ _ctrlExecuteServer ctrladdeventhandler ["buttonclick","with uinamespace do {[_this,2] call RscDebugConsole_execute};"];
+
+ if !(ismultiplayer) then {
+ _ctrlExecuteGlobal ctrlenable false;
+ _ctrlExecuteServer ctrlenable false;
+ };
+
+ //--- Process watch fields
+ RscDebugConsole_watchSave = [true,true,true,true];
+ /*RscDebugConsole_watch = {
+ _display = _this select 0;
+ {
+ _input = _display displayctrl (_x select 0);
+ _output = _display displayctrl (_x select 1);
+ _outputBackground = _display displayctrl (_x select 2);
+ _backgroundColor = [0,0,0,0.7];
+ _save = true;
+
+ _inputValue = ctrltext _input;
+ if (_inputValue != "") then {
+ _timeStart = diag_ticktime;
+ with missionnamespace do {
+ _inputValue = if !(isnil {call compile _inputValue}) then {
+ _timeStart = diag_ticktime;
+ call compile _inputValue;
+ } else {
+ nil
+ };
+ };
+ //--- Show warnign whn code is taking too long; also disable saving the value
+ if (diag_ticktime - _timeStart > 0.003) then {
+ _save = false;
+ _backgroundColor = [0.5,0.25,0,0.7];
+ };
+ _inputValue = if !(isnil {_inputValue}) then {str _inputValue} else {""};
+ };
+
+ _output ctrlsettext _inputValue;
+
+ _outputBackground ctrlsetbackgroundcolor _backgroundColor;
+ _outputBackground ctrlcommit 0;
+ RscDebugConsole_watchSave set [_foreachindex,_save];
+ } foreach [
+ [IDC_RSCDEBUGCONSOLE_WATCHINPUT1,IDC_RSCDEBUGCONSOLE_WATCHOUTPUT1,IDC_RSCDEBUGCONSOLE_WATCHOUTPUTBACKGROUND1],
+ [IDC_RSCDEBUGCONSOLE_WATCHINPUT2,IDC_RSCDEBUGCONSOLE_WATCHOUTPUT2,IDC_RSCDEBUGCONSOLE_WATCHOUTPUTBACKGROUND2],
+ [IDC_RSCDEBUGCONSOLE_WATCHINPUT3,IDC_RSCDEBUGCONSOLE_WATCHOUTPUT3,IDC_RSCDEBUGCONSOLE_WATCHOUTPUTBACKGROUND3],
+ [IDC_RSCDEBUGCONSOLE_WATCHINPUT4,IDC_RSCDEBUGCONSOLE_WATCHOUTPUT4,IDC_RSCDEBUGCONSOLE_WATCHOUTPUTBACKGROUND4]
+ ];
+ };
+ _display displayaddeventhandler ["mousemoving","with uinamespace do {_this call RscDebugConsole_watch};"];
+ _display displayaddeventhandler ["mouseholding","with uinamespace do {_this call RscDebugConsole_watch};"];
+ */
+
+ //--- Load last values of watch fields
+ {
+ _input = _display displayctrl _x;
+ _input ctrlsettext (profilenamespace getvariable ["RscDebugConsole_watch" + str(_foreachindex + 1),""]);
+ } foreach [
+ IDC_RSCDEBUGCONSOLE_WATCHINPUT1,
+ IDC_RSCDEBUGCONSOLE_WATCHINPUT2,
+ IDC_RSCDEBUGCONSOLE_WATCHINPUT3,
+ IDC_RSCDEBUGCONSOLE_WATCHINPUT4
+ ];
+
+
+ //--- External buttons
+ _ctrlSpectatorCamera = _display displayctrl IDC_RSCDEBUGCONSOLE_BUTTONSPECTATORCAMERA;
+ _ctrlSpectatorCamera ctrladdeventhandler ["buttonclick","if (isnil {RscSpectator_camera}) then {RscSpectator_allowFreeCam = true; cutrsc ['RscSpectator','plain'];} else {cuttext ['','plain']};"];
+
+ _ctrlSplendidCamera = _display displayctrl IDC_RSCDEBUGCONSOLE_BUTTONSPLENDIDCAMERA;
+ _ctrlSplendidCamera ctrladdeventhandler ["buttonclick","[] spawn (uinamespace getvariable 'bis_fnc_camera');"];
+
+ _ctrlConfig = _display displayctrl IDC_RSCDEBUGCONSOLE_BUTTONCONFIG;
+ _ctrlConfig ctrladdeventhandler ["buttonclick","[ctrlparent (_this select 0)] spawn (uinamespace getvariable 'bis_fnc_configViewer');"];
+
+ _ctrlFunctions = _display displayctrl IDC_RSCDEBUGCONSOLE_BUTTONFUNCTIONS;
+ _ctrlFunctions ctrladdeventhandler ["buttonclick","[ctrlparent (_this select 0)] spawn (uinamespace getvariable 'bis_fnc_help');"];
+
+ _ctrlAnimations = _display displayctrl IDC_RSCDEBUGCONSOLE_BUTTONANIMATIONS;
+ _ctrlAnimations ctrladdeventhandler ["buttonclick","[] spawn (uinamespace getvariable 'bis_fnc_animViewer');"];
+
+ _ctrlGUI = _display displayctrl IDC_RSCDEBUGCONSOLE_BUTTONGUI;
+ _ctrlGUI ctrladdeventhandler ["buttonclick","[] spawn bis_fnc_guiEditor;"];
+
+ //--- Simulation is not running
+ _splendidCameraOpened = if !(isnil "BIS_fnc_camera_display") then {!(isnull BIS_fnc_camera_display)} else {false};
+ if (
+ isnull ([] call (uinamespace getvariable "BIS_fnc_displayMission"))
+ ||
+ _splendidCameraOpened
+ ) then {
+ {
+ (_display displayctrl _x) ctrlenable false;
+ } foreach [
+ IDC_RSCDEBUGCONSOLE_BUTTONSPECTATORCAMERA,
+ IDC_RSCDEBUGCONSOLE_BUTTONSPLENDIDCAMERA,
+ IDC_RSCDEBUGCONSOLE_BUTTONANIMATIONS,
+ IDC_RSCDEBUGCONSOLE_BUTTONGUI
+ ];
+ };
+ };
+
+ case "onUnload": {
+ _display = _params select 0;
+
+ //--- Remember last values
+ _ctrlExpression = _display displayctrl IDC_RSCDEBUGCONSOLE_EXPRESSION;
+ profilenamespace setvariable ["RscDebugConsole_expression",ctrltext _ctrlExpression];
+
+ {
+ _input = _display displayctrl _x;
+ _inputValue = if (RscDebugConsole_watchSave select _foreachindex) then {ctrltext _input} else {""};
+ profilenamespace setvariable ["RscDebugConsole_watch" + str(_foreachindex + 1),_inputValue];
+ } foreach [
+ IDC_RSCDEBUGCONSOLE_WATCHINPUT1,
+ IDC_RSCDEBUGCONSOLE_WATCHINPUT2,
+ IDC_RSCDEBUGCONSOLE_WATCHINPUT3,
+ IDC_RSCDEBUGCONSOLE_WATCHINPUT4
+ ];
+ saveprofilenamespace;
+
+ //--- Cleanup
+ RscDebugConsole_execute = nil;
+ RscDebugConsole_watch = nil;
+ RscDebugConsole_watchSave = nil;
+ };
+ };
+} else {
+ switch _mode do {
+
+ case "onLoad": {
+
+ //--- Hdie and deactivate the console
+ _ctrlConsole = _display displayctrl IDC_RSCDEBUGCONSOLE_RSCDEBUGCONSOLE;
+ _ctrlConsole ctrlshow false;
+ _ctrlConsole ctrlenable false;
+ };
+ };
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/gui/scripts/RscDisplayMPInterrupt.sqf b/Sources/epoch_code/gui/scripts/RscDisplayMPInterrupt.sqf
new file mode 100644
index 00000000..bbf1550d
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/RscDisplayMPInterrupt.sqf
@@ -0,0 +1,246 @@
+#include "\A3\ui_f\hpp\defineCommonGrids.inc"
+
+_mode = _this select 0;
+_params = _this select 1;
+_class = _this select 2;
+
+#include "RscDebugConsole.sqf"
+#include "RscFeedback.sqf"
+
+switch _mode do {
+
+ case "onLoad": {
+
+ private ['_dummy'];
+ _dummy = ['Init', _params] execVM '\A3\ui_f\scripts\pauseLoadinit.sqf';
+
+ //Hide chat
+ showChat false;
+
+ //--- Disable message box
+ (_display displayctrl 235106) ctrlenable false;
+ (_display displayctrl 235107) ctrlenable false;
+
+ //--- set player's name
+ (_display displayctrl 109) ctrlSetText profileName;
+ [_display, 109] call (uinamespace getvariable 'BIS_fnc_setIDCStreamFriendly');
+
+ //Sets all texts toUpper
+ ["RscDisplayMPInterrupt",["RscText","RscTitle"],["PlayersName"]] call bis_fnc_toUpperDisplayTexts;
+
+ //Variable for tracking state of Options accordion (expanded/collapsed)
+ uiNamespace setVariable ["BIS_DisplayInterrupt_isOptionsExpanded", false];
+
+ //--- Respawn button
+ _buttonRespawn = _display displayctrl 1010;
+ _cfgRespawnButton = missionconfigfile >> "respawnButton";
+ _respawnButton = if (isnumber _cfgRespawnButton) then {getnumber _cfgRespawnButton} else {-1};
+ _cfgRespawnType = missionconfigfile >> "respawn";
+ _respawnType = if (istext _cfgRespawnType) then {
+ ["none","bird","instant","base","group","side"] find (tolower gettext _respawnType);
+ } else {
+ if (isnumber _cfgRespawnType) then {getnumber _cfgRespawnType} else {-1};
+ };
+ //--- Disable in missions without respawn, when player is virtual, or when mission designer chose to
+ if ((_respawnType in [-1,0,1] && _respawnButton != 1) || _respawnButton == 0 || side group player == sidelogic) then {
+ _buttonRespawn ctrlenable false;
+ };
+ _buttonRespawn ctrlseteventhandler ["buttonclick","with uinamespace do {['buttonRespawn',_this,''] spawn RscDisplayMPInterrupt_script;}; true"];
+
+ //--- Options button
+ _button = _display displayctrl 101;
+ _button ctrladdeventhandler ["buttonclick","with uinamespace do {['optionsButton',_this,''] spawn RscDisplayMPInterrupt_script};"];
+
+ //TODO - implementovat promennou, ktera si bude pamatovat stav akordeonu (je potreba pri navratu z jineho dialogu do main menu)
+ (_display displayctrl 301) ctrlSetFade 1; //Video
+ (_display displayctrl 302) ctrlSetFade 1; //Audio
+ (_display displayctrl 303) ctrlSetFade 1; //Controls
+ (_display displayctrl 307) ctrlSetFade 1; //Game Options
+
+ (_display displayctrl 301) ctrlCommit 0;
+ (_display displayctrl 302) ctrlCommit 0;
+ (_display displayctrl 303) ctrlCommit 0;
+ (_display displayctrl 307) ctrlCommit 0;
+
+ //--- Hide all buttons from Options - must be here to enable proper focusing
+ (_display displayctrl 301) ctrlEnable false; //Video
+ (_display displayctrl 302) ctrlEnable false; //Audio
+ (_display displayctrl 303) ctrlEnable false; //Controls
+ (_display displayctrl 307) ctrlEnable false; //Game Options
+ };
+
+ //--- Options button
+ case "optionsButton": {
+
+ _ctrl = _params select 0;
+ _display = ctrlparent _ctrl;
+
+ //if options are expanded (Video Options button is shown), collapse it and vice versa
+ //if (ctrlFade (_display displayCtrl 301) < 0.5) then
+ _upperPartTime = 0.2; //0.05 for each button
+ _buttonsTime = 0.05;
+
+ if (uiNamespace getvariable "BIS_DisplayInterrupt_isOptionsExpanded") then
+ {
+ //hide buttons and collapse accordion
+ //move down - background, title, player's name, play, editor, profile, options
+
+ //Title background
+ _control = _display displayctrl 1050;
+ _control ctrlSetPosition [(1 * GUI_GRID_W + GUI_GRID_X), (14.2 * GUI_GRID_H + GUI_GRID_Y)];
+ _control ctrlCommit _upperPartTime;
+
+ //Title - same position as title background
+ _control = _display displayctrl 523;
+ _control ctrlSetPosition [(1 * GUI_GRID_W + GUI_GRID_X), (14.2 * GUI_GRID_H + GUI_GRID_Y)];
+ _control ctrlCommit _upperPartTime;
+
+ //Player's name - same position as title background
+ _control = _display displayctrl 109;
+ _control ctrlSetPosition [(6 * GUI_GRID_W + GUI_GRID_X), (14.2 * GUI_GRID_H + GUI_GRID_Y)];
+ _control ctrlCommit _upperPartTime;
+
+ //Continue button
+ _control = _display displayctrl 2;
+ _control ctrlSetPosition [(1 * GUI_GRID_W + GUI_GRID_X), (15.3 * GUI_GRID_H + GUI_GRID_Y)];
+ _control ctrlCommit _upperPartTime;
+
+ //Save button
+ _control = _display displayctrl 103;
+ _control ctrlSetPosition [(1 * GUI_GRID_W + GUI_GRID_X), (16.4 * GUI_GRID_H + GUI_GRID_Y)];
+ _control ctrlCommit _upperPartTime;
+
+ //Skip button - same position as Save
+ _control = _display displayctrl 1002;
+ _control ctrlSetPosition [(1 * GUI_GRID_W + GUI_GRID_X), (16.4 * GUI_GRID_H + GUI_GRID_Y)];
+ _control ctrlCommit _upperPartTime;
+
+ //Respawn
+ _control = _display displayctrl 1010;
+ _control ctrlSetPosition [(1 * GUI_GRID_W + GUI_GRID_X), (17.5 * GUI_GRID_H + GUI_GRID_Y)];
+ _control ctrlCommit _upperPartTime;
+
+ //Options button
+ _control = _display displayctrl 101;
+ _control ctrlSetPosition [(1 * GUI_GRID_W + GUI_GRID_X), (18.6 * GUI_GRID_H + GUI_GRID_Y)];
+ _control ctrlCommit _upperPartTime;
+
+
+ (_display displayctrl 301) ctrlSetFade 1; //Video
+ (_display displayctrl 302) ctrlSetFade 1; //Audio
+ (_display displayctrl 303) ctrlSetFade 1; //Controls
+ (_display displayctrl 307) ctrlSetFade 1; //Game Options
+
+ (_display displayctrl 301) ctrlCommit _buttonsTime; //Video
+ uiSleep _buttonsTime;
+ (_display displayctrl 302) ctrlCommit _buttonsTime; //Audio
+ uiSleep _buttonsTime;
+ (_display displayctrl 303) ctrlCommit _buttonsTime; //Controls
+ uiSleep _buttonsTime;
+ (_display displayctrl 307) ctrlCommit _buttonsTime; //Game
+
+ (_display displayctrl 301) ctrlEnable false; //Video
+ (_display displayctrl 302) ctrlEnable false; //Audio
+ (_display displayctrl 303) ctrlEnable false; //Controls
+ (_display displayctrl 307) ctrlEnable false; //Game Options
+
+ uiNamespace setVariable ["BIS_DisplayInterrupt_isOptionsExpanded", false];
+ //set focus to Options button
+ ctrlSetFocus (_display displayctrl 101);
+ }
+ else
+ {
+ //expand accordion and show buttons
+
+ //Title background
+ _control = _display displayctrl 1050;
+ _control ctrlSetPosition [(1 * GUI_GRID_W + GUI_GRID_X), (9.8 * GUI_GRID_H + GUI_GRID_Y)];
+ _control ctrlCommit _upperPartTime;
+
+ //Title - same position as title background
+ _control = _display displayctrl 523;
+ _control ctrlSetPosition [(1 * GUI_GRID_W + GUI_GRID_X), (9.8 * GUI_GRID_H + GUI_GRID_Y)];
+ _control ctrlCommit _upperPartTime;
+
+ //Player's name - same position as title background
+ _control = _display displayctrl 109;
+ _control ctrlSetPosition [(6 * GUI_GRID_W + GUI_GRID_X), (9.8 * GUI_GRID_H + GUI_GRID_Y)];
+ _control ctrlCommit _upperPartTime;
+
+ //Continue button
+ _control = _display displayctrl 2;
+ _control ctrlSetPosition [(1 * GUI_GRID_W + GUI_GRID_X), (10.9 * GUI_GRID_H + GUI_GRID_Y)];
+ _control ctrlCommit _upperPartTime;
+
+ //Save button
+ _control = _display displayctrl 103;
+ _control ctrlSetPosition [(1 * GUI_GRID_W + GUI_GRID_X), (12 * GUI_GRID_H + GUI_GRID_Y)];
+ _control ctrlCommit _upperPartTime;
+
+ //Skip button - same position as Save
+ _control = _display displayctrl 1002;
+ _control ctrlSetPosition [(1 * GUI_GRID_W + GUI_GRID_X), (12 * GUI_GRID_H + GUI_GRID_Y)];
+ _control ctrlCommit _upperPartTime;
+
+ //Respawn
+ _control = _display displayctrl 1010;
+ _control ctrlSetPosition [(1 * GUI_GRID_W + GUI_GRID_X), (13.1 * GUI_GRID_H + GUI_GRID_Y)];
+ _control ctrlCommit _upperPartTime;
+
+ //Options button
+ _control = _display displayctrl 101;
+ _control ctrlSetPosition [(1 * GUI_GRID_W + GUI_GRID_X), (14.2 * GUI_GRID_H + GUI_GRID_Y)];
+ _control ctrlCommit _upperPartTime;
+
+
+ //Enable and show buttons
+ (_display displayctrl 301) ctrlEnable true; //Video
+ (_display displayctrl 302) ctrlEnable true; //Audio
+ (_display displayctrl 303) ctrlEnable true; //Controls
+ (_display displayctrl 307) ctrlEnable true; //Game Options
+
+ //--- Show all buttons from Options
+ (_display displayctrl 301) ctrlSetFade 0; //Video
+ (_display displayctrl 302) ctrlSetFade 0; //Audio
+ (_display displayctrl 303) ctrlSetFade 0; //Controls
+ (_display displayctrl 307) ctrlSetFade 0; //Game Options
+
+ uiSleep 0.05;
+
+ //From bottom to top
+ (_display displayctrl 307) ctrlCommit 0.15; //Game
+ uiSleep _buttonsTime;
+ (_display displayctrl 303) ctrlCommit 0.15; //Controls
+ uiSleep _buttonsTime;
+ (_display displayctrl 302) ctrlCommit 0.15; //Audio
+ uiSleep _buttonsTime;
+ (_display displayctrl 301) ctrlCommit 0.15; //Video
+
+ uiNamespace setVariable ["BIS_DisplayInterrupt_isOptionsExpanded", true];
+ //set focus to Options button
+ ctrlSetFocus (_display displayctrl 101);
+ };
+ };
+
+ case "buttonRespawn": {
+ _display = ctrlparent (_params select 0);
+ _respawn = [localize "str_a3_rscdisplaympinterrupt_respawnprompt",nil,localize "STR_DISP_INT_RESPAWN",true,_display,true] call bis_fnc_guiMessage; //--- ToDo: Localize
+ if (_respawn) then {
+ if (alive player) then {
+ //player setdamage 1;
+ };
+ _display closedisplay 2;
+ };
+ };
+
+ case "onUnload": {
+ private ["_dummy"];
+ //Show chat only if Stream Friendly UI is off
+ if (!isStreamFriendlyUIEnabled) then
+ {
+ showChat true;
+ };
+ _dummy = ['Unload', _params] call compile preprocessFile '\A3\ui_f\scripts\pauseOnUnload.sqf';
+ };
+ default {};
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/gui/scripts/RscFeedback.sqf b/Sources/epoch_code/gui/scripts/RscFeedback.sqf
new file mode 100644
index 00000000..051a6e9d
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/RscFeedback.sqf
@@ -0,0 +1,17 @@
+disableserialization;
+
+_mode = _this select 0;
+_params = _this select 1;
+_class = _this select 2;
+
+switch _mode do {
+ case "onLoad": {
+ _display = _params select 0;
+ _ctrlFeedback = _display displayctrl IDC_RSCFEEDBACK_RSCFEEDBACK;
+ if ((productversion select 4) == "Development") then {
+ _ctrlFeedback htmlLoad "a3\ui_f\data\html\RscFeedback.html";
+ } else {
+ _ctrlFeedback ctrlshow false;
+ };
+ };
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnInvite.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnInvite.sqf
new file mode 100644
index 00000000..137a144c
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnInvite.sqf
@@ -0,0 +1,43 @@
+disableSerialization;
+_BtnInvite = (findDisplay -1300) displayCtrl 30;
+_playerUID = getPlayerUID player;
+if (_playerUID == Epoch_my_GroupUID || {_x select 0 == _playerUID}count (Epoch_my_Group select 3) > 0) then {
+ _currentMember = count(Epoch_my_Group select 3) + count(Epoch_my_Group select 4) + 1;
+ _currentMaxMember = Epoch_my_Group select 2;
+ if (_currentMember < _currentMaxMember) then {
+ _InvitePlayerCombo = (findDisplay -1300) displayCtrl 41;
+ _playerUID = _InvitePlayerCombo lbData (lbCurSel _InvitePlayerCombo);
+ _playerName = _InvitePlayerCombo lbText (lbCurSel _InvitePlayerCombo);
+ if (_playerUID != "" && _playerName != "") then {
+ _txt = format["Do you want to add %1 to your Group?",_playerName];
+ [_playerUID,_txt] spawn {
+ _ret = [_this select 1,"Epoch Group Menu",true,true] call BIS_fnc_GUImessage;
+ if (_ret) then {
+ EPOCH_GROUP_Invite_PVS = [_this select 0,Epoch_my_GroupUID,Epoch_my_Group select 0,player,Epoch_personalToken];
+ publicVariableServer "EPOCH_GROUP_Invite_PVS";
+ };
+ };
+ };
+ } else {
+ _found = EPOCH_group_upgrade_lvl find _currentMaxMember;
+ if (count EPOCH_group_upgrade_lvl >= (_found+3)) then {
+ _upgradePrice = parseNumber (EPOCH_group_upgrade_lvl select (_found+3));
+ if ((EPOCH_playerCrypto-_upgradePrice) >= 0) then {
+ _upgradeSlots = EPOCH_group_upgrade_lvl select (_found+2);
+ _txt = format["Do you want to upgrade your group from %1 to %2 slots for %3 Krypto?",_currentMaxMember,_upgradeSlots,_upgradePrice];
+ [_txt,_upgradePrice] spawn {
+ _ret = [_this select 0,"Epoch Group Menu",true,true] call BIS_fnc_GUImessage;
+ if (_ret) then {
+ EPOCH_GROUP_Upgrade_PVS = [Epoch_my_GroupUID,player,Epoch_personalToken];
+ publicVariableServer "EPOCH_GROUP_Upgrade_PVS";
+ };
+ };
+ } else {
+ ["You don't have enough Krypto to upgrade your group!","Epoch Group Menu",true,false] spawn BIS_fnc_GUImessage;
+ };
+ };
+ };
+ true
+} else {
+ false
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnKick.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnKick.sqf
new file mode 100644
index 00000000..99421445
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnKick.sqf
@@ -0,0 +1,22 @@
+disableSerialization;
+_BtnKick = (findDisplay -1300) displayCtrl 33;
+
+_playerUID = getPlayerUID player;
+if (_playerUID == Epoch_my_GroupUID || {_x select 0 == _playerUID}count (Epoch_my_Group select 3) > 0) then {
+ _group = (findDisplay -1300) displayCtrl 40;
+ _selected = lbCurSel _group;
+ if (_selected >= 0) then {
+ _playerUID = _group lbData _selected;
+ _playerName = _group lbText _selected;
+ if (_playerUID != "" && _playerName != "") then {
+ _txt = format["Do you want to kick %1 from your Group?",_playerName];
+ [_playerUID,_txt] spawn {
+ _ret = [_this select 1,"Epoch Group Menu",true,true] call BIS_fnc_GUImessage;
+ if (_ret) then {
+ EPOCH_GROUP_Player_PVS = [Epoch_my_GroupUID,_this select 0,false,false,player,Epoch_personalToken];
+ publicVariableServer "EPOCH_GROUP_Player_PVS";
+ };
+ };
+ };
+ };
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnLeave.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnLeave.sqf
new file mode 100644
index 00000000..62af622e
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnLeave.sqf
@@ -0,0 +1,23 @@
+disableSerialization;
+
+_BtnLeave = (findDisplay -1300) displayCtrl 31;
+if (getPlayerUID player == Epoch_my_GroupUID) then {
+ _BtnLeave ctrlSetText "Delete Group";
+ _txt = format["Do you want to delete your Group called %1?",Epoch_my_Group select 0];
+ _txt spawn {
+ _ret = [_this,"Epoch Group Menu",true,true] call BIS_fnc_GUImessage;
+ if (_ret) then {
+ EPOCH_GROUP_Delete_PVS = [player,Epoch_personalToken];
+ publicVariableServer "EPOCH_GROUP_Delete_PVS";
+ };
+ };
+} else {
+ _txt = format["Do you want to leave the %1 Group?",Epoch_my_Group select 0];
+ _txt spawn {
+ _ret = [_this,"Epoch Group Menu",true,true] call BIS_fnc_GUImessage;
+ if (_ret) then {
+ EPOCH_GROUP_Player_PVS = [Epoch_my_GroupUID,getPlayerUID player,false,false,player,Epoch_personalToken];
+ publicVariableServer "EPOCH_GROUP_Player_PVS";
+ };
+ };
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnMod.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnMod.sqf
new file mode 100644
index 00000000..17f331be
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnMod.sqf
@@ -0,0 +1,29 @@
+disableSerialization;
+if (getPlayerUID player == Epoch_my_GroupUID) then {
+ _group = (findDisplay -1300) displayCtrl 40;
+ _selected = lbCurSel _group;
+ if (_selected >= 0) then {
+ _playerUID = _group lbData _selected;
+ if (_playerUID != "") then {
+ _isMember = (_group lbPicture _selected) == (EPOCH_group_level_img select 2);
+ _txt = if (_isMember) then {
+ format["Do you want to give %1 moderator permissions?",_group lbText _selected];
+ } else {
+ format["Do you want to remove %1 moderator permissions?",_group lbText _selected];
+ };
+
+ [_playerUID,_isMember,_txt] spawn {
+ _ret = [_this select 2,"Epoch Group Menu",true,true] call BIS_fnc_GUImessage;
+ if (_ret) then {
+ EPOCH_GROUP_Player_PVS = [Epoch_my_GroupUID,_this select 0,true,_this select 1,player,Epoch_personalToken];
+ publicVariableServer "EPOCH_GROUP_Player_PVS";
+ };
+ };
+ };
+ } else {
+ hintSilent "You need to select a player!";
+ };
+ true
+} else {
+ false
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_Combo.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_Combo.sqf
new file mode 100644
index 00000000..6c79c43a
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_Combo.sqf
@@ -0,0 +1,18 @@
+disableSerialization;
+_ctrl = _this select 0;
+_selected = _this select 1;
+_playerUID = getPlayerUID player;
+if (_playerUID == Epoch_my_GroupUID || {_x select 0 == _playerUID}count (Epoch_my_Group select 3) > 0) then {
+ _BtnInvite = (findDisplay -1300) displayCtrl 30;
+ _currentMember = count(Epoch_my_Group select 3) + count(Epoch_my_Group select 4) + 1;
+ _currentMaxMember = Epoch_my_Group select 2;
+ if (_currentMember < _currentMaxMember) then {
+ _BtnInvite ctrlSetText format ["Invite %1",_ctrl lbtext _selected];
+ };
+ true
+} else {
+ if (_selected != -1) then {
+ _ctrl lbSetCurSel -1;
+ };
+ false
+};
diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_List.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_List.sqf
new file mode 100644
index 00000000..e2ae46b4
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_List.sqf
@@ -0,0 +1,23 @@
+disableSerialization;
+_ctrl = _this select 0;
+_selected = _this select 1;
+
+if (getPlayerUID player == Epoch_my_GroupUID) then {
+ _img = _ctrl lbPicture _selected;
+
+ _BtnSetMod = (findDisplay -1300) displayCtrl 32;
+ _BtnKick = (findDisplay -1300) displayCtrl 33;
+
+ switch _img do {
+ case {getPlayerUID player == _ctrl lbData _selected}:{_BtnSetMod ctrlEnable false;_BtnKick ctrlEnable false};
+ case(EPOCH_group_level_img select 0) : {_BtnSetMod ctrlEnable false; _BtnKick ctrlEnable false};
+ case(EPOCH_group_level_img select 1) : {_BtnSetMod ctrlEnable true; _BtnKick ctrlEnable true; _BtnSetMod ctrlSetText "Remove Mod"};
+ case(EPOCH_group_level_img select 2) : {_BtnSetMod ctrlEnable true; _BtnKick ctrlEnable true; _BtnSetMod ctrlSetText "Set Mod"};
+ };
+ true
+} else {
+ if (_selected != -1) then {
+ _ctrl lbSetCurSel -1;
+ };
+ false
+};
diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_invitePlayer.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_invitePlayer.sqf
new file mode 100644
index 00000000..e4aff9d2
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_invitePlayer.sqf
@@ -0,0 +1,4 @@
+if !(_this in Epoch_invited_GroupUIDs) then {
+ Epoch_invited_GroupUIDs pushBack _this;
+ _dt = ["Group request received", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
+};
diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_onLoad.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_onLoad.sqf
new file mode 100644
index 00000000..5ccb3da8
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_onLoad.sqf
@@ -0,0 +1,82 @@
+private ["_index","_players","_found","_playerUID","_picture","_display","_BtnInvite","_GroupMemberList","_InvitePlayerCombo","_currentMaxMember","_currentMember","_myPlayerUID","_playerIsLeader","_playerIsMod","_onlinePUID"];
+disableSerialization;
+_display = findDisplay -1300;
+_BtnInvite = _display displayCtrl 30;
+
+diag_log format["%1 %2", Epoch_my_Group, Epoch_my_GroupUID];
+
+_GroupMemberList = _display displayCtrl 40;
+_InvitePlayerCombo = _display displayCtrl 41;
+
+_currentMaxMember = count(Epoch_my_Group select 3) + count(Epoch_my_Group select 4) + 1;
+_currentMember = Epoch_my_Group select 2;
+(_display displayCtrl 21) ctrlSetText format["Group Name: %1 (%2/%3 Slots)",Epoch_my_Group select 0,_currentMaxMember,_currentMember];
+
+_myPlayerUID = getPlayerUID player;
+_playerIsLeader = _myPlayerUID == Epoch_my_GroupUID;
+_playerIsMod = {_x select 0 == _myPlayerUID}count (Epoch_my_Group select 3) > 0;
+(_display displayCtrl 32) ctrlEnable false;
+(_display displayCtrl 33) ctrlEnable false;
+
+_onlinePUID = [];
+{
+ _onlinePUID pushBack (getPlayerUID _x);
+}forEach (units group player);
+
+if (_currentMaxMember < _currentMember) then {
+ _players = player nearEntities [["Epoch_Male_F","Epoch_Female_F","LandVehicle","Ship","Air","Tank"], 10];
+
+ if (_playerIsLeader || _playerIsMod) then {
+ {
+ if (!isNull _x) then {
+ if (isPlayer _x && alive _x) then {
+ _index = _InvitePlayerCombo lbAdd format["%1",name _x];
+ _InvitePlayerCombo lbSetData [_index,getPlayerUID _x];
+ };
+ };
+ }forEach (_players-(units group player));
+ };
+
+ if ((lbSize _InvitePlayerCombo) == 0) then {
+ _InvitePlayerCombo ctrlEnable false;
+ _BtnInvite ctrlEnable false;
+ _BtnInvite ctrlSetText (if (_playerIsLeader || _playerIsMod) then {"No one nearby to invite."} else {"Must be an Owner or a Mod to invite!"});
+ } else {
+ _InvitePlayerCombo lbSetCurSel 0;
+ lbsort _InvitePlayerCombo;
+ };
+} else {
+ if (_playerIsLeader || _playerIsMod) then {
+ _found = EPOCH_group_upgrade_lvl find _currentMaxMember;
+ if (count EPOCH_group_upgrade_lvl >= (_found+3)) then {
+ _BtnInvite ctrlSetText format ["Upgrade +%1 Slots for %2 Krypto",abs (_currentMaxMember-(EPOCH_group_upgrade_lvl select (_found+2))),EPOCH_group_upgrade_lvl select (_found+3)];
+ } else {
+ _BtnInvite ctrlSetText format ["No Upgrade Available!"];
+ _BtnInvite ctrlEnable false;
+ };
+ } else {
+ _BtnInvite ctrlSetText format ["You need to be the Owner or a Mod to Upgrade the group!"];
+ _BtnInvite ctrlEnable false;
+ };
+};
+
+
+{
+ _picture = EPOCH_group_level_img select _forEachIndex; //0 = lead / 1 = mod / 2 = member
+ {
+ _playerUID = _x select 0;
+
+ _index = _GroupMemberList lbAdd format["%1",_x select 1];
+ _GroupMemberList lbSetColor [_index,if (_playerUID in _onlinePUID) then {[1,1,1,1]}else{[1,1,1,0.45]}];
+ _GroupMemberList lbSetPicture [_index, _picture];
+
+ if (_playerIsLeader || _playerIsMod) then {
+ _GroupMemberList lbSetData [_index,_playerUID];
+ };
+ }forEach _x;
+}forEach
+[
+ [[Epoch_my_GroupUID,Epoch_my_Group select 1]],
+ Epoch_my_Group select 3,
+ Epoch_my_Group select 4
+];
diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_update.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_update.sqf
new file mode 100644
index 00000000..b2012e8b
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_update.sqf
@@ -0,0 +1,4 @@
+if (!isNull (findDisplay -1300)) then {
+ (findDisplay -1300) closeDisplay 0;
+ createDialog "Epoch_myGroup";
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_BtnCreate.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_BtnCreate.sqf
new file mode 100644
index 00000000..b1aa246c
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_BtnCreate.sqf
@@ -0,0 +1,37 @@
+disableSerialization;
+_txtCtrl = (findDisplay -1200) displayCtrl 21;
+_array = toArray(ctrlText _txtCtrl);
+
+if (count _array > 24) then {
+ _array resize 24;
+};
+
+if (count (_array-[32]) == 0) then { //32 = SPACE
+ ["Your group need a name!","Epoch Group Menu",true,false] spawn BIS_fnc_GUImessage;
+} else {
+ _groupName = toString(_array);
+ _txtCtrl ctrlSetText _groupName;
+
+ _upgradePrice = parseNumber (EPOCH_group_upgrade_lvl select 1);
+ if ((EPOCH_playerCrypto-_upgradePrice) >= 0) then {
+ [_groupName,_upgradePrice] spawn {
+ _txt = format["Do you want to create your group called %1? You cannot change the group name later!",_this select 0];
+ _ret = [_txt,"Epoch Group Menu",true,true] call BIS_fnc_GUImessage;
+ if (_ret) then {
+ EPOCH_GROUP_create_PVS = [player,_this select 0,Epoch_personalToken];
+ publicVariableServer "EPOCH_GROUP_create_PVS";
+
+ _timeout = diag_tickTime+10;
+ waitUntil {
+ ((Epoch_my_GroupUID != "") && !(Epoch_my_Group isEqualTo [])) || ((_timeout - diag_tickTime) <= 0)
+ };
+ (findDisplay -1200) closeDisplay 0;
+ if ((Epoch_my_GroupUID != "") && !(Epoch_my_Group isEqualTo [])) then {
+ createDialog "Epoch_myGroup";
+ };
+ };
+ };
+ } else {
+ ["You don't have enough Krypto to create a group!","Epoch Group Menu",true,false] spawn BIS_fnc_GUImessage;
+ };
+};
diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_groupText.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_groupText.sqf
new file mode 100644
index 00000000..fa468a4e
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_groupText.sqf
@@ -0,0 +1,17 @@
+disableSerialization;
+_ctrl = (findDisplay -1200) displayCtrl 21;
+_array = toArray(ctrlText _ctrl);
+
+if (count _array > 24) then {
+ _array resize 24;
+};
+
+// remove any disallowed chars in group name "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 -_"
+{
+ if !(_x in [97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,49,50,51,52,53,54,55,56,57,48,32,45,95]) then {
+ _array = _array - [_x];
+ };
+} forEach _array;
+
+_ctrl ctrlSetText (toString _array);
+false
diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_onLoad.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_onLoad.sqf
new file mode 100644
index 00000000..8346f870
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_onLoad.sqf
@@ -0,0 +1,8 @@
+if (Epoch_my_GroupUID != "") exitWith {(findDisplay -1200) closeDisplay 0};
+disableSerialization;
+_textCtrl = (findDisplay -1200) displayCtrl 22;
+if (EPOCH_playerCrypto < parseNumber(EPOCH_group_upgrade_lvl select 1)) then {
+ _textCtrl CtrlSetText format ["Need %1 Krypto to create your own group",EPOCH_group_upgrade_lvl select 1];
+} else {
+ _textCtrl CtrlSetText format["Cost to create group %1 Krypto", EPOCH_group_upgrade_lvl select 1];
+};
diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_acceptInvite.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_acceptInvite.sqf
new file mode 100644
index 00000000..24d7d78e
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_acceptInvite.sqf
@@ -0,0 +1,5 @@
+if (Epoch_invited_GroupUID != "") then {
+ EPOCH_GROUP_Player_PVS = [Epoch_invited_GroupUID,getPlayerUID player,true,false,player,Epoch_personalToken];
+ publicVariableServer "EPOCH_GROUP_Player_PVS";
+};
+(findDisplay -1500) closeDisplay 0;
\ No newline at end of file
diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_onLoad.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_onLoad.sqf
new file mode 100644
index 00000000..2c17db2f
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_onLoad.sqf
@@ -0,0 +1,5 @@
+disableSerialization;
+_display = findDisplay -1400;
+if (Epoch_invited_GroupUID == "" || Epoch_invited_GroupName == "") exitWith { _display closeDisplay 0};
+_text = _display displayCtrl 21;
+_text ctrlSetText format ["Join the group called %1?",Epoch_invited_GroupName];
\ No newline at end of file
diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_refresh.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_refresh.sqf
new file mode 100644
index 00000000..071db7cf
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_refresh.sqf
@@ -0,0 +1,9 @@
+if !(Epoch_invited_GroupUIDs isEqualTo Epoch_invited_GroupUIDsPrev) then {
+ Epoch_invited_GroupUIDsPrev = Epoch_invited_GroupUIDs;
+ lbClear 1500;
+ {
+ _index = lbAdd[1500, _x select 1];
+ lbSetData[1500, _index, _x select 0];
+ } forEach Epoch_invited_GroupUIDs;
+ //hint str(Epoch_invited_GroupUIDs);
+};
\ No newline at end of file
diff --git a/Sources/epoch_code/gui/scripts/inventory/EPOCH_Inventory_Group.sqf b/Sources/epoch_code/gui/scripts/inventory/EPOCH_Inventory_Group.sqf
new file mode 100644
index 00000000..b2f17f70
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/inventory/EPOCH_Inventory_Group.sqf
@@ -0,0 +1,3 @@
+disableSerialization;
+(findDisplay 602) closeDisplay 0;
+createDialog (if ((Epoch_my_GroupUID == "") && (Epoch_my_Group isEqualTo [])) then {"EPOCH_createGrp"} else {"Epoch_myGroup"});
\ No newline at end of file
diff --git a/Sources/epoch_code/gui/scripts/inventory/EPOCH_Inventory_iGroup.sqf b/Sources/epoch_code/gui/scripts/inventory/EPOCH_Inventory_iGroup.sqf
new file mode 100644
index 00000000..a69b46d4
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/inventory/EPOCH_Inventory_iGroup.sqf
@@ -0,0 +1,6 @@
+disableSerialization;
+(findDisplay 602) closeDisplay 0;
+if !(Epoch_invited_GroupUIDs isEqualTo[]) exitWith {
+ createDialog "GroupRequests";
+};
+_dt = ["No pending requests< / t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
diff --git a/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_description.sqf b/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_description.sqf
new file mode 100644
index 00000000..d8a680c2
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_description.sqf
@@ -0,0 +1,4 @@
+private["_index","_missionDesc"];
+_index = lbCurSel 1500;
+_missionDesc = getArray(configfile >> "MissionList" >> "traderMissionLongDesc");
+ctrlSetText [1001, _missionDesc select _index];
\ No newline at end of file
diff --git a/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf b/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf
new file mode 100644
index 00000000..922faa99
--- /dev/null
+++ b/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf
@@ -0,0 +1,9 @@
+_missionList = getArray(configfile >> "MissionList" >> "traderMissionNames");
+_disabledMissions = getArray(configfile >> "MissionList" >> "traderMissionDisabled");
+
+{
+ if !(_forEachIndex in _disabledMissions) then {
+ _index = lbAdd[1500, _x];
+ lbSetValue[1500, _index, _forEachIndex];
+ };
+}forEach _missionList;
\ No newline at end of file
diff --git a/Sources/epoch_code/init/both_init.sqf b/Sources/epoch_code/init/both_init.sqf
new file mode 100644
index 00000000..c3776a76
--- /dev/null
+++ b/Sources/epoch_code/init/both_init.sqf
@@ -0,0 +1,75 @@
+// Init Custom vars
+EPOCH_customVars = [];
+EPOCH_defaultVars = [];
+_customVarsDefaults = [
+ ["Temp",98.6],
+ ["Hunger",5000],
+ ["Thirst",2500],
+ ["AliveTime",0],
+ ["Energy",0],
+ ["Wet",0],
+ ["Soiled",0],
+ ["Immunity",0],
+ ["Toxicity",0],
+ ["Stamina",100],
+ ["Crypto",0],
+ ["HitPoints",[0,0,0,0]],
+ ["BloodP",100],
+ ["SpawnArray",[]]
+];
+_customVarsInit = ["CfgEpochClient", "customVarsDefaults", _customVarsDefaults] call EPOCH_fnc_returnConfigEntryV2;
+{
+ EPOCH_customVars pushBack (_x select 0);
+ EPOCH_defaultVars pushBack (_x select 1);
+} forEach _customVarsInit;
+EPOCH_customVarCount = count EPOCH_customVars;
+
+// Init antagonist spawn limits
+EPOCH_spawnIndex = [];
+EPOCH_spawnLimits = [];
+_antagonistSpawnDefaults = [
+ ["Epoch_Cloak_F", 1],
+ ["GreatWhite_F", 2],
+ ["Epoch_Sapper_F",2],
+ ["Epoch_SapperB_F",1],
+ ["I_UAV_01_F",2],
+ ["PHANTOM",1],
+ ["B_Heli_Transport_01_F",1]
+];
+_spawnLimits = ["CfgEpochClient", "antagonistSpawnIndex", _antagonistSpawnDefaults] call EPOCH_fnc_returnConfigEntryV2;
+{
+ EPOCH_spawnIndex pushBack (_x select 0);
+ EPOCH_spawnLimits pushBack (_x select 1);
+} forEach _spawnLimits;
+
+//GroupSize (number) // Price (String)
+EPOCH_group_upgrade_lvl = ["CfgEpochClient", "group_upgrade_lvl", [4,"100",6,"300",8,"500",10,"1000",12,"1500",13,"1750",14,"2000",15,"3000",16,"5000"]] call EPOCH_fnc_returnConfigEntryV2;
+
+// Init 3d sound handler
+EPOCH_sounds = [];
+EPOCH_soundsDistance = [];
+_say3dsounds = "isClass _x" configClasses (configFile >> "CfgSay3Dhandler");
+{
+ EPOCH_sounds pushBack (configName _x);
+ EPOCH_soundsDistance pushBack getNumber(_x >> "distance");
+} forEach _say3dsounds;
+
+// default loot classes var
+EPOCH_lootClasses = [
+ ["shelfPos", "Shelf_EPOCH", true],
+ ["fridgePos", "Fridge_EPOCH", true],
+ ["bedPos", "Bed_EPOCH", false],
+ ["couchPos", "Couch_EPOCH", false],
+ ["wardrobePos", "wardrobe_epoch", false],
+ ["cookerPos", "cooker_epoch", false],
+ ["chairPos", ["Chair_EPOCH", "ChairRed_EPOCH"], true],
+ ["filingPos", "Filing_epoch", true],
+ ["pelicanPos", "Pelican_EPOCH", false],
+ ["tablePos", "Table_EPOCH", false],
+ ["lockerPos", "Locker_EPOCH", false],
+ ["toolRackPos", "ToolRack_EPOCH", false],
+ ["shoeboxPos", "Shoebox_EPOCH", false],
+ ["palletPos", "Tarp_EPOCH", false],
+ ["freezerPos", "Freezer_EPOCH", false],
+ ["cabinetPos", "Cabinet_EPOCH", false]
+];
diff --git a/Sources/epoch_code/init/client_init.sqf b/Sources/epoch_code/init/client_init.sqf
new file mode 100644
index 00000000..e6193b46
--- /dev/null
+++ b/Sources/epoch_code/init/client_init.sqf
@@ -0,0 +1,74 @@
+//Variables
+EPOCH_ESP_TARGETS = [];
+EPOCH_ESPMAP_TARGETS = [];
+EPOCH_ESPGROUPS = [];
+EPOCH_ESPGROUPCOLORS = [];
+EPOCH_ESP_PLAYER = false;
+EPOCH_ESP_VEHICLES = false;
+EPOCH_ESP_VEHICLEPLAYER = [];
+EPOCH_group_level_img = ["x\addons\a3_epoch_code\data\owner.paa", "x\addons\a3_epoch_code\data\mod.paa", "x\addons\a3_epoch_code\data\member.paa"];
+if (isNil 'EPOCH_diag_fps') then {
+ EPOCH_diag_fps = 0;
+};
+EPOCH_lastTrash = diag_tickTime;
+EPOCH_tradeDone = false;
+EPOCH_bankBalance = 0;
+EPOCH_antiWallCount = 0;
+EPOCH_lastTargetTime = diag_tickTime;
+EPOCH_lastSave = diag_tickTime;
+EPOCH_arr_countdown = [];
+EP_light = objNull;
+EPOCH_p2ptradeTarget = objNull;
+EPOCH_lastPlayerPos = getPosATL player;
+EPOCH_Holstered = "";
+Epoch_invited_GroupUID = "";
+Epoch_invited_GroupName = "";
+Epoch_invited_GroupUIDs = [];
+Epoch_invited_GroupUIDsPrev = [];
+EPOCH_lastPlayerPos = [0,0,0];
+EPOCH_prevOffer = [];
+EPOCH_drawIcon3d = false;
+EPOCH_velTransform = false;
+EPOCH_stabilityTarget = objNull;
+EPOCH_currentVehicle = objNull;
+EPOCH_currentTarget = objNull;
+EPOCH_LootedBlds = [];
+EPOCH_soundLevel = 1;
+EPOCH_arr_interactedObjs = [];
+EPOCH_buildOption = 0;
+EPOCH_nearestLocations = [];
+onEachFrame EPOCH_onEachFrame;
+
+EPOCH_LastAirDrop = time;
+EPOCH_AirDropCheck = getNumber(missionConfigFile >> "CfgEpochAirDrop" >> "AirDropFreq");
+if(EPOCH_AirDropCheck < 120)then{EPOCH_AirDropCheck = 120;};
+EPOCH_AirDropChance = getNumber(missionConfigFile >> "CfgEpochAirDrop" >> "AirDropChance");
+if(EPOCH_AirDropChance < 0)then{EPOCH_AirDropChance = 101;EPOCH_AirDropCheck = 99999;};
+
+EPOCH_droneRndChance = 100;
+
+// Custom Keys
+EPOCH_keysBuildMode1 = profileNamespace getVariable["EPOCH_BuildMode1", 2]; // 2 = 1
+EPOCH_keysBuildMode2 = profileNamespace getVariable["EPOCH_BuildMode2", 3]; // 3 = 2
+EPOCH_keysBuildDir = profileNamespace getVariable["EPOCH_BuildDir", 4]; // 4 = 3
+EPOCH_keysBuildStatic = profileNamespace getVariable["EPOCH_BuildStatic", 5]; // 5 = 4
+EPOCH_keysHolster = profileNamespace getVariable["EPOCH_Holster", 35]; // 35 = H
+EPOCH_keysDebugMon = profileNamespace getVariable["EPOCH_DebugMon", 41]; // 41 = ~
+EPOCH_keysBuildMovUp = profileNamespace getVariable["EPOCH_BuildMovUp", 0xC9]; // PgUp
+EPOCH_keysBuildMovDn = profileNamespace getVariable["EPOCH_BuildMovDn", 0xD1]; // PgDown
+EPOCH_keysBuildMovFwd = profileNamespace getVariable["EPOCH_BuildMovFwd", 0xC7]; // Home
+EPOCH_keysBuildMovBak = profileNamespace getVariable["EPOCH_BuildMovBak", 0xCF]; // End
+EPOCH_keysBuildMovL = profileNamespace getVariable["EPOCH_BuildMovL", 0xD2]; // Left
+EPOCH_keysBuildMovR = profileNamespace getVariable["EPOCH_BuildMovR", 0xD3]; // Right
+EPOCH_keysBuildRotL = profileNamespace getVariable["EPOCH_BuildRotL", 0x12]; // E
+EPOCH_keysBuildRotR = profileNamespace getVariable["EPOCH_BuildRotR", 0x10]; // Q
+EPOCH_keysBuildIt = profileNamespace getVariable["EPOCH_BuildIt", 0x39]; // Space
+EPOCH_keysAcceptTrade = profileNamespace getVariable["EPOCH_AcceptTrade", 0x14]; // T
+
+//ON INIT and RESPAWN
+call EPOCH_clientInit;
+
+[] execFSM "\x\addons\a3_epoch_code\system\SPVEH.fsm";
+[] execFSM "\x\addons\a3_epoch_code\system\player_login.fsm";
+
+true
diff --git a/Sources/epoch_code/init/fn_init.sqf b/Sources/epoch_code/init/fn_init.sqf
new file mode 100644
index 00000000..40f916c8
--- /dev/null
+++ b/Sources/epoch_code/init/fn_init.sqf
@@ -0,0 +1,46 @@
+if !(isNil "Epoch_CStart") exitWith { false };
+Epoch_CStart = true;
+
+if (!isDedicated) then {
+ call compile preprocessFileLineNumbers "\x\addons\a3_epoch_code\init\both_init.sqf";
+
+ // Epoch Client Only function compiler
+ _config = (configFile >> "CfgClientFunctions");
+ _version = getNumber(_config >> "version");
+ if (_version == 1) then {
+ {
+ if (isClass(_x)) then {
+ _tag = getText(_x >> "tag");
+ _file = getText(_x >> "file");
+ _file_tag = _file;
+ _cat = "";
+ {
+ if (isClass(_x)) then {
+ _file = _file_tag;
+ _file_raw = getText(_x >> "file");
+ if (_file_raw == "") then {
+ _cat = configName _x;
+ _file = _file + "\" + _cat;
+ } else {
+ _file = _file_raw;
+ };
+ {
+ _var_name = _tag + "_" + configName _x;
+ _fnc_path = _file + "\" + _var_name + ".sqf";
+ _file_raw = getText(_x >> "file");
+ if (_file_raw != "") then {
+ _fnc_path = _file_raw;
+ };
+ _itemCompile = compileFinal preprocessFileLineNumbers _fnc_path;
+ missionNamespace setvariable [_var_name,_itemCompile];
+ diag_log format["CfgClientFunctions compileFinal: %1", _var_name];
+ } forEach ("isclass _x" configClasses (_x));
+ }
+ } forEach ("isclass _x" configClasses (_x));
+ };
+ } forEach ("isclass _x" configClasses (_config));
+ } else {
+ diag_log "Error: CfgClientFunctions out of date.";
+ };
+};
+true
diff --git a/Sources/epoch_code/init/fn_postinit.sqf b/Sources/epoch_code/init/fn_postinit.sqf
new file mode 100644
index 00000000..2e44d174
--- /dev/null
+++ b/Sources/epoch_code/init/fn_postinit.sqf
@@ -0,0 +1,4 @@
+if (!isDedicated && isMultiplayer) then {
+ call compile preprocessFileLineNumbers "\x\addons\a3_epoch_code\init\client_init.sqf";
+};
+true