View difference between Paste ID: wE4viKcU and SsFQ7wiB
SHOW: | | - or go back to the newest paste.
1
import * as shitfuck from 'alt-client';
2
import * as gecilada from 'natives';
3
4
const lokalisJatekos = shitfuck.Player.local;
5
6
const WeaponModelMod = {
7
	CombatPdw: 0x0A3D4D34,
8
	HeavySniperMk2: 0x0A914799,
9
	HeavySniper: 0x0C472FE2,
10
	SniperRifle: 0x05FC3C11,
11
	FireExtinguisher: 0x060EC506,
12
	CompactLauncher: 0x0781FE4A,
13
	Snowball: 0x0787F0BB,
14
	VintagePistol: 0x083839C4,
15
	Pistol: 0x1B06D571,
16
	PumpShotgun: 0x1D073A89,
17
	CeramicPistol: 0x2B5EF5EC,
18
	Smg: 0x2BE6766B,
19
	StickyBomb: 0x2C3731D9,
20
	HeavyShotgun: 0x3AABBBAA,
21
	GrenadeLauncherSmoke: 0x4DD2DC56,
22
	Hammer: 0x4E875F73,
23
	CombatPistol: 0x5EF9FEC4,
24
	MarksmanRifleMk2: 0x6A6C02E0,
25
	Railgun: 0x6D544C99,
26
	BullpupRifle: 0x7F229F94,
27
	Firework: 0x7F7497E5,
28
	CombatMg: 0x7FD62962,
29
	Flashlight: 0x8BB05FD7,
30
	Mg: 0x9D07F764,
31
	BullpupShotgun: 0x9D61E50F,
32
	AutoShotgun: 0x12E82D3D,
33
	APPistol: 0x22D8FE39,
34
	Ball: 0x23C9F95C,
35
	Molotov: 0x24B17070,
36
	PetrolCan: 0x34A67B97,
37
	Minigun: 0x42BF8A85,
38
	HomingLauncher: 0x63AB0442,
39
	SmgMk2: 0x78A97CD0,
40
	CarbineRifle: 0x83BF0278,
41
	Crowbar: 0x84BD7BFD,
42
	BullpupRifleMk2: 0x84D6FAFD,
43
	Dagger: 0x92A27487,
44
	Grenade: 0x93E220BD,
45
	DoubleAction: 0x97EA20B8,
46
	Pistol50: 0x99AEEB3B,
47
	Knife: 0x99B507EA,
48
	AssaultRifleMk2: 0x394F415C,
49
	GolfClub: 0x440E4788,
50
	Raycarbine: 0x476BF155,
51
	Flare: 0x497FACC3,
52
	PumpShotgunMk2: 0x555AF99A,
53
	CompactRifle: 0x624FE830,
54
	Nightstick: 0x678B81B1,
55
	NavyRevolver: 0x917F6C8C,
56
	Bat: 0x958A4A8F,
57
	SpecialCarbineMk2: 0x969C3D67,
58
	StunGun: 0x3656C8C1,
59
	StoneHatchet: 0x3813FC08,
60
	SawnOffShotgun: 0x7846A318,
61
	Wrench: 0x19044EE0,
62
	MicroSmg: 0x13532244,
63
	FlareGun: 0x47757124,
64
	Gusenberg: 0x61012683,
65
	SNSPistolMk2: 0x88374054,
66
	PoolCue: 0x94117305,
67
	BzGas: 0xA0973D5E,
68
	Musket: 0xA89CB99E,
69
	GrenadeLauncher: 0xA284510B,
70
	Unarmed: 0xA2719263,
71
	ProxMine: 0xAB564B93,
72
	AdvancedRifle: 0xAF113F99,
73
	Raypistol: 0xAF3696A1,
74
	Rpg: 0xB1CA77B1,
75
	Rayminigun: 0xB62D1F67,
76
	PipeBomb: 0xBA45E8B8,
77
	HazardCan: 0xBA536372,
78
	MiniSmg: 0xBD248B55,
79
	SNSPistol: 0xBFD21232,
80
	PistolMk2: 0xBFE256D4,
81
	AssaultRifle: 0xBFEFFF6D,
82
	SpecialCarbine: 0xC0A3098D,
83
	Revolver: 0xC1B3C3D1,
84
	MarksmanRifle: 0xC734385A,
85
	RevolverMk2: 0xCB96392F,
86
	BattleAxe: 0xCD274149,
87
	Knuckle: 0xD8DF3C3C,
88
	HeavyPistol: 0xD205520E,
89
	MachinePistol: 0xDB1AA450,
90
	CombatMgMk2: 0xDBBD7280,
91
	MarksmanPistol: 0xDC4DB296,
92
	Machete: 0xDD5DF8D9,
93
	Switchblade: 0xDFE37640,
94
	AssaultShotgun: 0xE284C527,
95
	DbShotgun: 0xEF951FBB,
96
	AssaultSmg: 0xEFE7E2DF,
97
	Hatchet: 0xF9DCBF2D,
98
	Bottle: 0xF9E6AA4B,
99
	CarbineRifleMk2: 0xFAD1F1C9,
100
	Parachute: 0xFBAB5776,
101
	SmokeGrenade: 0xFDBC8A50
102
};
103
104
var BadgeStyle;
105
(function (BadgeStyle) {
106
	BadgeStyle[(BadgeStyle['None'] = 0)] = 'None';
107
	BadgeStyle[(BadgeStyle['BronzeMedal'] = 1)] = 'BronzeMedal';
108
	BadgeStyle[(BadgeStyle['GoldMedal'] = 2)] = 'GoldMedal';
109
	BadgeStyle[(BadgeStyle['SilverMedal'] = 3)] = 'SilverMedal';
110
	BadgeStyle[(BadgeStyle['Alert'] = 4)] = 'Alert';
111
	BadgeStyle[(BadgeStyle['Crown'] = 5)] = 'Crown';
112
	BadgeStyle[(BadgeStyle['Ammo'] = 6)] = 'Ammo';
113
	BadgeStyle[(BadgeStyle['Armour'] = 7)] = 'Armour';
114
	BadgeStyle[(BadgeStyle['Barber'] = 8)] = 'Barber';
115
	BadgeStyle[(BadgeStyle['Clothes'] = 9)] = 'Clothes';
116
	BadgeStyle[(BadgeStyle['Franklin'] = 10)] = 'Franklin';
117
	BadgeStyle[(BadgeStyle['Bike'] = 11)] = 'Bike';
118
	BadgeStyle[(BadgeStyle['Car'] = 12)] = 'Car';
119
	BadgeStyle[(BadgeStyle['Gun'] = 13)] = 'Gun';
120
	BadgeStyle[(BadgeStyle['Heart'] = 14)] = 'Heart';
121
	BadgeStyle[(BadgeStyle['Makeup'] = 15)] = 'Makeup';
122
	BadgeStyle[(BadgeStyle['Mask'] = 16)] = 'Mask';
123
	BadgeStyle[(BadgeStyle['Michael'] = 17)] = 'Michael';
124
	BadgeStyle[(BadgeStyle['Star'] = 18)] = 'Star';
125
	BadgeStyle[(BadgeStyle['Tattoo'] = 19)] = 'Tattoo';
126
	BadgeStyle[(BadgeStyle['Trevor'] = 20)] = 'Trevor';
127
	BadgeStyle[(BadgeStyle['Lock'] = 21)] = 'Lock';
128
	BadgeStyle[(BadgeStyle['Tick'] = 22)] = 'Tick';
129
	BadgeStyle[(BadgeStyle['Sale'] = 23)] = 'Sale';
130
	BadgeStyle[(BadgeStyle['ArrowLeft'] = 24)] = 'ArrowLeft';
131
	BadgeStyle[(BadgeStyle['ArrowRight'] = 25)] = 'ArrowRight';
132
	BadgeStyle[(BadgeStyle['Audio1'] = 26)] = 'Audio1';
133
	BadgeStyle[(BadgeStyle['Audio2'] = 27)] = 'Audio2';
134
	BadgeStyle[(BadgeStyle['Audio3'] = 28)] = 'Audio3';
135
	BadgeStyle[(BadgeStyle['AudioInactive'] = 29)] = 'AudioInactive';
136
	BadgeStyle[(BadgeStyle['AudioMute'] = 30)] = 'AudioMute';
137
})(BadgeStyle || (BadgeStyle = {}));
138
var BadgeStyle$1 = BadgeStyle;
139
140
var Font;
141
(function (Font) {
142
	Font[(Font['ChaletLondon'] = 0)] = 'ChaletLondon';
143
	Font[(Font['HouseScript'] = 1)] = 'HouseScript';
144
	Font[(Font['Monospace'] = 2)] = 'Monospace';
145
	Font[(Font['CharletComprimeColonge'] = 4)] = 'CharletComprimeColonge';
146
	Font[(Font['Pricedown'] = 7)] = 'Pricedown';
147
})(Font || (Font = {}));
148
var Font$1 = Font;
149
150
var Alignment;
151
(function (Alignment) {
152
	Alignment[(Alignment['Left'] = 0)] = 'Left';
153
	Alignment[(Alignment['Centered'] = 1)] = 'Centered';
154
	Alignment[(Alignment['Right'] = 2)] = 'Right';
155
})(Alignment || (Alignment = {}));
156
var Alignment$1 = Alignment;
157
158
var Control;
159
(function (Control) {
160
	Control[(Control['NextCamera'] = 0)] = 'NextCamera';
161
	Control[(Control['LookLeftRight'] = 1)] = 'LookLeftRight';
162
	Control[(Control['LookUpDown'] = 2)] = 'LookUpDown';
163
	Control[(Control['LookUpOnly'] = 3)] = 'LookUpOnly';
164
	Control[(Control['LookDownOnly'] = 4)] = 'LookDownOnly';
165
	Control[(Control['LookLeftOnly'] = 5)] = 'LookLeftOnly';
166
	Control[(Control['LookRightOnly'] = 6)] = 'LookRightOnly';
167
	Control[(Control['CinematicSlowMo'] = 7)] = 'CinematicSlowMo';
168
	Control[(Control['FlyUpDown'] = 8)] = 'FlyUpDown';
169
	Control[(Control['FlyLeftRight'] = 9)] = 'FlyLeftRight';
170
	Control[(Control['ScriptedFlyZUp'] = 10)] = 'ScriptedFlyZUp';
171
	Control[(Control['ScriptedFlyZDown'] = 11)] = 'ScriptedFlyZDown';
172
	Control[(Control['WeaponWheelUpDown'] = 12)] = 'WeaponWheelUpDown';
173
	Control[(Control['WeaponWheelLeftRight'] = 13)] = 'WeaponWheelLeftRight';
174
	Control[(Control['WeaponWheelNext'] = 14)] = 'WeaponWheelNext';
175
	Control[(Control['WeaponWheelPrev'] = 15)] = 'WeaponWheelPrev';
176
	Control[(Control['SelectNextWeapon'] = 16)] = 'SelectNextWeapon';
177
	Control[(Control['SelectPrevWeapon'] = 17)] = 'SelectPrevWeapon';
178
	Control[(Control['SkipCutscene'] = 18)] = 'SkipCutscene';
179
	Control[(Control['CharacterWheel'] = 19)] = 'CharacterWheel';
180
	Control[(Control['MultiplayerInfo'] = 20)] = 'MultiplayerInfo';
181
	Control[(Control['Sprint'] = 21)] = 'Sprint';
182
	Control[(Control['Jump'] = 22)] = 'Jump';
183
	Control[(Control['Enter'] = 23)] = 'Enter';
184
	Control[(Control['Attack'] = 24)] = 'Attack';
185
	Control[(Control['Aim'] = 25)] = 'Aim';
186
	Control[(Control['LookBehind'] = 26)] = 'LookBehind';
187
	Control[(Control['Phone'] = 27)] = 'Phone';
188
	Control[(Control['SpecialAbility'] = 28)] = 'SpecialAbility';
189
	Control[(Control['SpecialAbilitySecondary'] = 29)] = 'SpecialAbilitySecondary';
190
	Control[(Control['MoveLeftRight'] = 30)] = 'MoveLeftRight';
191
	Control[(Control['MoveUpDown'] = 31)] = 'MoveUpDown';
192
	Control[(Control['MoveUpOnly'] = 32)] = 'MoveUpOnly';
193
	Control[(Control['MoveDownOnly'] = 33)] = 'MoveDownOnly';
194
	Control[(Control['MoveLeftOnly'] = 34)] = 'MoveLeftOnly';
195
	Control[(Control['MoveRightOnly'] = 35)] = 'MoveRightOnly';
196
	Control[(Control['Duck'] = 36)] = 'Duck';
197
	Control[(Control['SelectWeapon'] = 37)] = 'SelectWeapon';
198
	Control[(Control['Pickup'] = 38)] = 'Pickup';
199
	Control[(Control['SniperZoom'] = 39)] = 'SniperZoom';
200
	Control[(Control['SniperZoomInOnly'] = 40)] = 'SniperZoomInOnly';
201
	Control[(Control['SniperZoomOutOnly'] = 41)] = 'SniperZoomOutOnly';
202
	Control[(Control['SniperZoomInSecondary'] = 42)] = 'SniperZoomInSecondary';
203
	Control[(Control['SniperZoomOutSecondary'] = 43)] = 'SniperZoomOutSecondary';
204
	Control[(Control['Cover'] = 44)] = 'Cover';
205
	Control[(Control['Reload'] = 45)] = 'Reload';
206
	Control[(Control['Talk'] = 46)] = 'Talk';
207
	Control[(Control['Detonate'] = 47)] = 'Detonate';
208
	Control[(Control['HUDSpecial'] = 48)] = 'HUDSpecial';
209
	Control[(Control['Arrest'] = 49)] = 'Arrest';
210
	Control[(Control['AccurateAim'] = 50)] = 'AccurateAim';
211
	Control[(Control['Context'] = 51)] = 'Context';
212
	Control[(Control['ContextSecondary'] = 52)] = 'ContextSecondary';
213
	Control[(Control['WeaponSpecial'] = 53)] = 'WeaponSpecial';
214
	Control[(Control['WeaponSpecial2'] = 54)] = 'WeaponSpecial2';
215
	Control[(Control['Dive'] = 55)] = 'Dive';
216
	Control[(Control['DropWeapon'] = 56)] = 'DropWeapon';
217
	Control[(Control['DropAmmo'] = 57)] = 'DropAmmo';
218
	Control[(Control['ThrowGrenade'] = 58)] = 'ThrowGrenade';
219
	Control[(Control['VehicleMoveLeftRight'] = 59)] = 'VehicleMoveLeftRight';
220
	Control[(Control['VehicleMoveUpDown'] = 60)] = 'VehicleMoveUpDown';
221
	Control[(Control['VehicleMoveUpOnly'] = 61)] = 'VehicleMoveUpOnly';
222
	Control[(Control['VehicleMoveDownOnly'] = 62)] = 'VehicleMoveDownOnly';
223
	Control[(Control['VehicleMoveLeftOnly'] = 63)] = 'VehicleMoveLeftOnly';
224
	Control[(Control['VehicleMoveRightOnly'] = 64)] = 'VehicleMoveRightOnly';
225
	Control[(Control['VehicleSpecial'] = 65)] = 'VehicleSpecial';
226
	Control[(Control['VehicleGunLeftRight'] = 66)] = 'VehicleGunLeftRight';
227
	Control[(Control['VehicleGunUpDown'] = 67)] = 'VehicleGunUpDown';
228
	Control[(Control['VehicleAim'] = 68)] = 'VehicleAim';
229
	Control[(Control['VehicleAttack'] = 69)] = 'VehicleAttack';
230
	Control[(Control['VehicleAttack2'] = 70)] = 'VehicleAttack2';
231
	Control[(Control['VehicleAccelerate'] = 71)] = 'VehicleAccelerate';
232
	Control[(Control['VehicleBrake'] = 72)] = 'VehicleBrake';
233
	Control[(Control['VehicleDuck'] = 73)] = 'VehicleDuck';
234
	Control[(Control['VehicleHeadlight'] = 74)] = 'VehicleHeadlight';
235
	Control[(Control['VehicleExit'] = 75)] = 'VehicleExit';
236
	Control[(Control['VehicleHandbrake'] = 76)] = 'VehicleHandbrake';
237
	Control[(Control['VehicleHotwireLeft'] = 77)] = 'VehicleHotwireLeft';
238
	Control[(Control['VehicleHotwireRight'] = 78)] = 'VehicleHotwireRight';
239
	Control[(Control['VehicleLookBehind'] = 79)] = 'VehicleLookBehind';
240
	Control[(Control['VehicleCinCam'] = 80)] = 'VehicleCinCam';
241
	Control[(Control['VehicleNextRadio'] = 81)] = 'VehicleNextRadio';
242
	Control[(Control['VehiclePrevRadio'] = 82)] = 'VehiclePrevRadio';
243
	Control[(Control['VehicleNextRadioTrack'] = 83)] = 'VehicleNextRadioTrack';
244
	Control[(Control['VehiclePrevRadioTrack'] = 84)] = 'VehiclePrevRadioTrack';
245
	Control[(Control['VehicleRadioWheel'] = 85)] = 'VehicleRadioWheel';
246
	Control[(Control['VehicleHorn'] = 86)] = 'VehicleHorn';
247
	Control[(Control['VehicleFlyThrottleUp'] = 87)] = 'VehicleFlyThrottleUp';
248
	Control[(Control['VehicleFlyThrottleDown'] = 88)] = 'VehicleFlyThrottleDown';
249
	Control[(Control['VehicleFlyYawLeft'] = 89)] = 'VehicleFlyYawLeft';
250
	Control[(Control['VehicleFlyYawRight'] = 90)] = 'VehicleFlyYawRight';
251
	Control[(Control['VehiclePassengerAim'] = 91)] = 'VehiclePassengerAim';
252
	Control[(Control['VehiclePassengerAttack'] = 92)] = 'VehiclePassengerAttack';
253
	Control[(Control['VehicleSpecialAbilityFranklin'] = 93)] = 'VehicleSpecialAbilityFranklin';
254
	Control[(Control['VehicleStuntUpDown'] = 94)] = 'VehicleStuntUpDown';
255
	Control[(Control['VehicleCinematicUpDown'] = 95)] = 'VehicleCinematicUpDown';
256
	Control[(Control['VehicleCinematicUpOnly'] = 96)] = 'VehicleCinematicUpOnly';
257
	Control[(Control['VehicleCinematicDownOnly'] = 97)] = 'VehicleCinematicDownOnly';
258
	Control[(Control['VehicleCinematicLeftRight'] = 98)] = 'VehicleCinematicLeftRight';
259
	Control[(Control['VehicleSelectNextWeapon'] = 99)] = 'VehicleSelectNextWeapon';
260
	Control[(Control['VehicleSelectPrevWeapon'] = 100)] = 'VehicleSelectPrevWeapon';
261
	Control[(Control['VehicleRoof'] = 101)] = 'VehicleRoof';
262
	Control[(Control['VehicleJump'] = 102)] = 'VehicleJump';
263
	Control[(Control['VehicleGrapplingHook'] = 103)] = 'VehicleGrapplingHook';
264
	Control[(Control['VehicleShuffle'] = 104)] = 'VehicleShuffle';
265
	Control[(Control['VehicleDropProjectile'] = 105)] = 'VehicleDropProjectile';
266
	Control[(Control['VehicleMouseControlOverride'] = 106)] = 'VehicleMouseControlOverride';
267
	Control[(Control['VehicleFlyRollLeftRight'] = 107)] = 'VehicleFlyRollLeftRight';
268
	Control[(Control['VehicleFlyRollLeftOnly'] = 108)] = 'VehicleFlyRollLeftOnly';
269
	Control[(Control['VehicleFlyRollRightOnly'] = 109)] = 'VehicleFlyRollRightOnly';
270
	Control[(Control['VehicleFlyPitchUpDown'] = 110)] = 'VehicleFlyPitchUpDown';
271
	Control[(Control['VehicleFlyPitchUpOnly'] = 111)] = 'VehicleFlyPitchUpOnly';
272
	Control[(Control['VehicleFlyPitchDownOnly'] = 112)] = 'VehicleFlyPitchDownOnly';
273
	Control[(Control['VehicleFlyUnderCarriage'] = 113)] = 'VehicleFlyUnderCarriage';
274
	Control[(Control['VehicleFlyAttack'] = 114)] = 'VehicleFlyAttack';
275
	Control[(Control['VehicleFlySelectNextWeapon'] = 115)] = 'VehicleFlySelectNextWeapon';
276
	Control[(Control['VehicleFlySelectPrevWeapon'] = 116)] = 'VehicleFlySelectPrevWeapon';
277
	Control[(Control['VehicleFlySelectTargetLeft'] = 117)] = 'VehicleFlySelectTargetLeft';
278
	Control[(Control['VehicleFlySelectTargetRight'] = 118)] = 'VehicleFlySelectTargetRight';
279
	Control[(Control['VehicleFlyVerticalFlightMode'] = 119)] = 'VehicleFlyVerticalFlightMode';
280
	Control[(Control['VehicleFlyDuck'] = 120)] = 'VehicleFlyDuck';
281
	Control[(Control['VehicleFlyAttackCamera'] = 121)] = 'VehicleFlyAttackCamera';
282
	Control[(Control['VehicleFlyMouseControlOverride'] = 122)] = 'VehicleFlyMouseControlOverride';
283
	Control[(Control['VehicleSubTurnLeftRight'] = 123)] = 'VehicleSubTurnLeftRight';
284
	Control[(Control['VehicleSubTurnLeftOnly'] = 124)] = 'VehicleSubTurnLeftOnly';
285
	Control[(Control['VehicleSubTurnRightOnly'] = 125)] = 'VehicleSubTurnRightOnly';
286
	Control[(Control['VehicleSubPitchUpDown'] = 126)] = 'VehicleSubPitchUpDown';
287
	Control[(Control['VehicleSubPitchUpOnly'] = 127)] = 'VehicleSubPitchUpOnly';
288
	Control[(Control['VehicleSubPitchDownOnly'] = 128)] = 'VehicleSubPitchDownOnly';
289
	Control[(Control['VehicleSubThrottleUp'] = 129)] = 'VehicleSubThrottleUp';
290
	Control[(Control['VehicleSubThrottleDown'] = 130)] = 'VehicleSubThrottleDown';
291
	Control[(Control['VehicleSubAscend'] = 131)] = 'VehicleSubAscend';
292
	Control[(Control['VehicleSubDescend'] = 132)] = 'VehicleSubDescend';
293
	Control[(Control['VehicleSubTurnHardLeft'] = 133)] = 'VehicleSubTurnHardLeft';
294
	Control[(Control['VehicleSubTurnHardRight'] = 134)] = 'VehicleSubTurnHardRight';
295
	Control[(Control['VehicleSubMouseControlOverride'] = 135)] = 'VehicleSubMouseControlOverride';
296
	Control[(Control['VehiclePushbikePedal'] = 136)] = 'VehiclePushbikePedal';
297
	Control[(Control['VehiclePushbikeSprint'] = 137)] = 'VehiclePushbikeSprint';
298
	Control[(Control['VehiclePushbikeFrontBrake'] = 138)] = 'VehiclePushbikeFrontBrake';
299
	Control[(Control['VehiclePushbikeRearBrake'] = 139)] = 'VehiclePushbikeRearBrake';
300
	Control[(Control['MeleeAttackLight'] = 140)] = 'MeleeAttackLight';
301
	Control[(Control['MeleeAttackHeavy'] = 141)] = 'MeleeAttackHeavy';
302
	Control[(Control['MeleeAttackAlternate'] = 142)] = 'MeleeAttackAlternate';
303
	Control[(Control['MeleeBlock'] = 143)] = 'MeleeBlock';
304
	Control[(Control['ParachuteDeploy'] = 144)] = 'ParachuteDeploy';
305
	Control[(Control['ParachuteDetach'] = 145)] = 'ParachuteDetach';
306
	Control[(Control['ParachuteTurnLeftRight'] = 146)] = 'ParachuteTurnLeftRight';
307
	Control[(Control['ParachuteTurnLeftOnly'] = 147)] = 'ParachuteTurnLeftOnly';
308
	Control[(Control['ParachuteTurnRightOnly'] = 148)] = 'ParachuteTurnRightOnly';
309
	Control[(Control['ParachutePitchUpDown'] = 149)] = 'ParachutePitchUpDown';
310
	Control[(Control['ParachutePitchUpOnly'] = 150)] = 'ParachutePitchUpOnly';
311
	Control[(Control['ParachutePitchDownOnly'] = 151)] = 'ParachutePitchDownOnly';
312
	Control[(Control['ParachuteBrakeLeft'] = 152)] = 'ParachuteBrakeLeft';
313
	Control[(Control['ParachuteBrakeRight'] = 153)] = 'ParachuteBrakeRight';
314
	Control[(Control['ParachuteSmoke'] = 154)] = 'ParachuteSmoke';
315
	Control[(Control['ParachutePrecisionLanding'] = 155)] = 'ParachutePrecisionLanding';
316
	Control[(Control['Map'] = 156)] = 'Map';
317
	Control[(Control['SelectWeaponUnarmed'] = 157)] = 'SelectWeaponUnarmed';
318
	Control[(Control['SelectWeaponMelee'] = 158)] = 'SelectWeaponMelee';
319
	Control[(Control['SelectWeaponHandgun'] = 159)] = 'SelectWeaponHandgun';
320
	Control[(Control['SelectWeaponShotgun'] = 160)] = 'SelectWeaponShotgun';
321
	Control[(Control['SelectWeaponSmg'] = 161)] = 'SelectWeaponSmg';
322
	Control[(Control['SelectWeaponAutoRifle'] = 162)] = 'SelectWeaponAutoRifle';
323
	Control[(Control['SelectWeaponSniper'] = 163)] = 'SelectWeaponSniper';
324
	Control[(Control['SelectWeaponHeavy'] = 164)] = 'SelectWeaponHeavy';
325
	Control[(Control['SelectWeaponSpecial'] = 165)] = 'SelectWeaponSpecial';
326
	Control[(Control['SelectCharacterMichael'] = 166)] = 'SelectCharacterMichael';
327
	Control[(Control['SelectCharacterFranklin'] = 167)] = 'SelectCharacterFranklin';
328
	Control[(Control['SelectCharacterTrevor'] = 168)] = 'SelectCharacterTrevor';
329
	Control[(Control['SelectCharacterMultiplayer'] = 169)] = 'SelectCharacterMultiplayer';
330
	Control[(Control['SaveReplayClip'] = 170)] = 'SaveReplayClip';
331
	Control[(Control['SpecialAbilityPC'] = 171)] = 'SpecialAbilityPC';
332
	Control[(Control['PhoneUp'] = 172)] = 'PhoneUp';
333
	Control[(Control['PhoneDown'] = 173)] = 'PhoneDown';
334
	Control[(Control['PhoneLeft'] = 174)] = 'PhoneLeft';
335
	Control[(Control['PhoneRight'] = 175)] = 'PhoneRight';
336
	Control[(Control['PhoneSelect'] = 176)] = 'PhoneSelect';
337
	Control[(Control['PhoneCancel'] = 177)] = 'PhoneCancel';
338
	Control[(Control['PhoneOption'] = 178)] = 'PhoneOption';
339
	Control[(Control['PhoneExtraOption'] = 179)] = 'PhoneExtraOption';
340
	Control[(Control['PhoneScrollForward'] = 180)] = 'PhoneScrollForward';
341
	Control[(Control['PhoneScrollBackward'] = 181)] = 'PhoneScrollBackward';
342
	Control[(Control['PhoneCameraFocusLock'] = 182)] = 'PhoneCameraFocusLock';
343
	Control[(Control['PhoneCameraGrid'] = 183)] = 'PhoneCameraGrid';
344
	Control[(Control['PhoneCameraSelfie'] = 184)] = 'PhoneCameraSelfie';
345
	Control[(Control['PhoneCameraDOF'] = 185)] = 'PhoneCameraDOF';
346
	Control[(Control['PhoneCameraExpression'] = 186)] = 'PhoneCameraExpression';
347
	Control[(Control['FrontendDown'] = 187)] = 'FrontendDown';
348
	Control[(Control['FrontendUp'] = 188)] = 'FrontendUp';
349
	Control[(Control['FrontendLeft'] = 189)] = 'FrontendLeft';
350
	Control[(Control['FrontendRight'] = 190)] = 'FrontendRight';
351
	Control[(Control['FrontendRdown'] = 191)] = 'FrontendRdown';
352
	Control[(Control['FrontendRup'] = 192)] = 'FrontendRup';
353
	Control[(Control['FrontendRleft'] = 193)] = 'FrontendRleft';
354
	Control[(Control['FrontendRright'] = 194)] = 'FrontendRright';
355
	Control[(Control['FrontendAxisX'] = 195)] = 'FrontendAxisX';
356
	Control[(Control['FrontendAxisY'] = 196)] = 'FrontendAxisY';
357
	Control[(Control['FrontendRightAxisX'] = 197)] = 'FrontendRightAxisX';
358
	Control[(Control['FrontendRightAxisY'] = 198)] = 'FrontendRightAxisY';
359
	Control[(Control['FrontendPause'] = 199)] = 'FrontendPause';
360
	Control[(Control['FrontendPauseAlternate'] = 200)] = 'FrontendPauseAlternate';
361
	Control[(Control['FrontendAccept'] = 201)] = 'FrontendAccept';
362
	Control[(Control['FrontendCancel'] = 202)] = 'FrontendCancel';
363
	Control[(Control['FrontendX'] = 203)] = 'FrontendX';
364
	Control[(Control['FrontendY'] = 204)] = 'FrontendY';
365
	Control[(Control['FrontendLb'] = 205)] = 'FrontendLb';
366
	Control[(Control['FrontendRb'] = 206)] = 'FrontendRb';
367
	Control[(Control['FrontendLt'] = 207)] = 'FrontendLt';
368
	Control[(Control['FrontendRt'] = 208)] = 'FrontendRt';
369
	Control[(Control['FrontendLs'] = 209)] = 'FrontendLs';
370
	Control[(Control['FrontendRs'] = 210)] = 'FrontendRs';
371
	Control[(Control['FrontendLeaderboard'] = 211)] = 'FrontendLeaderboard';
372
	Control[(Control['FrontendSocialClub'] = 212)] = 'FrontendSocialClub';
373
	Control[(Control['FrontendSocialClubSecondary'] = 213)] = 'FrontendSocialClubSecondary';
374
	Control[(Control['FrontendDelete'] = 214)] = 'FrontendDelete';
375
	Control[(Control['FrontendEndscreenAccept'] = 215)] = 'FrontendEndscreenAccept';
376
	Control[(Control['FrontendEndscreenExpand'] = 216)] = 'FrontendEndscreenExpand';
377
	Control[(Control['FrontendSelect'] = 217)] = 'FrontendSelect';
378
	Control[(Control['ScriptLeftAxisX'] = 218)] = 'ScriptLeftAxisX';
379
	Control[(Control['ScriptLeftAxisY'] = 219)] = 'ScriptLeftAxisY';
380
	Control[(Control['ScriptRightAxisX'] = 220)] = 'ScriptRightAxisX';
381
	Control[(Control['ScriptRightAxisY'] = 221)] = 'ScriptRightAxisY';
382
	Control[(Control['ScriptRUp'] = 222)] = 'ScriptRUp';
383
	Control[(Control['ScriptRDown'] = 223)] = 'ScriptRDown';
384
	Control[(Control['ScriptRLeft'] = 224)] = 'ScriptRLeft';
385
	Control[(Control['ScriptRRight'] = 225)] = 'ScriptRRight';
386
	Control[(Control['ScriptLB'] = 226)] = 'ScriptLB';
387
	Control[(Control['ScriptRB'] = 227)] = 'ScriptRB';
388
	Control[(Control['ScriptLT'] = 228)] = 'ScriptLT';
389
	Control[(Control['ScriptRT'] = 229)] = 'ScriptRT';
390
	Control[(Control['ScriptLS'] = 230)] = 'ScriptLS';
391
	Control[(Control['ScriptRS'] = 231)] = 'ScriptRS';
392
	Control[(Control['ScriptPadUp'] = 232)] = 'ScriptPadUp';
393
	Control[(Control['ScriptPadDown'] = 233)] = 'ScriptPadDown';
394
	Control[(Control['ScriptPadLeft'] = 234)] = 'ScriptPadLeft';
395
	Control[(Control['ScriptPadRight'] = 235)] = 'ScriptPadRight';
396
	Control[(Control['ScriptSelect'] = 236)] = 'ScriptSelect';
397
	Control[(Control['CursorAccept'] = 237)] = 'CursorAccept';
398
	Control[(Control['CursorCancel'] = 238)] = 'CursorCancel';
399
	Control[(Control['CursorX'] = 239)] = 'CursorX';
400
	Control[(Control['CursorY'] = 240)] = 'CursorY';
401
	Control[(Control['CursorScrollUp'] = 241)] = 'CursorScrollUp';
402
	Control[(Control['CursorScrollDown'] = 242)] = 'CursorScrollDown';
403
	Control[(Control['EnterCheatCode'] = 243)] = 'EnterCheatCode';
404
	Control[(Control['InteractionMenu'] = 244)] = 'InteractionMenu';
405
	Control[(Control['MpTextChatAll'] = 245)] = 'MpTextChatAll';
406
	Control[(Control['MpTextChatTeam'] = 246)] = 'MpTextChatTeam';
407
	Control[(Control['MpTextChatFriends'] = 247)] = 'MpTextChatFriends';
408
	Control[(Control['MpTextChatCrew'] = 248)] = 'MpTextChatCrew';
409
	Control[(Control['PushToTalk'] = 249)] = 'PushToTalk';
410
	Control[(Control['CreatorLS'] = 250)] = 'CreatorLS';
411
	Control[(Control['CreatorRS'] = 251)] = 'CreatorRS';
412
	Control[(Control['CreatorLT'] = 252)] = 'CreatorLT';
413
	Control[(Control['CreatorRT'] = 253)] = 'CreatorRT';
414
	Control[(Control['CreatorMenuToggle'] = 254)] = 'CreatorMenuToggle';
415
	Control[(Control['CreatorAccept'] = 255)] = 'CreatorAccept';
416
	Control[(Control['CreatorDelete'] = 256)] = 'CreatorDelete';
417
	Control[(Control['Attack2'] = 257)] = 'Attack2';
418
	Control[(Control['RappelJump'] = 258)] = 'RappelJump';
419
	Control[(Control['RappelLongJump'] = 259)] = 'RappelLongJump';
420
	Control[(Control['RappelSmashWindow'] = 260)] = 'RappelSmashWindow';
421
	Control[(Control['PrevWeapon'] = 261)] = 'PrevWeapon';
422
	Control[(Control['NextWeapon'] = 262)] = 'NextWeapon';
423
	Control[(Control['MeleeAttack1'] = 263)] = 'MeleeAttack1';
424
	Control[(Control['MeleeAttack2'] = 264)] = 'MeleeAttack2';
425
	Control[(Control['Whistle'] = 265)] = 'Whistle';
426
	Control[(Control['MoveLeft'] = 266)] = 'MoveLeft';
427
	Control[(Control['MoveRight'] = 267)] = 'MoveRight';
428
	Control[(Control['MoveUp'] = 268)] = 'MoveUp';
429
	Control[(Control['MoveDown'] = 269)] = 'MoveDown';
430
	Control[(Control['LookLeft'] = 270)] = 'LookLeft';
431
	Control[(Control['LookRight'] = 271)] = 'LookRight';
432
	Control[(Control['LookUp'] = 272)] = 'LookUp';
433
	Control[(Control['LookDown'] = 273)] = 'LookDown';
434
	Control[(Control['SniperZoomIn'] = 274)] = 'SniperZoomIn';
435
	Control[(Control['SniperZoomOut'] = 275)] = 'SniperZoomOut';
436
	Control[(Control['SniperZoomInAlternate'] = 276)] = 'SniperZoomInAlternate';
437
	Control[(Control['SniperZoomOutAlternate'] = 277)] = 'SniperZoomOutAlternate';
438
	Control[(Control['VehicleMoveLeft'] = 278)] = 'VehicleMoveLeft';
439
	Control[(Control['VehicleMoveRight'] = 279)] = 'VehicleMoveRight';
440
	Control[(Control['VehicleMoveUp'] = 280)] = 'VehicleMoveUp';
441
	Control[(Control['VehicleMoveDown'] = 281)] = 'VehicleMoveDown';
442
	Control[(Control['VehicleGunLeft'] = 282)] = 'VehicleGunLeft';
443
	Control[(Control['VehicleGunRight'] = 283)] = 'VehicleGunRight';
444
	Control[(Control['VehicleGunUp'] = 284)] = 'VehicleGunUp';
445
	Control[(Control['VehicleGunDown'] = 285)] = 'VehicleGunDown';
446
	Control[(Control['VehicleLookLeft'] = 286)] = 'VehicleLookLeft';
447
	Control[(Control['VehicleLookRight'] = 287)] = 'VehicleLookRight';
448
	Control[(Control['ReplayStartStopRecording'] = 288)] = 'ReplayStartStopRecording';
449
	Control[(Control['ReplayStartStopRecordingSecondary'] = 289)] = 'ReplayStartStopRecordingSecondary';
450
	Control[(Control['ScaledLookLeftRight'] = 290)] = 'ScaledLookLeftRight';
451
	Control[(Control['ScaledLookUpDown'] = 291)] = 'ScaledLookUpDown';
452
	Control[(Control['ScaledLookUpOnly'] = 292)] = 'ScaledLookUpOnly';
453
	Control[(Control['ScaledLookDownOnly'] = 293)] = 'ScaledLookDownOnly';
454
	Control[(Control['ScaledLookLeftOnly'] = 294)] = 'ScaledLookLeftOnly';
455
	Control[(Control['ScaledLookRightOnly'] = 295)] = 'ScaledLookRightOnly';
456
	Control[(Control['ReplayMarkerDelete'] = 296)] = 'ReplayMarkerDelete';
457
	Control[(Control['ReplayClipDelete'] = 297)] = 'ReplayClipDelete';
458
	Control[(Control['ReplayPause'] = 298)] = 'ReplayPause';
459
	Control[(Control['ReplayRewind'] = 299)] = 'ReplayRewind';
460
	Control[(Control['ReplayFfwd'] = 300)] = 'ReplayFfwd';
461
	Control[(Control['ReplayNewmarker'] = 301)] = 'ReplayNewmarker';
462
	Control[(Control['ReplayRecord'] = 302)] = 'ReplayRecord';
463
	Control[(Control['ReplayScreenshot'] = 303)] = 'ReplayScreenshot';
464
	Control[(Control['ReplayHidehud'] = 304)] = 'ReplayHidehud';
465
	Control[(Control['ReplayStartpoint'] = 305)] = 'ReplayStartpoint';
466
	Control[(Control['ReplayEndpoint'] = 306)] = 'ReplayEndpoint';
467
	Control[(Control['ReplayAdvance'] = 307)] = 'ReplayAdvance';
468
	Control[(Control['ReplayBack'] = 308)] = 'ReplayBack';
469
	Control[(Control['ReplayTools'] = 309)] = 'ReplayTools';
470
	Control[(Control['ReplayRestart'] = 310)] = 'ReplayRestart';
471
	Control[(Control['ReplayShowhotkey'] = 311)] = 'ReplayShowhotkey';
472
	Control[(Control['ReplayCycleMarkerLeft'] = 312)] = 'ReplayCycleMarkerLeft';
473
	Control[(Control['ReplayCycleMarkerRight'] = 313)] = 'ReplayCycleMarkerRight';
474
	Control[(Control['ReplayFOVIncrease'] = 314)] = 'ReplayFOVIncrease';
475
	Control[(Control['ReplayFOVDecrease'] = 315)] = 'ReplayFOVDecrease';
476
	Control[(Control['ReplayCameraUp'] = 316)] = 'ReplayCameraUp';
477
	Control[(Control['ReplayCameraDown'] = 317)] = 'ReplayCameraDown';
478
	Control[(Control['ReplaySave'] = 318)] = 'ReplaySave';
479
	Control[(Control['ReplayToggletime'] = 319)] = 'ReplayToggletime';
480
	Control[(Control['ReplayToggletips'] = 320)] = 'ReplayToggletips';
481
	Control[(Control['ReplayPreview'] = 321)] = 'ReplayPreview';
482
	Control[(Control['ReplayToggleTimeline'] = 322)] = 'ReplayToggleTimeline';
483
	Control[(Control['ReplayTimelinePickupClip'] = 323)] = 'ReplayTimelinePickupClip';
484
	Control[(Control['ReplayTimelineDuplicateClip'] = 324)] = 'ReplayTimelineDuplicateClip';
485
	Control[(Control['ReplayTimelinePlaceClip'] = 325)] = 'ReplayTimelinePlaceClip';
486
	Control[(Control['ReplayCtrl'] = 326)] = 'ReplayCtrl';
487
	Control[(Control['ReplayTimelineSave'] = 327)] = 'ReplayTimelineSave';
488
	Control[(Control['ReplayPreviewAudio'] = 328)] = 'ReplayPreviewAudio';
489
	Control[(Control['VehicleDriveLook'] = 329)] = 'VehicleDriveLook';
490
	Control[(Control['VehicleDriveLook2'] = 330)] = 'VehicleDriveLook2';
491
	Control[(Control['VehicleFlyAttack2'] = 331)] = 'VehicleFlyAttack2';
492
	Control[(Control['RadioWheelUpDown'] = 332)] = 'RadioWheelUpDown';
493
	Control[(Control['RadioWheelLeftRight'] = 333)] = 'RadioWheelLeftRight';
494
	Control[(Control['VehicleSlowMoUpDown'] = 334)] = 'VehicleSlowMoUpDown';
495
	Control[(Control['VehicleSlowMoUpOnly'] = 335)] = 'VehicleSlowMoUpOnly';
496
	Control[(Control['VehicleSlowMoDownOnly'] = 336)] = 'VehicleSlowMoDownOnly';
497
	Control[(Control['MapPointOfInterest'] = 337)] = 'MapPointOfInterest';
498
	Control[(Control['ReplaySnapmaticPhoto'] = 338)] = 'ReplaySnapmaticPhoto';
499
	Control[(Control['VehicleCarJump'] = 339)] = 'VehicleCarJump';
500
	Control[(Control['VehicleRocketBoost'] = 340)] = 'VehicleRocketBoost';
501
	Control[(Control['VehicleParachute'] = 341)] = 'VehicleParachute';
502
	Control[(Control['VehicleBikeWings'] = 342)] = 'VehicleBikeWings';
503
	Control[(Control['VehicleFlyBombBay'] = 343)] = 'VehicleFlyBombBay';
504
	Control[(Control['VehicleFlyCounter'] = 344)] = 'VehicleFlyCounter';
505
	Control[(Control['VehicleFlyTransform'] = 345)] = 'VehicleFlyTransform';
506
})(Control || (Control = {}));
507
var Control$1 = Control;
508
509
var HudColor;
510
(function (HudColor) {
511
	HudColor[(HudColor['HUD_COLOUR_PURE_WHITE'] = 0)] = 'HUD_COLOUR_PURE_WHITE';
512
	HudColor[(HudColor['HUD_COLOUR_WHITE'] = 1)] = 'HUD_COLOUR_WHITE';
513
	HudColor[(HudColor['HUD_COLOUR_BLACK'] = 2)] = 'HUD_COLOUR_BLACK';
514
	HudColor[(HudColor['HUD_COLOUR_GREY'] = 3)] = 'HUD_COLOUR_GREY';
515
	HudColor[(HudColor['HUD_COLOUR_GREYLIGHT'] = 4)] = 'HUD_COLOUR_GREYLIGHT';
516
	HudColor[(HudColor['HUD_COLOUR_GREYDARK'] = 5)] = 'HUD_COLOUR_GREYDARK';
517
	HudColor[(HudColor['HUD_COLOUR_RED'] = 6)] = 'HUD_COLOUR_RED';
518
	HudColor[(HudColor['HUD_COLOUR_REDLIGHT'] = 7)] = 'HUD_COLOUR_REDLIGHT';
519
	HudColor[(HudColor['HUD_COLOUR_REDDARK'] = 8)] = 'HUD_COLOUR_REDDARK';
520
	HudColor[(HudColor['HUD_COLOUR_BLUE'] = 9)] = 'HUD_COLOUR_BLUE';
521
	HudColor[(HudColor['HUD_COLOUR_BLUELIGHT'] = 10)] = 'HUD_COLOUR_BLUELIGHT';
522
	HudColor[(HudColor['HUD_COLOUR_BLUEDARK'] = 11)] = 'HUD_COLOUR_BLUEDARK';
523
	HudColor[(HudColor['HUD_COLOUR_YELLOW'] = 12)] = 'HUD_COLOUR_YELLOW';
524
	HudColor[(HudColor['HUD_COLOUR_YELLOWLIGHT'] = 13)] = 'HUD_COLOUR_YELLOWLIGHT';
525
	HudColor[(HudColor['HUD_COLOUR_YELLOWDARK'] = 14)] = 'HUD_COLOUR_YELLOWDARK';
526
	HudColor[(HudColor['HUD_COLOUR_ORANGE'] = 15)] = 'HUD_COLOUR_ORANGE';
527
	HudColor[(HudColor['HUD_COLOUR_ORANGELIGHT'] = 16)] = 'HUD_COLOUR_ORANGELIGHT';
528
	HudColor[(HudColor['HUD_COLOUR_ORANGEDARK'] = 17)] = 'HUD_COLOUR_ORANGEDARK';
529
	HudColor[(HudColor['HUD_COLOUR_GREEN'] = 18)] = 'HUD_COLOUR_GREEN';
530
	HudColor[(HudColor['HUD_COLOUR_GREENLIGHT'] = 19)] = 'HUD_COLOUR_GREENLIGHT';
531
	HudColor[(HudColor['HUD_COLOUR_GREENDARK'] = 20)] = 'HUD_COLOUR_GREENDARK';
532
	HudColor[(HudColor['HUD_COLOUR_PURPLE'] = 21)] = 'HUD_COLOUR_PURPLE';
533
	HudColor[(HudColor['HUD_COLOUR_PURPLELIGHT'] = 22)] = 'HUD_COLOUR_PURPLELIGHT';
534
	HudColor[(HudColor['HUD_COLOUR_PURPLEDARK'] = 23)] = 'HUD_COLOUR_PURPLEDARK';
535
	HudColor[(HudColor['HUD_COLOUR_PINK'] = 24)] = 'HUD_COLOUR_PINK';
536
	HudColor[(HudColor['HUD_COLOUR_RADAR_HEALTH'] = 25)] = 'HUD_COLOUR_RADAR_HEALTH';
537
	HudColor[(HudColor['HUD_COLOUR_RADAR_ARMOUR'] = 26)] = 'HUD_COLOUR_RADAR_ARMOUR';
538
	HudColor[(HudColor['HUD_COLOUR_RADAR_DAMAGE'] = 27)] = 'HUD_COLOUR_RADAR_DAMAGE';
539
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER1'] = 28)] = 'HUD_COLOUR_NET_PLAYER1';
540
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER2'] = 29)] = 'HUD_COLOUR_NET_PLAYER2';
541
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER3'] = 30)] = 'HUD_COLOUR_NET_PLAYER3';
542
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER4'] = 31)] = 'HUD_COLOUR_NET_PLAYER4';
543
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER5'] = 32)] = 'HUD_COLOUR_NET_PLAYER5';
544
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER6'] = 33)] = 'HUD_COLOUR_NET_PLAYER6';
545
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER7'] = 34)] = 'HUD_COLOUR_NET_PLAYER7';
546
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER8'] = 35)] = 'HUD_COLOUR_NET_PLAYER8';
547
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER9'] = 36)] = 'HUD_COLOUR_NET_PLAYER9';
548
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER10'] = 37)] = 'HUD_COLOUR_NET_PLAYER10';
549
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER11'] = 38)] = 'HUD_COLOUR_NET_PLAYER11';
550
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER12'] = 39)] = 'HUD_COLOUR_NET_PLAYER12';
551
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER13'] = 40)] = 'HUD_COLOUR_NET_PLAYER13';
552
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER14'] = 41)] = 'HUD_COLOUR_NET_PLAYER14';
553
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER15'] = 42)] = 'HUD_COLOUR_NET_PLAYER15';
554
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER16'] = 43)] = 'HUD_COLOUR_NET_PLAYER16';
555
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER17'] = 44)] = 'HUD_COLOUR_NET_PLAYER17';
556
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER18'] = 45)] = 'HUD_COLOUR_NET_PLAYER18';
557
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER19'] = 46)] = 'HUD_COLOUR_NET_PLAYER19';
558
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER20'] = 47)] = 'HUD_COLOUR_NET_PLAYER20';
559
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER21'] = 48)] = 'HUD_COLOUR_NET_PLAYER21';
560
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER22'] = 49)] = 'HUD_COLOUR_NET_PLAYER22';
561
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER23'] = 50)] = 'HUD_COLOUR_NET_PLAYER23';
562
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER24'] = 51)] = 'HUD_COLOUR_NET_PLAYER24';
563
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER25'] = 52)] = 'HUD_COLOUR_NET_PLAYER25';
564
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER26'] = 53)] = 'HUD_COLOUR_NET_PLAYER26';
565
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER27'] = 54)] = 'HUD_COLOUR_NET_PLAYER27';
566
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER28'] = 55)] = 'HUD_COLOUR_NET_PLAYER28';
567
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER29'] = 56)] = 'HUD_COLOUR_NET_PLAYER29';
568
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER30'] = 57)] = 'HUD_COLOUR_NET_PLAYER30';
569
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER31'] = 58)] = 'HUD_COLOUR_NET_PLAYER31';
570
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER32'] = 59)] = 'HUD_COLOUR_NET_PLAYER32';
571
	HudColor[(HudColor['HUD_COLOUR_SIMPLEBLIP_DEFAULT'] = 60)] = 'HUD_COLOUR_SIMPLEBLIP_DEFAULT';
572
	HudColor[(HudColor['HUD_COLOUR_MENU_BLUE'] = 61)] = 'HUD_COLOUR_MENU_BLUE';
573
	HudColor[(HudColor['HUD_COLOUR_MENU_GREY_LIGHT'] = 62)] = 'HUD_COLOUR_MENU_GREY_LIGHT';
574
	HudColor[(HudColor['HUD_COLOUR_MENU_BLUE_EXTRA_DARK'] = 63)] = 'HUD_COLOUR_MENU_BLUE_EXTRA_DARK';
575
	HudColor[(HudColor['HUD_COLOUR_MENU_YELLOW'] = 64)] = 'HUD_COLOUR_MENU_YELLOW';
576
	HudColor[(HudColor['HUD_COLOUR_MENU_YELLOW_DARK'] = 65)] = 'HUD_COLOUR_MENU_YELLOW_DARK';
577
	HudColor[(HudColor['HUD_COLOUR_MENU_GREEN'] = 66)] = 'HUD_COLOUR_MENU_GREEN';
578
	HudColor[(HudColor['HUD_COLOUR_MENU_GREY'] = 67)] = 'HUD_COLOUR_MENU_GREY';
579
	HudColor[(HudColor['HUD_COLOUR_MENU_GREY_DARK'] = 68)] = 'HUD_COLOUR_MENU_GREY_DARK';
580
	HudColor[(HudColor['HUD_COLOUR_MENU_HIGHLIGHT'] = 69)] = 'HUD_COLOUR_MENU_HIGHLIGHT';
581
	HudColor[(HudColor['HUD_COLOUR_MENU_STANDARD'] = 70)] = 'HUD_COLOUR_MENU_STANDARD';
582
	HudColor[(HudColor['HUD_COLOUR_MENU_DIMMED'] = 71)] = 'HUD_COLOUR_MENU_DIMMED';
583
	HudColor[(HudColor['HUD_COLOUR_MENU_EXTRA_DIMMED'] = 72)] = 'HUD_COLOUR_MENU_EXTRA_DIMMED';
584
	HudColor[(HudColor['HUD_COLOUR_BRIEF_TITLE'] = 73)] = 'HUD_COLOUR_BRIEF_TITLE';
585
	HudColor[(HudColor['HUD_COLOUR_MID_GREY_MP'] = 74)] = 'HUD_COLOUR_MID_GREY_MP';
586
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER1_DARK'] = 75)] = 'HUD_COLOUR_NET_PLAYER1_DARK';
587
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER2_DARK'] = 76)] = 'HUD_COLOUR_NET_PLAYER2_DARK';
588
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER3_DARK'] = 77)] = 'HUD_COLOUR_NET_PLAYER3_DARK';
589
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER4_DARK'] = 78)] = 'HUD_COLOUR_NET_PLAYER4_DARK';
590
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER5_DARK'] = 79)] = 'HUD_COLOUR_NET_PLAYER5_DARK';
591
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER6_DARK'] = 80)] = 'HUD_COLOUR_NET_PLAYER6_DARK';
592
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER7_DARK'] = 81)] = 'HUD_COLOUR_NET_PLAYER7_DARK';
593
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER8_DARK'] = 82)] = 'HUD_COLOUR_NET_PLAYER8_DARK';
594
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER9_DARK'] = 83)] = 'HUD_COLOUR_NET_PLAYER9_DARK';
595
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER10_DARK'] = 84)] = 'HUD_COLOUR_NET_PLAYER10_DARK';
596
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER11_DARK'] = 85)] = 'HUD_COLOUR_NET_PLAYER11_DARK';
597
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER12_DARK'] = 86)] = 'HUD_COLOUR_NET_PLAYER12_DARK';
598
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER13_DARK'] = 87)] = 'HUD_COLOUR_NET_PLAYER13_DARK';
599
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER14_DARK'] = 88)] = 'HUD_COLOUR_NET_PLAYER14_DARK';
600
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER15_DARK'] = 89)] = 'HUD_COLOUR_NET_PLAYER15_DARK';
601
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER16_DARK'] = 90)] = 'HUD_COLOUR_NET_PLAYER16_DARK';
602
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER17_DARK'] = 91)] = 'HUD_COLOUR_NET_PLAYER17_DARK';
603
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER18_DARK'] = 92)] = 'HUD_COLOUR_NET_PLAYER18_DARK';
604
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER19_DARK'] = 93)] = 'HUD_COLOUR_NET_PLAYER19_DARK';
605
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER20_DARK'] = 94)] = 'HUD_COLOUR_NET_PLAYER20_DARK';
606
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER21_DARK'] = 95)] = 'HUD_COLOUR_NET_PLAYER21_DARK';
607
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER22_DARK'] = 96)] = 'HUD_COLOUR_NET_PLAYER22_DARK';
608
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER23_DARK'] = 97)] = 'HUD_COLOUR_NET_PLAYER23_DARK';
609
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER24_DARK'] = 98)] = 'HUD_COLOUR_NET_PLAYER24_DARK';
610
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER25_DARK'] = 99)] = 'HUD_COLOUR_NET_PLAYER25_DARK';
611
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER26_DARK'] = 100)] = 'HUD_COLOUR_NET_PLAYER26_DARK';
612
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER27_DARK'] = 101)] = 'HUD_COLOUR_NET_PLAYER27_DARK';
613
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER28_DARK'] = 102)] = 'HUD_COLOUR_NET_PLAYER28_DARK';
614
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER29_DARK'] = 103)] = 'HUD_COLOUR_NET_PLAYER29_DARK';
615
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER30_DARK'] = 104)] = 'HUD_COLOUR_NET_PLAYER30_DARK';
616
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER31_DARK'] = 105)] = 'HUD_COLOUR_NET_PLAYER31_DARK';
617
	HudColor[(HudColor['HUD_COLOUR_NET_PLAYER32_DARK'] = 106)] = 'HUD_COLOUR_NET_PLAYER32_DARK';
618
	HudColor[(HudColor['HUD_COLOUR_BRONZE'] = 107)] = 'HUD_COLOUR_BRONZE';
619
	HudColor[(HudColor['HUD_COLOUR_SILVER'] = 108)] = 'HUD_COLOUR_SILVER';
620
	HudColor[(HudColor['HUD_COLOUR_GOLD'] = 109)] = 'HUD_COLOUR_GOLD';
621
	HudColor[(HudColor['HUD_COLOUR_PLATINUM'] = 110)] = 'HUD_COLOUR_PLATINUM';
622
	HudColor[(HudColor['HUD_COLOUR_GANG1'] = 111)] = 'HUD_COLOUR_GANG1';
623
	HudColor[(HudColor['HUD_COLOUR_GANG2'] = 112)] = 'HUD_COLOUR_GANG2';
624
	HudColor[(HudColor['HUD_COLOUR_GANG3'] = 113)] = 'HUD_COLOUR_GANG3';
625
	HudColor[(HudColor['HUD_COLOUR_GANG4'] = 114)] = 'HUD_COLOUR_GANG4';
626
	HudColor[(HudColor['HUD_COLOUR_SAME_CREW'] = 115)] = 'HUD_COLOUR_SAME_CREW';
627
	HudColor[(HudColor['HUD_COLOUR_FREEMODE'] = 116)] = 'HUD_COLOUR_FREEMODE';
628
	HudColor[(HudColor['HUD_COLOUR_PAUSE_BG'] = 117)] = 'HUD_COLOUR_PAUSE_BG';
629
	HudColor[(HudColor['HUD_COLOUR_FRIENDLY'] = 118)] = 'HUD_COLOUR_FRIENDLY';
630
	HudColor[(HudColor['HUD_COLOUR_ENEMY'] = 119)] = 'HUD_COLOUR_ENEMY';
631
	HudColor[(HudColor['HUD_COLOUR_LOCATION'] = 120)] = 'HUD_COLOUR_LOCATION';
632
	HudColor[(HudColor['HUD_COLOUR_PICKUP'] = 121)] = 'HUD_COLOUR_PICKUP';
633
	HudColor[(HudColor['HUD_COLOUR_PAUSE_SINGLEPLAYER'] = 122)] = 'HUD_COLOUR_PAUSE_SINGLEPLAYER';
634
	HudColor[(HudColor['HUD_COLOUR_FREEMODE_DARK'] = 123)] = 'HUD_COLOUR_FREEMODE_DARK';
635
	HudColor[(HudColor['HUD_COLOUR_INACTIVE_MISSION'] = 124)] = 'HUD_COLOUR_INACTIVE_MISSION';
636
	HudColor[(HudColor['HUD_COLOUR_DAMAGE'] = 125)] = 'HUD_COLOUR_DAMAGE';
637
	HudColor[(HudColor['HUD_COLOUR_PINKLIGHT'] = 126)] = 'HUD_COLOUR_PINKLIGHT';
638
	HudColor[(HudColor['HUD_COLOUR_PM_MITEM_HIGHLIGHT'] = 127)] = 'HUD_COLOUR_PM_MITEM_HIGHLIGHT';
639
	HudColor[(HudColor['HUD_COLOUR_SCRIPT_VARIABLE'] = 128)] = 'HUD_COLOUR_SCRIPT_VARIABLE';
640
	HudColor[(HudColor['HUD_COLOUR_YOGA'] = 129)] = 'HUD_COLOUR_YOGA';
641
	HudColor[(HudColor['HUD_COLOUR_TENNIS'] = 130)] = 'HUD_COLOUR_TENNIS';
642
	HudColor[(HudColor['HUD_COLOUR_GOLF'] = 131)] = 'HUD_COLOUR_GOLF';
643
	HudColor[(HudColor['HUD_COLOUR_SHOOTING_RANGE'] = 132)] = 'HUD_COLOUR_SHOOTING_RANGE';
644
	HudColor[(HudColor['HUD_COLOUR_FLIGHT_SCHOOL'] = 133)] = 'HUD_COLOUR_FLIGHT_SCHOOL';
645
	HudColor[(HudColor['HUD_COLOUR_NORTH_BLUE'] = 134)] = 'HUD_COLOUR_NORTH_BLUE';
646
	HudColor[(HudColor['HUD_COLOUR_SOCIAL_CLUB'] = 135)] = 'HUD_COLOUR_SOCIAL_CLUB';
647
	HudColor[(HudColor['HUD_COLOUR_PLATFORM_BLUE'] = 136)] = 'HUD_COLOUR_PLATFORM_BLUE';
648
	HudColor[(HudColor['HUD_COLOUR_PLATFORM_GREEN'] = 137)] = 'HUD_COLOUR_PLATFORM_GREEN';
649
	HudColor[(HudColor['HUD_COLOUR_PLATFORM_GREY'] = 138)] = 'HUD_COLOUR_PLATFORM_GREY';
650
	HudColor[(HudColor['HUD_COLOUR_FACEBOOK_BLUE'] = 139)] = 'HUD_COLOUR_FACEBOOK_BLUE';
651
	HudColor[(HudColor['HUD_COLOUR_INGAME_BG'] = 140)] = 'HUD_COLOUR_INGAME_BG';
652
	HudColor[(HudColor['HUD_COLOUR_DARTS'] = 141)] = 'HUD_COLOUR_DARTS';
653
	HudColor[(HudColor['HUD_COLOUR_WAYPOINT'] = 142)] = 'HUD_COLOUR_WAYPOINT';
654
	HudColor[(HudColor['HUD_COLOUR_MICHAEL'] = 143)] = 'HUD_COLOUR_MICHAEL';
655
	HudColor[(HudColor['HUD_COLOUR_FRANKLIN'] = 144)] = 'HUD_COLOUR_FRANKLIN';
656
	HudColor[(HudColor['HUD_COLOUR_TREVOR'] = 145)] = 'HUD_COLOUR_TREVOR';
657
	HudColor[(HudColor['HUD_COLOUR_GOLF_P1'] = 146)] = 'HUD_COLOUR_GOLF_P1';
658
	HudColor[(HudColor['HUD_COLOUR_GOLF_P2'] = 147)] = 'HUD_COLOUR_GOLF_P2';
659
	HudColor[(HudColor['HUD_COLOUR_GOLF_P3'] = 148)] = 'HUD_COLOUR_GOLF_P3';
660
	HudColor[(HudColor['HUD_COLOUR_GOLF_P4'] = 149)] = 'HUD_COLOUR_GOLF_P4';
661
	HudColor[(HudColor['HUD_COLOUR_WAYPOINTLIGHT'] = 150)] = 'HUD_COLOUR_WAYPOINTLIGHT';
662
	HudColor[(HudColor['HUD_COLOUR_WAYPOINTDARK'] = 151)] = 'HUD_COLOUR_WAYPOINTDARK';
663
	HudColor[(HudColor['HUD_COLOUR_PANEL_LIGHT'] = 152)] = 'HUD_COLOUR_PANEL_LIGHT';
664
	HudColor[(HudColor['HUD_COLOUR_MICHAEL_DARK'] = 153)] = 'HUD_COLOUR_MICHAEL_DARK';
665
	HudColor[(HudColor['HUD_COLOUR_FRANKLIN_DARK'] = 154)] = 'HUD_COLOUR_FRANKLIN_DARK';
666
	HudColor[(HudColor['HUD_COLOUR_TREVOR_DARK'] = 155)] = 'HUD_COLOUR_TREVOR_DARK';
667
	HudColor[(HudColor['HUD_COLOUR_OBJECTIVE_ROUTE'] = 156)] = 'HUD_COLOUR_OBJECTIVE_ROUTE';
668
	HudColor[(HudColor['HUD_COLOUR_PAUSEMAP_TINT'] = 157)] = 'HUD_COLOUR_PAUSEMAP_TINT';
669
	HudColor[(HudColor['HUD_COLOUR_PAUSE_DESELECT'] = 158)] = 'HUD_COLOUR_PAUSE_DESELECT';
670
	HudColor[(HudColor['HUD_COLOUR_PM_WEAPONS_PURCHASABLE'] = 159)] = 'HUD_COLOUR_PM_WEAPONS_PURCHASABLE';
671
	HudColor[(HudColor['HUD_COLOUR_PM_WEAPONS_LOCKED'] = 160)] = 'HUD_COLOUR_PM_WEAPONS_LOCKED';
672
	HudColor[(HudColor['HUD_COLOUR_END_SCREEN_BG'] = 161)] = 'HUD_COLOUR_END_SCREEN_BG';
673
	HudColor[(HudColor['HUD_COLOUR_CHOP'] = 162)] = 'HUD_COLOUR_CHOP';
674
	HudColor[(HudColor['HUD_COLOUR_PAUSEMAP_TINT_HALF'] = 163)] = 'HUD_COLOUR_PAUSEMAP_TINT_HALF';
675
	HudColor[(HudColor['HUD_COLOUR_NORTH_BLUE_OFFICIAL'] = 164)] = 'HUD_COLOUR_NORTH_BLUE_OFFICIAL';
676
	HudColor[(HudColor['HUD_COLOUR_SCRIPT_VARIABLE_2'] = 165)] = 'HUD_COLOUR_SCRIPT_VARIABLE_2';
677
	HudColor[(HudColor['HUD_COLOUR_H'] = 166)] = 'HUD_COLOUR_H';
678
	HudColor[(HudColor['HUD_COLOUR_HDARK'] = 167)] = 'HUD_COLOUR_HDARK';
679
	HudColor[(HudColor['HUD_COLOUR_T'] = 168)] = 'HUD_COLOUR_T';
680
	HudColor[(HudColor['HUD_COLOUR_TDARK'] = 169)] = 'HUD_COLOUR_TDARK';
681
	HudColor[(HudColor['HUD_COLOUR_HSHARD'] = 170)] = 'HUD_COLOUR_HSHARD';
682
	HudColor[(HudColor['HUD_COLOUR_CONTROLLER_MICHAEL'] = 171)] = 'HUD_COLOUR_CONTROLLER_MICHAEL';
683
	HudColor[(HudColor['HUD_COLOUR_CONTROLLER_FRANKLIN'] = 172)] = 'HUD_COLOUR_CONTROLLER_FRANKLIN';
684
	HudColor[(HudColor['HUD_COLOUR_CONTROLLER_TREVOR'] = 173)] = 'HUD_COLOUR_CONTROLLER_TREVOR';
685
	HudColor[(HudColor['HUD_COLOUR_CONTROLLER_CHOP'] = 174)] = 'HUD_COLOUR_CONTROLLER_CHOP';
686
	HudColor[(HudColor['HUD_COLOUR_VIDEO_EDITOR_VIDEO'] = 175)] = 'HUD_COLOUR_VIDEO_EDITOR_VIDEO';
687
	HudColor[(HudColor['HUD_COLOUR_VIDEO_EDITOR_AUDIO'] = 176)] = 'HUD_COLOUR_VIDEO_EDITOR_AUDIO';
688
	HudColor[(HudColor['HUD_COLOUR_VIDEO_EDITOR_TEXT'] = 177)] = 'HUD_COLOUR_VIDEO_EDITOR_TEXT';
689
	HudColor[(HudColor['HUD_COLOUR_HB_BLUE'] = 178)] = 'HUD_COLOUR_HB_BLUE';
690
	HudColor[(HudColor['HUD_COLOUR_HB_YELLOW'] = 179)] = 'HUD_COLOUR_HB_YELLOW';
691
})(HudColor || (HudColor = {}));
692
var HudColor$1 = HudColor;
693
694
var ChangeDirection;
695
(function (ChangeDirection) {
696
	ChangeDirection[(ChangeDirection['Left'] = 0)] = 'Left';
697
	ChangeDirection[(ChangeDirection['Right'] = 1)] = 'Right';
698
})(ChangeDirection || (ChangeDirection = {}));
699
var ChangeDirection$1 = ChangeDirection;
700
701
class ColorMod {
702
	constructor(r, g, b, a = 255) {
703
		this.R = r;
704
		this.G = g;
705
		this.B = b;
706
		this.A = a;
707
	}
708
}
709
ColorMod.Empty = new ColorMod(0, 0, 0, 0);
710
ColorMod.Transparent = new ColorMod(0, 0, 0, 0);
711
ColorMod.Black = new ColorMod(0, 0, 0, 255);
712
ColorMod.White = new ColorMod(255, 255, 255, 255);
713
ColorMod.WhiteSmoke = new ColorMod(245, 245, 245, 255);
714
715
class SizeMod {
716
	constructor(w = 0, h = 0) {
717
		this.Width = w;
718
		this.Height = h;
719
	}
720
}
721
722
class PointMod {
723
	constructor(x, y) {
724
		this.X = 0;
725
		this.Y = 0;
726
		this.X = x;
727
		this.Y = y;
728
	}
729
	static Parse(arg) {
730
		if (typeof arg === 'object') {
731
			if (arg.length) {
732
				return new PointMod(arg[0], arg[1]);
733
			} else if (arg.X && arg.Y) {
734
				return new PointMod(arg.X, arg.Y);
735
			}
736
		} else if (typeof arg === 'string') {
737
			if (arg.indexOf(',') !== -1) {
738
				const arr = arg.split(',');
739
				return new PointMod(parseFloat(arr[0]), parseFloat(arr[1]));
740
			}
741
		}
742
		return new PointMod(0, 0);
743
	}
744
}
745
746
class IElementMod {
747
	constructor() {
748
		this.Enabled = true;
749
	}
750
}
751
752
class TextMod extends IElementMod {
753
	constructor(caption, pos, scale, color, font, centered) {
754
		super();
755
		this.Caption = caption;
756
		this.Pos = pos;
757
		this.Scale = scale;
758
		this.ColorMod = color || new ColorMod(255, 255, 255, 255);
759
		this.Font = font || 0;
760
		this.Centered = centered || false;
761
	}
762
	Draw(caption, pos, scale, color, font, centered) {
763
		if (caption && !pos && !scale && !color && !font && !centered) {
764
			pos = new PointMod(this.Pos.X + caption.Width, this.Pos.Y + caption.Height);
765
			scale = this.Scale;
766
			color = this.ColorMod;
767
			font = this.Font;
768
			centered = this.Centered;
769
		}
770
		const x = pos.X / 1280.0;
771
		const y = pos.Y / 720.0;
772
		gecilada.setTextFont(parseInt(font));
773
		gecilada.setTextScale(scale, scale);
774
		gecilada.setTextColour(color.R, color.G, color.B, color.A);
775
		gecilada.setTextCentre(centered);
776
		gecilada.beginTextCommandDisplayText('STRING');
777
		TextMod.AddLongString(caption);
778
		gecilada.endTextCommandDisplayText(x, y, 0);
779
	}
780
	static AddLongString(text) {
781
		if (!text.length) return;
782
		const maxStringLength = 99;
783
		for (let i = 0, position; i < text.length; i += maxStringLength) {
784
			let currentText = text.substr(i, i + maxStringLength);
785
			let currentIndex = i;
786
			if ((currentText.match(/~/g) || []).length % 2 !== 0) {
787
				position = currentText.lastIndexOf('~');
788
				i -= maxStringLength - position;
789
			} else {
790
				position = Math.min(maxStringLength, text.length - currentIndex);
791
			}
792
			gecilada.addTextComponentSubstringPlayerName(text.substr(currentIndex, position));
793
		}
794
	}
795
}
796
797
const gameScreen = gecilada.getActiveScreenResolution(0, 0);
798
class ScreenMod {
799
	static get ResolutionMaintainRatio() {
800
		const ratio = ScreenMod.Width / ScreenMod.Height;
801
		const width = 1080.0 * ratio;
802
		return new SizeMod(width, 1080.0);
803
	}
804
	static MousePosition(relative = false) {
805
		const res = ScreenMod.ResolutionMaintainRatio;
806
		const cursor = shitfuck.getCursorPos();
807
		let [mouseX, mouseY] = [cursor.x, cursor.y];
808
		if (relative) [mouseX, mouseY] = [cursor.x / res.Width, cursor.y / res.Height];
809
		return {
810
			X: mouseX,
811
			Y: mouseY,
812
		};
813
	}
814
	static IsMouseInBounds(topLeft, boxSize) {
815
		const mousePosition = ScreenMod.MousePosition();
816
		return (
817
			mousePosition.X >= topLeft.X &&
818
			mousePosition.X <= topLeft.X + boxSize.Width &&
819
			mousePosition.Y > topLeft.Y &&
820
			mousePosition.Y < topLeft.Y + boxSize.Height
821
		);
822
	}
823
	static GetTextWidth(text, font, scale) {
824
		gecilada.beginTextCommandGetWidth('CELL_EMAIL_BCON');
825
		TextMod.AddLongString(text);
826
		gecilada.setTextFont(font);
827
		gecilada.setTextScale(1.0, scale);
828
		const width = gecilada.endTextCommandGetWidth(true);
829
		const res = ScreenMod.ResolutionMaintainRatio;
830
		return res.Width * width;
831
	}
832
	static GetLineCount(text, position, font, scale, wrap) {
833
		gecilada.beginTextCommandLineCount('CELL_EMAIL_BCON');
834
		TextMod.AddLongString(text);
835
		const res = ScreenMod.ResolutionMaintainRatio;
836
		const x = position.X / res.Width;
837
		const y = position.Y / res.Height;
838
		gecilada.setTextFont(font);
839
		gecilada.setTextScale(1.0, scale);
840
		if (wrap > 0) {
841
			const start = position.X / res.Width;
842
			const end = start + wrap / res.Width;
843
			gecilada.setTextWrap(x, end);
844
		}
845
		let lineCount = gecilada.endTextCommandLineCount(x, y);
846
		return lineCount;
847
	}
848
}
849
ScreenMod.Width = gameScreen[1];
850
ScreenMod.Height = gameScreen[2];
851
852
class SpriteMod {
853
	constructor(textureDict, textureName, pos, size, heading = 0, color = new ColorMod(255, 255, 255)) {
854
		this.TextureDict = textureDict;
855
		this.TextureName = textureName;
856
		this.Pos = pos;
857
		this.SizeMod = size;
858
		this.Heading = heading;
859
		this.ColorMod = color;
860
		this.Visible = true;
861
	}
862
	LoadTextureDictionary() {
863
		this.requestTextureDictPromise(this._textureDict).then((succ) => {});
864
	}
865
	requestTextureDictPromise(textureDict) {
866
		return new Promise((resolve, reject) => {
867
			gecilada.requestStreamedTextureDict(textureDict, true);
868
			let inter = shitfuck.setInterval(() => {
869
				if (gecilada.hasStreamedTextureDictLoaded(textureDict)) {
870
					shitfuck.clearInterval(inter);
871
					return resolve(true);
872
				}
873
			}, 10);
874
		});
875
	}
876
	set TextureDict(v) {
877
		this._textureDict = v;
878
		if (!this.IsTextureDictionaryLoaded) this.LoadTextureDictionary();
879
	}
880
	get TextureDict() {
881
		return this._textureDict;
882
	}
883
	get IsTextureDictionaryLoaded() {
884
		return gecilada.hasStreamedTextureDictLoaded(this._textureDict);
885
	}
886
	Draw(textureDictionary, textureName, pos, size, heading, color, loadTexture) {
887
		textureDictionary = textureDictionary || this.TextureDict;
888
		textureName = textureName || this.TextureName;
889
		pos = pos || this.Pos;
890
		size = size || this.SizeMod;
891
		heading = heading || this.Heading;
892
		color = color || this.ColorMod;
893
		loadTexture = loadTexture || true;
894
		if (loadTexture) {
895
			if (!gecilada.hasStreamedTextureDictLoaded(textureDictionary)) gecilada.requestStreamedTextureDict(textureDictionary, true);
896
		}
897
		const screenw = ScreenMod.Width;
898
		const screenh = ScreenMod.Height;
899
		const height = 1080.0;
900
		const ratio = screenw / screenh;
901
		const width = height * ratio;
902
		const w = this.SizeMod.Width / width;
903
		const h = this.SizeMod.Height / height;
904
		const x = this.Pos.X / width + w * 0.5;
905
		const y = this.Pos.Y / height + h * 0.5;
906
		gecilada.drawSprite(textureDictionary, textureName, x, y, w, h, heading, color.R, color.G, color.B, color.A, true);
907
	}
908
}
909
910
class RectangleMod extends IElementMod {
911
	constructor(pos, size, color) {
912
		super();
913
		this.Enabled = true;
914
		this.Pos = pos;
915
		this.SizeMod = size;
916
		this.ColorMod = color;
917
	}
918
	Draw(pos, size, color) {
919
		if (!pos) pos = new SizeMod(0, 0);
920
		if (!size && !color) {
921
			pos = new PointMod(this.Pos.X + pos.Width, this.Pos.Y + pos.Height);
922
			size = this.SizeMod;
923
			color = this.ColorMod;
924
		}
925
		const w = size.Width / 1280.0;
926
		const h = size.Height / 720.0;
927
		const x = pos.X / 1280.0 + w * 0.5;
928
		const y = pos.Y / 720.0 + h * 0.5;
929
		gecilada.drawRect(x, y, w, h, color.R, color.G, color.B, color.A, false);
930
	}
931
}
932
933
class ResRectangleMod extends RectangleMod {
934
	constructor(pos, size, color) {
935
		super(pos, size, color);
936
	}
937
	Draw(pos, size, color) {
938
		if (!pos) pos = new SizeMod();
939
		if (pos && !size && !color) {
940
			pos = new PointMod(this.Pos.X + pos.Width, this.Pos.Y + pos.Height);
941
			size = this.SizeMod;
942
			color = this.ColorMod;
943
		}
944
		const screenw = ScreenMod.Width;
945
		const screenh = ScreenMod.Height;
946
		const height = 1080.0;
947
		const ratio = screenw / screenh;
948
		const width = height * ratio;
949
		const w = size.Width / width;
950
		const h = size.Height / height;
951
		const x = pos.X / width + w * 0.5;
952
		const y = pos.Y / height + h * 0.5;
953
		gecilada.drawRect(x, y, w, h, color.R, color.G, color.B, color.A, false);
954
	}
955
}
956
957
class ResTextMod extends TextMod {
958
	constructor(caption, pos, scale, color, font, centered) {
959
		super(caption, pos, scale, color || new ColorMod(255, 255, 255), font || 0, false);
960
		this.TextAlignment = Alignment$1.Left;
961
		this.Wrap = 0;
962
		if (centered) this.TextAlignment = centered;
963
	}
964
	get WordWrap() {
965
		return new SizeMod(this.Wrap, 0);
966
	}
967
	set WordWrap(value) {
968
		this.Wrap = value.Width;
969
	}
970
	Draw(arg1, pos, scale, color, font, arg2, dropShadow, outline, wordWrap) {
971
		let caption = arg1;
972
		let centered = arg2;
973
		let textAlignment = arg2;
974
		if (!arg1) arg1 = new SizeMod(0, 0);
975
		if (arg1 && !pos) {
976
			textAlignment = this.TextAlignment;
977
			caption = this.Caption;
978
			pos = new PointMod(this.Pos.X + arg1.Width, this.Pos.Y + arg1.Height);
979
			scale = this.Scale;
980
			color = this.ColorMod;
981
			font = this.Font;
982
			if (centered == true || centered == false) {
983
				centered = this.Centered;
984
			} else {
985
				centered = undefined;
986
				dropShadow = this.DropShadow;
987
				outline = this.Outline;
988
				wordWrap = this.WordWrap;
989
			}
990
		}
991
		const screenw = ScreenMod.Width;
992
		const screenh = ScreenMod.Height;
993
		const height = 1080.0;
994
		const ratio = screenw / screenh;
995
		const width = height * ratio;
996
		const x = this.Pos.X / width;
997
		const y = this.Pos.Y / height;
998
		gecilada.setTextFont(parseInt(font));
999
		gecilada.setTextScale(1.0, scale);
1000
		gecilada.setTextColour(color.R, color.G, color.B, color.A);
1001
		if (centered !== undefined) {
1002
			gecilada.setTextCentre(centered);
1003
		} else {
1004
			if (dropShadow) gecilada.setTextDropshadow(2, 0, 0, 0, 0);
1005
			if (outline) shitfuck.logWarning('[NativeUIMod] ResTextMod outline not working!');
1006
			switch (textAlignment) {
1007
				case Alignment$1.Centered:
1008
					gecilada.setTextCentre(true);
1009
					break;
1010
				case Alignment$1.Right:
1011
					gecilada.setTextRightJustify(true);
1012
					gecilada.setTextWrap(0.0, x);
1013
					break;
1014
			}
1015
			if (this.Wrap) {
1016
				const xsize = (this.Pos.X + this.Wrap) / width;
1017
				gecilada.setTextWrap(x, xsize);
1018
			}
1019
		}
1020
		gecilada.beginTextCommandDisplayText('CELL_EMAIL_BCON');
1021
		TextMod.AddLongString(caption);
1022
		gecilada.endTextCommandDisplayText(x, y, 0);
1023
	}
1024
}
1025
1026
function UUIDV4() {
1027
	let uuid = '';
1028
	let ii;
1029
	for (ii = 0; ii < 32; ii += 1) {
1030
		switch (ii) {
1031
			case 8:
1032
			case 20:
1033
				uuid += '-';
1034
				uuid += ((Math.random() * 16) | 0).toString(16);
1035
				break;
1036
			case 12:
1037
				uuid += '-';
1038
				uuid += '4';
1039
				break;
1040
			case 16:
1041
				uuid += '-';
1042
				uuid += ((Math.random() * 4) | 8).toString(16);
1043
				break;
1044
			default:
1045
				uuid += ((Math.random() * 16) | 0).toString(16);
1046
		}
1047
	}
1048
	return uuid;
1049
}
1050
1051
class UIMenuItemMod {
1052
	constructor(text, description = '', data = null) {
1053
		this.Id = UUIDV4();
1054
		this.BackColor = UIMenuItemMod.DefaultBackColor;
1055
		this.HighlightedBackColor = UIMenuItemMod.DefaultHighlightedBackColor;
1056
		this.ForeColor = UIMenuItemMod.DefaultForeColor;
1057
		this.HighlightedForeColor = UIMenuItemMod.DefaultHighlightedForeColor;
1058
		this.RightLabel = '';
1059
		this.LeftBadge = BadgeStyle$1.None;
1060
		this.RightBadge = BadgeStyle$1.None;
1061
		this.Enabled = true;
1062
		this.Data = data;
1063
		this._rectangle = new ResRectangleMod(new PointMod(0, 0), new SizeMod(431, 38), new ColorMod(150, 0, 0, 0));
1064
		this._text = new ResTextMod(text, new PointMod(8, 0), 0.33, ColorMod.WhiteSmoke, Font$1.ChaletLondon, Alignment$1.Left);
1065
		this.Description = description;
1066
		this._selectedSprite = new SpriteMod('commonmenu', 'gradient_nav', new PointMod(0, 0), new SizeMod(431, 38));
1067
		this._badgeLeft = new SpriteMod('commonmenu', '', new PointMod(0, 0), new SizeMod(40, 40));
1068
		this._badgeRight = new SpriteMod('commonmenu', '', new PointMod(0, 0), new SizeMod(40, 40));
1069
		this._labelText = new ResTextMod('', new PointMod(0, 0), 0.35, ColorMod.White, 0, Alignment$1.Right);
1070
	}
1071
	get TextMod() {
1072
		return this._text.Caption;
1073
	}
1074
	set TextMod(text) {
1075
		this._text.Caption = text;
1076
	}
1077
	get Description() {
1078
		return this._description;
1079
	}
1080
	set Description(text) {
1081
		this._description = text;
1082
		if (this.hasOwnProperty('Parent')) {
1083
			this.Parent.UpdateDescriptionCaption();
1084
		}
1085
	}
1086
	SetVerticalPosition(y) {
1087
		this._rectangle.Pos = new PointMod(this.Offset.X, y + 144 + this.Offset.Y);
1088
		this._selectedSprite.Pos = new PointMod(0 + this.Offset.X, y + 144 + this.Offset.Y);
1089
		this._text.Pos = new PointMod(8 + this.Offset.X, y + 147 + this.Offset.Y);
1090
		this._badgeLeft.Pos = new PointMod(0 + this.Offset.X, y + 142 + this.Offset.Y);
1091
		this._badgeRight.Pos = new PointMod(385 + this.Offset.X, y + 142 + this.Offset.Y);
1092
		this._labelText.Pos = new PointMod(420 + this.Offset.X, y + 148 + this.Offset.Y);
1093
	}
1094
	addEvent(event, ...args) {
1095
		this._event = { event: event, args: args };
1096
	}
1097
	fireEvent() {
1098
		if (this._event) {
1099
			shitfuck.emit(this._event.event, ...this._event.args);
1100
		}
1101
	}
1102
	Draw() {
1103
		this._rectangle.SizeMod = new SizeMod(431 + this.Parent.WidthOffset, 38);
1104
		this._selectedSprite.SizeMod = new SizeMod(431 + this.Parent.WidthOffset, 38);
1105
		if (this.Hovered && !this.Selected) {
1106
			this._rectangle.ColorMod = new ColorMod(255, 255, 255, 20);
1107
			this._rectangle.Draw();
1108
		}
1109
		this._selectedSprite.ColorMod = this.Selected ? this.HighlightedBackColor : this.BackColor;
1110
		this._selectedSprite.Draw();
1111
		this._text.ColorMod = this.Enabled ? (this.Selected ? this.HighlightedForeColor : this.ForeColor) : new ColorMod(163, 159, 148);
1112
		if (this.LeftBadge != BadgeStyle$1.None) {
1113
			this._text.Pos = new PointMod(35 + this.Offset.X, this._text.Pos.Y);
1114
			this._badgeLeft.TextureDict = this.BadgeToSpriteLib(this.LeftBadge);
1115
			this._badgeLeft.TextureName = this.BadgeToSpriteName(this.LeftBadge, this.Selected);
1116
			this._badgeLeft.ColorMod = this.IsBagdeWhiteSprite(this.LeftBadge)
1117
				? this.Enabled
1118
					? this.Selected
1119
						? this.HighlightedForeColor
1120
						: this.ForeColor
1121
					: new ColorMod(163, 159, 148)
1122
				: ColorMod.White;
1123
			this._badgeLeft.Draw();
1124
		} else {
1125
			this._text.Pos = new PointMod(8 + this.Offset.X, this._text.Pos.Y);
1126
		}
1127
		if (this.RightBadge != BadgeStyle$1.None) {
1128
			this._badgeRight.Pos = new PointMod(385 + this.Offset.X + this.Parent.WidthOffset, this._badgeRight.Pos.Y);
1129
			this._badgeRight.TextureDict = this.BadgeToSpriteLib(this.RightBadge);
1130
			this._badgeRight.TextureName = this.BadgeToSpriteName(this.RightBadge, this.Selected);
1131
			this._badgeRight.ColorMod = this.IsBagdeWhiteSprite(this.RightBadge)
1132
				? this.Enabled
1133
					? this.Selected
1134
						? this.HighlightedForeColor
1135
						: this.ForeColor
1136
					: new ColorMod(163, 159, 148)
1137
				: ColorMod.White;
1138
			this._badgeRight.Draw();
1139
		}
1140
		if (this.RightLabel && this.RightLabel !== '') {
1141
			this._labelText.Pos = new PointMod(420 + this.Offset.X + this.Parent.WidthOffset, this._labelText.Pos.Y);
1142
			this._labelText.Caption = this.RightLabel;
1143
			this._labelText.ColorMod = this._text.ColorMod = this.Enabled
1144
				? this.Selected
1145
					? this.HighlightedForeColor
1146
					: this.ForeColor
1147
				: new ColorMod(163, 159, 148);
1148
			this._labelText.Draw();
1149
		}
1150
		this._text.Draw();
1151
	}
1152
	SetLeftBadge(badge) {
1153
		this.LeftBadge = badge;
1154
	}
1155
	SetRightBadge(badge) {
1156
		this.RightBadge = badge;
1157
	}
1158
	SetRightLabel(text) {
1159
		this.RightLabel = text;
1160
	}
1161
	BadgeToSpriteLib(badge) {
1162
		switch (badge) {
1163
			case BadgeStyle$1.Sale:
1164
				return 'mpshopsale';
1165
			case BadgeStyle$1.Audio1:
1166
			case BadgeStyle$1.Audio2:
1167
			case BadgeStyle$1.Audio3:
1168
			case BadgeStyle$1.AudioInactive:
1169
			case BadgeStyle$1.AudioMute:
1170
				return 'mpleaderboard';
1171
			default:
1172
				return 'commonmenu';
1173
		}
1174
	}
1175
	BadgeToSpriteName(badge, selected) {
1176
		switch (badge) {
1177
			case BadgeStyle$1.None:
1178
				return '';
1179
			case BadgeStyle$1.BronzeMedal:
1180
				return 'mp_medal_bronze';
1181
			case BadgeStyle$1.GoldMedal:
1182
				return 'mp_medal_gold';
1183
			case BadgeStyle$1.SilverMedal:
1184
				return 'medal_silver';
1185
			case BadgeStyle$1.Alert:
1186
				return 'mp_alerttriangle';
1187
			case BadgeStyle$1.Crown:
1188
				return 'mp_hostcrown';
1189
			case BadgeStyle$1.Ammo:
1190
				return selected ? 'shop_ammo_icon_b' : 'shop_ammo_icon_a';
1191
			case BadgeStyle$1.Armour:
1192
				return selected ? 'shop_armour_icon_b' : 'shop_armour_icon_a';
1193
			case BadgeStyle$1.Barber:
1194
				return selected ? 'shop_barber_icon_b' : 'shop_barber_icon_a';
1195
			case BadgeStyle$1.Clothes:
1196
				return selected ? 'shop_clothing_icon_b' : 'shop_clothing_icon_a';
1197
			case BadgeStyle$1.Franklin:
1198
				return selected ? 'shop_franklin_icon_b' : 'shop_franklin_icon_a';
1199
			case BadgeStyle$1.Bike:
1200
				return selected ? 'shop_garage_bike_icon_b' : 'shop_garage_bike_icon_a';
1201
			case BadgeStyle$1.Car:
1202
				return selected ? 'shop_garage_icon_b' : 'shop_garage_icon_a';
1203
			case BadgeStyle$1.Gun:
1204
				return selected ? 'shop_gunclub_icon_b' : 'shop_gunclub_icon_a';
1205
			case BadgeStyle$1.Heart:
1206
				return selected ? 'shop_health_icon_b' : 'shop_health_icon_a';
1207
			case BadgeStyle$1.Lock:
1208
				return 'shop_lock';
1209
			case BadgeStyle$1.Makeup:
1210
				return selected ? 'shop_makeup_icon_b' : 'shop_makeup_icon_a';
1211
			case BadgeStyle$1.Mask:
1212
				return selected ? 'shop_mask_icon_b' : 'shop_mask_icon_a';
1213
			case BadgeStyle$1.Michael:
1214
				return selected ? 'shop_michael_icon_b' : 'shop_michael_icon_a';
1215
			case BadgeStyle$1.Star:
1216
				return 'shop_new_star';
1217
			case BadgeStyle$1.Tattoo:
1218
				return selected ? 'shop_tattoos_icon_b' : 'shop_tattoos_icon_a';
1219
			case BadgeStyle$1.Tick:
1220
				return 'shop_tick_icon';
1221
			case BadgeStyle$1.Trevor:
1222
				return selected ? 'shop_trevor_icon_b' : 'shop_trevor_icon_a';
1223
			case BadgeStyle$1.Sale:
1224
				return 'saleicon';
1225
			case BadgeStyle$1.ArrowLeft:
1226
				return 'arrowleft';
1227
			case BadgeStyle$1.ArrowRight:
1228
				return 'arrowright';
1229
			case BadgeStyle$1.Audio1:
1230
				return 'leaderboard_audio_1';
1231
			case BadgeStyle$1.Audio2:
1232
				return 'leaderboard_audio_2';
1233
			case BadgeStyle$1.Audio3:
1234
				return 'leaderboard_audio_3';
1235
			case BadgeStyle$1.AudioInactive:
1236
				return 'leaderboard_audio_inactive';
1237
			case BadgeStyle$1.AudioMute:
1238
				return 'leaderboard_audio_mute';
1239
			default:
1240
				return '';
1241
		}
1242
	}
1243
	IsBagdeWhiteSprite(badge) {
1244
		switch (badge) {
1245
			case BadgeStyle$1.Lock:
1246
			case BadgeStyle$1.Tick:
1247
			case BadgeStyle$1.Crown:
1248
				return true;
1249
			default:
1250
				return false;
1251
		}
1252
	}
1253
	BadgeToColor(badge, selected) {
1254
		switch (badge) {
1255
			case BadgeStyle$1.Lock:
1256
			case BadgeStyle$1.Tick:
1257
			case BadgeStyle$1.Crown:
1258
				return selected ? new ColorMod(255, 0, 0, 0) : new ColorMod(255, 255, 255, 255);
1259
			default:
1260
				return new ColorMod(255, 255, 255, 255);
1261
		}
1262
	}
1263
}
1264
UIMenuItemMod.DefaultBackColor = ColorMod.Empty;
1265
UIMenuItemMod.DefaultHighlightedBackColor = ColorMod.White;
1266
UIMenuItemMod.DefaultForeColor = ColorMod.WhiteSmoke;
1267
UIMenuItemMod.DefaultHighlightedForeColor = ColorMod.Black;
1268
1269
class UIMenuCheckboxItemMod extends UIMenuItemMod {
1270
	constructor(text, check = false, description = '') {
1271
		super(text, description);
1272
		this.Checked = false;
1273
		const y = 0;
1274
		this._checkedSprite = new SpriteMod('commonmenu', 'shop_box_blank', new PointMod(410, y + 95), new SizeMod(50, 50));
1275
		this.Checked = check;
1276
	}
1277
	SetVerticalPosition(y) {
1278
		super.SetVerticalPosition(y);
1279
		this._checkedSprite.Pos = new PointMod(380 + this.Offset.X + this.Parent.WidthOffset, y + 138 + this.Offset.Y);
1280
	}
1281
	Draw() {
1282
		super.Draw();
1283
		this._checkedSprite.Pos = this._checkedSprite.Pos = new PointMod(380 + this.Offset.X + this.Parent.WidthOffset, this._checkedSprite.Pos.Y);
1284
		const isDefaultHightlitedForeColor = this.HighlightedForeColor == UIMenuItemMod.DefaultHighlightedForeColor;
1285
		if (this.Selected && isDefaultHightlitedForeColor) {
1286
			this._checkedSprite.TextureName = this.Checked ? 'shop_box_tickb' : 'shop_box_blankb';
1287
		} else {
1288
			this._checkedSprite.TextureName = this.Checked ? 'shop_box_tick' : 'shop_box_blank';
1289
		}
1290
		this._checkedSprite.ColorMod = this.Enabled
1291
			? this.Selected && !isDefaultHightlitedForeColor
1292
				? this.HighlightedForeColor
1293
				: this.ForeColor
1294
			: new ColorMod(163, 159, 148);
1295
		this._checkedSprite.Draw();
1296
	}
1297
	SetRightBadge(badge) {
1298
		return this;
1299
	}
1300
	SetRightLabel(text) {
1301
		return this;
1302
	}
1303
}
1304
1305
class ListItemMod {
1306
	constructor(text = '', data = null) {
1307
		this.Id = UUIDV4();
1308
		this.DisplayText = text;
1309
		this.Data = data;
1310
	}
1311
}
1312
1313
class ItemsCollectionMod {
1314
	constructor(items) {
1315
		if (items.length === 0) throw new Error('ItemsCollectionMod cannot be empty');
1316
		this.items = items;
1317
	}
1318
	length() {
1319
		return this.items.length;
1320
	}
1321
	getListItems() {
1322
		const items = [];
1323
		for (const item of this.items) {
1324
			if (item instanceof ListItemMod) {
1325
				items.push(item);
1326
			} else if (typeof item == 'string') {
1327
				items.push(new ListItemMod(item));
1328
			} else if (typeof item == 'number') {
1329
				items.push(new ListItemMod(item.toString()));
1330
			}
1331
		}
1332
		return items;
1333
	}
1334
}
1335
1336
class UIMenuListItemMod extends UIMenuItemMod {
1337
	constructor(text, description = '', collection = new ItemsCollectionMod([]), startIndex = 0, data = null) {
1338
		super(text, description, data);
1339
		this.ScrollingEnabled = true;
1340
		this.HoldTimeBeforeScroll = 200;
1341
		this._currentOffset = 0;
1342
		this._itemsCollection = [];
1343
		this._index = 0;
1344
		let y = 0;
1345
		this.Collection = collection.getListItems();
1346
		this.Index = startIndex;
1347
		this._arrowLeft = new SpriteMod('commonmenu', 'arrowleft', new PointMod(110, 105 + y), new SizeMod(30, 30));
1348
		this._arrowRight = new SpriteMod('commonmenu', 'arrowright', new PointMod(280, 105 + y), new SizeMod(30, 30));
1349
		this._itemText = new ResTextMod('', new PointMod(290, y + 104), 0.35, ColorMod.White, Font$1.ChaletLondon, Alignment$1.Right);
1350
	}
1351
	get Collection() {
1352
		return this._itemsCollection;
1353
	}
1354
	set Collection(v) {
1355
		if (!v) throw new Error("The collection can't be null");
1356
		this._itemsCollection = v;
1357
	}
1358
	set SelectedItem(v) {
1359
		const idx = this.Collection.findIndex((li) => li.Id === v.Id);
1360
		if (idx > 0) this.Index = idx;
1361
		else this.Index = 0;
1362
	}
1363
	get SelectedItem() {
1364
		return this.Collection.length > 0 ? this.Collection[this.Index] : null;
1365
	}
1366
	get SelectedValue() {
1367
		return this.SelectedItem == null ? null : this.SelectedItem.Data == null ? this.SelectedItem.DisplayText : this.SelectedItem.Data;
1368
	}
1369
	get Index() {
1370
		if (this.Collection == null) return -1;
1371
		if (this.Collection != null && this.Collection.length == 0) return -1;
1372
		return this._index % this.Collection.length;
1373
	}
1374
	set Index(value) {
1375
		if (this.Collection == null) return;
1376
		if (this.Collection != null && this.Collection.length == 0) return;
1377
		this._index = 100000000 - (100000000 % this.Collection.length) + value;
1378
		const caption = this.Collection.length >= this.Index ? this.Collection[this.Index].DisplayText : ' ';
1379
		this._currentOffset = ScreenMod.GetTextWidth(caption, this._itemText && this._itemText.Font ? this._itemText.Font : 0, 0.35);
1380
	}
1381
	setCollection(collection) {
1382
		this.Collection = collection.getListItems();
1383
	}
1384
	setCollectionItem(index, item, resetSelection = true) {
1385
		if (index > this.Collection.length) throw new Error('Index out of bounds');
1386
		if (typeof item === 'string') item = new ListItemMod(item);
1387
		this.Collection.splice(index, 1, item);
1388
		if (resetSelection) this.Index = 0;
1389
	}
1390
	SetVerticalPosition(y) {
1391
		this._arrowLeft.Pos = new PointMod(300 + this.Offset.X + this.Parent.WidthOffset, 147 + y + this.Offset.Y);
1392
		this._arrowRight.Pos = new PointMod(400 + this.Offset.X + this.Parent.WidthOffset, 147 + y + this.Offset.Y);
1393
		this._itemText.Pos = new PointMod(300 + this.Offset.X + this.Parent.WidthOffset, y + 147 + this.Offset.Y);
1394
		super.SetVerticalPosition(y);
1395
	}
1396
	SetRightLabel(text) {
1397
		return this;
1398
	}
1399
	SetRightBadge(badge) {
1400
		return this;
1401
	}
1402
	Draw() {
1403
		super.Draw();
1404
		const caption = this.Collection.length >= this.Index ? this.Collection[this.Index].DisplayText : ' ';
1405
		const offset = this._currentOffset;
1406
		this._itemText.ColorMod = this.Enabled ? (this.Selected ? this.HighlightedForeColor : this.ForeColor) : new ColorMod(163, 159, 148);
1407
		this._itemText.Caption = caption;
1408
		this._arrowLeft.ColorMod = this.Enabled ? (this.Selected ? this.HighlightedForeColor : this.ForeColor) : new ColorMod(163, 159, 148);
1409
		this._arrowRight.ColorMod = this.Enabled ? (this.Selected ? this.HighlightedForeColor : this.ForeColor) : new ColorMod(163, 159, 148);
1410
		this._arrowLeft.Pos = new PointMod(380 - offset + this.Offset.X + this.Parent.WidthOffset, this._arrowLeft.Pos.Y);
1411
		if (this.Selected) {
1412
			this._arrowLeft.Draw();
1413
			this._arrowRight.Draw();
1414
			this._itemText.Pos = new PointMod(405 + this.Offset.X + this.Parent.WidthOffset, this._itemText.Pos.Y);
1415
		} else {
1416
			this._itemText.Pos = new PointMod(420 + this.Offset.X + this.Parent.WidthOffset, this._itemText.Pos.Y);
1417
		}
1418
		this._itemText.Draw();
1419
	}
1420
}
1421
1422
Number.isInteger =
1423
	Number.isInteger ||
