diff --git a/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/Drag into the stream folder and replace the current one b/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/Drag into the stream folder and replace the current one new file mode 100644 index 000000000..e69de29bb diff --git a/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/Glock 19 Color Options/Readme.txt b/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/Glock 19 Color Options/Readme.txt new file mode 100644 index 000000000..b081b62cd --- /dev/null +++ b/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/Glock 19 Color Options/Readme.txt @@ -0,0 +1,12 @@ +Please note that the black color is installed by default. You only need to do this if you wish to use a different color variant. + +A guide on how to replace textures + +- First of first, you are going to need OpenIV. Please install it if you haven't yet: https://openiv.com/ +- Now, open OpenIV, and locate a random folder that we will use to replace the textures. Doesn't really matter where you do that, just delete the files afterwards. +- Drag and Drop the hud.ytd into OpenIV, and click " Edit Mode " at the top of OpenIV's window. +- Open the YTD, and click replace on the top right side of the window that just popped up. +- Locate the texture you wish to replace, and replace it. +- Now click " Save " at the bottom of the window. +- Now drag your freshly saved YTD out from OpenIV and into your eup-stream resource. +- Repeat the process as many times as many textures you wish to install. \ No newline at end of file diff --git a/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/Glock 19 Color Options/weapons_dlc_bc_realistic_Black.png b/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/Glock 19 Color Options/weapons_dlc_bc_realistic_Black.png new file mode 100644 index 000000000..293beb638 Binary files /dev/null and b/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/Glock 19 Color Options/weapons_dlc_bc_realistic_Black.png differ diff --git a/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/Glock 19 Color Options/weapons_dlc_bc_realistic_FDE.png b/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/Glock 19 Color Options/weapons_dlc_bc_realistic_FDE.png new file mode 100644 index 000000000..891edcf29 Binary files /dev/null and b/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/Glock 19 Color Options/weapons_dlc_bc_realistic_FDE.png differ diff --git a/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/Glock 19 Color Options/weapons_dlc_bc_realistic_FDE_SPEC.png b/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/Glock 19 Color Options/weapons_dlc_bc_realistic_FDE_SPEC.png new file mode 100644 index 000000000..14cbd6a35 Binary files /dev/null and b/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/Glock 19 Color Options/weapons_dlc_bc_realistic_FDE_SPEC.png differ diff --git a/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/Glock 19 Color Options/weapons_dlc_bc_realistic_TBL.png b/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/Glock 19 Color Options/weapons_dlc_bc_realistic_TBL.png new file mode 100644 index 000000000..516823819 Binary files /dev/null and b/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/Glock 19 Color Options/weapons_dlc_bc_realistic_TBL.png differ diff --git a/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/Glock 19 Color Options/weapons_dlc_bc_realistic_Tan.png b/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/Glock 19 Color Options/weapons_dlc_bc_realistic_Tan.png new file mode 100644 index 000000000..711ddcb88 Binary files /dev/null and b/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/Glock 19 Color Options/weapons_dlc_bc_realistic_Tan.png differ diff --git a/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/hud.gfx b/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/hud.gfx new file mode 100644 index 000000000..a33746b7d Binary files /dev/null and b/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/hud.gfx differ diff --git a/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/hud.ytd b/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/hud.ytd new file mode 100644 index 000000000..37e56d623 --- /dev/null +++ b/resources/thinline_assets/OPTIONALS/Realistic Weapon Icons/hud.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09cf10201cf55c926c43b3793814bb970d3727b39a45c5f413a101c02c3e4376 +size 1205265 diff --git a/resources/thinline_assets/Put the FiveM EUP files in the stream folder above b/resources/thinline_assets/Put the FiveM EUP files in the stream folder above new file mode 100644 index 000000000..e69de29bb diff --git a/resources/thinline_assets/client/NativeUI.lua b/resources/thinline_assets/client/NativeUI.lua new file mode 100644 index 000000000..375f3cf65 --- /dev/null +++ b/resources/thinline_assets/client/NativeUI.lua @@ -0,0 +1,3770 @@ +UIResRectangle = setmetatable({}, UIResRectangle) +UIResRectangle.__index = UIResRectangle +UIResRectangle.__call = function() return "Rectangle" end + +UIResText = setmetatable({}, UIResText) +UIResText.__index = UIResText +UIResText.__call = function() return "Text" end + +Sprite = setmetatable({}, Sprite) +Sprite.__index = Sprite +Sprite.__call = function() return "Sprite" end + +UIMenuItem = setmetatable({}, UIMenuItem) +UIMenuItem.__index = UIMenuItem +UIMenuItem.__call = function() return "UIMenuItem", "UIMenuItem" end + +UIMenuCheckboxItem = setmetatable({}, UIMenuCheckboxItem) +UIMenuCheckboxItem.__index = UIMenuCheckboxItem +UIMenuCheckboxItem.__call = function() return "UIMenuItem", "UIMenuCheckboxItem" end + +UIMenuListItem = setmetatable({}, UIMenuListItem) +UIMenuListItem.__index = UIMenuListItem +UIMenuListItem.__call = function() return "UIMenuItem", "UIMenuListItem" end + +UIMenuSliderItem = setmetatable({}, UIMenuSliderItem) +UIMenuSliderItem.__index = UIMenuSliderItem +UIMenuSliderItem.__call = function() return "UIMenuItem", "UIMenuSliderItem" end + +UIMenuColouredItem = setmetatable({}, UIMenuColouredItem) +UIMenuColouredItem.__index = UIMenuColouredItem +UIMenuColouredItem.__call = function() return "UIMenuItem", "UIMenuColouredItem" end + +UIMenuProgressItem = setmetatable({}, UIMenuProgressItem) +UIMenuProgressItem.__index = UIMenuProgressItem +UIMenuProgressItem.__call = function() return "UIMenuItem", "UIMenuProgressItem" end + +UIMenuHeritageWindow = setmetatable({}, UIMenuHeritageWindow) +UIMenuHeritageWindow.__index = UIMenuHeritageWindow +UIMenuHeritageWindow.__call = function() return "UIMenuWindow", "UIMenuHeritageWindow" end + +UIMenuGridPanel = setmetatable({}, UIMenuGridPanel) +UIMenuGridPanel.__index = UIMenuGridPanel +UIMenuGridPanel.__call = function() return "UIMenuPanel", "UIMenuGridPanel" end + +UIMenuColourPanel = setmetatable({}, UIMenuColourPanel) +UIMenuColourPanel.__index = UIMenuColourPanel +UIMenuColourPanel.__call = function() return "UIMenuPanel", "UIMenuColourPanel" end + +UIMenuPercentagePanel = setmetatable({}, UIMenuPercentagePanel) +UIMenuPercentagePanel.__index = UIMenuPercentagePanel +UIMenuPercentagePanel.__call = function() return "UIMenuPanel", "UIMenuPercentagePanel" end + +UIMenu = setmetatable({}, UIMenu) +UIMenu.__index = UIMenu +UIMenu.__call = function() return "UIMenu" end + +MenuPool = setmetatable({}, MenuPool) +MenuPool.__index = MenuPool + +NativeUI = {} + +CharacterMap = { [' '] = 6, ['!'] = 6, ['"'] = 6, ['#'] = 11,['$'] = 10, ['%'] = 17,['&'] = 13, ['\\'] = 4,['('] = 6, [')'] = 6,['*'] = 7, ['+'] = 10, [','] = 4, ['-'] = 6, ['.'] = 4, ['/'] = 7, ['0'] = 12, ['1'] = 7, ['2'] = 11, ['3'] = 11, ['4'] = 11, ['5'] = 11, ['6'] = 12, ['7'] = 10, ['8'] = 11, ['9'] = 11, [':'] = 5, [';'] = 4, ['<'] = 9, ['='] = 9, ['>'] = 9, ['?'] = 10, ['@'] = 15, ['A'] = 12, ['B'] = 13, ['C'] = 14, ['D'] = 14, ['E'] = 12, ['F'] = 12, ['G'] = 15, ['H'] = 14, ['I'] = 5, ['J'] = 11, ['K'] = 13, ['L'] = 11, ['M'] = 16, ['N'] = 14, ['O'] = 16, ['P'] = 12, ['Q'] = 15, ['R'] = 13, ['S'] = 12, ['T'] = 11, ['U'] = 13, ['V'] = 12, ['W'] = 18, ['X'] = 11, ['Y'] = 11, ['Z'] = 12, ['['] = 6, [']'] = 6, ['^'] = 9, ['_'] = 18, ['`'] = 8, ['a'] = 11, ['b'] = 12, ['c'] = 11, ['d'] = 12, ['e'] = 12, ['f'] = 5, ['g'] = 13, ['h'] = 11, ['i'] = 4, ['j'] = 4, ['k'] = 10, ['l'] = 4, ['m'] = 18, ['n'] = 11, ['o'] = 12, ['p'] = 12, ['q'] = 12, ['r'] = 7, ['s'] = 9, ['t'] = 5, ['u'] = 11, ['v'] = 10, ['w'] = 14, ['x'] = 9, ['y'] = 10, ['z'] = 9, ['{'] = 6, ['|'] = 3, ['}'] = 6 } + +BadgeStyle = { None = 0, BronzeMedal = 1, GoldMedal = 2, SilverMedal = 3, Alert = 4, Crown = 5, Ammo = 6, Armour = 7, Barber = 8, Clothes = 9, Franklin = 10, Bike = 11, Car = 12, Gun = 13, Heart = 14, Makeup = 15, Mask = 16, Michael = 17, Star = 18, Tattoo = 19, Trevor = 20, Lock = 21, Tick = 22 } + +BadgeTexture = { + [0] = function() return "" end, + [1] = function() return "mp_medal_bronze" end, + [2] = function() return "mp_medal_gold" end, + [3] = function() return "medal_silver" end, + [4] = function() return "mp_alerttriangle" end, + [5] = function() return "mp_hostcrown" end, + [6] = function(Selected) if Selected then return "shop_ammo_icon_b" else return "shop_ammo_icon_a" end end, + [7] = function(Selected) if Selected then return "shop_armour_icon_b" else return "shop_armour_icon_a" end end, + [8] = function(Selected) if Selected then return "shop_barber_icon_b" else return "shop_barber_icon_a" end end, + [9] = function(Selected) if Selected then return "shop_clothing_icon_b" else return "shop_clothing_icon_a" end end, + [10] = function(Selected) if Selected then return "shop_franklin_icon_b" else return "shop_franklin_icon_a" end end, + [11] = function(Selected) if Selected then return "shop_garage_bike_icon_b" else return "shop_garage_bike_icon_a" end end, + [12] = function(Selected) if Selected then return "shop_garage_icon_b" else return "shop_garage_icon_a" end end, + [13] = function(Selected) if Selected then return "shop_gunclub_icon_b" else return "shop_gunclub_icon_a" end end, + [14] = function(Selected) if Selected then return "shop_health_icon_b" else return "shop_health_icon_a" end end, + [15] = function(Selected) if Selected then return "shop_makeup_icon_b" else return "shop_makeup_icon_a" end end, + [16] = function(Selected) if Selected then return "shop_mask_icon_b" else return "shop_mask_icon_a" end end, + [17] = function(Selected) if Selected then return "shop_michael_icon_b" else return "shop_michael_icon_a" end end, + [18] = function() return "shop_new_star" end, + [19] = function(Selected) if Selected then return "shop_tattoos_icon_b" else return "shop_tattoos_icon_" end end, + [20] = function(Selected) if Selected then return "shop_trevor_icon_b" else return "shop_trevor_icon_a" end end, + [21] = function() return "shop_lock" end, + [22] = function() return "shop_tick_icon" end, +} + +BadgeDictionary = { + [0] = function(Selected) + if Selected then + return "commonmenu" + else + return "commonmenu" + end + end, +} + +BadgeColour = { + [5] = function(Selected) if Selected then return 0, 0, 0, 255 else return 255, 255, 255, 255 end end, + [21] = function(Selected) if Selected then return 0, 0, 0, 255 else return 255, 255, 255, 255 end end, + [22] = function(Selected) if Selected then return 0, 0, 0, 255 else return 255, 255, 255, 255 end end, +} + +Colours = { + PureWhite = {255, 255, 255, 255}, + White = {240, 240, 240, 255}, + Black = {0, 0, 0, 255}, + Grey = {155, 155, 155, 255}, + GreyLight = {205, 205, 205, 255}, + GreyDark = {77, 77, 77, 255}, + Red = {224, 50, 50, 255}, + RedLight = {240, 153, 153, 255}, + RedDark = {112, 25, 25, 255}, + Blue = {93, 182, 229, 255}, + BlueLight = {174, 219, 242, 255}, + BlueDark = {47, 92, 115, 255}, + Yellow = {240, 200, 80, 255}, + YellowLight = {254, 235, 169, 255}, + YellowDark = {126, 107, 41, 255}, + Orange = {255, 133, 85, 255}, + OrangeLight = {255, 194, 170, 255}, + OrangeDark = {127, 66, 42, 255}, + Green = {114, 204, 114, 255}, + GreenLight = {185, 230, 185, 255}, + GreenDark = {57, 102, 57, 255}, + Purple = {132, 102, 226, 255}, + PurpleLight = {192, 179, 239, 255}, + PurpleDark = {67, 57, 111, 255}, + Pink = {203, 54, 148, 255}, + RadarHealth = {53, 154, 71, 255}, + RadarArmour = {93, 182, 229, 255}, + RadarDamage = {235, 36, 39, 255}, + NetPlayer1 = {194, 80, 80, 255}, + NetPlayer2 = {156, 110, 175, 255}, + NetPlayer3 = {255, 123, 196, 255}, + NetPlayer4 = {247, 159, 123, 255}, + NetPlayer5 = {178, 144, 132, 255}, + NetPlayer6 = {141, 206, 167, 255}, + NetPlayer7 = {113, 169, 175, 255}, + NetPlayer8 = {211, 209, 231, 255}, + NetPlayer9 = {144, 127, 153, 255}, + NetPlayer10 = {106, 196, 191, 255}, + NetPlayer11 = {214, 196, 153, 255}, + NetPlayer12 = {234, 142, 80, 255}, + NetPlayer13 = {152, 203, 234, 255}, + NetPlayer14 = {178, 98, 135, 255}, + NetPlayer15 = {144, 142, 122, 255}, + NetPlayer16 = {166, 117, 94, 255}, + NetPlayer17 = {175, 168, 168, 255}, + NetPlayer18 = {232, 142, 155, 255}, + NetPlayer19 = {187, 214, 91, 255}, + NetPlayer20 = {12, 123, 86, 255}, + NetPlayer21 = {123, 196, 255, 255}, + NetPlayer22 = {171, 60, 230, 255}, + NetPlayer23 = {206, 169, 13, 255}, + NetPlayer24 = {71, 99, 173, 255}, + NetPlayer25 = {42, 166, 185, 255}, + NetPlayer26 = {186, 157, 125, 255}, + NetPlayer27 = {201, 225, 255, 255}, + NetPlayer28 = {240, 240, 150, 255}, + NetPlayer29 = {237, 140, 161, 255}, + NetPlayer30 = {249, 138, 138, 255}, + NetPlayer31 = {252, 239, 166, 255}, + NetPlayer32 = {240, 240, 240, 255}, + SimpleBlipDefault = {159, 201, 166, 255}, + MenuBlue = {140, 140, 140, 255}, + MenuGreyLight = {140, 140, 140, 255}, + MenuBlueExtraDark = {40, 40, 40, 255}, + MenuYellow = {240, 160, 0, 255}, + MenuYellowDark = {240, 160, 0, 255}, + MenuGreen = {240, 160, 0, 255}, + MenuGrey = {140, 140, 140, 255}, + MenuGreyDark = {60, 60, 60, 255}, + MenuHighlight = {30, 30, 30, 255}, + MenuStandard = {140, 140, 140, 255}, + MenuDimmed = {75, 75, 75, 255}, + MenuExtraDimmed = {50, 50, 50, 255}, + BriefTitle = {95, 95, 95, 255}, + MidGreyMp = {100, 100, 100, 255}, + NetPlayer1Dark = {93, 39, 39, 255}, + NetPlayer2Dark = {77, 55, 89, 255}, + NetPlayer3Dark = {124, 62, 99, 255}, + NetPlayer4Dark = {120, 80, 80, 255}, + NetPlayer5Dark = {87, 72, 66, 255}, + NetPlayer6Dark = {74, 103, 83, 255}, + NetPlayer7Dark = {60, 85, 88, 255}, + NetPlayer8Dark = {105, 105, 64, 255}, + NetPlayer9Dark = {72, 63, 76, 255}, + NetPlayer10Dark = {53, 98, 95, 255}, + NetPlayer11Dark = {107, 98, 76, 255}, + NetPlayer12Dark = {117, 71, 40, 255}, + NetPlayer13Dark = {76, 101, 117, 255}, + NetPlayer14Dark = {65, 35, 47, 255}, + NetPlayer15Dark = {72, 71, 61, 255}, + NetPlayer16Dark = {85, 58, 47, 255}, + NetPlayer17Dark = {87, 84, 84, 255}, + NetPlayer18Dark = {116, 71, 77, 255}, + NetPlayer19Dark = {93, 107, 45, 255}, + NetPlayer20Dark = {6, 61, 43, 255}, + NetPlayer21Dark = {61, 98, 127, 255}, + NetPlayer22Dark = {85, 30, 115, 255}, + NetPlayer23Dark = {103, 84, 6, 255}, + NetPlayer24Dark = {35, 49, 86, 255}, + NetPlayer25Dark = {21, 83, 92, 255}, + NetPlayer26Dark = {93, 98, 62, 255}, + NetPlayer27Dark = {100, 112, 127, 255}, + NetPlayer28Dark = {120, 120, 75, 255}, + NetPlayer29Dark = {152, 76, 93, 255}, + NetPlayer30Dark = {124, 69, 69, 255}, + NetPlayer31Dark = {10, 43, 50, 255}, + NetPlayer32Dark = {95, 95, 10, 255}, + Bronze = {180, 130, 97, 255}, + Silver = {150, 153, 161, 255}, + Gold = {214, 181, 99, 255}, + Platinum = {166, 221, 190, 255}, + Gang1 = {29, 100, 153, 255}, + Gang2 = {214, 116, 15, 255}, + Gang3 = {135, 125, 142, 255}, + Gang4 = {229, 119, 185, 255}, + SameCrew = {252, 239, 166, 255}, + Freemode = {45, 110, 185, 255}, + PauseBg = {0, 0, 0, 255}, + Friendly = {93, 182, 229, 255}, + Enemy = {194, 80, 80, 255}, + Location = {240, 200, 80, 255}, + Pickup = {114, 204, 114, 255}, + PauseSingleplayer = {114, 204, 114, 255}, + FreemodeDark = {22, 55, 92, 255}, + InactiveMission = {154, 154, 154, 255}, + Damage = {194, 80, 80, 255}, + PinkLight = {252, 115, 201, 255}, + PmMitemHighlight = {252, 177, 49, 255}, + ScriptVariable = {0, 0, 0, 255}, + Yoga = {109, 247, 204, 255}, + Tennis = {241, 101, 34, 255}, + Golf = {214, 189, 97, 255}, + ShootingRange = {112, 25, 25, 255}, + FlightSchool = {47, 92, 115, 255}, + NorthBlue = {93, 182, 229, 255}, + SocialClub = {234, 153, 28, 255}, + PlatformBlue = {11, 55, 123, 255}, + PlatformGreen = {146, 200, 62, 255}, + PlatformGrey = {234, 153, 28, 255}, + FacebookBlue = {66, 89, 148, 255}, + IngameBg = {0, 0, 0, 255}, + Darts = {114, 204, 114, 255}, + Waypoint = {164, 76, 242, 255}, + Michael = {101, 180, 212, 255}, + Franklin = {171, 237, 171, 255}, + Trevor = {255, 163, 87, 255}, + GolfP1 = {240, 240, 240, 255}, + GolfP2 = {235, 239, 30, 255}, + GolfP3 = {255, 149, 14, 255}, + GolfP4 = {246, 60, 161, 255}, + WaypointLight = {210, 166, 249, 255}, + WaypointDark = {82, 38, 121, 255}, + PanelLight = {0, 0, 0, 255}, + MichaelDark = {72, 103, 116, 255}, + FranklinDark = {85, 118, 85, 255}, + TrevorDark = {127, 81, 43, 255}, + ObjectiveRoute = {240, 200, 80, 255}, + PausemapTint = {0, 0, 0, 255}, + PauseDeselect = {100, 100, 100, 255}, + PmWeaponsPurchasable = {45, 110, 185, 255}, + PmWeaponsLocked = {240, 240, 240, 255}, + ScreenBg = {0, 0, 0, 255}, + Chop = {224, 50, 50, 255}, + PausemapTintHalf = {0, 0, 0, 255}, + NorthBlueOfficial = {0, 71, 133, 255}, + ScriptVariable2 = {0, 0, 0, 255}, + H = {33, 118, 37, 255}, + HDark = {37, 102, 40, 255}, + T = {234, 153, 28, 255}, + TDark = {225, 140, 8, 255}, + HShard = {20, 40, 0, 255}, + ControllerMichael = {48, 255, 255, 255}, + ControllerFranklin = {48, 255, 0, 255}, + ControllerTrevor = {176, 80, 0, 255}, + ControllerChop = {127, 0, 0, 255}, + VideoEditorVideo = {53, 166, 224, 255}, + VideoEditorAudio = {162, 79, 157, 255}, + VideoEditorText = {104, 192, 141, 255}, + HbBlue = {29, 100, 153, 255}, + HbYellow = {234, 153, 28, 255}, + VideoEditorScore = {240, 160, 1, 255}, + VideoEditorAudioFadeout = {59, 34, 57, 255}, + VideoEditorTextFadeout = {41, 68, 53, 255}, + VideoEditorScoreFadeout = {82, 58, 10, 255}, + HeistBackground = {37, 102, 40, 255}, + VideoEditorAmbient = {240, 200, 80, 255}, + VideoEditorAmbientFadeout = {80, 70, 34, 255}, + Gb = {255, 133, 85, 255}, + G = {255, 194, 170, 255}, + B = {255, 133, 85, 255}, + LowFlow = {240, 200, 80, 255}, + LowFlowDark = {126, 107, 41, 255}, + G1 = {247, 159, 123, 255}, + G2 = {226, 134, 187, 255}, + G3 = {239, 238, 151, 255}, + G4 = {113, 169, 175, 255}, + G5 = {160, 140, 193, 255}, + G6 = {141, 206, 167, 255}, + G7 = {181, 214, 234, 255}, + G8 = {178, 144, 132, 255}, + G9 = {0, 132, 114, 255}, + G10 = {216, 85, 117, 255}, + G11 = {30, 100, 152, 255}, + G12 = {43, 181, 117, 255}, + G13 = {233, 141, 79, 255}, + G14 = {137, 210, 215, 255}, + G15 = {134, 125, 141, 255}, + Adversary = {109, 34, 33, 255}, + DegenRed = {255, 0, 0, 255}, + DegenYellow = {255, 255, 0, 255}, + DegenGreen = {0, 255, 0, 255}, + DegenCyan = {0, 255, 255, 255}, + DegenBlue = {0, 0, 255, 255}, + DegenMagenta = {255, 0, 255, 255}, + Stunt1 = {38, 136, 234, 255}, + Stunt2 = {224, 50, 50, 255}, +} + +--[[ + Utils.lua + Utilities +--]] + +function GetResolution() + local screenw,screenh = GetActiveScreenResolution() + local ratio = screenw / screenh + local width = 1080 * ratio + + return width, 1080 +end + +function FormatXWYH(Value, Value2) + local w, h = GetResolution() + + return Value/w, Value2/h +end + +function math.round(num, numDecimalPlaces) + return tonumber(string.format("%." .. (numDecimalPlaces or 0) .. "f", num)) +end + +function tobool(input) + if input == "true" or tonumber(input) == 1 or input == true then + return true + else + return false + end +end + +function string.split(inputstr, sep) + if sep == nil then + sep = "%s" + end + local t={} ; i=1 + for str in string.gmatch(inputstr, "([^"..sep.."]+)") do + t[i] = str + i = i + 1 + end + + return t +end + +function string.starts(String, Start) + return string.sub(String, 1, string.len(Start)) == Start +end + +function IsMouseInBounds(X, Y, Width, Height) + local MX, MY = math.round(GetControlNormal(0, 239) * 1920), math.round(GetControlNormal(0, 240) * 1080) + MX, MY = FormatXWYH(MX, MY) + X, Y = FormatXWYH(X, Y) + Width, Height = FormatXWYH(Width, Height) + return (MX >= X and MX <= X + Width) and (MY > Y and MY < Y + Height) +end + +function GetSafeZoneBounds() + local SafeSize = GetSafeZoneSize() + SafeSize = math.round(SafeSize, 2) + SafeSize = (SafeSize * 100) - 90 + SafeSize = 10 - SafeSize + + local W, H = 1920, 1080 + + return {X = math.round(SafeSize * ((W/H) * 5.4)), Y = math.round(SafeSize * 5.4)} +end + +function Controller() + return not IsInputDisabled(2) +end + +--[[ + UIResRectangle.lua + Elements +--]] + +function UIResRectangle.New(X, Y, Width, Height, R, G, B, A) + local _UIResRectangle = { + X = tonumber(X) or 0, + Y = tonumber(Y) or 0, + Width = tonumber(Width) or 0, + Height = tonumber(Height) or 0, + _Colour = {R = tonumber(R) or 255, G = tonumber(G) or 255, B = tonumber(B) or 255, A = tonumber(A) or 255}, + } + return setmetatable(_UIResRectangle, UIResRectangle) +end + +function UIResRectangle:Position(X, Y) + if tonumber(X) and tonumber(Y) then + self.X = tonumber(X) + self.Y = tonumber(Y) + else + return {X = self.X, Y = self.Y} + end +end + +function UIResRectangle:Size(Width, Height) + if tonumber(Width) and tonumber(Height) then + self.Width = tonumber(Width) + self.Height = tonumber(Height) + else + return {Width = self.Width, Height = self.Height} + end +end + +function UIResRectangle:Colour(R, G, B, A) + if tonumber(R) or tonumber(G) or tonumber(B) or tonumber(A) then + self._Colour.R = tonumber(R) or 255 + self._Colour.B = tonumber(B) or 255 + self._Colour.G = tonumber(G) or 255 + self._Colour.A = tonumber(A) or 255 + else + return self._Colour + end +end + +function UIResRectangle:Draw() + local Position = self:Position() + local Size = self:Size() + Size.Width, Size.Height = FormatXWYH(Size.Width, Size.Height) + Position.X, Position.Y = FormatXWYH(Position.X, Position.Y) + DrawRect(Position.X + Size.Width * 0.5, Position.Y + Size.Height * 0.5, Size.Width, Size.Height, self._Colour.R, self._Colour.G, self._Colour.B, self._Colour.A) +end + +function DrawRectangle(X, Y, Width, Height, R, G, B, A) + X, Y, Width, Height = X or 0, Y or 0, Width or 0, Height or 0 + X, Y = FormatXWYH(X, Y) + Width, Height = FormatXWYH(Width, Height) + DrawRect(X + Width * 0.5, Y + Height * 0.5, Width, Height, tonumber(R) or 255, tonumber(G) or 255, tonumber(B) or 255, tonumber(A) or 255) +end + +--[[ + UIResText.lua + Elements +--]] + +function GetCharacterCount(str) + local characters = 0 + for c in str:gmatch("[%z\1-\127\194-\244][\128-\191]*") do + local a = c:byte(1, -1) + if a ~= nil then + characters = characters + 1 + end + end + return characters +end + +function GetByteCount(str) + local bytes = 0 + + for c in str:gmatch("[%z\1-\127\194-\244][\128-\191]*") do + local a,b,c,d = c:byte(1, -1) + if a ~= nil then + bytes = bytes + 1 + end + if b ~= nil then + bytes = bytes + 1 + end + if c ~= nil then + bytes = bytes + 1 + end + if d ~= nil then + bytes = bytes + 1 + end + end + return bytes +end + +function AddLongStringForAscii(str) + local maxbytelength = 99 + for i = 0, GetCharacterCount(str), 99 do + AddTextComponentSubstringPlayerName(string.sub(str, i, math.min(maxbytelength, GetCharacterCount(str) - i))) --needs changed + end +end + +function AddLongStringForUtf8(str) + local maxbytelength = 99 + local bytecount = GetByteCount(str) + + if bytecount < maxbytelength then + AddTextComponentSubstringPlayerName(str) + return + end + + local startIndex = 0 + + for i = 0, GetCharacterCount(str), 1 do + local length = i - startIndex + if GetByteCount(string.sub(str, startIndex, length)) > maxbytelength then + AddTextComponentSubstringPlayerName(string.sub(str, startIndex, length - 1)) + i = i - 1 + startIndex = startIndex + (length - 1) + end + end + AddTextComponentSubstringPlayerName(string.sub(str, startIndex, GetCharacterCount(str) - startIndex)) +end + +function AddLongString(str) + local bytecount = GetByteCount(str) + if bytecount == GetCharacterCount(str) then + AddLongStringForAscii(str) + else + AddLongStringForUtf8(str) + end +end + +function MeasureStringWidthNoConvert(str, font, scale) + BeginTextCommandWidth("STRING") + AddLongString(str) + SetTextFont(font or 0) + SetTextScale(1.0, scale or 0) + return EndTextCommandGetWidth(true) +end + +function MeasureStringWidth(str, font, scale) + return MeasureStringWidthNoConvert(str, font, scale) * 1920 +end + +function UIResText.New(Text, X, Y, Scale, R, G, B, A, Font, Alignment, DropShadow, Outline, WordWrap) + local _UIResText = { + _Text = tostring(Text) or "", + X = tonumber(X) or 0, + Y = tonumber(Y) or 0, + Scale = tonumber(Scale) or 0, + _Colour = {R = tonumber(R) or 255, G = tonumber(G) or 255, B = tonumber(B) or 255, A = tonumber(A) or 255}, + Font = tonumber(Font) or 0, + Alignment = Alignment or nil, + DropShadow = Dropshadow or nil, + Outline = Outline or nil, + WordWrap = tonumber(WordWrap) or 0, + } + return setmetatable(_UIResText, UIResText) +end + +function UIResText:Position(X, Y) + if tonumber(X) and tonumber(Y) then + self.X = tonumber(X) + self.Y = tonumber(Y) + else + return {X = self.X, Y = self.Y} + end +end + +function UIResText:Colour(R, G, B, A) + if tonumber(R) and tonumber(G) and tonumber(B) and tonumber(A) then + self._Colour.R = tonumber(R) + self._Colour.B = tonumber(B) + self._Colour.G = tonumber(G) + self._Colour.A = tonumber(A) + else + return self._Colour + end +end + +function UIResText:Text(Text) + if tostring(Text) and Text ~= nil then + self._Text = tostring(Text) + else + return self._Text + end +end + +function UIResText:Draw() + local Position = self:Position() + Position.X, Position.Y = FormatXWYH(Position.X, Position.Y) + + SetTextFont(self.Font) + SetTextScale(1.0, self.Scale) + SetTextColour(self._Colour.R, self._Colour.G, self._Colour.B, self._Colour.A) + + if self.DropShadow then + SetTextDropShadow() + end + if self.Outline then + SetTextOutline() + end + + if self.Alignment ~= nil then + if self.Alignment == 1 or self.Alignment == "Center" or self.Alignment == "Centre" then + SetTextCentre(true) + elseif self.Alignment == 2 or self.Alignment == "Right" then + SetTextRightJustify(true) + SetTextWrap(0, Position.X) + end + end + + if tonumber(self.WordWrap) then + if tonumber(self.WordWrap) ~= 0 then + SetTextWrap(Position.X, Position.X + (tonumber(self.WordWrap) / Resolution.Width)) + end + end + + BeginTextCommandDisplayText("STRING") + AddLongString(self._Text) + EndTextCommandDisplayText(Position.X, Position.Y) +end + +function RenderText(Text, X, Y, Font, Scale, R, G, B, A, Alignment, DropShadow, Outline, WordWrap) + Text = tostring(Text) + X, Y = FormatXWYH(X, Y) + SetTextFont(Font or 0) + SetTextScale(1.0, Scale or 0) + SetTextColour(R or 255, G or 255, B or 255, A or 255) + + if DropShadow then + SetTextDropShadow() + end + if Outline then + SetTextOutline() + end + + if Alignment ~= nil then + if Alignment == 1 or Alignment == "Center" or Alignment == "Centre" then + SetTextCentre(true) + elseif Alignment == 2 or Alignment == "Right" then + SetTextRightJustify(true) + SetTextWrap(0, X) + end + end + + if tonumber(WordWrap) then + if tonumber(WordWrap) ~= 0 then + WordWrap, _ = FormatXWYH(WordWrap, 0) + SetTextWrap(WordWrap, X - WordWrap) + end + end + + BeginTextCommandDisplayText("STRING") + AddLongString(Text) + EndTextCommandDisplayText(X, Y) +end + +--[[ + Sprite.lua + Elements +--]] + +function Sprite.New(TxtDictionary, TxtName, X, Y, Width, Height, Heading, R, G, B, A) + local _Sprite = { + TxtDictionary = tostring(TxtDictionary), + TxtName = tostring(TxtName), + X = tonumber(X) or 0, + Y = tonumber(Y) or 0, + Width = tonumber(Width) or 0, + Height = tonumber(Height) or 0, + Heading = tonumber(Heading) or 0, + _Colour = {R = tonumber(R) or 255, G = tonumber(G) or 255, B = tonumber(B) or 255, A = tonumber(A) or 255}, + } + return setmetatable(_Sprite, Sprite) +end + +function Sprite:Position(X, Y) + if tonumber(X) and tonumber(Y) then + self.X = tonumber(X) + self.Y = tonumber(Y) + else + return {X = self.X, Y = self.Y} + end +end + +function Sprite:Size(Width, Height) + if tonumber(Width) and tonumber(Width) then + self.Width = tonumber(Width) + self.Height = tonumber(Height) + else + return {Width = self.Width, Height = self.Height} + end +end + +function Sprite:Colour(R, G, B, A) + if tonumber(R) or tonumber(G) or tonumber(B) or tonumber(A) then + self._Colour.R = tonumber(R) or 255 + self._Colour.B = tonumber(B) or 255 + self._Colour.G = tonumber(G) or 255 + self._Colour.A = tonumber(A) or 255 + else + return self._Colour + end +end + +function Sprite:Draw() + if not HasStreamedTextureDictLoaded(self.TxtDictionary) then + RequestStreamedTextureDict(self.TxtDictionary, true) + end + local Position = self:Position() + local Size = self:Size() + Size.Width, Size.Height = FormatXWYH(Size.Width, Size.Height) + Position.X, Position.Y = FormatXWYH(Position.X, Position.Y) + DrawSprite(self.TxtDictionary, self.TxtName, Position.X + Size.Width * 0.5, Position.Y + Size.Height * 0.5, Size.Width, Size.Height, self.Heading, self._Colour.R, self._Colour.G, self._Colour.B, self._Colour.A) +end + +function DrawTexture(TxtDictionary, TxtName, X, Y, Width, Height, Heading, R, G, B, A) + if not HasStreamedTextureDictLoaded(tostring(TxtDictionary) or "") then + RequestStreamedTextureDict(tostring(TxtDictionary) or "", true) + end + X, Y, Width, Height = X or 0, Y or 0, Width or 0, Height or 0 + X, Y = FormatXWYH(X, Y) + Width, Height = FormatXWYH(Width, Height) + DrawSprite(tostring(TxtDictionary) or "", tostring(TxtName) or "", X + Width * 0.5, Y + Height * 0.5, Width, Height, tonumber(Heading) or 0, tonumber(R) or 255, tonumber(G) or 255, tonumber(B) or 255, tonumber(A) or 255) +end + +--[[ + StringMeasurer.lua + Elements +--]] + +function MeasureString(str) + local output = 0 + for i = 1, GetCharacterCount(str), 1 do + if CharacterMap[string.sub(str, i, i)] then + output = output + CharacterMap[string.sub(str, i, i)] + 1 + end + end + return output +end + +--[[ + Badge.lua + Elements +--]] + +function GetBadgeTexture(Badge, Selected) + if BadgeTexture[Badge] then + return BadgeTexture[Badge](Selected) + else + return "" + end +end + +function GetBadgeDictionary(Badge, Selected) + if BadgeDictionary[Badge] then + return BadgeDictionary[Badge](Selected) + else + return "commonmenu" + end +end + +function GetBadgeColour(Badge, Selected) + if BadgeColour[Badge] then + return BadgeColour[Badge](Selected) + else + return 255, 255, 255, 255 + end +end + +--[[ + Colours.lua + Elements +--]] + +--[[ + UIMenuItem.lua + Items +--]] + +function UIMenuItem.New(Text, Description) + _UIMenuItem = { + Rectangle = UIResRectangle.New(0, 0, 431, 38, 255, 255, 255, 20), + Text = UIResText.New(tostring(Text) or "", 8, 0, 0.33, 245, 245, 245, 255, 0), + _Description = tostring(Description) or ""; + SelectedSprite = Sprite.New("commonmenu", "gradient_nav", 0, 0, 431, 38), + LeftBadge = { Sprite = Sprite.New("commonmenu", "", 0, 0, 40, 40), Badge = 0}, + RightBadge = { Sprite = Sprite.New("commonmenu", "", 0, 0, 40, 40), Badge = 0}, + Label = { + Text = UIResText.New("", 0, 0, 0.35, 245, 245, 245, 255, 0, "Right"), + MainColour = {R = 255, G = 255, B = 255, A = 255}, + HighlightColour = {R = 0, G = 0, B = 0, A = 255}, + }, + _Selected = false, + _Hovered = false, + _Enabled = true, + _Offset = {X = 0, Y = 0}, + ParentMenu = nil, + Panels = {}, + Activated = function(menu, item, panels) end, + ActivatedPanel = function(menu, item, panel, panelvalue) end, + } + return setmetatable(_UIMenuItem, UIMenuItem) +end + +function UIMenuItem:SetParentMenu(Menu) + if Menu ~= nil and Menu() == "UIMenu" then + self.ParentMenu = Menu + else + return self.ParentMenu + end +end + +function UIMenuItem:Selected(bool) + if bool ~= nil then + self._Selected = tobool(bool) + else + return self._Selected + end +end + +function UIMenuItem:Hovered(bool) + if bool ~= nil then + self._Hovered = tobool(bool) + else + return self._Hovered + end +end + +function UIMenuItem:Enabled(bool) + if bool ~= nil then + self._Enabled = tobool(bool) + else + return self._Enabled + end +end + +function UIMenuItem:Description(str) + if tostring(str) and str ~= nil then + self._Description = tostring(str) + else + return self._Description + end +end + +function UIMenuItem:Offset(X, Y) + if tonumber(X) or tonumber(Y) then + if tonumber(X) then + self._Offset.X = tonumber(X) + end + if tonumber(Y) then + self._Offset.Y = tonumber(Y) + end + else + return self._Offset + end +end + +function UIMenuItem:Position(Y) + if tonumber(Y) then + self.Rectangle:Position(self._Offset.X, Y + 144 + self._Offset.Y) + self.SelectedSprite:Position(0 + self._Offset.X, Y + 144 + self._Offset.Y) + self.Text:Position(8 + self._Offset.X, Y + 147 + self._Offset.Y) + self.LeftBadge.Sprite:Position(0 + self._Offset.X, Y + 142 + self._Offset.Y) + self.RightBadge.Sprite:Position(385 + self._Offset.X, Y + 142 + self._Offset.Y) + self.Label.Text:Position(420 + self._Offset.X, Y + 148 + self._Offset.Y) + end +end + +function UIMenuItem:RightLabel(Text, MainColour, HighlightColour) + if tostring(Text) and Text ~= nil then + if type(MainColour) == "table" then + self.Label.MainColour = MainColour + end + if type(HighlightColour) == "table" then + self.Label.HighlightColour = HighlightColour + end + self.Label.Text:Text(tostring(Text)) + else + return self.Label.Text:Text() + end +end + +function UIMenuItem:SetLeftBadge(Badge) + if tonumber(Badge) then + self.LeftBadge.Badge = tonumber(Badge) + end +end + +function UIMenuItem:SetRightBadge(Badge) + if tonumber(Badge) then + self.RightBadge.Badge = tonumber(Badge) + end +end + +function UIMenuItem:Text(Text) + if tostring(Text) and Text ~= nil then + self.Text:Text(tostring(Text)) + else + return self.Text:Text() + end +end + +function UIMenuItem:AddPanel(Panel) + if Panel() == "UIMenuPanel" then + table.insert(self.Panels, Panel) + Panel:SetParentItem(self) + end +end + +function UIMenuItem:RemovePanelAt(Index) + if tonumber(Index) then + if self.Panels[Index] then + table.remove(self.Panels, tonumber(Index)) + end + end +end + +function UIMenuItem:FindPanelIndex(Panel) + if Panel() == "UIMenuPanel" then + for Index = 1, #self.Panels do + if self.Panels[Index] == Panel then + return Index + end + end + end + return nil +end + +function UIMenuItem:FindPanelItem() + for Index = #self.Items, 1, -1 do + if self.Items[Index].Panel then + return Index + end + end + return nil +end + +function UIMenuItem:Draw() + self.Rectangle:Size(431 + self.ParentMenu.WidthOffset, self.Rectangle.Height) + self.SelectedSprite:Size(431 + self.ParentMenu.WidthOffset, self.SelectedSprite.Height) + + if self._Hovered and not self._Selected then + self.Rectangle:Draw() + end + + if self._Selected then + self.SelectedSprite:Draw() + end + + if self._Enabled then + if self._Selected then + self.Text:Colour(0, 0, 0, 255) + self.Label.Text:Colour(self.Label.HighlightColour.R, self.Label.HighlightColour.G, self.Label.HighlightColour.B, self.Label.HighlightColour.A) + else + self.Text:Colour(245, 245, 245, 255) + self.Label.Text:Colour(self.Label.MainColour.R, self.Label.MainColour.G, self.Label.MainColour.B, self.Label.MainColour.A) + end + else + self.Text:Colour(163, 159, 148, 255) + self.Label.Text:Colour(163, 159, 148, 255) + end + + if self.LeftBadge.Badge == BadgeStyle.None then + self.Text:Position(8 + self._Offset.X, self.Text.Y) + else + self.Text:Position(35 + self._Offset.X, self.Text.Y) + self.LeftBadge.Sprite.TxtDictionary = GetBadgeDictionary(self.LeftBadge.Badge, self._Selected) + self.LeftBadge.Sprite.TxtName = GetBadgeTexture(self.LeftBadge.Badge, self._Selected) + self.LeftBadge.Sprite:Colour(GetBadgeColour(self.LeftBadge.Badge, self._Selected)) + self.LeftBadge.Sprite:Draw() + end + + if self.RightBadge.Badge ~= BadgeStyle.None then + self.RightBadge.Sprite:Position(385 + self._Offset.X + self.ParentMenu.WidthOffset, self.RightBadge.Sprite.Y) + self.RightBadge.Sprite.TxtDictionary = GetBadgeDictionary(self.RightBadge.Badge, self._Selected) + self.RightBadge.Sprite.TxtName = GetBadgeTexture(self.RightBadge.Badge, self._Selected) + self.RightBadge.Sprite:Colour(GetBadgeColour(self.RightBadge.Badge, self._Selected)) + self.RightBadge.Sprite:Draw() + end + + if self.Label.Text:Text() ~= "" and string.len(self.Label.Text:Text()) > 0 then + self.Label.Text:Position(420 + self._Offset.X + self.ParentMenu.WidthOffset, self.Label.Text.Y) + self.Label.Text:Draw() + end + + self.Text:Draw() +end + +--[[ + UIMenuCheckboxItem.lua + Items +--]] + +function UIMenuCheckboxItem.New(Text, Check, Description) + local _UIMenuCheckboxItem = { + Base = UIMenuItem.New(Text or "", Description or ""), + CheckedSprite = Sprite.New("commonmenu", "shop_box_blank", 410, 95, 50, 50), + Checked = tobool(Check), + CheckboxEvent = function(menu, item, checked) end, + } + return setmetatable(_UIMenuCheckboxItem, UIMenuCheckboxItem) +end + +function UIMenuCheckboxItem:SetParentMenu(Menu) + if Menu() == "UIMenu" then + self.Base.ParentMenu = Menu + else + return self.Base.ParentMenu + end +end + +function UIMenuCheckboxItem:Position(Y) + if tonumber(Y) then + self.Base:Position(Y) + self.CheckedSprite:Position(380 + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, Y + 138 + self.Base._Offset.Y) + end +end + +function UIMenuCheckboxItem:Selected(bool) + if bool ~= nil then + self.Base._Selected = tobool(bool) + else + return self.Base._Selected + end +end + +function UIMenuCheckboxItem:Hovered(bool) + if bool ~= nil then + self.Base._Hovered = tobool(bool) + else + return self.Base._Hovered + end +end + +function UIMenuCheckboxItem:Enabled(bool) + if bool ~= nil then + self.Base._Enabled = tobool(bool) + else + return self.Base._Enabled + end +end + +function UIMenuCheckboxItem:Description(str) + if tostring(str) and str ~= nil then + self.Base._Description = tostring(str) + else + return self.Base._Description + end +end + +function UIMenuCheckboxItem:Offset(X, Y) + if tonumber(X) or tonumber(Y) then + if tonumber(X) then + self.Base._Offset.X = tonumber(X) + end + if tonumber(Y) then + self.Base._Offset.Y = tonumber(Y) + end + else + return self.Base._Offset + end +end + +function UIMenuCheckboxItem:Text(Text) + if tostring(Text) and Text ~= nil then + self.Base.Text:Text(tostring(Text)) + else + return self.Base.Text:Text() + end +end + +function UIMenuCheckboxItem:SetLeftBadge() + error("This item does not support badges") +end + +function UIMenuCheckboxItem:SetRightBadge() + error("This item does not support badges") +end + +function UIMenuCheckboxItem:RightLabel() + error("This item does not support a right label") +end + +function UIMenuCheckboxItem:Draw() + self.Base:Draw() + self.CheckedSprite:Position(380 + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, self.CheckedSprite.Y) + if self.Base:Selected() then + if self.Checked then + self.CheckedSprite.TxtName = "shop_box_tickb" + else + self.CheckedSprite.TxtName = "shop_box_blankb" + end + else + if self.Checked then + self.CheckedSprite.TxtName = "shop_box_tick" + else + self.CheckedSprite.TxtName = "shop_box_blank" + end + end + self.CheckedSprite:Draw() +end + +--[[ + UIMenuListItem.lua + Items +--]] + +function UIMenuListItem.New(Text, Items, Index, Description) + if type(Items) ~= "table" then Items = {} end + if Index == 0 then Index = 1 end + local _UIMenuListItem = { + Base = UIMenuItem.New(Text or "", Description or ""), + Items = Items, + LeftArrow = Sprite.New("commonmenu", "arrowleft", 110, 105, 30, 30), + RightArrow = Sprite.New("commonmenu", "arrowright", 280, 105, 30, 30), + ItemText = UIResText.New("", 290, 104, 0.35, 255, 255, 255, 255, 0, "Right"), + _Index = tonumber(Index) or 1, + Panels = {}, + OnListChanged = function(menu, item, newindex) end, + OnListSelected = function(menu, item, newindex) end, + } + return setmetatable(_UIMenuListItem, UIMenuListItem) +end + +function UIMenuListItem:SetParentMenu(Menu) + if Menu ~= nil and Menu() == "UIMenu" then + self.Base.ParentMenu = Menu + else + return self.Base.ParentMenu + end +end + +function UIMenuListItem:Position(Y) + if tonumber(Y) then + self.LeftArrow:Position(300 + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, 147 + Y + self.Base._Offset.Y) + self.RightArrow:Position(400 + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, 147 + Y + self.Base._Offset.Y) + self.ItemText:Position(300 + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, 147 + Y + self.Base._Offset.Y) + self.Base:Position(Y) + end +end + +function UIMenuListItem:Selected(bool) + if bool ~= nil then + self.Base._Selected = tobool(bool) + else + return self.Base._Selected + end +end + +function UIMenuListItem:Hovered(bool) + if bool ~= nil then + self.Base._Hovered = tobool(bool) + else + return self.Base._Hovered + end +end + +function UIMenuListItem:Enabled(bool) + if bool ~= nil then + self.Base._Enabled = tobool(bool) + else + return self.Base._Enabled + end +end + +function UIMenuListItem:Description(str) + if tostring(str) and str ~= nil then + self.Base._Description = tostring(str) + else + return self.Base._Description + end +end + +function UIMenuListItem:Offset(X, Y) + if tonumber(X) or tonumber(Y) then + if tonumber(X) then + self.Base._Offset.X = tonumber(X) + end + if tonumber(Y) then + self.Base._Offset.Y = tonumber(Y) + end + else + return self.Base._Offset + end +end + +function UIMenuListItem:Text(Text) + if tostring(Text) and Text ~= nil then + self.Base.Text:Text(tostring(Text)) + else + return self.Base.Text:Text() + end +end + +function UIMenuListItem:Index(Index) + if tonumber(Index) then + if tonumber(Index) > #self.Items then + self._Index = 1 + elseif tonumber(Index) < 1 then + self._Index = #self.Items + else + self._Index = tonumber(Index) + end + else + return self._Index + end +end + +function UIMenuListItem:ItemToIndex(Item) + for i = 1, #self.Items do + if type(Item) == type(self.Items[i]) and Item == self.Items[i] then + return i + elseif type(self.Items[i]) == "table" and (type(Item) == type(self.Items[i].Name) or type(Item) == type(self.Items[i].Value)) and (Item == self.Items[i].Name or Item == self.Items[i].Value) then + return i + end + end +end + +function UIMenuListItem:IndexToItem(Index) + if tonumber(Index) then + if tonumber(Index) == 0 then Index = 1 end + if self.Items[tonumber(Index)] then + return self.Items[tonumber(Index)] + end + end +end + +function UIMenuListItem:SetLeftBadge() + error("This item does not support badges") +end + +function UIMenuListItem:SetRightBadge() + error("This item does not support badges") +end + +function UIMenuListItem:RightLabel() + error("This item does not support a right label") +end + +function UIMenuListItem:AddPanel(Panel) + if Panel() == "UIMenuPanel" then + table.insert(self.Panels, Panel) + Panel:SetParentItem(self) + end +end + +function UIMenuListItem:RemovePanelAt(Index) + if tonumber(Index) then + if self.Panels[Index] then + table.remove(self.Panels, tonumber(Index)) + end + end +end + +function UIMenuListItem:FindPanelIndex(Panel) + if Panel() == "UIMenuPanel" then + for Index = 1, #self.Panels do + if self.Panels[Index] == Panel then + return Index + end + end + end + return nil +end + +function UIMenuListItem:FindPanelItem() + for Index = #self.Items, 1, -1 do + if self.Items[Index].Panel then + return Index + end + end + return nil +end + +function UIMenuListItem:Draw() + self.Base:Draw() + + if self:Enabled() then + if self:Selected() then + self.ItemText:Colour(0, 0, 0, 255) + self.LeftArrow:Colour(0, 0, 0, 255) + self.RightArrow:Colour(0, 0, 0, 255) + else + self.ItemText:Colour(245, 245, 245, 255) + self.LeftArrow:Colour(245, 245, 245, 255) + self.RightArrow:Colour(245, 245, 245, 255) + end + else + self.ItemText:Colour(163, 159, 148, 255) + self.LeftArrow:Colour(163, 159, 148, 255) + self.RightArrow:Colour(163, 159, 148, 255) + end + + local Text = (type(self.Items[self._Index]) == "table") and tostring(self.Items[self._Index].Name) or tostring(self.Items[self._Index]) + local Offset = MeasureStringWidth(Text, 0, 0.35) + + self.ItemText:Text(Text) + self.LeftArrow:Position(378 - Offset + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, self.LeftArrow.Y) + + if self:Selected() then + self.LeftArrow:Draw() + self.RightArrow:Draw() + self.ItemText:Position(403 + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, self.ItemText.Y) + else + self.ItemText:Position(418 + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, self.ItemText.Y) + end + + self.ItemText:Draw() +end + +--[[ + UIMenuSliderItem.lua + Items +--]] + +function UIMenuSliderItem.New(Text, Items, Index, Description, Divider) + if type(Items) ~= "table" then Items = {} end + if Index == 0 then Index = 1 end + local _UIMenuSliderItem = { + Base = UIMenuItem.New(Text or "", Description or ""), + Items = Items, + ShowDivider = tobool(Divider), + LeftArrow = Sprite.New("commonmenutu", "arrowleft", 0, 105, 15, 15), + RightArrow = Sprite.New("commonmenutu", "arrowright", 0, 105, 15, 15), + Background = UIResRectangle.New(0, 0, 150, 9, 4, 32, 57, 255), + Slider = UIResRectangle.New(0, 0, 75, 9, 57, 116, 200, 255), + Divider = UIResRectangle.New(0, 0, 2.5, 20, 245, 245, 245, 255), + _Index = tonumber(Index) or 1, + OnSliderChanged = function(menu, item, newindex) end, + OnSliderSelected = function(menu, item, newindex) end, + } + return setmetatable(_UIMenuSliderItem, UIMenuSliderItem) +end + +function UIMenuSliderItem:SetParentMenu(Menu) + if Menu() == "UIMenu" then + self.Base.ParentMenu = Menu + else + return self.Base.ParentMenu + end +end + +function UIMenuSliderItem:Position(Y) + if tonumber(Y) then + self.Background:Position(250 + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, Y + 158.5 + self.Base._Offset.Y) + self.Slider:Position(250 + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, Y + 158.5 + self.Base._Offset.Y) + self.Divider:Position(323.5 + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, Y + 153 + self.Base._Offset.Y) + self.LeftArrow:Position(235 + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, 155.5 + Y + self.Base._Offset.Y) + self.RightArrow:Position(400 + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, 155.5 + Y + self.Base._Offset.Y) + self.Base:Position(Y) + end +end + +function UIMenuSliderItem:Selected(bool) + if bool ~= nil then + self.Base._Selected = tobool(bool) + else + return self.Base._Selected + end +end + +function UIMenuSliderItem:Hovered(bool) + if bool ~= nil then + self.Base._Hovered = tobool(bool) + else + return self.Base._Hovered + end +end + +function UIMenuSliderItem:Enabled(bool) + if bool ~= nil then + self.Base._Enabled = tobool(bool) + else + return self.Base._Enabled + end +end + +function UIMenuSliderItem:Description(str) + if tostring(str) and str ~= nil then + self.Base._Description = tostring(str) + else + return self.Base._Description + end +end + +function UIMenuSliderItem:Offset(X, Y) + if tonumber(X) or tonumber(Y) then + if tonumber(X) then + self.Base._Offset.X = tonumber(X) + end + if tonumber(Y) then + self.Base._Offset.Y = tonumber(Y) + end + else + return self.Base._Offset + end +end + +function UIMenuSliderItem:Text(Text) + if tostring(Text) and Text ~= nil then + self.Base.Text:Text(tostring(Text)) + else + return self.Base.Text:Text() + end +end + +function UIMenuSliderItem:Index(Index) + if tonumber(Index) then + if tonumber(Index) > #self.Items then + self._Index = 1 + elseif tonumber(Index) < 1 then + self._Index = #self.Items + else + self._Index = tonumber(Index) + end + else + return self._Index + end +end + +function UIMenuSliderItem:ItemToIndex(Item) + for i = 1, #self.Items do + if type(Item) == type(self.Items[i]) and Item == self.Items[i] then + return i + end + end +end + +function UIMenuSliderItem:IndexToItem(Index) + if tonumber(Index) then + if tonumber(Index) == 0 then Index = 1 end + if self.Items[tonumber(Index)] then + return self.Items[tonumber(Index)] + end + end +end + +function UIMenuSliderItem:SetLeftBadge() + error("This item does not support badges") +end + +function UIMenuSliderItem:SetRightBadge() + error("This item does not support badges") +end + +function UIMenuSliderItem:RightLabel() + error("This item does not support a right label") +end + +function UIMenuSliderItem:Draw() + self.Base:Draw() + + if self:Enabled() then + if self:Selected() then + self.LeftArrow:Colour(0, 0, 0, 255) + self.RightArrow:Colour(0, 0, 0, 255) + else + self.LeftArrow:Colour(245, 245, 245, 255) + self.RightArrow:Colour(245, 245, 245, 255) + end + else + self.LeftArrow:Colour(163, 159, 148, 255) + self.RightArrow:Colour(163, 159, 148, 255) + end + + local Offset = ((self.Background.Width - self.Slider.Width)/(#self.Items - 1)) * (self._Index-1) + + self.Slider:Position(250 + self.Base._Offset.X + Offset + self.Base.ParentMenu.WidthOffset, self.Slider.Y) + + if self:Selected() then + self.LeftArrow:Draw() + self.RightArrow:Draw() + end + + self.Background:Draw() + self.Slider:Draw() + if self.ShowDivider then + self.Divider:Draw() + end +end + +--[[ + UIMenuColouredItem.lua + Items +--]] + +function UIMenuColouredItem.New(Text, Description, MainColour, HighlightColour) + if type(Colour) ~= "table" then Colour = {R = 0, G = 0, B = 0, A = 255} end + if type(HighlightColour) ~= "table" then Colour = {R = 255, G = 255, B = 255, A = 255} end + local _UIMenuColouredItem = { + Base = UIMenuItem.New(Text or "", Description or ""), + Rectangle = UIResRectangle.New(0, 0, 431, 38, MainColour.R, MainColour.G, MainColour.B, MainColour.A), + MainColour = MainColour, + HighlightColour = HighlightColour, + Activated = function(menu, item) end, + } + _UIMenuColouredItem.Base.SelectedSprite:Colour(HighlightColour.R, HighlightColour.G, HighlightColour.B, HighlightColour.A) + return setmetatable(_UIMenuColouredItem, UIMenuColouredItem) +end + +function UIMenuColouredItem:SetParentMenu(Menu) + if Menu() == "UIMenu" then + self.Base.ParentMenu = Menu + else + return self.Base.ParentMenu + end +end + +function UIMenuColouredItem:Position(Y) + if tonumber(Y) then + self.Base:Position(Y) + self.Rectangle:Position(self.Base._Offset.X, Y + 144 + self.Base._Offset.Y) + end +end + +function UIMenuColouredItem:Selected(bool) + if bool ~= nil then + self.Base._Selected = tobool(bool) + else + return self.Base._Selected + end +end + +function UIMenuColouredItem:Hovered(bool) + if bool ~= nil then + self.Base._Hovered = tobool(bool) + else + return self.Base._Hovered + end +end + +function UIMenuColouredItem:Enabled(bool) + if bool ~= nil then + self.Base._Enabled = tobool(bool) + else + return self.Base._Enabled + end +end + +function UIMenuColouredItem:Description(str) + if tostring(str) and str ~= nil then + self.Base._Description = tostring(str) + else + return self.Base._Description + end +end + +function UIMenuColouredItem:Offset(X, Y) + if tonumber(X) or tonumber(Y) then + if tonumber(X) then + self.Base._Offset.X = tonumber(X) + end + if tonumber(Y) then + self.Base._Offset.Y = tonumber(Y) + end + else + return self.Base._Offset + end +end + +function UIMenuColouredItem:Text(Text) + if tostring(Text) and Text ~= nil then + self.Base.Text:Text(tostring(Text)) + else + return self.Base.Text:Text() + end +end + +function UIMenuColouredItem:RightLabel(Text, MainColour, HighlightColour) + if tostring(Text) and Text ~= nil then + if type(MainColour) == "table" then + self.Base.Label.MainColour = MainColour + end + if type(HighlightColour) == "table" then + self.Base.Label.HighlightColour = HighlightColour + end + self.Base.Label.Text:Text(tostring(Text)) + else + return self.Base.Label.Text:Text() + end +end + +function UIMenuColouredItem:SetLeftBadge(Badge) + if tonumber(Badge) then + self.Base.LeftBadge.Badge = tonumber(Badge) + end +end + +function UIMenuColouredItem:SetRightBadge(Badge) + if tonumber(Badge) then + self.Base.RightBadge.Badge = tonumber(Badge) + end +end + +function UIMenuColouredItem:Draw() + self.Rectangle:Draw() + self.Base:Draw() +end + +--[[ + UIMenuProgressItem.lua + Items +--]] + +function UIMenuProgressItem.New(Text, Items, Index, Description, Counter) + if type(Items) ~= "table" then Items = {} end + if Index == 0 then Index = 1 end + local _UIMenuProgressItem = { + Base = UIMenuItem.New(Text or "", Description or ""), + Data = { + Items = Items, + Counter = tobool(Counter), + Max = 407.5, + Index = tonumber(Index) or 1, + }, + Background = UIResRectangle.New(0, 0, 415, 20), + Bar = UIResRectangle.New(0, 0, 407.5, 12.5), + OnProgressChanged = function(menu, item, newindex) end, + OnProgressSelected = function(menu, item, newindex) end, + } + + _UIMenuProgressItem.Base.Rectangle.Height = 60 + _UIMenuProgressItem.Base.SelectedSprite.Height = 60 + + if _UIMenuProgressItem.Data.Counter then + _UIMenuProgressItem.Base:RightLabel(_UIMenuProgressItem.Data.Index.."/"..#_UIMenuProgressItem.Data.Items) + else + _UIMenuProgressItem.Base:RightLabel((type(_UIMenuProgressItem.Data.Items[_UIMenuProgressItem.Data.Index]) == "table") and tostring(_UIMenuProgressItem.Data.Items[_UIMenuProgressItem.Data.Index].Name) or tostring(_UIMenuProgressItem.Data.Items[_UIMenuProgressItem.Data.Index])) + end + + _UIMenuProgressItem.Bar.Width = _UIMenuProgressItem.Data.Index/#_UIMenuProgressItem.Data.Items * _UIMenuProgressItem.Data.Max + + return setmetatable(_UIMenuProgressItem, UIMenuProgressItem) +end + +function UIMenuProgressItem:SetParentMenu(Menu) + if Menu() == "UIMenu" then + self.Base.ParentMenu = Menu + else + return self.Base.ParentMenu + end +end + +function UIMenuProgressItem:Position(Y) + if tonumber(Y) then + self.Base:Position(Y) + self.Background:Position(8 + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, 177 + Y + self.Base._Offset.Y) + self.Bar:Position(11.75 + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, 180.75 + Y + self.Base._Offset.Y) + end +end + +function UIMenuProgressItem:Selected(bool) + if bool ~= nil then + self.Base._Selected = tobool(bool) + else + return self.Base._Selected + end +end + +function UIMenuProgressItem:Hovered(bool) + if bool ~= nil then + self.Base._Hovered = tobool(bool) + else + return self.Base._Hovered + end +end + +function UIMenuProgressItem:Enabled(bool) + if bool ~= nil then + self.Base._Enabled = tobool(bool) + else + return self.Base._Enabled + end +end + +function UIMenuProgressItem:Description(str) + if tostring(str) and str ~= nil then + self.Base._Description = tostring(str) + else + return self.Base._Description + end +end + +function UIMenuProgressItem:Offset(X, Y) + if tonumber(X) or tonumber(Y) then + if tonumber(X) then + self.Base._Offset.X = tonumber(X) + end + if tonumber(Y) then + self.Base._Offset.Y = tonumber(Y) + end + else + return self.Base._Offset + end +end + +function UIMenuProgressItem:Text(Text) + if tostring(Text) and Text ~= nil then + self.Base.Text:Text(tostring(Text)) + else + return self.Base.Text:Text() + end +end + +function UIMenuProgressItem:Index(Index) + if tonumber(Index) then + if tonumber(Index) > #self.Data.Items then + self.Data.Index = 1 + elseif tonumber(Index) < 1 then + self.Data.Index = #self.Data.Items + else + self.Data.Index = tonumber(Index) + end + + if self.Data.Counter then + self.Base:RightLabel(self.Data.Index.."/"..#self.Data.Items) + else + self.Base:RightLabel((type(self.Data.Items[self.Data.Index]) == "table") and tostring(self.Data.Items[self.Data.Index].Name) or tostring(self.Data.Items[self.Data.Index])) + end + + self.Bar.Width = self.Data.Index/#self.Data.Items * self.Data.Max + else + return self.Data.Index + end +end + +function UIMenuProgressItem:ItemToIndex(Item) + for i = 1, #self.Data.Items do + if type(Item) == type(self.Data.Items[i]) and Item == self.Data.Items[i] then + return i + elseif type(self.Data.Items[i]) == "table" and (type(Item) == type(self.Data.Items[i].Name) or type(Item) == type(self.Data.Items[i].Value)) and (Item == self.Data.Items[i].Name or Item == self.Data.Items[i].Value) then + return i + end + end +end + +function UIMenuProgressItem:IndexToItem(Index) + if tonumber(Index) then + if tonumber(Index) == 0 then Index = 1 end + if self.Data.Items[tonumber(Index)] then + return self.Data.Items[tonumber(Index)] + end + end +end + +function UIMenuProgressItem:SetLeftBadge() + error("This item does not support badges") +end + +function UIMenuProgressItem:SetRightBadge() + error("This item does not support badges") +end + +function UIMenuProgressItem:RightLabel() + error("This item does not support a right label") +end + +function UIMenuProgressItem:CalculateProgress(CursorX) + local Progress = CursorX - self.Bar.X + self:Index(math.round(#self.Data.Items * (((Progress >= 0 and Progress <= self.Data.Max) and Progress or ((Progress < 0) and 0 or self.Data.Max))/self.Data.Max))) +end + +function UIMenuProgressItem:Draw() + self.Base:Draw() + + if self.Base._Selected then + self.Background:Colour(table.unpack(Colours.Black)) + self.Bar:Colour(table.unpack(Colours.White)) + else + self.Background:Colour(table.unpack(Colours.White)) + self.Bar:Colour(table.unpack(Colours.Black)) + end + + self.Background:Draw() + self.Bar:Draw() +end + +--[[ + UIMenuHeritageWindow.lua + Windows +--]] + +function UIMenuHeritageWindow.New(Mum, Dad) + if not tonumber(Mum) then Mum = 0 end + if not (Mum >= 0 and Mum <= 21) then Mum = 0 end + if not tonumber(Dad) then Dad = 0 end + if not (Dad >= 0 and Dad <= 23) then Dad = 0 end + _UIMenuHeritageWindow = { + Background = Sprite.New("pause_menu_pages_char_mom_dad", "mumdadbg", 0, 0, 431, 228), -- Background is required, must be a sprite or a rectangle. + MumSprite = Sprite.New("char_creator_portraits", ((Mum < 21) and "female_"..Mum or "special_female_"..(tonumber(string.sub(Mum, 2, 2)) - 1)), 0, 0, 228, 228), + DadSprite = Sprite.New("char_creator_portraits", ((Dad < 21) and "male_"..Dad or "special_male_"..(tonumber(string.sub(Dad, 2, 2)) - 1)), 0, 0, 228, 228), + Mum = Mum, + Dad = Dad, + _Offset = {X = 0, Y = 0}, -- required + ParentMenu = nil, -- required + } + return setmetatable(_UIMenuHeritageWindow, UIMenuHeritageWindow) +end + +function UIMenuHeritageWindow:SetParentMenu(Menu) -- required + if Menu() == "UIMenu" then + self.ParentMenu = Menu + else + return self.ParentMenu + end +end + +function UIMenuHeritageWindow:Offset(X, Y) -- required + if tonumber(X) or tonumber(Y) then + if tonumber(X) then + self._Offset.X = tonumber(X) + end + if tonumber(Y) then + self._Offset.Y = tonumber(Y) + end + else + return self._Offset + end +end + +function UIMenuHeritageWindow:Position(Y) -- required + if tonumber(Y) then + self.Background:Position(self._Offset.X, 144 + Y + self._Offset.Y) + self.MumSprite:Position(self._Offset.X + (self.ParentMenu.WidthOffset/2) + 25, 144 + Y + self._Offset.Y) + self.DadSprite:Position(self._Offset.X + (self.ParentMenu.WidthOffset/2) + 195, 144 + Y + self._Offset.Y) + end +end + +function UIMenuHeritageWindow:Index(Mum, Dad) + if not tonumber(Mum) then Mum = self.Mum end + if not (Mum >= 0 and Mum <= 21) then Mum = self.Mum end + if not tonumber(Dad) then Dad = self.Dad end + if not (Dad >= 0 and Dad <= 23) then Dad = self.Dad end + + self.Mum = Mum + self.Dad = Dad + + self.MumSprite.TxtName = ((self.Mum < 21) and "female_"..self.Mum or "special_female_"..(tonumber(string.sub(Mum, 2, 2)) - 1)) + self.DadSprite.TxtName = ((self.Dad < 21) and "male_"..self.Dad or "special_male_"..(tonumber(string.sub(Dad, 2, 2)) - 1)) +end + +function UIMenuHeritageWindow:Draw() -- required + self.Background:Size(431 + self.ParentMenu.WidthOffset, 228) + self.Background:Draw() + self.DadSprite:Draw() + self.MumSprite:Draw() +end + +--[[ + UIMenuGridPanel.lua + Panels +--]] + +UIMenuGridPanel = setmetatable({}, UIMenuGridPanel) +UIMenuGridPanel.__index = UIMenuGridPanel +UIMenuGridPanel.__call = function() return "UIMenuPanel", "UIMenuGridPanel" end + +function UIMenuGridPanel.New(TopText, LeftText, RightText, BottomText) + _UIMenuGridPanel = { + Data = { + Enabled = true, + }, + Background = Sprite.New("commonmenu", "gradient_bgd", 0, 0, 431, 275), + Grid = Sprite.New("pause_menu_pages_char_mom_dad", "nose_grid", 0, 0, 200, 200, 0), + Circle = Sprite.New("mpinventory","in_world_circle", 0, 0, 20, 20, 0), + Audio = {Slider = "CONTINUOUS_SLIDER", Library = "HUD_FRONTEND_DEFAULT_SOUNDSET", Id = nil}, + ParentItem = nil, + Text = { + Top = UIResText.New(TopText or "Top", 0, 0, 0.35, 255, 255, 255, 255, 0, "Centre"), + Left = UIResText.New(LeftText or "Left", 0, 0, 0.35, 255, 255, 255, 255, 0, "Centre"), + Right = UIResText.New(RightText or "Right", 0, 0, 0.35, 255, 255, 255, 255, 0, "Centre"), + Bottom = UIResText.New(BottomText or "Bottom", 0, 0, 0.35, 255, 255, 255, 255, 0, "Centre"), + }, + } + return setmetatable(_UIMenuGridPanel, UIMenuGridPanel) +end + +function UIMenuGridPanel:SetParentItem(Item) -- required + if Item() == "UIMenuItem" then + self.ParentItem = Item + else + return self.ParentItem + end +end + +function UIMenuGridPanel:Enabled(Enabled) + if type(Enabled) == "boolean" then + self.Data.Enabled = Enabled + else + return self.Data.Enabled + end +end + +function UIMenuGridPanel:CirclePosition(X, Y) + if tonumber(X) and tonumber(Y) then + self.Circle.X = (self.Grid.X + 20) + ((self.Grid.Width - 40) * ((X >= 0.0 and X <= 1.0) and X or 0.0)) - (self.Circle.Width/2) + self.Circle.Y = (self.Grid.Y + 20) + ((self.Grid.Height - 40) * ((Y >= 0.0 and Y <= 1.0) and Y or 0.0)) - (self.Circle.Height/2) + else + return math.round((self.Circle.X - (self.Grid.X + 20) + (self.Circle.Width/2))/(self.Grid.Width - 40), 2), math.round((self.Circle.Y - (self.Grid.Y + 20) + (self.Circle.Height/2))/(self.Grid.Height - 40), 2) + end +end + +function UIMenuGridPanel:Position(Y) -- required + if tonumber(Y) then + local ParentOffsetX, ParentOffsetWidth = self.ParentItem:Offset().X, self.ParentItem:SetParentMenu().WidthOffset + + self.Background:Position(ParentOffsetX, Y) + self.Grid:Position(ParentOffsetX + 115.5 + (ParentOffsetWidth/2), 37.5 + Y) + self.Text.Top:Position(ParentOffsetX + 215.5 + (ParentOffsetWidth/2), 5 + Y) + self.Text.Left:Position(ParentOffsetX + 57.75 + (ParentOffsetWidth/2), 120 + Y) + self.Text.Right:Position(ParentOffsetX + 373.25 + (ParentOffsetWidth/2), 120 + Y) + self.Text.Bottom:Position(ParentOffsetX + 215.5 + (ParentOffsetWidth/2), 240 + Y) + + if not self.CircleLocked then + self.CircleLocked = true + self:CirclePosition(0.5, 0.5) + end + end +end + +function UIMenuGridPanel:UpdateParent(X, Y) + local _, ParentType = self.ParentItem() + if ParentType == "UIMenuListItem" then + local PanelItemIndex = self.ParentItem:FindPanelItem() + if PanelItemIndex then + self.ParentItem.Items[PanelItemIndex].Value[self.ParentItem:FindPanelIndex(self)] = {X = X, Y = Y} + self.ParentItem:Index(PanelItemIndex) + self.ParentItem.Base.ParentMenu.OnListChange(self.ParentItem.Base.ParentMenu, self.ParentItem, self.ParentItem._Index) + self.ParentItem.OnListChanged(self.ParentItem.Base.ParentMenu, self.ParentItem, self.ParentItem._Index) + else + local PanelIndex = self.ParentItem:FindPanelIndex(self) + for Index = 1, #self.ParentItem.Items do + if type(self.ParentItem.Items[Index]) == "table" then + if not self.ParentItem.Items[Index].Panels then self.ParentItem.Items[Index].Panels = {} end + self.ParentItem.Items[Index].Panels[PanelIndex] = {X = X, Y = Y} + else + self.ParentItem.Items[Index] = {Name = tostring(self.ParentItem.Items[Index]), Value = self.ParentItem.Items[Index], Panels = {[PanelIndex] = {X = X, Y = Y}}} + end + end + self.ParentItem.Base.ParentMenu.OnListChange(self.ParentItem.Base.ParentMenu, self.ParentItem, self.ParentItem._Index) + self.ParentItem.OnListChanged(self.ParentItem.Base.ParentMenu, self.ParentItem, self.ParentItem._Index) + end + elseif ParentType == "UIMenuItem" then + self.ParentItem.ActivatedPanel(self.ParentItem.ParentMenu, self.ParentItem, self, {X = X, Y = Y}) + end +end + +function UIMenuGridPanel:Functions() + local SafeZone = {X = 0, Y = 0} + if self.ParentItem:SetParentMenu().Settings.ScaleWithSafezone then + SafeZone = GetSafeZoneBounds() + end + + if IsMouseInBounds(self.Grid.X + 20 + SafeZone.X, self.Grid.Y + 20 + SafeZone.Y, self.Grid.Width - 40, self.Grid.Height - 40) then + if IsDisabledControlJustPressed(0, 24) then + if not self.Pressed then + self.Pressed = true + Citizen.CreateThread(function() + self.Audio.Id = GetSoundId() + PlaySoundFrontend(self.Audio.Id, self.Audio.Slider, self.Audio.Library, 1) + while IsDisabledControlPressed(0, 24) and IsMouseInBounds(self.Grid.X + 20 + SafeZone.X, self.Grid.Y + 20 + SafeZone.Y, self.Grid.Width - 40, self.Grid.Height - 40) do + Citizen.Wait(0) + local CursorX, CursorY = math.round(GetControlNormal(0, 239) * 1920) - SafeZone.X - (self.Circle.Width/2), math.round(GetControlNormal(0, 240) * 1080) - SafeZone.Y - (self.Circle.Height/2) + + self.Circle:Position(((CursorX > (self.Grid.X + 10 + self.Grid.Width - 40)) and (self.Grid.X + 10 + self.Grid.Width - 40) or ((CursorX < (self.Grid.X + 20 - (self.Circle.Width/2))) and (self.Grid.X + 20 - (self.Circle.Width/2)) or CursorX)), ((CursorY > (self.Grid.Y + 10 + self.Grid.Height - 40)) and (self.Grid.Y + 10 + self.Grid.Height - 40) or ((CursorY < (self.Grid.Y + 20 - (self.Circle.Height/2))) and (self.Grid.Y + 20 - (self.Circle.Height/2)) or CursorY))) + end + StopSound(self.Audio.Id) + ReleaseSoundId(self.Audio.Id) + self.Pressed = false + end) + Citizen.CreateThread(function() + while IsDisabledControlPressed(0, 24) and IsMouseInBounds(self.Grid.X + 20 + SafeZone.X, self.Grid.Y + 20 + SafeZone.Y, self.Grid.Width - 40, self.Grid.Height - 40) do + Citizen.Wait(75) + local ResultX, ResultY = math.round((self.Circle.X - (self.Grid.X + 20) + (self.Circle.Width/2))/(self.Grid.Width - 40), 2), math.round((self.Circle.Y - (self.Grid.Y + 20) + (self.Circle.Height/2))/(self.Grid.Height - 40), 2) + + self:UpdateParent(((ResultX >= 0.0 and ResultX <= 1.0) and ResultX or ((ResultX <= 0) and 0.0) or 1.0), ((ResultY >= 0.0 and ResultY <= 1.0) and ResultY or ((ResultY <= 0) and 0.0) or 1.0)) + end + end) + end + end + end +end + +function UIMenuGridPanel:Draw() -- required + if self.Data.Enabled then + self.Background:Size(431 + self.ParentItem:SetParentMenu().WidthOffset, 275) + + self.Background:Draw() + self.Grid:Draw() + self.Circle:Draw() + self.Text.Top:Draw() + self.Text.Left:Draw() + self.Text.Right:Draw() + self.Text.Bottom:Draw() + self:Functions() + end +end + +--[[ + UIMenuColourPanel.lua + Panels +--]] + +UIMenuColourPanel = setmetatable({}, UIMenuColourPanel) +UIMenuColourPanel.__index = UIMenuColourPanel +UIMenuColourPanel.__call = function() return "UIMenuPanel", "UIMenuColourPanel" end + +function UIMenuColourPanel.New(Title, Colours) + _UIMenuColourPanel = { + Data = { + Pagination = { + Min = 1, + Max = 8, + Total = 8, + }, + Index = 1000, + Items = Colours, + Title = Title or "Title", + Enabled = true, + Value = 1, + }, + Background = Sprite.New("commonmenu", "gradient_bgd", 0, 0, 431, 112), + Bar = {}, + LeftArrow = Sprite.New("commonmenu", "arrowleft", 0, 0, 30, 30), + RightArrow = Sprite.New("commonmenu", "arrowright", 0, 0, 30, 30), + SelectedRectangle = UIResRectangle.New(0, 0, 44.5, 8), + Text = UIResText.New(Title.." (1 of "..#Colours..")" or "Title".." (1 of "..#Colours..")", 0, 0, 0.35, 255, 255, 255, 255, 0, "Centre"), + ParentItem = nil, + } + + for Index = 1, #Colours do + if Index < 10 then + table.insert(_UIMenuColourPanel.Bar, UIResRectangle.New(0, 0, 44.5, 44.5, table.unpack(Colours[Index]))) + else + break + end + end + + if #_UIMenuColourPanel.Data.Items ~= 0 then + _UIMenuColourPanel.Data.Index = 1000 - (1000 % #_UIMenuColourPanel.Data.Items) + _UIMenuColourPanel.Data.Pagination.Max = _UIMenuColourPanel.Data.Pagination.Total + 1 + _UIMenuColourPanel.Data.Pagination.Min = 0 + end + return setmetatable(_UIMenuColourPanel, UIMenuColourPanel) +end + +function UIMenuColourPanel:SetParentItem(Item) -- required + if Item() == "UIMenuItem" then + self.ParentItem = Item + else + return self.ParentItem + end +end + +function UIMenuColourPanel:Enabled(Enabled) + if type(Enabled) == "boolean" then + self.Data.Enabled = Enabled + else + return self.Data.Enabled + end +end + +function UIMenuColourPanel:Position(Y) -- required + if tonumber(Y) then + local ParentOffsetX, ParentOffsetWidth = self.ParentItem:Offset().X, self.ParentItem:SetParentMenu().WidthOffset + + self.Background:Position(ParentOffsetX, Y) + for Index = 1, #self.Bar do + self.Bar[Index]:Position(15 + (44.5 * (Index - 1)) + ParentOffsetX + (ParentOffsetWidth/2), 55 + Y) + end + self.SelectedRectangle:Position(15 + (44.5 * ((self:CurrentSelection() - self.Data.Pagination.Min) - 1)) + ParentOffsetX + (ParentOffsetWidth/2), 47 + Y) + self.LeftArrow:Position(7.5 + ParentOffsetX + (ParentOffsetWidth/2), 15 + Y) + self.RightArrow:Position(393.5 + ParentOffsetX + (ParentOffsetWidth/2), 15 + Y) + self.Text:Position(215.5 + ParentOffsetX + (ParentOffsetWidth/2), 15 + Y) + end +end + +function UIMenuColourPanel:CurrentSelection(value, PreventUpdate) + if tonumber(value) then + if #self.Data.Items == 0 then + self.Data.Index = 0 + end + + self.Data.Index = 1000000 - (1000000 % #self.Data.Items) + tonumber(value) + + if self:CurrentSelection() > self.Data.Pagination.Max then + self.Data.Pagination.Min = self:CurrentSelection() - (self.Data.Pagination.Total + 1) + self.Data.Pagination.Max = self:CurrentSelection() + elseif self:CurrentSelection() < self.Data.Pagination.Min then + self.Data.Pagination.Min = self:CurrentSelection() - 1 + self.Data.Pagination.Max = self:CurrentSelection() + (self.Data.Pagination.Total + 1) + end + + self:UpdateSelection(PreventUpdate) + else + if #self.Data.Items == 0 then + return 1 + else + if self.Data.Index % #self.Data.Items == 0 then + return 1 + else + return self.Data.Index % #self.Data.Items + 1 + end + end + end +end + +function UIMenuColourPanel:UpdateParent(Colour) + local _, ParentType = self.ParentItem() + if ParentType == "UIMenuListItem" then + local PanelItemIndex = self.ParentItem:FindPanelItem() + local PanelIndex = self.ParentItem:FindPanelIndex(self) + if PanelItemIndex then + self.ParentItem.Items[PanelItemIndex].Value[PanelIndex] = Colour + self.ParentItem:Index(PanelItemIndex) + self.ParentItem.Base.ParentMenu.OnListChange(self.ParentItem.Base.ParentMenu, self.ParentItem, self.ParentItem._Index) + self.ParentItem.OnListChanged(self.ParentItem.Base.ParentMenu, self.ParentItem, self.ParentItem._Index) + else + for Index = 1, #self.ParentItem.Items do + if type(self.ParentItem.Items[Index]) == "table" then + if not self.ParentItem.Items[Index].Panels then self.ParentItem.Items[Index].Panels = {} end + self.ParentItem.Items[Index].Panels[PanelIndex] = Colour + else + self.ParentItem.Items[Index] = {Name = tostring(self.ParentItem.Items[Index]), Value = self.ParentItem.Items[Index], Panels = {[PanelIndex] = Colour}} + end + end + self.ParentItem.Base.ParentMenu.OnListChange(self.ParentItem.Base.ParentMenu, self.ParentItem, self.ParentItem._Index) + self.ParentItem.OnListChanged(self.ParentItem.Base.ParentMenu, self.ParentItem, self.ParentItem._Index) + end + elseif ParentType == "UIMenuItem" then + self.ParentItem.ActivatedPanel(self.ParentItem.ParentMenu, self.ParentItem, self, Colour) + end +end + +function UIMenuColourPanel:UpdateSelection(PreventUpdate) + local CurrentSelection = self:CurrentSelection() + if not PreventUpdate then + self:UpdateParent(CurrentSelection) + end + self.SelectedRectangle:Position(15 + (44.5 * ((CurrentSelection - self.Data.Pagination.Min) - 1)) + self.ParentItem:Offset().X, self.SelectedRectangle.Y) + for Index = 1, 9 do + self.Bar[Index]:Colour(table.unpack(self.Data.Items[self.Data.Pagination.Min + Index])) + end + self.Text:Text(self.Data.Title.." ("..CurrentSelection.." of "..#self.Data.Items..")") +end + +function UIMenuColourPanel:Functions() + + local SafeZone = {X = 0, Y = 0} + if self.ParentItem:SetParentMenu().Settings.ScaleWithSafezone then + SafeZone = GetSafeZoneBounds() + end + + + if IsMouseInBounds(self.LeftArrow.X + SafeZone.X, self.LeftArrow.Y + SafeZone.Y, self.LeftArrow.Width, self.LeftArrow.Height) then + if IsDisabledControlJustPressed(0, 24) then + if #self.Data.Items > self.Data.Pagination.Total + 1 then + if self:CurrentSelection() <= self.Data.Pagination.Min + 1 then + if self:CurrentSelection() == 1 then + self.Data.Pagination.Min = #self.Data.Items - (self.Data.Pagination.Total + 1) + self.Data.Pagination.Max = #self.Data.Items + self.Data.Index = 1000 - (1000 % #self.Data.Items) + self.Data.Index = self.Data.Index + (#self.Data.Items - 1) + self:UpdateSelection() + else + self.Data.Pagination.Min = self.Data.Pagination.Min - 1 + self.Data.Pagination.Max = self.Data.Pagination.Max - 1 + self.Data.Index = self.Data.Index - 1 + self:UpdateSelection() + end + else + self.Data.Index = self.Data.Index - 1 + self:UpdateSelection() + end + else + self.Data.Index = self.Data.Index - 1 + self:UpdateSelection() + end + end + end + + if IsMouseInBounds(self.RightArrow.X + SafeZone.X, self.RightArrow.Y + SafeZone.Y, self.RightArrow.Width, self.RightArrow.Height) then + if IsDisabledControlJustPressed(0, 24) then + if #self.Data.Items > self.Data.Pagination.Total + 1 then + if self:CurrentSelection() >= self.Data.Pagination.Max then + if self:CurrentSelection() == #self.Data.Items then + self.Data.Pagination.Min = 0 + self.Data.Pagination.Max = self.Data.Pagination.Total + 1 + self.Data.Index = 1000 - (1000 % #self.Data.Items) + self:UpdateSelection() + else + self.Data.Pagination.Max = self.Data.Pagination.Max + 1 + self.Data.Pagination.Min = self.Data.Pagination.Max - (self.Data.Pagination.Total + 1) + self.Data.Index = self.Data.Index + 1 + self:UpdateSelection() + end + else + self.Data.Index = self.Data.Index + 1 + self:UpdateSelection() + end + else + self.Data.Index = self.Data.Index + 1 + self:UpdateSelection() + end + end + end + + for Index = 1, #self.Bar do + if IsMouseInBounds(self.Bar[Index].X + SafeZone.X, self.Bar[Index].Y + SafeZone.Y, self.Bar[Index].Width, self.Bar[Index].Height) then + if IsDisabledControlJustPressed(0, 24) then + self:CurrentSelection(self.Data.Pagination.Min + Index - 1) + end + end + end +end + +function UIMenuColourPanel:Draw() -- required + if self.Data.Enabled then + self.Background:Size(431 + self.ParentItem:SetParentMenu().WidthOffset, 112) + + self.Background:Draw() + self.LeftArrow:Draw() + self.RightArrow:Draw() + self.Text:Draw() + self.SelectedRectangle:Draw() + for Index = 1, #self.Bar do + self.Bar[Index]:Draw() + end + self:Functions() + end +end + +--[[ + UIMenuPercentagePanel.lua + Panels +--]] + +UIMenuPercentagePanel = setmetatable({}, UIMenuPercentagePanel) +UIMenuPercentagePanel.__index = UIMenuPercentagePanel +UIMenuPercentagePanel.__call = function() return "UIMenuPanel", "UIMenuPercentagePanel" end + +function UIMenuPercentagePanel.New(MinText, MaxText) + _UIMenuPercentagePanel = { + Data = { + Enabled = true, + }, + Background = Sprite.New("commonmenu", "gradient_bgd", 0, 0, 431, 76), + ActiveBar = UIResRectangle.New(0, 0, 413, 10, 245, 245, 245, 255), + BackgroundBar = UIResRectangle.New(0, 0, 413, 10, 87, 87, 87, 255), + Text = { + Min = UIResText.New(MinText or "0%", 0, 0, 0.35, 255, 255, 255, 255, 0, "Centre"), + Max = UIResText.New("100%", 0, 0, 0.35, 255, 255, 255, 255, 0, "Centre"), + Title = UIResText.New(MaxText or "Opacity", 0, 0, 0.35, 255, 255, 255, 255, 0, "Centre"), + }, + Audio = {Slider = "CONTINUOUS_SLIDER", Library = "HUD_FRONTEND_DEFAULT_SOUNDSET", Id = nil}, + ParentItem = nil, + } + + return setmetatable(_UIMenuPercentagePanel, UIMenuPercentagePanel) +end + +function UIMenuPercentagePanel:SetParentItem(Item) -- required + if Item() == "UIMenuItem" then + self.ParentItem = Item + else + return self.ParentItem + end +end + +function UIMenuPercentagePanel:Enabled(Enabled) + if type(Enabled) == "boolean" then + self.Data.Enabled = Enabled + else + return self.Data.Enabled + end +end + +function UIMenuPercentagePanel:Position(Y) -- required + if tonumber(Y) then + local ParentOffsetX, ParentOffsetWidth = self.ParentItem:Offset().X, self.ParentItem:SetParentMenu().WidthOffset + self.Background:Position(ParentOffsetX, Y) + self.ActiveBar:Position(ParentOffsetX + (ParentOffsetWidth/2) + 9, 50 + Y) + self.BackgroundBar:Position(ParentOffsetX + (ParentOffsetWidth/2) + 9, 50 + Y) + self.Text.Min:Position(ParentOffsetX + (ParentOffsetWidth/2) + 25, 15 + Y) + self.Text.Max:Position(ParentOffsetX + (ParentOffsetWidth/2) + 398, 15 + Y) + self.Text.Title:Position(ParentOffsetX + (ParentOffsetWidth/2) + 215.5, 15 + Y) + end +end + +function UIMenuPercentagePanel:Percentage(Value) + if tonumber(Value) then + local Percent = ((Value < 0.0) and 0.0) or ((Value > 1.0) and 1.0 or Value) + self.ActiveBar:Size(self.BackgroundBar.Width * Percent, self.ActiveBar.Height) + else + local Progress = (math.round(GetControlNormal(0, 239) * 1920) - SafeZone.X) - self.ActiveBar.X + return math.round(((Progress >= 0 and Progress <= 413) and Progress or ((Progress < 0) and 0 or 413))/self.BackgroundBar.Width, 2) + end +end + +function UIMenuPercentagePanel:UpdateParent(Percentage) + local _, ParentType = self.ParentItem() + if ParentType == "UIMenuListItem" then + local PanelItemIndex = self.ParentItem:FindPanelItem() + if PanelItemIndex then + self.ParentItem.Items[PanelItemIndex].Value[self.ParentItem:FindPanelIndex(self)] = Percentage + self.ParentItem:Index(PanelItemIndex) + self.ParentItem.Base.ParentMenu.OnListChange(self.ParentItem.Base.ParentMenu, self.ParentItem, self.ParentItem._Index) + self.ParentItem.OnListChanged(self.ParentItem.Base.ParentMenu, self.ParentItem, self.ParentItem._Index) + else + local PanelIndex = self.ParentItem:FindPanelIndex(self) + for Index = 1, #self.ParentItem.Items do + if type(self.ParentItem.Items[Index]) == "table" then + if not self.ParentItem.Items[Index].Panels then self.ParentItem.Items[Index].Panels = {} end + self.ParentItem.Items[Index].Panels[PanelIndex] = Percentage + else + self.ParentItem.Items[Index] = {Name = tostring(self.ParentItem.Items[Index]), Value = self.ParentItem.Items[Index], Panels = {[PanelIndex] = Percentage}} + end + end + self.ParentItem.Base.ParentMenu.OnListChange(self.ParentItem.Base.ParentMenu, self.ParentItem, self.ParentItem._Index) + self.ParentItem.OnListChanged(self.ParentItem.Base.ParentMenu, self.ParentItem, self.ParentItem._Index) + end + elseif ParentType == "UIMenuItem" then + self.ParentItem.ActivatedPanel(self.ParentItem.ParentMenu, self.ParentItem, self, Percentage) + end +end + +function UIMenuPercentagePanel:Functions() + + local SafeZone = {X = 0, Y = 0} + if self.ParentItem:SetParentMenu().Settings.ScaleWithSafezone then + SafeZone = GetSafeZoneBounds() + end + + if IsMouseInBounds(self.BackgroundBar.X + SafeZone.X, self.BackgroundBar.Y - 4 + SafeZone.Y, self.BackgroundBar.Width, self.BackgroundBar.Height + 8) then + if IsDisabledControlJustPressed(0, 24) then + if not self.Pressed then + self.Pressed = true + Citizen.CreateThread(function() + self.Audio.Id = GetSoundId() + PlaySoundFrontend(self.Audio.Id, self.Audio.Slider, self.Audio.Library, 1) + while IsDisabledControlPressed(0, 24) and IsMouseInBounds(self.BackgroundBar.X + SafeZone.X, self.BackgroundBar.Y - 4 + SafeZone.Y, self.BackgroundBar.Width, self.BackgroundBar.Height + 8) do + Citizen.Wait(0) + local Progress = (math.round(GetControlNormal(0, 239) * 1920) - SafeZone.X) - self.ActiveBar.X + self.ActiveBar:Size(((Progress >= 0 and Progress <= 413) and Progress or ((Progress < 0) and 0 or 413)), self.ActiveBar.Height) + end + StopSound(self.Audio.Id) + ReleaseSoundId(self.Audio.Id) + self.Pressed = false + end) + Citizen.CreateThread(function() + while IsDisabledControlPressed(0, 24) and IsMouseInBounds(self.BackgroundBar.X + SafeZone.X, self.BackgroundBar.Y - 4 + SafeZone.Y, self.BackgroundBar.Width, self.BackgroundBar.Height + 8) do + Citizen.Wait(75) + local Progress = (math.round(GetControlNormal(0, 239) * 1920) - SafeZone.X) - self.ActiveBar.X + self:UpdateParent(math.round(((Progress >= 0 and Progress <= 413) and Progress or ((Progress < 0) and 0 or 413))/self.BackgroundBar.Width, 2)) + end + end) + end + end + end +end + +function UIMenuPercentagePanel:Draw() -- required + if self.Data.Enabled then + self.Background:Size(431 + self.ParentItem:SetParentMenu().WidthOffset, 76) + self.Background:Draw() + self.BackgroundBar:Draw() + self.ActiveBar:Draw() + self.Text.Min:Draw() + self.Text.Max:Draw() + self.Text.Title:Draw() + self:Functions() + end +end + +--[[ + UIMenu.lua + Menus +--]] + +function UIMenu.New(Title, Subtitle, RightAlign, TxtDictionary, TxtName) + local X, Y = 0, 0 + + if RightAlign then + local screenW, screenH = GetResolution() + X = tonumber(screenW - 480) + end + + if Title ~= nil then Title = tostring(Title) or "" else Title = "" end + if Subtitle ~= nil then Subtitle = string.upper(Subtitle) or "" else Subtitle = "" end + if TxtDictionary ~= nil then TxtDictionary = tostring(TxtDictionary) or "commonmenu" else TxtDictionary = "commonmenu" end + if TxtName ~= nil then TxtName = tostring(TxtName) or "interaction_bgd" else TxtName = "interaction_bgd" end + local _UIMenu = { + Logo = Sprite.New(TxtDictionary, TxtName, 0 + X, 0 + Y, 431, 107), + Banner = nil, + Title = UIResText.New(Title, 215 + X, 20 + Y, 1.15, 255, 255, 255, 255, 1, 1), + Subtitle = {ExtraY = 0}, + WidthOffset = 0, + Position = {X = X, Y = Y}, + Pagination = {Min = 0, Max = 9, Total = 9}, + PageCounter = {PreText = ""}, + Extra = {}, + Description = {}, + Items = {}, + Windows = {}, + Children = {}, + Controls = {}, + ParentMenu = nil, + ParentItem = nil, + _Visible = false, + ActiveItem = 1000, + Dirty = false; + ReDraw = true, + InstructionalScaleform = RequestScaleformMovie("INSTRUCTIONAL_BUTTONS"), + InstructionalButtons = {}, + OnIndexChange = function(menu, newindex) end, + OnListChange = function(menu, list, newindex) end, + OnSliderChange = function(menu, slider, newindex) end, + OnProgressChange = function(menu, progress, newindex) end, + OnCheckboxChange = function(menu, item, checked) end, + OnListSelect = function(menu, list, index) end, + OnSliderSelect = function(menu, slider, index) end, + OnProgressSelect = function(menu, progress, index) end, + OnItemSelect = function(menu, item, index) end, + OnMenuChanged = function(menu, newmenu, forward) end, + OnMenuClosed = function(menu) end, + Settings = { + InstructionalButtons = false, + MultilineFormats = true, + ScaleWithSafezone = true, + ResetCursorOnOpen = false, + MouseControlsEnabled = false, + MouseEdgeEnabled = false, + ControlDisablingEnabled = false, + Audio = { + Library = "HUD_FRONTEND_DEFAULT_SOUNDSET", + UpDown = "NAV_UP_DOWN", + LeftRight = "NAV_LEFT_RIGHT", + Select = "SELECT", + Back = "BACK", + Error = "ERROR", + }, + } + } + + if Subtitle ~= "" and Subtitle ~= nil then + _UIMenu.Subtitle.Rectangle = UIResRectangle.New(0 + _UIMenu.Position.X, 107 + _UIMenu.Position.Y, 431, 37, 0, 0, 0, 255) + _UIMenu.Subtitle.Text = UIResText.New(Subtitle, 8 + _UIMenu.Position.X, 110 + _UIMenu.Position.Y, 0.35, 45, 110, 185, 255, 0) + _UIMenu.Subtitle.BackupText = Subtitle + _UIMenu.Subtitle.Formatted = false + if string.starts(Subtitle, "~") then + _UIMenu.PageCounter.PreText = string.sub(Subtitle, 1, 3) + end + _UIMenu.PageCounter.Text = UIResText.New("", 425 + _UIMenu.Position.X, 110 + _UIMenu.Position.Y, 0.35, 245, 245, 245, 255, 0, "Right") + _UIMenu.Subtitle.ExtraY = 37 + end + + _UIMenu.ArrowSprite = Sprite.New("commonmenu", "shop_arrows_upanddown", 190 + _UIMenu.Position.X, 147 + 37 * (_UIMenu.Pagination.Total + 1) + _UIMenu.Position.Y - 37 + _UIMenu.Subtitle.ExtraY, 50, 50) + _UIMenu.Extra.Up = UIResRectangle.New(0 + _UIMenu.Position.X, 144 + 38 * (_UIMenu.Pagination.Total + 1) + _UIMenu.Position.Y - 37 + _UIMenu.Subtitle.ExtraY, 431, 18, 0, 0, 0, 200) + _UIMenu.Extra.Down = UIResRectangle.New(0 + _UIMenu.Position.X, 144 + 18 + 38 * (_UIMenu.Pagination.Total + 1) + _UIMenu.Position.Y - 37 + _UIMenu.Subtitle.ExtraY, 431, 18, 0, 0, 0, 200) + + _UIMenu.Description.Bar = UIResRectangle.New(_UIMenu.Position.X, 123, 431, 4, 0, 0, 0, 255) + _UIMenu.Description.Rectangle = Sprite.New("commonmenu", "gradient_bgd", _UIMenu.Position.X, 127, 431, 30) + _UIMenu.Description.Text = UIResText.New("Description", _UIMenu.Position.X + 5, 125, 0.35) + + _UIMenu.Background = Sprite.New("commonmenu", "gradient_bgd", _UIMenu.Position.X, 144 + _UIMenu.Position.Y - 37 + _UIMenu.Subtitle.ExtraY, 290, 25) + + Citizen.CreateThread(function() + if not HasScaleformMovieLoaded(_UIMenu.InstructionalScaleform) then + _UIMenu.InstructionalScaleform = RequestScaleformMovie("INSTRUCTIONAL_BUTTONS") + while not HasScaleformMovieLoaded(_UIMenu.InstructionalScaleform) do + Citizen.Wait(0) + end + end + end) + return setmetatable(_UIMenu, UIMenu) +end + +function UIMenu:SetMenuWidthOffset(Offset) + if tonumber(Offset) then + self.WidthOffset = math.floor(tonumber(Offset)) + self.Logo:Size(431 + self.WidthOffset, 107) + self.Title:Position(((self.WidthOffset + 431)/2) + self.Position.X, 20 + self.Position.Y) + if self.Subtitle.Rectangle ~= nil then + self.Subtitle.Rectangle:Size(431 + self.WidthOffset + 100, 37) + self.PageCounter.Text:Position(425 + self.Position.X + self.WidthOffset, 110 + self.Position.Y) + end + if self.Banner ~= nil then + self.Banner:Size(431 + self.WidthOffset, 107) + end + end +end + +function UIMenu:DisEnableControls(bool) + if bool then + EnableAllControlActions(2) + else + DisableAllControlActions(2) + end + + if bool then + return + else + if Controller() then + EnableControlAction(0, 2, true) + EnableControlAction(0, 1, true) + EnableControlAction(0, 25, true) + EnableControlAction(0, 24, true) + else + EnableControlAction(0, 201, true) + EnableControlAction(0, 195, true) + EnableControlAction(0, 196, true) + EnableControlAction(0, 187, true) + EnableControlAction(0, 188, true) + EnableControlAction(0, 189, true) + EnableControlAction(0, 190, true) + EnableControlAction(0, 202, true) + EnableControlAction(0, 217, true) + EnableControlAction(0, 242, true) + EnableControlAction(0, 241, true) + EnableControlAction(0, 239, true) + EnableControlAction(0, 240, true) + EnableControlAction(0, 31, true) + EnableControlAction(0, 30, true) + EnableControlAction(0, 21, true) + EnableControlAction(0, 22, true) + EnableControlAction(0, 23, true) + EnableControlAction(0, 75, true) + EnableControlAction(0, 71, true) + EnableControlAction(0, 72, true) + EnableControlAction(0, 59, true) + EnableControlAction(0, 89, true) + EnableControlAction(0, 9, true) + EnableControlAction(0, 8, true) + EnableControlAction(0, 90, true) + EnableControlAction(0, 76, true) + end + end +end + +function UIMenu:InstructionalButtons(bool) + if bool ~= nil then + self.Settings.InstrucitonalButtons = tobool(bool) + end +end + +function UIMenu:SetBannerSprite(Sprite, IncludeChildren) + if Sprite() == "Sprite" then + self.Logo = Sprite + self.Logo:Size(431 + self.WidthOffset, 107) + self.Logo:Position(self.Position.X, self.Position.Y) + self.Banner = nil + if IncludeChildren then + for Item, Menu in pairs(self.Children) do + Menu.Logo = Sprite + Menu.Logo:Size(431 + self.WidthOffset, 107) + Menu.Logo:Position(self.Position.X, self.Position.Y) + Menu.Banner = nil + end + end + end +end + +function UIMenu:SetBannerRectangle(Rectangle, IncludeChildren) + if Rectangle() == "Rectangle" then + self.Banner = Rectangle + self.Banner:Size(431 + self.WidthOffset, 107) + self.Banner:Position(self.Position.X, self.Position.Y) + self.Logo = nil + if IncludeChildren then + for Item, Menu in pairs(self.Children) do + Menu.Banner = Rectangle + Menu.Banner:Size(431 + self.WidthOffset, 107) + Menu:Position(self.Position.X, self.Position.Y) + Menu.Logo = nil + end + end + end +end + +function UIMenu:CurrentSelection(value) + if tonumber(value) then + if #self.Items == 0 then + self.ActiveItem = 0 + end + + self.Items[self:CurrentSelection()]:Selected(false) + self.ActiveItem = 1000000 - (1000000 % #self.Items) + tonumber(value) + + if self:CurrentSelection() > self.Pagination.Max then + self.Pagination.Min = self:CurrentSelection() - self.Pagination.Total + self.Pagination.Max = self:CurrentSelection() + elseif self:CurrentSelection() < self.Pagination.Min then + self.Pagination.Min = self:CurrentSelection() + self.Pagination.Max = self:CurrentSelection() + self.Pagination.Total + end + else + if #self.Items == 0 then + return 1 + else + if self.ActiveItem % #self.Items == 0 then + return 1 + else + return self.ActiveItem % #self.Items + 1 + end + end + end +end + +function UIMenu:CalculateWindowHeight() + local Height = 0 + for i = 1, #self.Windows do + Height = Height + self.Windows[i].Background:Size().Height + end + return Height +end + +function UIMenu:CalculateItemHeightOffset(Item) + if Item.Base then + return Item.Base.Rectangle.Height + else + return Item.Rectangle.Height + end +end + +function UIMenu:CalculateItemHeight() + local ItemOffset = 0 + self.Subtitle.ExtraY - 37 + for i = self.Pagination.Min + 1, self.Pagination.Max do + local Item = self.Items[i] + if Item ~= nil then + ItemOffset = ItemOffset + self:CalculateItemHeightOffset(Item) + end + end + return ItemOffset +end + +function UIMenu:RecalculateDescriptionPosition() + local WindowHeight = self:CalculateWindowHeight() + self.Description.Bar:Position(self.Position.X, 149 + self.Position.Y + WindowHeight) + self.Description.Rectangle:Position(self.Position.X, 149 + self.Position.Y + WindowHeight) + self.Description.Text:Position(self.Position.X + 8, 155 + self.Position.Y + WindowHeight) + + self.Description.Bar:Size(431 + self.WidthOffset, 4) + self.Description.Rectangle:Size(431 + self.WidthOffset, 30) + + self.Description.Bar:Position(self.Position.X, self:CalculateItemHeight() + ((#self.Items > (self.Pagination.Total + 1)) and 37 or 0) + self.Description.Bar:Position().Y) + self.Description.Rectangle:Position(self.Position.X, self:CalculateItemHeight() + ((#self.Items > (self.Pagination.Total + 1)) and 37 or 0) + self.Description.Rectangle:Position().Y) + self.Description.Text:Position(self.Position.X + 8, self:CalculateItemHeight() + ((#self.Items > (self.Pagination.Total + 1)) and 37 or 0) + self.Description.Text:Position().Y) +end + +function UIMenu:CaclulatePanelPosition(HasDescription) + local Height = self:CalculateWindowHeight() + 149 + self.Position.Y + + if HasDescription then + Height = Height + self.Description.Rectangle:Size().Height + 5 + end + + return self:CalculateItemHeight() + ((#self.Items > (self.Pagination.Total + 1)) and 37 or 0) + Height +end + +function UIMenu:AddWindow(Window) + if Window() == "UIMenuWindow" then + Window:SetParentMenu(self) + Window:Offset(self.Position.X, self.Position.Y) + table.insert(self.Windows, Window) + self.ReDraw = true + self:RecalculateDescriptionPosition() + end +end + +function UIMenu:RemoveWindowAt(Index) + if tonumber(Index) then + if self.Windows[Index] then + table.remove(self.Windows, Index) + self.ReDraw = true + self:RecalculateDescriptionPosition() + end + end +end + +function UIMenu:AddItem(Item) + if Item() == "UIMenuItem" then + local SelectedItem = self:CurrentSelection() + Item:SetParentMenu(self) + Item:Offset(self.Position.X, self.Position.Y) + Item:Position((#self.Items * 25) - 37 + self.Subtitle.ExtraY) + table.insert(self.Items, Item) + self:RecalculateDescriptionPosition() + self:CurrentSelection(SelectedItem) + end +end + +function UIMenu:RemoveItemAt(Index) + if tonumber(Index) then + if self.Items[Index] then + local SelectedItem = self:CurrentSelection() + if #self.Items > self.Pagination.Total and self.Pagination.Max == #self.Items - 1 then + self.Pagination.Min = self.Pagination.Min - 1 + self.Pagination.Max = self.Pagination.Max + 1 + end + table.remove(self.Items, tonumber(Index)) + self:RecalculateDescriptionPosition() + self:CurrentSelection(SelectedItem) + end + end +end + +function UIMenu:RefreshIndex() + if #self.Items == 0 then + self.ActiveItem = 1000 + self.Pagination.Max = self.Pagination.Total + 1 + self.Pagination.Min = 0 + return + end + self.Items[self:CurrentSelection()]:Selected(false) + self.ActiveItem = 1000 - (1000 % #self.Items) + self.Pagination.Max = self.Pagination.Total + 1 + self.Pagination.Min = 0 + self.ReDraw = true +end + +function UIMenu:Clear() + self.Items = {} + self.ReDraw = true + self:RecalculateDescriptionPosition() +end + +function UIMenu:MultilineFormat(str) + if tostring(str) then + + local PixelPerLine = 425 + self.WidthOffset + local AggregatePixels = 0 + local output = "" + local words = string.split(tostring(str), " ") + + for i = 1, #words do + local offset = MeasureStringWidth(words[i], 0, 0.35) + AggregatePixels = AggregatePixels + offset + if AggregatePixels > PixelPerLine then + output = output .. "\n" .. words[i] .. " " + AggregatePixels = offset + MeasureString(" ") + else + output = output .. words[i] .. " " + AggregatePixels = AggregatePixels + MeasureString(" ") + end + end + return output + end +end + +function UIMenu:DrawCalculations() + local WindowHeight = self:CalculateWindowHeight() + + if self.Settings.MultilineFormats then + if self.Subtitle.Rectangle and not self.Subtitle.Formatted then + self.Subtitle.Formatted = true + self.Subtitle.Text:Text(self:MultilineFormat(self.Subtitle.Text:Text())) + + local Linecount = #string.split(self.Subtitle.Text:Text(), "\n") + self.Subtitle.ExtraY = ((Linecount == 1) and 37 or ((Linecount + 1) * 22)) + self.Subtitle.Rectangle:Size(431 + self.WidthOffset, self.Subtitle.ExtraY) + end + elseif self.Subtitle.Formatted then + self.Subtitle.Formatted = false + self.Subtitle.ExtraY = 37 + self.Subtitle.Rectangle:Size(431 + self.WidthOffset, self.Subtitle.ExtraY) + self.Subtitle.Text:Text(self.Subtitle.BackupText) + end + + self.Background:Size(431 + self.WidthOffset, self:CalculateItemHeight() + WindowHeight + ((self.Subtitle.ExtraY > 0) and 0 or 37)) + + self.Extra.Up:Size(431 + self.WidthOffset, 18) + self.Extra.Down:Size(431 + self.WidthOffset, 18) + + self.Extra.Up:Position(self.Position.X, 144 + self:CalculateItemHeight() + self.Position.Y + WindowHeight) + self.Extra.Down:Position(self.Position.X, 144 + 18 + self:CalculateItemHeight() + self.Position.Y + WindowHeight) + + if self.WidthOffset > 0 then + self.ArrowSprite:Position(190 + self.Position.X + (self.WidthOffset / 2), 137 + self:CalculateItemHeight() + self.Position.Y + WindowHeight) + else + self.ArrowSprite:Position(190 + self.Position.X + self.WidthOffset, 137 + self:CalculateItemHeight() + self.Position.Y + WindowHeight) + end + + self.ReDraw = false + + if #self.Items ~= 0 and self.Items[self:CurrentSelection()]:Description() ~= "" then + self:RecalculateDescriptionPosition() + + local description = self.Items[self:CurrentSelection()]:Description() + if self.Settings.MultilineFormats then + self.Description.Text:Text(self:MultilineFormat(description)) + else + self.Description.Text:Text(description) + end + + local Linecount = #string.split(self.Description.Text:Text(), "\n") + self.Description.Rectangle:Size(431 + self.WidthOffset, ((Linecount == 1) and 37 or ((Linecount + 1) * 22))) + end +end + +function UIMenu:Visible(bool) + if bool ~= nil then + menuBuilder.process = bool + self._Visible = tobool(bool) + self.JustOpened = tobool(bool) + self.Dirty = tobool(bool) + self:UpdateScaleform() + if self.ParentMenu ~= nil or tobool(bool) == false then + return + end + if self.Settings.ResetCursorOnOpen then + local W, H = GetScreenResolution() + SetCursorLocation(W / 2, H / 2) + SetCursorSprite(1) + end + else + return self._Visible + end +end + +function UIMenu:ProcessControl() + if not self._Visible then + return + end + + if self.JustOpened then + self.JustOpened = false + return + end + + if IsDisabledControlJustReleased(0, 177) or IsDisabledControlJustReleased(1, 177) or IsDisabledControlJustReleased(2, 177) or IsDisabledControlJustReleased(0, 199) or IsDisabledControlJustReleased(1, 199) or IsDisabledControlJustReleased(2, 199) then + self:GoBack() + end + if #self.Items == 0 then + return + end + + if not self.UpPressed then + if IsDisabledControlJustPressed(0, 172) or IsDisabledControlJustPressed(1, 172) or IsDisabledControlJustPressed(2, 172) or IsDisabledControlJustPressed(0, 241) or IsDisabledControlJustPressed(1, 241) or IsDisabledControlJustPressed(2, 241) or IsDisabledControlJustPressed(2, 241) then + Citizen.CreateThread(function() + self.UpPressed = true + if #self.Items > self.Pagination.Total + 1 then + self:GoUpOverflow() + else + self:GoUp() + end + self:UpdateScaleform() + Citizen.Wait(175) + while IsDisabledControlPressed(0, 172) or IsDisabledControlPressed(1, 172) or IsDisabledControlPressed(2, 172) or IsDisabledControlPressed(0, 241) or IsDisabledControlPressed(1, 241) or IsDisabledControlPressed(2, 241) or IsDisabledControlPressed(2, 241) do + if #self.Items > self.Pagination.Total + 1 then + self:GoUpOverflow() + else + self:GoUp() + end + self:UpdateScaleform() + Citizen.Wait(125) + end + self.UpPressed = false + end) + end + end + + if not self.DownPressed then + if IsDisabledControlJustPressed(0, 173) or IsDisabledControlJustPressed(1, 173) or IsDisabledControlJustPressed(2, 173) or IsDisabledControlJustPressed(0, 242) or IsDisabledControlJustPressed(1, 242) or IsDisabledControlJustPressed(2, 242) then + Citizen.CreateThread(function() + self.DownPressed = true + if #self.Items > self.Pagination.Total + 1 then + self:GoDownOverflow() + else + self:GoDown() + end + self:UpdateScaleform() + Citizen.Wait(175) + while IsDisabledControlPressed(0, 173) or IsDisabledControlPressed(1, 173) or IsDisabledControlPressed(2, 173) or IsDisabledControlPressed(0, 242) or IsDisabledControlPressed(1, 242) or IsDisabledControlPressed(2, 242) do + if #self.Items > self.Pagination.Total + 1 then + self:GoDownOverflow() + else + self:GoDown() + end + self:UpdateScaleform() + Citizen.Wait(125) + end + self.DownPressed = false + end) + end + end + + if not self.LeftPressed then + if IsDisabledControlJustPressed(0, 174) or IsDisabledControlJustPressed(1, 174) or IsDisabledControlJustPressed(2, 174) then + Citizen.CreateThread(function() + self.LeftPressed = true + self:GoLeft() + Citizen.Wait(175) + while IsDisabledControlPressed(0, 174) or IsDisabledControlPressed(1, 174) or IsDisabledControlPressed(2, 174) do + self:GoLeft() + Citizen.Wait(125) + end + self.LeftPressed = false + end) + end + end + + if not self.RightPressed then + if IsDisabledControlJustPressed(0, 175) or IsDisabledControlJustPressed(1, 175) or IsDisabledControlJustPressed(2, 175) then + Citizen.CreateThread(function() + self.RightPressed = true + self:GoRight() + Citizen.Wait(175) + while IsDisabledControlPressed(0, 175) or IsDisabledControlPressed(1, 175) or IsDisabledControlPressed(2, 175) do + self:GoRight() + Citizen.Wait(125) + end + self.RightPressed = false + end) + end + end + + if IsDisabledControlJustPressed(0, 201) or IsDisabledControlJustPressed(1, 201) or IsDisabledControlJustPressed(2, 201) then + self:SelectItem() + end +end + +function UIMenu:GoUpOverflow() + if #self.Items <= self.Pagination.Total + 1 then + return + end + + if self:CurrentSelection() <= self.Pagination.Min + 1 then + if self:CurrentSelection() == 1 then + self.Pagination.Min = #self.Items - (self.Pagination.Total + 1) + self.Pagination.Max = #self.Items + self.Items[self:CurrentSelection()]:Selected(false) + self.ActiveItem = 1000 - (1000 % #self.Items) + self.ActiveItem = self.ActiveItem + (#self.Items - 1) + self.Items[self:CurrentSelection()]:Selected(true) + else + self.Pagination.Min = self.Pagination.Min - 1 + self.Pagination.Max = self.Pagination.Max - 1 + self.Items[self:CurrentSelection()]:Selected(false) + self.ActiveItem = self.ActiveItem - 1 + self.Items[self:CurrentSelection()]:Selected(true) + end + else + self.Items[self:CurrentSelection()]:Selected(false) + self.ActiveItem = self.ActiveItem - 1 + self.Items[self:CurrentSelection()]:Selected(true) + end + PlaySoundFrontend(-1, self.Settings.Audio.UpDown, self.Settings.Audio.Library, true) + self.OnIndexChange(self, self:CurrentSelection()) + self.ReDraw = true +end + +function UIMenu:GoUp() + if #self.Items > self.Pagination.Total + 1 then + return + end + self.Items[self:CurrentSelection()]:Selected(false) + self.ActiveItem = self.ActiveItem - 1 + self.Items[self:CurrentSelection()]:Selected(true) + PlaySoundFrontend(-1, self.Settings.Audio.UpDown, self.Settings.Audio.Library, true) + self.OnIndexChange(self, self:CurrentSelection()) + self.ReDraw = true +end + +function UIMenu:GoDownOverflow() + if #self.Items <= self.Pagination.Total + 1 then + return + end + + if self:CurrentSelection() >= self.Pagination.Max then + if self:CurrentSelection() == #self.Items then + self.Pagination.Min = 0 + self.Pagination.Max = self.Pagination.Total + 1 + self.Items[self:CurrentSelection()]:Selected(false) + self.ActiveItem = 1000 - (1000 % #self.Items) + self.Items[self:CurrentSelection()]:Selected(true) + else + self.Pagination.Max = self.Pagination.Max + 1 + self.Pagination.Min = self.Pagination.Max - (self.Pagination.Total + 1) + self.Items[self:CurrentSelection()]:Selected(false) + self.ActiveItem = self.ActiveItem + 1 + self.Items[self:CurrentSelection()]:Selected(true) + end + else + self.Items[self:CurrentSelection()]:Selected(false) + self.ActiveItem = self.ActiveItem + 1 + self.Items[self:CurrentSelection()]:Selected(true) + end + PlaySoundFrontend(-1, self.Settings.Audio.UpDown, self.Settings.Audio.Library, true) + self.OnIndexChange(self, self:CurrentSelection()) + self.ReDraw = true +end + +function UIMenu:GoDown() + if #self.Items > self.Pagination.Total + 1 then + return + end + + self.Items[self:CurrentSelection()]:Selected(false) + self.ActiveItem = self.ActiveItem + 1 + self.Items[self:CurrentSelection()]:Selected(true) + PlaySoundFrontend(-1, self.Settings.Audio.UpDown, self.Settings.Audio.Library, true) + self.OnIndexChange(self, self:CurrentSelection()) + self.ReDraw = true +end + +function UIMenu:GoLeft() + local type, subtype = self.Items[self:CurrentSelection()]() + if subtype ~= "UIMenuListItem" and subtype ~= "UIMenuSliderItem" and subtype ~= "UIMenuProgressItem" then + return + end + + if subtype == "UIMenuListItem" then + local Item = self.Items[self:CurrentSelection()] + Item:Index(Item._Index - 1) + self.OnListChange(self, Item, Item._Index) + Item.OnListChanged(self, Item, Item._Index) + PlaySoundFrontend(-1, self.Settings.Audio.LeftRight, self.Settings.Audio.Library, true) + elseif subtype == "UIMenuSliderItem" then + local Item = self.Items[self:CurrentSelection()] + Item:Index(Item._Index - 1) + self.OnSliderChange(self, Item, Item:Index()) + Item.OnSliderChanged(self, Item, Item._Index) + PlaySoundFrontend(-1, self.Settings.Audio.LeftRight, self.Settings.Audio.Library, true) + elseif subtype == "UIMenuProgressItem" then + local Item = self.Items[self:CurrentSelection()] + Item:Index(Item.Data.Index - 1) + self.OnProgressChange(self, Item, Item.Data.Index) + Item.OnProgressChanged(self, Item, Item.Data.Index) + PlaySoundFrontend(-1, self.Settings.Audio.LeftRight, self.Settings.Audio.Library, true) + end +end + +function UIMenu:GoRight() + local type, subtype = self.Items[self:CurrentSelection()]() + if subtype ~= "UIMenuListItem" and subtype ~= "UIMenuSliderItem" and subtype ~= "UIMenuProgressItem" then + return + end + + if subtype == "UIMenuListItem" then + local Item = self.Items[self:CurrentSelection()] + Item:Index(Item._Index + 1) + self.OnListChange(self, Item, Item._Index) + Item.OnListChanged(self, Item, Item._Index) + PlaySoundFrontend(-1, self.Settings.Audio.LeftRight, self.Settings.Audio.Library, true) + elseif subtype == "UIMenuSliderItem" then + local Item = self.Items[self:CurrentSelection()] + Item:Index(Item._Index + 1) + self.OnSliderChange(self, Item, Item:Index()) + Item.OnSliderChanged(self, Item, Item._Index) + PlaySoundFrontend(-1, self.Settings.Audio.LeftRight, self.Settings.Audio.Library, true) + elseif subtype == "UIMenuProgressItem" then + local Item = self.Items[self:CurrentSelection()] + Item:Index(Item.Data.Index + 1) + self.OnProgressChange(self, Item, Item.Data.Index) + Item.OnProgressChanged(self, Item, Item.Data.Index) + PlaySoundFrontend(-1, self.Settings.Audio.LeftRight, self.Settings.Audio.Library, true) + end +end + +function UIMenu:SelectItem() + if not self.Items[self:CurrentSelection()]:Enabled() then + PlaySoundFrontend(-1, self.Settings.Audio.Error, self.Settings.Audio.Library, true) + return + end + local Item = self.Items[self:CurrentSelection()] + local type, subtype = Item() + if subtype == "UIMenuCheckboxItem" then + Item.Checked = not Item.Checked + PlaySoundFrontend(-1, self.Settings.Audio.Select, self.Settings.Audio.Library, true) + self.OnCheckboxChange(self, Item, Item.Checked) + Item.CheckboxEvent(self, Item, Item.Checked) + elseif subtype == "UIMenuListItem" then + PlaySoundFrontend(-1, self.Settings.Audio.Select, self.Settings.Audio.Library, true) + self.OnListSelect(self, Item, Item._Index) + Item.OnListSelected(self, Item, Item._Index) + self.OnItemSelect(self, Item, self:CurrentSelection()) + elseif subtype == "UIMenuSliderItem" then + PlaySoundFrontend(-1, self.Settings.Audio.Select, self.Settings.Audio.Library, true) + self.OnSliderSelect(self, Item, Item._Index) + Item.OnSliderSelected(Item._Index) + elseif subtype == "UIMenuProgressItem" then + PlaySoundFrontend(-1, self.Settings.Audio.Select, self.Settings.Audio.Library, true) + self.OnProgressSelect(self, Item, Item.Data.Index) + Item.OnProgressSelected(Item.Data.Index) + else + PlaySoundFrontend(-1, self.Settings.Audio.Select, self.Settings.Audio.Library, true) + self.OnItemSelect(self, Item, self:CurrentSelection()) + Item.Activated(self, Item) + if not self.Children[Item] then + return + end + self:Visible(false) + self.Children[Item]:Visible(true) + self.OnMenuChanged(self, self.Children[self.Items[self:CurrentSelection()]], true) + end +end + +function UIMenu:GoBack() + PlaySoundFrontend(-1, self.Settings.Audio.Back, self.Settings.Audio.Library, true) + self:Visible(false) + if self.ParentMenu ~= nil then + self.ParentMenu:Visible(true) + self.OnMenuChanged(self, self.ParentMenu, false) + if self.Settings.ResetCursorOnOpen then + local W, H = GetActiveScreenResolution() + SetCursorLocation(W / 2, H / 2) + end + end + self.OnMenuClosed(self) +end + +function UIMenu:BindMenuToItem(Menu, Item) + if Menu() == "UIMenu" and Item() == "UIMenuItem" then + Menu.ParentMenu = self + Menu.ParentItem = Item + self.Children[Item] = Menu + end +end + +function UIMenu:ReleaseMenuFromItem(Item) + if Item() == "UIMenuItem" then + if not self.Children[Item] then + return false + end + self.Children[Item].ParentMenu = nil + self.Children[Item].ParentItem = nil + self.Children[Item] = nil + return true + end +end + +function UIMenu:Draw() + if not self._Visible then + return + end + + HideHudComponentThisFrame(19) + + if self.Settings.ControlDisablingEnabled then + self:DisEnableControls(false) + end + + if self.Settings.InstructionalButtons then + DrawScaleformMovieFullscreen(self.InstructionalScaleform, 255, 255, 255, 255, 0) + end + + if self.Settings.ScaleWithSafezone then + ScreenDrawPositionBegin(76, 84) + ScreenDrawPositionRatio(0, 0, 0, 0) + end + + if self.ReDraw then + self:DrawCalculations() + end + + if self.Logo then + self.Logo:Draw() + elseif self.Banner then + self.Banner:Draw() + end + + self.Title:Draw() + + if self.Subtitle.Rectangle then + self.Subtitle.Rectangle:Draw() + self.Subtitle.Text:Draw() + end + + if #self.Items ~= 0 or #self.Windows ~= 0 then + self.Background:Draw() + end + + if #self.Windows ~= 0 then + local WindowOffset = 0 + for index = 1, #self.Windows do + if self.Windows[index - 1] then + WindowOffset = WindowOffset + self.Windows[index - 1].Background:Size().Height + end + local Window = self.Windows[index] + Window:Position(WindowOffset + self.Subtitle.ExtraY - 37) + Window:Draw() + end + end + + if #self.Items == 0 then + if self.Settings.ScaleWithSafezone then + ScreenDrawPositionEnd() + end + return + end + + local CurrentSelection = self:CurrentSelection() + self.Items[CurrentSelection]:Selected(true) + + if self.Items[CurrentSelection]:Description() ~= "" then + self.Description.Bar:Draw() + self.Description.Rectangle:Draw() + self.Description.Text:Draw() + end + + if self.Items[CurrentSelection].Panels ~= nil then + if #self.Items[CurrentSelection].Panels ~= 0 then + local PanelOffset = self:CaclulatePanelPosition(self.Items[CurrentSelection]:Description() ~= "") + for index = 1, #self.Items[CurrentSelection].Panels do + if self.Items[CurrentSelection].Panels[index - 1] then + PanelOffset = PanelOffset + self.Items[CurrentSelection].Panels[index - 1].Background:Size().Height + 5 + end + self.Items[CurrentSelection].Panels[index]:Position(PanelOffset) + self.Items[CurrentSelection].Panels[index]:Draw() + end + end + end + + local WindowHeight = self:CalculateWindowHeight() + + if #self.Items <= self.Pagination.Total + 1 then + local ItemOffset = self.Subtitle.ExtraY - 37 + WindowHeight + for index = 1, #self.Items do + Item = self.Items[index] + Item:Position(ItemOffset) + Item:Draw() + ItemOffset = ItemOffset + self:CalculateItemHeightOffset(Item) + end + else + local ItemOffset = self.Subtitle.ExtraY - 37 + WindowHeight + for index = self.Pagination.Min + 1, self.Pagination.Max, 1 do + if self.Items[index] then + Item = self.Items[index] + Item:Position(ItemOffset) + Item:Draw() + ItemOffset = ItemOffset + self:CalculateItemHeightOffset(Item) + end + end + + self.Extra.Up:Draw() + self.Extra.Down:Draw() + self.ArrowSprite:Draw() + + if self.PageCounter.Text ~= nil then + local Caption = self.PageCounter.PreText .. CurrentSelection .. " / " .. #self.Items + self.PageCounter.Text:Text(Caption) + self.PageCounter.Text:Draw() + end + end + + if self.Settings.ScaleWithSafezone then + ScreenDrawPositionEnd() + end +end + +function UIMenu:ProcessMouse() + if not self._Visible or self.JustOpened or #self.Items == 0 or tobool(Controller()) or not self.Settings.MouseControlsEnabled then + EnableControlAction(0, 2, true) + EnableControlAction(0, 1, true) + EnableControlAction(0, 25, true) + EnableControlAction(0, 24, true) + if self.Dirty then + for _, Item in pairs(self.Items) do + if Item:Hovered() then + Item:Hovered(false) + end + end + end + return + end + + local SafeZone = {X = 0, Y = 0} + local WindowHeight = self:CalculateWindowHeight() + if self.Settings.ScaleWithSafezone then + SafeZone = GetSafeZoneBounds() + end + + local Limit = #self.Items + local ItemOffset = 0 + + ShowCursorThisFrame() + + if #self.Items > self.Pagination.Total + 1 then + Limit = self.Pagination.Max + end + + if IsMouseInBounds(0, 0, 30, 1080) and self.Settings.MouseEdgeEnabled then + SetGameplayCamRelativeHeading(GetGameplayCamRelativeHeading() + 5) + SetCursorSprite(6) + elseif IsMouseInBounds(1920 - 30, 0, 30, 1080) and self.Settings.MouseEdgeEnabled then + SetGameplayCamRelativeHeading(GetGameplayCamRelativeHeading() - 5) + SetCursorSprite(7) + elseif self.Settings.MouseEdgeEnabled then + SetCursorSprite(1) + end + + for i = self.Pagination.Min + 1, Limit, 1 do + local X, Y = self.Position.X + SafeZone.X, self.Position.Y + 144 - 37 + self.Subtitle.ExtraY + ItemOffset + SafeZone.Y + WindowHeight + local Item = self.Items[i] + local Type, SubType = Item() + local Width, Height = 431 + self.WidthOffset, self:CalculateItemHeightOffset(Item) + + if IsMouseInBounds(X, Y, Width, Height) then + Item:Hovered(true) + if not self.Controls.MousePressed then + if IsDisabledControlJustPressed(0, 24) then + Citizen.CreateThread(function() + local _X, _Y, _Width, _Height = X, Y, Width, Height + self.Controls.MousePressed = true + if Item:Selected() and Item:Enabled() then + if SubType == "UIMenuListItem" then + if IsMouseInBounds(Item.LeftArrow.X + SafeZone.X, Item.LeftArrow.Y + SafeZone.Y, Item.LeftArrow.Width, Item.LeftArrow.Height) then + self:GoLeft() + elseif not IsMouseInBounds(Item.RightArrow.X + SafeZone.X, Item.RightArrow.Y + SafeZone.Y, Item.RightArrow.Width, Item.RightArrow.Height) then + self:SelectItem() + end + if IsMouseInBounds(Item.RightArrow.X + SafeZone.X, Item.RightArrow.Y + SafeZone.Y, Item.RightArrow.Width, Item.RightArrow.Height) then + self:GoRight() + elseif not IsMouseInBounds(Item.LeftArrow.X + SafeZone.X, Item.LeftArrow.Y + SafeZone.Y, Item.LeftArrow.Width, Item.LeftArrow.Height) then + self:SelectItem() + end + elseif SubType == "UIMenuSliderItem" then + if IsMouseInBounds(Item.LeftArrow.X + SafeZone.X, Item.LeftArrow.Y + SafeZone.Y, Item.LeftArrow.Width, Item.LeftArrow.Height) then + self:GoLeft() + elseif not IsMouseInBounds(Item.RightArrow.X + SafeZone.X, Item.RightArrow.Y + SafeZone.Y, Item.RightArrow.Width, Item.RightArrow.Height) then + self:SelectItem() + end + if IsMouseInBounds(Item.RightArrow.X + SafeZone.X, Item.RightArrow.Y + SafeZone.Y, Item.RightArrow.Width, Item.RightArrow.Height) then + self:GoRight() + elseif not IsMouseInBounds(Item.LeftArrow.X + SafeZone.X, Item.LeftArrow.Y + SafeZone.Y, Item.LeftArrow.Width, Item.LeftArrow.Height) then + self:SelectItem() + end + elseif SubType == "UIMenuProgressItem" then + if IsMouseInBounds(Item.Bar.X + SafeZone.X, Item.Bar.Y + SafeZone.Y - 12, Item.Data.Max, Item.Bar.Height + 24) then + Item:CalculateProgress(math.round(GetControlNormal(0, 239) * 1920) - SafeZone.X) + PlaySoundFrontend(-1, self.Settings.Audio.LeftRight, self.Settings.Audio.Library, true) + else + self:SelectItem() + end + else + self:SelectItem() + end + elseif not Item:Selected() then + self:CurrentSelection(i-1) + PlaySoundFrontend(-1, self.Settings.Audio.Error, self.Settings.Audio.Library, true) + self.OnIndexChange(self, self:CurrentSelection()) + self.ReDraw = true + self:UpdateScaleform() + elseif not Item:Enabled() and Item:Selected() then + PlaySoundFrontend(-1, self.Settings.Audio.Error, self.Settings.Audio.Library, true) + end + Citizen.Wait(175) + while IsDisabledControlPressed(0, 24) and IsMouseInBounds(_X, _Y, _Width, _Height) do + if Item:Selected() and Item:Enabled() then + if SubType == "UIMenuListItem" then + if IsMouseInBounds(Item.LeftArrow.X + SafeZone.X, Item.LeftArrow.Y + SafeZone.Y, Item.LeftArrow.Width, Item.LeftArrow.Height) then + self:GoLeft() + end + if IsMouseInBounds(Item.RightArrow.X + SafeZone.X, Item.RightArrow.Y + SafeZone.Y, Item.RightArrow.Width, Item.RightArrow.Height) then + self:GoRight() + end + elseif SubType == "UIMenuSliderItem" then + if IsMouseInBounds(Item.LeftArrow.X + SafeZone.X, Item.LeftArrow.Y + SafeZone.Y, Item.LeftArrow.Width, Item.LeftArrow.Height) then + self:GoLeft() + end + if IsMouseInBounds(Item.RightArrow.X + SafeZone.X, Item.RightArrow.Y + SafeZone.Y, Item.RightArrow.Width, Item.RightArrow.Height) then + self:GoRight() + end + elseif SubType == "UIMenuProgressItem" then + if IsMouseInBounds(Item.Bar.X + SafeZone.X, Item.Bar.Y + SafeZone.Y - 12, Item.Data.Max, Item.Bar.Height + 24) then + Item:CalculateProgress(math.round(GetControlNormal(0, 239) * 1920) - SafeZone.X) + else + self:SelectItem() + end + end + elseif not Item:Selected() then + self:CurrentSelection(i-1) + PlaySoundFrontend(-1, self.Settings.Audio.Error, self.Settings.Audio.Library, true) + self.OnIndexChange(self, self:CurrentSelection()) + self.ReDraw = true + self:UpdateScaleform() + elseif not Item:Enabled() and Item:Selected() then + PlaySoundFrontend(-1, self.Settings.Audio.Error, self.Settings.Audio.Library, true) + end + Citizen.Wait(125) + end + self.Controls.MousePressed = false + end) + end + end + else + Item:Hovered(false) + end + ItemOffset = ItemOffset + self:CalculateItemHeightOffset(Item) + end + + local ExtraX, ExtraY = self.Position.X + SafeZone.X, 144 + self:CalculateItemHeight() + self.Position.Y + SafeZone.Y + WindowHeight + + if #self.Items <= self.Pagination.Total + 1 then return end + + if IsMouseInBounds(ExtraX, ExtraY, 431 + self.WidthOffset, 18) then + self.Extra.Up:Colour(30, 30, 30, 255) + if not self.Controls.MousePressed then + if IsDisabledControlJustPressed(0, 24) then + Citizen.CreateThread(function() + local _ExtraX, _ExtraY = ExtraX, ExtraY + self.Controls.MousePressed = true + if #self.Items > self.Pagination.Total + 1 then + self:GoUpOverflow() + else + self:GoUp() + end + Citizen.Wait(175) + while IsDisabledControlPressed(0, 24) and IsMouseInBounds(_ExtraX, _ExtraY, 431 + self.WidthOffset, 18) do + if #self.Items > self.Pagination.Total + 1 then + self:GoUpOverflow() + else + self:GoUp() + end + Citizen.Wait(125) + end + self.Controls.MousePressed = false + end) + end + end + else + self.Extra.Up:Colour(0, 0, 0, 200) + end + + if IsMouseInBounds(ExtraX, ExtraY + 18, 431 + self.WidthOffset, 18) then + self.Extra.Down:Colour(30, 30, 30, 255) + if not self.Controls.MousePressed then + if IsDisabledControlJustPressed(0, 24) then + Citizen.CreateThread(function() + local _ExtraX, _ExtraY = ExtraX, ExtraY + self.Controls.MousePressed = true + if #self.Items > self.Pagination.Total + 1 then + self:GoDownOverflow() + else + self:GoDown() + end + Citizen.Wait(175) + while IsDisabledControlPressed(0, 24) and IsMouseInBounds(_ExtraX, _ExtraY + 18, 431 + self.WidthOffset, 18) do + if #self.Items > self.Pagination.Total + 1 then + self:GoDownOverflow() + else + self:GoDown() + end + Citizen.Wait(125) + end + self.Controls.MousePressed = false + end) + end + end + else + self.Extra.Down:Colour(0, 0, 0, 200) + end +end + +function UIMenu:AddInstructionButton(button) + if type(button) == "table" and #button == 2 then + table.insert(self.InstructionalButtons, button) + end +end + +function UIMenu:RemoveInstructionButton(button) + if type(button) == "table" then + for i = 1, #self.InstructionalButtons do + if button == self.InstructionalButtons[i] then + table.remove(self.InstructionalButtons, i) + break + end + end + else + if tonumber(button) then + if self.InstructionalButtons[tonumber(button)] then + table.remove(self.InstructionalButtons, tonumber(button)) + end + end + end +end + +function UIMenu:UpdateScaleform() + if not self._Visible or not self.Settings.InstructionalButtons then + return + end + + PushScaleformMovieFunction(self.InstructionalScaleform, "CLEAR_ALL") + PopScaleformMovieFunction() + + PushScaleformMovieFunction(self.InstructionalScaleform, "TOGGLE_MOUSE_BUTTONS") + PushScaleformMovieFunctionParameterInt(0) + PopScaleformMovieFunction() + + PushScaleformMovieFunction(self.InstructionalScaleform, "CREATE_CONTAINER") + PopScaleformMovieFunction() + + PushScaleformMovieFunction(self.InstructionalScaleform, "SET_DATA_SLOT") + PushScaleformMovieFunctionParameterInt(0) + PushScaleformMovieFunctionParameterString(GetControlInstructionalButton(2, 176, 0)) + PushScaleformMovieFunctionParameterString("Select") + PopScaleformMovieFunction() + + PushScaleformMovieFunction(self.InstructionalScaleform, "SET_DATA_SLOT") + PushScaleformMovieFunctionParameterInt(1) + PushScaleformMovieFunctionParameterString(GetControlInstructionalButton(2, 177, 0)) + PushScaleformMovieFunctionParameterString("Back") + PopScaleformMovieFunction() + + local count = 2 + + for i = 1, #self.InstructionalButtons do + if self.InstructionalButtons[i] then + if #self.InstructionalButtons[i] == 2 then + PushScaleformMovieFunction(self.InstructionalScaleform, "SET_DATA_SLOT") + PushScaleformMovieFunctionParameterInt(count) + PushScaleformMovieFunctionParameterString(self.InstructionalButtons[i][1]) + PushScaleformMovieFunctionParameterString(self.InstructionalButtons[i][2]) + PopScaleformMovieFunction() + count = count + 1 + end + end + end + + PushScaleformMovieFunction(self.InstructionalScaleform, "DRAW_INSTRUCTIONAL_BUTTONS") + PushScaleformMovieFunctionParameterInt(-1) + PopScaleformMovieFunction() +end + +--[[ + MenuPool.lua + Menus +--]] + +function MenuPool.New() + local _MenuPool = { + Menus = {} + } + return setmetatable(_MenuPool, MenuPool) +end + +function MenuPool:AddSubMenu(Menu, Text, Description, RightAlign) + if Menu() == "UIMenu" then + local Item = UIMenuItem.New(tostring(Text), Description or "") + Menu:AddItem(Item) + local SubMenu = UIMenu.New(Menu.Title:Text(), Text, RightAlign) + self:Add(SubMenu) + Menu:BindMenuToItem(SubMenu, Item) + return SubMenu, Item + end +end + +function MenuPool:Add(Menu) + if Menu() == "UIMenu" then + table.insert(self.Menus, Menu) + end +end + +function MenuPool:MouseEdgeEnabled(bool) + if bool ~= nil then + for _, Menu in pairs(self.Menus) do + Menu.Settings.MouseEdgeEnabled = tobool(bool) + end + end +end + +function MenuPool:ControlDisablingEnabled(bool) + if bool ~= nil then + for _, Menu in pairs(self.Menus) do + Menu.Settings.ControlDisablingEnabled = tobool(bool) + end + end +end + +function MenuPool:ResetCursorOnOpen(bool) + if bool ~= nil then + for _, Menu in pairs(self.Menus) do + Menu.Settings.ResetCursorOnOpen = tobool(bool) + end + end +end + +function MenuPool:MultilineFormats(bool) + if bool ~= nil then + for _, Menu in pairs(self.Menus) do + Menu.Settings.MultilineFormats = tobool(bool) + end + end +end + +function MenuPool:Audio(Attribute, Setting) + if Attribute ~= nil and Setting ~= nil then + for _, Menu in pairs(self.Menus) do + if Menu.Settings.Audio[Attribute] then + Menu.Settings.Audio[Attribute] = Setting + end + end + end +end + +function MenuPool:WidthOffset(offset) + if tonumber(offset) then + for _, Menu in pairs(self.Menus) do + Menu:SetMenuWidthOffset(tonumber(offset)) + end + end +end + +function MenuPool:CounterPreText(str) + if str ~= nil then + for _, Menu in pairs(self.Menus) do + Menu.PageCounter.PreText = tostring(str) + end + end +end + +function MenuPool:DisableInstructionalButtons(bool) + if bool ~= nil then + for _, Menu in pairs(self.Menus) do + Menu.Settings.InstructionalButtons = tobool(bool) + end + end +end + +function MenuPool:MouseControlsEnabled(bool) + if bool ~= nil then + for _, Menu in pairs(self.Menus) do + Menu.Settings.MouseControlsEnabled = tobool(bool) + end + end +end + +function MenuPool:RefreshIndex() + for _, Menu in pairs(self.Menus) do + Menu:RefreshIndex() + end +end + +function MenuPool:ProcessMenus() + self:ProcessControl() + self:ProcessMouse() + self:Draw() +end + +function MenuPool:ProcessControl() + for _, Menu in pairs(self.Menus) do + if Menu:Visible() then + Menu:ProcessControl() + end + end +end + +function MenuPool:ProcessMouse() + for _, Menu in pairs(self.Menus) do + if Menu:Visible() then + Menu:ProcessMouse() + end + end +end + +function MenuPool:Draw() + for _, Menu in pairs(self.Menus) do + if Menu:Visible() then + Menu:Draw() + end + end +end + +function MenuPool:IsAnyMenuOpen() + local open = false + for _, Menu in pairs(self.Menus) do + if Menu:Visible() then + open = true + break + end + end + return open +end + +function MenuPool:CloseAllMenus() + for _, Menu in pairs(self.Menus) do + if Menu:Visible() then + Menu:Visible(false) + end + end +end + +function MenuPool:SetBannerSprite(Sprite) + if Sprite() == "Sprite" then + for _, Menu in pairs(self.Menus) do + Menu:SetBannerSprite(Sprite) + end + end +end + +function MenuPool:SetBannerRectangle(Rectangle) + if Rectangle() == "Rectangle" then + for _, Menu in pairs(self.Menus) do + Menu:SetBannerRectangle(Rectangle) + end + end +end + +function MenuPool:TotalItemsPerPage(Value) + if tonumber(Value) then + for _, Menu in pairs(self.Menus) do + Menu.Pagination.Total = Value - 1 + end + end +end +--[[ + Wrappers +--]] + +function NativeUI.CreatePool() + return MenuPool.New() +end + +function NativeUI.CreateMenu(Title, Subtitle, RightAlign, TxtDictionary, TxtName) + return UIMenu.New(Title, Subtitle, RightAlign, TxtDictionary, TxtName) +end + +function NativeUI.CreateItem(Text, Description) + return UIMenuItem.New(Text, Description) +end + +function NativeUI.CreateColouredItem(Text, Description, MainColour, HighlightColour) + return UIMenuColouredItem.New(Text, Description, MainColour, HighlightColour) +end + +function NativeUI.CreateCheckboxItem(Text, Check, Description) + return UIMenuCheckboxItem.New(Text, Check, Description) +end + +function NativeUI.CreateListItem(Text, Items, Index, Description) + return UIMenuListItem.New(Text, Items, Index, Description) +end + +function NativeUI.CreateSliderItem(Text, Items, Index, Description, Divider) + return UIMenuSliderItem.New(Text, Items, Index, Description, Divider) +end + +function NativeUI.CreateProgressItem(Text, Items, Index, Description, Counter) + return UIMenuProgressItem.New(Text, Items, Index, Description, Counter) +end + +function NativeUI.CreateHeritageWindow(Mum, Dad) + return UIMenuHeritageWindow.New(Mum, Dad) +end + +function NativeUI.CreateGridPanel(TopText, LeftText, RightText, BottomText) + return UIMenuGridPanel.New(TopText, LeftText, RightText, BottomText) +end + +function NativeUI.CreateColourPanel(Title, Colours) + return UIMenuColourPanel.New(Title, Colours) +end + +function NativeUI.CreatePercentagePanel(MinText, MaxText) + return UIMenuPercentagePanel.New(MinText, MaxText) +end + +function NativeUI.CreateSprite(TxtDictionary, TxtName, X, Y, Width, Height, Heading, R, G, B, A) + return Sprite.New(TxtDictionary, TxtName, X, Y, Width, Height, Heading, R, G, B, A) +end + +function NativeUI.CreateRectangle(X, Y, Width, Height, R, G, B, A) + return UIResRectangle.New(X, Y, Width, Height, R, G, B, A) +end + +function NativeUI.CreateText(Text, X, Y, Scale, R, G, B, A, Font, Alignment, DropShadow, Outline, WordWrap) + return UIResText.New(Text, X, Y, Scale, R, G, B, A, Font, Alignment, DropShadow, Outline, WordWrap) +end \ No newline at end of file diff --git a/resources/thinline_assets/client/cap.lua b/resources/thinline_assets/client/cap.lua new file mode 100644 index 000000000..b2a2e2792 --- /dev/null +++ b/resources/thinline_assets/client/cap.lua @@ -0,0 +1,25 @@ +-- ======= DO NOT EDIT THIS FILE ======= -- + +if TLS.BaseballHat.Enable then + RegisterCommand(TLS.BaseballHat.Command, function() + local playerPed = PlayerPedId() + local currentGender, currentHat, currentTexture = TLS.Functions.GetPlayerGender(playerPed), TLS.Functions.GetPlayerDrawable(playerPed, 0, true) + for k, v in ipairs(TLS.BaseballHat[currentGender]) do + if v.mainComponent == currentHat then + RequestAnimDict('missheist_agency2ahelmet') + while not HasAnimDictLoaded('missheist_agency2ahelmet') do + Wait(10) + end + TaskPlayAnim(playerPed, 'missheist_agency2ahelmet', 'take_off_helmet_stand', 3.0, 3.0, -1, 49, 0, 0, 0, 0) + Wait(500) + SetPedPropIndex(playerPed, 0, v.newComponent, currentTexture, 0) + Wait(100) + ClearPedTasks(playerPed) + RemoveAnimDict('missheist_agency2ahelmet') + break + end + end + end, false) + + RegisterKeyMapping(TLS.BaseballHat.Command, TLS.BaseballHat.Label, 'keyboard', TLS.BaseballHat.Keybind) +end diff --git a/resources/thinline_assets/client/eupui.lua b/resources/thinline_assets/client/eupui.lua new file mode 100644 index 000000000..671607034 --- /dev/null +++ b/resources/thinline_assets/client/eupui.lua @@ -0,0 +1,105 @@ +if not TLS.EUPUI.Enable then return end + +local departments, department, outfitnumber = {}, nil, 1 + +CreateThread(function() + for deptname, settings in pairs(TLS.EUPUI.Outfits) do + if settings.Enabled then + if not department then department = deptname end + departments[#departments + 1] = deptname + end + end +end) + +local function ChangeUniform() + local playerPed, Gender = PlayerPedId(), 'Male' + if GetEntityModel(playerPed) == `mp_f_freemode_01` then Gender = 'Female' end + SendNUIMessage({ + action = 'changename', + name = TLS.EUPUI.Outfits[department][outfitnumber].Name + }) + if TLS.EUPUI.Outfits[department][outfitnumber][Gender].Hat[1] == 0 then + ClearPedProp(playerPed, 0) + else + SetPedPropIndex(playerPed, 0, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Hat[1] - 1, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Hat[2] - 1, true) + end + if TLS.EUPUI.Outfits[department][outfitnumber][Gender].Glasses[1] == 0 then + ClearPedProp(playerPed, 1) + else + SetPedPropIndex(playerPed, 1, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Glasses[1] - 1, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Glasses[2] - 1, true) + end + if TLS.EUPUI.Outfits[department][outfitnumber][Gender].Ear[1] == 0 then + ClearPedProp(playerPed, 2) + else + SetPedPropIndex(playerPed, 2, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Ear[1] - 1, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Ear[2] - 1, true) + end + if TLS.EUPUI.Outfits[department][outfitnumber][Gender].Watch[1] == 0 then + ClearPedProp(playerPed, 6) + else + SetPedPropIndex(playerPed, 6, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Watch[1] - 1, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Watch[2] - 1, true) + end + SetPedComponentVariation(playerPed, 1, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Mask[1] - 1, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Mask[2] - 1, 0) + SetPedComponentVariation(playerPed, 3, TLS.EUPUI.Outfits[department][outfitnumber][Gender].UpperSkin[1] - 1, TLS.EUPUI.Outfits[department][outfitnumber][Gender].UpperSkin[2] - 1, 0) + SetPedComponentVariation(playerPed, 11, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Top[1] - 1, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Top[2] - 1, 0) + SetPedComponentVariation(playerPed, 10, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Decal[1] - 1, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Decal[2] - 1, 0) + SetPedComponentVariation(playerPed, 8, TLS.EUPUI.Outfits[department][outfitnumber][Gender].UnderCoat[1] - 1, TLS.EUPUI.Outfits[department][outfitnumber][Gender].UnderCoat[2] - 1, 0) + SetPedComponentVariation(playerPed, 4, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Pants[1] - 1, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Pants[2] - 1, 0) + SetPedComponentVariation(playerPed, 6, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Shoes[1] - 1, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Shoes[2] - 1, 0) + SetPedComponentVariation(playerPed, 7, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Accessories[1] - 1, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Accessories[2] - 1, 0) + SetPedComponentVariation(playerPed, 9, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Armor[1] - 1, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Armor[2] - 1, 0) + SetPedComponentVariation(playerPed, 5, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Parachute[1] - 1, TLS.EUPUI.Outfits[department][outfitnumber][Gender].Parachute[2] - 1, 0) +end + +local function NextUniform() + outfitnumber = outfitnumber + 1 + if outfitnumber > TLS.EUPUI.Outfits[department].Max then + outfitnumber = 1 + end + ChangeUniform() +end + +local function PrevUniform() + outfitnumber = outfitnumber - 1 + if outfitnumber <= 0 then + outfitnumber = TLS.EUPUI.Outfits[department].Max + end + ChangeUniform() +end + +RegisterCommand(TLS.EUPUI.Command, function(data) + SendNUIMessage({ + action = 'open', + departments = departments + }) + SetNuiFocus(true, true) + ChangeUniform() + TLS.Camera.Enable('eupui') +end) + +RegisterNUICallback('change', function(data) + department, outfitnumber = data.department, 1 + ChangeUniform() +end) + +RegisterNUICallback('close', function(data) + SetNuiFocus(false, false) + TLS.Camera.Disable() +end) + +RegisterNUICallback('next', function(data) + NextUniform() +end) + +RegisterNUICallback('prev', function(data) + PrevUniform() +end) + +RegisterNUICallback('RotatePedLeft', function(data) + local playerPed = PlayerPedId() + SetEntityHeading(playerPed, (GetEntityHeading(playerPed) - 2.5)) +end) + +RegisterNUICallback('RotatePedRight', function(data) + local playerPed = PlayerPedId() + SetEntityHeading(playerPed, (GetEntityHeading(playerPed) + 2.5)) +end) diff --git a/resources/thinline_assets/client/fleece.lua b/resources/thinline_assets/client/fleece.lua new file mode 100644 index 000000000..139e2e0c0 --- /dev/null +++ b/resources/thinline_assets/client/fleece.lua @@ -0,0 +1,25 @@ +-- ======= DO NOT EDIT THIS FILE ======= -- + +if TLS.Fleece.Enable then + RegisterCommand(TLS.Fleece.Command, function() + local playerPed = PlayerPedId() + local currentGender, currentFleece, currentTexture = TLS.Functions.GetPlayerGender(playerPed), TLS.Functions.GetPlayerDrawable(playerPed, 11, false) + for k, v in ipairs(TLS.Fleece[currentGender]) do + if v.mainComponent == currentFleece then + RequestAnimDict('clothingtie') + while not HasAnimDictLoaded('clothingtie') do + Wait(10) + end + TaskPlayAnim(playerPed, 'clothingtie', 'try_tie_positive_a', 3.0, 3.0, -1, 49, 0, 0, 0, 0) + Wait(2500) + SetPedComponentVariation(playerPed, 11, v.newComponent, currentTexture, 0) + Wait(2000) + ClearPedTasks(playerPed) + RemoveAnimDict('clothingtie') + break + end + end + end, false) + + RegisterKeyMapping(TLS.Fleece.Command, TLS.Fleece.Label, 'keyboard', TLS.Fleece.Keybind) +end diff --git a/resources/thinline_assets/client/functions.lua b/resources/thinline_assets/client/functions.lua new file mode 100644 index 000000000..77b6c7288 --- /dev/null +++ b/resources/thinline_assets/client/functions.lua @@ -0,0 +1,218 @@ +-- ======= DO NOT EDIT THIS FILE ======= -- +TLS.Functions = {} +TLS.Camera = { + entity = nil, + position = vector3(0.0, 0.0, 0.0), + active = false, + updateRot = false, + updateZoom = false, + radius = 1.25, + radiusMax = 2.25, + radiusMin = 1, + angleX = 30, + angleY = 0, + angleYMax = 80, + angleYMin = -30, + mouseX = 0, + mouseY = 0 +} + +function TLS.Functions.RequestModel(model) + if not HasModelLoaded(model) then + RequestModel(model) + while not HasModelLoaded(model) do + Wait(0) + end + end +end + +function TLS.Functions.RequestAnimDict(dict) + if not HasAnimDictLoaded(dict) then + RequestAnimDict(dict) + while not HasAnimDictLoaded(dict) do + Wait(0) + end + end +end + +function TLS.Functions.ShowHelpAlert(text) + AddTextEntry('helpAlert', text) + BeginTextCommandDisplayHelp('helpAlert') + EndTextCommandDisplayHelp(0, false, true, -1) +end + +function TLS.Functions.DeleteEntity(entity) + SetEntityAsMissionEntity(entity, true, true) + DeleteEntity(entity) +end + +function TLS.Functions.GetPlayerGender(playerPed) + if IsPedMale(playerPed) then + return 'Male' + else + return 'Female' + end +end + +function TLS.Functions.GetPlayerDrawable(playerPed, index, isProp) + if isProp then + return GetPedPropIndex(playerPed, index), GetPedPropTextureIndex(playerPed, index) + else + return GetPedDrawableVariation(playerPed, index), GetPedTextureVariation(playerPed, index) + end +end + +function TLS.Functions.GetPlayerClosestVehicle(playerPed) + local playerCoords = GetEntityCoords(playerPed) + local vehicles = GetGamePool('CVehicle') + local closestVehicle, closestDistance = -1, -1 + for k, v in ipairs(vehicles) do + local vehicleCoords = GetEntityCoords(v) + local distance = #(vehicleCoords - playerCoords) + if closestDistance == -1 or closestDistance > distance then + closestVehicle = v + closestDistance = distance + end + end + return closestVehicle +end + +function TLS.Functions.ShowNotification(text) + BeginTextCommandThefeedPost('STRING') + AddTextComponentSubstringPlayerName(text) + EndTextCommandThefeedPostTicker(true, true) +end + +function TLS.Functions.GetClosestPoliceVehicle(playerPed) + local closestPoliceVehicle, isNearTrunk = -1, false + local vehicle = TLS.Functions.GetPlayerClosestVehicle(playerPed) + if GetVehicleClass(vehicle) == 18 then + local playerCoords, trunkCoords = GetEntityCoords(playerPed), GetWorldPositionOfEntityBone(vehicle, GetEntityBoneIndexByName(vehicle, 'boot')) + closestPoliceVehicle = vehicle + if #(playerCoords - trunkCoords) < 3 then + isNearTrunk = true + end + end + return closestPoliceVehicle, isNearTrunk +end + +function TLS.Camera.Enable(view) + if not DoesCamExist(TLS.Camera.entity) then + TLS.Camera.entity = CreateCam('DEFAULT_SCRIPTED_CAMERA', true) + end + local playerPed = PlayerPedId() + FreezePedCameraRotation(playerPed, true) + FreezeEntityPosition(playerPed, true) + TLS.Camera.SetView(view) + SetCamActive(TLS.Camera.entity, true) + RenderScriptCams(true, true, 500, true, true) + TLS.Camera.active = true +end + +function TLS.Camera.Disable() + local playerPed = PlayerPedId() + SetCamActive(TLS.Camera.entity, false) + RenderScriptCams(false, true, 500, true, true) + FreezePedCameraRotation(playerPed, false) + FreezeEntityPosition(playerPed, false) + TLS.Camera.active = false +end + +function TLS.Camera.SetView(view) + local boneIndex = 11816 + local playerPed = PlayerPedId() + if view == 'helmet' then + boneIndex = 31086 + TLS.Camera.radiusMin = 0.8 + TLS.Camera.radiusMax = 1.0 + TLS.Camera.angleYMin = 60.0 + TLS.Camera.angleYMax = 70.0 + elseif view == 'eupui' then + boneIndex = 11816 + TLS.Camera.radiusMin = 1.0 + TLS.Camera.radiusMax = 2.0 + TLS.Camera.angleYMin = 0.0 + TLS.Camera.angleYMax = 35.0 + end + TLS.Camera.radius = TLS.Camera.radiusMin + TLS.Camera.angleY = TLS.Camera.angleYMin + TLS.Camera.angleX = GetEntityHeading(playerPed) + 90.0 + TLS.Camera.position = TLS.Camera.CalculatePosition(false) + SetCamCoord(TLS.Camera.entity, TLS.Camera.position.x, TLS.Camera.position.y, TLS.Camera.position.z) + targetPos = GetPedBoneCoords(playerPed, boneIndex, 0.0, 0.0, 0.0) + PointCamAtCoord(TLS.Camera.entity, targetPos.x, targetPos.y, targetPos.z) +end + +function TLS.Camera.CalculateMaxRadius() + if TLS.Camera.radius < TLS.Camera.radiusMin then + TLS.Camera.radius = TLS.Camera.radiusMin + elseif TLS.Camera.radius > TLS.Camera.radiusMax then + TLS.Camera.radius = TLS.Camera.radiusMax + end + local result = TLS.Camera.radius + local playerPed = PlayerPedId() + local playerCoords = GetEntityCoords(playerPed) + local behindX = playerCoords.x + ((Cos(TLS.Camera.angleX) * Cos(TLS.Camera.angleY)) + (Cos(TLS.Camera.angleY) * Cos(TLS.Camera.angleX))) / 2 * (TLS.Camera.radius + 0.5) + local behindY = playerCoords.x + ((Sin(TLS.Camera.angleX) * Cos(TLS.Camera.angleY)) + (Cos(TLS.Camera.angleY) * Sin(TLS.Camera.angleX))) / 2 * (TLS.Camera.radius + 0.5) + local behindZ = ((Sin(TLS.Camera.angleY))) * (TLS.Camera.radius + 0.5) + local testRay = StartShapeTestRay(playerCoords.x, playerCoords.y, playerCoords.z + 0.5, behindX, behindY, behindZ, -1, playerPed, 0) + local _, hit, hitCoords = GetShapeTestResult(testRay) + local hitDist = Vdist(playerCoords.x, playerCoords.y, playerCoords.z + 0.5, hitCoords) + if hit and hitDist < TLS.Camera.radius + 0.5 then + result = hitDist + end + return result +end + +function TLS.Camera.CalculatePosition(adjustedAngle) + if adjustedAngle then + TLS.Camera.angleX = TLS.Camera.angleX - TLS.Camera.mouseX * 0.1 + TLS.Camera.angleY = TLS.Camera.angleY + TLS.Camera.mouseY * 0.1 + end + if TLS.Camera.angleY > TLS.Camera.angleYMax then + TLS.Camera.angleY = TLS.Camera.angleYMax + elseif TLS.Camera.angleY < TLS.Camera.angleYMin then + TLS.Camera.angleY = TLS.Camera.angleYMin + end + local radiusMax = TLS.Camera.CalculateMaxRadius() + local offsetX = ((Cos(TLS.Camera.angleX) * Cos(TLS.Camera.angleY)) + (Cos(TLS.Camera.angleY) * Cos(TLS.Camera.angleX))) / 2 * radiusMax + local offsetY = ((Sin(TLS.Camera.angleX) * Cos(TLS.Camera.angleY)) + (Cos(TLS.Camera.angleY) * Sin(TLS.Camera.angleX))) / 2 * radiusMax + local offsetZ = ((Sin(TLS.Camera.angleY))) * radiusMax + local playerCoords = GetEntityCoords(PlayerPedId()) + return vector3(playerCoords.x + offsetX, playerCoords.y + offsetY, playerCoords.z + offsetZ) +end + +RegisterNUICallback('updateCamRotation', function(data) + TLS.Camera.mouseX = tonumber(data.x) + TLS.Camera.mouseY = tonumber(data.y) + TLS.Camera.updateRot = true +end) + +RegisterNUICallback('updateCamZoom', function(data) + TLS.Camera.radius = TLS.Camera.radius + (tonumber(data.zoom)) + TLS.Camera.updateZoom = true +end) + +CreateThread(function() + while true do + Wait(0) + local letSleep = true + if TLS.Camera.active then + letSleep = false + DisableFirstPersonCamThisFrame() + if TLS.Camera.updateRot then + SetCamCoord(TLS.Camera.entity, TLS.Camera.position.x, TLS.Camera.position.y, TLS.Camera.position.z) + TLS.Camera.position = TLS.Camera.CalculatePosition(true) + TLS.Camera.updateRot = false + end + if TLS.Camera.updateZoom then + local pos = TLS.Camera.CalculatePosition(false) + SetCamCoord(TLS.Camera.entity, pos.x, pos.y, pos.z) + TLS.Camera.updateZoom = false + end + end + if letSleep then + Wait(1000) + end + end +end) \ No newline at end of file diff --git a/resources/thinline_assets/client/glasses.lua b/resources/thinline_assets/client/glasses.lua new file mode 100644 index 000000000..c960a8713 --- /dev/null +++ b/resources/thinline_assets/client/glasses.lua @@ -0,0 +1,27 @@ +-- ======= DO NOT EDIT THIS FILE ======= -- + +if TLS.Glasses.Enable then + RegisterCommand(TLS.Glasses.Command, function() + local playerPed = PlayerPedId() + local currentGender, currentGlasses, currentTexture = TLS.Functions.GetPlayerGender(playerPed), TLS.Functions.GetPlayerDrawable(playerPed, 1, true) + for k, v in ipairs(TLS.Glasses[currentGender]) do + if v.mainComponent == currentGlasses then + if v.Enable then + RequestAnimDict('clothingspecs') + while not HasAnimDictLoaded('clothingspecs') do + Wait(10) + end + TaskPlayAnim(playerPed, 'clothingspecs', 'take_off', 3.0, 3.0, -1, 49, 0, 0, 0, 0) + Wait(500) + SetPedPropIndex(playerPed, 1, v.newComponent, currentTexture, 0) + Wait(500) + ClearPedTasks(playerPed) + RemoveAnimDict('clothingspecs') + break + end + end + end + end, false) + + RegisterKeyMapping(TLS.Glasses.Command, TLS.Glasses.Label, 'keyboard', TLS.Glasses.Keybind) +end diff --git a/resources/thinline_assets/client/helmet.lua b/resources/thinline_assets/client/helmet.lua new file mode 100644 index 000000000..0d7ccf318 --- /dev/null +++ b/resources/thinline_assets/client/helmet.lua @@ -0,0 +1,72 @@ +if TLS.Helmet.Enable then + CreateThread(function() + while true do + Wait(1000) + local playerPed = PlayerPedId() + local currentGender, currentHelmet, currentTexture = TLS.Functions.GetPlayerGender(playerPed), TLS.Functions.GetPlayerDrawable(playerPed, 1, false) + local hasHelmet = false + for k, v in ipairs(TLS.Helmet[currentGender].Helmets) do + if currentHelmet == v then + hasHelmet = true + break + end + end + SetPedSuffersCriticalHits(playerPed, not hasHelmet) + end + end) + + CreateThread(function() + while true do + Wait(1000) + local playerPed = PlayerPedId() + local currentGender, currentRespirator, currentTexture = TLS.Functions.GetPlayerGender(playerPed), TLS.Functions.GetPlayerDrawable(playerPed, 1, false) + local hasRespirator = false + for k, v in ipairs(TLS.Helmet[currentGender].Respirators) do + if currentRespirator == v then + hasRespirator = true + break + end + end + SetEntityProofs(playerPed, false, false, false, false, false, false, hasRespirator, hasRespirator, false) + end + end) + + RegisterCommand(TLS.Helmet.NVGCommand, function() + local playerPed = PlayerPedId() + local currentGender, currentNVG, currentTexture = TLS.Functions.GetPlayerGender(playerPed), TLS.Functions.GetPlayerDrawable(playerPed, 1, true) + local hasNVG = false + for k, v in ipairs(TLS.Helmet[currentGender].NVG) do + if currentNVG == v then + hasNVG = true + break + end + end + if hasNVG then + SetNightvision(not GetUsingnightvision()) + end + end) + + RegisterKeyMapping(TLS.Helmet.NVGCommand, TLS.Helmet.NVGLabel, 'keyboard', TLS.Helmet.NVGKeybind) + + RegisterCommand(TLS.Helmet.SwapCommand, function() + local playerPed = PlayerPedId() + local currentGender, currentAsset, currentTexture = TLS.Functions.GetPlayerGender(playerPed), TLS.Functions.GetPlayerDrawable(playerPed, 1, true) + for k, v in ipairs(TLS.Helmet[currentGender].Alternatives) do + if v.mainComponent == currentAsset then + RequestAnimDict('anim@mp_helmets@on_foot') + while not HasAnimDictLoaded('anim@mp_helmets@on_foot') do + Wait(10) + end + TaskPlayAnim(playerPed, 'anim@mp_helmets@on_foot', v.anim, 3.0, 3.0, -1, 49, 0, 0, 0, 0) + Wait(500) + SetPedPropIndex(playerPed, 1, v.newComponent, currentTexture, 0) + Wait(100) + ClearPedTasks(playerPed) + RemoveAnimDict('anim@mp_helmets@on_foot') + break + end + end + end) + + RegisterKeyMapping(TLS.Helmet.SwapCommand, TLS.Helmet.SwapLabel, 'keyboard', TLS.Helmet.SwapKeybind) +end \ No newline at end of file diff --git a/resources/thinline_assets/client/helmetui.lua b/resources/thinline_assets/client/helmetui.lua new file mode 100644 index 000000000..333c4137c --- /dev/null +++ b/resources/thinline_assets/client/helmetui.lua @@ -0,0 +1,48 @@ +if not TLS.HelmetUI.Enable then return end +local helmets = {} + +CreateThread(function() + for setupname, _ in pairs(TLS.EUPUI.Helmets) do + helmets[#helmets + 1] = setupname + end +end) + +local function ChangeHelmet(setup) + local playerPed, Gender = PlayerPedId(), 'Male' + if GetEntityModel(playerPed) == `mp_f_freemode_01` then Gender = 'Female' end + if TLS.EUPUI.Helmets[setup][Gender].Helmet[1] == 0 then + ClearPedProp(playerPed, 0) + else + SetPedPropIndex(playerPed, 0, TLS.EUPUI.Helmets[setup][Gender].Helmet[1] - 1, TLS.EUPUI.Helmets[setup][Gender].Helmet[2] - 1, true) + end + if TLS.EUPUI.Helmets[setup][Gender].Accessory1[1] == 0 then + ClearPedProp(playerPed, 1) + else + SetPedPropIndex(playerPed, 1, TLS.EUPUI.Helmets[setup][Gender].Accessory1[1] - 1, TLS.EUPUI.Helmets[setup][Gender].Accessory1[2] - 1, true) + end + if TLS.EUPUI.Helmets[setup][Gender].Accessory2[1] == 0 then + ClearPedProp(playerPed, 2) + else + SetPedPropIndex(playerPed, 2, TLS.EUPUI.Helmets[setup][Gender].Accessory2[1] - 1, TLS.EUPUI.Helmets[setup][Gender].Accessory2[2] - 1, true) + end + SetPedComponentVariation(playerPed, 1, TLS.EUPUI.Helmets[setup][Gender].Mask[1] - 1, TLS.EUPUI.Helmets[setup][Gender].Mask[2] - 1, 0) + SetPedComponentVariation(playerPed, 5, TLS.EUPUI.Helmets[setup][Gender].Patches[1] - 1, TLS.EUPUI.Helmets[setup][Gender].Patches[2] - 1, 0) +end + +RegisterCommand(TLS.HelmetUI.Command, function(data) + SendNUIMessage({ + action = 'helmetmenu', + helmets = helmets + }) + SetNuiFocus(true, true) + TLS.Camera.Enable('helmet') +end) + +RegisterNUICallback('changehelmet', function(data) + ChangeHelmet(data.setup) +end) + +RegisterNUICallback('closehelmet', function(data) + SetNuiFocus(false, false) + TLS.Camera.Disable() +end) \ No newline at end of file diff --git a/resources/thinline_assets/client/menubuilder.lua b/resources/thinline_assets/client/menubuilder.lua new file mode 100644 index 000000000..1cf9ecd34 --- /dev/null +++ b/resources/thinline_assets/client/menubuilder.lua @@ -0,0 +1,115 @@ +-- This was created by scully for personal use and thinline resources ONLY! -- +-- This does not have a license therefore you do not have permission to take it for your own use -- + +menuBuilder = { + process = false, + pool = NativeUI.CreatePool(), + menus = {} +} + +function menuBuilder.open(menuId) + if not menuBuilder.pool:IsAnyMenuOpen() then + for id, menu in pairs(menuBuilder.menus) do + if id == menuId then + menu.handle:Visible(true) + + break + end + end + end +end + +function menuBuilder.create(data) + local menu = menuBuilder.menus[data.id] + + if not menu then + if not data.parentMenu then + local handle = NativeUI.CreateMenu(data.label, data.description or '') + + menu = { + handle = handle + } + + menuBuilder.pool:Add(handle) + else + local handle, item = menuBuilder.pool:AddSubMenu(data.parentMenu, data.label, data.description or '') + + item:RightLabel('>>>') + + menu = { + handle = handle + } + end + end + + menu.handle:Clear() + menu.options = {} + + for i = 1, #data.options do + local option = data.options[i] + + if option.type == 'select' then + option.handle = NativeUI.CreateItem(option.label, option.description or '') + + menu.handle:AddItem(option.handle) + elseif option.type == 'list' then + option.handle = NativeUI.CreateListItem(option.label, option.list, option.index or 1, option.description or '') + + menu.handle:AddItem(option.handle) + elseif option.type == 'submenu' then + option.parentMenu = menu.handle + + menuBuilder.create(option) + end + + menu.options[i] = option + end + + local menuOptions = menu.options + + function menu.handle.OnListChange(sender, item, index) + for i = 1, #menuOptions do + local option = menuOptions[i] + + if item == option.handle then + option.handle:IndexToItem(index) + + if option.onChange then + option.onChange(index) + end + + break + end + end + end + + function menu.handle.OnItemSelect(sender, item, index) + for i = 1, #menuOptions do + local option = menuOptions[i] + + if item == option.handle then + option.onClick() + + break + end + end + end + + menuBuilder.pool:RefreshIndex() + + menuBuilder.menus[data.id] = menu +end + +CreateThread(function() + while true do + local sleep = 100 + + if menuBuilder.process then + sleep = 0 + + menuBuilder.pool:ProcessMenus() + end + + Wait(sleep) + end +end) \ No newline at end of file diff --git a/resources/thinline_assets/client/props.lua b/resources/thinline_assets/client/props.lua new file mode 100644 index 000000000..207930b52 --- /dev/null +++ b/resources/thinline_assets/client/props.lua @@ -0,0 +1,95 @@ +local HoldingProp = nil + +local function spawnProp(model, bone, coords, rotation, attach) + TLS.Functions.RequestModel(model) + + local ped = PlayerPedId() + local tempCoords = GetEntityCoords(ped) + local object = CreateObject(model, tempCoords.x, tempCoords.y, tempCoords.z, true, true, false) + + if attach then + SetEntityCollision(object, false, false) + AttachEntityToEntity(object, ped, GetPedBoneIndex(ped, bone), coords.x, coords.y, coords.z, rotation.x, rotation.y, rotation.z, true, true, false, true, 1, true) + + HoldingProp = object + else + PlaceObjectOnGroundProperly(object) + FreezeEntityPosition(object, true) + end + + SetModelAsNoLongerNeeded(model) + + return object +end + +if PropConfig.EnableDrop then + CreateThread(function() + while true do + local sleep = 500 + local ped = PlayerPedId() + + if IsPedOnFoot(ped) then + local coords = GetEntityCoords(ped) + + for model, data in pairs(PropConfig.Props) do + local object = GetClosestObjectOfType(coords.x, coords.y, coords.z, 1.5, model, false, false) + + if (object ~= 0) and not HoldingProp then + sleep = 0 + + TLS.Functions.ShowHelpAlert('~INPUT_PICKUP~ Pickup') + + if IsControlJustPressed(0, 38) then + local dict, anim = 'weapons@first_person@aim_rng@generic@projectile@sticky_bomb@', 'plant_floor' + + TLS.Functions.RequestAnimDict(dict) + + TaskPlayAnim(ped, dict, anim, 8.0, 1.0, 1000, 16, 0.0, false, false, false) + RemoveAnimDict(dict) + Wait(1000) + + TLS.Functions.DeleteEntity(object) + + spawnProp(model, data.bone, data.coords, data.rotation, true) + end + end + end + + if HoldingProp ~= nil then + sleep = 0 + local dict, anim = 'move_weapon@jerrycan@generic', 'idle' + + TLS.Functions.ShowHelpAlert('~INPUT_PICKUP~ Drop') + + if not IsEntityPlayingAnim(ped, dict, anim, 3) then + TLS.Functions.RequestAnimDict(dict) + + TaskPlayAnim(ped, dict, anim, 1.0, 1.0, -1, 49, 0.0, false, false, false) + RemoveAnimDict(dict) + end + + if IsControlJustPressed(0, 38) then + spawnProp(GetEntityModel(HoldingProp)) + + TLS.Functions.DeleteEntity(HoldingProp) + ClearPedTasks(ped) + + HoldingProp = nil + end + end + end + + Wait(sleep) + end + end) +end + +for model, data in pairs(PropConfig.Props) do + RegisterNetEvent(data.event, function() + spawnProp(model, data.bone, data.coords, data.rotation, true) + end) + + RegisterCommand(data.command, function() + spawnProp(model, data.bone, data.coords, data.rotation, true) + end, false) +end \ No newline at end of file diff --git a/resources/thinline_assets/client/vest.lua b/resources/thinline_assets/client/vest.lua new file mode 100644 index 000000000..d5e1c5b67 --- /dev/null +++ b/resources/thinline_assets/client/vest.lua @@ -0,0 +1,65 @@ +-- ======= DO NOT EDIT THIS FILE ======= -- + +if TLS.Vest.Enable then + local oldVest, oldTexture = 0, 0 + + RegisterNetEvent('thinline_assets:resetVest', function() + oldVest, oldTexture = 0, 0 + end) + + RegisterCommand(TLS.Vest.Command, function() + local playerPed = PlayerPedId() + local currentGender, currentVest, currentTexture = TLS.Functions.GetPlayerGender(playerPed), TLS.Functions.GetPlayerDrawable(playerPed, 9, false) + local vehicle, isNearTrunk = TLS.Functions.GetClosestPoliceVehicle(playerPed) + if TLS.Vest.EnableTrunk then + if not isNearTrunk then + TLS.Functions.ShowNotification(TLS.Language.NotNear) + return + end + end + if oldVest ~= 0 then + RequestAnimDict('clothingtie') + while not HasAnimDictLoaded('clothingtie') do + Wait(10) + end + TaskPlayAnim(playerPed, 'clothingtie', 'try_tie_negative_a', 3.0, 3.0, -1, 49, 0, 0, 0, 0) + if TLS.Vest.EnableTrunk then + SetVehicleDoorOpen(vehicle, 5, false, true) + end + Wait(1300) + SetPedComponentVariation(playerPed, 9, oldVest, oldTexture, 0) + oldVest, oldTexture = 0, 0 + Wait(100) + if TLS.Vest.EnableTrunk then + SetVehicleDoorShut(vehicle, 5, false) + end + ClearPedTasks(playerPed) + RemoveAnimDict('clothingtie') + return + end + for k, v in ipairs(TLS.Vest[currentGender]) do + if v == currentVest then + RequestAnimDict('clothingtie') + while not HasAnimDictLoaded('clothingtie') do + Wait(10) + end + TaskPlayAnim(playerPed, 'clothingtie', 'try_tie_negative_a', 3.0, 3.0, -1, 49, 0, 0, 0, 0) + if TLS.Vest.EnableTrunk then + SetVehicleDoorOpen(vehicle, 5, false, true) + end + Wait(1300) + SetPedComponentVariation(playerPed, 9, 0, 0, 0) + oldVest, oldTexture = currentVest, currentTexture + Wait(100) + if TLS.Vest.EnableTrunk then + SetVehicleDoorShut(vehicle, 5, false) + end + ClearPedTasks(playerPed) + RemoveAnimDict('clothingtie') + break + end + end + end, false) + + RegisterKeyMapping(TLS.Vest.Command, TLS.Vest.Label, 'keyboard', TLS.Vest.Keybind) +end \ No newline at end of file diff --git a/resources/thinline_assets/client/weaponmenu.lua b/resources/thinline_assets/client/weaponmenu.lua new file mode 100644 index 000000000..8ca04f67c --- /dev/null +++ b/resources/thinline_assets/client/weaponmenu.lua @@ -0,0 +1,243 @@ +if not TLS.WeaponMenu.Enable then return end + +local WeaponSave = json.decode(GetResourceKvpString('tls_weapon_save')) or {} + +local WeaponMenu = {} +local WeaponTints = { + ['Normal'] = { + 'Black', + 'Green', + 'Gold', + 'Pink', + 'Army', + 'LSPD', + 'Orange', + 'Platinum', + }, + ['MK2'] = { + 'Classic Black', + 'Classic Gray', + 'Classic Two Tone', + 'Classic White', + 'Classic Beige', + 'Classic Green', + 'Classic Blue', + 'Classic Earth', + 'Classic Brown & Black', + 'Red Contrast', + 'Blue Contrast', + 'Yellow Contrast', + 'Orange Contrast', + 'Bold Pink', + 'Bold Purple & Yellow', + 'Bold Orange', + 'Bold Green & Purple', + 'Bold Red Features', + 'Bold Green Features', + 'Bold Cyan Features', + 'Bold Yellow Features', + 'Bold Red & White', + 'Bold Blue & White', + 'Metallic Gold', + 'Metallic Platinum', + 'Metallic Gray & Lilac', + 'Metallic Purple & Lime', + 'Metallic Red', + 'Metallic Green', + 'Metallic Blue', + 'Metallic White & Aqua', + 'Metallic Red & Yellow' + } +} + +local function DisplayKeyboard(textEntry, inputText, maxLength, isNumber) + AddTextEntry('FMMC_KEY_TIP1', textEntry) + DisplayOnscreenKeyboard(1, 'FMMC_KEY_TIP1', '', inputText, '', '', '', maxLength) + + while UpdateOnscreenKeyboard() ~= 1 and UpdateOnscreenKeyboard() ~= 2 do + Wait(0) + end + + if UpdateOnscreenKeyboard() ~= 2 then + local result = GetOnscreenKeyboardResult() + + Wait(500) + + if isNumber then result = tonumber(result) end + + return result + else + Wait(500) + + return nil + end +end + +RegisterCommand(TLS.WeaponMenu.Command, function() + for hash, data in pairs(WeaponConfig) do + if IsWeaponValid(hash) then + local index = #WeaponMenu + 1 + local componentOptions = {} + + for component, name in pairs(data.components) do + componentOptions[#componentOptions + 1] = { + type = 'select', + label = name, + onClick = function() + local ped = PlayerPedId() + + if not HasPedGotWeaponComponent(ped, hash, component) then + GiveWeaponComponentToPed(ped, hash, component) + else + RemoveWeaponComponentFromPed(ped, hash, component) + end + end + } + end + + local weaponOptions = { + { + type = 'select', + label = 'Toggle Weapon', + onClick = function() + local ped = PlayerPedId() + local _, max_ammo = GetMaxAmmo(ped, hash) + + if not HasPedGotWeapon(ped, hash, false) then + GiveWeaponToPed(ped, hash, max_ammo, false, true) + else + RemoveWeaponFromPed(ped, hash) + end + end + }, + { + type = 'select', + label = 'Max Ammo', + onClick = function() + local ped = PlayerPedId() + + local ammo_type = GetPedAmmoTypeFromWeapon(ped, hash) + local _, max_ammo = GetMaxAmmoByType(ped, ammo_type) + + AddAmmoToPedByType(ped, ammo_type, max_ammo) + end + }, + { + type = 'list', + label = 'Tint', + list = data.IsMK2 and WeaponTints['MK2'] or WeaponTints['Normal'], + index = 1, + onChange = function(index) + local ped = PlayerPedId() + + SetPedWeaponTintIndex(ped, hash, index - 1) + end + }, + { + type = 'submenu', + id = 'components_' .. index, + label = 'Components', + options = componentOptions + }, + { + type = 'submenu', + id = 'saves_' .. index, + label = 'Saves', + options = { + { + type = 'select', + label = 'New Weapon Save', + onClick = function() + local ped = PlayerPedId() + local save_label = DisplayKeyboard('Save Name', '', 30) + + if not save_label then return end + + if not WeaponSave[hash] then WeaponSave[hash] = {} end + + if not HasPedGotWeapon(ped, hash, false) then return end + + local components = {} + + for component, name in pairs(data.components) do + if HasPedGotWeaponComponent(ped, hash, component) then + components[#components + 1] = component + end + end + + WeaponSave[hash][#WeaponSave[hash] + 1] = { + label = save_label, + tint = GetPedWeaponTintIndex(ped, hash), + components = components + } + + SetResourceKvp('tls_weapon_save', json.encode(WeaponSave)) + end + }, + } + } + } + + local savedWeapons = WeaponSave[hash] or WeaponSave[tostring(hash)] + + if WeaponSave and savedWeapons then + for i = 1, #savedWeapons do + local save = savedWeapons[i] + + if save then + weaponOptions[5].options[#weaponOptions[5].options + 1] = { + type = 'submenu', + id = 'weapon_sub_menu_save_' .. index .. i, + label = save.label, + options = { + { + type = 'select', + label = 'Equip Weapon', + onClick = function() + local ped = PlayerPedId() + local _, max_ammo = GetMaxAmmo(ped, hash) + + GiveWeaponToPed(ped, hash, max_ammo, false, true) + + for i = 1, #save.components do + GiveWeaponComponentToPed(ped, hash, save.components[i]) + end + + SetWeaponObjectTintIndex(hash, save.tint) + end + }, + { + type = 'select', + label = 'Delete Weapon', + onClick = function() + savedWeapons[i] = nil + + SetResourceKvp('tls_weapon_save', json.encode(WeaponSave)) + end + } + } + } + end + end + end + + WeaponMenu[#WeaponMenu + 1] = { + type = 'submenu', + id = 'weapon_menu_option_' .. index, + label = data.name, + options = weaponOptions + } + end + end + + menuBuilder.create({ + id = 'weapon_menu', + label = 'Thinline Sanctuary', + description = 'Weapon Menu', + options = WeaponMenu + }) + + menuBuilder.open('weapon_menu') +end) + +RegisterKeyMapping(TLS.WeaponMenu.Command, 'Weapon Menu', 'keyboard', TLS.WeaponMenu.Keybind) \ No newline at end of file diff --git a/resources/thinline_assets/config.lua b/resources/thinline_assets/config.lua new file mode 100644 index 000000000..8bd88e3ab --- /dev/null +++ b/resources/thinline_assets/config.lua @@ -0,0 +1,180 @@ +-- Created by Scully#5775 | https://discord.gg/eNtGFS6 +TLS = { + Language = { + NotNear = '~r~You are not near a police vehicle trunk!' + }, + WeaponMenu = { + Enable = true, + Command = 'weaponmenu', + Keybind = 'f3' + }, + EUPUI = { + Enable = true, -- Set to false if you don't want to use the EUP UI. + Command = 'eup' -- Change the command used to access the UI + }, + HelmetUI = { + Enable = false, -- Set to true if you have the helmets. (PAID) (https://thinlinesanctuary.com/products/ops-core-fast-helmet-accessories-pack) + Command = 'helmet' -- Change the command used to access the UI + }, + Helmet = { + Enable = false, -- Set to true if you have the helmets. (PAID) (https://thinlinesanctuary.com/products/ops-core-fast-helmet-accessories-pack) + NVGLabel = 'Toggle Night Vision', + NVGCommand = 'nvg', + NVGKeybind = 'y', -- Set to '' to disable the keybind, you can find available keys here: https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/ + SwapLabel = 'Swap to Alternative', + SwapCommand = 'altswap', + SwapKeybind = '', -- Set to a key to enable the keybind, you can find available keys here: https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/ + Male = { + Helmets = {59, 62, 89, 91, 92, 93}, + NVG = {2}, + Respirators = {50}, + Alternatives = { + { + mainComponent = 1, + newComponent = 2, + anim = 'visor_down' + }, + { + mainComponent = 2, + newComponent = 1, + anim = 'visor_up' + }, + { + mainComponent = 3, + newComponent = 5, + anim = 'visor_down' + }, + { + mainComponent = 5, + newComponent = 3, + anim = 'visor_up' + }, + { + mainComponent = 7, + newComponent = 8, + anim = 'visor_down' + }, + { + mainComponent = 8, + newComponent = 7, + anim = 'visor_up' + } + } + }, + Female = { + NVG = {2}, + Respirators = {50} + } + }, + Vest = { + Enable = false, -- Set to true if you have the vests. (PAID) (https://thinlinesanctuary.com/products/crye-avs-plate-carrier) and (https://thinlinesanctuary.com/products/avs-swat-add-on) + EnableTrunk = true, -- Set to false if you don't want a police trunk to be a requirement to toggle your vest. + Label = 'Toggle Vest', + Command = 'vest', + Keybind = 'k', -- Set to '' to disable the keybind, you can find available keys here: https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/ + Male = {17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27}, + Female = {19, 20, 21, 22, 23, 24, 25} + }, + Fleece = { + Enable = false, -- Set to true if you have the fleece. (PAID) (https://thinlinesanctuary.com/products/fleece-jacket) + Label = 'Toggle Hood', + Command = 'hood', + Keybind = 'g', -- Set to '' to disable the keybind, you can find available keys here: https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/ + Male = { + { + mainComponent = 209, + newComponent = 210 + }, + { + mainComponent = 210, + newComponent = 209 + } + }, + Female = { + { + mainComponent = 213, + newComponent = 214 + }, + { + mainComponent = 214, + newComponent = 213 + } + } + }, + BaseballHat = { + Enable = false, -- Set to true if you have the baseball hat. (FREE) (https://thinlinesanctuary.com/pages/tactical-baseball-hat) + Label = 'Flip Hat', + Command = 'hat', + Keybind = 'u', -- Set to '' to disable the keybind, you can find available keys here: https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/ + Male = { + { + mainComponent = 3, + newComponent = 4 + }, + { + mainComponent = 4, + newComponent = 3 + } + }, + Female = { + { + mainComponent = 3, + newComponent = 4 + }, + { + mainComponent = 4, + newComponent = 3 + } + } + }, + Glasses = { + Enable = false, -- Set to true if you have any of our glasses. + Label = 'Toggle Glasses', + Command = 'glasses', + Keybind = 'm', -- Set to '' to disable the keybind, you can find available keys here: https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/ + Male = { + { + Enable = true, -- Set to false if you don't have our oakley m frame glasses. (PAID) (https://thinlinesanctuary.com/products/oakley-m-frame-glasses) + mainComponent = 11, + newComponent = 9 + }, + { + Enable = true, -- Set to false if you don't have our oakley m frame glasses. (PAID) (https://thinlinesanctuary.com/products/oakley-m-frame-glasses) + mainComponent = 9, + newComponent = 11 + }, + { + Enable = true, -- Set to false if you don't have our oakley flak 2.0 xl glasses. (PAID) (https://thinlinesanctuary.com/products/oakley-flak-2-0-xl-glasses) + mainComponent = 15, + newComponent = 13 + }, + { + Enable = true, -- Set to false if you don't have our oakley flak 2.0 xl glasses. (PAID) (https://thinlinesanctuary.com/products/oakley-flak-2-0-xl-glasses) + mainComponent = 13, + newComponent = 15 + } + }, + Female = { + { + Enable = true, -- Set to false if you don't have our oakley m frame glasses. (PAID) (https://thinlinesanctuary.com/products/oakley-m-frame-glasses) + mainComponent = 11, + newComponent = 9 + }, + { + Enable = true, -- Set to false if you don't have our oakley m frame glasses. (PAID) (https://thinlinesanctuary.com/products/oakley-m-frame-glasses) + mainComponent = 9, + newComponent = 11 + }, + { + Enable = true, -- Set to false if you don't have our oakley flak 2.0 xl glasses. (PAID) (https://thinlinesanctuary.com/products/oakley-flak-2-0-xl-glasses) + mainComponent = 15, + newComponent = 13 + }, + { + Enable = true, -- Set to false if you don't have our oakley flak 2.0 xl glasses. (PAID) (https://thinlinesanctuary.com/products/oakley-flak-2-0-xl-glasses) + mainComponent = 13, + newComponent = 15 + } + } + } +} \ No newline at end of file diff --git a/resources/thinline_assets/fxmanifest.lua b/resources/thinline_assets/fxmanifest.lua new file mode 100644 index 000000000..2a0537b71 --- /dev/null +++ b/resources/thinline_assets/fxmanifest.lua @@ -0,0 +1,29 @@ +fx_version 'cerulean' + +game 'gta5' + +author 'Scully ' +description 'Scripts for thinline EUP' +version '2.0' + +shared_scripts { + 'config.lua', + 'ui_config.lua', + 'weapon_config.lua', + 'prop_config.lua' +} + +client_scripts { + 'weapon_names.lua', + 'client/*.lua' +} + +ui_page 'html/index.html' + +files { + 'html/*.html', + 'html/*.ttf', + 'html/*.css', + 'html/*.js', + 'html/*.png' +} \ No newline at end of file diff --git a/resources/thinline_assets/html/eurostile_extended_black.ttf b/resources/thinline_assets/html/eurostile_extended_black.ttf new file mode 100644 index 000000000..b1b9c8375 Binary files /dev/null and b/resources/thinline_assets/html/eurostile_extended_black.ttf differ diff --git a/resources/thinline_assets/html/index.html b/resources/thinline_assets/html/index.html new file mode 100644 index 000000000..65a9bd0e0 --- /dev/null +++ b/resources/thinline_assets/html/index.html @@ -0,0 +1,33 @@ + + + + + + + + +
+
+
+
+
+ +
+ EUP Uniform Name +
+
+
+
+ + +
+
+ +
+
+
+
+
+ + + \ No newline at end of file diff --git a/resources/thinline_assets/html/logo.png b/resources/thinline_assets/html/logo.png new file mode 100644 index 000000000..2a1db93c9 Binary files /dev/null and b/resources/thinline_assets/html/logo.png differ diff --git a/resources/thinline_assets/html/main.js b/resources/thinline_assets/html/main.js new file mode 100644 index 000000000..ffd9ca27d --- /dev/null +++ b/resources/thinline_assets/html/main.js @@ -0,0 +1,144 @@ +var moving = false +var lastOffsetX = 0 +var lastOffsetY = 0 +var lastScreenX = 0.5 * screen.width +var lastScreenY = 0.5 * screen.height + +$(document).on('keydown', function(event) { + switch (event.key) { + case 'ArrowLeft': + $.post('https://thinline_assets/RotatePedLeft', '[]'); + break; + case 'ArrowRight': + $.post('https://thinline_assets/RotatePedRight', '[]'); + break; + } +}); + +window.addEventListener('message', function (event) { + if (event.data.action == 'open') { + var departmentButtons = ''; + var departments = Object.keys(event.data.departments); + for (let key of departments.sort()) { + let item = event.data.departments[key]; + departmentButtons += createDepartment(item); + } + $('.departments').html(departmentButtons); + $('.eupui').css('display', 'block'); + } else if (event.data.action == 'changename') { + $('#name').text(event.data.name); + } else if (event.data.action == 'helmetmenu') { + var helmetButtons = ''; + var helmets = Object.keys(event.data.helmets); + for (let key of helmets.sort()) { + let item = event.data.helmets[key]; + helmetButtons += createHelmet(item); + } + helmetButtons += createHelmetExit() + $('.helmets').html(helmetButtons); + $('.helmets').css('display', 'block'); + } +}); + +$('#buttonChoose').click(function(event) { + event.preventDefault(); + $('.eupui').css('display', 'none'); + $.post('https://thinline_assets/close', '[]'); +}); + +$('#buttonNext').click(function(event) { + event.preventDefault(); + $.post('https://thinline_assets/next', '[]'); +}); + +$('#buttonPrev').click(function(event) { + event.preventDefault(); + $.post('https://thinline_assets/prev', '[]'); +}); + +$('body').on('mousedown', function(event) { + if (event.button == 0) { + moving = true; + } +}); + +$('body').on('mouseup', function(event) { + if (moving && event.button == 0) { + moving = false; + } +}); + +$('body').on('mousemove', function(event) { + if (moving) { + let offsetX = event.screenX - lastScreenX; + let offsetY = event.screenY - lastScreenY; + if ((lastOffsetX > 0 && offsetX < 0) || (lastOffsetX < 0 && offsetX > 0)) { + offsetX = 0 + } + if ((lastOffsetY > 0 && offsetY < 0) || (lastOffsetY < 0 && offsetY > 0)) { + offsetY = 0 + } + lastScreenX = event.screenX; + lastScreenY = event.screenY; + lastOffsetX = offsetX; + lastOffsetY = offsetY; + $.post('https://thinline_assets/updateCamRotation', JSON.stringify({ + x: offsetX, + y: offsetY, + })); + } +}); + +$('body').on('wheel', function(event) { + let zoom = event.originalEvent.deltaY / 2000; + $.post('https://thinline_assets/updateCamZoom', JSON.stringify({ + zoom: zoom, + })); +}); + +function changedept(department) { + $.post('https://thinline_assets/change', JSON.stringify({ + department: department + })); +}; + +function changehelmet(setup) { + $.post('https://thinline_assets/changehelmet', JSON.stringify({ + setup: setup + })); +}; + +function exithelmet() { + $('.helmets').css('display', 'none'); + $.post('https://thinline_assets/closehelmet', '[]'); +}; + +function createDepartment(department) { + return ` +
+
+
${department}
+
+
+ `; +}; + +function createHelmet(setup) { + return ` +
+
+
${setup}
+
+
+ `; +}; + +function createHelmetExit() { + return ` +
+
+
Exit Menu
+
+
+ `; +}; \ No newline at end of file diff --git a/resources/thinline_assets/html/style.css b/resources/thinline_assets/html/style.css new file mode 100644 index 000000000..58bbce880 --- /dev/null +++ b/resources/thinline_assets/html/style.css @@ -0,0 +1,125 @@ +@font-face{ + font-family: "eurostile_extended_black"; + src: url("eurostile_extended_black.ttf") format("truetype"); +} + +* { + font-family: "eurostile_extended_black"; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +html { + height: 100%; +} + +body { + min-height: 90%; +} + +.eupui { + display: none; +} + +.department-container { + width: fit-content; + height: 10%; + border: 2px solid #006EFF; + background-color: #232426; + color: white; + margin: auto; + margin-top: 5px; + overflow: hidden; + padding: 14px 16px; + display: flex; + flex-direction: column; + cursor: pointer; +} + +.department { + flex-direction: column; + overflow: hidden; + font-size: 20px; +} + +.buttons { + margin: auto; + text-align: center; + margin-top: 37%; +} + +.img { + height: 6%; + width: 6%; +} + +.name { + margin: auto; + text-align: center; +} + +.departments { + position: absolute; + top: 0.5%; + left: 0.5%; + overflow-x: none; + overflow-y: auto; +} + +#name { + display: inline-block; + color: #fff; + text-align: center; + padding: 14px 16px; + font-size: 20px; + text-decoration: none; + border: none; + border: 2px solid #006EFF; + background-color: #232426; + border-top-left-radius: 15px; + border-top-right-radius: 15px; +} + +.buttons button { + display: inline-block; + color: #fff; + text-align: center; + padding: 14px 16px; + font-size: 20px; + text-decoration: none; + border: none; + border: 2px solid #006EFF; + background-color: #232426; +} + +button:hover { + color: #006EFF; +} + +button:active { + opacity: 0.5; + transition: 0s; + text-decoration: none; + border: none; + outline:none; + border: 2px solid #006EFF; +} + +button:focus { + border: none; + outline:none; + border: 2px solid #006EFF; +} + +.helmets { + display: none; + position: absolute; + top: 0.5%; + right: 0.5%; + overflow-x: none; + overflow-y: auto; +} diff --git a/resources/thinline_assets/prop_config.lua b/resources/thinline_assets/prop_config.lua new file mode 100644 index 000000000..71e573a38 --- /dev/null +++ b/resources/thinline_assets/prop_config.lua @@ -0,0 +1,27 @@ +PropConfig = { + EnableCommands = true, + EnableDrop = true, + Props = { + [`prop_attache_case_01`] = { + command = 'phi', + event = 'tls:spawn:phi', + bone = 57005, + coords = vector3(0.38188708530743, -0.022178086538109, 0.0055766191721897), + rotation = vector3(-4.9990342160345, -83.422798326057, 44.891199312844) + }, + [`prop_idol_case_01`] = { + command = 'ktb', + event = 'tls:spawn:ktb', + bone = 57005, + coords = vector3(0.37574481388879, -0.070050927648939, 0.10961047357067), + rotation = vector3(-13.32259847011, -69.067439143555, 64.36308167975) + }, + [`prop_ld_suitcase_02`] = { + command = 'meb', + event = 'tls:spawn:meb', + bone = 57005, + coords = vector3(0.43096723451936, -0.2049473366912, 0.034882984096), + rotation = vector3(-32.41682453402, -60.525727343961, 41.661170755722) + } + } +} \ No newline at end of file diff --git a/resources/thinline_assets/stream/hud.gfx b/resources/thinline_assets/stream/hud.gfx new file mode 100644 index 000000000..9966dc129 Binary files /dev/null and b/resources/thinline_assets/stream/hud.gfx differ diff --git a/resources/thinline_assets/stream/hud.ytd b/resources/thinline_assets/stream/hud.ytd new file mode 100644 index 000000000..237ae3fa5 --- /dev/null +++ b/resources/thinline_assets/stream/hud.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f82ec29c0db5690c8c75ff1bbfeb6fea061da9de87be13e070950c7b4b641be +size 1202200 diff --git a/resources/thinline_assets/ui_config.lua b/resources/thinline_assets/ui_config.lua new file mode 100644 index 000000000..60c5bcbdd --- /dev/null +++ b/resources/thinline_assets/ui_config.lua @@ -0,0 +1,5261 @@ +TLS.EUPUI.Helmets = { + -- You can add more helmet setups here, I've added an example to show you how. **We will not provide support for this config**. + ["NVG Goggle Setup"] = { + Male = { + -- First number is the clothing item, second number is the texture. + Helmet = {94, 1}, -- Helmet within the Hat, Helmet category. + Accessory1 = {3, 1}, -- NVG, Visors, goggles within the glasses category. + Accessory2 = {4, 1}, -- Headsets within the Earrings, Ear piece category. + Mask = {54, 3}, -- Balaclava, Respirator within the Mask, Beard category. + Patches = {0, 0} -- Patches within the Parachutes, Bags, Badges category. + }, + Female = { + Helmet = {94, 1}, + Accessory1 = {3, 1}, + Accessory2 = {4, 1}, + Mask = {54, 3}, + Patches = {0, 0} + } + } +} + +TLS.EUPUI.Outfits = { + -- You can add more departments here, I've added an example to show you how. **We will not provide support for this config**. + ["Department Example"] = { + Enable = false, -- Change the boolean to enable / disable this department. + Max = 1, -- How many uniforms do you have in this department? + [1] = { + -- For the second outfit change to 2, third outfit to 3 etc... + Name = "Outfit Example", + Male = { + -- First number is the clothing item, second number is the texture. + Hat = {0, 0}, -- Hat, Helmet. + Glasses = {0, 0}, -- Glasses. + Ear = {0, 0}, -- Earrings, Ear piece. + Watch = {0, 0}, -- Watch. + Mask = {0, 0}, -- Mask, Beard. + Top = {0, 0}, -- Overshirt. + UpperSkin = {0, 0}, -- Arms, Gloves. + Decal = {0, 0}, -- Patches. + UnderCoat = {0, 0}, -- Undershirt, Duty belt. + Pants = {0, 0}, -- Pants. + Shoes = {0, 0}, -- Shoes. + Accessories = {0, 0}, -- Duty belt, Chains, Scarfs. + Armor = {0, 0}, -- Armour, Bodycams. + Parachute = {0, 0} -- Parachutes, Bags, Badges. + }, + Female = { + Hat = {0, 0}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + } + }, + ["SAMS"] = { + Enabled = true, -- Change the boolean to enable / disable this department. + Max = 26, -- How many uniforms do you have in this department? + [1] = { + Name = "Class A - EMT", + Male = { + Hat = {10, 1}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {76, 1}, + UpperSkin = {13, 1}, + Decal = {20, 1}, + UnderCoat = {89, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {31, 3}, + Armor = {34, 1}, + Parachute = {1, 1} + }, + Female = { + Hat = {10, 1}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {27, 1}, + UpperSkin = {4, 1}, + Decal = {19, 1}, + UnderCoat = {94, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {15, 2}, + Armor = {38, 1}, + Parachute = {1, 1} + } + }, + [2] = { + Name = "Class A - Paramedic", + Male = { + Hat = {10, 1}, + Glasses = {14, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {76, 3}, + UpperSkin = {13, 1}, + Decal = {20, 2}, + UnderCoat = {92, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {31, 2}, + Armor = {34, 1}, + Parachute = {1, 1} + }, + Female = { + Hat = {0, 0}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {27, 3}, + UpperSkin = {4, 1}, + Decal = {19, 2}, + UnderCoat = {97, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {15, 3}, + Armor = {38, 1}, + Parachute = {1, 1} + } + }, + [3] = { + Name = "Class A - Supervisor", + Male = { + Hat = {0, 0}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {76, 5}, + UpperSkin = {13, 1}, + Decal = {20, 3}, + UnderCoat = {91, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {1, 1}, + Armor = {35, 1}, + Parachute = {1, 1} + }, + Female = { + Hat = {0, 0}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {27, 5}, + UpperSkin = {4, 1}, + Decal = {19, 3}, + UnderCoat = {96, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {1, 1}, + Armor = {34, 1}, + Parachute = {1, 1} + } + }, + [4] = { + Name = "Class A - AED", + Male = { + Hat = {10, 1}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {76, 2}, + UpperSkin = {13, 1}, + Decal = {20, 1}, + UnderCoat = {90, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {31, 1}, + Armor = {32, 1}, + Parachute = {65, 1} + }, + Female = { + Hat = {10, 2}, + Glasses = {14, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {27, 2}, + UpperSkin = {4, 1}, + Decal = {19, 1}, + UnderCoat = {95, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {15, 1}, + Armor = {36, 1}, + Parachute = {65, 1} + } + }, + [5] = { + Name = "Class A - Trauma Bag", + Male = { + Hat = {10, 2}, + Glasses = {14, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {76, 3}, + UpperSkin = {13, 1}, + Decal = {20, 2}, + UnderCoat = {91, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {31, 1}, + Armor = {32, 1}, + Parachute = {67, 1} + }, + Female = { + Hat = {0, 0}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {27, 3}, + UpperSkin = {4, 1}, + Decal = {19, 2}, + UnderCoat = {96, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {15, 1}, + Armor = {36, 1}, + Parachute = {67, 1} + } + }, + [6] = { + Name = 'Class A - Meret Backpack', + Male = { + Hat = {10, 1}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {76, 4}, + UpperSkin = {13, 1}, + Decal = {21, 2}, + UnderCoat = {92, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {31, 4}, + Armor = {34, 1}, + Parachute = {51, 1}, + }, + Female = { + Hat = {0, 0}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {27, 4}, + UpperSkin = {4, 1}, + Decal = {20, 2}, + UnderCoat = {97, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {15, 4}, + Armor = {38, 1}, + Parachute = {51, 1}, + }, + }, + [7] = { + Name = 'Class A - SL Overt Carrier', + Male = { + Hat = {10, 1}, + Glasses = {14, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {76, 4}, + UpperSkin = {13, 1}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {1, 1}, + Armor = {7, 1}, + Parachute = {1, 1}, + }, + Female = { + Hat = {0, 0}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {27, 4}, + UpperSkin = {4, 1}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {1, 1}, + Armor = {7, 1}, + Parachute = {1, 1}, + }, + }, + [8] = { + Name = 'Class B - EMT', + Male = { + Hat = {10, 1}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {2, 1}, + Mask = {1, 1}, + Top = {75, 1}, + UpperSkin = {12, 1}, + Decal = {20, 1}, + UnderCoat = {89, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {31, 3}, + Armor = {34, 1}, + Parachute = {1, 1}, + }, + Female = { + Hat = {10, 1}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {2, 4}, + Mask = {1, 1}, + Top = {26, 1}, + UpperSkin = {10, 1}, + Decal = {19, 1}, + UnderCoat = {94, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {15, 2}, + Armor = {38, 1}, + Parachute = {1, 1}, + }, + }, + [9] = { + Name = 'Class B - Paramedic', + Male = { + Hat = {10, 1}, + Glasses = {14, 1}, + Ear = {0, 0}, + Watch = {23, 4}, + Mask = {1, 1}, + Top = {75, 3}, + UpperSkin = {12, 1}, + Decal = {20, 2}, + UnderCoat = {92, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {31, 2}, + Armor = {34, 1}, + Parachute = {1, 1}, + }, + Female = { + Hat = {0, 0}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {2, 2}, + Mask = {1, 1}, + Top = {26, 3}, + UpperSkin = {10, 1}, + Decal = {19, 2}, + UnderCoat = {97, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {15, 3}, + Armor = {38, 1}, + Parachute = {1, 1}, + }, + }, + [10] = { + Name = 'Class B - Supervisor', + Male = { + Hat = {0, 0}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {2, 2}, + Mask = {1, 1}, + Top = {75, 5}, + UpperSkin = {12, 1}, + Decal = {20, 3}, + UnderCoat = {91, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {1, 1}, + Armor = {35, 1}, + Parachute = {1, 1}, + }, + Female = { + Hat = {0, 0}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {1, 2}, + Mask = {1, 1}, + Top = {26, 5}, + UpperSkin = {10, 1}, + Decal = {19, 3}, + UnderCoat = {96, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {1, 1}, + Armor = {34, 1}, + Parachute = {1, 1}, + }, + }, + [11] = { + Name = 'Class B - AED', + Male = { + Hat = {10, 1}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {1, 2}, + Mask = {1, 1}, + Top = {75, 2}, + UpperSkin = {12, 1}, + Decal = {20, 1}, + UnderCoat = {90, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {31, 1}, + Armor = {32, 1}, + Parachute = {65, 1}, + }, + Female = { + Hat = {10, 2}, + Glasses = {14, 1}, + Ear = {0, 0}, + Watch = {2, 1}, + Mask = {1, 1}, + Top = {26, 2}, + UpperSkin = {10, 1}, + Decal = {19, 1}, + UnderCoat = {95, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {15, 1}, + Armor = {36, 1}, + Parachute = {65, 1}, + }, + }, + [12] = { + Name = 'Class B - Trauma Bag', + Male = { + Hat = {10, 2}, + Glasses = {14, 1}, + Ear = {0, 0}, + Watch = {23, 1}, + Mask = {1, 1}, + Top = {75, 3}, + UpperSkin = {12, 1}, + Decal = {20, 2}, + UnderCoat = {91, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {31, 1}, + Armor = {32, 1}, + Parachute = {67, 1}, + }, + Female = { + Hat = {0, 0}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {2, 5}, + Mask = {1, 1}, + Top = {26, 3}, + UpperSkin = {10, 1}, + Decal = {19, 2}, + UnderCoat = {96, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {15, 1}, + Armor = {36, 1}, + Parachute = {67, 1}, + }, + }, + [13] = { + Name = 'Class B - Meret Backpack', + Male = { + Hat = {10, 1}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {1, 1}, + Mask = {1, 1}, + Top = {75, 4}, + UpperSkin = {12, 1}, + Decal = {21, 2}, + UnderCoat = {92, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {31, 4}, + Armor = {34, 1}, + Parachute = {51, 1}, + }, + Female = { + Hat = {0, 0}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {1, 2}, + Mask = {1, 1}, + Top = {26, 4}, + UpperSkin = {10, 1}, + Decal = {20, 2}, + UnderCoat = {97, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {15, 4}, + Armor = {38, 1}, + Parachute = {51, 1}, + }, + }, + [14] = { + Name = 'Class B - SL Overt Carrier', + Male = { + Hat = {10, 1}, + Glasses = {14, 1}, + Ear = {0, 0}, + Watch = {2, 3}, + Mask = {1, 1}, + Top = {75, 4}, + UpperSkin = {12, 1}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {1, 1}, + Armor = {8, 1}, + Parachute = {1, 1}, + }, + Female = { + Hat = {0, 0}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {26, 4}, + UpperSkin = {10, 1}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {1, 1}, + Armor = {8, 2}, + Parachute = {1, 1}, + }, + }, + [15] = { + Name = 'T-Shirt - EMT', + Male = { + Hat = {10, 1}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {2, 1}, + Mask = {1, 1}, + Top = {173, 2}, + UpperSkin = {1, 1}, + Decal = {21, 1}, + UnderCoat = {89, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {32, 3}, + Armor = {31, 1}, + Parachute = {1, 1}, + }, + Female = { + Hat = {10, 1}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {2, 4}, + Mask = {1, 1}, + Top = {12, 2}, + UpperSkin = {15, 1}, + Decal = {20, 1}, + UnderCoat = {94, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {16, 2}, + Armor = {37, 1}, + Parachute = {1, 1}, + }, + }, + [16] = { + Name = 'T-Shirt - Paramedic', + Male = { + Hat = {10, 1}, + Glasses = {14, 1}, + Ear = {0, 0}, + Watch = {23, 4}, + Mask = {1, 1}, + Top = {173, 1}, + UpperSkin = {1, 1}, + Decal = {21, 2}, + UnderCoat = {92, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {32, 2}, + Armor = {33, 1}, + Parachute = {1, 1}, + }, + Female = { + Hat = {0, 0}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {2, 2}, + Mask = {1, 1}, + Top = {12, 1}, + UpperSkin = {15, 1}, + Decal = {20, 2}, + UnderCoat = {97, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {16, 3}, + Armor = {37, 1}, + Parachute = {1, 1}, + }, + }, + [17] = { + Name = 'T-Shirt - AED', + Male = { + Hat = {10, 1}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {1, 2}, + Mask = {1, 1}, + Top = {173, 4}, + UpperSkin = {1, 1}, + Decal = {21, 1}, + UnderCoat = {90, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {32, 1}, + Armor = {32, 1}, + Parachute = {65, 1}, + }, + Female = { + Hat = {10, 2}, + Glasses = {14, 1}, + Ear = {0, 0}, + Watch = {2, 1}, + Mask = {1, 1}, + Top = {12, 3}, + UpperSkin = {15, 1}, + Decal = {20, 1}, + UnderCoat = {95, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {16, 1}, + Armor = {36, 1}, + Parachute = {65, 1}, + }, + }, + [18] = { + Name = 'T-Shirt - Trauma Bag', + Male = { + Hat = {10, 2}, + Glasses = {14, 1}, + Ear = {0, 0}, + Watch = {23, 1}, + Mask = {1, 1}, + Top = {173, 1}, + UpperSkin = {1, 1}, + Decal = {21, 2}, + UnderCoat = {91, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {32, 1}, + Armor = {32, 1}, + Parachute = {67, 1}, + }, + Female = { + Hat = {0, 0}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {2, 5}, + Mask = {1, 1}, + Top = {12, 1}, + UpperSkin = {15, 1}, + Decal = {20, 2}, + UnderCoat = {96, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {16, 1}, + Armor = {36, 1}, + Parachute = {67, 1}, + }, + }, + [19] = { + Name = 'T-Shirt - Meret Backpack', + Male = { + Hat = {10, 1}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {1, 1}, + Mask = {1, 1}, + Top = {173, 3}, + UpperSkin = {1, 1}, + Decal = {21, 2}, + UnderCoat = {92, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {1, 1}, + Armor = {34, 1}, + Parachute = {51, 1}, + }, + Female = { + Hat = {0, 0}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {1, 2}, + Mask = {1, 1}, + Top = {12, 4}, + UpperSkin = {15, 1}, + Decal = {20, 2}, + UnderCoat = {97, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {16, 4}, + Armor = {38, 1}, + Parachute = {51, 1}, + }, + }, + [20] = { + Name = 'T-Shirt - SL Overt Carrier', + Male = { + Hat = {10, 1}, + Glasses = {14, 1}, + Ear = {0, 0}, + Watch = {2, 3}, + Mask = {1, 1}, + Top = {173, 3}, + UpperSkin = {1, 1}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {1, 1}, + Armor = {9, 1}, + Parachute = {1, 1}, + }, + Female = { + Hat = {0, 0}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {12, 4}, + UpperSkin = {15, 1}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {1, 1}, + Armor = {12, 1}, + Parachute = {1, 1}, + }, + }, + [21] = { + Name = 'Parka - EMT', + Male = { + Hat = {10, 1}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {178, 1}, + UpperSkin = {13, 1}, + Decal = {1, 1}, + UnderCoat = {84, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {1, 1}, + Armor = {35, 1}, + Parachute = {1, 1}, + }, + Female = { + Hat = {10, 1}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {175, 1}, + UpperSkin = {4, 1}, + Decal = {1, 1}, + UnderCoat = {89, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {1, 1}, + Armor = {39, 1}, + Parachute = {1, 1}, + }, + }, + [22] = { + Name = 'Parka - Paramedic', + Male = { + Hat = {10, 1}, + Glasses = {14, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {178, 2}, + UpperSkin = {13, 1}, + Decal = {1, 1}, + UnderCoat = {84, 2}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {1, 1}, + Armor = {35, 1}, + Parachute = {1, 1}, + }, + Female = { + Hat = {0, 0}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {175, 2}, + UpperSkin = {4, 1}, + Decal = {1, 1}, + UnderCoat = {89, 2}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {1, 1}, + Armor = {39, 1}, + Parachute = {1, 1}, + }, + }, + [23] = { + Name = 'Parka - Supervisor', + Male = { + Hat = {0, 0}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {178, 2}, + UpperSkin = {13, 1}, + Decal = {1, 1}, + UnderCoat = {84, 3}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {1, 1}, + Armor = {35, 1}, + Parachute = {1, 1}, + }, + Female = { + Hat = {0, 0}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {175, 2}, + UpperSkin = {4, 1}, + Decal = {1, 1}, + UnderCoat = {89, 3}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {1, 1}, + Armor = {39, 1}, + Parachute = {1, 1}, + }, + }, + [24] = { + Name = 'Parka - AED', + Male = { + Hat = {10, 1}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {178, 1}, + UpperSkin = {13, 1}, + Decal = {1, 1}, + UnderCoat = {84, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {1, 1}, + Armor = {35, 1}, + Parachute = {66, 1}, + }, + Female = { + Hat = {10, 1}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {175, 1}, + UpperSkin = {4, 1}, + Decal = {1, 1}, + UnderCoat = {89, 1}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {1, 1}, + Armor = {39, 1}, + Parachute = {66, 1}, + }, + }, + [25] = { + Name = 'Parka - Trauma Bag', + Male = { + Hat = {10, 1}, + Glasses = {14, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {178, 2}, + UpperSkin = {13, 1}, + Decal = {1, 1}, + UnderCoat = {84, 2}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {1, 1}, + Armor = {35, 1}, + Parachute = {68, 1}, + }, + Female = { + Hat = {0, 0}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {175, 2}, + UpperSkin = {4, 1}, + Decal = {1, 1}, + UnderCoat = {89, 2}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {1, 1}, + Armor = {39, 1}, + Parachute = {68, 1}, + }, + }, + [26] = { + Name = 'Parka - Meret Backpack', + Male = { + Hat = {10, 1}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {178, 1}, + UpperSkin = {13, 1}, + Decal = {1, 1}, + UnderCoat = {84, 1}, + Pants = {78, 1}, + Shoes = {52, 1}, + Accessories = {1, 1}, + Armor = {35, 1}, + Parachute = {52, 1}, + }, + Female = { + Hat = {0, 0}, + Glasses = {16, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {175, 1}, + UpperSkin = {4, 1}, + Decal = {1, 1}, + UnderCoat = {89, 2}, + Pants = {80, 1}, + Shoes = {53, 1}, + Accessories = {1, 1}, + Armor = {39, 1}, + Parachute = {52, 1}, + }, + } + }, + ["LSPD"] = { + Enabled = true, -- Change the boolean to enable / disable this department. + Max = 58, -- How many uniforms do you have in this department? + [1] = { + Name = "Class A", + Male = { + Hat = {84, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {103, 1}, + UpperSkin = {87, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + }, + Female = { + Hat = {83, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {94, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {4, 1}, + Pants = {4, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + } + }, + [2] = { + Name = "Class A w/Hi-Vis", + Male = { + Hat = {84, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {103, 1}, + UpperSkin = {87, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {11, 2}, + Parachute = {32, 1} + }, + Female = { + Hat = {83, 2}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {94, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {4, 1}, + Pants = {4, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {20, 2}, + Parachute = {32, 1} + } + }, + [3] = { + Name = "Class B", + Male = { + Hat = {84, 2}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {102, 1}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + }, + Female = { + Hat = {83, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {93, 1}, + UpperSkin = {29, 1}, + Decal = {1, 1}, + UnderCoat = {4, 1}, + Pants = {4, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {33, 1} + } + }, + [4] = { + Name = "Class B w/TrafficV", + Male = { + Hat = {84, 2}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {102, 1}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {11, 1}, + Parachute = {32, 1} + }, + Female = { + Hat = {83, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {93, 1}, + UpperSkin = {29, 1}, + Decal = {1, 1}, + UnderCoat = {4, 1}, + Pants = {4, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {20, 2}, + Parachute = {33, 1} + } + }, + [5] = { + Name = "SGT - Class A", + Male = { + Hat = {84, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {103, 2}, + UpperSkin = {87, 2}, + Decal = {13, 1}, + UnderCoat = {106, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {36, 1} + }, + Female = { + Hat = {83, 3}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {94, 2}, + UpperSkin = {24, 1}, + Decal = {11, 1}, + UnderCoat = {4, 1}, + Pants = {4, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {36, 0} + } + }, + [6] = { + Name = "SGT - Class A w/TrafficVest", + Male = { + Hat = {84, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {122, 1}, + Mask = {122, 1}, + Top = {103, 2}, + UpperSkin = {87, 2}, + Decal = {13, 1}, + UnderCoat = {106, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {36, 1} + }, + Female = { + Hat = {83, 4}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {94, 2}, + UpperSkin = {24, 1}, + Decal = {11, 1}, + UnderCoat = {4, 1}, + Pants = {4, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {20, 2}, + Parachute = {36, 1} + } + }, + [7] = { + Name = "SGT - Class B", + Male = { + Hat = {84, 3}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {102, 2}, + UpperSkin = {86, 2}, + Decal = {16, 1}, + UnderCoat = {106, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {36, 1} + }, + Female = { + Hat = {83, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {93, 2}, + UpperSkin = {29, 1}, + Decal = {15, 1}, + UnderCoat = {4, 1}, + Pants = {4, 1}, + Shoes = {53, 1}, + Accessories = {3, 1}, + Armor = {1, 1}, + Parachute = {36, 1} + } + }, + [8] = { + Name = "SGT - Class B w/TrafficV", + Male = { + Hat = {84, 3}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {102, 2}, + UpperSkin = {86, 2}, + Decal = {16, 1}, + UnderCoat = {106, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {11, 2}, + Parachute = {36, 1} + }, + Female = { + Hat = {83, 2}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {93, 2}, + UpperSkin = {29, 1}, + Decal = {15, 1}, + UnderCoat = {4, 1}, + Pants = {4, 1}, + Shoes = {53, 1}, + Accessories = {3, 1}, + Armor = {20, 2}, + Parachute = {36, 1} + } + }, + [9] = { + Name = "Explorers - Class A", + Male = { + Hat = {84, 7}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {103, 3}, + UpperSkin = {87, 2}, + Decal = {13, 2}, + UnderCoat = {88, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {1, 1}, + Armor = {1, 1}, + Parachute = {37, 1} + }, + Female = { + Hat = {83, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {94, 3}, + UpperSkin = {24, 1}, + Decal = {11, 2}, + UnderCoat = {7, 1}, + Pants = {4, 1}, + Shoes = {53, 1}, + Accessories = {1, 1}, + Armor = {1, 1}, + Parachute = {37, 1} + } + }, + [10] = { + Name = "Explorers - Class B", + Male = { + Hat = {84, 7}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {102, 3}, + UpperSkin = {86, 2}, + Decal = {16, 2}, + UnderCoat = {88, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {1, 1}, + Armor = {1, 1}, + Parachute = {37, 1} + }, + Female = { + Hat = {83, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {93, 3}, + UpperSkin = {29, 1}, + Decal = {15, 2}, + UnderCoat = {7, 1}, + Pants = {4, 1}, + Shoes = {53, 1}, + Accessories = {1, 1}, + Armor = {1, 1}, + Parachute = {37, 1} + } + }, + [11] = { + Name = "T-Shirt - Blue", + Male = { + Hat = {84, 2}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {109, 1}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {3, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {84, 6}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 2}, + Mask = {1, 1}, + Top = {100, 1}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {4, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + } + }, + [12] = { + Name = "T-Shirt - Blue w/TrafficV", + Male = { + Hat = {84, 3}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {109, 1}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {3, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {83, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 2}, + Mask = {1, 1}, + Top = {100, 1}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {4, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {20, 2}, + Parachute = {75, 1} + } + }, + [13] = { + Name = "T-Shirt - Grey", + Male = { + Hat = {84, 2}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {109, 1}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {3, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {83, 2}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 2}, + Mask = {1, 1}, + Top = {100, 2}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {4, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + } + }, + [14] = { + Name = "T-Shirt - Grey w/TrafficV", + Male = { + Hat = {84, 3}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {109, 2}, + Top = {109, 1}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {3, 1}, + Armor = {11, 2}, + Parachute = {75, 1} + }, + Female = { + Hat = {83, 4}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 2}, + Mask = {1, 1}, + Top = {100, 2}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {4, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {20, 2}, + Parachute = {75, 1} + } + }, + [15] = { + Name = "Polo - Blue", + Male = { + Hat = {84, 2}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {3, 1}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {11, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {83, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 2}, + Mask = {1, 1}, + Top = {15, 1}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {4, 1}, + Pants = {4, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + } + }, + [16] = { + Name = "Polo - Blue w/TrafficV", + Male = { + Hat = {84, 2}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {3, 1}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {11, 2}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [17] = { + Name = "Polo - Grey", + Male = { + Hat = {84, 2}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {3, 2}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {83, 3}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 2}, + Mask = {1, 1}, + Top = {15, 2}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {4, 1}, + Pants = {4, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + } + }, + [18] = { + Name = "Polo - Grey w/LBV", + Male = { + Hat = {84, 2}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {3, 2}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {8, 3}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [19] = { + Name = "Polo - Grey w/TrafficV", + Male = { + Hat = {84, 2}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {3, 2}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {11, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [20] = { + Name = "Long Sleeve Shirt", + Male = { + Hat = {84, 2}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {93, 1}, + UpperSkin = {92, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {3, 1}, + Armor = {11, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [21] = { + Name = "Long Sleeve Shirt w/LBV", + Male = { + Hat = {84, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {93, 1}, + UpperSkin = {92, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {3, 1}, + Armor = {8, 3}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [22] = { + Name = "Jacket", + Male = { + Hat = {84, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {82, 2}, + UpperSkin = {91, 2}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {3, 1}, + Armor = {1, 1}, + Parachute = {34, 1} + }, + Female = { + Hat = {83, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {75, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {4, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + } + }, + [23] = { + Name = "SGT - Jacket", + Male = { + Hat = {84, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {82, 1}, + UpperSkin = {91, 2}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {3, 1}, + Armor = {1, 1}, + Parachute = {34, 2} + }, + Female = { + Hat = {83, 2}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {75, 2}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {4, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + } + }, + [23] = { + Name = "Cold Wear Jacket w/TrafficV", + Male = { + Hat = {3, 4}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {155, 1}, + UpperSkin = {91, 2}, + Decal = {1, 1}, + UnderCoat = {67, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {3, 1}, + Armor = {1, 1}, + Parachute = {34, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [24] = { + Name = "Fleece All Blue", + Male = { + Hat = {3, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {108, 1}, + UpperSkin = {91, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [25] = { + Name = "Fleece Jacket", + Male = { + Hat = {3, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {108, 2}, + UpperSkin = {91, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [26] = { + Name = "K-9 - Class A", + Male = { + Hat = {84, 5}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {103, 4}, + UpperSkin = {87, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + }, + Female = { + Hat = {83, 5}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {94, 4}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {3, 1}, + Pants = {4, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + } + }, + [27] = { + Name = "K-9 Class A w/LBV", + Male = { + Hat = {84, 6}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {103, 4}, + UpperSkin = {87, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {8, 2}, + Parachute = {32, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [28] = { + Name = "K-9 - Class B", + Male = { + Hat = {84, 5}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {102, 4}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + }, + Female = { + Hat = {83, 6}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {93, 4}, + UpperSkin = {29, 1}, + Decal = {1, 1}, + UnderCoat = {3, 1}, + Pants = {4, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {33, 1} + } + }, + [29] = { + Name = "K-9 - Class B w/LBV", + Male = { + Hat = {84, 5}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {102, 4}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {8, 2}, + Parachute = {32, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [30] = { + Name = "K-9 - T-Shirt", + Male = { + Hat = {84, 5}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {109, 3}, + UpperSkin = {106, 1}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {83, 6}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 2}, + Mask = {1, 1}, + Top = {100, 3}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {3, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + } + }, + [31] = { + Name = "K-9 - T-Shirt w/LBV", + Male = { + Hat = {84, 6}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {109, 3}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {8, 2}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [32] = { + Name = "K-9 - Long Sleeve Shirt w/LBV", + Male = { + Hat = {84, 5}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {93, 2}, + UpperSkin = {89, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {8, 2}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [33] = { + Name = "K-9 - Fleece Jacket", + Male = { + Hat = {84, 6}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {108, 3}, + UpperSkin = {91, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {8, 2}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [34] = { + Name = "Bicycle Polo", + Male = { + Hat = {50, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {3, 3}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {89, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {48, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 2}, + Mask = {1, 1}, + Top = {15, 3}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {3, 1}, + Pants = {92, 1}, + Shoes = {5, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + } + }, + [35] = { + Name = "Motorcycle Unit - Class A Blue", + Male = { + Hat = {49, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {161, 1}, + UpperSkin = {153, 3}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {33, 1}, + Shoes = {34, 1}, + Accessories = {3, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + }, + Female = { + Hat = {49, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {158, 2}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {4, 1}, + Pants = {32, 2}, + Shoes = {10, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + } + }, + [36] = { + Name = "Motorcycle Unit - Class A Grey", + Male = { + Hat = {49, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {161, 1}, + UpperSkin = {153, 3}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {33, 4}, + Shoes = {34, 1}, + Accessories = {3, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + }, + Female = { + Hat = {49, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {158, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {4, 1}, + Pants = {32, 2}, + Shoes = {10, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + } + }, + [37] = { + Name = "Motorcycle Unit - Class B Blue", + Male = { + Hat = {49, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {160, 1}, + UpperSkin = {152, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {33, 4}, + Shoes = {34, 1}, + Accessories = {3, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + }, + Female = { + Hat = {49, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {157, 2}, + UpperSkin = {29, 1}, + Decal = {1, 1}, + UnderCoat = {4, 1}, + Pants = {32, 2}, + Shoes = {10, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + } + }, + [38] = { + Name = "Motorcycle Unit - Class B Grey", + Male = { + Hat = {49, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {160, 1}, + UpperSkin = {152, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {33, 4}, + Shoes = {34, 1}, + Accessories = {3, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + }, + Female = { + Hat = {49, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {157, 1}, + UpperSkin = {29, 1}, + Decal = {1, 1}, + UnderCoat = {4, 1}, + Pants = {32, 2}, + Shoes = {10, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + } + }, + [39] = { + Name = "LSPD | Pilot Uniform", + Male = { + Hat = {80, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {66, 2}, + UpperSkin = {97, 1}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {39, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {49, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [40] = { + Name = "GIU - T-Shirt", + Male = { + Hat = {8, 2}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {109, 4}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {88, 2}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {8, 8}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 2}, + Mask = {1, 1}, + Top = {100, 5}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {3, 1}, + Pants = {55, 2}, + Shoes = {53, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + } + }, + [41] = { + Name = "GIU - Long Sleeve Shirt", + Male = { + Hat = {8, 2}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 1}, + Mask = {122, 1}, + Top = {93, 4}, + UpperSkin = {89, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [42] = { + Name = "GIU - Hoodie", + Male = { + Hat = {8, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 1}, + Mask = {122, 1}, + Top = {96, 1}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {53, 2}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + }, + Female = { + Hat = {8, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {87, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {55, 2}, + Shoes = {53, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + } + }, + [43] = { + Name = "GIU - Hoodie 2", + Male = { + Hat = {85, 3}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {96, 2}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {53, 2}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + }, + Female = { + Hat = {8, 2}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {87, 2}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {55, 2}, + Shoes = {53, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + } + }, + [44] = { + Name = "GIU - Fleece Jacket", + Male = { + Hat = {8, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {108, 5}, + UpperSkin = {87, 2}, + Decal = {1, 1}, + UnderCoat = {88, 1}, + Pants = {53, 2}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [45] = { + Name = "CID - T-Shirt", + Male = { + Hat = {85, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {109, 5}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {88, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {84, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 2}, + Mask = {1, 1}, + Top = {100, 4}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {7, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + } + }, + [46] = { + Name = "CID - Hoodie", + Male = { + Hat = {85, 2}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {96, 3}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + }, + Female = { + Hat = {84, 2}, + Glasses = {0, 0}, + Ear = { + 0, + 0, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {87, 3}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + } + }, + [47] = { + Name = "CID - Fleece Jacket", + Male = { + Hat = {8, 4}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {108, 4}, + UpperSkin = {87, 2}, + Decal = {1, 1}, + UnderCoat = {88, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [48] = { + Name = "CID - Jacket", + Male = { + Hat = {85, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {82, 3}, + UpperSkin = {91, 2}, + Decal = {1, 1}, + UnderCoat = {13, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = 9, + 1 + }, + Armor = {1, 1}, + Parachute = {34, 1} + }, + Female = { + Hat = {84, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {1, 1}, + Top = {75, 3}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {4, 1}, + Shoes = {53, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + } + }, + [49] = { + Name = "CID - Long Sleeve Shirt", + Male = { + Hat = {8, 4}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {93, 3}, + UpperSkin = {89, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 2}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [50] = { + Name = "SWAT - Combat Shirt", + Male = { + Hat = {2, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {111, 1}, + UpperSkin = {89, 2}, + Decal = {1, 1}, + UnderCoat = {102, 1}, + Pants = {47, 2}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [51] = { + Name = "SWAT - Combat Shirt w/JPC", + Male = { + Hat = {2, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {111, 1}, + UpperSkin = {89, 2}, + Decal = {1, 1}, + UnderCoat = {102, 1}, + Pants = {47, 1}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {3, 5}, + Parachute = {2, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [52] = { + Name = "SWAT - Polo", + Male = { + Hat = {82, 5}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {3, 4}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {88, 1}, + Pants = {53, 2}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [53] = { + Name = "SWAT - Polo Instructor", + Male = { + Hat = {85, 5}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {3, 5}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {5, 2}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {34, 2} + }, + Female = { + Hat = {84, 5}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 2}, + Mask = {1, 1}, + Top = {15, 4}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {14, 1}, + Pants = {1, 11}, + Shoes = {50, 1}, + Accessories = {7, 1}, + Armor = {1, 1}, + Parachute = {34, 2} + } + }, + [54] = { + Name = "SWAT - Long Sleeve", + Male = { + Hat = {8, 8}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {93, 5}, + UpperSkin = {89, 2}, + Decal = {1, 1}, + UnderCoat = {102, 1}, + Pants = {53, 2}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [55] = { + Name = "SWAT - Long Sleeved Shirt w/JPC", + Male = { + Hat = {3, 3}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {93, 1}, + Top = {93, 5}, + UpperSkin = {89, 2}, + Decal = {1, 1}, + UnderCoat = {102, 1}, + Pants = {53, 2}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {3, 5}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [56] = { + Name = "SWAT - T-Shirt", + Male = { + Hat = {85, 5}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {109, 6}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {88, 1}, + Pants = {53, 2}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [57] = { + Name = "SWAT - T-Shirt w/NegoVest", + Male = { + Hat = {85, 5}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {109, 6}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {88, 1}, + Pants = {53, 2}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {3, 3}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [58] = { + Name = "K-9 - Long Sleeve Shirt w/LBV", + Male = { + Hat = {84, 5}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {93, 2}, + UpperSkin = {89, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {8, 2}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + } + }, + ["LSPA"] = { + Enabled = true, -- Change the boolean to enable / disable this department. + Max = 63, -- How many uniforms do you have in this department? + [1] = { + Name = "Class A", + Male = { + Hat = {85, 7}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {116, 1}, + UpperSkin = {94, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + }, + Female = { + Hat = {84, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {107, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + } + }, + [2] = { + Name = "Class A w/ TBL Badge", + Male = { + Hat = {85, 7}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {116, 1}, + UpperSkin = {94, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {33, 1} + }, + Female = { + Hat = {84, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {107, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {33, 1} + } + }, + [3] = { + Name = "Class A w/BCA Badge", + Male = { + Hat = {85, 7}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {116, 1}, + UpperSkin = {94, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 2} + }, + Female = { + Hat = {84, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {107, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 2} + } + }, + [4] = { + Name = "Class A w/PatrolVest", + Male = { + Hat = {85, 7}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {116, 1}, + UpperSkin = {94, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {18, 1}, + Parachute = {32, 1} + }, + Female = { + Hat = {84, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {107, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {21, 1}, + Parachute = {32, 1} + } + }, + [5] = { + Name = "Class A w/LifeVest", + Male = { + Hat = {85, 7}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {116, 1}, + UpperSkin = {94, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {12, 1}, + Parachute = {32, 1} + }, + Female = { + Hat = {84, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {107, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {11, 1}, + Parachute = {32, 1} + } + }, + [6] = { + Name = "Class A w/TowingTrafficVest", + Male = { + Hat = {85, 7}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {116, 1}, + UpperSkin = {94, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {11, 3}, + Parachute = {32, 1} + }, + Female = { + Hat = {84, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {107, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {20, 4}, + Parachute = {32, 1} + } + }, + [7] = { + Name = "Class B", + Male = { + Hat = {85, 7}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {97, 1}, + UpperSkin = {93, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + }, + Female = { + Hat = {84, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {88, 1}, + UpperSkin = {29, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + } + }, + [8] = { + Name = "Class B w/TBL Badge", + Male = { + Hat = {85, 7}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 0}, + Mask = {122, 1}, + Top = {97, 1}, + UpperSkin = {93, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {33, 1} + }, + Female = { + Hat = {84, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {88, 1}, + UpperSkin = {29, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {33, 1} + } + }, + [9] = { + Name = "Class B w/BCA Badge", + Male = { + Hat = {85, 7}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 0}, + Mask = {122, 1}, + Top = {97, 1}, + UpperSkin = {93, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 2} + }, + Female = { + Hat = {84, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {88, 1}, + UpperSkin = {29, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 2} + } + }, + [10] = { + Name = "Class B w/PatrolVest", + Male = { + Hat = {85, 7}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 0}, + Mask = {122, 1}, + Top = {97, 1}, + UpperSkin = {93, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {18, 1}, + Parachute = {32, 1} + }, + Female = { + Hat = {84, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {88, 1}, + UpperSkin = {29, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {21, 1}, + Parachute = {32, 1} + } + }, + [11] = { + Name = "Class B w/LifeVest", + Male = { + Hat = {85, 7}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 0}, + Mask = {122, 1}, + Top = {97, 1}, + UpperSkin = {93, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {12, 1}, + Parachute = {32, 1} + }, + Female = { + Hat = {84, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {88, 1}, + UpperSkin = {29, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {11, 1}, + Parachute = {32, 1} + } + }, + [12] = { + Name = "Class B w/TowingTrafficVest", + Male = { + Hat = {85, 7}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 0}, + Mask = {122, 1}, + Top = {97, 1}, + UpperSkin = {93, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {11, 3}, + Parachute = {32, 1} + }, + Female = { + Hat = {84, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {88, 1}, + UpperSkin = {29, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {20, 4}, + Parachute = {32, 1} + } + }, + [13] = { + Name = "T-Shirt", + Male = { + Hat = {85, 7}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 0}, + Mask = {122, 1}, + Top = {109, 7}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {84, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {100, 7}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + } + }, + [14] = { + Name = "T-Shirt w/PatrolVest", + Male = { + Hat = {85, 7}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 0}, + Mask = {122, 1}, + Top = {109, 7}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {21, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {84, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {100, 7}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + } + }, + [15] = { + Name = "T-Shirt w/LifeVest", + Male = { + Hat = {85, 7}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 0}, + Mask = {122, 1}, + Top = {109, 7}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {12, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {84, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {100, 7}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {11, 1}, + Parachute = {75, 1} + } + }, + [16] = { + Name = "T-Shirt w/TowingTrafficVest", + Male = { + Hat = {85, 7}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {21, 0}, + Mask = {122, 1}, + Top = {109, 7}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {11, 3}, + Parachute = {75, 1} + }, + Female = { + Hat = {84, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {100, 7}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {20, 4}, + Parachute = {75, 1} + } + }, + [17] = { + Name = "Cold-Gear Jacket", + Male = { + Hat = {3, 1}, + Glasses = {1, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {93, 1}, + Top = {94, 1}, + UpperSkin = {89, 2}, + Decal = {1, 1}, + UnderCoat = {107, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [18] = { + Name = "RainCoat", + Male = { + Hat = {85, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {8, 1}, + UpperSkin = {94, 2}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {36, 1} + }, + Female = { + Hat = {84, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {8, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + } + }, + [19] = { + Name = "RainCoat Hood UP", + Male = { + Hat = {85, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {9, 1}, + UpperSkin = {94, 2}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {36, 1} + }, + Female = { + Hat = {84, 7}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {9, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + } + }, + [20] = { + Name = "Formal Uniform", + Male = { + Hat = {0, 0}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {37, 1}, + UpperSkin = {78, 1}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {1, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + }, + Female = { + Hat = {0, 0}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {22, 1}, + UpperSkin = {89, 1}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {4, 1}, + Shoes = {87, 1}, + Accessories = {1, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + } + }, + [21] = { + Name = "SGT - Class A", + Male = { + Hat = {98, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {51, 2}, + UpperSkin = {94, 2}, + Decal = {12, 3}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {36, 1} + }, + Female = { + Hat = {97, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {44, 2}, + UpperSkin = {24, 1}, + Decal = {11, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {36, 1} + } + }, + [22] = { + Name = "SGT - Class A w/TBL Badge", + Male = { + Hat = {98, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {51, 2}, + UpperSkin = {94, 2}, + Decal = {12, 3}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {33, 2} + }, + Female = { + Hat = {97, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {44, 2}, + UpperSkin = {24, 1}, + Decal = {11, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {33, 2} + } + }, + [23] = { + Name = "SGT - Class B", + Male = { + Hat = {98, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {21, 0}, + Mask = {122, 1}, + Top = {50, 2}, + UpperSkin = {93, 2}, + Decal = {16, 3}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {36, 1} + }, + Female = { + Hat = {97, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {43, 2}, + UpperSkin = {21, 1}, + Decal = {15, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {21, 1}, + Parachute = {36, 1} + } + }, + [24] = { + Name = "SGT - Class B w/TBL Badge", + Male = { + Hat = {98, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {21, 0}, + Mask = {122, 1}, + Top = {50, 2}, + UpperSkin = {93, 2}, + Decal = {16, 3}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {33, 2} + }, + Female = { + Hat = {97, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {43, 2}, + UpperSkin = {21, 1}, + Decal = {15, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {21, 1}, + Parachute = {33, 2} + } + }, + [25] = { + Name = "SGT - Class B w/Patrol Vest", + Male = { + Hat = {98, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {21, 0}, + Mask = {122, 1}, + Top = {50, 2}, + UpperSkin = {93, 2}, + Decal = {16, 3}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {18, 1}, + Parachute = {36, 1} + }, + Female = { + Hat = {97, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {43, 2}, + UpperSkin = {21, 1}, + Decal = {15, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {21, 1}, + Parachute = {33, 2} + } + }, + [26] = { + Name = "SGT - RainCoat", + Male = { + Hat = {98, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {21, 0}, + Mask = {122, 1}, + Top = {8, 1}, + UpperSkin = {94, 2}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {36, 1} + }, + Female = { + Hat = {97, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {8, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {2, 1}, + Armor = {21, 1}, + Parachute = {32, 1} + } + }, + [27] = { + Name = "SGT - Formal Uniform", + Male = { + Hat = {98, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {37, 2}, + UpperSkin = {78, 1}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {1, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + }, + Female = { + Hat = {97, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {22, 2}, + UpperSkin = {89, 1}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {4, 1}, + Shoes = {87, 1}, + Accessories = {1, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + } + }, + [28] = { + Name = "LT - Class A", + Male = { + Hat = {98, 2}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {51, 3}, + UpperSkin = {94, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {36, 2} + }, + Female = { + Hat = {97, 2}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {44, 3}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {36, 2} + } + }, + [29] = { + Name = "LT - Class A w/TBL Badge", + Male = { + Hat = {98, 2}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {51, 3}, + UpperSkin = {94, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {33, 3} + }, + Female = { + Hat = {97, 2}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {44, 3}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {33, 3} + } + }, + [30] = { + Name = "LT - Class B", + Male = { + Hat = {98, 2}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {50, 3}, + UpperSkin = {93, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {36, 2} + }, + Female = { + Hat = {97, 2}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {43, 3}, + UpperSkin = {21, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {36, 2} + } + }, + [31] = { + Name = "LT - Class B w/TBL Badge", + Male = { + Hat = {98, 2}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {50, 3}, + UpperSkin = {93, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {33, 3} + }, + Female = { + Hat = {97, 2}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {43, 3}, + UpperSkin = {21, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {33, 3} + } + }, + [32] = { + Name = "LT - RainCoat", + Male = { + Hat = {98, 2}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {21, 0}, + Mask = {122, 1}, + Top = {8, 1}, + UpperSkin = {94, 2}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {36, 1} + }, + Female = { + Hat = {97, 2}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {8, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {2, 1}, + Armor = {21, 1}, + Parachute = {32, 1} + } + }, + [33] = { + Name = "LT - Formal Uniform", + Male = { + Hat = {98, 2}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {37, 3}, + UpperSkin = {78, 1}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {1, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + }, + Female = { + Hat = {97, 2}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {22, 3}, + UpperSkin = {89, 1}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {4, 1}, + Shoes = {87, 1}, + Accessories = {1, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + } + }, + [34] = { + Name = "CPT - Class A", + Male = { + Hat = {98, 3}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {51, 4}, + UpperSkin = {94, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {36, 3} + }, + Female = { + Hat = {97, 3}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {44, 4}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {36, 3} + } + }, + [35] = { + Name = "CPT - Class A w/TBL Badge", + Male = { + Hat = {98, 3}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {51, 4}, + UpperSkin = {94, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {33, 4} + }, + Female = { + Hat = {97, 3}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {44, 4}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {33, 4} + } + }, + [36] = { + Name = "CPT - Class B", + Male = { + Hat = {98, 3}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {50, 5}, + UpperSkin = {93, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {36, 3} + }, + Female = { + Hat = {97, 3}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {43, 5}, + UpperSkin = {21, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {36, 3} + } + }, + [37] = { + Name = "CPT - Class B w/TBL Badge", + Male = { + Hat = {98, 3}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {50, 5}, + UpperSkin = {93, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {33, 4} + }, + Female = { + Hat = {97, 3}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {43, 5}, + UpperSkin = {21, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {33, 4} + } + }, + [38] = { + Name = "CPT - RainCoat", + Male = { + Hat = {98, 3}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {8, 1}, + UpperSkin = {94, 2}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {36, 1} + }, + Female = { + Hat = {97, 3}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {8, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {2, 1}, + Armor = {21, 1}, + Parachute = {32, 1} + } + }, + [39] = { + Name = "CPT - Formal Uniform", + Male = { + Hat = {98, 3}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {37, 4}, + UpperSkin = {78, 1}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {1, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + }, + Female = { + Hat = {97, 3}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {22, 4}, + UpperSkin = {89, 1}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {4, 1}, + Shoes = {87, 1}, + Accessories = {1, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + } + }, + [40] = { + Name = "EODK9 - Class A", + Male = { + Hat = {85, 10}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {51, 1}, + UpperSkin = {94, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 2}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + }, + Female = { + Hat = {84, 10}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {44, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 2}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + } + }, + [41] = { + Name = "EODK9 - Class A w/TBL Badge", + Male = { + Hat = {85, 10}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {51, 1}, + UpperSkin = {94, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 2}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {33, 1} + }, + Female = { + Hat = {84, 10}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {44, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 2}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {33, 1} + } + }, + [42] = { + Name = "EODK9 - Class A w/BCA Badge", + Male = { + Hat = {85, 10}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {51, 1}, + UpperSkin = {94, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 2}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {32, 2} + }, + Female = { + Hat = {84, 10}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {44, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 2}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 2} + } + }, + [43] = { + Name = "EODK9 - Class A w/Vest", + Male = { + Hat = {85, 10}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {51, 1}, + UpperSkin = {94, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 2}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {23, 2}, + Parachute = {32, 1} + }, + Female = { + Hat = {84, 10}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {44, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 2}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {3, 2}, + Parachute = {32, 2} + } + }, + [44] = { + Name = "EODK9 - Class B", + Male = { + Hat = {85, 10}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {50, 1}, + UpperSkin = {93, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 2}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + }, + Female = { + Hat = {84, 10}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {43, 1}, + UpperSkin = {21, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 2}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 1} + } + }, + [45] = { + Name = "EODK9 - Class B w/TBL Badge", + Male = { + Hat = {85, 10}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {50, 1}, + UpperSkin = {93, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 2}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {33, 1} + }, + Female = { + Hat = {84, 10}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {43, 1}, + UpperSkin = {21, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 2}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {33, 1} + } + }, + [46] = { + Name = "EODK9 - Class B w/BCA Badge", + Male = { + Hat = {85, 10}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {50, 1}, + UpperSkin = {93, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 2}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {32, 2} + }, + Female = { + Hat = {84, 10}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {43, 1}, + UpperSkin = {21, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 2}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {32, 2} + } + }, + [47] = { + Name = "EODK9 - Class B w/Vest", + Male = { + Hat = {85, 10}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {50, 1}, + UpperSkin = {93, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 2}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {23, 2}, + Parachute = {32, 1} + }, + Female = { + Hat = {84, 10}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {43, 1}, + UpperSkin = {21, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 2}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {3, 2}, + Parachute = {32, 1} + } + }, + [48] = { + Name = "EODK9 - T-Shirt", + Male = { + Hat = {85, 10}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {109, 9}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 2}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {84, 10}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {100, 9}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 2}, + Shoes = {53, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + } + }, + [49] = { + Name = "EODK9 - T-Shirt w/Vest", + Male = { + Hat = {85, 10}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {109, 9}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 2}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {23, 2}, + Parachute = {75, 1} + }, + Female = { + Hat = {84, 10}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {100, 9}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 2}, + Shoes = {53, 1}, + Accessories = {2, 1}, + Armor = {3, 2}, + Parachute = {75, 1} + } + }, + [50] = { + Name = "EODK9 - Formal Uniform", + Male = { + Hat = {0, 0}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {37, 6}, + UpperSkin = {78, 1}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {25, 1}, + Shoes = {52, 1}, + Accessories = {1, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + }, + Female = { + Hat = {0, 0}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {22, 6}, + UpperSkin = {89, 1}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {4, 1}, + Shoes = {87, 1}, + Accessories = {1, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + } + }, + [51] = { + Name = "CP - T-Shirt", + Male = { + Hat = {85, 8}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {109, 8}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {84, 8}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {100, 8}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + } + }, + [52] = { + Name = "CP - T-Shirt w/Vest", + Male = { + Hat = {85, 8}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {109, 8}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {23, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {84, 8}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {100, 8}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {2, 1}, + Armor = {3, 1}, + Parachute = {75, 1} + } + }, + [53] = { + Name = "Scuba Team - Polo", + Male = { + Hat = {85, 9}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {3, 6}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {53, 1}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + }, + Female = { + Hat = {84, 9}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {15, 5}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {31, 1}, + Pants = {55, 1}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {75, 1} + } + }, + [54] = { + Name = "Scuba Team - Diving Suit", + Male = { + Hat = {0, 0}, + Glasses = {17, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {124, 1}, + Top = {153, 1}, + UpperSkin = {167, 2}, + Decal = {1, 1}, + UnderCoat = {80, 1}, + Pants = {69, 1}, + Shoes = {48, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + }, + Female = { + Hat = {0, 0}, + Glasses = {17, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {124, 1}, + Top = {150, 1}, + UpperSkin = {208, 2}, + Decal = {1, 1}, + UnderCoat = {83, 1}, + Pants = {71, 1}, + Shoes = {49, 1}, + Accessories = {1, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + } + }, + [55] = { + Name = "Scuba Team - Plain Diving Suit", + Male = { + Hat = {0, 0}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {124, 1}, + Top = {153, 1}, + UpperSkin = {167, 2}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {69, 1}, + Shoes = {47, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + }, + Female = { + Hat = {0, 0}, + Glasses = {17, 1}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {124, 1}, + Top = {150, 1}, + UpperSkin = {208, 2}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {71, 1}, + Shoes = {48, 1}, + Accessories = {1, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + } + }, + [56] = { + Name = "Rescue Pilot Overall", + Male = { + Hat = {80, 2}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {66, 2}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {39, 2}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + }, + Female = { + Hat = {79, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {59, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {39, 1}, + Shoes = {53, 1}, + Accessories = {1, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + } + }, + [57] = { + Name = "Rescue Pilot Overall - Visor UP", + Male = { + Hat = {79, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {66, 2}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {39, 2}, + Shoes = {52, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + }, + Female = { + Hat = {78, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {59, 1}, + UpperSkin = {24, 1}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {39, 1}, + Shoes = {53, 1}, + Accessories = {1, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + } + }, + [58] = { + Name = "Bomb Squad - Polo", + Male = { + Hat = {29, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {21, 1}, + Mask = {122, 1}, + Top = {3, 7}, + UpperSkin = {86, 2}, + Decal = {1, 1}, + UnderCoat = {132, 1}, + Pants = {53, 2}, + Shoes = {52, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {34, 2} + }, + Female = { + Hat = {29, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {7, 3}, + Mask = {122, 1}, + Top = {15, 6}, + UpperSkin = {32, 1}, + Decal = {1, 1}, + UnderCoat = {8, 1}, + Pants = {55, 2}, + Shoes = {53, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {75, 2} + } + }, + [59] = { + Name = "Bomb Squad - Juggernaut", + Male = { + Hat = {90, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {54, 1}, + Top = {187, 1}, + UpperSkin = {167, 1}, + Decal = {1, 1}, + UnderCoat = {98, 1}, + Pants = {85, 1}, + Shoes = {34, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + }, + Female = { + Hat = {89, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {53, 1}, + Top = {189, 1}, + UpperSkin = {208, 1}, + Decal = {1, 1}, + UnderCoat = {106, 1}, + Pants = {87, 1}, + Shoes = {51, 1}, + Accessories = {9, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + } + }, + [60] = { + Name = "Bomb Squad - Formal Uniform", + Male = { + Hat = {29, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {37, 5}, + UpperSkin = {78, 1}, + Decal = {1, 1}, + UnderCoat = {16, 1}, + Pants = {25, 2}, + Shoes = {52, 1}, + Accessories = {1, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + }, + Female = { + Hat = {29, 1}, + Glasses = {0, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {122, 1}, + Top = {22, 5}, + UpperSkin = {89, 1}, + Decal = {1, 1}, + UnderCoat = {15, 1}, + Pants = {4, 1}, + Shoes = {87, 1}, + Accessories = {1, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + } + }, + [61] = { + Name = "QRT Hoodie", + Male = { + Hat = {33, 1}, + Glasses = {12, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {53, 1}, + Top = {10, 1}, + UpperSkin = {153, 2}, + Decal = {1, 1}, + UnderCoat = {38, 1}, + Pants = {53, 1}, + Shoes = {39, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [62] = { + Name = "QRT Hoodie w/TacVest", + Male = { + Hat = {33, 1}, + Glasses = {12, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {53, 1}, + Top = {10, 1}, + UpperSkin = {153, 2}, + Decal = {1, 1}, + UnderCoat = {38, 1}, + Pants = {53, 1}, + Shoes = {39, 1}, + Accessories = {2, 1}, + Armor = {20, 1}, + Parachute = {1, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + }, + [63] = { + Name = "QRT Hoodie w/TacVest - NVG", + Male = { + Hat = {32, 1}, + Glasses = {12, 0}, + Ear = {0, 0}, + Watch = {0, 0}, + Mask = {53, 1}, + Top = {10, 1}, + UpperSkin = {153, 2}, + Decal = {1, 1}, + UnderCoat = {38, 1}, + Pants = {53, 1}, + Shoes = {39, 1}, + Accessories = {2, 1}, + Armor = {1, 1}, + Parachute = {1, 1} + }, + Female = { + Hat = {1, 1}, + Glasses = {1, 1}, + Ear = {1, 1}, + Watch = {1, 1}, + Mask = {0, 0}, + Top = {0, 0}, + UpperSkin = {0, 0}, + Decal = {0, 0}, + UnderCoat = {0, 0}, + Pants = {0, 0}, + Shoes = {0, 0}, + Accessories = {0, 0}, + Armor = {0, 0}, + Parachute = {0, 0} + } + } + } +} \ No newline at end of file diff --git a/resources/thinline_assets/weapon_config.lua b/resources/thinline_assets/weapon_config.lua new file mode 100644 index 000000000..595e1fad7 --- /dev/null +++ b/resources/thinline_assets/weapon_config.lua @@ -0,0 +1,311 @@ +WeaponConfig = { + [`weapon_pistol_mk2`] = { + name = 'Glock 19 Gen 4', + ammo = 'AMMO_PISTOL', + IsMK2 = true, + components = { + [`COMPONENT_PISTOL_MK2_CLIP_01`] = 'Default Clip', + [`COMPONENT_PISTOL_MK2_CLIP_02`] = 'Extended Clip', + [`COMPONENT_PISTOL_MK2_CLIP_TRACER`] = 'Tracer Rounds', + [`COMPONENT_PISTOL_MK2_CLIP_INCENDIARY`] = 'Incendiary Rounds', + [`COMPONENT_PISTOL_MK2_CLIP_HOLLOWPOINT`] = 'Hollow Point Rounds', + [`COMPONENT_PISTOL_MK2_CLIP_FMJ`] = 'Full Metal Jacket Rounds', + [`COMPONENT_AT_PI_RAIL`] = 'Mounted Scope', + [`COMPONENT_AT_PI_FLSH_02`] = 'Flashlight', + [`COMPONENT_AT_PI_SUPP_02`] = 'Suppressor', + [`COMPONENT_AT_PI_COMP`] = 'Compensator', + [`COMPONENT_PISTOL_MK2_CAMO`] = 'Digital Camo', + [`COMPONENT_PISTOL_MK2_CAMO_02`] = 'Brushstroke Camo', + [`COMPONENT_PISTOL_MK2_CAMO_03`] = 'Woodland Camo', + [`COMPONENT_PISTOL_MK2_CAMO_04`] = 'Skull', + [`COMPONENT_PISTOL_MK2_CAMO_05`] = 'Sessanta Nove', + [`COMPONENT_PISTOL_MK2_CAMO_06`] = 'Perseus', + [`COMPONENT_PISTOL_MK2_CAMO_07`] = 'Leopard', + [`COMPONENT_PISTOL_MK2_CAMO_08`] = 'Zebra', + [`COMPONENT_PISTOL_MK2_CAMO_09`] = 'Geometric', + [`COMPONENT_PISTOL_MK2_CAMO_10`] = 'Boom!', + [`COMPONENT_PISTOL_MK2_CAMO_IND_01`] = 'Patriotic', + [`COMPONENT_PISTOL_MK2_CAMO_SLIDE`] = 'Digital Camo', + [`COMPONENT_PISTOL_MK2_CAMO_02_SLIDE`] = 'Digital Camo', + [`COMPONENT_PISTOL_MK2_CAMO_03_SLIDE`] = 'Digital Camo', + [`COMPONENT_PISTOL_MK2_CAMO_04_SLIDE`] = 'Digital Camo', + [`COMPONENT_PISTOL_MK2_CAMO_05_SLIDE`] = 'Digital Camo', + [`COMPONENT_PISTOL_MK2_CAMO_06_SLIDE`] = 'Digital Camo', + [`COMPONENT_PISTOL_MK2_CAMO_07_SLIDE`] = 'Digital Camo', + [`COMPONENT_PISTOL_MK2_CAMO_08_SLIDE`] = 'Digital Camo', + [`COMPONENT_PISTOL_MK2_CAMO_09_SLIDE`] = 'Digital Camo', + [`COMPONENT_PISTOL_MK2_CAMO_10_SLIDE`] = 'Digital Camo', + [`COMPONENT_PISTOL_MK2_CAMO_IND_01_SLIDE`] = 'Patriotic', + } + }, + + [`weapon_dd11_b`] = { + name = 'DDM4V7 11.5 Black', + ammo = 'AMMO_RIFLE', + components = { + [`COMPONENT_PRO_B`] = 'Aimpoint Pro Red Dot Sight - Black', + [`COMPONENT_PRO_OD`] = 'Aimpoint Pro Red Dot Sight - OD', + [`COMPONENT_PRO_C`] = 'Aimpoint Pro Red Dot Sight - Coyote', + [`COMPONENT_EXPS34_B`] = 'EOTech EXPS3-4 Holographic Sight - Black', + [`COMPONENT_EXPS34_C`] = 'EOTech EXPS3-4 Holographic Sight - Coyote', + [`COMPONENT_HHSVO_B`] = 'EOTech HHS V Holographic Sight w/ Magnifier Open (Blk)', + [`COMPONENT_HHSVO_C`] = 'EOTech HHS V Holographic Sight w/ Magnifier Open (C)', + [`COMPONENT_HHSVC_B`] = 'EOTech HHS V Holographic Sight w/ Magnifier Closed (Blk)', + [`COMPONENT_HHSVC_C`] = 'EOTech HHS V Holographic Sight w/ Magnifier Closed (C)', + [`COMPONENT_VUDU_1X`] = 'EOTech Vudu 1x', + [`COMPONENT_PMAG30_B`] = 'PMAG 30r - Black', + [`COMPONENT_PMAG30_C`] = 'PMAG 30r - Coyote', + [`COMPONENT_PMAG40_B`] = 'PMAG 40r - Black', + [`COMPONENT_PMAGRANGER_B`] = 'PMAG 30r with Rangerplate - Black', + [`COMPONENT_PMAGLINK_B`] = 'PMAG 60r "Maglinked" - Black', + [`COMPONENT_PMAGLINK_C`] = 'PMAG 60r "Maglinked" - Coyote', + [`COMPONENT_BCM_B`] = 'BCM Vertical Grip Mod 3 - Black', + [`COMPONENT_BCM_OD`] = 'BCM Vertical Grip Mod 3 - OD', + [`COMPONENT_BCM_C`] = 'BCM Vertical Grip Mod 3 - Coyote', + [`COMPONENT_SFS11_B`] = 'SureFire ScoutLight w/ Single Switch', + [`COMPONENT_PEQ11_B`] = 'SureFire ScoutLight & PEQ-15A w/ Double Switch - Black', + [`COMPONENT_PEQ11_C`] = 'SureFire ScoutLight & PEQ-15A w/ Double Switch - Coyote', + [`COMPONENT_SOCOMSUP11_B`] = 'SOCOM556-RC2 Suppressor' + } + }, + + [`weapon_dd11_od`] = { + name = 'DDM4V7 11.5 OD', + ammo = 'AMMO_RIFLE', + components = { + [`COMPONENT_PRO_B`] = 'Aimpoint Pro Red Dot Sight - Black', + [`COMPONENT_PRO_OD`] = 'Aimpoint Pro Red Dot Sight - OD', + [`COMPONENT_PRO_C`] = 'Aimpoint Pro Red Dot Sight - Coyote', + [`COMPONENT_EXPS34_B`] = 'EOTech EXPS3-4 Holographic Sight - Black', + [`COMPONENT_EXPS34_C`] = 'EOTech EXPS3-4 Holographic Sight - Coyote', + [`COMPONENT_HHSVO_B`] = 'EOTech HHS V Holographic Sight w/ Magnifier Open (Blk)', + [`COMPONENT_HHSVO_C`] = 'EOTech HHS V Holographic Sight w/ Magnifier Open (C)', + [`COMPONENT_HHSVC_B`] = 'EOTech HHS V Holographic Sight w/ Magnifier Closed (Blk)', + [`COMPONENT_HHSVC_C`] = 'EOTech HHS V Holographic Sight w/ Magnifier Closed (C)', + [`COMPONENT_VUDU_1X`] = 'EOTech Vudu 1x', + [`COMPONENT_PMAG30_B`] = 'PMAG 30r - Black', + [`COMPONENT_PMAG30_C`] = 'PMAG 30r - Coyote', + [`COMPONENT_PMAG40_B`] = 'PMAG 40r - Black', + [`COMPONENT_PMAGRANGER_B`] = 'PMAG 30r with Rangerplate - Black', + [`COMPONENT_PMAGLINK_B`] = 'PMAG 60r "Maglinked" - Black', + [`COMPONENT_PMAGLINK_C`] = 'PMAG 60r "Maglinked" - Coyote', + [`COMPONENT_BCM_B`] = 'BCM Vertical Grip Mod 3 - Black', + [`COMPONENT_BCM_OD`] = 'BCM Vertical Grip Mod 3 - OD', + [`COMPONENT_BCM_C`] = 'BCM Vertical Grip Mod 3 - Coyote', + [`COMPONENT_SFS11_B`] = 'SureFire ScoutLight w/ Single Switch', + [`COMPONENT_PEQ11_B`] = 'SureFire ScoutLight & PEQ-15A w/ Double Switch - Black', + [`COMPONENT_PEQ11_C`] = 'SureFire ScoutLight & PEQ-15A w/ Double Switch - Coyote', + [`COMPONENT_SOCOMSUP11_B`] = 'SOCOM556-RC2 Suppressor' + } + }, + + [`weapon_dd11_c`] = { + name = 'DDM4V7 11.5 Coyote', + ammo = 'AMMO_RIFLE', + components = { + [`COMPONENT_PRO_B`] = 'Aimpoint Pro Red Dot Sight - Black', + [`COMPONENT_PRO_OD`] = 'Aimpoint Pro Red Dot Sight - OD', + [`COMPONENT_PRO_C`] = 'Aimpoint Pro Red Dot Sight - Coyote', + [`COMPONENT_EXPS34_B`] = 'EOTech EXPS3-4 Holographic Sight - Black', + [`COMPONENT_EXPS34_C`] = 'EOTech EXPS3-4 Holographic Sight - Coyote', + [`COMPONENT_HHSVO_B`] = 'EOTech HHS V Holographic Sight w/ Magnifier Open (Blk)', + [`COMPONENT_HHSVO_C`] = 'EOTech HHS V Holographic Sight w/ Magnifier Open (C)', + [`COMPONENT_HHSVC_B`] = 'EOTech HHS V Holographic Sight w/ Magnifier Closed (Blk)', + [`COMPONENT_HHSVC_C`] = 'EOTech HHS V Holographic Sight w/ Magnifier Closed (C)', + [`COMPONENT_VUDU_1X`] = 'EOTech Vudu 1x', + [`COMPONENT_PMAG30_B`] = 'PMAG 30r - Black', + [`COMPONENT_PMAG30_C`] = 'PMAG 30r - Coyote', + [`COMPONENT_PMAG40_B`] = 'PMAG 40r - Black', + [`COMPONENT_PMAGRANGER_B`] = 'PMAG 30r with Rangerplate - Black', + [`COMPONENT_PMAGLINK_B`] = 'PMAG 60r "Maglinked" - Black', + [`COMPONENT_PMAGLINK_C`] = 'PMAG 60r "Maglinked" - Coyote', + [`COMPONENT_BCM_B`] = 'BCM Vertical Grip Mod 3 - Black', + [`COMPONENT_BCM_OD`] = 'BCM Vertical Grip Mod 3 - OD', + [`COMPONENT_BCM_C`] = 'BCM Vertical Grip Mod 3 - Coyote', + [`COMPONENT_SFS11_B`] = 'SureFire ScoutLight w/ Single Switch', + [`COMPONENT_PEQ11_B`] = 'SureFire ScoutLight & PEQ-15A w/ Double Switch - Black', + [`COMPONENT_PEQ11_C`] = 'SureFire ScoutLight & PEQ-15A w/ Double Switch - Coyote', + [`COMPONENT_SOCOMSUP11_B`] = 'SOCOM556-RC2 Suppressor' + } + }, + + [`weapon_dd14_b`] = { + name = 'DDM4V7 14.5 Black', + ammo = 'AMMO_RIFLE', + components = { + [`COMPONENT_PRO_B`] = 'Aimpoint Pro Red Dot Sight - Black', + [`COMPONENT_PRO_OD`] = 'Aimpoint Pro Red Dot Sight - OD', + [`COMPONENT_PRO_C`] = 'Aimpoint Pro Red Dot Sight - Coyote', + [`COMPONENT_EXPS34_B`] = 'EOTech EXPS3-4 Holographic Sight - Black', + [`COMPONENT_EXPS34_C`] = 'EOTech EXPS3-4 Holographic Sight - Coyote', + [`COMPONENT_HHSVO_B`] = 'EOTech HHS V Holographic Sight w/ Magnifier Open (Blk)', + [`COMPONENT_HHSVO_C`] = 'EOTech HHS V Holographic Sight w/ Magnifier Open (C)', + [`COMPONENT_HHSVC_B`] = 'EOTech HHS V Holographic Sight w/ Magnifier Closed (Blk)', + [`COMPONENT_HHSVC_C`] = 'EOTech HHS V Holographic Sight w/ Magnifier Closed (C)', + [`COMPONENT_VUDU_1X`] = 'EOTech Vudu 1x', + [`COMPONENT_PMAG30_B`] = 'PMAG 30r - Black', + [`COMPONENT_PMAG30_C`] = 'PMAG 30r - Coyote', + [`COMPONENT_PMAG40_B`] = 'PMAG 40r - Black', + [`COMPONENT_PMAGRANGER_B`] = 'PMAG 30r with Rangerplate - Black', + [`COMPONENT_PMAGLINK_B`] = 'PMAG 60r "Maglinked" - Black', + [`COMPONENT_PMAGLINK_C`] = 'PMAG 60r "Maglinked" - Coyote', + [`COMPONENT_BCM_B`] = 'BCM Vertical Grip Mod 3 - Black', + [`COMPONENT_BCM_OD`] = 'BCM Vertical Grip Mod 3 - OD', + [`COMPONENT_BCM_C`] = 'BCM Vertical Grip Mod 3 - Coyote', + [`COMPONENT_SFS14_B`] = 'SureFire ScoutLight w/ Single Switch', + [`COMPONENT_PEQ14_B`] = 'SureFire ScoutLight & PEQ-15A w/ Double Switch - Black', + [`COMPONENT_PEQ14_C`] = 'SureFire ScoutLight & PEQ-15A w/ Double Switch - Coyote', + [`COMPONENT_SOCOMSUP14_B`] = 'SOCOM556-RC2 Suppressor' + } + }, + + [`weapon_dd14_od`] = { + name = 'DDM4V7 14.5 OD', + ammo = 'AMMO_RIFLE', + components = { + [`COMPONENT_PRO_B`] = 'Aimpoint Pro Red Dot Sight - Black', + [`COMPONENT_PRO_OD`] = 'Aimpoint Pro Red Dot Sight - OD', + [`COMPONENT_PRO_C`] = 'Aimpoint Pro Red Dot Sight - Coyote', + [`COMPONENT_EXPS34_B`] = 'EOTech EXPS3-4 Holographic Sight - Black', + [`COMPONENT_EXPS34_C`] = 'EOTech EXPS3-4 Holographic Sight - Coyote', + [`COMPONENT_HHSVO_B`] = 'EOTech HHS V Holographic Sight w/ Magnifier Open (Blk)', + [`COMPONENT_HHSVO_C`] = 'EOTech HHS V Holographic Sight w/ Magnifier Open (C)', + [`COMPONENT_HHSVC_B`] = 'EOTech HHS V Holographic Sight w/ Magnifier Closed (Blk)', + [`COMPONENT_HHSVC_C`] = 'EOTech HHS V Holographic Sight w/ Magnifier Closed (C)', + [`COMPONENT_VUDU_1X`] = 'EOTech Vudu 1x', + [`COMPONENT_PMAG30_B`] = 'PMAG 30r - Black', + [`COMPONENT_PMAG30_C`] = 'PMAG 30r - Coyote', + [`COMPONENT_PMAG40_B`] = 'PMAG 40r - Black', + [`COMPONENT_PMAGRANGER_B`] = 'PMAG 30r with Rangerplate - Black', + [`COMPONENT_PMAGLINK_B`] = 'PMAG 60r "Maglinked" - Black', + [`COMPONENT_PMAGLINK_C`] = 'PMAG 60r "Maglinked" - Coyote', + [`COMPONENT_BCM_B`] = 'BCM Vertical Grip Mod 3 - Black', + [`COMPONENT_BCM_OD`] = 'BCM Vertical Grip Mod 3 - OD', + [`COMPONENT_BCM_C`] = 'BCM Vertical Grip Mod 3 - Coyote', + [`COMPONENT_SFS14_B`] = 'SureFire ScoutLight w/ Single Switch', + [`COMPONENT_PEQ14_B`] = 'SureFire ScoutLight & PEQ-15A w/ Double Switch - Black', + [`COMPONENT_PEQ14_C`] = 'SureFire ScoutLight & PEQ-15A w/ Double Switch - Coyote', + [`COMPONENT_SOCOMSUP14_B`] = 'SOCOM556-RC2 Suppressor' + } + }, + + [`weapon_dd14_c`] = { + name = 'DDM4V7 14.5 Coyote', + ammo = 'AMMO_RIFLE', + components = { + [`COMPONENT_PRO_B`] = 'Aimpoint Pro Red Dot Sight - Black', + [`COMPONENT_PRO_OD`] = 'Aimpoint Pro Red Dot Sight - OD', + [`COMPONENT_PRO_C`] = 'Aimpoint Pro Red Dot Sight - Coyote', + [`COMPONENT_EXPS34_B`] = 'EOTech EXPS3-4 Holographic Sight - Black', + [`COMPONENT_EXPS34_C`] = 'EOTech EXPS3-4 Holographic Sight - Coyote', + [`COMPONENT_HHSVO_B`] = 'EOTech HHS V Holographic Sight w/ Magnifier Open (Blk)', + [`COMPONENT_HHSVO_C`] = 'EOTech HHS V Holographic Sight w/ Magnifier Open (C)', + [`COMPONENT_HHSVC_B`] = 'EOTech HHS V Holographic Sight w/ Magnifier Closed (Blk)', + [`COMPONENT_HHSVC_C`] = 'EOTech HHS V Holographic Sight w/ Magnifier Closed (C)', + [`COMPONENT_VUDU_1X`] = 'EOTech Vudu 1x', + [`COMPONENT_PMAG30_B`] = 'PMAG 30r - Black', + [`COMPONENT_PMAG30_C`] = 'PMAG 30r - Coyote', + [`COMPONENT_PMAG40_B`] = 'PMAG 40r - Black', + [`COMPONENT_PMAGRANGER_B`] = 'PMAG 30r with Rangerplate - Black', + [`COMPONENT_PMAGLINK_B`] = 'PMAG 60r "Maglinked" - Black', + [`COMPONENT_PMAGLINK_C`] = 'PMAG 60r "Maglinked" - Coyote', + [`COMPONENT_BCM_B`] = 'BCM Vertical Grip Mod 3 - Black', + [`COMPONENT_BCM_OD`] = 'BCM Vertical Grip Mod 3 - OD', + [`COMPONENT_BCM_C`] = 'BCM Vertical Grip Mod 3 - Coyote', + [`COMPONENT_SFS14_B`] = 'SureFire ScoutLight w/ Single Switch', + [`COMPONENT_PEQ14_B`] = 'SureFire ScoutLight & PEQ-15A w/ Double Switch - Black', + [`COMPONENT_PEQ14_C`] = 'SureFire ScoutLight & PEQ-15A w/ Double Switch - Coyote', + [`COMPONENT_SOCOMSUP14_B`] = 'SOCOM556-RC2 Suppressor' + } + }, + + [`weapon_dd16_b`] = { + name = 'DDM4V7 16 Black', + ammo = 'AMMO_RIFLE', + components = { + [`COMPONENT_PRO_B`] = 'Aimpoint Pro Red Dot Sight - Black', + [`COMPONENT_PRO_OD`] = 'Aimpoint Pro Red Dot Sight - OD', + [`COMPONENT_PRO_C`] = 'Aimpoint Pro Red Dot Sight - Coyote', + [`COMPONENT_EXPS34_B`] = 'EOTech EXPS3-4 Holographic Sight - Black', + [`COMPONENT_EXPS34_C`] = 'EOTech EXPS3-4 Holographic Sight - Coyote', + [`COMPONENT_HHSVO_B`] = 'EOTech HHS V Holographic Sight w/ Magnifier Open (Blk)', + [`COMPONENT_HHSVO_C`] = 'EOTech HHS V Holographic Sight w/ Magnifier Open (C)', + [`COMPONENT_HHSVC_B`] = 'EOTech HHS V Holographic Sight w/ Magnifier Closed (Blk)', + [`COMPONENT_HHSVC_C`] = 'EOTech HHS V Holographic Sight w/ Magnifier Closed (C)', + [`COMPONENT_VUDU_1X`] = 'EOTech Vudu 1x', + [`COMPONENT_PMAG30_B`] = 'PMAG 30r - Black', + [`COMPONENT_PMAG30_C`] = 'PMAG 30r - Coyote', + [`COMPONENT_PMAG40_B`] = 'PMAG 40r - Black', + [`COMPONENT_PMAGRANGER_B`] = 'PMAG 30r with Rangerplate - Black', + [`COMPONENT_PMAGLINK_B`] = 'PMAG 60r "Maglinked" - Black', + [`COMPONENT_PMAGLINK_C`] = 'PMAG 60r "Maglinked" - Coyote', + [`COMPONENT_BCM_B`] = 'BCM Vertical Grip Mod 3 - Black', + [`COMPONENT_BCM_OD`] = 'BCM Vertical Grip Mod 3 - OD', + [`COMPONENT_BCM_C`] = 'BCM Vertical Grip Mod 3 - Coyote', + [`COMPONENT_SFS16_B`] = 'SureFire ScoutLight w/ Single Switch', + [`COMPONENT_PEQ16_B`] = 'SureFire ScoutLight & PEQ-15A w/ Double Switch - Black', + [`COMPONENT_PEQ16_C`] = 'SureFire ScoutLight & PEQ-15A w/ Double Switch - Coyote', + [`COMPONENT_SOCOMSUP16_B`] = 'SOCOM556-RC2 Suppressor' + } + }, + + [`weapon_dd16_od`] = { + name = 'DDM4V7 16 OD', + ammo = 'AMMO_RIFLE', + components = { + [`COMPONENT_PRO_B`] = 'Aimpoint Pro Red Dot Sight - Black', + [`COMPONENT_PRO_OD`] = 'Aimpoint Pro Red Dot Sight - OD', + [`COMPONENT_PRO_C`] = 'Aimpoint Pro Red Dot Sight - Coyote', + [`COMPONENT_EXPS34_B`] = 'EOTech EXPS3-4 Holographic Sight - Black', + [`COMPONENT_EXPS34_C`] = 'EOTech EXPS3-4 Holographic Sight - Coyote', + [`COMPONENT_HHSVO_B`] = 'EOTech HHS V Holographic Sight w/ Magnifier Open (Blk)', + [`COMPONENT_HHSVO_C`] = 'EOTech HHS V Holographic Sight w/ Magnifier Open (C)', + [`COMPONENT_HHSVC_B`] = 'EOTech HHS V Holographic Sight w/ Magnifier Closed (Blk)', + [`COMPONENT_HHSVC_C`] = 'EOTech HHS V Holographic Sight w/ Magnifier Closed (C)', + [`COMPONENT_VUDU_1X`] = 'EOTech Vudu 1x', + [`COMPONENT_PMAG30_B`] = 'PMAG 30r - Black', + [`COMPONENT_PMAG30_C`] = 'PMAG 30r - Coyote', + [`COMPONENT_PMAG40_B`] = 'PMAG 40r - Black', + [`COMPONENT_PMAGRANGER_B`] = 'PMAG 30r with Rangerplate - Black', + [`COMPONENT_PMAGLINK_B`] = 'PMAG 60r "Maglinked" - Black', + [`COMPONENT_PMAGLINK_C`] = 'PMAG 60r "Maglinked" - Coyote', + [`COMPONENT_BCM_B`] = 'BCM Vertical Grip Mod 3 - Black', + [`COMPONENT_BCM_OD`] = 'BCM Vertical Grip Mod 3 - OD', + [`COMPONENT_BCM_C`] = 'BCM Vertical Grip Mod 3 - Coyote', + [`COMPONENT_SFS16_B`] = 'SureFire ScoutLight w/ Single Switch', + [`COMPONENT_PEQ16_B`] = 'SureFire ScoutLight & PEQ-15A w/ Double Switch - Black', + [`COMPONENT_PEQ16_C`] = 'SureFire ScoutLight & PEQ-15A w/ Double Switch - Coyote', + [`COMPONENT_SOCOMSUP16_B`] = 'SOCOM556-RC2 Suppressor' + } + }, + + [`weapon_dd16_c`] = { + name = 'DDM4V7 16 Coyote', + ammo = 'AMMO_RIFLE', + components = { + [`COMPONENT_PRO_B`] = 'Aimpoint Pro Red Dot Sight - Black', + [`COMPONENT_PRO_OD`] = 'Aimpoint Pro Red Dot Sight - OD', + [`COMPONENT_PRO_C`] = 'Aimpoint Pro Red Dot Sight - Coyote', + [`COMPONENT_EXPS34_B`] = 'EOTech EXPS3-4 Holographic Sight - Black', + [`COMPONENT_EXPS34_C`] = 'EOTech EXPS3-4 Holographic Sight - Coyote', + [`COMPONENT_HHSVO_B`] = 'EOTech HHS V Holographic Sight w/ Magnifier Open (Blk)', + [`COMPONENT_HHSVO_C`] = 'EOTech HHS V Holographic Sight w/ Magnifier Open (C)', + [`COMPONENT_HHSVC_B`] = 'EOTech HHS V Holographic Sight w/ Magnifier Closed (Blk)', + [`COMPONENT_HHSVC_C`] = 'EOTech HHS V Holographic Sight w/ Magnifier Closed (C)', + [`COMPONENT_VUDU_1X`] = 'EOTech Vudu 1x', + [`COMPONENT_PMAG30_B`] = 'PMAG 30r - Black', + [`COMPONENT_PMAG30_C`] = 'PMAG 30r - Coyote', + [`COMPONENT_PMAG40_B`] = 'PMAG 40r - Black', + [`COMPONENT_PMAGRANGER_B`] = 'PMAG 30r with Rangerplate - Black', + [`COMPONENT_PMAGLINK_B`] = 'PMAG 60r "Maglinked" - Black', + [`COMPONENT_PMAGLINK_C`] = 'PMAG 60r "Maglinked" - Coyote', + [`COMPONENT_BCM_B`] = 'BCM Vertical Grip Mod 3 - Black', + [`COMPONENT_BCM_OD`] = 'BCM Vertical Grip Mod 3 - OD', + [`COMPONENT_BCM_C`] = 'BCM Vertical Grip Mod 3 - Coyote', + [`COMPONENT_SFS16_B`] = 'SureFire ScoutLight w/ Single Switch', + [`COMPONENT_PEQ16_B`] = 'SureFire ScoutLight & PEQ-15A w/ Double Switch - Black', + [`COMPONENT_PEQ16_C`] = 'SureFire ScoutLight & PEQ-15A w/ Double Switch - Coyote', + [`COMPONENT_SOCOMSUP16_B`] = 'SOCOM556-RC2 Suppressor' + } + }, +} \ No newline at end of file diff --git a/resources/thinline_assets/weapon_names.lua b/resources/thinline_assets/weapon_names.lua new file mode 100644 index 000000000..e66536494 --- /dev/null +++ b/resources/thinline_assets/weapon_names.lua @@ -0,0 +1,12 @@ +CreateThread(function() + -- DDM4V7 + AddTextEntry('0x06B20B80', 'DDM4V7 16 OD') + AddTextEntry('0x08376FE4', 'DDM4V7 14.5 OD') + AddTextEntry('0x1DF285C2', 'DDM4V7 11.5 Coyote') + AddTextEntry('0x2B49206F', 'DDM4V7 11.5 Black') + AddTextEntry('0x2CC7FAA5', 'DDM4V7 14.5 Coyote') + AddTextEntry('0x2DB6D560', 'DDM4V7 11.5 OD') + AddTextEntry('0x3E7D9E10', 'DDM4V7 14.5 Black') + AddTextEntry('0x162A2B54', 'DDM4V7 16 Black') + AddTextEntry('0xE1B14263', 'DDM4V7 16 Coyote') +end) diff --git a/resources/tls_ddm4v7/fxmanifest.lua b/resources/tls_ddm4v7/fxmanifest.lua new file mode 100644 index 000000000..21aa8cdb8 --- /dev/null +++ b/resources/tls_ddm4v7/fxmanifest.lua @@ -0,0 +1,16 @@ +fx_version 'cerulean' +games {'gta5'} + +files { + '**/pedpersonality.meta', + '**/weaponanimations.meta', + '**/weaponarchetypes.meta', + '**/weaponcomponents.meta', + '**/weapons.meta', +} + +data_file 'PED_PERSONALITY_FILE' '**/pedpersonality.meta' +data_file 'WEAPON_ANIMATIONS_FILE' '**/weaponanimations.meta' +data_file 'WEAPON_METADATA_FILE' '**/weaponarchetypes.meta' +data_file 'WEAPONCOMPONENTSINFO_FILE' '**/weaponcomponents.meta' +data_file 'WEAPONINFO_FILE' '**/weapons.meta' \ No newline at end of file diff --git a/resources/tls_ddm4v7/meta/pedpersonality.meta b/resources/tls_ddm4v7/meta/pedpersonality.meta new file mode 100644 index 000000000..2aa208f54 --- /dev/null +++ b/resources/tls_ddm4v7/meta/pedpersonality.meta @@ -0,0 +1,524 @@ + + + + + + UNHOLSTER_UNARMED + + + + WEAPON_DD11_B + WEAPON_DD11_OD + WEAPON_DD11_C + WEAPON_DD14_B + WEAPON_DD14_OD + WEAPON_DD14_C + WEAPON_DD16_B + WEAPON_DD16_OD + WEAPON_DD16_C + + unarmed_holster_2h + + + + + UNHOLSTER_2H_MELEE + + + + WEAPON_DD11_B + WEAPON_DD11_OD + WEAPON_DD11_C + WEAPON_DD14_B + WEAPON_DD14_OD + WEAPON_DD14_C + WEAPON_DD16_B + WEAPON_DD16_OD + WEAPON_DD16_C + + 2h_melee_holster_2h + + + + + UNHOLSTER_1H + + + + WEAPON_DD11_B + WEAPON_DD11_OD + WEAPON_DD11_C + WEAPON_DD14_B + WEAPON_DD14_OD + WEAPON_DD14_C + WEAPON_DD16_B + WEAPON_DD16_OD + WEAPON_DD16_C + + 1h_holster_2h + + + + + UNHOLSTER_2H + + + + WEAPON_DD11_B + WEAPON_DD11_OD + WEAPON_DD11_C + WEAPON_DD14_B + WEAPON_DD14_OD + WEAPON_DD14_C + WEAPON_DD16_B + WEAPON_DD16_OD + WEAPON_DD16_C + + 2h_holster_2h + + + + + UNHOLSTER_MINIGUN + + + + WEAPON_DD11_B + WEAPON_DD11_OD + WEAPON_DD11_C + WEAPON_DD14_B + WEAPON_DD14_OD + WEAPON_DD14_C + WEAPON_DD16_B + WEAPON_DD16_OD + WEAPON_DD16_C + + mini_holster_2h + + + + + UNHOLSTER_UNARMED_STEALTH + + + + WEAPON_DD11_B + WEAPON_DD11_OD + WEAPON_DD11_C + WEAPON_DD14_B + WEAPON_DD14_OD + WEAPON_DD14_C + WEAPON_DD16_B + WEAPON_DD16_OD + WEAPON_DD16_C + + unarmed_holster_2h + + + + + UNHOLSTER_2H_MELEE_STEALTH + + + + WEAPON_DD11_B + WEAPON_DD11_OD + WEAPON_DD11_C + WEAPON_DD14_B + WEAPON_DD14_OD + WEAPON_DD14_C + WEAPON_DD16_B + WEAPON_DD16_OD + WEAPON_DD16_C + + unarmed_holster_2h + + + + + UNHOLSTER_1H_STEALTH + + + + WEAPON_DD11_B + WEAPON_DD11_OD + WEAPON_DD11_C + WEAPON_DD14_B + WEAPON_DD14_OD + WEAPON_DD14_C + WEAPON_DD16_B + WEAPON_DD16_OD + WEAPON_DD16_C + + 1h_holster_2h + + + + + UNHOLSTER_2H_STEALTH + + + + WEAPON_DD11_B + WEAPON_DD11_OD + WEAPON_DD11_C + WEAPON_DD14_B + WEAPON_DD14_OD + WEAPON_DD14_C + WEAPON_DD16_B + WEAPON_DD16_OD + WEAPON_DD16_C + + 2h_holster_2h + + + + + + + DEFAULT_ACTION + + + + + WEAPON_DD11_B + WEAPON_DD11_OD + WEAPON_DD11_C + WEAPON_DD14_B + WEAPON_DD14_OD + WEAPON_DD14_C + WEAPON_DD16_B + WEAPON_DD16_OD + WEAPON_DD16_C + + + + move_action@p_m_zero@armed@core + move_action@p_m_zero@armed@2H@upper + UpperbodyAndIk_filter + + + + + + MOVE_ACTION@GENERIC@TRANS@2H + + + MOVE_ACTION@P_M_ZERO@HOLSTER + + + + + + + + + WEAPON_DD11_B + WEAPON_DD11_OD + WEAPON_DD11_C + WEAPON_DD14_B + WEAPON_DD14_OD + WEAPON_DD14_C + WEAPON_DD16_B + WEAPON_DD16_OD + WEAPON_DD16_C + + + + move_stealth@p_m_zero@unarmed@core + move_stealth@p_m_zero@2h@upper + UpperbodyAndIk_filter + + + + + + move_stealth@generic@trans@2h + + + move_stealth@p_m_zero@holster + + + + + + + + + MP_FEMALE_ACTION + + + + + WEAPON_DD11_B + WEAPON_DD11_OD + WEAPON_DD11_C + WEAPON_DD14_B + WEAPON_DD14_OD + WEAPON_DD14_C + WEAPON_DD16_B + WEAPON_DD16_OD + WEAPON_DD16_C + + + + move_action@p_m_zero@armed@core + move_action@mp_female@armed@2H@upper + UpperbodyAndIk_filter + + + + + + MOVE_ACTION@MP_FEMALE@ARMED@2H@TRANS + + + MOVE_ACTION@P_M_ZERO@HOLSTER + + + + + + + + + WEAPON_DD11_B + WEAPON_DD11_OD + WEAPON_DD11_C + WEAPON_DD14_B + WEAPON_DD14_OD + WEAPON_DD14_C + WEAPON_DD16_B + WEAPON_DD16_OD + WEAPON_DD16_C + + + + move_stealth@p_m_zero@unarmed@core + move_stealth@p_m_zero@2h@upper + UpperbodyAndIk_filter + + + + + + MOVE_STEALTH@MP_FEMALE@2H@TRANS + + + move_stealth@p_m_zero@holster + + + + + + + + + MICHAEL_ACTION + + + + + WEAPON_DD11_B + WEAPON_DD11_OD + WEAPON_DD11_C + WEAPON_DD14_B + WEAPON_DD14_OD + WEAPON_DD14_C + WEAPON_DD16_B + WEAPON_DD16_OD + WEAPON_DD16_C + + + + move_action@p_m_zero@armed@core + move_action@p_m_zero@armed@2H@upper + UpperbodyAndIk_filter + + + + + + MOVE_ACTION@P_M_ZERO@ARMED@2H@TRANS@A + + + MOVE_ACTION@P_M_ZERO@HOLSTER + + + + + + + + + WEAPON_DD11_B + WEAPON_DD11_OD + WEAPON_DD11_C + WEAPON_DD14_B + WEAPON_DD14_OD + WEAPON_DD14_C + WEAPON_DD16_B + WEAPON_DD16_OD + WEAPON_DD16_C + + + + move_stealth@p_m_zero@unarmed@core + move_stealth@p_m_zero@2h@upper + UpperbodyAndIk_filter + + + + + + move_stealth@p_m_zero@2h@trans@a + + + move_stealth@p_m_zero@holster + + + + + + + + + FRANKLIN_ACTION + + + + + WEAPON_DD11_B + WEAPON_DD11_OD + WEAPON_DD11_C + WEAPON_DD14_B + WEAPON_DD14_OD + WEAPON_DD14_C + WEAPON_DD16_B + WEAPON_DD16_OD + WEAPON_DD16_C + + + + move_action@p_m_one@armed@core + move_action@P_M_ONE@armed@2H@upper + UpperbodyAndIk_filter + + + + + + MOVE_ACTION@P_M_ONE@ARMED@2H@TRANS@A + + + MOVE_ACTION@P_M_ONE@HOLSTER + + + + + + + + + WEAPON_DD11_B + WEAPON_DD11_OD + WEAPON_DD11_C + WEAPON_DD14_B + WEAPON_DD14_OD + WEAPON_DD14_C + WEAPON_DD16_B + WEAPON_DD16_OD + WEAPON_DD16_C + + + + move_stealth@p_m_one@unarmed@core + move_stealth@p_m_one@2h@upper + UpperbodyAndIk_filter + + + + + + move_stealth@p_m_one@2h@trans@a + + + MOVE_STEALTH@P_M_ONE@HOLSTER + + + + + + + + + TREVOR_ACTION + + + + + WEAPON_DD11_B + WEAPON_DD11_OD + WEAPON_DD11_C + WEAPON_DD14_B + WEAPON_DD14_OD + WEAPON_DD14_C + WEAPON_DD16_B + WEAPON_DD16_OD + WEAPON_DD16_C + + + + move_action@p_m_two@armed@core + move_action@p_m_two@armed@2H@upper + UpperbodyAndIk_filter + + + + + + MOVE_ACTION@P_M_TWO@ARMED@2H@TRANS@A + + + MOVE_ACTION@P_M_TWO@HOLSTER + + + + + + + + + WEAPON_DD11_B + WEAPON_DD11_OD + WEAPON_DD11_C + WEAPON_DD14_B + WEAPON_DD14_OD + WEAPON_DD14_C + WEAPON_DD16_B + WEAPON_DD16_OD + WEAPON_DD16_C + + + + move_stealth@p_m_two@unarmed@core + move_stealth@p_m_two@2h@upper + UpperbodyAndIk_filter + + + + + + move_stealth@p_m_two@2h@trans@a + + + MOVE_STEALTH@P_M_TWO@HOLSTER + + + + + + + + + \ No newline at end of file diff --git a/resources/tls_ddm4v7/meta/weaponanimations.meta b/resources/tls_ddm4v7/meta/weaponanimations.meta new file mode 100644 index 000000000..5f54d2ad7 --- /dev/null +++ b/resources/tls_ddm4v7/meta/weaponanimations.meta @@ -0,0 +1,3227 @@ + + + + + + Default + + + + + + + move_ballistic_2h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + weapons@holster_fat_2h + + + + + + + + + move_ballistic_2h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + weapons@holster_fat_2h + + + + + + + + + move_ballistic_2h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + weapons@holster_fat_2h + + + + + + + + + move_ballistic_2h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + weapons@holster_fat_2h + + + + + + + + + move_ballistic_2h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + weapons@holster_fat_2h + + + + + + + + + move_ballistic_2h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + weapons@holster_fat_2h + + + + + + + + + move_ballistic_2h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + weapons@holster_fat_2h + + + + + + + + + move_ballistic_2h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + weapons@holster_fat_2h + + + + + + + + + move_ballistic_2h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + weapons@holster_fat_2h + + + + + + + + + cover@move@ai@base@2h + cover@move@extra@2h + cover@move@ai@base@2h + Cover_Wpn_RifleLo + weapons@heavy@rpg + BothArms_filter + + + + + weapons@rifle@lo@carbine + weapons@rifle@lo@carbine_str + + weapons@rifle@lo@carbine@stealth + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_core + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + Wpn_Thrown_Grenade_Aiming_Rifle + + + + cover@move@ai@base@2h + cover@move@extra@2h + cover@move@ai@base@2h + Cover_Wpn_RifleLo + weapons@heavy@rpg + BothArms_filter + + + + + weapons@rifle@lo@carbine + weapons@rifle@lo@carbine_str + + weapons@rifle@lo@carbine@stealth + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_core + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + Wpn_Thrown_Grenade_Aiming_Rifle + + + + cover@move@ai@base@2h + cover@move@extra@2h + cover@move@ai@base@2h + Cover_Wpn_RifleLo + weapons@heavy@rpg + BothArms_filter + + + + + weapons@rifle@lo@carbine + weapons@rifle@lo@carbine_str + + weapons@rifle@lo@carbine@stealth + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_core + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + Wpn_Thrown_Grenade_Aiming_Rifle + + + + cover@move@ai@base@2h + cover@move@extra@2h + cover@move@ai@base@2h + Cover_Wpn_RifleLo + weapons@heavy@rpg + BothArms_filter + + + + + weapons@rifle@lo@carbine + weapons@rifle@lo@carbine_str + + weapons@rifle@lo@carbine@stealth + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_core + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + Wpn_Thrown_Grenade_Aiming_Rifle + + + + cover@move@ai@base@2h + cover@move@extra@2h + cover@move@ai@base@2h + Cover_Wpn_RifleLo + weapons@heavy@rpg + BothArms_filter + + + + + weapons@rifle@lo@carbine + weapons@rifle@lo@carbine_str + + weapons@rifle@lo@carbine@stealth + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_core + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + Wpn_Thrown_Grenade_Aiming_Rifle + + + + cover@move@ai@base@2h + cover@move@extra@2h + cover@move@ai@base@2h + Cover_Wpn_RifleLo + weapons@heavy@rpg + BothArms_filter + + + + + weapons@rifle@lo@carbine + weapons@rifle@lo@carbine_str + + weapons@rifle@lo@carbine@stealth + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_core + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + Wpn_Thrown_Grenade_Aiming_Rifle + + + + cover@move@ai@base@2h + cover@move@extra@2h + cover@move@ai@base@2h + Cover_Wpn_RifleLo + weapons@heavy@rpg + BothArms_filter + + + + + weapons@rifle@lo@carbine + weapons@rifle@lo@carbine_str + + weapons@rifle@lo@carbine@stealth + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_core + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + Wpn_Thrown_Grenade_Aiming_Rifle + + + + cover@move@ai@base@2h + cover@move@extra@2h + cover@move@ai@base@2h + Cover_Wpn_RifleLo + weapons@heavy@rpg + BothArms_filter + + + + + weapons@rifle@lo@carbine + weapons@rifle@lo@carbine_str + + weapons@rifle@lo@carbine@stealth + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_core + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + Wpn_Thrown_Grenade_Aiming_Rifle + + + + cover@move@ai@base@2h + cover@move@extra@2h + cover@move@ai@base@2h + Cover_Wpn_RifleLo + weapons@heavy@rpg + BothArms_filter + + + + + weapons@rifle@lo@carbine + weapons@rifle@lo@carbine_str + + weapons@rifle@lo@carbine@stealth + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_core + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + Wpn_Thrown_Grenade_Aiming_Rifle + + + + + + Gang + + + + + + + weapons@rifle@lo@carbine@f + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + weapons@rifle@lo@carbine@f + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + weapons@rifle@lo@carbine@f + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + weapons@rifle@lo@carbine@f + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + weapons@rifle@lo@carbine@f + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + weapons@rifle@lo@carbine@f + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + weapons@rifle@lo@carbine@f + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + weapons@rifle@lo@carbine@f + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + weapons@rifle@lo@carbine@f + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Default + + + move_m@generic + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_idle@generic@assault_rifle@shared@core + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_stealth@generic@assault_rifle@carbine_rifle + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_idle + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_idle + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@a + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@b + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@c + + weapons@first_person@aim_idle@remote_clone@assault_rifle@shared@core + + + move_m@generic + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_idle@generic@assault_rifle@shared@core + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_stealth@generic@assault_rifle@carbine_rifle + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_idle + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_idle + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@a + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@b + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@c + + weapons@first_person@aim_idle@remote_clone@assault_rifle@shared@core + + + move_m@generic + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_idle@generic@assault_rifle@shared@core + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_stealth@generic@assault_rifle@carbine_rifle + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_idle + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_idle + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@a + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@b + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@c + + weapons@first_person@aim_idle@remote_clone@assault_rifle@shared@core + + + move_m@generic + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_idle@generic@assault_rifle@shared@core + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_stealth@generic@assault_rifle@carbine_rifle + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_idle + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_idle + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@a + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@b + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@c + + weapons@first_person@aim_idle@remote_clone@assault_rifle@shared@core + + + move_m@generic + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_idle@generic@assault_rifle@shared@core + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_stealth@generic@assault_rifle@carbine_rifle + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_idle + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_idle + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@a + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@b + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@c + + weapons@first_person@aim_idle@remote_clone@assault_rifle@shared@core + + + move_m@generic + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_idle@generic@assault_rifle@shared@core + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_stealth@generic@assault_rifle@carbine_rifle + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_idle + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_idle + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@a + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@b + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@c + + weapons@first_person@aim_idle@remote_clone@assault_rifle@shared@core + + + move_m@generic + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_idle@generic@assault_rifle@shared@core + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_stealth@generic@assault_rifle@carbine_rifle + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_idle + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_idle + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@a + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@b + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@c + + weapons@first_person@aim_idle@remote_clone@assault_rifle@shared@core + + + move_m@generic + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_idle@generic@assault_rifle@shared@core + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_stealth@generic@assault_rifle@carbine_rifle + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_idle + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_idle + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@a + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@b + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@c + + weapons@first_person@aim_idle@remote_clone@assault_rifle@shared@core + + + move_m@generic + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_idle@generic@assault_rifle@shared@core + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_stealth@generic@assault_rifle@carbine_rifle + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_idle + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_idle + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@a + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@b + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@c + + weapons@first_person@aim_idle@remote_clone@assault_rifle@shared@core + + + + + Default + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_lt@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_lt@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt + + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth + + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@a + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@b + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@c + + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_lt@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_lt@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt + + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth + + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@a + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@b + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@c + + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_lt@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_lt@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt + + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth + + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@a + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@b + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@c + + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_lt@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_lt@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt + + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth + + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@a + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@b + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@c + + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_lt@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_lt@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt + + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth + + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@a + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@b + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@c + + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_lt@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_lt@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt + + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth + + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@a + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@b + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@c + + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_lt@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_lt@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt + + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth + + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@a + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@b + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@c + + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_lt@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_lt@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt + + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth + + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@a + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@b + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@c + + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_lt@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_lt@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt + + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth + + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@a + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@b + weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@c + + + + + + Default + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng + + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth + + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@a + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@b + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@c + + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng + + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth + + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@a + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@b + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@c + + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng + + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth + + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@a + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@b + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@c + + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng + + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth + + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@a + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@b + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@c + + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng + + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth + + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@a + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@b + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@c + + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng + + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth + + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@a + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@b + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@c + + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng + + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth + + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@a + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@b + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@c + + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng + + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth + + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@a + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@b + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@c + + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng + + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth + + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@a + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@b + weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@c + + + + + + Default + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_scope@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_scope@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope + + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_scope@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_scope@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope + + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_scope@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_scope@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope + + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_scope@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_scope@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope + + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_scope@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_scope@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope + + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_scope@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_scope@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope + + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_scope@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_scope@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope + + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_scope@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_scope@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope + + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth + + + cover@first_person@move@base@2h + cover@first_person@move@extra@2h + cover@move@ai@base@2h + Cover_FirstPerson_Wpn_RifleLo + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + BothArms_filter + + + move_ped_strafing_stealth + + weapons@first_person@aim_scope@generic@assault_rifle@carbine_rifle@w_fire + weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str + + weapons@first_person@aim_scope@generic@assault_rifle@carbine_rifle@w_fire + + + + + + combat_fire_variations_rifle + + combat_aim_turns_rifle + + melee@rifle@streamed_fps + + + + + reaction@shellshock@2h + MOVE_JUMP@WEAPONS@RIFLE + MOVE_FALL@WEAPONS@RIFLE + weapons@rifle@ + + + + + + + + + weapons@first_person@aim_rng@generic@assault_rifle@shared@core + + weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope + weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope + weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope + + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope + weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope + weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth + + + + + + diff --git a/resources/tls_ddm4v7/meta/weaponarchetypes.meta b/resources/tls_ddm4v7/meta/weaponarchetypes.meta new file mode 100644 index 000000000..71dc5471c --- /dev/null +++ b/resources/tls_ddm4v7/meta/weaponarchetypes.meta @@ -0,0 +1,247 @@ + + + + + + dd11_b + dd11_b + NULL + + + + dd11_od + dd11_od + NULL + + + + dd11_c + dd11_c + NULL + + + + dd14_b + dd14_b + NULL + + + + dd14_od + dd14_od + NULL + + + + dd14_c + dd14_c + NULL + + + + dd16_b + dd16_b + NULL + + + + dd16_od + dd16_od + NULL + + + + dd16_c + dd16_c + NULL + + + + pro_b + pro_b + NULL + + + + pro_od + pro_od + NULL + + + + pro_c + pro_c + NULL + + + + pmag30_b + pmag30_b + NULL + + + + pmag30_c + pmag30_c + NULL + + + + pmag40_b + pmag40_b + NULL + + + + pmagranger_b + pmagranger_b + NULL + + + + pmaglink_b + pmaglink_b + NULL + + + + pmaglink_c + pmaglink_c + NULL + + + + sfs11_b + sfs11_b + NULL + + + + sfs14_b + sfs14_b + NULL + + + + sfs16_b + sfs16_b + NULL + + + + bcm_b + bcm_b + NULL + + + + bcm_od + bcm_od + NULL + + + + bcm_c + bcm_c + NULL + + + + peq11_b + peq11_b + NULL + + + + peq11_c + peq11_c + NULL + + + + peq14_b + peq14_b + NULL + + + + peq14_c + peq14_c + NULL + + + + peq16_b + peq16_b + NULL + + + + peq16_c + peq16_c + NULL + + + + exps34_b + exps34_b + NULL + + + + exps34_c + exps34_c + NULL + + + + hhsvc_b + hhsvc_b + NULL + + + + hhsvc_c + hhsvc_c + NULL + + + + hhsvo_b + hhsvo_b + NULL + + + + hhsvo_c + hhsvo_c + NULL + + + + vudu_1x + vudu_1x + NULL + + + + socomsup11_b + socomsup11_b + NULL + + + + socomsup14_b + socomsup14_b + NULL + + + + socomsup16_b + socomsup16_b + NULL + + + + + diff --git a/resources/tls_ddm4v7/meta/weaponcomponents.meta b/resources/tls_ddm4v7/meta/weaponcomponents.meta new file mode 100644 index 000000000..43f241cd3 --- /dev/null +++ b/resources/tls_ddm4v7/meta/weaponcomponents.meta @@ -0,0 +1,845 @@ + + + + + + COMPONENT_PMAG30_B + pmag30_b + WCT_CLIP1 + WCD_CR_CLIP1 + AAPClip + + + + + + + + + + + + + + COMPONENT_PMAG30_C + pmag30_c + WCT_CLIP1 + WCD_CR_CLIP1 + AAPClip + + + + + + + + + + + + + + COMPONENT_PMAG40_B + pmag40_b + WCT_CLIP2 + WCD_CR_CLIP2 + AAPClip + + + + + + + + + + + + + + COMPONENT_PMAGRANGER_B + pmagranger_b + WCT_CLIP3 + WCD_CR_CLIP3 + AAPClip + + + + + + + + + + + + + + COMPONENT_PMAGLINK_B + pmaglink_b + WCT_CLIP4 + WCD_CR_CLIP4 + AAPClip + + + + + + + + + + + + + + COMPONENT_PMAGLINK_C + pmaglink_c + WCT_CLIP5 + WCD_CR_CLIP5 + AAPClip + + + + + + + + + + + + + + COMPONENT_PRO_B + pro_b + WCT_SCOPE_MED + WCD_SCOPE_MED + AAPScop + + + + + + + + + + + + + + + + + COMPONENT_PRO_OD + pro_od + WCT_SCOPE_MED + WCD_SCOPE_MED + AAPScop + + + + + + + + + + + + + + + + + COMPONENT_PRO_C + pro_c + WCT_SCOPE_MED + WCD_SCOPE_MED + AAPScop + + + + + + + + + + + + + + + + + COMPONENT_EXPS34_B + exps34_b + WCT_SCOPE_MED + WCD_SCOPE_MED + AAPScop + + + + + + + + + + + + + + + + + COMPONENT_EXPS34_C + exps34_c + WCT_SCOPE_MED + WCD_SCOPE_MED + AAPScop + + + + + + + + + + + + + + + + + COMPONENT_HHSVC_B + hhsvc_b + WCT_SCOPE_MED + WCD_SCOPE_MED + AAPScop + + + + + + + + + + + + + + + + + COMPONENT_HHSVC_C + hhsvc_c + WCT_SCOPE_MED + WCD_SCOPE_MED + AAPScop + + + + + + + + + + + + + + + + + COMPONENT_HHSVO_B + hhsvo_b + WCT_SCOPE_MED + WCD_SCOPE_MED + AAPScop + + + + + + + + + + + + + + + + + COMPONENT_HHSVO_C + hhsvo_c + WCT_SCOPE_MED + WCD_SCOPE_MED + AAPScop + + + + + + + + + + + + + + + + + COMPONENT_VUDU_1X + vudu_1x + WCT_SCOPE_MED + WCD_SCOPE_MED + AAPScop + + + + + + + + + + + + + + + + + COMPONENT_SFS11_B + sfs11_b + WCT_FLASH + WCD_FLASH + AAPFlsh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gun_FLMuzzle + Bulb_On + Bulb_Off + + + COMPONENT_SFS14_B + sfs14_b + WCT_FLASH + WCD_FLASH + AAPFlsh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gun_FLMuzzle + Bulb_On + Bulb_Off + + + COMPONENT_SFS16_B + sfs16_b + WCT_FLASH + WCD_FLASH + AAPFlsh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gun_FLMuzzle + Bulb_On + Bulb_Off + + + COMPONENT_BCM_B + bcm_b + WCT_GRIP + WCD_GRIP + AAPGrip + + + + + + + + + + + + + + COMPONENT_BCM_OD + bcm_od + WCT_GRIP + WCD_GRIP + AAPGrip + + + + + + + + + + + + + + COMPONENT_BCM_C + bcm_c + WCT_GRIP + WCD_GRIP + AAPGrip + + + + + + + + + + + + + + COMPONENT_PEQ11_B + peq11_b + WCT_FLASH + WCD_FLASH + AAPFlsh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gun_FLMuzzle + Bulb_On + Bulb_Off + + + COMPONENT_PEQ11_C + peq11_c + WCT_FLASH + WCD_FLASH + AAPFlsh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gun_FLMuzzle + Bulb_On + Bulb_Off + + + COMPONENT_PEQ14_B + peq14_b + WCT_FLASH + WCD_FLASH + AAPFlsh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gun_FLMuzzle + Bulb_On + Bulb_Off + + + COMPONENT_PEQ14_C + peq14_c + WCT_FLASH + WCD_FLASH + AAPFlsh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gun_FLMuzzle + Bulb_On + Bulb_Off + + + COMPONENT_PEQ16_B + peq16_b + WCT_FLASH + WCD_FLASH + AAPFlsh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gun_FLMuzzle + Bulb_On + Bulb_Off + + + COMPONENT_PEQ16_C + peq16_c + WCT_FLASH + WCD_FLASH + AAPFlsh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gun_FLMuzzle + Bulb_On + Bulb_Off + + + COMPONENT_SOCOMSUP11_B + socomsup11_b + WCT_SUPP + WCD_AR_SUPP + AAPSupp + + + + + + + + + + + + Gun_SuMuzzle + muz_pistol_silencer + + + COMPONENT_SOCOMSUP14_B + socomsup14_b + WCT_SUPP + WCD_AR_SUPP + AAPSupp + + + + + + + + + + + + Gun_SuMuzzle + muz_pistol_silencer + + + COMPONENT_SOCOMSUP16_B + socomsup16_b + WCT_SUPP + WCD_AR_SUPP + AAPSupp + + + + + + + + + + + + Gun_SuMuzzle + muz_pistol_silencer + + + + + diff --git a/resources/tls_ddm4v7/meta/weapons.meta b/resources/tls_ddm4v7/meta/weapons.meta new file mode 100644 index 000000000..f00a1a336 --- /dev/null +++ b/resources/tls_ddm4v7/meta/weapons.meta @@ -0,0 +1,4347 @@ + + + + + + + + + SLOT_WEAPON_DD11_B + + + + SLOT_WEAPON_DD11_OD + + + + SLOT_WEAPON_DD11_C + + + + SLOT_WEAPON_DD14_B + + + + SLOT_WEAPON_DD14_OD + + + + SLOT_WEAPON_DD14_C + + + + SLOT_WEAPON_DD16_B + + + + SLOT_WEAPON_DD16_OD + + + + SLOT_WEAPON_DD16_C + + + + + + + + + WEAPON_DD11_B + dd11_b + + SLOT_WEAPON_DD11_B + BULLET + + DONTCARE + DONTCARE + DONTCARE + DONTCARE + DONTCARE + DONTCARE + + INSTANT_HIT + WHEEL_RIFLE + GROUP_RIFLE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BONETAG_HEAD + + + + + BONETAG_NECK + + + + + BONETAG_L_THIGH + + + + + BONETAG_R_THIGH + + + + + BONETAG_L_CALF + + + + + BONETAG_R_CALF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPON_EFFECT_GROUP_RIFLE_ASSAULT + muz_assault_rifle + muz_alternate_star + muz_assault_rifle_fp + + muz_smoking_barrel + muz_smoking_barrel_fp + + + + + eject_auto + eject_auto_fp + bullet_tracer + BulletLarge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DEFAULT_THIRD_PERSON_PED_AIM_CAMERA + + + DEFAULT_THIRD_PERSON_PED_AIM_IN_COVER_CAMERA + + DEFAULT_THIRD_PERSON_PED_RUN_AND_GUN_CAMERA + DEFAULT_THIRD_PERSON_PED_CINEMATIC_SHOOTING_CAMERA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + COMPONENT_PRO_B + + + + + + COMPONENT_PRO_OD + + + + + + COMPONENT_PRO_C + + + + + + COMPONENT_EXPS34_B + + + + + + COMPONENT_EXPS34_C + + + + + + COMPONENT_HHSVO_B + + + + + + COMPONENT_HHSVO_C + + + + + + COMPONENT_HHSVC_B + + + + + + COMPONENT_HHSVC_C + + + + + + COMPONENT_VUDU_1X + + + + + + + ASSAULT_RIFLE_RECOIL_SHAKE + FPS_ASSAULT_RIFLE_RECOIL_SHAKE + DEFAULT_THIRD_PERSON_ACCURACY_OFFSET_SHAKE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPONTYPE_RIFLE + + PICKUP_WEAPON_DD11_B + PICKUP_AMMO_BULLET_MP + WEAPON_DD11_B + MMI_2Handed + WEAPON_STAT_DD11_B + + + Automatic + + + WAPClip + + + COMPONENT_PMAG30_B + + + + COMPONENT_PMAG30_C + + + + COMPONENT_PMAG40_B + + + + COMPONENT_PMAGRANGER_B + + + + COMPONENT_PMAGLINK_B + + + + COMPONENT_PMAGLINK_C + + + + + + WAPFlshLasr + + + COMPONENT_SFS11_B + + + + COMPONENT_PEQ11_B + + + + COMPONENT_PEQ11_C + + + + + + WAPScop + + + COMPONENT_PRO_B + + + + COMPONENT_PRO_OD + + + + COMPONENT_PRO_C + + + + COMPONENT_EXPS34_B + + + + COMPONENT_EXPS34_C + + + + COMPONENT_HHSVC_B + + + + COMPONENT_HHSVC_C + + + + COMPONENT_HHSVO_B + + + + COMPONENT_HHSVO_C + + + + COMPONENT_VUDU_1X + + + + + + WAPSupp + + + COMPONENT_SOCOMSUP11_B + + + + + + WAPGrip + + + COMPONENT_BCM_B + + + + COMPONENT_BCM_OD + + + + COMPONENT_BCM_C + + + + + + + + CarriedInHand Automatic Gun CanLockonOnFoot CanLockonInVehicle CanFreeAim TwoHanded AnimReload AnimCrouchFire UsableOnFoot UsableInCover AllowEarlyExitFromFireAnimAfterBulletFired NoLeftHandIKWhenBlocked AllowCloseQuarterKills HasLowCoverReloads HasLowCoverSwaps LongWeapon UseFPSAimIK UseFPSSecondaryMotion FPSOnlyExitFireAnimAfterRecoilEnds + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPON_DD11_OD + dd11_OD + + SLOT_WEAPON_DD11_OD + BULLET + + DONTCARE + DONTCARE + DONTCARE + DONTCARE + DONTCARE + DONTCARE + + INSTANT_HIT + WHEEL_RIFLE + GROUP_RIFLE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BONETAG_HEAD + + + + + BONETAG_NECK + + + + + BONETAG_L_THIGH + + + + + BONETAG_R_THIGH + + + + + BONETAG_L_CALF + + + + + BONETAG_R_CALF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPON_EFFECT_GROUP_RIFLE_ASSAULT + muz_assault_rifle + muz_alternate_star + muz_assault_rifle_fp + + muz_smoking_barrel + muz_smoking_barrel_fp + + + + + eject_auto + eject_auto_fp + bullet_tracer + BulletLarge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DEFAULT_THIRD_PERSON_PED_AIM_CAMERA + + + DEFAULT_THIRD_PERSON_PED_AIM_IN_COVER_CAMERA + + DEFAULT_THIRD_PERSON_PED_RUN_AND_GUN_CAMERA + DEFAULT_THIRD_PERSON_PED_CINEMATIC_SHOOTING_CAMERA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + COMPONENT_PRO_B + + + + + + COMPONENT_PRO_OD + + + + + + COMPONENT_PRO_C + + + + + + COMPONENT_EXPS34_B + + + + + + COMPONENT_EXPS34_C + + + + + + COMPONENT_HHSVO_B + + + + + + COMPONENT_HHSVO_C + + + + + + COMPONENT_HHSVC_B + + + + + + COMPONENT_HHSVC_C + + + + + + COMPONENT_VUDU_1X + + + + + + + ASSAULT_RIFLE_RECOIL_SHAKE + FPS_ASSAULT_RIFLE_RECOIL_SHAKE + DEFAULT_THIRD_PERSON_ACCURACY_OFFSET_SHAKE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPONTYPE_RIFLE + + PICKUP_WEAPON_DD11_OD + PICKUP_AMMO_BULLET_MP + WEAPON_DD11_OD + MMI_2Handed + WEAPON_STAT_DD11_OD + + + Automatic + + + WAPClip + + + COMPONENT_PMAG30_B + + + + COMPONENT_PMAG30_C + + + + COMPONENT_PMAG40_B + + + + COMPONENT_PMAGRANGER_B + + + + COMPONENT_PMAGLINK_B + + + + COMPONENT_PMAGLINK_C + + + + + + WAPFlshLasr + + + COMPONENT_SFS11_B + + + + COMPONENT_PEQ11_B + + + + COMPONENT_PEQ11_C + + + + + + WAPScop + + + COMPONENT_PRO_B + + + + COMPONENT_PRO_OD + + + + COMPONENT_PRO_C + + + + COMPONENT_EXPS34_B + + + + COMPONENT_XPS34_C + + + + COMPONENT_HHSVC_B + + + + COMPONENT_HHSVC_C + + + + COMPONENT_HHSVO_B + + + + COMPONENT_HHSVO_C + + + + COMPONENT_VUDU_1X + + + + + + WAPSupp + + + COMPONENT_SOCOMSUP11_B + + + + + + WAPGrip + + + COMPONENT_BCM_B + + + + COMPONENT_BCM_OD + + + + COMPONENT_BCM_C + + + + + + + + CarriedInHand Automatic Gun CanLockonOnFoot CanLockonInVehicle CanFreeAim TwoHanded AnimReload AnimCrouchFire UsableOnFoot UsableInCover AllowEarlyExitFromFireAnimAfterBulletFired NoLeftHandIKWhenBlocked AllowCloseQuarterKills HasLowCoverReloads HasLowCoverSwaps LongWeapon UseFPSAimIK UseFPSSecondaryMotion FPSOnlyExitFireAnimAfterRecoilEnds + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPON_DD11_C + dd11_c + + SLOT_WEAPON_DD11_C + BULLET + + DONTCARE + DONTCARE + DONTCARE + DONTCARE + DONTCARE + DONTCARE + + INSTANT_HIT + WHEEL_RIFLE + GROUP_RIFLE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BONETAG_HEAD + + + + + BONETAG_NECK + + + + + BONETAG_L_THIGH + + + + + BONETAG_R_THIGH + + + + + BONETAG_L_CALF + + + + + BONETAG_R_CALF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPON_EFFECT_GROUP_RIFLE_ASSAULT + muz_assault_rifle + muz_alternate_star + muz_assault_rifle_fp + + muz_smoking_barrel + muz_smoking_barrel_fp + + + + + eject_auto + eject_auto_fp + bullet_tracer + BulletLarge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DEFAULT_THIRD_PERSON_PED_AIM_CAMERA + + + DEFAULT_THIRD_PERSON_PED_AIM_IN_COVER_CAMERA + + DEFAULT_THIRD_PERSON_PED_RUN_AND_GUN_CAMERA + DEFAULT_THIRD_PERSON_PED_CINEMATIC_SHOOTING_CAMERA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + COMPONENT_PRO_B + + + + + + COMPONENT_PRO_OD + + + + + + COMPONENT_PRO_C + + + + + + COMPONENT_EXPS34_B + + + + + + COMPONENT_EXPS34_C + + + + + + COMPONENT_HHSVO_B + + + + + + COMPONENT_HHSVO_C + + + + + + COMPONENT_HHSVC_B + + + + + + COMPONENT_HHSVC_C + + + + + + COMPONENT_VUDU_1X + + + + + + + ASSAULT_RIFLE_RECOIL_SHAKE + FPS_ASSAULT_RIFLE_RECOIL_SHAKE + DEFAULT_THIRD_PERSON_ACCURACY_OFFSET_SHAKE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPONTYPE_RIFLE + + PICKUP_WEAPON_DD11_C + PICKUP_AMMO_BULLET_MP + WEAPON_DD11_C + MMI_2Handed + WEAPON_STAT_DD11_C + + + Automatic + + + WAPClip + + + COMPONENT_PMAG30_B + + + + COMPONENT_PMAG30_C + + + + COMPONENT_PMAG40_B + + + + COMPONENT_PMAGRANGER_B + + + + COMPONENT_PMAGLINK_B + + + + COMPONENT_PMAGLINK_C + + + + + + WAPFlshLasr + + + COMPONENT_SFS11_B + + + + COMPONENT_PEQ11_B + + + + COMPONENT_PEQ11_C + + + + + + WAPScop + + + COMPONENT_PRO_B + + + + COMPONENT_PRO_OD + + + + COMPONENT_PRO_C + + + + COMPONENT_EXPS34_B + + + + COMPONENT_EXPS34_C + + + + COMPONENT_HHSVC_B + + + + COMPONENT_HHSVC_C + + + + COMPONENT_HHSVO_B + + + + COMPONENT_HHSVO_C + + + + COMPONENT_VUDU_1X + + + + + + WAPSupp + + + COMPONENT_SOCOMSUP11_B + + + + + + WAPGrip + + + COMPONENT_BCM_B + + + + COMPONENT_BCM_OD + + + + COMPONENT_BCM_C + + + + + + + + CarriedInHand Automatic Gun CanLockonOnFoot CanLockonInVehicle CanFreeAim TwoHanded AnimReload AnimCrouchFire UsableOnFoot UsableInCover AllowEarlyExitFromFireAnimAfterBulletFired NoLeftHandIKWhenBlocked AllowCloseQuarterKills HasLowCoverReloads HasLowCoverSwaps LongWeapon UseFPSAimIK UseFPSSecondaryMotion FPSOnlyExitFireAnimAfterRecoilEnds + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPON_DD14_B + dd14_b + + SLOT_WEAPON_DD14_B + BULLET + + DONTCARE + DONTCARE + DONTCARE + DONTCARE + DONTCARE + DONTCARE + + INSTANT_HIT + WHEEL_RIFLE + GROUP_RIFLE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BONETAG_HEAD + + + + + BONETAG_NECK + + + + + BONETAG_L_THIGH + + + + + BONETAG_R_THIGH + + + + + BONETAG_L_CALF + + + + + BONETAG_R_CALF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPON_EFFECT_GROUP_RIFLE_ASSAULT + muz_assault_rifle + muz_alternate_star + muz_assault_rifle_fp + + muz_smoking_barrel + muz_smoking_barrel_fp + + + + + eject_auto + eject_auto_fp + bullet_tracer + BulletLarge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DEFAULT_THIRD_PERSON_PED_AIM_CAMERA + + + DEFAULT_THIRD_PERSON_PED_AIM_IN_COVER_CAMERA + + DEFAULT_THIRD_PERSON_PED_RUN_AND_GUN_CAMERA + DEFAULT_THIRD_PERSON_PED_CINEMATIC_SHOOTING_CAMERA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + COMPONENT_PRO_B + + + + + + COMPONENT_PRO_OD + + + + + + COMPONENT_PRO_C + + + + + + COMPONENT_EXPS34_B + + + + + + COMPONENT_EXPS34_C + + + + + + COMPONENT_HHSVO_B + + + + + + COMPONENT_HHSVO_C + + + + + + COMPONENT_HHSVC_B + + + + + + COMPONENT_HHSVC_C + + + + + + COMPONENT_VUDU_1X + + + + + + + ASSAULT_RIFLE_RECOIL_SHAKE + FPS_ASSAULT_RIFLE_RECOIL_SHAKE + DEFAULT_THIRD_PERSON_ACCURACY_OFFSET_SHAKE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPONTYPE_RIFLE + + PICKUP_WEAPON_DD14_B + PICKUP_AMMO_BULLET_MP + WEAPON_DD14_B + MMI_2Handed + WEAPON_STAT_DD14_B + + + Automatic + + + WAPClip + + + COMPONENT_PMAG30_B + + + + COMPONENT_PMAG30_C + + + + COMPONENT_PMAG40_B + + + + COMPONENT_PMAGRANGER_B + + + + COMPONENT_PMAGLINK_B + + + + COMPONENT_PMAGLINK_C + + + + + + WAPFlshLasr + + + COMPONENT_SFS14_B + + + + COMPONENT_PEQ14_B + + + + COMPONENT_PEQ14_C + + + + + + WAPScop + + + COMPONENT_PRO_B + + + + COMPONENT_PRO_OD + + + + COMPONENT_PRO_C + + + + COMPONENT_EXPS34_B + + + + COMPONENT_XPS34_C + + + + COMPONENT_HHSVC_B + + + + COMPONENT_HHSVC_C + + + + COMPONENT_HHSVO_B + + + + COMPONENT_HHSVO_C + + + + COMPONENT_VUDU_1X + + + + + + WAPSupp + + + COMPONENT_SOCOMSUP14_B + + + + + + WAPGrip + + + COMPONENT_BCM_B + + + + COMPONENT_BCM_OD + + + + COMPONENT_BCM_C + + + + + + + + CarriedInHand Automatic Gun CanLockonOnFoot CanLockonInVehicle CanFreeAim TwoHanded AnimReload AnimCrouchFire UsableOnFoot UsableInCover AllowEarlyExitFromFireAnimAfterBulletFired NoLeftHandIKWhenBlocked AllowCloseQuarterKills HasLowCoverReloads HasLowCoverSwaps LongWeapon UseFPSAimIK UseFPSSecondaryMotion FPSOnlyExitFireAnimAfterRecoilEnds + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPON_DD14_OD + dd14_od + + SLOT_WEAPON_DD14_OD + BULLET + + DONTCARE + DONTCARE + DONTCARE + DONTCARE + DONTCARE + DONTCARE + + INSTANT_HIT + WHEEL_RIFLE + GROUP_RIFLE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BONETAG_HEAD + + + + + BONETAG_NECK + + + + + BONETAG_L_THIGH + + + + + BONETAG_R_THIGH + + + + + BONETAG_L_CALF + + + + + BONETAG_R_CALF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPON_EFFECT_GROUP_RIFLE_ASSAULT + muz_assault_rifle + muz_alternate_star + muz_assault_rifle_fp + + muz_smoking_barrel + muz_smoking_barrel_fp + + + + + eject_auto + eject_auto_fp + bullet_tracer + BulletLarge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DEFAULT_THIRD_PERSON_PED_AIM_CAMERA + + + DEFAULT_THIRD_PERSON_PED_AIM_IN_COVER_CAMERA + + DEFAULT_THIRD_PERSON_PED_RUN_AND_GUN_CAMERA + DEFAULT_THIRD_PERSON_PED_CINEMATIC_SHOOTING_CAMERA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + COMPONENT_PRO_B + + + + + + COMPONENT_PRO_OD + + + + + + COMPONENT_PRO_C + + + + + + COMPONENT_EXPS34_B + + + + + + COMPONENT_EXPS34_C + + + + + + COMPONENT_HHSVO_B + + + + + + COMPONENT_HHSVO_C + + + + + + COMPONENT_HHSVC_B + + + + + + COMPONENT_HHSVC_C + + + + + + COMPONENT_VUDU_1X + + + + + + + ASSAULT_RIFLE_RECOIL_SHAKE + FPS_ASSAULT_RIFLE_RECOIL_SHAKE + DEFAULT_THIRD_PERSON_ACCURACY_OFFSET_SHAKE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPONTYPE_RIFLE + + PICKUP_WEAPON_DD14_OD + PICKUP_AMMO_BULLET_MP + WEAPON_DD14_OD + MMI_2Handed + WEAPON_STAT_DD14_OD + + + Automatic + + + WAPClip + + + COMPONENT_PMAG30_B + + + + COMPONENT_PMAG30_C + + + + COMPONENT_PMAG40_B + + + + COMPONENT_PMAGRANGER_B + + + + COMPONENT_PMAGLINK_B + + + + COMPONENT_PMAGLINK_C + + + + + + WAPFlshLasr + + + COMPONENT_SFS14_B + + + + COMPONENT_PEQ14_B + + + + COMPONENT_PEQ14_C + + + + + + WAPScop + + + COMPONENT_PRO_B + + + + COMPONENT_PRO_OD + + + + COMPONENT_PRO_C + + + + COMPONENT_EXPS34_B + + + + COMPONENT_EXPS34_C + + + + COMPONENT_HHSVC_B + + + + COMPONENT_HHSVC_C + + + + COMPONENT_HHSVO_B + + + + COMPONENT_HHSVO_C + + + + COMPONENT_VUDU_1X + + + + + + WAPSupp + + + COMPONENT_SOCOMSUP14_B + + + + + + WAPGrip + + + COMPONENT_BCM_B + + + + COMPONENT_BCM_OD + + + + COMPONENT_BCM_C + + + + + + + + CarriedInHand Automatic Gun CanLockonOnFoot CanLockonInVehicle CanFreeAim TwoHanded AnimReload AnimCrouchFire UsableOnFoot UsableInCover AllowEarlyExitFromFireAnimAfterBulletFired NoLeftHandIKWhenBlocked AllowCloseQuarterKills HasLowCoverReloads HasLowCoverSwaps LongWeapon UseFPSAimIK UseFPSSecondaryMotion FPSOnlyExitFireAnimAfterRecoilEnds + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPON_DD14_C + dd14_c + + SLOT_WEAPON_DD14_C + BULLET + + DONTCARE + DONTCARE + DONTCARE + DONTCARE + DONTCARE + DONTCARE + + INSTANT_HIT + WHEEL_RIFLE + GROUP_RIFLE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BONETAG_HEAD + + + + + BONETAG_NECK + + + + + BONETAG_L_THIGH + + + + + BONETAG_R_THIGH + + + + + BONETAG_L_CALF + + + + + BONETAG_R_CALF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPON_EFFECT_GROUP_RIFLE_ASSAULT + muz_assault_rifle + muz_alternate_star + muz_assault_rifle_fp + + muz_smoking_barrel + muz_smoking_barrel_fp + + + + + eject_auto + eject_auto_fp + bullet_tracer + BulletLarge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DEFAULT_THIRD_PERSON_PED_AIM_CAMERA + + + DEFAULT_THIRD_PERSON_PED_AIM_IN_COVER_CAMERA + + DEFAULT_THIRD_PERSON_PED_RUN_AND_GUN_CAMERA + DEFAULT_THIRD_PERSON_PED_CINEMATIC_SHOOTING_CAMERA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + COMPONENT_PRO_B + + + + + + COMPONENT_PRO_OD + + + + + + COMPONENT_PRO_C + + + + + + COMPONENT_EXPS34_B + + + + + + COMPONENT_EXPS34_C + + + + + + COMPONENT_HHSVO_B + + + + + + COMPONENT_HHSVO_C + + + + + + COMPONENT_HHSVC_B + + + + + + COMPONENT_HHSVC_C + + + + + + COMPONENT_VUDU_1X + + + + + + + ASSAULT_RIFLE_RECOIL_SHAKE + FPS_ASSAULT_RIFLE_RECOIL_SHAKE + DEFAULT_THIRD_PERSON_ACCURACY_OFFSET_SHAKE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPONTYPE_RIFLE + + PICKUP_WEAPON_DD14_C + PICKUP_AMMO_BULLET_MP + WEAPON_DD14_C + MMI_2Handed + WEAPON_STAT_DD14_C + + + Automatic + + + WAPClip + + + COMPONENT_PMAG30_B + + + + COMPONENT_PMAG30_C + + + + COMPONENT_PMAG40_B + + + + COMPONENT_PMAGRANGER_B + + + + COMPONENT_PMAGLINK_B + + + + COMPONENT_PMAGLINK_C + + + + + + WAPFlshLasr + + + COMPONENT_SFS14_B + + + + COMPONENT_PEQ14_B + + + + COMPONENT_PEQ14_C + + + + + + WAPScop + + + COMPONENT_PRO_B + + + + COMPONENT_PRO_OD + + + + COMPONENT_PRO_C + + + + COMPONENT_EXPS34_B + + + + COMPONENT_EXPS34_C + + + + COMPONENT_HHSVC_B + + + + COMPONENT_HHSVC_C + + + + COMPONENT_HHSVO_B + + + + COMPONENT_HHSVO_C + + + + COMPONENT_VUDU_1X + + + + + + WAPSupp + + + COMPONENT_SOCOMSUP14_B + + + + + + WAPGrip + + + COMPONENT_BCM_B + + + + COMPONENT_BCM_OD + + + + COMPONENT_BCM_C + + + + + + + + CarriedInHand Automatic Gun CanLockonOnFoot CanLockonInVehicle CanFreeAim TwoHanded AnimReload AnimCrouchFire UsableOnFoot UsableInCover AllowEarlyExitFromFireAnimAfterBulletFired NoLeftHandIKWhenBlocked AllowCloseQuarterKills HasLowCoverReloads HasLowCoverSwaps LongWeapon UseFPSAimIK UseFPSSecondaryMotion FPSOnlyExitFireAnimAfterRecoilEnds + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPON_DD16_B + dd16_b + + SLOT_WEAPON_DD16_B + BULLET + + DONTCARE + DONTCARE + DONTCARE + DONTCARE + DONTCARE + DONTCARE + + INSTANT_HIT + WHEEL_RIFLE + GROUP_RIFLE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BONETAG_HEAD + + + + + BONETAG_NECK + + + + + BONETAG_L_THIGH + + + + + BONETAG_R_THIGH + + + + + BONETAG_L_CALF + + + + + BONETAG_R_CALF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPON_EFFECT_GROUP_RIFLE_ASSAULT + muz_assault_rifle + muz_alternate_star + muz_assault_rifle_fp + + muz_smoking_barrel + muz_smoking_barrel_fp + + + + + eject_auto + eject_auto_fp + bullet_tracer + BulletLarge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DEFAULT_THIRD_PERSON_PED_AIM_CAMERA + + + DEFAULT_THIRD_PERSON_PED_AIM_IN_COVER_CAMERA + + DEFAULT_THIRD_PERSON_PED_RUN_AND_GUN_CAMERA + DEFAULT_THIRD_PERSON_PED_CINEMATIC_SHOOTING_CAMERA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + COMPONENT_PRO_B + + + + + + COMPONENT_PRO_OD + + + + + + COMPONENT_PRO_C + + + + + + COMPONENT_EXPS34_B + + + + + + COMPONENT_EXPS34_C + + + + + + COMPONENT_HHSVO_B + + + + + + COMPONENT_HHSVO_C + + + + + + COMPONENT_HHSVC_B + + + + + + COMPONENT_HHSVC_C + + + + + + COMPONENT_VUDU_1X + + + + + + + ASSAULT_RIFLE_RECOIL_SHAKE + FPS_ASSAULT_RIFLE_RECOIL_SHAKE + DEFAULT_THIRD_PERSON_ACCURACY_OFFSET_SHAKE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPONTYPE_RIFLE + + PICKUP_WEAPON_DD16_B + PICKUP_AMMO_BULLET_MP + WEAPON_DD16_B + MMI_2Handed + WEAPON_STAT_DD16_B + + + Automatic + + + WAPClip + + + COMPONENT_PMAG30_B + + + + COMPONENT_PMAG30_C + + + + COMPONENT_PMAG40_B + + + + COMPONENT_PMAGRANGER_B + + + + COMPONENT_PMAGLINK_B + + + + COMPONENT_PMAGLINK_C + + + + + + WAPFlshLasr + + + COMPONENT_SFS16_B + + + + COMPONENT_PEQ16_B + + + + COMPONENT_PEQ16_C + + + + + + WAPScop + + + COMPONENT_PRO_B + + + + COMPONENT_PRO_OD + + + + COMPONENT_PRO_C + + + + COMPONENT_EXPS34_B + + + + COMPONENT_EXPS34_C + + + + COMPONENT_HHSVC_B + + + + COMPONENT_HHSVC_C + + + + COMPONENT_HHSVO_B + + + + COMPONENT_HHSVO_C + + + + COMPONENT_VUDU_1X + + + + + + WAPSupp + + + COMPONENT_SOCOMSUP16_B + + + + + + WAPGrip + + + COMPONENT_BCM_B + + + + COMPONENT_BCM_OD + + + + COMPONENT_BCM_C + + + + + + + + CarriedInHand Automatic Gun CanLockonOnFoot CanLockonInVehicle CanFreeAim TwoHanded AnimReload AnimCrouchFire UsableOnFoot UsableInCover AllowEarlyExitFromFireAnimAfterBulletFired NoLeftHandIKWhenBlocked AllowCloseQuarterKills HasLowCoverReloads HasLowCoverSwaps LongWeapon UseFPSAimIK UseFPSSecondaryMotion FPSOnlyExitFireAnimAfterRecoilEnds + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPON_DD16_OD + dd16_od + + SLOT_WEAPON_DD16_OD + BULLET + + DONTCARE + DONTCARE + DONTCARE + DONTCARE + DONTCARE + DONTCARE + + INSTANT_HIT + WHEEL_RIFLE + GROUP_RIFLE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BONETAG_HEAD + + + + + BONETAG_NECK + + + + + BONETAG_L_THIGH + + + + + BONETAG_R_THIGH + + + + + BONETAG_L_CALF + + + + + BONETAG_R_CALF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPON_EFFECT_GROUP_RIFLE_ASSAULT + muz_assault_rifle + muz_alternate_star + muz_assault_rifle_fp + + muz_smoking_barrel + muz_smoking_barrel_fp + + + + + eject_auto + eject_auto_fp + bullet_tracer + BulletLarge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DEFAULT_THIRD_PERSON_PED_AIM_CAMERA + + + DEFAULT_THIRD_PERSON_PED_AIM_IN_COVER_CAMERA + + DEFAULT_THIRD_PERSON_PED_RUN_AND_GUN_CAMERA + DEFAULT_THIRD_PERSON_PED_CINEMATIC_SHOOTING_CAMERA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + COMPONENT_PRO_B + + + + + + COMPONENT_PRO_OD + + + + + + COMPONENT_PRO_C + + + + + + COMPONENT_EXPS34_B + + + + + + COMPONENT_EXPS34_C + + + + + + COMPONENT_HHSVO_B + + + + + + COMPONENT_HHSVO_C + + + + + + COMPONENT_HHSVC_B + + + + + + COMPONENT_HHSVC_C + + + + + + COMPONENT_VUDU_1X + + + + + + + ASSAULT_RIFLE_RECOIL_SHAKE + FPS_ASSAULT_RIFLE_RECOIL_SHAKE + DEFAULT_THIRD_PERSON_ACCURACY_OFFSET_SHAKE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPONTYPE_RIFLE + + PICKUP_WEAPON_DD16_OD + PICKUP_AMMO_BULLET_MP + WEAPON_DD16_OD + MMI_2Handed + WEAPON_STAT_DD16_OD + + + Automatic + + + WAPClip + + + COMPONENT_PMAG30_B + + + + COMPONENT_PMAG30_C + + + + COMPONENT_PMAG40_B + + + + COMPONENT_PMAGRANGER_B + + + + COMPONENT_PMAGLINK_B + + + + COMPONENT_PMAGLINK_C + + + + + + WAPFlshLasr + + + COMPONENT_SFS16_B + + + + COMPONENT_PEQ16_B + + + + COMPONENT_PEQ16_C + + + + + + WAPScop + + + COMPONENT_PRO_B + + + + COMPONENT_PRO_OD + + + + COMPONENT_PRO_C + + + + COMPONENT_EXPS34_B + + + + COMPONENT_EXPS34_C + + + + COMPONENT_HHSVC_B + + + + COMPONENT_HHSVC_C + + + + COMPONENT_HHSVO_B + + + + COMPONENT_HHSVO_C + + + + COMPONENT_VUDU_1X + + + + + + WAPSupp + + + COMPONENT_SOCOMSUP16_B + + + + + + WAPGrip + + + COMPONENT_BCM_B + + + + COMPONENT_BCM_OD + + + + COMPONENT_BCM_C + + + + + + + + CarriedInHand Automatic Gun CanLockonOnFoot CanLockonInVehicle CanFreeAim TwoHanded AnimReload AnimCrouchFire UsableOnFoot UsableInCover AllowEarlyExitFromFireAnimAfterBulletFired NoLeftHandIKWhenBlocked AllowCloseQuarterKills HasLowCoverReloads HasLowCoverSwaps LongWeapon UseFPSAimIK UseFPSSecondaryMotion FPSOnlyExitFireAnimAfterRecoilEnds + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPON_DD16_C + dd16_c + + SLOT_WEAPON_DD16_C + BULLET + + DONTCARE + DONTCARE + DONTCARE + DONTCARE + DONTCARE + DONTCARE + + INSTANT_HIT + WHEEL_RIFLE + GROUP_RIFLE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BONETAG_HEAD + + + + + BONETAG_NECK + + + + + BONETAG_L_THIGH + + + + + BONETAG_R_THIGH + + + + + BONETAG_L_CALF + + + + + BONETAG_R_CALF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPON_EFFECT_GROUP_RIFLE_ASSAULT + muz_assault_rifle + muz_alternate_star + muz_assault_rifle_fp + + muz_smoking_barrel + muz_smoking_barrel_fp + + + + + eject_auto + eject_auto_fp + bullet_tracer + BulletLarge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DEFAULT_THIRD_PERSON_PED_AIM_CAMERA + + + DEFAULT_THIRD_PERSON_PED_AIM_IN_COVER_CAMERA + + DEFAULT_THIRD_PERSON_PED_RUN_AND_GUN_CAMERA + DEFAULT_THIRD_PERSON_PED_CINEMATIC_SHOOTING_CAMERA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + COMPONENT_PRO_B + + + + + + COMPONENT_PRO_OD + + + + + + COMPONENT_PRO_C + + + + + + COMPONENT_EXPS34_B + + + + + + COMPONENT_EXPS34_C + + + + + + COMPONENT_HHSVO_B + + + + + + COMPONENT_HHSVO_C + + + + + + COMPONENT_HHSVC_B + + + + + + COMPONENT_HHSVC_C + + + + + + COMPONENT_VUDU_1X + + + + + + + ASSAULT_RIFLE_RECOIL_SHAKE + FPS_ASSAULT_RIFLE_RECOIL_SHAKE + DEFAULT_THIRD_PERSON_ACCURACY_OFFSET_SHAKE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WEAPONTYPE_RIFLE + + PICKUP_WEAPON_DD16_C + PICKUP_AMMO_BULLET_MP + WEAPON_DD16_C + MMI_2Handed + WEAPON_STAT_DD16_C + + + Automatic + + + WAPClip + + + COMPONENT_PMAG30_B + + + + COMPONENT_PMAG30_C + + + + COMPONENT_PMAG40_B + + + + COMPONENT_PMAGRANGER_B + + + + COMPONENT_PMAGLINK_B + + + + COMPONENT_PMAGLINK_C + + + + + + WAPFlshLasr + + + COMPONENT_SFS16_B + + + + COMPONENT_PEQ16_B + + + + COMPONENT_PEQ16_C + + + + + + WAPScop + + + COMPONENT_PRO_B + + + + COMPONENT_PRO_OD + + + + COMPONENT_PRO_C + + + + COMPONENT_EXPS34_B + + + + COMPONENT_EXPS34_C + + + + COMPONENT_HHSVC_B + + + + COMPONENT_HHSVC_C + + + + COMPONENT_HHSVO_B + + + + COMPONENT_HHSVO_C + + + + COMPONENT_VUDU_1X + + + + + + WAPSupp + + + COMPONENT_SOCOMSUP16_B + + + + + + WAPGrip + + + COMPONENT_BCM_B + + + + COMPONENT_BCM_OD + + + + COMPONENT_BCM_C + + + + + + + + CarriedInHand Automatic Gun CanLockonOnFoot CanLockonInVehicle CanFreeAim TwoHanded AnimReload AnimCrouchFire UsableOnFoot UsableInCover AllowEarlyExitFromFireAnimAfterBulletFired NoLeftHandIKWhenBlocked AllowCloseQuarterKills HasLowCoverReloads HasLowCoverSwaps LongWeapon UseFPSAimIK UseFPSSecondaryMotion FPSOnlyExitFireAnimAfterRecoilEnds + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AR + + diff --git a/resources/tls_ddm4v7/stream/bcm_b.ydr b/resources/tls_ddm4v7/stream/bcm_b.ydr new file mode 100644 index 000000000..007dcda9e --- /dev/null +++ b/resources/tls_ddm4v7/stream/bcm_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b3d0b757e1ff57a651dac64ace0b0a3cda984927e1863f05a73d6d6392807a4 +size 34821 diff --git a/resources/tls_ddm4v7/stream/bcm_b.ytd b/resources/tls_ddm4v7/stream/bcm_b.ytd new file mode 100644 index 000000000..5a3ab455e --- /dev/null +++ b/resources/tls_ddm4v7/stream/bcm_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbb5c69b43a280a7af724f027de358cae96d7aff7de1a7b26bf3a7b16a2ff393 +size 1560308 diff --git a/resources/tls_ddm4v7/stream/bcm_c.ydr b/resources/tls_ddm4v7/stream/bcm_c.ydr new file mode 100644 index 000000000..007dcda9e --- /dev/null +++ b/resources/tls_ddm4v7/stream/bcm_c.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b3d0b757e1ff57a651dac64ace0b0a3cda984927e1863f05a73d6d6392807a4 +size 34821 diff --git a/resources/tls_ddm4v7/stream/bcm_c.ytd b/resources/tls_ddm4v7/stream/bcm_c.ytd new file mode 100644 index 000000000..f3d575d16 --- /dev/null +++ b/resources/tls_ddm4v7/stream/bcm_c.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90e75d9ca046aaa462131e3900d3f93c32b44bdead53eff13ab3d404e5858d3e +size 2656861 diff --git a/resources/tls_ddm4v7/stream/bcm_od.ydr b/resources/tls_ddm4v7/stream/bcm_od.ydr new file mode 100644 index 000000000..007dcda9e --- /dev/null +++ b/resources/tls_ddm4v7/stream/bcm_od.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b3d0b757e1ff57a651dac64ace0b0a3cda984927e1863f05a73d6d6392807a4 +size 34821 diff --git a/resources/tls_ddm4v7/stream/bcm_od.ytd b/resources/tls_ddm4v7/stream/bcm_od.ytd new file mode 100644 index 000000000..c73952dee --- /dev/null +++ b/resources/tls_ddm4v7/stream/bcm_od.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:854cd7e38d5a6ac5bb524b0e551a55b3a458730df20637f7d89ba43b238b23ad +size 2218885 diff --git a/resources/tls_ddm4v7/stream/dd11_b.ydr b/resources/tls_ddm4v7/stream/dd11_b.ydr new file mode 100644 index 000000000..a16785255 --- /dev/null +++ b/resources/tls_ddm4v7/stream/dd11_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d619e25c68dfce8e040543ea7cd06c6275b67b99076d979ca3843706500f6d7 +size 1177888 diff --git a/resources/tls_ddm4v7/stream/dd11_b.ytd b/resources/tls_ddm4v7/stream/dd11_b.ytd new file mode 100644 index 000000000..f6cb72920 --- /dev/null +++ b/resources/tls_ddm4v7/stream/dd11_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c0736a38576aa37acfee5e09c06dcde74295d0f55c1346a2c07f076301afb1a +size 7080238 diff --git a/resources/tls_ddm4v7/stream/dd11_c.ydr b/resources/tls_ddm4v7/stream/dd11_c.ydr new file mode 100644 index 000000000..a16785255 --- /dev/null +++ b/resources/tls_ddm4v7/stream/dd11_c.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d619e25c68dfce8e040543ea7cd06c6275b67b99076d979ca3843706500f6d7 +size 1177888 diff --git a/resources/tls_ddm4v7/stream/dd11_c.ytd b/resources/tls_ddm4v7/stream/dd11_c.ytd new file mode 100644 index 000000000..992331f98 --- /dev/null +++ b/resources/tls_ddm4v7/stream/dd11_c.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c7c7f007562b2bdd1e29c2834073a4d78e7831baec82dc3af89d061d1a46e9b +size 11535515 diff --git a/resources/tls_ddm4v7/stream/dd11_od.ydr b/resources/tls_ddm4v7/stream/dd11_od.ydr new file mode 100644 index 000000000..a16785255 --- /dev/null +++ b/resources/tls_ddm4v7/stream/dd11_od.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d619e25c68dfce8e040543ea7cd06c6275b67b99076d979ca3843706500f6d7 +size 1177888 diff --git a/resources/tls_ddm4v7/stream/dd11_od.ytd b/resources/tls_ddm4v7/stream/dd11_od.ytd new file mode 100644 index 000000000..35370621f --- /dev/null +++ b/resources/tls_ddm4v7/stream/dd11_od.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d854dada3a4273e04abac210ee24203846f214b7311c609fd15897c273b6e0df +size 9746033 diff --git a/resources/tls_ddm4v7/stream/dd14_b.ydr b/resources/tls_ddm4v7/stream/dd14_b.ydr new file mode 100644 index 000000000..53baf412c --- /dev/null +++ b/resources/tls_ddm4v7/stream/dd14_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64a5ca083877f0e868faa406d4686834bb4b9b244060e616e6492ddb871646e9 +size 1290626 diff --git a/resources/tls_ddm4v7/stream/dd14_b.ytd b/resources/tls_ddm4v7/stream/dd14_b.ytd new file mode 100644 index 000000000..0e5e029ca --- /dev/null +++ b/resources/tls_ddm4v7/stream/dd14_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4f02c9cdbf8f967dca50304c644e2de1945110e86d0127b2f4f4ae197a17d12 +size 7101073 diff --git a/resources/tls_ddm4v7/stream/dd14_c.ydr b/resources/tls_ddm4v7/stream/dd14_c.ydr new file mode 100644 index 000000000..53baf412c --- /dev/null +++ b/resources/tls_ddm4v7/stream/dd14_c.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64a5ca083877f0e868faa406d4686834bb4b9b244060e616e6492ddb871646e9 +size 1290626 diff --git a/resources/tls_ddm4v7/stream/dd14_c.ytd b/resources/tls_ddm4v7/stream/dd14_c.ytd new file mode 100644 index 000000000..440874784 --- /dev/null +++ b/resources/tls_ddm4v7/stream/dd14_c.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eeea434f17116cd81e7b21e5254f39fb047b2520d7afb83025cf8be6e5e5d994 +size 11673717 diff --git a/resources/tls_ddm4v7/stream/dd14_od.ydr b/resources/tls_ddm4v7/stream/dd14_od.ydr new file mode 100644 index 000000000..53baf412c --- /dev/null +++ b/resources/tls_ddm4v7/stream/dd14_od.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64a5ca083877f0e868faa406d4686834bb4b9b244060e616e6492ddb871646e9 +size 1290626 diff --git a/resources/tls_ddm4v7/stream/dd14_od.ytd b/resources/tls_ddm4v7/stream/dd14_od.ytd new file mode 100644 index 000000000..a7b59e462 --- /dev/null +++ b/resources/tls_ddm4v7/stream/dd14_od.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b87a2b16a6948f5e5b767803802a1896bde219c1f7897676449de7ba536672c1 +size 9836833 diff --git a/resources/tls_ddm4v7/stream/dd16_b.ydr b/resources/tls_ddm4v7/stream/dd16_b.ydr new file mode 100644 index 000000000..260f1ff79 --- /dev/null +++ b/resources/tls_ddm4v7/stream/dd16_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8a1cbffd7c81de9e1c84a909900c70176965729bee5fff73f8075d0898afbc6 +size 1323580 diff --git a/resources/tls_ddm4v7/stream/dd16_b.ytd b/resources/tls_ddm4v7/stream/dd16_b.ytd new file mode 100644 index 000000000..d69946ef3 --- /dev/null +++ b/resources/tls_ddm4v7/stream/dd16_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:baaafd2e167770c019c5fe6f016a5b901707eacfe20e4357f029a0051d9ef236 +size 7052975 diff --git a/resources/tls_ddm4v7/stream/dd16_c.ydr b/resources/tls_ddm4v7/stream/dd16_c.ydr new file mode 100644 index 000000000..260f1ff79 --- /dev/null +++ b/resources/tls_ddm4v7/stream/dd16_c.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8a1cbffd7c81de9e1c84a909900c70176965729bee5fff73f8075d0898afbc6 +size 1323580 diff --git a/resources/tls_ddm4v7/stream/dd16_c.ytd b/resources/tls_ddm4v7/stream/dd16_c.ytd new file mode 100644 index 000000000..3f70b9f65 --- /dev/null +++ b/resources/tls_ddm4v7/stream/dd16_c.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:870941e359591f940397309f6bf7a92ec8f12aa1522191354b95c275ed77a0ed +size 11602024 diff --git a/resources/tls_ddm4v7/stream/dd16_od.ydr b/resources/tls_ddm4v7/stream/dd16_od.ydr new file mode 100644 index 000000000..260f1ff79 --- /dev/null +++ b/resources/tls_ddm4v7/stream/dd16_od.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8a1cbffd7c81de9e1c84a909900c70176965729bee5fff73f8075d0898afbc6 +size 1323580 diff --git a/resources/tls_ddm4v7/stream/dd16_od.ytd b/resources/tls_ddm4v7/stream/dd16_od.ytd new file mode 100644 index 000000000..0f7be1541 --- /dev/null +++ b/resources/tls_ddm4v7/stream/dd16_od.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8716dd79c72879c3100eb2d2a287a04acc88b7412c2e6b70c06cbee67f268291 +size 9748419 diff --git a/resources/tls_ddm4v7/stream/exps34_b.ydr b/resources/tls_ddm4v7/stream/exps34_b.ydr new file mode 100644 index 000000000..e6cf6e5ca --- /dev/null +++ b/resources/tls_ddm4v7/stream/exps34_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5613caef3b5e35acefaeb18fa66b207bcf4e8aafc23a615cc9f35c948532f975 +size 252747 diff --git a/resources/tls_ddm4v7/stream/exps34_b.ytd b/resources/tls_ddm4v7/stream/exps34_b.ytd new file mode 100644 index 000000000..f4272fa41 --- /dev/null +++ b/resources/tls_ddm4v7/stream/exps34_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8fad6a58905499a20f89c1e6afc3e3eb272ec8909db6398d9ed6fb34b2d8d5ee +size 3389010 diff --git a/resources/tls_ddm4v7/stream/exps34_c.ydr b/resources/tls_ddm4v7/stream/exps34_c.ydr new file mode 100644 index 000000000..e6cf6e5ca --- /dev/null +++ b/resources/tls_ddm4v7/stream/exps34_c.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5613caef3b5e35acefaeb18fa66b207bcf4e8aafc23a615cc9f35c948532f975 +size 252747 diff --git a/resources/tls_ddm4v7/stream/exps34_c.ytd b/resources/tls_ddm4v7/stream/exps34_c.ytd new file mode 100644 index 000000000..f59088d17 --- /dev/null +++ b/resources/tls_ddm4v7/stream/exps34_c.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d901d45bdaf25b1f26aa7a6faae4712b1bba2c68906a970b100a3dafb13bf35c +size 2694152 diff --git a/resources/tls_ddm4v7/stream/hhsvc_b.ydr b/resources/tls_ddm4v7/stream/hhsvc_b.ydr new file mode 100644 index 000000000..b2b69ed56 --- /dev/null +++ b/resources/tls_ddm4v7/stream/hhsvc_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f909a339f7c3b06edbdbb6bf366d52874bd8b7754dba79b6d85c003534aa9a5f +size 513057 diff --git a/resources/tls_ddm4v7/stream/hhsvc_b.ytd b/resources/tls_ddm4v7/stream/hhsvc_b.ytd new file mode 100644 index 000000000..6ece6187d --- /dev/null +++ b/resources/tls_ddm4v7/stream/hhsvc_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8d9bc6841f7b9c4a1e70df4764d95fd00c80b3ba613cf5c0445bdf4659fb324 +size 7232846 diff --git a/resources/tls_ddm4v7/stream/hhsvc_c.ydr b/resources/tls_ddm4v7/stream/hhsvc_c.ydr new file mode 100644 index 000000000..b2b69ed56 --- /dev/null +++ b/resources/tls_ddm4v7/stream/hhsvc_c.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f909a339f7c3b06edbdbb6bf366d52874bd8b7754dba79b6d85c003534aa9a5f +size 513057 diff --git a/resources/tls_ddm4v7/stream/hhsvc_c.ytd b/resources/tls_ddm4v7/stream/hhsvc_c.ytd new file mode 100644 index 000000000..99c37e195 --- /dev/null +++ b/resources/tls_ddm4v7/stream/hhsvc_c.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7fadc19d7f30826a39944dbc81c924b32d1d47f3f736b90eed6d60b283196b72 +size 5056197 diff --git a/resources/tls_ddm4v7/stream/hhsvo_b.ydr b/resources/tls_ddm4v7/stream/hhsvo_b.ydr new file mode 100644 index 000000000..152c91f35 --- /dev/null +++ b/resources/tls_ddm4v7/stream/hhsvo_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:deda60fa49b72e9130405ad079c6cf689e47b9c7179da547595939bdeeb23c5f +size 512723 diff --git a/resources/tls_ddm4v7/stream/hhsvo_b.ytd b/resources/tls_ddm4v7/stream/hhsvo_b.ytd new file mode 100644 index 000000000..e87bf5dee --- /dev/null +++ b/resources/tls_ddm4v7/stream/hhsvo_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31a99d52e454a398e3f3de260573515d525b9be1d11193b1ff4f8fcaff19554b +size 7424412 diff --git a/resources/tls_ddm4v7/stream/hhsvo_c.ydr b/resources/tls_ddm4v7/stream/hhsvo_c.ydr new file mode 100644 index 000000000..b64cb36f7 --- /dev/null +++ b/resources/tls_ddm4v7/stream/hhsvo_c.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6956133cf9df7063f2f1019bd6cbf62e44bafc848a58709de690f6a60c672dbd +size 512784 diff --git a/resources/tls_ddm4v7/stream/hhsvo_c.ytd b/resources/tls_ddm4v7/stream/hhsvo_c.ytd new file mode 100644 index 000000000..03571c906 --- /dev/null +++ b/resources/tls_ddm4v7/stream/hhsvo_c.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c88d843d46fd46946477db9a439b6539c2c7dce29de9df45ae99810e47205062 +size 5211124 diff --git a/resources/tls_ddm4v7/stream/peq11_b.ydr b/resources/tls_ddm4v7/stream/peq11_b.ydr new file mode 100644 index 000000000..68e12d7d4 --- /dev/null +++ b/resources/tls_ddm4v7/stream/peq11_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbc0c7a6f1aa97b2b63f35dd71ca94e77683066b8397d2ec622a1f864e092e52 +size 555068 diff --git a/resources/tls_ddm4v7/stream/peq11_b.ytd b/resources/tls_ddm4v7/stream/peq11_b.ytd new file mode 100644 index 000000000..88747bd9d --- /dev/null +++ b/resources/tls_ddm4v7/stream/peq11_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86e48d0d27270595af99cd09fd2705fb1319709294ff0e3d24948bec76646f22 +size 10825718 diff --git a/resources/tls_ddm4v7/stream/peq11_c.ydr b/resources/tls_ddm4v7/stream/peq11_c.ydr new file mode 100644 index 000000000..68e12d7d4 --- /dev/null +++ b/resources/tls_ddm4v7/stream/peq11_c.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbc0c7a6f1aa97b2b63f35dd71ca94e77683066b8397d2ec622a1f864e092e52 +size 555068 diff --git a/resources/tls_ddm4v7/stream/peq11_c.ytd b/resources/tls_ddm4v7/stream/peq11_c.ytd new file mode 100644 index 000000000..d5d588ff8 --- /dev/null +++ b/resources/tls_ddm4v7/stream/peq11_c.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f59c05da9668f519fb945601ad62e3c8c2762b8816f691c998ad59b5f15bbad +size 13497804 diff --git a/resources/tls_ddm4v7/stream/peq14_b.ydr b/resources/tls_ddm4v7/stream/peq14_b.ydr new file mode 100644 index 000000000..0b45d4c35 --- /dev/null +++ b/resources/tls_ddm4v7/stream/peq14_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fffc1232c3bc819d35246b6483f6cc13768b9706e37052ceb5a75da71e7012e +size 586115 diff --git a/resources/tls_ddm4v7/stream/peq14_b.ytd b/resources/tls_ddm4v7/stream/peq14_b.ytd new file mode 100644 index 000000000..5d1898b08 --- /dev/null +++ b/resources/tls_ddm4v7/stream/peq14_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ab3f525741fb10decdf19a82f34ae3dbd44b7324a91da06dae4ebd8e8634cbd +size 11102179 diff --git a/resources/tls_ddm4v7/stream/peq14_c.ydr b/resources/tls_ddm4v7/stream/peq14_c.ydr new file mode 100644 index 000000000..0b45d4c35 --- /dev/null +++ b/resources/tls_ddm4v7/stream/peq14_c.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fffc1232c3bc819d35246b6483f6cc13768b9706e37052ceb5a75da71e7012e +size 586115 diff --git a/resources/tls_ddm4v7/stream/peq14_c.ytd b/resources/tls_ddm4v7/stream/peq14_c.ytd new file mode 100644 index 000000000..3d63aa4fa --- /dev/null +++ b/resources/tls_ddm4v7/stream/peq14_c.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49aa9a4365bf3b0d9a53c91e0a14a7792d730ae7b9cfd7e3ca9b61e57d341183 +size 13774502 diff --git a/resources/tls_ddm4v7/stream/peq16_b.ydr b/resources/tls_ddm4v7/stream/peq16_b.ydr new file mode 100644 index 000000000..ed641464e --- /dev/null +++ b/resources/tls_ddm4v7/stream/peq16_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ec160dc8f72ef3674ebfbc1973ce08b18a8d8216b85be91b939cdc3c166dbf3 +size 633541 diff --git a/resources/tls_ddm4v7/stream/peq16_b.ytd b/resources/tls_ddm4v7/stream/peq16_b.ytd new file mode 100644 index 000000000..5d1898b08 --- /dev/null +++ b/resources/tls_ddm4v7/stream/peq16_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ab3f525741fb10decdf19a82f34ae3dbd44b7324a91da06dae4ebd8e8634cbd +size 11102179 diff --git a/resources/tls_ddm4v7/stream/peq16_c.ydr b/resources/tls_ddm4v7/stream/peq16_c.ydr new file mode 100644 index 000000000..ed641464e --- /dev/null +++ b/resources/tls_ddm4v7/stream/peq16_c.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ec160dc8f72ef3674ebfbc1973ce08b18a8d8216b85be91b939cdc3c166dbf3 +size 633541 diff --git a/resources/tls_ddm4v7/stream/peq16_c.ytd b/resources/tls_ddm4v7/stream/peq16_c.ytd new file mode 100644 index 000000000..3d63aa4fa --- /dev/null +++ b/resources/tls_ddm4v7/stream/peq16_c.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49aa9a4365bf3b0d9a53c91e0a14a7792d730ae7b9cfd7e3ca9b61e57d341183 +size 13774502 diff --git a/resources/tls_ddm4v7/stream/pmag30_b.ydr b/resources/tls_ddm4v7/stream/pmag30_b.ydr new file mode 100644 index 000000000..60310fcf5 --- /dev/null +++ b/resources/tls_ddm4v7/stream/pmag30_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cb3a38d60ab893be3294f1bdc0a11eff5f6a4cde2e67eb2c9c5c216b5480f92 +size 151384 diff --git a/resources/tls_ddm4v7/stream/pmag30_b.ytd b/resources/tls_ddm4v7/stream/pmag30_b.ytd new file mode 100644 index 000000000..06ed7f124 --- /dev/null +++ b/resources/tls_ddm4v7/stream/pmag30_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6244c82762a109b3f3dcfcdf54458607624307fa1448cdb54aef83e17f324247 +size 2013708 diff --git a/resources/tls_ddm4v7/stream/pmag30_c.ydr b/resources/tls_ddm4v7/stream/pmag30_c.ydr new file mode 100644 index 000000000..60310fcf5 --- /dev/null +++ b/resources/tls_ddm4v7/stream/pmag30_c.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cb3a38d60ab893be3294f1bdc0a11eff5f6a4cde2e67eb2c9c5c216b5480f92 +size 151384 diff --git a/resources/tls_ddm4v7/stream/pmag30_c.ytd b/resources/tls_ddm4v7/stream/pmag30_c.ytd new file mode 100644 index 000000000..4af24dfb5 --- /dev/null +++ b/resources/tls_ddm4v7/stream/pmag30_c.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d7217e79ea9672961bcbdea82fe1e2d334a921f059fd80d1c8bb642b302755b +size 2958457 diff --git a/resources/tls_ddm4v7/stream/pmag40_b.ydr b/resources/tls_ddm4v7/stream/pmag40_b.ydr new file mode 100644 index 000000000..2e539b0b6 --- /dev/null +++ b/resources/tls_ddm4v7/stream/pmag40_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19e4439ee7e67a305c19e80edeb85d3a839b54bd19d15bc8e77f412bc351549a +size 159659 diff --git a/resources/tls_ddm4v7/stream/pmag40_b.ytd b/resources/tls_ddm4v7/stream/pmag40_b.ytd new file mode 100644 index 000000000..48f07405a --- /dev/null +++ b/resources/tls_ddm4v7/stream/pmag40_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27758861df4c84d9f843c017efc8dfea9d63c7d8470b1fe5812c9b2f3ae37b3a +size 1969316 diff --git a/resources/tls_ddm4v7/stream/pmaglink_b.ydr b/resources/tls_ddm4v7/stream/pmaglink_b.ydr new file mode 100644 index 000000000..eaa1b36c2 --- /dev/null +++ b/resources/tls_ddm4v7/stream/pmaglink_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46f8ac6d4597f8a2c89246fbd43c959c962364adfacb27d5802ff700a92cd325 +size 463458 diff --git a/resources/tls_ddm4v7/stream/pmaglink_b.ytd b/resources/tls_ddm4v7/stream/pmaglink_b.ytd new file mode 100644 index 000000000..1b54e98d6 --- /dev/null +++ b/resources/tls_ddm4v7/stream/pmaglink_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01e0b9316923d9a620c9864081cea61b57dbb695c0eb8d5ac4c464b848821465 +size 3202844 diff --git a/resources/tls_ddm4v7/stream/pmaglink_c.ydr b/resources/tls_ddm4v7/stream/pmaglink_c.ydr new file mode 100644 index 000000000..eaa1b36c2 --- /dev/null +++ b/resources/tls_ddm4v7/stream/pmaglink_c.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46f8ac6d4597f8a2c89246fbd43c959c962364adfacb27d5802ff700a92cd325 +size 463458 diff --git a/resources/tls_ddm4v7/stream/pmaglink_c.ytd b/resources/tls_ddm4v7/stream/pmaglink_c.ytd new file mode 100644 index 000000000..bcc2c624d --- /dev/null +++ b/resources/tls_ddm4v7/stream/pmaglink_c.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50f414d89d00951354dda77bd3dd92310972b81038c54aa79a12106d33dbcd99 +size 5494357 diff --git a/resources/tls_ddm4v7/stream/pmagranger_b.ydr b/resources/tls_ddm4v7/stream/pmagranger_b.ydr new file mode 100644 index 000000000..98f1782bf --- /dev/null +++ b/resources/tls_ddm4v7/stream/pmagranger_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5787da8797781ca369698a53bd45fc658fb7950b07e92186369b41a3c553b0ec +size 169491 diff --git a/resources/tls_ddm4v7/stream/pmagranger_b.ytd b/resources/tls_ddm4v7/stream/pmagranger_b.ytd new file mode 100644 index 000000000..e1294ee84 --- /dev/null +++ b/resources/tls_ddm4v7/stream/pmagranger_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a65787b8505ee4eecc4fa5eb255c80b4e21ea525a9abe81a8accf336b74bfb5 +size 2985772 diff --git a/resources/tls_ddm4v7/stream/pro_b.ydr b/resources/tls_ddm4v7/stream/pro_b.ydr new file mode 100644 index 000000000..9b5db58fd --- /dev/null +++ b/resources/tls_ddm4v7/stream/pro_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d89a100d871bde25db0f211adadbb4a70849c6c231e5ecd952725a74024bbc99 +size 391514 diff --git a/resources/tls_ddm4v7/stream/pro_b.ytd b/resources/tls_ddm4v7/stream/pro_b.ytd new file mode 100644 index 000000000..a85ec47a5 --- /dev/null +++ b/resources/tls_ddm4v7/stream/pro_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56064fb81f6f2dbdd0275f059e8370a4b9103b48d09725a175b3c064105cb1f0 +size 4344109 diff --git a/resources/tls_ddm4v7/stream/pro_c.ydr b/resources/tls_ddm4v7/stream/pro_c.ydr new file mode 100644 index 000000000..87d152368 --- /dev/null +++ b/resources/tls_ddm4v7/stream/pro_c.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c78c3272b6acbd5ce17a705fae19eff03d8df36a64b0d1f12e702ceecefc4c0 +size 453189 diff --git a/resources/tls_ddm4v7/stream/pro_c.ytd b/resources/tls_ddm4v7/stream/pro_c.ytd new file mode 100644 index 000000000..ccc9d3e71 --- /dev/null +++ b/resources/tls_ddm4v7/stream/pro_c.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f41f50786ad80e147acb41e602373d7fab27d55c26c22a58da9221cff57278d +size 7446314 diff --git a/resources/tls_ddm4v7/stream/pro_od.ydr b/resources/tls_ddm4v7/stream/pro_od.ydr new file mode 100644 index 000000000..87d152368 --- /dev/null +++ b/resources/tls_ddm4v7/stream/pro_od.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c78c3272b6acbd5ce17a705fae19eff03d8df36a64b0d1f12e702ceecefc4c0 +size 453189 diff --git a/resources/tls_ddm4v7/stream/pro_od.ytd b/resources/tls_ddm4v7/stream/pro_od.ytd new file mode 100644 index 000000000..dadd7c8d4 --- /dev/null +++ b/resources/tls_ddm4v7/stream/pro_od.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a02deccfc3b13bfa951add3e579e94a085d81de7c42f33ce91183c3f9389b57d +size 7231483 diff --git a/resources/tls_ddm4v7/stream/sfs11_b.ydr b/resources/tls_ddm4v7/stream/sfs11_b.ydr new file mode 100644 index 000000000..fe5572994 --- /dev/null +++ b/resources/tls_ddm4v7/stream/sfs11_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a2fd410229d4241798a9be364172f7bb55de9591cf8aeed04746b8d41483c48 +size 266313 diff --git a/resources/tls_ddm4v7/stream/sfs11_b.ytd b/resources/tls_ddm4v7/stream/sfs11_b.ytd new file mode 100644 index 000000000..b4c9185e0 --- /dev/null +++ b/resources/tls_ddm4v7/stream/sfs11_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fcc6159703c1d307df8d3a409c6aa5f564bd537b53511ed84beb0c3d65b99447 +size 9567290 diff --git a/resources/tls_ddm4v7/stream/sfs14_b.ydr b/resources/tls_ddm4v7/stream/sfs14_b.ydr new file mode 100644 index 000000000..92984fffc --- /dev/null +++ b/resources/tls_ddm4v7/stream/sfs14_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7b0262a49fb1944d317828922fc71ece1821a3acb1391776bfd77908215877f +size 164304 diff --git a/resources/tls_ddm4v7/stream/sfs14_b.ytd b/resources/tls_ddm4v7/stream/sfs14_b.ytd new file mode 100644 index 000000000..d40ff6c97 --- /dev/null +++ b/resources/tls_ddm4v7/stream/sfs14_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5fe5993f00527fe8a3ce84d1206b9bc1c7f57662a69466f409f0ccc41cbcd2c8 +size 9839751 diff --git a/resources/tls_ddm4v7/stream/sfs14_c.ydr b/resources/tls_ddm4v7/stream/sfs14_c.ydr new file mode 100644 index 000000000..bb6c0abb2 --- /dev/null +++ b/resources/tls_ddm4v7/stream/sfs14_c.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ddf564111ea9fd3918881c908db1041979b5a18adbebf740839e7647166e842 +size 164272 diff --git a/resources/tls_ddm4v7/stream/sfs16_b.ydr b/resources/tls_ddm4v7/stream/sfs16_b.ydr new file mode 100644 index 000000000..8f13f446c --- /dev/null +++ b/resources/tls_ddm4v7/stream/sfs16_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19b91f148591debdb4499a5436372063cd4177bcb3bb15b25e718908f9bfe818 +size 297022 diff --git a/resources/tls_ddm4v7/stream/sfs16_b.ytd b/resources/tls_ddm4v7/stream/sfs16_b.ytd new file mode 100644 index 000000000..d40ff6c97 --- /dev/null +++ b/resources/tls_ddm4v7/stream/sfs16_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5fe5993f00527fe8a3ce84d1206b9bc1c7f57662a69466f409f0ccc41cbcd2c8 +size 9839751 diff --git a/resources/tls_ddm4v7/stream/socomsup11_b.ydr b/resources/tls_ddm4v7/stream/socomsup11_b.ydr new file mode 100644 index 000000000..ff6f6c8cc --- /dev/null +++ b/resources/tls_ddm4v7/stream/socomsup11_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06f4d33f901d9eacb1a0e1bd3802b7e5f7009436a2ec2af6a507b24b1c1ea425 +size 151389 diff --git a/resources/tls_ddm4v7/stream/socomsup11_b.ytd b/resources/tls_ddm4v7/stream/socomsup11_b.ytd new file mode 100644 index 000000000..a2b97cffb --- /dev/null +++ b/resources/tls_ddm4v7/stream/socomsup11_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a5ef9334a5d44fbe0abcf669e9c90b5db9e51cea4ecb421f123c75adfb212e0 +size 3945283 diff --git a/resources/tls_ddm4v7/stream/socomsup14_b.ydr b/resources/tls_ddm4v7/stream/socomsup14_b.ydr new file mode 100644 index 000000000..605139f74 --- /dev/null +++ b/resources/tls_ddm4v7/stream/socomsup14_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34f389d6a30c91489f5e25d8aabb2f537439f9b9bd76bf21b579802a61325655 +size 151492 diff --git a/resources/tls_ddm4v7/stream/socomsup14_b.ytd b/resources/tls_ddm4v7/stream/socomsup14_b.ytd new file mode 100644 index 000000000..a2b97cffb --- /dev/null +++ b/resources/tls_ddm4v7/stream/socomsup14_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a5ef9334a5d44fbe0abcf669e9c90b5db9e51cea4ecb421f123c75adfb212e0 +size 3945283 diff --git a/resources/tls_ddm4v7/stream/socomsup16_b.ydr b/resources/tls_ddm4v7/stream/socomsup16_b.ydr new file mode 100644 index 000000000..b0ce90c18 --- /dev/null +++ b/resources/tls_ddm4v7/stream/socomsup16_b.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5eb8fcdcbce15b3e1f3e13e4b91cbac7170b3a6e334f16ffe742d3e185dff313 +size 151432 diff --git a/resources/tls_ddm4v7/stream/socomsup16_b.ytd b/resources/tls_ddm4v7/stream/socomsup16_b.ytd new file mode 100644 index 000000000..a2b97cffb --- /dev/null +++ b/resources/tls_ddm4v7/stream/socomsup16_b.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a5ef9334a5d44fbe0abcf669e9c90b5db9e51cea4ecb421f123c75adfb212e0 +size 3945283 diff --git a/resources/tls_ddm4v7/stream/vudu_1x.ydr b/resources/tls_ddm4v7/stream/vudu_1x.ydr new file mode 100644 index 000000000..1c0fcd430 --- /dev/null +++ b/resources/tls_ddm4v7/stream/vudu_1x.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc11c432da64364764306a94ba5b0d24c0a5466a780835b3ca8fd85ef15c38eb +size 402138 diff --git a/resources/tls_ddm4v7/stream/vudu_1x.ytd b/resources/tls_ddm4v7/stream/vudu_1x.ytd new file mode 100644 index 000000000..7c0fc659e --- /dev/null +++ b/resources/tls_ddm4v7/stream/vudu_1x.ytd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2b7fa712cb1018361ff398e68ccea44a56447e90e52a0580bec4f9ab768d704 +size 7993429 diff --git a/server.cfg b/server.cfg index d3fbab94c..00ea17fb2 100644 --- a/server.cfg +++ b/server.cfg @@ -238,6 +238,8 @@ ensure vbrims3 ensure WheelPackC ensure ukbusses ensure wp3 +ensure thinline_assets +ensure tls_ddm4v7 engine sounds ensure tamustanggt50