├── README.md └── UPCODE-CLOTHING ├── client └── main.lua ├── fxmanifest.lua ├── html ├── img │ ├── clothes1.png │ ├── clothes10.png │ ├── clothes11.png │ ├── clothes12.png │ ├── clothes2.png │ ├── clothes3.png │ ├── clothes4.png │ ├── clothes5.png │ ├── clothes6.png │ ├── clothes7.png │ ├── clothes8.png │ ├── clothes9.png │ ├── fram1.png │ ├── mouse-1.png │ ├── mouse-2.png │ └── mouse-3.png ├── index.html ├── index.js └── style.css └── shared └── config.lua /README.md: -------------------------------------------------------------------------------- 1 | # UPCODE-CLOTHING 2 | CLOTHING MENU FOR FIVEM 3 | 4 | ![UPCODE_CLOTHING](https://github.com/upcodestore/UPCODE-CLOTHING/assets/142344139/9e33ada3-5484-4b5a-86c3-a5602a5e98cc) 5 | 6 | DISCORD: https://discord.com/invite/w743faPRyk 7 | -------------------------------------------------------------------------------- /UPCODE-CLOTHING/client/main.lua: -------------------------------------------------------------------------------- 1 | local CamHandle = nil 2 | 3 | local CurrentFov = 60.0 4 | 5 | local CurrentHeightAdd = 0.0 6 | 7 | local CamActive = false 8 | 9 | local LastIndexes = { mask = nil, hat = nil, glasses = nil, shirt = nil, undershirt = nil, vest = nil, chain = nil, watch = nil, bracelet = nil, pants = nil, bag = nil, shoes = nil } 10 | 11 | local LastTextureIndexes = { mask = nil, hat = nil, glasses = nil, shirt = nil, undershirt = nil, vest = nil, chain = nil, watch = nil, bracelet = nil, pants = nil, bag = nil, shoes = nil } 12 | 13 | local ClothingTable = { 14 | mask = { type = 'component', id = 1 }, 15 | hat = { type = 'prop', id = 0 }, 16 | glasses = { type = 'prop', id = 1 }, 17 | shirt = { type = 'component', id = 11 }, 18 | undershirt = { type = 'component', id = 8 }, 19 | vest = { type = 'component', id = 9 }, 20 | chain = { type = 'component', id = 7 }, 21 | watch = { type = 'prop', id = 6 }, 22 | bracelet = { type = 'prop', id = 7 }, 23 | pants = { type = 'component', id = 4 }, 24 | bag = { type = 'component', id = 5 }, 25 | shoes = { type = 'component', id = 6 } 26 | } 27 | 28 | local AnimPlaying = false 29 | 30 | local function GetClothingState() 31 | return { 32 | mask = GetPedDrawableVariation(PlayerPedId(), 1) ~= 0, 33 | hat = GetPedPropIndex(PlayerPedId(), 0) ~= -1, 34 | glasses = GetPedPropIndex(PlayerPedId(), 1) ~= -1, 35 | shirt = GetPedDrawableVariation(PlayerPedId(), 11) ~= 15, 36 | undershirt = GetPedDrawableVariation(PlayerPedId(), 8) ~= 15, 37 | vest = GetPedDrawableVariation(PlayerPedId(), 9) ~= 0, 38 | chain = GetPedDrawableVariation(PlayerPedId(), 7) ~= 0, 39 | watch = GetPedPropIndex(PlayerPedId(), 6) ~= -1, 40 | bracelet = GetPedPropIndex(PlayerPedId(), 7) ~= -1, 41 | pants = GetPedDrawableVariation(PlayerPedId(), 4) ~= 14, 42 | bag = GetPedDrawableVariation(PlayerPedId(), 5) ~= 0, 43 | shoes = GetPedDrawableVariation(PlayerPedId(), 6) ~= 34 44 | } 45 | end 46 | 47 | local function OpenMenu() 48 | local pedHeading = GetEntityHeading(PlayerPedId()) + 180.0 49 | local camCoords = GetOffsetFromEntityInWorldCoords(PlayerPedId(), 0.0, 2.0, 0.0) 50 | CamHandle = CreateCamWithParams('DEFAULT_SCRIPTED_CAMERA', camCoords.x, camCoords.y, camCoords.z, 0.0, 0.0, pedHeading, CurrentFov, false, 0) 51 | SetCamUseShallowDofMode(CamHandle, true) 52 | SetCamNearDof(CamHandle, 0.2) 53 | SetCamFarDof(CamHandle, 5.0) 54 | SetCamDofStrength(CamHandle, 1.0) 55 | SetCamActive(CamHandle, true) 56 | RenderScriptCams(true, true, 500, true, true) 57 | CamActive = true 58 | SetNuiFocus(true, true) 59 | SendNUIMessage({ type = 'OpenMenu', clothingStates = GetClothingState() }) 60 | if Config.HideMinimap then DisplayRadar(false) end 61 | end 62 | 63 | RegisterNuiCallback('changeScale', function(data, cb) 64 | CurrentFov = CurrentFov + data.scale 65 | if CurrentFov > Config.MaxFov then CurrentFov = Config.MaxFov end 66 | if CurrentFov < Config.MinFov then CurrentFov = Config.MinFov end 67 | SetCamFov(CamHandle, CurrentFov) 68 | end) 69 | 70 | RegisterNuiCallback('changeRotation', function(data, cb) 71 | if data.side == 'right' then 72 | local playerHeading = GetEntityHeading(PlayerPedId()) 73 | local playerRotation = playerHeading + 4.0 74 | SetEntityHeading(PlayerPedId(), playerRotation % 360) 75 | elseif data.side == 'left' then 76 | local playerHeading = GetEntityHeading(PlayerPedId()) 77 | local playerRotation = playerHeading + -4.0 78 | SetEntityHeading(PlayerPedId(), playerRotation % 360) 79 | end 80 | end) 81 | 82 | RegisterNuiCallback('changeHeight', function(data, cb) 83 | if data.direction == 'up' then 84 | CurrentHeightAdd = CurrentHeightAdd + 0.01 85 | if CurrentHeightAdd > Config.MaxHeight then CurrentHeightAdd = Config.MaxHeight end 86 | local camCoords = GetOffsetFromEntityInWorldCoords(PlayerPedId(), 0.0, 2.0, 0.0) 87 | SetCamCoord(CamHandle, camCoords.x, camCoords.y, camCoords.z + CurrentHeightAdd) 88 | PointCamAtEntity(CamHandle, PlayerPedId(), 0.0, 0.0, CurrentHeightAdd) 89 | elseif data.direction == 'down' then 90 | CurrentHeightAdd = CurrentHeightAdd - 0.01 91 | if CurrentHeightAdd < 0 then CurrentHeightAdd = 0 end 92 | local camCoords = GetOffsetFromEntityInWorldCoords(PlayerPedId(), 0.0, 2.0, 0.0) 93 | SetCamCoord(CamHandle, camCoords.x, camCoords.y, camCoords.z + CurrentHeightAdd) 94 | PointCamAtEntity(CamHandle, PlayerPedId(), 0.0, 0.0, CurrentHeightAdd) 95 | end 96 | end) 97 | 98 | RegisterNuiCallback('changeClothesState', function(data, cb) 99 | if AnimPlaying then return end 100 | if LastIndexes[data.clothing] then 101 | local animation = Config.Clothing[data.clothing].animation 102 | while not HasAnimDictLoaded(animation.dict) do RequestAnimDict(animation.dict) Wait(100) end 103 | if IsPedInAnyVehicle(PlayerPedId()) then animation.move = 51 end 104 | TaskPlayAnim(PlayerPedId(), animation.dict, animation.name, 3.0, 3.0, animation.duration, animation.move, 0, false, false, false) 105 | AnimPlaying = true 106 | local pause = animation.duration - 500 if pause < 500 then pause = 500 end 107 | Wait(pause) 108 | AnimPlaying = false 109 | if ClothingTable[data.clothing].type == 'component' then 110 | SetPedComponentVariation(PlayerPedId(), ClothingTable[data.clothing].id, LastIndexes[data.clothing], LastTextureIndexes[data.clothing]) 111 | else 112 | SetPedPropIndex(PlayerPedId(), ClothingTable[data.clothing].id, LastIndexes[data.clothing], LastTextureIndexes[data.clothing]) 113 | end 114 | LastIndexes[data.clothing] = nil 115 | LastTextureIndexes[data.clothing] = nil 116 | SendNUIMessage({ type = 'UpdateStates', clothingStates = GetClothingState() }) 117 | else 118 | local clothingStates = GetClothingState() 119 | if not clothingStates[data.clothing] then return Config.Notification('You don\'t have that part on') end 120 | local animation = Config.Clothing[data.clothing].animation 121 | while not HasAnimDictLoaded(animation.dict) do RequestAnimDict(animation.dict) Wait(100) end 122 | if IsPedInAnyVehicle(PlayerPedId()) then animation.move = 51 end 123 | AnimPlaying = true 124 | TaskPlayAnim(PlayerPedId(), animation.dict, animation.name, 3.0, 3.0, animation.duration, animation.move, 0, false, false, false) 125 | local pause = animation.duration - 500 if pause < 500 then pause = 500 end 126 | Wait(pause) 127 | AnimPlaying = false 128 | if ClothingTable[data.clothing].type == 'component' then 129 | LastIndexes[data.clothing] = GetPedDrawableVariation(PlayerPedId(), ClothingTable[data.clothing].id) 130 | LastTextureIndexes[data.clothing] = GetPedTextureVariation(PlayerPedId(), ClothingTable[data.clothing].id) 131 | SetPedComponentVariation(PlayerPedId(), ClothingTable[data.clothing].id, Config.Clothing[data.clothing].default, 0) 132 | else 133 | LastIndexes[data.clothing] = GetPedPropIndex(PlayerPedId(), ClothingTable[data.clothing].id) 134 | LastTextureIndexes[data.clothing] = GetPedPropTextureIndex(PlayerPedId(), ClothingTable[data.clothing].id) 135 | ClearPedProp(PlayerPedId(), ClothingTable[data.clothing].id) 136 | end 137 | SendNUIMessage({ type = 'UpdateStates', clothingStates = GetClothingState() }) 138 | end 139 | end) 140 | 141 | RegisterNuiCallback('close', function(data, cb) 142 | RenderScriptCams(false, true, 500, 1, 0) 143 | DestroyCam(CamHandle, false) 144 | SetNuiFocus(false, false) 145 | if Config.HideMinimap then DisplayRadar(true) end 146 | CamActive = false 147 | end) 148 | 149 | CreateThread(function() 150 | while true do 151 | if CamActive then 152 | SetUseHiDof() 153 | else 154 | Wait(1000) 155 | end 156 | Wait(0) 157 | end 158 | end) 159 | 160 | RegisterCommand(Config.Open.command, function() 161 | OpenMenu() 162 | end) 163 | 164 | RegisterKeyMapping(Config.Open.command, Config.Open.label, 'keyboard', Config.Open.key) -------------------------------------------------------------------------------- /UPCODE-CLOTHING/fxmanifest.lua: -------------------------------------------------------------------------------- 1 | fx_version 'adamant' 2 | game 'gta5' 3 | 4 | client_scripts { 'shared/*', 'client/*' } 5 | 6 | ui_page 'html/index.html' 7 | 8 | files { 9 | 'html/img/*.*', 10 | 'html/*' 11 | } -------------------------------------------------------------------------------- /UPCODE-CLOTHING/html/img/clothes1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/upcodestore/UPCODE-CLOTHING/dde5810dee33f04da9977282baabf82befcf4921/UPCODE-CLOTHING/html/img/clothes1.png -------------------------------------------------------------------------------- /UPCODE-CLOTHING/html/img/clothes10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/upcodestore/UPCODE-CLOTHING/dde5810dee33f04da9977282baabf82befcf4921/UPCODE-CLOTHING/html/img/clothes10.png -------------------------------------------------------------------------------- /UPCODE-CLOTHING/html/img/clothes11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/upcodestore/UPCODE-CLOTHING/dde5810dee33f04da9977282baabf82befcf4921/UPCODE-CLOTHING/html/img/clothes11.png -------------------------------------------------------------------------------- /UPCODE-CLOTHING/html/img/clothes12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/upcodestore/UPCODE-CLOTHING/dde5810dee33f04da9977282baabf82befcf4921/UPCODE-CLOTHING/html/img/clothes12.png -------------------------------------------------------------------------------- /UPCODE-CLOTHING/html/img/clothes2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/upcodestore/UPCODE-CLOTHING/dde5810dee33f04da9977282baabf82befcf4921/UPCODE-CLOTHING/html/img/clothes2.png -------------------------------------------------------------------------------- /UPCODE-CLOTHING/html/img/clothes3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/upcodestore/UPCODE-CLOTHING/dde5810dee33f04da9977282baabf82befcf4921/UPCODE-CLOTHING/html/img/clothes3.png -------------------------------------------------------------------------------- /UPCODE-CLOTHING/html/img/clothes4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/upcodestore/UPCODE-CLOTHING/dde5810dee33f04da9977282baabf82befcf4921/UPCODE-CLOTHING/html/img/clothes4.png -------------------------------------------------------------------------------- /UPCODE-CLOTHING/html/img/clothes5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/upcodestore/UPCODE-CLOTHING/dde5810dee33f04da9977282baabf82befcf4921/UPCODE-CLOTHING/html/img/clothes5.png -------------------------------------------------------------------------------- /UPCODE-CLOTHING/html/img/clothes6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/upcodestore/UPCODE-CLOTHING/dde5810dee33f04da9977282baabf82befcf4921/UPCODE-CLOTHING/html/img/clothes6.png -------------------------------------------------------------------------------- /UPCODE-CLOTHING/html/img/clothes7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/upcodestore/UPCODE-CLOTHING/dde5810dee33f04da9977282baabf82befcf4921/UPCODE-CLOTHING/html/img/clothes7.png -------------------------------------------------------------------------------- /UPCODE-CLOTHING/html/img/clothes8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/upcodestore/UPCODE-CLOTHING/dde5810dee33f04da9977282baabf82befcf4921/UPCODE-CLOTHING/html/img/clothes8.png -------------------------------------------------------------------------------- /UPCODE-CLOTHING/html/img/clothes9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/upcodestore/UPCODE-CLOTHING/dde5810dee33f04da9977282baabf82befcf4921/UPCODE-CLOTHING/html/img/clothes9.png -------------------------------------------------------------------------------- /UPCODE-CLOTHING/html/img/fram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/upcodestore/UPCODE-CLOTHING/dde5810dee33f04da9977282baabf82befcf4921/UPCODE-CLOTHING/html/img/fram1.png -------------------------------------------------------------------------------- /UPCODE-CLOTHING/html/img/mouse-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/upcodestore/UPCODE-CLOTHING/dde5810dee33f04da9977282baabf82befcf4921/UPCODE-CLOTHING/html/img/mouse-1.png -------------------------------------------------------------------------------- /UPCODE-CLOTHING/html/img/mouse-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/upcodestore/UPCODE-CLOTHING/dde5810dee33f04da9977282baabf82befcf4921/UPCODE-CLOTHING/html/img/mouse-2.png -------------------------------------------------------------------------------- /UPCODE-CLOTHING/html/img/mouse-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/upcodestore/UPCODE-CLOTHING/dde5810dee33f04da9977282baabf82befcf4921/UPCODE-CLOTHING/html/img/mouse-3.png -------------------------------------------------------------------------------- /UPCODE-CLOTHING/html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

