953 lines
26 KiB
Lua
953 lines
26 KiB
Lua
local config = require 'config.client'
|
|
local variations = {
|
|
jackets = {male = {}, female = {}},
|
|
hair = {male = {}, female = {}},
|
|
bags = {male = {}, female = {}},
|
|
visor = {male = {}, female = {}},
|
|
gloves = {
|
|
male = {
|
|
[16] = 4,
|
|
[17] = 4,
|
|
[18] = 4,
|
|
[19] = 0,
|
|
[20] = 1,
|
|
[21] = 2,
|
|
[22] = 4,
|
|
[23] = 5,
|
|
[24] = 6,
|
|
[25] = 8,
|
|
[26] = 11,
|
|
[27] = 12,
|
|
[28] = 14,
|
|
[29] = 15,
|
|
[30] = 0,
|
|
[31] = 1,
|
|
[32] = 2,
|
|
[33] = 4,
|
|
[34] = 5,
|
|
[35] = 6,
|
|
[36] = 8,
|
|
[37] = 11,
|
|
[38] = 12,
|
|
[39] = 14,
|
|
[40] = 15,
|
|
[41] = 0,
|
|
[42] = 1,
|
|
[43] = 2,
|
|
[44] = 4,
|
|
[45] = 5,
|
|
[46] = 6,
|
|
[47] = 8,
|
|
[48] = 11,
|
|
[49] = 12,
|
|
[50] = 14,
|
|
[51] = 15,
|
|
[52] = 0,
|
|
[53] = 1,
|
|
[54] = 2,
|
|
[55] = 4,
|
|
[56] = 5,
|
|
[57] = 6,
|
|
[58] = 8,
|
|
[59] = 11,
|
|
[60] = 12,
|
|
[61] = 14,
|
|
[62] = 15,
|
|
[63] = 0,
|
|
[64] = 1,
|
|
[65] = 2,
|
|
[66] = 4,
|
|
[67] = 5,
|
|
[68] = 6,
|
|
[69] = 8,
|
|
[70] = 11,
|
|
[71] = 12,
|
|
[72] = 14,
|
|
[73] = 15,
|
|
[74] = 0,
|
|
[75] = 1,
|
|
[76] = 2,
|
|
[77] = 4,
|
|
[78] = 5,
|
|
[79] = 6,
|
|
[80] = 8,
|
|
[81] = 11,
|
|
[82] = 12,
|
|
[83] = 14,
|
|
[84] = 15,
|
|
[85] = 0,
|
|
[86] = 1,
|
|
[87] = 2,
|
|
[88] = 4,
|
|
[89] = 5,
|
|
[90] = 6,
|
|
[91] = 8,
|
|
[92] = 11,
|
|
[93] = 12,
|
|
[94] = 14,
|
|
[95] = 15,
|
|
[96] = 4,
|
|
[97] = 4,
|
|
[98] = 4,
|
|
[99] = 0,
|
|
[100] = 1,
|
|
[101] = 2,
|
|
[102] = 4,
|
|
[103] = 5,
|
|
[104] = 6,
|
|
[105] = 8,
|
|
[106] = 11,
|
|
[107] = 12,
|
|
[108] = 14,
|
|
[109] = 15,
|
|
[110] = 4,
|
|
[111] = 4,
|
|
[115] = 112,
|
|
[116] = 112,
|
|
[117] = 112,
|
|
[118] = 112,
|
|
[119] = 112,
|
|
[120] = 112,
|
|
[121] = 112,
|
|
[122] = 113,
|
|
[123] = 113,
|
|
[124] = 113,
|
|
[125] = 113,
|
|
[126] = 113,
|
|
[127] = 113,
|
|
[128] = 113,
|
|
[129] = 114,
|
|
[130] = 114,
|
|
[131] = 114,
|
|
[132] = 114,
|
|
[133] = 114,
|
|
[134] = 114,
|
|
[135] = 114,
|
|
[136] = 15,
|
|
[137] = 15,
|
|
[138] = 0,
|
|
[139] = 1,
|
|
[140] = 2,
|
|
[141] = 4,
|
|
[142] = 5,
|
|
[143] = 6,
|
|
[144] = 8,
|
|
[145] = 11,
|
|
[146] = 12,
|
|
[147] = 14,
|
|
[148] = 112,
|
|
[149] = 113,
|
|
[150] = 114,
|
|
[151] = 0,
|
|
[152] = 1,
|
|
[153] = 2,
|
|
[154] = 4,
|
|
[155] = 5,
|
|
[156] = 6,
|
|
[157] = 8,
|
|
[158] = 11,
|
|
[159] = 12,
|
|
[160] = 14,
|
|
[161] = 112,
|
|
[162] = 113,
|
|
[163] = 114,
|
|
[165] = 4,
|
|
[166] = 4,
|
|
[167] = 4,
|
|
[168] = 4,
|
|
[170] = 15,
|
|
[171] = 0,
|
|
[172] = 1,
|
|
[173] = 2,
|
|
[174] = 4,
|
|
[175] = 5,
|
|
[176] = 6,
|
|
[177] = 8,
|
|
[178] = 11,
|
|
[179] = 12,
|
|
[180] = 14,
|
|
[181] = 112,
|
|
[182] = 113,
|
|
[183] = 114,
|
|
[185] = 184,
|
|
[186] = 184,
|
|
[187] = 184,
|
|
[188] = 184,
|
|
[189] = 185,
|
|
[190] = 184,
|
|
[191] = 184,
|
|
[192] = 184,
|
|
[193] = 184,
|
|
[194] = 184,
|
|
},
|
|
female = {
|
|
[16] = 11,
|
|
[17] = 3,
|
|
[18] = 3,
|
|
[19] = 3,
|
|
[20] = 0,
|
|
[21] = 1,
|
|
[22] = 2,
|
|
[23] = 3,
|
|
[24] = 4,
|
|
[25] = 5,
|
|
[26] = 6,
|
|
[27] = 7,
|
|
[28] = 9,
|
|
[29] = 11,
|
|
[30] = 12,
|
|
[31] = 14,
|
|
[32] = 15,
|
|
[33] = 0,
|
|
[34] = 1,
|
|
[35] = 2,
|
|
[36] = 3,
|
|
[37] = 4,
|
|
[38] = 5,
|
|
[39] = 6,
|
|
[40] = 7,
|
|
[41] = 9,
|
|
[42] = 11,
|
|
[43] = 12,
|
|
[44] = 14,
|
|
[45] = 15,
|
|
[46] = 0,
|
|
[47] = 1,
|
|
[48] = 2,
|
|
[49] = 3,
|
|
[50] = 4,
|
|
[51] = 5,
|
|
[52] = 6,
|
|
[53] = 7,
|
|
[54] = 9,
|
|
[55] = 11,
|
|
[56] = 12,
|
|
[57] = 14,
|
|
[58] = 15,
|
|
[59] = 0,
|
|
[60] = 1,
|
|
[61] = 2,
|
|
[62] = 3,
|
|
[63] = 4,
|
|
[64] = 5,
|
|
[65] = 6,
|
|
[66] = 7,
|
|
[67] = 9,
|
|
[68] = 11,
|
|
[69] = 12,
|
|
[70] = 14,
|
|
[71] = 15,
|
|
[72] = 0,
|
|
[73] = 1,
|
|
[74] = 2,
|
|
[75] = 3,
|
|
[76] = 4,
|
|
[77] = 5,
|
|
[78] = 6,
|
|
[79] = 7,
|
|
[80] = 9,
|
|
[81] = 11,
|
|
[82] = 12,
|
|
[83] = 14,
|
|
[84] = 15,
|
|
[85] = 0,
|
|
[86] = 1,
|
|
[87] = 2,
|
|
[88] = 3,
|
|
[89] = 4,
|
|
[90] = 5,
|
|
[91] = 6,
|
|
[92] = 7,
|
|
[93] = 9,
|
|
[94] = 11,
|
|
[95] = 12,
|
|
[96] = 14,
|
|
[97] = 15,
|
|
[98] = 0,
|
|
[99] = 1,
|
|
[100] = 2,
|
|
[101] = 3,
|
|
[102] = 4,
|
|
[103] = 5,
|
|
[104] = 6,
|
|
[105] = 7,
|
|
[106] = 9,
|
|
[107] = 11,
|
|
[108] = 12,
|
|
[109] = 14,
|
|
[110] = 15,
|
|
[111] = 3,
|
|
[112] = 3,
|
|
[113] = 3,
|
|
[114] = 0,
|
|
[115] = 1,
|
|
[116] = 2,
|
|
[117] = 3,
|
|
[118] = 4,
|
|
[119] = 5,
|
|
[120] = 6,
|
|
[121] = 7,
|
|
[122] = 9,
|
|
[123] = 11,
|
|
[124] = 12,
|
|
[125] = 14,
|
|
[126] = 15,
|
|
[127] = 3,
|
|
[128] = 3,
|
|
[132] = 129,
|
|
[133] = 129,
|
|
[134] = 129,
|
|
[135] = 129,
|
|
[136] = 129,
|
|
[137] = 129,
|
|
[138] = 129,
|
|
[139] = 130,
|
|
[140] = 130,
|
|
[141] = 130,
|
|
[142] = 130,
|
|
[143] = 130,
|
|
[144] = 130,
|
|
[145] = 130,
|
|
[146] = 131,
|
|
[147] = 131,
|
|
[148] = 131,
|
|
[149] = 131,
|
|
[150] = 131,
|
|
[151] = 131,
|
|
[152] = 131,
|
|
[154] = 153,
|
|
[155] = 153,
|
|
[156] = 153,
|
|
[157] = 153,
|
|
[158] = 153,
|
|
[159] = 153,
|
|
[160] = 153,
|
|
[162] = 161,
|
|
[163] = 161,
|
|
[164] = 161,
|
|
[165] = 161,
|
|
[166] = 161,
|
|
[167] = 161,
|
|
[168] = 161,
|
|
[169] = 15,
|
|
[170] = 15,
|
|
[171] = 0,
|
|
[172] = 1,
|
|
[173] = 2,
|
|
[174] = 3,
|
|
[175] = 4,
|
|
[176] = 5,
|
|
[177] = 6,
|
|
[178] = 7,
|
|
[179] = 9,
|
|
[180] = 11,
|
|
[181] = 12,
|
|
[182] = 14,
|
|
[183] = 129,
|
|
[184] = 130,
|
|
[185] = 131,
|
|
[186] = 153,
|
|
[187] = 0,
|
|
[188] = 1,
|
|
[189] = 2,
|
|
[190] = 3,
|
|
[191] = 4,
|
|
[192] = 5,
|
|
[193] = 6,
|
|
[194] = 7,
|
|
[195] = 9,
|
|
[196] = 11,
|
|
[197] = 12,
|
|
[198] = 14,
|
|
[199] = 129,
|
|
[200] = 130,
|
|
[201] = 131,
|
|
[202] = 153,
|
|
[203] = 161,
|
|
[204] = 161,
|
|
[206] = 3,
|
|
[207] = 3,
|
|
[208] = 3,
|
|
[209] = 3,
|
|
[211] = 15,
|
|
[212] = 0,
|
|
[213] = 1,
|
|
[214] = 2,
|
|
[215] = 3,
|
|
[216] = 4,
|
|
[217] = 5,
|
|
[218] = 6,
|
|
[219] = 7,
|
|
[220] = 9,
|
|
[221] = 11,
|
|
[222] = 12,
|
|
[223] = 14,
|
|
[224] = 129,
|
|
[225] = 130,
|
|
[226] = 131,
|
|
[227] = 153,
|
|
[228] = 161,
|
|
[230] = 229,
|
|
[231] = 229,
|
|
[232] = 229,
|
|
[233] = 229,
|
|
[234] = 229,
|
|
[235] = 229,
|
|
[236] = 229,
|
|
[237] = 229,
|
|
[238] = 229,
|
|
[239] = 229,
|
|
}
|
|
}
|
|
}
|
|
|
|
local function addNewVariation(which, gender, one, two, single)
|
|
local where = variations[which][gender]
|
|
if not single then
|
|
where[one] = two
|
|
where[two] = one
|
|
else
|
|
where[one] = two
|
|
end
|
|
end
|
|
|
|
CreateThread(function()
|
|
-- male visor/Hat variations
|
|
addNewVariation("visor", "male", 9, 10)
|
|
addNewVariation("visor", "male", 18, 67)
|
|
addNewVariation("visor", "male", 82, 67)
|
|
addNewVariation("visor", "male", 44, 45)
|
|
addNewVariation("visor", "male", 50, 68)
|
|
addNewVariation("visor", "male", 51, 69)
|
|
addNewVariation("visor", "male", 52, 70)
|
|
addNewVariation("visor", "male", 53, 71)
|
|
addNewVariation("visor", "male", 62, 72)
|
|
addNewVariation("visor", "male", 65, 66)
|
|
addNewVariation("visor", "male", 73, 74)
|
|
addNewVariation("visor", "male", 76, 77)
|
|
addNewVariation("visor", "male", 79, 78)
|
|
addNewVariation("visor", "male", 80, 81)
|
|
addNewVariation("visor", "male", 91, 92)
|
|
addNewVariation("visor", "male", 104, 105)
|
|
addNewVariation("visor", "male", 109, 110)
|
|
addNewVariation("visor", "male", 116, 117)
|
|
addNewVariation("visor", "male", 118, 119)
|
|
addNewVariation("visor", "male", 123, 124)
|
|
addNewVariation("visor", "male", 125, 126)
|
|
addNewVariation("visor", "male", 127, 128)
|
|
addNewVariation("visor", "male", 130, 131)
|
|
addNewVariation("visor", "male", 135, 136)
|
|
addNewVariation("visor", "male", 137, 138)
|
|
addNewVariation("visor", "male", 139, 140)
|
|
addNewVariation("visor", "male", 142, 143)
|
|
addNewVariation("visor", "male", 147, 148)
|
|
addNewVariation("visor", "male", 151, 152)
|
|
addNewVariation("visor", "male", 127, 128)
|
|
addNewVariation("visor", "male", 130, 131)
|
|
-- female visor/Hat variations
|
|
addNewVariation("visor", "female", 43, 44)
|
|
addNewVariation("visor", "female", 49, 67)
|
|
addNewVariation("visor", "female", 64, 65)
|
|
addNewVariation("visor", "female", 65, 64)
|
|
addNewVariation("visor", "female", 51, 69)
|
|
addNewVariation("visor", "female", 50, 68)
|
|
addNewVariation("visor", "female", 52, 70)
|
|
addNewVariation("visor", "female", 62, 71)
|
|
addNewVariation("visor", "female", 72, 73)
|
|
addNewVariation("visor", "female", 75, 76)
|
|
addNewVariation("visor", "female", 78, 77)
|
|
addNewVariation("visor", "female", 79, 80)
|
|
addNewVariation("visor", "female", 18, 66)
|
|
addNewVariation("visor", "female", 66, 81)
|
|
addNewVariation("visor", "female", 81, 66)
|
|
addNewVariation("visor", "female", 86, 84)
|
|
addNewVariation("visor", "female", 90, 91)
|
|
addNewVariation("visor", "female", 103, 104)
|
|
addNewVariation("visor", "female", 108, 109)
|
|
addNewVariation("visor", "female", 115, 116)
|
|
addNewVariation("visor", "female", 117, 118)
|
|
addNewVariation("visor", "female", 122, 123)
|
|
addNewVariation("visor", "female", 124, 125)
|
|
addNewVariation("visor", "female", 126, 127)
|
|
addNewVariation("visor", "female", 129, 130)
|
|
addNewVariation("visor", "female", 134, 135)
|
|
addNewVariation("visor", "female", 136, 137)
|
|
addNewVariation("visor", "female", 138, 139)
|
|
addNewVariation("visor", "female", 141, 142)
|
|
addNewVariation("visor", "female", 146, 147)
|
|
addNewVariation("visor", "female", 150, 151)
|
|
-- male bags
|
|
addNewVariation("bags", "male", 45, 44)
|
|
addNewVariation("bags", "male", 41, 40)
|
|
addNewVariation("bags", "male", 82, 81)
|
|
addNewVariation("bags", "male", 86, 85)
|
|
-- female bags
|
|
addNewVariation("bags", "female", 45, 44)
|
|
addNewVariation("bags", "female", 41, 40)
|
|
addNewVariation("bags", "female", 82, 81)
|
|
addNewVariation("bags", "female", 86, 85)
|
|
-- male hair
|
|
addNewVariation("hair", "male", 7, 15, true)
|
|
addNewVariation("hair", "male", 43, 15, true)
|
|
addNewVariation("hair", "male", 9, 43, true)
|
|
addNewVariation("hair", "male", 11, 43, true)
|
|
addNewVariation("hair", "male", 15, 43, true)
|
|
addNewVariation("hair", "male", 16, 43, true)
|
|
addNewVariation("hair", "male", 17, 43, true)
|
|
addNewVariation("hair", "male", 20, 43, true)
|
|
addNewVariation("hair", "male", 22, 43, true)
|
|
addNewVariation("hair", "male", 45, 43, true)
|
|
addNewVariation("hair", "male", 47, 43, true)
|
|
addNewVariation("hair", "male", 49, 43, true)
|
|
addNewVariation("hair", "male", 51, 43, true)
|
|
addNewVariation("hair", "male", 52, 43, true)
|
|
addNewVariation("hair", "male", 53, 43, true)
|
|
addNewVariation("hair", "male", 56, 43, true)
|
|
addNewVariation("hair", "male", 58, 43, true)
|
|
-- female hair
|
|
addNewVariation("hair", "female", 1, 49, true)
|
|
addNewVariation("hair", "female", 2, 49, true)
|
|
addNewVariation("hair", "female", 7, 49, true)
|
|
addNewVariation("hair", "female", 9, 49, true)
|
|
addNewVariation("hair", "female", 10, 49, true)
|
|
addNewVariation("hair", "female", 11, 48, true)
|
|
addNewVariation("hair", "female", 14, 53, true)
|
|
addNewVariation("hair", "female", 15, 42, true)
|
|
addNewVariation("hair", "female", 21, 42, true)
|
|
addNewVariation("hair", "female", 23, 42, true)
|
|
addNewVariation("hair", "female", 31, 53, true)
|
|
addNewVariation("hair", "female", 39, 49, true)
|
|
addNewVariation("hair", "female", 40, 49, true)
|
|
addNewVariation("hair", "female", 42, 53, true)
|
|
addNewVariation("hair", "female", 45, 49, true)
|
|
addNewVariation("hair", "female", 48, 49, true)
|
|
addNewVariation("hair", "female", 49, 48, true)
|
|
addNewVariation("hair", "female", 52, 53, true)
|
|
addNewVariation("hair", "female", 53, 42, true)
|
|
addNewVariation("hair", "female", 54, 55, true)
|
|
addNewVariation("hair", "female", 59, 42, true)
|
|
addNewVariation("hair", "female", 59, 54, true)
|
|
addNewVariation("hair", "female", 68, 53, true)
|
|
addNewVariation("hair", "female", 76, 48, true)
|
|
-- male Top/Jacket variations
|
|
addNewVariation("jackets", "male", 29, 30)
|
|
addNewVariation("jackets", "male", 31, 32)
|
|
addNewVariation("jackets", "male", 42, 43)
|
|
addNewVariation("jackets", "male", 59, 60)
|
|
addNewVariation("jackets", "male", 68, 69)
|
|
addNewVariation("jackets", "male", 74, 75)
|
|
addNewVariation("jackets", "male", 87, 88)
|
|
addNewVariation("jackets", "male", 93, 94)
|
|
addNewVariation("jackets", "male", 99, 100)
|
|
addNewVariation("jackets", "male", 101, 102)
|
|
addNewVariation("jackets", "male", 103, 104)
|
|
addNewVariation("jackets", "male", 126, 127)
|
|
addNewVariation("jackets", "male", 129, 130)
|
|
addNewVariation("jackets", "male", 131, 132)
|
|
addNewVariation("jackets", "male", 184, 185)
|
|
addNewVariation("jackets", "male", 188, 189)
|
|
addNewVariation("jackets", "male", 194, 195)
|
|
addNewVariation("jackets", "male", 196, 197)
|
|
addNewVariation("jackets", "male", 198, 199)
|
|
addNewVariation("jackets", "male", 200, 203)
|
|
addNewVariation("jackets", "male", 202, 205)
|
|
addNewVariation("jackets", "male", 206, 207)
|
|
addNewVariation("jackets", "male", 209, 212)
|
|
addNewVariation("jackets", "male", 210, 211)
|
|
addNewVariation("jackets", "male", 217, 218)
|
|
addNewVariation("jackets", "male", 229, 230)
|
|
addNewVariation("jackets", "male", 232, 233)
|
|
addNewVariation("jackets", "male", 235, 236)
|
|
addNewVariation("jackets", "male", 241, 242)
|
|
addNewVariation("jackets", "male", 251, 253)
|
|
addNewVariation("jackets", "male", 256, 261)
|
|
addNewVariation("jackets", "male", 262, 263)
|
|
addNewVariation("jackets", "male", 265, 266)
|
|
addNewVariation("jackets", "male", 267, 268)
|
|
addNewVariation("jackets", "male", 279, 280)
|
|
addNewVariation("jackets", "male", 292, 293)
|
|
addNewVariation("jackets", "male", 294, 295)
|
|
addNewVariation("jackets", "male", 296, 297)
|
|
addNewVariation("jackets", "male", 300, 303)
|
|
addNewVariation("jackets", "male", 301, 302)
|
|
addNewVariation("jackets", "male", 305, 306)
|
|
addNewVariation("jackets", "male", 311, 312)
|
|
addNewVariation("jackets", "male", 300, 303)
|
|
addNewVariation("jackets", "male", 301, 302)
|
|
addNewVariation("jackets", "male", 305, 306)
|
|
addNewVariation("jackets", "male", 311, 312)
|
|
addNewVariation("jackets", "male", 314, 315)
|
|
addNewVariation("jackets", "male", 316, 317)
|
|
addNewVariation("jackets", "male", 318, 319)
|
|
addNewVariation("jackets", "male", 321, 322)
|
|
addNewVariation("jackets", "male", 330, 331)
|
|
addNewVariation("jackets", "male", 336, 337)
|
|
addNewVariation("jackets", "male", 339, 126)
|
|
addNewVariation("jackets", "male", 340, 341)
|
|
addNewVariation("jackets", "male", 343, 344)
|
|
addNewVariation("jackets", "male", 346, 234)
|
|
addNewVariation("jackets", "male", 347, 260)
|
|
addNewVariation("jackets", "male", 348, 349)
|
|
addNewVariation("jackets", "male", 352, 353)
|
|
addNewVariation("jackets", "male", 354, 355)
|
|
addNewVariation("jackets", "male", 359, 360)
|
|
-- female Top/Jacket variations
|
|
addNewVariation("jackets", "female", 53, 52)
|
|
addNewVariation("jackets", "female", 57, 58)
|
|
addNewVariation("jackets", "female", 62, 63)
|
|
addNewVariation("jackets", "female", 84, 85)
|
|
addNewVariation("jackets", "female", 90, 91)
|
|
addNewVariation("jackets", "female", 92, 93)
|
|
addNewVariation("jackets", "female", 94, 95)
|
|
addNewVariation("jackets", "female", 117, 118)
|
|
addNewVariation("jackets", "female", 120, 121)
|
|
addNewVariation("jackets", "female", 128, 129)
|
|
addNewVariation("jackets", "female", 187, 186)
|
|
addNewVariation("jackets", "female", 190, 191)
|
|
addNewVariation("jackets", "female", 196, 197)
|
|
addNewVariation("jackets", "female", 198, 199)
|
|
addNewVariation("jackets", "female", 200, 201)
|
|
addNewVariation("jackets", "female", 202, 205)
|
|
addNewVariation("jackets", "female", 204, 207)
|
|
addNewVariation("jackets", "female", 210, 211)
|
|
addNewVariation("jackets", "female", 213, 216)
|
|
addNewVariation("jackets", "female", 214, 215)
|
|
addNewVariation("jackets", "female", 225, 226)
|
|
addNewVariation("jackets", "female", 227, 228)
|
|
addNewVariation("jackets", "female", 239, 240)
|
|
addNewVariation("jackets", "female", 242, 243)
|
|
addNewVariation("jackets", "female", 244, 364)
|
|
addNewVariation("jackets", "female", 245, 246)
|
|
addNewVariation("jackets", "female", 249, 250)
|
|
addNewVariation("jackets", "female", 259, 261)
|
|
addNewVariation("jackets", "female", 265, 270)
|
|
addNewVariation("jackets", "female", 271, 272)
|
|
addNewVariation("jackets", "female", 274, 275)
|
|
addNewVariation("jackets", "female", 276, 277)
|
|
addNewVariation("jackets", "female", 280, 281)
|
|
addNewVariation("jackets", "female", 292, 293)
|
|
addNewVariation("jackets", "female", 305, 306)
|
|
addNewVariation("jackets", "female", 307, 308)
|
|
addNewVariation("jackets", "female", 311, 314)
|
|
addNewVariation("jackets", "female", 312, 313)
|
|
addNewVariation("jackets", "female", 316, 317)
|
|
addNewVariation("jackets", "female", 325, 326)
|
|
addNewVariation("jackets", "female", 327, 328)
|
|
addNewVariation("jackets", "female", 329, 330)
|
|
addNewVariation("jackets", "female", 332, 333)
|
|
addNewVariation("jackets", "female", 339, 340)
|
|
addNewVariation("jackets", "female", 345, 346)
|
|
addNewVariation("jackets", "female", 351, 352)
|
|
addNewVariation("jackets", "female", 354, 121)
|
|
addNewVariation("jackets", "female", 355, 356)
|
|
addNewVariation("jackets", "female", 357, 359)
|
|
addNewVariation("jackets", "female", 358, 360)
|
|
addNewVariation("jackets", "female", 362, 363)
|
|
addNewVariation("jackets", "female", 366, 367)
|
|
addNewVariation("jackets", "female", 365, 269)
|
|
addNewVariation("jackets", "female", 370, 371)
|
|
addNewVariation("jackets", "female", 372, 373)
|
|
addNewVariation("jackets", "female", 378, 379)
|
|
end)
|
|
|
|
local drawables = {
|
|
["Top"] = {
|
|
Drawable = 11,
|
|
Table = variations.jackets,
|
|
Emote = {Dict = "missmic4", Anim = "michael_tux_fidget", Move = 51, Dur = 1500}
|
|
},
|
|
["Gloves"] = {
|
|
Drawable = 3,
|
|
Table = variations.gloves,
|
|
Remember = true,
|
|
Emote = {Dict = "nmt_3_rcm-10", Anim = "cs_nigel_dual-10", Move = 51, Dur = 1200}
|
|
},
|
|
["Shoes"] = {
|
|
Drawable = 6,
|
|
Table = {Standalone = true, male = 34, female = 35},
|
|
Emote = {Dict = "random@domestic", Anim = "pickup_low", Move = 0, Dur = 1200}
|
|
},
|
|
["Neck"] = {
|
|
Drawable = 7,
|
|
Table = {Standalone = true, male = 0, female = 0 },
|
|
Emote = {Dict = "clothingtie", Anim = "try_tie_positive_a", Move = 51, Dur = 2100}
|
|
},
|
|
["Vest"] = {
|
|
Drawable = 9,
|
|
Table = {Standalone = true, male = 0, female = 0 },
|
|
Emote = {Dict = "clothingtie", Anim = "try_tie_negative_a", Move = 51, Dur = 1200}
|
|
},
|
|
["Bag"] = {
|
|
Drawable = 5,
|
|
Table = variations.bags,
|
|
Emote = {Dict = "anim@heists@ornate_bank@grab_cash", Anim = "intro", Move = 51, Dur = 1600}
|
|
},
|
|
["Mask"] = {
|
|
Drawable = 1,
|
|
Table = {Standalone = true, male = 0, female = 0 },
|
|
Emote = {Dict = "mp_masks@standard_car@ds@", Anim = "put_on_mask", Move = 51, Dur = 800}
|
|
},
|
|
["Hair"] = {
|
|
Drawable = 2,
|
|
Table = variations.hair,
|
|
Remember = true,
|
|
Emote = {Dict = "clothingtie", Anim = "check_out_a", Move = 51, Dur = 2000}
|
|
},
|
|
}
|
|
|
|
local Extras = {
|
|
["Shirt"] = {
|
|
Drawable = 11,
|
|
Table = {
|
|
Standalone = true, male = 252, female = 74,
|
|
Extra = {
|
|
{Drawable = 8, Id = 15, Tex = 0, Name = "Extra Undershirt"},
|
|
{Drawable = 3, Id = 15, Tex = 0, Name = "Extra Gloves"},
|
|
{Drawable = 10, Id = 0, Tex = 0, Name = "Extra Decals"},
|
|
}
|
|
},
|
|
Emote = {Dict = "clothingtie", Anim = "try_tie_negative_a", Move = 51, Dur = 1200}
|
|
},
|
|
["Pants"] = {
|
|
Drawable = 4,
|
|
Table = {Standalone = true, male = 61, female = 14},
|
|
Emote = {Dict = "re@construction", Anim = "out_of_breath", Move = 51, Dur = 1300}
|
|
},
|
|
["Bagoff"] = {
|
|
Drawable = 5,
|
|
Table = {Standalone = true, male = 0, female = 0},
|
|
Emote = {Dict = "clothingtie", Anim = "try_tie_negative_a", Move = 51, Dur = 1200}
|
|
},
|
|
}
|
|
|
|
local Props = {
|
|
["Visor"] = {
|
|
Prop = 0,
|
|
Variants = variations.visor,
|
|
Emote = {
|
|
On = {Dict = "mp_masks@standard_car@ds@", Anim = "put_on_mask", Move = 51, Dur = 600},
|
|
Off = {Dict = "missheist_agency2ahelmet", Anim = "take_off_helmet_stand", Move = 51, Dur = 1200}
|
|
}
|
|
},
|
|
["Hat"] = {
|
|
Prop = 0,
|
|
Emote = {
|
|
On = {Dict = "mp_masks@standard_car@ds@", Anim = "put_on_mask", Move = 51, Dur = 600},
|
|
Off = {Dict = "missheist_agency2ahelmet", Anim = "take_off_helmet_stand", Move = 51, Dur = 1200}
|
|
}
|
|
},
|
|
["Glasses"] = {
|
|
Prop = 1,
|
|
Emote = {
|
|
On = {Dict = "clothingspecs", Anim = "take_off", Move = 51, Dur = 1400},
|
|
Off = {Dict = "clothingspecs", Anim = "take_off", Move = 51, Dur = 1400}
|
|
}
|
|
},
|
|
["Ear"] = {
|
|
Prop = 2,
|
|
Emote = {
|
|
On = {Dict = "mp_cp_stolen_tut", Anim = "b_think", Move = 51, Dur = 900},
|
|
Off = {Dict = "mp_cp_stolen_tut", Anim = "b_think", Move = 51, Dur = 900}
|
|
}
|
|
},
|
|
["Watch"] = {
|
|
Prop = 6,
|
|
Emote = {
|
|
On = {Dict = "nmt_3_rcm-10", Anim = "cs_nigel_dual-10", Move = 51, Dur = 1200},
|
|
Off = {Dict = "nmt_3_rcm-10", Anim = "cs_nigel_dual-10", Move = 51, Dur = 1200}
|
|
}
|
|
},
|
|
["Bracelet"] = {
|
|
Prop = 7,
|
|
Emote = {
|
|
On = {Dict = "nmt_3_rcm-10", Anim = "cs_nigel_dual-10", Move = 51, Dur = 1200},
|
|
Off = {Dict = "nmt_3_rcm-10", Anim = "cs_nigel_dual-10", Move = 51, Dur = 1200}
|
|
}
|
|
},
|
|
}
|
|
|
|
LastEquipped = {}
|
|
Cooldown = false
|
|
|
|
local function PlayToggleEmote(e, cb)
|
|
if cache.vehicle then e.Move = 51 end
|
|
lib.playAnim(cache.ped, e.Dict, e.Anim, 3.0, 3.0, e.Dur, e.Move, 0, false, false, false)
|
|
local Pause = e.Dur - 500
|
|
Pause = Pause < 500 and 500 or Pause
|
|
IncurCooldown(Pause)
|
|
Wait(Pause) -- Lets wait for the emote to play for a bit then do the callback.
|
|
cb()
|
|
end
|
|
|
|
function ResetClothing(anim)
|
|
if type(anim) == "table" then
|
|
anim = true
|
|
end
|
|
local e = drawables.Top.Emote
|
|
if anim then TaskPlayAnim(cache.ped, e.Dict, e.Anim, 3.0, 3.0, 3000, e.Move, 0, false, false, false) end
|
|
for _, v in pairs(LastEquipped) do
|
|
if v then
|
|
if v.Drawable then SetPedComponentVariation(cache.ped, v.Id, v.Drawable, v.Texture, 0)
|
|
elseif v.Prop then ClearPedProp(cache.ped, v.Id) SetPedPropIndex(cache.ped, v.Id, v.Prop, v.Texture, true) end
|
|
end
|
|
end
|
|
LastEquipped = {}
|
|
end
|
|
|
|
RegisterNetEvent('qb-radialmenu:ResetClothing', ResetClothing)
|
|
|
|
function ToggleClothing(data)
|
|
local which = data.id or data[1]
|
|
local extra = data.extra
|
|
if which == "Shirt" or which == "Pants" or which == "Bagoff" then
|
|
extra = true
|
|
end
|
|
if Cooldown then return end
|
|
local Toggle = drawables[which]
|
|
if extra then Toggle = Extras[which] end
|
|
local Cur = { -- Lets check what we are currently wearing.
|
|
Drawable = GetPedDrawableVariation(cache.ped, Toggle.Drawable),
|
|
Id = Toggle.Drawable,
|
|
Ped = cache.ped,
|
|
Texture = GetPedTextureVariation(cache.ped, Toggle.Drawable),
|
|
}
|
|
local Gender = IsMpPed(cache.ped)
|
|
if which ~= "Mask" then
|
|
if not Gender then Notify(locale("info.wrong_ped")) return false end -- We cancel the command here if the person is not using a multiplayer model.
|
|
end
|
|
local Table = Toggle.Table[Gender]
|
|
if not Toggle.Table.Standalone then -- "Standalone" is for things that dont require a variant, like the shoes just need to be switched to a specific drawable. Looking back at this i should have planned ahead, but it all works so, meh!
|
|
for k,v in pairs(Table) do
|
|
if not Toggle.Remember then
|
|
if k == Cur.Drawable then
|
|
PlayToggleEmote(Toggle.Emote, function() SetPedComponentVariation(cache.ped, Toggle.Drawable, v, Cur.Texture, 0) end) return true
|
|
end
|
|
else
|
|
if not LastEquipped[which] then
|
|
if k == Cur.Drawable then
|
|
PlayToggleEmote(Toggle.Emote, function() LastEquipped[which] = Cur SetPedComponentVariation(cache.ped, Toggle.Drawable, v, Cur.Texture, 0) end) return true
|
|
end
|
|
else
|
|
local Last = LastEquipped[which]
|
|
PlayToggleEmote(Toggle.Emote, function() SetPedComponentVariation(cache.ped, Toggle.Drawable, Last.Drawable, Last.Texture, 0) LastEquipped[which] = false end) return true
|
|
end
|
|
end
|
|
end
|
|
Notify(locale("info.no_variants")) return
|
|
else
|
|
if not LastEquipped[which] then
|
|
if Cur.Drawable ~= Table then
|
|
PlayToggleEmote(Toggle.Emote, function()
|
|
LastEquipped[which] = Cur
|
|
SetPedComponentVariation(cache.ped, Toggle.Drawable, Table, 0, 0)
|
|
if Toggle.Table.Extra then
|
|
local extraToggled = Toggle.Table.Extra
|
|
for _, v in pairs(extraToggled) do
|
|
local ExtraCur = {Drawable = GetPedDrawableVariation(cache.ped, v.Drawable), Texture = GetPedTextureVariation(cache.ped, v.Drawable), Id = v.Drawable}
|
|
SetPedComponentVariation(cache.ped, v.Drawable, v.Id, v.Tex, 0)
|
|
LastEquipped[v.Name] = ExtraCur
|
|
end
|
|
end
|
|
end)
|
|
return true
|
|
end
|
|
else
|
|
local Last = LastEquipped[which]
|
|
PlayToggleEmote(Toggle.Emote, function()
|
|
SetPedComponentVariation(cache.ped, Toggle.Drawable, Last.Drawable, Last.Texture, 0)
|
|
LastEquipped[which] = false
|
|
if Toggle.Table.Extra then
|
|
local extraToggled = Toggle.Table.Extra
|
|
for _, v in pairs(extraToggled) do
|
|
if LastEquipped[v.Name] then
|
|
Last = LastEquipped[v.Name]
|
|
SetPedComponentVariation(cache.ped, Last.Id, Last.Drawable, Last.Texture, 0)
|
|
LastEquipped[v.Name] = false
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
return true
|
|
end
|
|
end
|
|
Notify(locale("info.already_wearing")) return false
|
|
end
|
|
|
|
RegisterNetEvent('qb-radialmenu:ToggleClothing', ToggleClothing)
|
|
|
|
function ToggleProps(id)
|
|
if Cooldown then return end
|
|
local Prop = Props[id] or Props[id[1]]
|
|
local Cur = { -- Lets get out currently equipped prop.
|
|
Id = Prop.Prop,
|
|
Ped = cache.ped,
|
|
Prop = GetPedPropIndex(cache.ped, Prop.Prop),
|
|
Texture = GetPedPropTextureIndex(cache.ped, Prop.Prop),
|
|
}
|
|
if not Prop.Variants then
|
|
if Cur.Prop ~= -1 then -- If we currently are wearing this prop, remove it and save the one we were wearing into the LastEquipped table.
|
|
PlayToggleEmote(Prop.Emote.Off, function() LastEquipped[id] = Cur ClearPedProp(cache.ped, Prop.Prop) end) return true
|
|
else
|
|
local Last = LastEquipped[id] -- Detect that we have already taken our prop off, lets put it back on.
|
|
if Last then
|
|
PlayToggleEmote(Prop.Emote.On, function() SetPedPropIndex(cache.ped, Prop.Prop, Last.Prop, Last.Texture, true) end) LastEquipped[id] = false return true
|
|
end
|
|
end
|
|
Notify(locale("info.nothing_to_remove")) return false
|
|
else
|
|
local Gender = IsMpPed(cache.ped)
|
|
if not Gender then Notify(locale("info.wrong_ped")) return false end -- We dont really allow for variants on ped models, Its possible, but im pretty sure 95% of ped models dont really have variants.
|
|
variations = Prop.Variants[Gender]
|
|
for k,v in pairs(variations) do
|
|
if Cur.Prop == k then
|
|
PlayToggleEmote(Prop.Emote.On, function() SetPedPropIndex(cache.ped, Prop.Prop, v, Cur.Texture, true) end) return true
|
|
end
|
|
end
|
|
Notify(locale("info.no_variants")) return false
|
|
end
|
|
end
|
|
|
|
RegisterNetEvent('qb-radialmenu:ToggleProps', ToggleProps)
|
|
|
|
for k,v in pairs(config.clothingCommands) do
|
|
RegisterCommand(k, v.Func, false)
|
|
--log("Created /"..k.." ("..v.Desc..")") -- Useful for translation checking.
|
|
TriggerEvent("chat:addSuggestion", "/"..k, v.Desc)
|
|
end
|
|
|
|
AddEventHandler('onResourceStop', function(resource) -- Mostly for development, restart the resource and it will put all the clothes back on.
|
|
if resource == GetCurrentResourceName() then
|
|
ResetClothing()
|
|
end
|
|
end)
|
|
|
|
function IncurCooldown(ms)
|
|
CreateThread(function()
|
|
Cooldown = true Wait(ms) Cooldown = false
|
|
end)
|
|
end
|
|
|
|
function Notify(message, color) -- However you want your notifications to be shown, you can switch it up here.
|
|
exports.qbx_core:Notify(message, color)
|
|
end
|
|
|
|
function IsMpPed(ped)
|
|
local male = `mp_m_freemode_01` local female = `mp_f_freemode_01`
|
|
local CurrentModel = GetEntityModel(ped)
|
|
if CurrentModel == male then return "male" elseif CurrentModel == female then return "female" else return false end
|
|
end
|
|
|
|
RegisterNetEvent('dpc:EquipLast', function()
|
|
for _, v in pairs(LastEquipped) do
|
|
if v then
|
|
if v.Drawable then SetPedComponentVariation(cache.ped, v.ID, v.Drawable, v.Texture, 0)
|
|
elseif v.Prop then ClearPedProp(cache.ped, v.ID) SetPedPropIndex(cache.ped, v.ID, v.Prop, v.Texture, true) end
|
|
end
|
|
end
|
|
LastEquipped = {}
|
|
end)
|
|
|
|
RegisterNetEvent('dpc:ResetClothing', function()
|
|
LastEquipped = {}
|
|
end)
|