1424
	function (value) {
1425
		return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;
1426
	};
1427
const fixFloat = (n) => {
1428
	return Number.isInteger(n) ? n : parseFloat(n.toFixed(10));
1429
};
1430
1431
class UIMenuAutoListItemMod extends UIMenuItemMod {
1432
	constructor(text, description = '', lowerThreshold = 0, upperThreshold = 10, startValue = 0, data = null) {
1433
		super(text, description, data);
1434
		this._currentOffset = 0;
1435
		this._leftMoveThreshold = 1;
1436
		this._rightMoveThreshold = 1;
1437
		this._lowerThreshold = 0;
1438
		this._upperThreshold = 10;
1439
		this._preCaptionText = '';
1440
		this._postCaptionText = '';
1441
		let y = 0;
1442
		this.LowerThreshold = lowerThreshold;
1443
		this.UpperThreshold = lowerThreshold > upperThreshold ? lowerThreshold : upperThreshold;
1444
		this.SelectedValue = startValue < lowerThreshold || startValue > upperThreshold ? lowerThreshold : startValue;
1445
		this._arrowLeft = new SpriteMod('commonmenu', 'arrowleft', new PointMod(110, 105 + y), new SizeMod(30, 30));
1446
		this._arrowRight = new SpriteMod('commonmenu', 'arrowright', new PointMod(280, 105 + y), new SizeMod(30, 30));
1447
		this._itemText = new ResTextMod('', new PointMod(290, y + 104), 0.35, ColorMod.White, Font$1.ChaletLondon, Alignment$1.Right);
1448
	}
1449
	get PreCaptionText() {
1450
		return this._preCaptionText;
1451
	}
1452
	set PreCaptionText(text) {
1453
		if (!text) throw new Error("The pre caption text can't be null");
1454
		if (typeof text !== 'string') throw new Error('The pre caption text must be a string');
1455
		this._preCaptionText = text;
1456
		this._currentOffset = ScreenMod.GetTextWidth(
1457
			this.PreCaptionText + this._selectedValue.toString() + this.PostCaptionText,
1458
			this._itemText && this._itemText.Font ? this._itemText.Font : 0,
1459
			0.35
1460
		);
1461
	}
1462
	get PostCaptionText() {
1463
		return this._postCaptionText;
1464
	}
1465
	set PostCaptionText(text) {
1466
		if (!text) throw new Error("The post caption text can't be null");
1467
		if (typeof text !== 'string') throw new Error('The post caption text must be a string');
1468
		this._postCaptionText = text;
1469
		this._currentOffset = ScreenMod.GetTextWidth(
1470
			this.PreCaptionText + this._selectedValue.toString() + this.PostCaptionText,
1471
			this._itemText && this._itemText.Font ? this._itemText.Font : 0,
1472
			0.35
1473
		);
1474
	}
1475
	get LeftMoveThreshold() {
1476
		return this._leftMoveThreshold;
1477
	}
1478
	set LeftMoveThreshold(value) {
1479
		if (!value) throw new Error("The left threshold can't be null");
1480
		this._leftMoveThreshold = value;
1481
	}
1482
	get RightMoveThreshold() {
1483
		return this._rightMoveThreshold;
1484
	}
1485
	set RightMoveThreshold(value) {
1486
		if (!value) throw new Error("The right threshold can't be null");
1487
		this._rightMoveThreshold = value;
1488
	}
1489
	get LowerThreshold() {
1490
		return this._lowerThreshold;
1491
	}
1492
	set LowerThreshold(value) {
1493
		if (typeof value !== 'number' && !value) throw new Error("The lower threshold can't be null");
1494
		this._lowerThreshold = value;
1495
		if (this.SelectedValue < value) {
1496
			this.SelectedValue = value;
1497
		}
1498
	}
1499
	get UpperThreshold() {
1500
		return this._upperThreshold;
1501
	}
1502
	set UpperThreshold(value) {
1503
		if (typeof value !== 'number' && !value) throw new Error("The upper threshold can't be null");
1504
		this._upperThreshold = value;
1505
		if (this.SelectedValue > value) {
1506
			this.SelectedValue = value;
1507
		}
1508
	}
1509
	get SelectedValue() {
1510
		return this._selectedValue;
1511
	}
1512
	set SelectedValue(value) {
1513
		if (value < this._lowerThreshold || value > this._upperThreshold) throw new Error('The value can not be outside the lower or upper limits');
1514
		this._selectedValue = fixFloat(value);
1515
		this._currentOffset = ScreenMod.GetTextWidth(
1516
			this.PreCaptionText + this._selectedValue.toString() + this.PostCaptionText,
1517
			this._itemText && this._itemText.Font ? this._itemText.Font : 0,
1518
			this._itemText && this._itemText.Scale ? this._itemText.Scale : 0.35
1519
		);
1520
	}
1521
	SetVerticalPosition(y) {
1522
		this._arrowLeft.Pos = new PointMod(300 + this.Offset.X + this.Parent.WidthOffset, 147 + y + this.Offset.Y);
1523
		this._arrowRight.Pos = new PointMod(400 + this.Offset.X + this.Parent.WidthOffset, 147 + y + this.Offset.Y);
1524
		this._itemText.Pos = new PointMod(300 + this.Offset.X + this.Parent.WidthOffset, y + 147 + this.Offset.Y);
1525
		super.SetVerticalPosition(y);
1526
	}
1527
	SetRightLabel(text) {
1528
		return this;
1529
	}
1530
	SetRightBadge(badge) {
1531
		return this;
1532
	}
1533
	Draw() {
1534
		super.Draw();
1535
		const offset = this._currentOffset;
1536
		this._itemText.ColorMod = this.Enabled ? (this.Selected ? this.HighlightedForeColor : this.ForeColor) : new ColorMod(163, 159, 148);
1537
		this._itemText.Caption = this.PreCaptionText + this._selectedValue + this.PostCaptionText;
1538
		this._arrowLeft.ColorMod = this.Enabled ? (this.Selected ? this.HighlightedForeColor : this.ForeColor) : new ColorMod(163, 159, 148);
1539
		this._arrowRight.ColorMod = this.Enabled ? (this.Selected ? this.HighlightedForeColor : this.ForeColor) : new ColorMod(163, 159, 148);
1540
		this._arrowLeft.Pos = new PointMod(380 - offset + this.Offset.X + this.Parent.WidthOffset, this._arrowLeft.Pos.Y);
1541
		if (this.Selected) {
1542
			this._arrowLeft.Draw();
1543
			this._arrowRight.Draw();
1544
			this._itemText.Pos = new PointMod(405 + this.Offset.X + this.Parent.WidthOffset, this._itemText.Pos.Y);
1545
		} else {
1546
			this._itemText.Pos = new PointMod(420 + this.Offset.X + this.Parent.WidthOffset, this._itemText.Pos.Y);
1547
		}
1548
		this._itemText.Draw();
1549
	}
1550
}
1551
1552
class UIMenuSliderItemMod extends UIMenuItemMod {
1553
	constructor(text, items, index, description = '', divider = false, data = null) {
1554
		super(text, description, data);
1555
		const y = 0;
1556
		this._items = items;
1557
		this._arrowLeft = new SpriteMod('commonmenutu', 'arrowleft', new PointMod(0, 105 + y), new SizeMod(15, 15));
1558
		this._arrowRight = new SpriteMod('commonmenutu', 'arrowright', new PointMod(0, 105 + y), new SizeMod(15, 15));
1559
		this._rectangleBackground = new ResRectangleMod(new PointMod(0, 0), new SizeMod(150, 9), new ColorMod(4, 32, 57, 255));
1560
		this._rectangleSlider = new ResRectangleMod(new PointMod(0, 0), new SizeMod(75, 9), new ColorMod(57, 116, 200, 255));
1561
		if (divider) {
1562
			this._rectangleDivider = new ResRectangleMod(new PointMod(0, 0), new SizeMod(2.5, 20), ColorMod.WhiteSmoke);
1563
		} else {
1564
			this._rectangleDivider = new ResRectangleMod(new PointMod(0, 0), new SizeMod(2.5, 20), ColorMod.Transparent);
1565
		}
1566
		this.Index = index;
1567
	}
1568
	get Index() {
1569
		return this._index % this._items.length;
1570
	}
1571
	set Index(value) {
1572
		this._index = 100000000 - (100000000 % this._items.length) + value;
1573
	}
1574
	SetVerticalPosition(y) {
1575
		this._rectangleBackground.Pos = new PointMod(250 + this.Offset.X + this.Parent.WidthOffset, y + 158.5 + this.Offset.Y);
1576
		this._rectangleSlider.Pos = new PointMod(250 + this.Offset.X + this.Parent.WidthOffset, y + 158.5 + this.Offset.Y);
1577
		this._rectangleDivider.Pos = new PointMod(323.5 + this.Offset.X + this.Parent.WidthOffset, y + 153 + this.Offset.Y);
1578
		this._arrowLeft.Pos = new PointMod(235 + this.Offset.X + this.Parent.WidthOffset, 155.5 + y + this.Offset.Y);
1579
		this._arrowRight.Pos = new PointMod(400 + this.Offset.X + this.Parent.WidthOffset, 155.5 + y + this.Offset.Y);
1580
		super.SetVerticalPosition(y);
1581
	}
1582
	IndexToItem(index) {
1583
		return this._items[index];
1584
	}
1585
	Draw() {
1586
		super.Draw();
1587
		this._arrowLeft.ColorMod = this.Enabled ? (this.Selected ? ColorMod.Black : ColorMod.WhiteSmoke) : new ColorMod(163, 159, 148);
1588
		this._arrowRight.ColorMod = this.Enabled ? (this.Selected ? ColorMod.Black : ColorMod.WhiteSmoke) : new ColorMod(163, 159, 148);
1589
		let offset = ((this._rectangleBackground.SizeMod.Width - this._rectangleSlider.SizeMod.Width) / (this._items.length - 1)) * this.Index;
1590
		this._rectangleSlider.Pos = new PointMod(250 + this.Offset.X + offset + +this.Parent.WidthOffset, this._rectangleSlider.Pos.Y);
1591
		if (this.Selected) {
1592
			this._arrowLeft.Draw();
1593
			this._arrowRight.Draw();
1594
		}
1595
		this._rectangleBackground.Draw();
1596
		this._rectangleSlider.Draw();
1597
		this._rectangleDivider.Draw();
1598
	}
1599
	SetRightBadge(badge) {}
1600
	SetRightLabel(text) {}
1601
}
1602
1603
class ContainerMod extends RectangleMod {
1604
	constructor(pos, size, color) {
1605
		super(pos, size, color);
1606
		this.Items = [];
1607
	}
1608
	addItem(item) {
1609
		this.Items.push(item);
1610
	}
1611
	Draw(offset) {
1612
		if (!this.Enabled) return;
1613
		offset = offset || new SizeMod();
1614
		const screenw = ScreenMod.Width;
1615
		const screenh = ScreenMod.Height;
1616
		const height = 1080.0;
1617
		const ratio = screenw / screenh;
1618
		const width = height * ratio;
1619
		const w = this.SizeMod.Width / width;
1620
		const h = this.SizeMod.Height / height;
1621
		const x = (this.Pos.X + offset.Width) / width + w * 0.5;
1622
		const y = (this.Pos.Y + offset.Height) / height + h * 0.5;
1623
		gecilada.drawRect(x, y, w, h, this.ColorMod.R, this.ColorMod.G, this.ColorMod.B, this.ColorMod.A, false);
1624
		for (var item of this.Items) item.Draw(new SizeMod(this.Pos.X + offset.Width, this.Pos.Y + offset.Height));
1625
	}
1626
}
1627
1628
class CommonMod {
1629
	static PlaySound(audioName, audioRef) {
1630
		gecilada.playSound(-1, audioName, audioRef, false, 0, true);
1631
	}
1632
}
1633
1634
class LiteEventMod {
1635
	constructor() {
1636
		this.handlers = [];
1637
	}
1638
	on(handler) {
1639
		this.handlers.push(handler);
1640
	}
1641
	off(handler) {
1642
		this.handlers = this.handlers.filter((h) => h !== handler);
1643
	}
1644
	emit(...args) {
1645
		this.handlers.slice(0).forEach((h) => h(...args));
1646
	}
1647
	expose() {
1648
		return this;
1649
	}
1650
	count() {
1651
		return this.handlers.length;
1652
	}
1653
}
1654
1655
class InstructionalButtonMod {
1656
	constructor(text, control, buttonString = null) {
1657
		this._itemBind = null;
1658
		this.TextMod = text;
1659
		this._buttonControl = control;
1660
		this._usingControls = buttonString == null;
1661
		this._buttonString = buttonString;
1662
	}
1663
	get ItemBind() {
1664
		return this._itemBind;
1665
	}
1666
	BindToItem(item) {
1667
		this._itemBind = item;
1668
	}
1669
	GetButtonId() {
1670
		return this._usingControls ? gecilada.getControlInstructionalButton(2, this._buttonControl, false) : 't_' + this._buttonString;
1671
	}
1672
}
1673
1674
class ScaleformMod {
1675
	constructor(scaleForm) {
1676
		this._handle = 0;
1677
		this.scaleForm = scaleForm;
1678
		this._handle = gecilada.requestScaleformMovie(this.scaleForm);
1679
	}
1680
	get handle() {
1681
		return this._handle;
1682
	}
1683
	get isValid() {
1684
		return this._handle != 0;
1685
	}
1686
	get isLoaded() {
1687
		return gecilada.hasScaleformMovieLoaded(this._handle);
1688
	}
1689
	callFunctionHead(funcName, ...args) {
1690
		if (!this.isValid || !this.isLoaded) return;
1691
		gecilada.beginScaleformMovieMethod(this._handle, funcName);
1692
		args.forEach((arg) => {
1693
			switch (typeof arg) {
1694
				case 'number': {
1695
					if (Number(arg) === arg && arg % 1 !== 0) {
1696
						gecilada.scaleformMovieMethodAddParamFloat(arg);
1697
					} else {
1698
						gecilada.scaleformMovieMethodAddParamInt(arg);
1699
					}
1700
				}
1701
				case 'string': {
1702
					gecilada.scaleformMovieMethodAddParamPlayerNameString(arg);
1703
					break;
1704
				}
1705
				case 'boolean': {
1706
					gecilada.scaleformMovieMethodAddParamBool(arg);
1707
					break;
1708
				}
1709
				default: {
1710
					shitfuck.logError(`Unknown argument type ${typeof arg} = ${arg.toString()} passed to scaleform with handle ${this._handle}`);
1711
				}
1712
			}
1713
		});
1714
	}
1715
	callFunction(funcName, ...args) {
1716
		this.callFunctionHead(funcName, ...args);
1717
		gecilada.endScaleformMovieMethod();
1718
	}
1719
	callFunctionReturn(funcName, ...args) {
1720
		this.callFunctionHead(funcName, ...args);
1721
		return gecilada.endScaleformMovieMethodReturnValue();
1722
	}
1723
	render2D() {
1724
		if (!this.isValid || !this.isLoaded) return;
1725
		gecilada.drawScaleformMovieFullscreen(this._handle, 255, 255, 255, 255, 0);
1726
	}
1727
	recreate() {
1728
		if (!this.isValid || !this.isLoaded) return;
1729
		gecilada.setScaleformMovieAsNoLongerNeeded(this._handle);
1730
		this._handle = gecilada.requestScaleformMovie(this.scaleForm);
1731
	}
1732
	destroy() {
1733
		if (!this.isValid) return;
1734
		gecilada.setScaleformMovieAsNoLongerNeeded(this._handle);
1735
		this._handle = 0;
1736
	}
1737
}
1738
1739
class MessageMod {
1740
	static Initialize(scaleForm, transitionOutAnimName) {
1741
		this._transitionOutAnimName = transitionOutAnimName;
1742
		this._scaleform = new ScaleformMod(scaleForm);
1743
	}
1744
	static get IsVisible() {
1745
		return this._messageVisible;
1746
	}
1747
	static get ScaleformMod() {
1748
		return this._scaleform;
1749
	}
1750
	static Load() {
1751
		if (this._delayedTransitionInTimeout != null) {
1752
			shitfuck.clearTimeout(this._delayedTransitionInTimeout);
1753
			this._delayedTransitionInTimeout = null;
1754
		}
1755
	}
1756
	static SetDelayedTransition(messageHandler, time) {
1757
		this._delayedTransitionInTimeout = shitfuck.setTimeout(() => {
1758
			this._delayedTransitionInTimeout = null;
1759
			this.TransitionIn(messageHandler, time);
1760
		}, this._transitionOutTimeMs);
1761
	}
1762
	static ShowCustomShard(funcName, time = 5000, ...funcArgs) {
1763
		this.ShowComplexCustomShard(() => {
1764
			this._scaleform.callFunction(funcName, ...funcArgs);
1765
		}, time);
1766
	}
1767
	static ShowComplexCustomShard(messageHandler, time = 5000) {
1768
		this.Load();
1769
		if (this._messageVisible) {
1770
			this.TransitionOut();
1771
			this.SetDelayedTransition(() => messageHandler(), time);
1772
		} else {
1773
			this.TransitionIn(messageHandler, time);
1774
		}
1775
	}
1776
	static TransitionOut() {
1777
		if (!this._messageVisible) return;
1778
		if (this._transitionOutTimeout != null) {
1779
			shitfuck.clearTimeout(this._transitionOutTimeout);
1780
			this._transitionOutTimeout = null;
1781
		}
1782
		if (this._transitionOutFinishedTimeout != null) {
1783
			shitfuck.clearTimeout(this._transitionOutFinishedTimeout);
1784
			this._transitionOutFinishedTimeout = null;
1785
		}
1786
		this._scaleform.callFunction(this._transitionOutAnimName);
1787
		this._transitionOutFinishedTimeout = shitfuck.setTimeout(() => {
1788
			this._messageVisible = false;
1789
			this._scaleform.recreate();
1790
		}, this._transitionOutTimeMs);
1791
	}
1792
	static TransitionIn(messageHandler, transitionOutTime = 500) {
1793
		this._messageVisible = true;
1794
		messageHandler();
1795
		this.SetTransitionOutTimer(transitionOutTime);
1796
	}
1797
	static SetTransitionOutTimer(time) {
1798
		this._transitionOutTimeout = shitfuck.setTimeout(() => {
1799
			this._transitionOutTimeout = null;
1800
			this.TransitionOut();
1801
		}, time);
1802
	}
1803
	static Render() {
1804
		if (this._messageVisible) {
1805
			this._scaleform.render2D();
1806
		}
1807
	}
1808
}
1809
MessageMod._messageVisible = false;
1810
MessageMod._transitionOutTimeout = null;
1811
MessageMod._transitionOutFinishedTimeout = null;
1812
MessageMod._delayedTransitionInTimeout = null;
1813
MessageMod._scaleform = null;
1814
MessageMod._transitionOutTimeMs = 500;
1815
MessageMod._transitionOutAnimName = null;
1816
1817
class BigMessageMod extends MessageMod {
1818
	static Initialize(scaleForm, transitionOutAnimName) {
1819
		super.Initialize(scaleForm, transitionOutAnimName);
1820
		shitfuck.everyTick(() => this.Render());
1821
	}
1822
	static ShowMissionPassedMessage(msg, subtitle = '', time = 5000) {
1823
		this.ShowCustomShard('SHOW_MISSION_PASSED_MESSAGE', time, msg, subtitle, 100, true, 0, true);
1824
	}
1825
	static ShowColoredShard(msg, desc, textColor, bgColor, time = 5000) {
1826
		this.ShowCustomShard('SHOW_SHARD_CENTERED_MP_MESSAGE', time, msg, desc, bgColor, textColor);
1827
	}
1828
	static ShowOldMessage(msg, time = 5000) {
1829
		this.ShowCustomShard('SHOW_MISSION_PASSED_MESSAGE', time, msg);
1830
	}
1831
	static ShowSimpleShard(title, subtitle = '', time = 5000) {
1832
		this.ShowCustomShard('SHOW_SHARD_CREW_RANKUP_MP_MESSAGE', time, title, subtitle);
1833
	}
1834
	static ShowRankupMessage(msg, subtitle, rank, time = 5000) {
1835
		this.ShowCustomShard('SHOW_BIG_MP_MESSAGE', time, msg, subtitle, rank, '', '');
1836
	}
1837
	static ShowPlaneMessage(title, planeName, planeHash, time = 5000) {
1838
		this.ShowCustomShard('SHOW_PLANE_MESSAGE', time, title, planeName, planeHash, '', '');
1839
	}
1840
	static ShowWeaponPurchasedMessage(bigMessage, weaponName, weaponHash, time = 5000) {
1841
		this.ShowCustomShard('SHOW_WEAPON_PURCHASED', time, bigMessage, weaponName, weaponHash, '', 100);
1842
	}
1843
	static ShowWastedMessage(title, message, color, darkenBackground, time = 5000) {
1844
		this.ShowCustomShard('SHOW_SHARD_WASTED_MP_MESSAGE', time, title, message, color, darkenBackground);
1845
	}
1846
	static ShowMpMessageLarge(msg, subtitle = '', time = 5000) {
1847
		this.ShowComplexCustomShard(() => {
1848
			this.ScaleformMod.callFunction('SHOW_CENTERED_MP_MESSAGE_LARGE', msg, subtitle, 100, true, 100);
1849
			this.ScaleformMod.callFunction('TRANSITION_IN');
1850
		}, time);
1851
	}
1852
}
1853
BigMessageMod.Initialize('MP_BIG_MESSAGE_FREEMODE', 'TRANSITION_OUT');
1854
1855
class MidsizedMessageMod extends MessageMod {
1856
	static Initialize(scaleForm, transitionOutAnimName) {
1857
		super.Initialize(scaleForm, transitionOutAnimName);
1858
		shitfuck.everyTick(() => this.Render());
1859
	}
1860
	static ShowMidsizedMessage(title, message = '', time = 5000) {
1861
		this.ShowCustomShard('SHOW_MIDSIZED_MESSAGE', time, title, message);
1862
	}
1863
	static ShowBridgesKnivesProgress(title, totalToDo, message, info, completed, time = 5000) {
1864
		this.ShowCustomShard('SHOW_BRIDGES_KNIVES_PROGRESS', time, title, totalToDo, message, info, completed);
1865
	}
1866
	static ShowCondensedShardMessage(title, message, bgColor, useDarkerShard, time = 5000) {
1867
		this.ShowCustomShard('SHOW_COND_SHARD_MESSAGE', time, title, message, bgColor, useDarkerShard);
1868
	}
1869
	static ShowMidsizedShardMessage(title, message, bgColor, useDarkerShard, useCondensedShard, time = 5000) {
1870
		this.ShowCustomShard('SHOW_SHARD_MIDSIZED_MESSAGE', time, title, message, bgColor, useDarkerShard, useCondensedShard);
1871
	}
1872
}
1873
MidsizedMessageMod.Initialize('MIDSIZED_MESSAGE', 'SHARD_ANIM_OUT');
1874
1875
class UIMenuDynamicListItemMod extends UIMenuItemMod {
1876
	constructor(text, selectionChangeHandler, description = '', selectedStartValueHandler = null, data = null) {
1877
		super(text, description, data);
1878
		this._currentOffset = 0;
1879
		this._precaptionText = '';
1880
		this._selectedStartValueHandler = null;
1881
		this.SelectionChangeHandler = null;
1882
		if (!this.isVariableFunction(selectionChangeHandler)) {
1883
			shitfuck.logError(
1884
				`[UIMenuDynamicListItemMod] ${text} is not created with a valid selectionChangeHandler, needs to be function. Please see docs.`
1885
			);
1886
		}
1887
		if (!this.isVariableFunction(selectedStartValueHandler)) {
1888
			shitfuck.logError(
1889
				`[UIMenuDynamicListItemMod] ${text} is not created with a valid selectedStartValueHandler, needs to be function. Please see docs.`
1890
			);
1891
		}
1892
		this.SelectionChangeHandler = selectionChangeHandler;
1893
		this._selectedStartValueHandler = selectedStartValueHandler;
1894
		let y = 0;
1895
		this._arrowLeft = new SpriteMod('commonmenu', 'arrowleft', new PointMod(110, 105 + y), new SizeMod(30, 30));
1896
		this._arrowRight = new SpriteMod('commonmenu', 'arrowright', new PointMod(280, 105 + y), new SizeMod(30, 30));
1897
		this._itemText = new ResTextMod('', new PointMod(290, y + 104), 0.35, ColorMod.White, Font$1.ChaletLondon, Alignment$1.Right);
1898
	}
1899
	SelectionChangeHandlerPromise(item, selectedValue, changeDirection) {
1900
		return new Promise((resolve, reject) => {
1901
			let newSelectedValue = this.SelectionChangeHandler(item, selectedValue, changeDirection);
1902
			resolve(newSelectedValue);
1903
		});
1904
	}
1905
	get PreCaptionText() {
1906
		return this._precaptionText;
1907
	}
1908
	set PreCaptionText(text) {
1909
		if (!text) throw new Error("The pre caption text can't be null");
1910
		if (typeof text !== 'string') throw new Error('The pre caption text must be a string');
1911
		this._precaptionText = text;
1912
		this._currentOffset = ScreenMod.GetTextWidth(
1913
			this.PreCaptionText + this._selectedValue,
1914
			this._itemText && this._itemText.Font ? this._itemText.Font : 0,
1915
			0.35
1916
		);
1917
	}
1918
	get SelectedValue() {
1919
		return this._selectedValue;
1920
	}
1921
	set SelectedValue(value) {
1922
		this._selectedValue = value;
1923
		if (value == undefined) return;
1924
		this._currentOffset = ScreenMod.GetTextWidth(
1925
			this.PreCaptionText + this._selectedValue,
1926
			this._itemText && this._itemText.Font ? this._itemText.Font : 0,
1927
			this._itemText && this._itemText.Scale ? this._itemText.Scale : 0.35
1928
		);
1929
	}
1930
	SetVerticalPosition(y) {
1931
		this._arrowLeft.Pos = new PointMod(300 + this.Offset.X + this.Parent.WidthOffset, 147 + y + this.Offset.Y);
1932
		this._arrowRight.Pos = new PointMod(400 + this.Offset.X + this.Parent.WidthOffset, 147 + y + this.Offset.Y);
1933
		this._itemText.Pos = new PointMod(300 + this.Offset.X + this.Parent.WidthOffset, y + 147 + this.Offset.Y);
1934
		super.SetVerticalPosition(y);
1935
	}
1936
	SetRightLabel(text) {
1937
		return this;
1938
	}
1939
	SetRightBadge(badge) {
1940
		return this;
1941
	}
1942
	Draw() {
1943
		super.Draw();
1944
		if (this._selectedValue == undefined) {
1945
			if (this._selectedStartValueHandler != null) {
1946
				this.SelectedValue = this._selectedStartValueHandler();
1947
			} else {
1948
				this._selectedValue = '';
1949
			}
1950
		}
1951
		const offset = this._currentOffset;
1952
		this._itemText.ColorMod = this.Enabled ? (this.Selected ? this.HighlightedForeColor : this.ForeColor) : new ColorMod(163, 159, 148);
1953
		this._itemText.Caption = this.PreCaptionText + this._selectedValue;
1954
		this._arrowLeft.ColorMod = this.Enabled ? (this.Selected ? this.HighlightedForeColor : this.ForeColor) : new ColorMod(163, 159, 148);
1955
		this._arrowRight.ColorMod = this.Enabled ? (this.Selected ? this.HighlightedForeColor : this.ForeColor) : new ColorMod(163, 159, 148);
1956
		this._arrowLeft.Pos = new PointMod(380 - offset + this.Offset.X + this.Parent.WidthOffset, this._arrowLeft.Pos.Y);
1957
		if (this.Selected) {
1958
			this._arrowLeft.Draw();
1959
			this._arrowRight.Draw();
1960
			this._itemText.Pos = new PointMod(405 + this.Offset.X + this.Parent.WidthOffset, this._itemText.Pos.Y);
1961
		} else {
1962
			this._itemText.Pos = new PointMod(420 + this.Offset.X + this.Parent.WidthOffset, this._itemText.Pos.Y);
1963
		}
1964
		this._itemText.Draw();
1965
	}
1966
	isVariableFunction(functionToCheck) {
1967
		return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';
1968
	}
1969
}
1970
1971
let menuPool = [];
1972
class NativeUIMod {
1973
	constructor(title, subtitle, offset, spriteLibrary, spriteName) {
1974
		this._visible = true;
1975
		this._counterPretext = '';
1976
		this._counterOverride = undefined;
1977
		this._lastUpDownNavigation = 0;
1978
		this._lastLeftRightNavigation = 0;
1979
		this._extraOffset = 0;
1980
		this._buttonsEnabled = true;
1981
		this._justOpened = true;
1982
		this._justOpenedFromPool = false;
1983
		this._justClosedFromPool = false;
1984
		this._poolOpening = null;
1985
		this._safezoneOffset = new PointMod(0, 0);
1986
		this._activeItem = 1000;
1987
		this._maxItemsOnScreen = 9;
1988
		this._maxItem = this._maxItemsOnScreen;
1989
		this._mouseEdgeEnabled = true;
1990
		this._bannerSprite = null;
1991
		this._bannerRectangle = null;
1992
		this._recalculateDescriptionNextFrame = 1;
1993
		this._instructionalButtons = [];
1994
		this._defaultTitleScale = 1.15;
1995
		this._maxMenuItems = 1000;
1996
		this.Id = UUIDV4();
1997
		this.SelectTextLocalized = shitfuck.getGxtText('HUD_INPUT2');
1998
		this.BackTextLocalized = shitfuck.getGxtText('HUD_INPUT3');
1999
		this.WidthOffset = 0;
2000
		this.ParentMenu = null;
2001
		this.ParentItem = null;
2002
		this.MouseControlsEnabled = false;
2003
		this.CloseableByUser = true;
2004
		this.AUDIO_LIBRARY = 'HUD_FRONTEND_DEFAULT_SOUNDSET';
2005
		this.AUDIO_UPDOWN = 'NAV_UP_DOWN';
2006
		this.AUDIO_LEFTRIGHT = 'NAV_LEFT_RIGHT';
2007
		this.AUDIO_SELECT = 'SELECT';
2008
		this.AUDIO_BACK = 'BACK';
2009
		this.AUDIO_ERROR = 'ERROR';
2010
		this.MenuItems = [];
2011
		this.IndexChange = new LiteEventMod();
2012
		this.ListChange = new LiteEventMod();
2013
		this.AutoListChange = new LiteEventMod();
2014
		this.DynamicListChange = new LiteEventMod();
2015
		this.SliderChange = new LiteEventMod();
2016
		this.CheckboxChange = new LiteEventMod();
2017
		this.ItemSelect = new LiteEventMod();
2018
		this.MenuOpen = new LiteEventMod();
2019
		this.MenuClose = new LiteEventMod();
2020
		this.MenuChange = new LiteEventMod();
2021
		if (!(offset instanceof PointMod)) offset = PointMod.Parse(offset);
2022
		this._spriteLibrary = spriteLibrary || 'commonmenu';
2023
		this._spriteName = spriteName || 'interaction_bgd';
2024
		this._offset = new PointMod(offset.X, offset.Y);
2025
		this.Children = new Map();
2026
		this._instructionalButtonsScaleform = new ScaleformMod('instructional_buttons');
2027
		this.UpdateScaleform();
2028
		this._mainMenu = new ContainerMod(new PointMod(0, 0), new SizeMod(700, 500), new ColorMod(0, 0, 0, 0));
2029
		this._bannerSprite = new SpriteMod(this._spriteLibrary, this._spriteName, new PointMod(0 + this._offset.X, 0 + this._offset.Y), new SizeMod(431, 107));
2030
		this._mainMenu.addItem(
2031
			(this._titleResText = new ResTextMod(
2032
				title,
2033
				new PointMod(215 + this._offset.X, 20 + this._offset.Y),
2034
				this._defaultTitleScale,
2035
				new ColorMod(255, 255, 255),
2036
				1,
2037
				Alignment$1.Centered
2038
			))
2039
		);
2040
		if (subtitle !== '') {
2041
			this._mainMenu.addItem(new ResRectangleMod(new PointMod(0 + this._offset.X, 107 + this._offset.Y), new SizeMod(431, 37), new ColorMod(0, 0, 0, 255)));
2042
			this._mainMenu.addItem(
2043
				(this._subtitleResText = new ResTextMod(
2044
					subtitle,
2045
					new PointMod(8 + this._offset.X, 110 + this._offset.Y),
2046
					0.35,
2047
					new ColorMod(255, 255, 255),
2048
					0,
2049
					Alignment$1.Left
2050
				))
2051
			);
2052
			if (subtitle.startsWith('~')) {
2053
				this._counterPretext = subtitle.substr(0, 3);
2054
			}
2055
			this._counterText = new ResTextMod(
2056
				'',
2057
				new PointMod(425 + this._offset.X, 110 + this._offset.Y),
2058
				0.35,
2059
				new ColorMod(255, 255, 255),
2060
				0,
2061
				Alignment$1.Right
2062
			);
2063
			this._extraOffset += 37;
2064
		}
2065
		this._upAndDownSprite = new SpriteMod(
2066
			'commonmenu',
2067
			'shop_arrows_upanddown',
2068
			new PointMod(190 + this._offset.X, 147 + 37 * (this._maxItemsOnScreen + 1) + this._offset.Y - 37 + this._extraOffset),
2069
			new SizeMod(50, 50)
2070
		);
2071
		this._extraRectangleUp = new ResRectangleMod(
2072
			new PointMod(0 + this._offset.X, 144 + 38 * (this._maxItemsOnScreen + 1) + this._offset.Y - 37 + this._extraOffset),
2073
			new SizeMod(431, 18),
2074
			new ColorMod(0, 0, 0, 200)
2075
		);
2076
		this._extraRectangleDown = new ResRectangleMod(
2077
			new PointMod(0 + this._offset.X, 144 + 18 + 38 * (this._maxItemsOnScreen + 1) + this._offset.Y - 37 + this._extraOffset),
2078
			new SizeMod(431, 18),
2079
			new ColorMod(0, 0, 0, 200)
2080
		);
2081
		this._descriptionBar = new ResRectangleMod(new PointMod(this._offset.X, 123), new SizeMod(431, 4), ColorMod.Black);
2082
		this._descriptionRectangle = new SpriteMod('commonmenu', 'gradient_bgd', new PointMod(this._offset.X, 127), new SizeMod(431, 30));
2083
		this._descriptionText = new ResTextMod(
2084
			'',
2085
			new PointMod(this._offset.X + 5, 125),
2086
			0.35,
2087
			new ColorMod(255, 255, 255, 255),
2088
			Font$1.ChaletLondon,
2089
			Alignment$1.Left
2090
		);
2091
		this._descriptionText.Wrap = 400;
2092
		this._background = new SpriteMod(
2093
			'commonmenu',
2094
			'gradient_bgd',
2095
			new PointMod(this._offset.X, 144 + this._offset.Y - 37 + this._extraOffset),
2096
			new SizeMod(290, 25)
2097
		);
2098
		this._visible = false;
2099
		shitfuck.everyTick(this.render.bind(this));
2100
	}
2101
	GetSpriteBanner() {
2102
		return this._bannerSprite;
2103
	}
2104
	GetRectangleBanner() {
2105
		return this._bannerRectangle;
2106
	}
2107
	GetTitle() {
2108
		return this._titleResText;
2109
	}
2110
	get MaxItemsVisible() {
2111
		return this._maxItemsOnScreen;
2112
	}
2113
	set MaxItemsVisible(value) {
2114
		this._maxItemsOnScreen = value;
2115
		this._maxItem = value;
2116
	}
2117
	get Title() {
2118
		return this._titleResText.Caption;
2119
	}
2120
	set Title(text) {
2121
		this._titleResText.Caption = text;
2122
	}
2123
	get GetSubTitle() {
2124
		return this._titleResText;
2125
	}
2126
	get SubTitle() {
2127
		return this._titleResText.Caption;
2128
	}
2129
	set SubTitle(text) {
2130
		this._subtitleResText.Caption = text;
2131
	}
2132
	get Visible() {
2133
		return this._visible;
2134
	}
2135
	set Visible(toggle) {
2136
		this._visible = toggle;
2137
		CommonMod.PlaySound(this.AUDIO_BACK, this.AUDIO_LIBRARY);
2138
		this.UpdateScaleform();
2139
		if (toggle) {
2140
			this.UpdateDescriptionCaption();
2141
		}
2142
		if (this._justOpenedFromPool === true) {
2143
			this._justOpenedFromPool = false;
2144
			return;
2145
		}
2146
		if (toggle) {
2147
			this._justOpened = true;
2148
			this.MenuOpen.emit();
2149
			if (this.ParentMenu === null) {
2150
				if (!menuPool.includes(this) && this !== this._poolOpening) {
2151
					const previousMenu = menuPool.length ? menuPool[menuPool.length - 1] : null;
2152
					menuPool.push(this);
2153
					if (previousMenu !== this._poolOpening && previousMenu !== null) {
2154
						previousMenu._justClosedFromPool = true;
2155
						previousMenu.Visible = false;
2156
					}
2157
				}
2158
			}
2159
		} else {
2160
			if (this._justClosedFromPool === true) {
2161
				this._justClosedFromPool = false;
2162
				return;
2163
			}
2164
			if (this.ParentMenu === null && menuPool.includes(this) && menuPool.length) {
2165
				if (menuPool[menuPool.length - 1] === this) {
2166
					menuPool.pop();
2167
					this._justOpenedFromPool = true;
2168
					if (!menuPool.length) {
2169
						this._poolOpening = null;
2170
					}
2171
				}
2172
				if (menuPool.length) {
2173
					this._poolOpening = menuPool[menuPool.length - 1];
2174
					menuPool[menuPool.length - 1].Visible = true;
2175
				}
2176
			}
2177
			if (menuPool.length === 0) {
2178
				gecilada.setMouseCursorSprite(1);
2179
			}
2180
		}
2181
	}
2182
	get CurrentSelection() {
2183
		return this._activeItem % this.MenuItems.length;
2184
	}
2185
	set CurrentSelection(v) {
2186
		this.MenuItems[this._activeItem % this.MenuItems.length].Selected = false;
2187
		this._activeItem = this._maxMenuItems - (this._maxMenuItems % this.MenuItems.length) + v;
2188
		if (this.CurrentSelection > this._maxItem) {
2189
			this._maxItem = this.CurrentSelection;
2190
			this._minItem = this.CurrentSelection - this._maxItemsOnScreen;
2191
		} else if (this.CurrentSelection < this._minItem) {
2192
			this._maxItem = this._maxItemsOnScreen + this.CurrentSelection;
2193
			this._minItem = this.CurrentSelection;
2194
		}
2195
		this.IndexChange.emit(this.CurrentSelection, this.MenuItems[this._activeItem % this.MenuItems.length]);
2196
		this.UpdateDescriptionCaption();
2197
	}
2198
	DisableInstructionalButtons(disable) {
2199
		this._buttonsEnabled = !disable;
2200
	}
2201
	AddInstructionalButton(button) {
2202
		this._instructionalButtons.push(button);
2203
	}
2204
	SetSpriteBannerType(spriteBanner) {
2205
		this._bannerRectangle = null;
2206
		this.AddSpriteBannerType(spriteBanner);
2207
	}
2208
	SetRectangleBannerType(rectangle) {
2209
		this._bannerSprite = null;
2210
		this._bannerRectangle = rectangle;
2211
		this._bannerRectangle.Pos = new PointMod(this._offset.X, this._offset.Y);
2212
		this._bannerRectangle.SizeMod = new SizeMod(431 + this.WidthOffset, 107);
2213
	}
2214
	AddSpriteBannerType(spriteBanner) {
2215
		this._bannerSprite = spriteBanner;
2216
		this._bannerSprite.SizeMod = new SizeMod(431 + this.WidthOffset, 107);
2217
		this._bannerSprite.Pos = new PointMod(this._offset.X, this._offset.Y);
2218
	}
2219
	SetNoBannerType() {
2220
		this._bannerSprite = null;
2221
		this._bannerRectangle = new ResRectangleMod(
2222
			new PointMod(this._offset.X, this._offset.Y),
2223
			new SizeMod(431 + this.WidthOffset, 107),
2224
			new ColorMod(0, 0, 0, 0)
2225
		);
2226
	}
2227
	RemoveInstructionalButton(button) {
2228
		for (let i = 0; i < this._instructionalButtons.length; i++) {
2229
			if (this._instructionalButtons[i] === button) {
2230
				this._instructionalButtons.splice(i, 1);
2231
			}
2232
		}
2233
	}
2234
	RecalculateDescriptionPosition() {
2235
		const count = this.MenuItems.length > this._maxItemsOnScreen + 1 ? this._maxItemsOnScreen + 2 : this.MenuItems.length;
2236
		this._descriptionBar.SizeMod = new SizeMod(431 + this.WidthOffset, 4);
2237
		this._descriptionRectangle.SizeMod = new SizeMod(431 + this.WidthOffset, 30);
2238
		this._descriptionBar.Pos = new PointMod(this._offset.X, 149 - 37 + this._extraOffset + this._offset.Y);
2239
		this._descriptionRectangle.Pos = new PointMod(this._offset.X, 149 - 37 + this._extraOffset + this._offset.Y);
2240
		this._descriptionText.Pos = new PointMod(this._offset.X + 8, 155 - 37 + this._extraOffset + this._offset.Y);
2241
		this._descriptionBar.Pos = new PointMod(this._offset.X, 38 * count + this._descriptionBar.Pos.Y);
2242
		this._descriptionRectangle.Pos = new PointMod(this._offset.X, 38 * count + this._descriptionRectangle.Pos.Y);
2243
		this._descriptionText.Pos = new PointMod(this._offset.X + 8, 38 * count + this._descriptionText.Pos.Y);
2244
	}
2245
	SetMenuWidthOffset(widthOffset) {
2246
		this.WidthOffset = widthOffset;
2247
		if (this._bannerSprite != null) {
2248
			this._bannerSprite.SizeMod = new SizeMod(431 + this.WidthOffset, 107);
2249
		}
2250
		this._mainMenu.Items[0].pos = new PointMod((this.WidthOffset + this._offset.X + 431) / 2, 20 + this._offset.Y);
2251
		if (this._counterText) {
2252
			this._counterText.Pos = new PointMod(425 + this._offset.X + widthOffset, 110 + this._offset.Y);
2253
		}
2254
		if (this._mainMenu.Items.length >= 2) {
2255
			const tmp = this._mainMenu.Items[1];
2256
			tmp.size = new SizeMod(431 + this.WidthOffset, 37);
2257
		}
2258
		if (this._bannerRectangle != null) {
2259
			this._bannerRectangle.SizeMod = new SizeMod(431 + this.WidthOffset, 107);
2260
		}
2261
	}
2262
	AddItem(item) {
2263
		if (this._justOpened) this._justOpened = false;
2264
		item.Offset = this._offset;
2265
		item.Parent = this;
2266
		item.SetVerticalPosition(this.MenuItems.length * 25 - 37 + this._extraOffset);
2267
		this.MenuItems.push(item);
2268
		this.RefreshIndex();
2269
	}
2270
	RemoveItem(item) {
2271
		for (let i = 0; i < this.MenuItems.length; i++) {
2272
			if (this.MenuItems[i] === item) {
2273
				this.MenuItems.splice(i, 1);
2274
				break;
2275
			}
2276
		}
2277
		this.RefreshIndex();
2278
	}
2279
	RefreshIndex() {
2280
		if (this.MenuItems.length == 0) {
2281
			this._activeItem = this._maxMenuItems;
2282
			this._maxItem = this._maxItemsOnScreen;
2283
			this._minItem = 0;
2284
			return;
2285
		}
2286
		for (let i = 0; i < this.MenuItems.length; i++) this.MenuItems[i].Selected = false;
2287
		this._activeItem = this._maxMenuItems - (this._maxMenuItems % this.MenuItems.length);
2288
		this._maxItem = this._maxItemsOnScreen;
2289
		this._minItem = 0;
2290
		if (this._visible) {
2291
			this.UpdateDescriptionCaption();
2292
		}
2293
	}
2294
	Clear() {
2295
		this.MenuItems = [];
2296
		this.RecalculateDescriptionPosition();
2297
	}
2298
	Open() {
2299
		this.Visible = true;
2300
	}
2301
	CleanUp(closeChildren = false) {
2302
		if (closeChildren) {
2303
			this.Children.forEach((m) => {
2304
				m.Close(true);
2305
			});
2306
		}
2307
		this.MenuItems.filter((menuItem) => menuItem instanceof UIMenuDynamicListItemMod).forEach((menuItem) => {
2308
			menuItem.SelectedValue = undefined;
2309
		});
2310
		this.RefreshIndex();
2311
	}
2312
	Close(closeChildren = false) {
2313
		this.Visible = false;
2314
		this.CleanUp(closeChildren);
2315
		this.MenuClose.emit(true);
2316
	}
2317
	GoLeft() {
2318
		if (
2319
			(!(this.MenuItems[this.CurrentSelection] instanceof UIMenuListItemMod) &&
2320
				!(this.MenuItems[this.CurrentSelection] instanceof UIMenuAutoListItemMod) &&
2321
				!(this.MenuItems[this.CurrentSelection] instanceof UIMenuDynamicListItemMod) &&
2322
				!(this.MenuItems[this.CurrentSelection] instanceof UIMenuSliderItemMod)) ||
2323
			!this.MenuItems[this.CurrentSelection].Enabled
2324
		)
2325
			return;
2326
		if (this.MenuItems[this.CurrentSelection] instanceof UIMenuListItemMod) {
2327
			const it = this.MenuItems[this.CurrentSelection];
2328
			if (it.Collection.length == 0) return;
2329
			it.Index--;
2330
			CommonMod.PlaySound(this.AUDIO_LEFTRIGHT, this.AUDIO_LIBRARY);
2331
			this.ListChange.emit(it, it.Index);
2332
			this.UpdateDescriptionCaption();
2333
		} else if (this.MenuItems[this.CurrentSelection] instanceof UIMenuAutoListItemMod) {
2334
			const it = this.MenuItems[this.CurrentSelection];
2335
			if (it.SelectedValue <= it.LowerThreshold) {
2336
				it.SelectedValue = it.UpperThreshold;
2337
			} else {
2338
				it.SelectedValue -= it.LeftMoveThreshold;
2339
			}
2340
			CommonMod.PlaySound(this.AUDIO_LEFTRIGHT, this.AUDIO_LIBRARY);
2341
			this.AutoListChange.emit(it, it.SelectedValue, ChangeDirection$1.Left);
2342
			this.UpdateDescriptionCaption();
2343
		} else if (this.MenuItems[this.CurrentSelection] instanceof UIMenuDynamicListItemMod) {
2344
			const it = this.MenuItems[this.CurrentSelection];
2345
			it.SelectionChangeHandlerPromise(it, it.SelectedValue, ChangeDirection$1.Left).then((newSelectedValue) => {
2346
				it.SelectedValue = newSelectedValue;
2347
				this.DynamicListChange.emit(it, it.SelectedValue, ChangeDirection$1.Left);
2348
			});
2349
			CommonMod.PlaySound(this.AUDIO_LEFTRIGHT, this.AUDIO_LIBRARY);
2350
			this.UpdateDescriptionCaption();
2351
		} else if (this.MenuItems[this.CurrentSelection] instanceof UIMenuSliderItemMod) {
2352
			const it = this.MenuItems[this.CurrentSelection];
2353
			it.Index = it.Index - 1;
2354
			CommonMod.PlaySound(this.AUDIO_LEFTRIGHT, this.AUDIO_LIBRARY);
2355
			this.SliderChange.emit(it, it.Index, it.IndexToItem(it.Index));
2356
			this.UpdateDescriptionCaption();
2357
		}
2358
	}
2359
	GoRight() {
2360
		if (
2361
			(!(this.MenuItems[this.CurrentSelection] instanceof UIMenuListItemMod) &&
2362
				!(this.MenuItems[this.CurrentSelection] instanceof UIMenuAutoListItemMod) &&
2363
				!(this.MenuItems[this.CurrentSelection] instanceof UIMenuDynamicListItemMod) &&
2364
				!(this.MenuItems[this.CurrentSelection] instanceof UIMenuSliderItemMod)) ||
2365
			!this.MenuItems[this.CurrentSelection].Enabled
2366
		)
2367
			return;
2368
		if (this.MenuItems[this.CurrentSelection] instanceof UIMenuListItemMod) {
2369
			const it = this.MenuItems[this.CurrentSelection];
2370
			if (it.Collection.length == 0) return;
2371
			it.Index++;
2372
			CommonMod.PlaySound(this.AUDIO_LEFTRIGHT, this.AUDIO_LIBRARY);
2373
			this.ListChange.emit(it, it.Index);
2374
			this.UpdateDescriptionCaption();
2375
		} else if (this.MenuItems[this.CurrentSelection] instanceof UIMenuAutoListItemMod) {
2376
			const it = this.MenuItems[this.CurrentSelection];
2377
			if (it.SelectedValue >= it.UpperThreshold) {
2378
				it.SelectedValue = it.LowerThreshold;
2379
			} else {
2380
				it.SelectedValue += it.RightMoveThreshold;
2381
			}
2382
			CommonMod.PlaySound(this.AUDIO_LEFTRIGHT, this.AUDIO_LIBRARY);
2383
			this.AutoListChange.emit(it, it.SelectedValue, ChangeDirection$1.Right);
2384
			this.UpdateDescriptionCaption();
2385
		} else if (this.MenuItems[this.CurrentSelection] instanceof UIMenuDynamicListItemMod) {
2386
			const it = this.MenuItems[this.CurrentSelection];
2387
			it.SelectionChangeHandlerPromise(it, it.SelectedValue, ChangeDirection$1.Right).then((newSelectedValue) => {
2388
				it.SelectedValue = newSelectedValue;
2389
				this.DynamicListChange.emit(it, it.SelectedValue, ChangeDirection$1.Right);
2390
			});
2391
			CommonMod.PlaySound(this.AUDIO_LEFTRIGHT, this.AUDIO_LIBRARY);
2392
			this.UpdateDescriptionCaption();
2393
		} else if (this.MenuItems[this.CurrentSelection] instanceof UIMenuSliderItemMod) {
2394
			const it = this.MenuItems[this.CurrentSelection];
2395
			it.Index++;
2396
			CommonMod.PlaySound(this.AUDIO_LEFTRIGHT, this.AUDIO_LIBRARY);
2397
			this.SliderChange.emit(it, it.Index, it.IndexToItem(it.Index));
2398
			this.UpdateDescriptionCaption();
2399
		}
2400
	}
2401
	SelectItem() {
2402
		if (!this.MenuItems[this.CurrentSelection].Enabled) {
2403
			CommonMod.PlaySound(this.AUDIO_ERROR, this.AUDIO_LIBRARY);
2404
			return;
2405
		}
2406
		const it = this.MenuItems[this.CurrentSelection];
2407
		if (this.MenuItems[this.CurrentSelection] instanceof UIMenuCheckboxItemMod) {
2408
			it.Checked = !it.Checked;
2409
			CommonMod.PlaySound(this.AUDIO_SELECT, this.AUDIO_LIBRARY);
2410
			this.CheckboxChange.emit(it, it.Checked);
2411
		} else {
2412
			CommonMod.PlaySound(this.AUDIO_SELECT, this.AUDIO_LIBRARY);
2413
			this.ItemSelect.emit(it, this.CurrentSelection);
2414
			if (this.Children.has(it.Id)) {
2415
				const subMenu = this.Children.get(it.Id);
2416
				this.Visible = false;
2417
				subMenu.Visible = true;
2418
				this.MenuChange.emit(subMenu, true);
2419
			}
2420
		}
2421
		it.fireEvent();
2422
	}
2423
	HasCurrentSelectionChildren() {
2424
		const it = this.MenuItems[this.CurrentSelection];
2425
		if (this.MenuItems[this.CurrentSelection] instanceof UIMenuItemMod) {
2426
			if (this.Children.has(it.Id)) {
2427
				return true;
2428
			}
2429
		}
2430
		return false;
2431
	}
2432
	IsMouseInListItemArrows(item, topLeft, safezone) {
2433
		gecilada.beginTextCommandGetWidth('jamyfafi');
2434
		gecilada.addTextComponentSubstringPlayerName(item.TextMod);
2435
		let res = ScreenMod.ResolutionMaintainRatio;
2436
		let screenw = res.Width;
2437
		let screenh = res.Height;
2438
		const height = 1080.0;
2439
		const ratio = screenw / screenh;
2440
		let width = height * ratio;
2441
		const labelSize = gecilada.endTextCommandGetWidth(false) * width * 0.35;
2442
		const labelSizeX = 5 + labelSize + 10;
2443
		const arrowSizeX = 431 - labelSizeX;
2444
		return ScreenMod.IsMouseInBounds(topLeft, new SizeMod(labelSizeX, 38))
2445
			? 1
2446
			: ScreenMod.IsMouseInBounds(new PointMod(topLeft.X + labelSizeX, topLeft.Y), new SizeMod(arrowSizeX, 38))
2447
			? 2
2448
			: 0;
2449
	}
2450
	ProcessMouse() {
2451
		if (!this.Visible || this._justOpened || this.MenuItems.length == 0 || !this.MouseControlsEnabled) {
2452
			this.MenuItems.filter((i) => i.Hovered).forEach((i) => (i.Hovered = false));
2453
			return;
2454
		}
2455
		shitfuck.showCursor(true);
2456
		let limit = this.MenuItems.length - 1;
2457
		let counter = 0;
2458
		if (this.MenuItems.length > this._maxItemsOnScreen + 1) limit = this._maxItem;
2459
		if (ScreenMod.IsMouseInBounds(new PointMod(0, 0), new SizeMod(30, 1080)) && this._mouseEdgeEnabled) {
2460
			gecilada.setGameplayCamRelativeHeading(gecilada.getGameplayCamRelativeHeading() + 5.0);
2461
			gecilada.setMouseCursorSprite(6);
2462
		} else if (ScreenMod.IsMouseInBounds(new PointMod(ScreenMod.ResolutionMaintainRatio.Width - 30.0, 0), new SizeMod(30, 1080)) && this._mouseEdgeEnabled) {
2463
			gecilada.setGameplayCamRelativeHeading(gecilada.getGameplayCamRelativeHeading() - 5.0);
2464
			gecilada.setMouseCursorSprite(7);
2465
		} else if (this._mouseEdgeEnabled) {
2466
			gecilada.setMouseCursorSprite(1);
2467
		}
2468
		for (let i = this._minItem; i <= limit; i++) {
2469
			let xpos = this._offset.X;
2470
			let ypos = this._offset.Y + 144 - 37 + this._extraOffset + counter * 38;
2471
			let xsize = 431 + this.WidthOffset;
2472
			const ysize = 38;
2473
			const uiMenuItem = this.MenuItems[i];
2474
			if (ScreenMod.IsMouseInBounds(new PointMod(xpos, ypos), new SizeMod(xsize, ysize))) {
2475
				uiMenuItem.Hovered = true;
2476
				const res = this.IsMouseInListItemArrows(this.MenuItems[i], new PointMod(xpos, ypos), 0);
2477
				if (
2478
					uiMenuItem.Hovered &&
2479
					res == 1 &&
2480
					(this.MenuItems[i] instanceof UIMenuListItemMod ||
2481
						this.MenuItems[i] instanceof UIMenuAutoListItemMod ||
2482
						this.MenuItems[i] instanceof UIMenuDynamicListItemMod)
2483
				) {
2484
					gecilada.setMouseCursorSprite(5);
2485
				}
2486
				if (gecilada.isControlJustReleased(0, 24) || gecilada.isDisabledControlJustReleased(0, 24))
2487
					if (uiMenuItem.Selected && uiMenuItem.Enabled) {
2488
						if (
2489
							(this.MenuItems[i] instanceof UIMenuListItemMod ||
2490
								this.MenuItems[i] instanceof UIMenuAutoListItemMod ||
2491
								this.MenuItems[i] instanceof UIMenuDynamicListItemMod) &&
2492
							this.IsMouseInListItemArrows(this.MenuItems[i], new PointMod(xpos, ypos), 0) > 0
2493
						) {
2494
							switch (res) {
2495
								case 1:
2496
									CommonMod.PlaySound(this.AUDIO_SELECT, this.AUDIO_LIBRARY);
2497
									this.MenuItems[i].fireEvent();
2498
									this.ItemSelect.emit(this.MenuItems[i], i);
2499
									break;
2500
								case 2:
2501
									let it = this.MenuItems[i];
2502
									if ((it.Collection == null ? it.Items.Count : it.Collection.Count) > 0) {
2503
										it.Index++;
2504
										CommonMod.PlaySound(this.AUDIO_LEFTRIGHT, this.AUDIO_LIBRARY);
2505
										this.ListChange.emit(it, it.Index);
2506
									}
2507
									break;
2508
							}
2509
						} else this.SelectItem();
2510
					} else if (!uiMenuItem.Selected) {
2511
						this.CurrentSelection = i;
2512
						CommonMod.PlaySound(this.AUDIO_UPDOWN, this.AUDIO_LIBRARY);
2513
						this.IndexChange.emit(this.CurrentSelection, this.MenuItems[this._activeItem % this.MenuItems.length]);
2514
						this.SelectItem();
2515
						this.UpdateDescriptionCaption();
2516
						this.UpdateScaleform();
2517
					} else if (!uiMenuItem.Enabled && uiMenuItem.Selected) {
2518
						CommonMod.PlaySound(this.AUDIO_ERROR, this.AUDIO_LIBRARY);
2519
					}
2520
			} else uiMenuItem.Hovered = false;
2521
			counter++;
2522
		}
2523
		const extraY = 144 + 38 * (this._maxItemsOnScreen + 1) + this._offset.Y - 37 + this._extraOffset + this._safezoneOffset.Y;
2524
		const extraX = this._safezoneOffset.X + this._offset.X;
2525
		if (this.MenuItems.length <= this._maxItemsOnScreen + 1) return;
2526
		if (ScreenMod.IsMouseInBounds(new PointMod(extraX, extraY), new SizeMod(431 + this.WidthOffset, 18))) {
2527
			this._extraRectangleUp.ColorMod = new ColorMod(30, 30, 30, 255);
2528
			if (gecilada.isControlJustPressed(0, 24) || gecilada.isDisabledControlJustPressed(0, 24)) {
2529
				if (this.MenuItems.length > this._maxItemsOnScreen + 1) this.GoUpOverflow();
2530
				else this.GoUp();
2531
			}
2532
		} else this._extraRectangleUp.ColorMod = new ColorMod(0, 0, 0, 200);
2533
		if (ScreenMod.IsMouseInBounds(new PointMod(extraX, extraY + 18), new SizeMod(431 + this.WidthOffset, 18))) {
2534
			this._extraRectangleDown.ColorMod = new ColorMod(30, 30, 30, 255);
2535
			if (gecilada.isControlJustPressed(0, 24) || gecilada.isDisabledControlJustPressed(0, 24)) {
2536
				if (this.MenuItems.length > this._maxItemsOnScreen + 1) this.GoDownOverflow();
2537
				else this.GoDown();
2538
			}
2539
		} else this._extraRectangleDown.ColorMod = new ColorMod(0, 0, 0, 200);
2540
	}
2541
	ProcessControl() {
2542
		if (!this.Visible) return;
2543
		if (this._justOpened) {
2544
			this._justOpened = false;
2545
			return;
2546
		}
2547
		if (gecilada.isControlJustReleased(0, 177)) {
2548
			this.GoBack();
2549
		}
2550
		if (this.MenuItems.length == 0) return;
2551
		if (gecilada.isControlPressed(0, 172) && this._lastUpDownNavigation + 120 < Date.now()) {
2552
			this._lastUpDownNavigation = Date.now();
2553
			if (this.MenuItems.length > this._maxItemsOnScreen + 1) this.GoUpOverflow();
2554
			else this.GoUp();
2555
			this.UpdateScaleform();
2556
		} else if (gecilada.isControlJustReleased(0, 172)) {
2557
			this._lastUpDownNavigation = 0;
2558
		} else if (gecilada.isControlPressed(0, 173) && this._lastUpDownNavigation + 120 < Date.now()) {
2559
			this._lastUpDownNavigation = Date.now();
2560
			if (this.MenuItems.length > this._maxItemsOnScreen + 1) this.GoDownOverflow();
2561
			else this.GoDown();
2562
			this.UpdateScaleform();
2563
		} else if (gecilada.isControlJustReleased(0, 173)) {
2564
			this._lastUpDownNavigation = 0;
2565
		} else if (gecilada.isControlPressed(0, 174) && this._lastLeftRightNavigation + 100 < Date.now()) {
2566
			this._lastLeftRightNavigation = Date.now();
2567
			this.GoLeft();
2568
		} else if (gecilada.isControlJustReleased(0, 174)) {
2569
			this._lastLeftRightNavigation = 0;
2570
		} else if (gecilada.isControlPressed(0, 175) && this._lastLeftRightNavigation + 100 < Date.now()) {
2571
			this._lastLeftRightNavigation = Date.now();
2572
			this.GoRight();
2573
		} else if (gecilada.isControlJustReleased(0, 175)) {
2574
			this._lastLeftRightNavigation = 0;
2575
		} else if (gecilada.isControlJustReleased(0, 201)) {
2576
			this.SelectItem();
2577
		}
2578
	}
2579
	GoUpOverflow() {
2580
		if (this.MenuItems.length <= this._maxItemsOnScreen + 1) return;
2581
		if (this._activeItem % this.MenuItems.length <= this._minItem) {
2582
			if (this._activeItem % this.MenuItems.length == 0) {
2583
				this._minItem = this.MenuItems.length - this._maxItemsOnScreen - 1;
2584
				this._maxItem = this.MenuItems.length - 1;
2585
				this.MenuItems[this._activeItem % this.MenuItems.length].Selected = false;
2586
				this._activeItem = this._maxMenuItems - (this._maxMenuItems % this.MenuItems.length);
2587
				this._activeItem += this.MenuItems.length - 1;
2588
				this.MenuItems[this._activeItem % this.MenuItems.length].Selected = true;
2589
			} else {
2590
				this._minItem--;
2591
				this._maxItem--;
2592
				this.MenuItems[this._activeItem % this.MenuItems.length].Selected = false;
2593
				this._activeItem--;
2594
				this.MenuItems[this._activeItem % this.MenuItems.length].Selected = true;
2595
			}
2596
		} else {
2597
			this.MenuItems[this._activeItem % this.MenuItems.length].Selected = false;
2598
			this._activeItem--;
2599
			this.MenuItems[this._activeItem % this.MenuItems.length].Selected = true;
2600
		}
2601
		CommonMod.PlaySound(this.AUDIO_UPDOWN, this.AUDIO_LIBRARY);
2602
		this.IndexChange.emit(this.CurrentSelection, this.MenuItems[this._activeItem % this.MenuItems.length]);
2603
		this.UpdateDescriptionCaption();
2604
	}
2605
	GoUp() {
2606
		if (this.MenuItems.length > this._maxItemsOnScreen + 1) return;
2607
		this.MenuItems[this._activeItem % this.MenuItems.length].Selected = false;
2608
		this._activeItem--;
2609
		this.MenuItems[this._activeItem % this.MenuItems.length].Selected = true;
2610
		CommonMod.PlaySound(this.AUDIO_UPDOWN, this.AUDIO_LIBRARY);
2611
		this.IndexChange.emit(this.CurrentSelection, this.MenuItems[this._activeItem % this.MenuItems.length]);
2612
		this.UpdateDescriptionCaption();
2613
	}
2614
	GoDownOverflow() {
2615
		if (this.MenuItems.length <= this._maxItemsOnScreen + 1) return;
2616
		if (this._activeItem % this.MenuItems.length >= this._maxItem) {
2617
			if (this._activeItem % this.MenuItems.length == this.MenuItems.length - 1) {
2618
				this._minItem = 0;
2619
				this._maxItem = this._maxItemsOnScreen;
2620
				this.MenuItems[this._activeItem % this.MenuItems.length].Selected = false;
2621
				this._activeItem = this._maxMenuItems - (this._maxMenuItems % this.MenuItems.length);
2622
				this.MenuItems[this._activeItem % this.MenuItems.length].Selected = true;
2623
			} else {
2624
				this._minItem++;
2625
				this._maxItem++;
2626
				this.MenuItems[this._activeItem % this.MenuItems.length].Selected = false;
2627
				this._activeItem++;
2628
				this.MenuItems[this._activeItem % this.MenuItems.length].Selected = true;
2629
			}
2630
		} else {
2631
			this.MenuItems[this._activeItem % this.MenuItems.length].Selected = false;
2632
			this._activeItem++;
2633
			this.MenuItems[this._activeItem % this.MenuItems.length].Selected = true;
2634
		}
2635
		CommonMod.PlaySound(this.AUDIO_UPDOWN, this.AUDIO_LIBRARY);
2636
		this.IndexChange.emit(this.CurrentSelection, this.MenuItems[this._activeItem % this.MenuItems.length]);
2637
		this.UpdateDescriptionCaption();
2638
	}
2639
	GoDown() {
2640
		if (this.MenuItems.length > this._maxItemsOnScreen + 1) return;
2641
		this.MenuItems[this._activeItem % this.MenuItems.length].Selected = false;
2642
		this._activeItem++;
2643
		this.MenuItems[this._activeItem % this.MenuItems.length].Selected = true;
2644
		CommonMod.PlaySound(this.AUDIO_UPDOWN, this.AUDIO_LIBRARY);
2645
		this.IndexChange.emit(this.CurrentSelection, this.MenuItems[this._activeItem % this.MenuItems.length]);
2646
		this.UpdateDescriptionCaption();
2647
	}
2648
	GoBack() {
2649
		if (this.ParentMenu != null) {
2650
			this.Visible = false;
2651
			this.ParentMenu.Visible = true;
2652
			this.MenuChange.emit(this.ParentMenu, false);
2653
			this.MenuClose.emit(false);
2654
		} else if (this.CloseableByUser) {
2655
			this.Visible = false;
2656
			this.CleanUp(true);
2657
			this.MenuClose.emit(false);
2658
		}
2659
	}
2660
	BindMenuToItem(menuToBind, itemToBindTo) {
2661
		if (!this.MenuItems.includes(itemToBindTo)) {
2662
			this.AddItem(itemToBindTo);
2663
		}
2664
		menuToBind.ParentMenu = this;
2665
		menuToBind.ParentItem = itemToBindTo;
2666
		this.Children.set(itemToBindTo.Id, menuToBind);
2667
	}
2668
	AddSubMenu(subMenu, itemToBindTo) {
2669
		this.BindMenuToItem(subMenu, itemToBindTo);
2670
	}
2671
	ReleaseMenuFromItem(releaseFrom) {
2672
		if (!this.Children.has(releaseFrom.Id)) return false;
2673
		const menu = this.Children.get(releaseFrom.Id);
2674
		menu.ParentItem = null;
2675
		menu.ParentMenu = null;
2676
		this.Children.delete(releaseFrom.Id);
2677
		return true;
2678
	}
2679
	UpdateDescriptionCaption() {
2680
		if (this.MenuItems.length) {
2681
			this._descriptionText.Caption = this.MenuItems[this._activeItem % this.MenuItems.length].Description;
2682
			this._descriptionText.Wrap = 400;
2683
			this._recalculateDescriptionNextFrame++;
2684
		}
2685
	}
2686
	CalculateDescription() {
2687
		if (this.MenuItems.length <= 0) return;
2688
		if (this._recalculateDescriptionNextFrame > 0) {
2689
			this._recalculateDescriptionNextFrame--;
2690
		}
2691
		this.RecalculateDescriptionPosition();
2692
		if (
2693
			this.MenuItems.length > 0 &&
2694
			this._descriptionText.Caption &&
2695
			this.MenuItems[this._activeItem % this.MenuItems.length].Description.trim() !== ''
2696
		) {
2697
			const numLines = ScreenMod.GetLineCount(
2698
				this._descriptionText.Caption,
2699
				this._descriptionText.Pos,
2700
				this._descriptionText.Font,
2701
				this._descriptionText.Scale,
2702
				this._descriptionText.Wrap
2703
			);
2704
			this._descriptionRectangle.SizeMod = new SizeMod(431 + this.WidthOffset, numLines * 25 + 15);
2705
			if (numLines === 0) {
2706
				this._recalculateDescriptionNextFrame++;
2707
			}
2708
		}
2709
	}
2710
	UpdateScaleform() {
2711
		if (!this.Visible || !this._buttonsEnabled) return;
2712
		this._instructionalButtonsScaleform.callFunction('CLEAR_ALL');
2713
		this._instructionalButtonsScaleform.callFunction('TOGGLE_MOUSE_BUTTONS', 0);
2714
		this._instructionalButtonsScaleform.callFunction('CREATE_CONTAINER');
2715
		this._instructionalButtonsScaleform.callFunction(
2716
			'SET_DATA_SLOT',
2717
			0,
2718
			gecilada.getControlInstructionalButton(2, Control$1.PhoneSelect, false),
2719
			this.SelectTextLocalized
2720
		);
2721
		this._instructionalButtonsScaleform.callFunction(
2722
			'SET_DATA_SLOT',
2723
			1,
2724
			gecilada.getControlInstructionalButton(2, Control$1.PhoneCancel, false),
2725
			this.BackTextLocalized
2726
		);
2727
		let count = 2;
2728
		this._instructionalButtons
2729
			.filter((b) => b.ItemBind == null || this.MenuItems[this.CurrentSelection] == b.ItemBind)
2730
			.forEach((button) => {
2731
				this._instructionalButtonsScaleform.callFunction('SET_DATA_SLOT', count, button.GetButtonId(), button.TextMod);
2732
				count++;
2733
			});
2734
		this._instructionalButtonsScaleform.callFunction('DRAW_INSTRUCTIONAL_BUTTONS', -1);
2735
	}
2736
	render() {
2737
		if (!this.Visible) return;
2738
		if (this._buttonsEnabled) {
2739
			gecilada.drawScaleformMovieFullscreen(this._instructionalButtonsScaleform.handle, 255, 255, 255, 255, 0);
2740
			gecilada.hideHudComponentThisFrame(6);
2741
			gecilada.hideHudComponentThisFrame(7);
2742
			gecilada.hideHudComponentThisFrame(9);
2743
		}
2744
		if (this._justOpened) {
2745
			if (this._bannerSprite != null && !this._bannerSprite.IsTextureDictionaryLoaded) this._bannerSprite.LoadTextureDictionary();
2746
			if (!this._background.IsTextureDictionaryLoaded) this._background.LoadTextureDictionary();
2747
			if (!this._descriptionRectangle.IsTextureDictionaryLoaded) this._descriptionRectangle.LoadTextureDictionary();
2748
			if (!this._upAndDownSprite.IsTextureDictionaryLoaded) this._upAndDownSprite.LoadTextureDictionary();
2749
			if (!this._recalculateDescriptionNextFrame) this._recalculateDescriptionNextFrame++;
2750
		}
2751
		this._mainMenu.Draw();
2752
		this.ProcessMouse();
2753
		this.ProcessControl();
2754
		this._background.SizeMod =
2755
			this.MenuItems.length > this._maxItemsOnScreen + 1
2756
				? new SizeMod(431 + this.WidthOffset, 38 * (this._maxItemsOnScreen + 1))
2757
				: new SizeMod(431 + this.WidthOffset, 38 * this.MenuItems.length);
2758
		this._background.Draw();
2759
		if (this._recalculateDescriptionNextFrame) {
2760
			this.CalculateDescription();
2761
		}
2762
		if (this.MenuItems.length > 0) {
2763
			this.MenuItems[this._activeItem % this.MenuItems.length].Selected = true;
2764
			if (this.MenuItems[this._activeItem % this.MenuItems.length].Description.trim() !== '') {
2765
				this._descriptionBar.Draw();
2766
				this._descriptionRectangle.Draw();
2767
				this._descriptionText.Draw();
2768
			}
2769
		}
2770
		let count = 0;
2771
		if (this.MenuItems.length <= this._maxItemsOnScreen + 1) {
2772
			for (const item of this.MenuItems) {
2773
				item.SetVerticalPosition(count * 38 - 37 + this._extraOffset);
2774
				item.Draw();
2775
				count++;
2776
			}
2777
			if (this._counterText && this._counterOverride) {
2778
				this._counterText.Caption = this._counterPretext + this._counterOverride;
2779
				this._counterText.Draw();
2780
			}
2781
		} else {
2782
			for (let index = this._minItem; index <= this._maxItem; index++) {
2783
				let item = this.MenuItems[index];
2784
				item.SetVerticalPosition(count * 38 - 37 + this._extraOffset);
2785
				item.Draw();
2786
				count++;
2787
			}
2788
			this._extraRectangleUp.SizeMod = new SizeMod(431 + this.WidthOffset, 18);
2789
			this._extraRectangleDown.SizeMod = new SizeMod(431 + this.WidthOffset, 18);
2790
			this._upAndDownSprite.Pos = new PointMod(
2791
				190 + this._offset.X + this.WidthOffset / 2,
2792
				147 + 37 * (this._maxItemsOnScreen + 1) + this._offset.Y - 37 + this._extraOffset
2793
			);
2794
			this._extraRectangleUp.Draw();
2795
			this._extraRectangleDown.Draw();
2796
			this._upAndDownSprite.Draw();
2797
			if (this._counterText) {
2798
				if (!this._counterOverride) {
2799
					const cap = this.CurrentSelection + 1 + ' / ' + this.MenuItems.length;
2800
					this._counterText.Caption = this._counterPretext + cap;
2801
				} else {
2802
					this._counterText.Caption = this._counterPretext + this._counterOverride;
2803
				}
2804
				this._counterText.Draw();
2805
			}
2806
		}
2807
		if (this._bannerRectangle != null) this._bannerRectangle.Draw();
2808
		if (this._bannerSprite != null) this._bannerSprite.Draw();
2809
	}
2810
}
2811
2812
String.prototype.replaceAll = function (searchStr, replaceStr) {
2813
	var str = this;
2814
2815
	if (str.indexOf(searchStr) === -1) {
2816
		return str;
2817
	}
2818
2819
	return str.replace(searchStr, replaceStr).replaceAll(searchStr, replaceStr);
2820
};
2821
2822
//--------------------- NativeUIMod End ---------------------//
2823
2824
var streamedPlayers = [];
2825
var entity;
2826
var height;
2827
var zpos;
2828
var noclip = false;
2829
2830
shitfuck.on('gameEntityCreate', (entity) => {
2831
	if (entity instanceof shitfuck.Player) {
2832
		streamedPlayers[entity.id] = entity;
2833
	}
2834
});
2835
2836
shitfuck.on('gameEntityDestroy', (entity) => {
2837
	if (entity instanceof shitfuck.Player) {
2838
		if (streamedPlayers[entity.id]) {
2839
			streamedPlayers[entity.id] = null;
2840
			delete streamedPlayers[entity.id];
2841
		}
2842
	}
2843
});
2844
2845
shitfuck.on('removeEntity', (entity) => {
2846
	if (entity instanceof shitfuck.Player) {
2847
		if (streamedPlayers[entity.id]) {
2848
			streamedPlayers[entity.id] = null;
2849
			delete streamedPlayers[entity.id];
2850
		}
2851
	}
2852
});
2853
2854
shitfuck.everyTick(() => {
2855
    if (noclip) {
2856
		if (lokalisJatekos.vehicle) {
2857
			entity = lokalisJatekos.vehicle;
2858
			gecilada.setEntityRotation(entity.scriptID, 0, 0, 0, 1, true);
2859
		} else {
2860
			entity = lokalisJatekos;
2861
		}
2862
2863
        let x = entity.pos.x;
2864
        let y = entity.pos.y;
2865
        let z = entity.pos.z;
2866
        let speed = 1.0;
2867
2868
        let heading = gecilada.getGameplayCamRelativeHeading() + gecilada.getEntityHeading(entity.scriptID);
2869
        let pitch = gecilada.getGameplayCamRelativePitch();
2870
2871
        let dx = -Math.sin(heading * Math.PI / 180.0);
2872
        let dy = Math.cos(heading * Math.PI / 180.0);
2873
        let dz = Math.sin(pitch * Math.PI / 180.0);
2874
2875
        let len = Math.sqrt(dx * dx + dy * dy + dz * dz);
2876
        if (len != 0) {
2877
            dx = dx / len;
2878
            dy = dy / len;
2879
            dz = dz / len;
2880
        }
2881
2882
        if (gecilada.isControlPressed(0, 21)) {
2883
            speed = speed + 3;
2884
        }
2885
2886
        if (gecilada.isControlPressed(0, 19)) {
2887
            speed = speed - 0.5;
2888
        }
2889
2890
        if (gecilada.isControlPressed(0, 32)) {
2891
            x = x + speed * dx;
2892
            y = y + speed * dy;
2893
            z = z + speed * dz;
2894
        }
2895
2896
        if (gecilada.isControlPressed(0, 269)) {
2897
            x = x - speed * dx;
2898
            y = y - speed * dy;
2899
            z = z - speed * dz;
2900
        }
2901
2902
		gecilada.setEntityCoordsNoOffset(entity.scriptID, x, y, z, true, true, true);
2903
	}
2904
});
2905
2906
function teleportToWaypoint() {
2907
	zpos = gecilada.getGroundZFor3dCoord(entity.pos.x, entity.pos.y, entity.pos.z, 0)[1];
2908
	if (zpos == 0) {
2909
		height += 25;
2910
		gecilada.setEntityCoords(entity.scriptID, entity.pos.x, entity.pos.y, height);
2911
		shitfuck.setTimeout(teleportToWaypoint, 20);
2912
	} else {
2913
		gecilada.setEntityCoords(entity.scriptID, entity.pos.x, entity.pos.y, zpos);
2914
	}
2915
}
2916
2917
const mainMenu = new NativeUIMod('alt:V Menu', '', new PointMod(ScreenMod.Width * 0.6, ScreenMod.Height * 0.025));
2918
mainMenu.GetTitle().Scale = 1.5;
2919
mainMenu.GetTitle().DropShadow = true;
2920
2921
mainMenu.AddItem(new UIMenuCheckboxItemMod('Godmode'));
2922
mainMenu.AddItem(new UIMenuCheckboxItemMod('Invisibility'));
2923
mainMenu.AddItem(new UIMenuCheckboxItemMod('Noclip'));
2924
mainMenu.AddItem(new UIMenuItemMod('Fix Vehicle'));
2925
mainMenu.AddItem(new UIMenuItemMod('Teleport to waypoint'));
2926
mainMenu.AddItem(new UIMenuItemMod('Explode all player'));
2927
2928
const nearbyMenuItem = new UIMenuItemMod('Nearby Players');
2929
mainMenu.AddItem(nearbyMenuItem);
2930
2931
const weaponMenuItem = new UIMenuItemMod('Weapon List');
2932
mainMenu.AddItem(weaponMenuItem);
2933
2934
const nearbyMenu = new NativeUIMod('Nearby Players', '', new PointMod(ScreenMod.Width * 0.6, ScreenMod.Height * 0.025));
2935
nearbyMenu.Visible = false;
2936
nearbyMenu.GetTitle().Scale = 1.2;
2937
mainMenu.AddSubMenu(nearbyMenu, nearbyMenuItem);
2938
2939
const weaponMenu = new NativeUIMod('Weapon List', '', new PointMod(ScreenMod.Width * 0.6, ScreenMod.Height * 0.025));
2940
weaponMenu.Visible = false;
2941
weaponMenu.GetTitle().Scale = 1.2;
2942
mainMenu.AddSubMenu(weaponMenu, weaponMenuItem);
2943
2944
weaponMenu.AddItem(new UIMenuItemMod('Weapon List:'));
2945
for (let k in WeaponModelMod) {
2946
	weaponMenu.AddItem(new UIMenuItemMod(k, '', WeaponModelMod[k]));
2947
}
2948
2949
mainMenu.MenuChange.on(() => {
2950
	nearbyMenu.Clear();
2951
	nearbyMenu.AddItem(new UIMenuItemMod('Nearby Players:'));
2952
2953
	for (let k in streamedPlayers) {
2954
		if (streamedPlayers[k]) {
2955
			nearbyMenu.AddItem(new UIMenuItemMod(streamedPlayers[k].name, '', streamedPlayers[k]));
2956
		}
2957
	}
2958
});
2959
2960
mainMenu.CheckboxChange.on((item, checkedState) => {
2961
	switch (item.TextMod) {
2962
		case 'Godmode':
2963
			gecilada.setPlayerInvincible(lokalisJatekos.scriptID, checkedState);
2964
			break;
2965
		case 'Invisibility':
2966
			gecilada.setEntityVisible(lokalisJatekos.scriptID, !checkedState, !checkedState);
2967
			break;
2968
		case 'Noclip':
2969
			noclip = checkedState;
2970
	}
2971
});
2972
2973
mainMenu.ItemSelect.on((selectedItem, selectedItemIndex) => {
2974
	switch (selectedItemIndex) {
2975
		case 3:
2976
			if (lokalisJatekos.vehicle) gecilada.setVehicleFixed(lokalisJatekos.vehicle.scriptID);
2977
			break;
2978
		case 4:
2979
			let blip = gecilada.getFirstBlipInfoId(8);
2980
			if (blip == 0) break;
2981
2982
			let getBlipCoords = gecilada.getBlipInfoIdCoord(blip);
2983
			height = 0;
2984
2985
			if (lokalisJatekos.vehicle) {
2986
				entity = lokalisJatekos.vehicle;
2987
			} else {
2988
				entity = lokalisJatekos;
2989
			}
2990
2991
			gecilada.setEntityCoords(entity.scriptID, getBlipCoords.x, getBlipCoords.y, 0);
2992
			shitfuck.setTimeout(teleportToWaypoint, 20);
2993
		case 5:
2994
			for (let k in streamedPlayers) {
2995
				if (streamedPlayers[k]) {
2996
					let x = streamedPlayers[k].pos.x;
2997
					let y = streamedPlayers[k].pos.x;
2998
					let z = streamedPlayers[k].pos.x;
2999
3000
					gecilada.shootSingleBulletBetweenCoords(x, y, z + 1, x, y, z, 5000, false, 0xB1CA77B1, streamedPlayers[k].scriptID, true, false, 9999999);
3001
				}
3002
			}
3003
	}
3004
});
3005
3006
nearbyMenu.ItemSelect.on((selectedItem) => {
3007
	let plr = selectedItem.Data;
3008
	if (plr instanceof shitfuck.Player) gecilada.setEntityCoords(lokalisJatekos.scriptID, plr.pos.x, plr.pos.y, plr.pos.z);
3009
});
3010
3011
weaponMenu.ItemSelect.on((selectedItem) => {
3012
	let wep = selectedItem.Data;
3013
	if (wep) gecilada.giveWeaponToPed(lokalisJatekos.scriptID, wep, 250, false, true);
3014
});
3015
3016
shitfuck.on('keyup', (key) => {
3017
	if (key === 56) {
3018
		if (mainMenu.Visible) mainMenu.Close();
3019
		else {
3020
			if (!nearbyMenu.Visible) mainMenu.Open();
3021
		}
3022
	}
3023
});
3024