Clothing On / Off

14 | Welcome here you can take off and put on certain clothes of yours 15 |
16 |
17 |
18 | Mouse wheel scale 19 | 20 |
21 |
22 | Change height 23 | 24 |
25 |
26 | Character rotation around an axis 27 | 28 |
29 |
30 |
31 |
32 |
33 | Head 34 | 35 |
36 |
37 | 38 | 39 | 40 |
41 |
42 | 43 | 44 | 45 |
46 |
47 | 48 | 49 | 50 |
51 |
52 |
53 |
54 | Torso 55 | 56 |
57 |
58 | 59 | 60 | 61 |
62 |
63 | 64 | 65 | 66 |
67 |
68 | 69 | 70 | 71 |
72 |
73 |
74 |
75 | Accs 76 | 77 |
78 |
79 | 80 | 81 | 82 |
83 |
84 | 85 | 86 | 87 |
88 |
89 | 90 | 91 | 92 |
93 |
94 |
95 |
96 | Legs 97 | 98 |
99 |
100 | 101 | 102 | 103 |
104 |
105 | 106 | 107 | 108 |
109 |
110 | 111 | 112 | 113 |
114 |
115 |
116 |
117 | 118 | -------------------------------------------------------------------------------- /UPCODE-CLOTHING/html/index.js: -------------------------------------------------------------------------------- 1 | window.$(document).ready(function() { 2 | 3 | let ClothingStates = null; 4 | 5 | function ChnageScale(event) { 6 | event.preventDefault(); 7 | window.$.post(`https://${GetParentResourceName()}/changeScale`, JSON.stringify({ 8 | scale: event.originalEvent.deltaY * 0.01 9 | })); 10 | } 11 | 12 | function HandleRotate(event) { 13 | window.$.post(`https://${GetParentResourceName()}/changeRotation`, JSON.stringify({ 14 | side: event.movementX > 0 ? 'right' : 'left' 15 | })); 16 | } 17 | 18 | function HandleHeight(event) { 19 | window.$.post(`https://${GetParentResourceName()}/changeHeight`, JSON.stringify({ 20 | direction: event.movementY > 0 ? 'down' : 'up' 21 | })); 22 | } 23 | 24 | function ChangeClothesState(clothing) { 25 | window.$.post(`https://${GetParentResourceName()}/changeClothesState`, JSON.stringify({ 26 | clothing: clothing 27 | })); 28 | } 29 | 30 | window.addEventListener('message', event => { 31 | switch (event.data.type) { 32 | case 'OpenMenu': 33 | window.$('.top').css( { 'left': '-500px' } ).animate( { 'left': '0' }, { 34 | duration: 200 35 | }); 36 | window.$('.top').css('display', 'flex'); 37 | window.$('.clothing').css('position', 'relative'); 38 | window.$('.clothing').css( { 'left': '-500px' } ).animate( { 'left': '0' }, { 39 | duration: 200, 40 | complete: function() { 41 | window.$('.clothing').css('position', 'initial'); 42 | } 43 | }); 44 | window.$('.clothing').css('display', 'flex'); 45 | window.$('.buttom').css( { 'right': '-500px' } ).animate( { 'right': '0' }, { 46 | duration: 200 47 | }); 48 | window.$('.buttom').css('display', 'flex'); 49 | ClothingStates = event.data.clothingStates; 50 | ClothingStates['mask'] ? window.$('#maskhex').addClass('active') : window.$('#maskhex').removeClass('active'); 51 | ClothingStates['hat'] ? window.$('#hathex').addClass('active') : window.$('#hathex').removeClass('active'); 52 | ClothingStates['glasses'] ? window.$('#glasseshex').addClass('active') : window.$('#glasseshex').removeClass('active'); 53 | ClothingStates['shirt'] ? window.$('#shirthex').addClass('active') : window.$('#shirthex').removeClass('active'); 54 | ClothingStates['undershirt'] ? window.$('#undershirthex').addClass('active') : window.$('#undershirthex').removeClass('active'); 55 | ClothingStates['vest'] ? window.$('#vesthex').addClass('active') : window.$('#vesthex').removeClass('active'); 56 | ClothingStates['chain'] ? window.$('#chainhex').addClass('active') : window.$('#chainhex').removeClass('active'); 57 | ClothingStates['watch'] ? window.$('#watchhex').addClass('active') : window.$('#watchhex').removeClass('active'); 58 | ClothingStates['bracelet'] ? window.$('#bracelethex').addClass('active') : window.$('#bracelethex').removeClass('active'); 59 | ClothingStates['pants'] ? window.$('#pantshex').addClass('active') : window.$('#pantshex').removeClass('active'); 60 | ClothingStates['bag'] ? window.$('#baghex').addClass('active') : window.$('#baghex').removeClass('active'); 61 | ClothingStates['shoes'] ? window.$('#shoeshex').addClass('active') : window.$('#shoeshex').removeClass('active'); 62 | break; 63 | case 'UpdateStates': 64 | ClothingStates = event.data.clothingStates; 65 | ClothingStates['mask'] ? window.$('#maskhex').addClass('active') : window.$('#maskhex').removeClass('active'); 66 | ClothingStates['hat'] ? window.$('#hathex').addClass('active') : window.$('#hathex').removeClass('active'); 67 | ClothingStates['glasses'] ? window.$('#glasseshex').addClass('active') : window.$('#glasseshex').removeClass('active'); 68 | ClothingStates['shirt'] ? window.$('#shirthex').addClass('active') : window.$('#shirthex').removeClass('active'); 69 | ClothingStates['undershirt'] ? window.$('#undershirthex').addClass('active') : window.$('#undershirthex').removeClass('active'); 70 | ClothingStates['vest'] ? window.$('#vesthex').addClass('active') : window.$('#vesthex').removeClass('active'); 71 | ClothingStates['chain'] ? window.$('#chainhex').addClass('active') : window.$('#chainhex').removeClass('active'); 72 | ClothingStates['watch'] ? window.$('#watchhex').addClass('active') : window.$('#watchhex').removeClass('active'); 73 | ClothingStates['bracelet'] ? window.$('#bracelethex').addClass('active') : window.$('#bracelethex').removeClass('active'); 74 | ClothingStates['pants'] ? window.$('#pantshex').addClass('active') : window.$('#pantshex').removeClass('active'); 75 | ClothingStates['bag'] ? window.$('#baghex').addClass('active') : window.$('#baghex').removeClass('active'); 76 | ClothingStates['shoes'] ? window.$('#shoeshex').addClass('active') : window.$('#shoeshex').removeClass('active'); 77 | break; 78 | } 79 | }); 80 | 81 | window.$(document).keydown(function(e) { 82 | if (e.keyCode == 27) { 83 | window.$('.top').css( { 'left': '0' } ).animate( { 'left': '-500px' }, { 84 | duration: 200, 85 | complete: function() { 86 | ClothingStates = null; 87 | window.$('.top').css('display', 'none'); 88 | } 89 | }); 90 | window.$('.clothing').css('position', 'relative'); 91 | window.$('.clothing').css( { 'left': '0' } ).animate( { 'left': '-500px' }, { 92 | duration: 200, 93 | complete: function() { 94 | window.$('.clothing').css('position', 'initial'); 95 | ClothingStates = null; 96 | window.$('.clothing').css('display', 'none'); 97 | } 98 | }); 99 | window.$('.buttom').css( { 'right': '0' } ).animate( { 'right': '-500px' }, { 100 | duration: 200, 101 | complete: function() { 102 | ClothingStates = null; 103 | window.$('.buttom').css('display', 'none'); 104 | } 105 | }); 106 | window.$.post(`https://${GetParentResourceName()}/close`, JSON.stringify({ })); 107 | } 108 | }); 109 | 110 | document.body.onmousedown = function(event) { 111 | if (event.button === 0) { 112 | document.body.addEventListener('mousemove', HandleRotate); 113 | } else { 114 | document.body.addEventListener('mousemove', HandleHeight); 115 | } 116 | } 117 | 118 | document.body.onmouseup = function(event) { 119 | if (event.button === 0) { 120 | document.body.removeEventListener('mousemove', HandleRotate); 121 | } else { 122 | document.body.removeEventListener('mousemove', HandleHeight); 123 | } 124 | } 125 | 126 | window.$('.wrapper').on('wheel', function(event) { 127 | ChnageScale(event); 128 | }); 129 | 130 | ['mask', 'hat', 'glasses', 'shirt', 'undershirt', 'vest', 'chain', 'watch', 'bracelet', 'pants', 'bag', 'shoes'].forEach(element => { 131 | window.$(`#${element}`).on('click', function() { 132 | ChangeClothesState(element); 133 | }) 134 | }); 135 | 136 | }) -------------------------------------------------------------------------------- /UPCODE-CLOTHING/html/style.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.cdnfonts.com/css/gilroy-bold'); 2 | 3 | * { 4 | padding: 0; margin: 0; user-select: none; 5 | box-sizing: border-box; font-family: 'Gilroy-Bold', sans-serif; 6 | } 7 | 8 | ::-webkit-scrollbar { 9 | display: none; 10 | } 11 | 12 | .wrapper { 13 | display: flex; position: absolute; justify-content: center; 14 | width: 100%; height: 100%; flex-direction: column; 15 | } 16 | 17 | .wrapper > .top { 18 | position: absolute; top: 0; left: 0; 19 | display: none; flex-direction: column; margin: 2vw; 20 | } 21 | 22 | .wrapper > .top > h1 { 23 | color: white; font-size: 1.5vw; text-transform: uppercase; 24 | } 25 | 26 | .wrapper > .top > span { 27 | color: rgba(255, 255, 255, 0.7); font-family: 'Gilroy-Light', sans-serif; 28 | font-size: 0.8vw; max-width: 15vw; 29 | } 30 | 31 | .wrapper > .buttom { 32 | position: absolute; right: 0; bottom: 0; align-items: flex-end; 33 | margin: 2vw; display: none; flex-direction: column; gap: 1vh; 34 | } 35 | 36 | .wrapper > .buttom > .item { 37 | display: flex; align-items: center; gap: 0.5vw; 38 | } 39 | 40 | .wrapper > .buttom > .item > span { 41 | color: white; font-family: 'Gilroy-Light', sans-serif; font-size: 1vw; 42 | } 43 | 44 | .wrapper > .buttom > .item > img { 45 | width: 2vw; height: auto; 46 | } 47 | 48 | .wrapper > .clothing { 49 | display: none; flex-direction: column; gap: 5vh; padding-left: 5vw; 50 | } 51 | 52 | .wrapper > .clothing > .row { 53 | display: flex; align-items: center; gap: 1vw; 54 | } 55 | 56 | .wrapper > .clothing > .row > .title { 57 | display: flex; align-items: center; 58 | } 59 | 60 | .wrapper > .clothing > .row > .title > img { 61 | width: 5vw; height: auto; 62 | } 63 | 64 | .wrapper > .clothing > .row > .title > span { 65 | color: white; font-size: 1vw; position: absolute; 66 | font-family: 'Gilroy-Light', sans-serif; 67 | } 68 | 69 | .wrapper > .clothing > .row > .hex { 70 | display: flex; align-items: center; justify-content: center; cursor: pointer; 71 | } 72 | 73 | .wrapper > .clothing > .row > .hex > span:first-child { 74 | position: absolute; font-size: 7vw; color: rgba(56, 110, 215, 0.2); 75 | } 76 | 77 | .wrapper > .clothing > .row > .hex > span { 78 | font-size: 6vw; color: #386ED7; line-height: 0; 79 | } 80 | 81 | .wrapper > .clothing > .row > .hex > span.active { 82 | color: #5095F9; 83 | filter: drop-shadow(0 0 1vw #5095F9); 84 | } 85 | 86 | .wrapper > .clothing > .row > .hex > img { 87 | width: 1.5vw; height: auto; position: absolute; 88 | } 89 | 90 | .wrapper > .clothing > .row > .hex:hover { 91 | opacity: 50%; transition: 0.2s; 92 | } -------------------------------------------------------------------------------- /UPCODE-CLOTHING/shared/config.lua: -------------------------------------------------------------------------------- 1 | Config = { } 2 | 3 | Config.Open = { 4 | command = 'clothing', 5 | label = 'Open clothing menu', 6 | key = 'Y' 7 | } 8 | 9 | Config.HideMinimap = true 10 | 11 | Config.MaxFov = 70.0 12 | 13 | Config.MinFov = 30.0 14 | 15 | Config.MaxHeight = 0.5 16 | 17 | Config.Clothing = { 18 | mask = { 19 | default = 0, 20 | animation = { dict = 'mp_masks@standard_car@ds@', name = 'put_on_mask', move = 51, duration = 800 } 21 | }, 22 | hat = { 23 | animation = { dict = 'clothingtie', name = 'check_out_a', move = 51, duration = 2000 } 24 | }, 25 | glasses = { 26 | animation = { dict = 'clothingspecs', name = 'take_off', move = 51, duration = 1400 } 27 | }, 28 | shirt = { 29 | default = 15, 30 | animation = { dict = 'missmic4', name = 'michael_tux_fidget', move = 51, duration = 1500 } 31 | }, 32 | undershirt = { 33 | default = 15, 34 | animation = { dict = 'missmic4', name = 'michael_tux_fidget', move = 51, duration = 1500 } 35 | }, 36 | vest = { 37 | default = 0, 38 | animation = { dict = 'clothingtie', name = 'try_tie_negative_a', move = 51, duration = 1200 } 39 | }, 40 | chain = { 41 | default = 0, 42 | animation = { dict = 'clothingtie', name = 'try_tie_positive_a', move = 51, duration = 2100 } 43 | }, 44 | watch = { 45 | animation = { dict = 'nmt_3_rcm-10', name = 'cs_nigel_dual-10', move = 51, duration = 1200 } 46 | }, 47 | bracelet = { 48 | animation = { dict = 'nmt_3_rcm-10', name = 'cs_nigel_dual-10', move = 51, duration = 1200 } 49 | }, 50 | pants = { 51 | default = 14, 52 | animation = { dict = 're@construction', name = 'out_of_breath', move = 51, duration = 1300 } 53 | }, 54 | bag = { 55 | default = 0, 56 | animation = { dict = 'clothingtie', name = 'try_tie_negative_a', move = 51, duration = 1200 } 57 | }, 58 | shoes = { 59 | default = 34, 60 | animation = { dict = 'random@domestic', name = 'pickup_low', move = 0, duration = 1200 } 61 | } 62 | } 63 | 64 | Config.Notification = function(text) 65 | SetNotificationTextEntry('STRING') 66 | AddTextComponentSubstringPlayerName(text) 67 | DrawNotification(false, true) 68 | end --------------------------------------------------------------------------------