View difference between Paste ID: CA9AJaBu and rJqdgV2X
SHOW: | | - or go back to the newest paste.
1-
//Nex-AC by Nexius v1.9.46 (0.3.7)
1+
//Nex-AC by Nexius v1.9.47 (0.3.7)
2
3
#if defined _nex_ac_included
4
	#endinput
5
#endif
6
#define _nex_ac_included
7
8
#include <a_samp>
9
10
#if !defined FILTERSCRIPT
11
12
#if !defined DEBUG
13
	#define DEBUG
14
#endif
15
16
#if !defined NO_SUSPICION_LOGS
17
	//#define NO_SUSPICION_LOGS
18
#endif
19
20
#if defined NO_SUSPICION_LOGS
21
	#pragma unused SUSPICION_1
22
	#pragma unused SUSPICION_2
23
#endif
24
25
#if !defined _nex_ac_lang_included
26
	#include <nex-ac_en.lang>	//Localization
27
#endif
28
29-
#define	NEX_AC_VERSION				"1.9.46"
29+
#define	NEX_AC_VERSION				"1.9.47"
30
31
#define AC_SERVER_VERSION			"0.3.7"
32
#define AC_SERVER_DL_VERSION		"0.3.DL"
33
34
#if !defined AC_CONFIG_FILE
35
	#define AC_CONFIG_FILE				"nex-ac_settings.cfg"
36
#endif
37
38
#if !defined AC_NOP_CONFIG_FILE
39
	#define AC_NOP_CONFIG_FILE			"nex-ac_nop_settings.cfg"
40
#endif
41
42
#if !defined AC_MAX_CLASSES
43
	#define AC_MAX_CLASSES				320
44
#endif
45
46
#if !defined AC_DEFAULT_COLOR
47
	#define AC_DEFAULT_COLOR			-1
48
#endif
49
50
#if !defined AC_USE_VENDING_MACHINES
51
	#define AC_USE_VENDING_MACHINES		true
52
#endif
53
54
#if !defined AC_USE_TUNING_GARAGES
55
	#define AC_USE_TUNING_GARAGES		true
56
#endif
57
58
#if !defined AC_USE_PICKUP_WEAPONS
59
	#define AC_USE_PICKUP_WEAPONS		true
60
#endif
61
62
#if !defined AC_USE_AMMUNATIONS
63
	#define AC_USE_AMMUNATIONS			true
64
#endif
65
66
#if !defined AC_USE_RESTAURANTS
67
	#define AC_USE_RESTAURANTS			true
68
#endif
69
70
#if !defined AC_USE_PAYNSPRAY
71
	#define AC_USE_PAYNSPRAY			true
72
#endif
73
74
#if !defined AC_USE_CASINOS
75
	#define AC_USE_CASINOS				true
76
#endif
77
78
#if !defined AC_USE_QUERY
79
	#define AC_USE_QUERY				true
80
#endif
81
82
#if !defined AC_USE_NPC
83
	#define AC_USE_NPC					true
84
#endif
85
86
#if !defined AC_USE_STATISTICS
87
	#define AC_USE_STATISTICS			true
88
#endif
89
90
#if !AC_USE_STATISTICS
91
	#pragma unused STATS_STRING_1
92
	#pragma unused STATS_STRING_2
93
	#pragma unused STATS_STRING_3
94
	#pragma unused STATS_STRING_4
95
	#pragma unused STATS_STRING_5
96
	#pragma unused STATS_STRING_6
97
	#pragma unused STATS_STRING_7
98
	#pragma unused STATS_STRING_8
99
#endif
100
101
#if !defined AUTOSAVE_SETTINGS_IN_CONFIG
102
	#define AUTOSAVE_SETTINGS_IN_CONFIG		false
103
#endif
104
105
#if !defined AC_MAX_CONNECTS_FROM_IP
106
	#define AC_MAX_CONNECTS_FROM_IP			1
107
#endif
108
109
#if !defined AC_MAX_RCON_LOGIN_ATTEMPT
110
	#define AC_MAX_RCON_LOGIN_ATTEMPT		1
111
#endif
112
113
#if !defined AC_MAX_MSGS_REC_DIFF
114
	#define AC_MAX_MSGS_REC_DIFF			800
115
#endif
116
117
#if !defined AC_MAX_PING
118
	#define AC_MAX_PING						500
119
#endif
120
121
#if !defined AC_MIN_TIME_RECONNECT
122
	#define AC_MIN_TIME_RECONNECT			12		//In seconds
123
#endif
124
125
#if !defined AC_SPEEDHACK_VEH_RESET_DELAY
126
	#define AC_SPEEDHACK_VEH_RESET_DELAY	3		//In seconds
127
#endif
128
129
#if !defined AC_MAX_NOP_WARNINGS
130
	#define AC_MAX_NOP_WARNINGS				8
131
#endif
132
133
#if !defined AC_MAX_NOP_TIMER_WARNINGS
134
	#define AC_MAX_NOP_TIMER_WARNINGS		3
135
#endif
136
137
#if !defined AC_MAX_PING_WARNINGS
138
	#define AC_MAX_PING_WARNINGS			8
139
#endif
140
141
#if !defined AC_MAX_AIR_WARNINGS
142
	#define AC_MAX_AIR_WARNINGS				4
143
#endif
144
145
#if !defined AC_MAX_AIR_VEH_WARNINGS
146
	#define AC_MAX_AIR_VEH_WARNINGS			4
147
#endif
148
149
#if !defined AC_MAX_FLYHACK_VEH_WARNINGS
150
	#define AC_MAX_FLYHACK_VEH_WARNINGS		3
151
#endif
152
153
#if !defined AC_MAX_FLYHACK_BIKE_WARNINGS
154
	#define AC_MAX_FLYHACK_BIKE_WARNINGS	5
155
#endif
156
157
#if !defined AC_MAX_CARSHOT_WARNINGS
158
	#define AC_MAX_CARSHOT_WARNINGS			4
159
#endif
160
161
#if !defined AC_MAX_PRO_AIM_WARNINGS
162
	#define AC_MAX_PRO_AIM_WARNINGS			2
163
#endif
164
165
#if !defined AC_MAX_AFK_GHOST_WARNINGS
166
	#define AC_MAX_AFK_GHOST_WARNINGS		2
167
#endif
168
169
#if !defined AC_MAX_RAPID_FIRE_WARNINGS
170
	#define AC_MAX_RAPID_FIRE_WARNINGS		16
171
#endif
172
173
#if !defined AC_MAX_AUTO_C_WARNINGS
174
	#define AC_MAX_AUTO_C_WARNINGS			8
175
#endif
176
177
#if !defined AC_MAX_GODMODE_WARNINGS
178
	#define AC_MAX_GODMODE_WARNINGS			3
179
#endif
180
181
#if !defined AC_MAX_GODMODE_VEH_WARNINGS
182
	#define AC_MAX_GODMODE_VEH_WARNINGS		3
183
#endif
184
185
#if !defined AC_MAX_SILENT_AIM_WARNINGS
186
	#define AC_MAX_SILENT_AIM_WARNINGS		2
187
#endif
188
189
#if !defined AC_MAX_FAKE_WEAPON_WARNINGS
190
	#define AC_MAX_FAKE_WEAPON_WARNINGS		2
191
#endif
192
193
#if !defined AC_MAX_FLYHACK_WARNINGS
194
	#define AC_MAX_FLYHACK_WARNINGS			2
195
#endif
196
197
#if !defined AC_MAX_TELEPORT_GLITCH_WARNINGS
198
	#define AC_MAX_TELEPORT_GLITCH_WARNINGS	1
199
#endif
200
201
#if !defined AC_MAX_SPEEDHACK_VEH_WARNINGS
202
	#define AC_MAX_SPEEDHACK_VEH_WARNINGS	(1 * AC_SPEEDHACK_VEH_RESET_DELAY)
203
#endif
204
205
#if !defined AC_MAX_SPEEDHACK_WARNINGS
206
	#define AC_MAX_SPEEDHACK_WARNINGS		4
207
#endif
208
209
#if !defined AC_MAX_CJ_RUN_WARNINGS
210
	#define AC_MAX_CJ_RUN_WARNINGS			3
211
#endif
212
213
#if !defined AC_MAX_MONEY_WARNINGS
214
	#define AC_MAX_MONEY_WARNINGS			2
215
#endif
216
217
#define ac_fpublic%0(%1) forward%0(%1); public%0(%1)
218
#define ac_AbsoluteAngle(%0) ((floatround(%0, floatround_floor) % 360) + floatfract(%0))
219
#define ac_abs(%0) (((%0) < 0) ? (-(%0)) : ((%0)))
220
221
//'ac_ACAllow' contains the default settings that will be set if no config file is found
222
//Don't change these values if you already have 'scriptfiles\nex-ac_settings.cfg'
223
static bool:ac_ACAllow[] =
224
{
225
	true,	//0 Anti-AirBreak (onfoot)
226
	true,	//1 Anti-AirBreak (in vehicle)
227
	true,	//2 Anti-teleport hack (onfoot)
228
	true,	//3 Anti-teleport hack (in vehicle)
229
	true,	//4 Anti-teleport hack (into/between vehicles)
230
	true,	//5 Anti-teleport hack (vehicle to player)
231
	true,	//6 Anti-teleport hack (pickups)
232
	true,	//7 Anti-FlyHack (onfoot)
233
	true,	//8 Anti-FlyHack (in vehicle)
234
	true,	//9 Anti-SpeedHack (onfoot)
235
	true,	//10 Anti-SpeedHack (in vehicle)
236
	true,	//11 Anti-Health hack (in vehicle)
237
	true,	//12 Anti-Health hack (onfoot)
238
	true,	//13 Anti-Armour hack
239
	true,	//14 Anti-Money hack
240
	true,	//15 Anti-Weapon hack
241
	true,	//16 Anti-Ammo hack (add)
242
	true,	//17 Anti-Ammo hack (infinite)
243
	true,	//18 Anti-Special actions hack
244
	true,	//19 Anti-GodMode from bullets (onfoot)
245
	true,	//20 Anti-GodMode from bullets (in vehicle)
246
	true,	//21 Anti-Invisible hack
247
	true,	//22 Anti-lagcomp-spoof
248
	true,	//23 Anti-Tuning hack
249
	false,	//24 Anti-Parkour mod
250
	true,	//25 Anti-Quick turn
251
	true,	//26 Anti-Rapid fire
252
	true,	//27 Anti-FakeSpawn
253
	true,	//28 Anti-FakeKill
254
	true,	//29 Anti-Pro Aim
255
	true,	//30 Anti-CJ run
256
	true,	//31 Anti-CarShot
257
	true,	//32 Anti-CarJack
258
	false,	//33 Anti-UnFreeze
259
	true,	//34 Anti-AFK Ghost
260
	true,	//35 Anti-Full Aiming
261
262
	false,	//36 Anti-Fake NPC
263
	true,	//37 Anti-Reconnect
264
	true,	//38 Anti-High ping
265
	true,	//39 Anti-Dialog hack
266
	true,	//40 Protection from sandbox
267
	true,	//41 Protection from invalid version
268
	true,	//42 Anti-Rcon hack
269
270
	true,	//43 Anti-Tuning crasher
271
	true,	//44 Anti-Invalid seat crasher
272
	true,	//45 Anti-Dialog crasher
273
	true,	//46 Anti-Attached object crasher
274
	true,	//47 Anti-Weapon Crasher
275
276
	true,	//48 Protection from connection flood in one slot
277
	true,	//49 Anti-callback functions flood
278
	true,	//50 Anti-flood by seat changing
279
280
	true,	//51 Anti-Ddos
281
282
	true	//52 Anti-NOP's
283
},
284
285
bool:ac_NOPAllow[] =
286
{
287
	true,	//0 Anti-NOP GivePlayerWeapon
288
	true,	//1 Anti-NOP SetPlayerAmmo
289
	true,	//2 Anti-NOP SetPlayerInterior
290
	true,	//3 Anti-NOP SetPlayerHealth
291-
	{450, 5},	//3 OnPlayerClickPlayer
291+
292
	true,	//5 Anti-NOP SetPlayerArmour
293-
	{400, 5},	//5 OnPlayerCommandText
293+
294
	true,	//7 Anti-NOP PutPlayerInVehicle
295
	true,	//8 Anti-NOP TogglePlayerSpectating
296
	true,	//9 Anti-NOP SpawnPlayer
297
	true,	//10 Anti-NOP SetPlayerPos
298
	true	//11 Anti-NOP RemovePlayerFromVehicle
299
};
300
301
static const ac_Mtfc[][] =
302
{
303
	{150, 5},	//0 OnDialogResponse
304-
	{450, 3},	//16 OnPlayerText
304+
305
	{250, 5},	//2 OnPlayerClickMap
306
	{400, 5},	//3 OnPlayerClickPlayer
307
	{50, 11},	//4 OnPlayerClickTextDraw
308
	{350, 5},	//5 OnPlayerCommandText
309
	{50, 8},	//6 OnPlayerEnterVehicle
310
	{50, 11},	//7 OnPlayerExitVehicle
311
	{150, 8},	//8 OnPlayerPickUpPickup
312
	{150, 8},	//9 OnPlayerRequestClass
313
	{150, 5},	//10 OnPlayerSelectedMenuRow
314
	{600, 5},	//11 OnPlayerStateChange
315
	{450, 2},	//12 OnVehicleMod
316
	{450, 2},	//13 OnVehiclePaintjob
317
	{450, 2},	//14 OnVehicleRespray
318
	{300, 1},	//15 OnVehicleDeath
319
	{400, 3},	//16 OnPlayerText
320
	{150, 8},	//17 OnPlayerEnterCheckpoint
321
	{150, 8},	//18 OnPlayerLeaveCheckpoint
322
	{150, 5},	//19 OnPlayerRequestSpawn
323
	{150, 5},	//20 OnPlayerExitedMenu
324
	{150, 8},	//21 OnPlayerEnterRaceCheckpoint
325
	{150, 8},	//22 OnPlayerLeaveRaceCheckpoint
326
	{50, 11},	//23 OnPlayerClickPlayerTextDraw
327
	{51, 9},	//24 OnVehicleDamageStatusUpdate
328
	{150, 8},	//25 OnVehicleSirenStateChange
329
	{150, 5},	//26 OnPlayerSelectObject
330
	{50, 11}	//27 Cross-public
331
},
332
333
ac_wSlot[] =
334
{
335
	0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 10, 10, 10, 10, 10,
336
	10, 8, 8, 8, 0, 0, 0, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5,
337
	4, 6, 6, 7, 7, 7, 7, 8, 12, 9, 9, 9, 11, 11, 11
338
},
339
340
ac_vType[] =
341
{
342
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
343
	0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
344
	0, 0, 0, 0, 0, 0, 3, 2, 5, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0,
345
	1, 5, 5, 5, 0, 0, 0, 0, 5, 2, 0, 5, 3, 3, 0, 0, 1, 0, 0, 0,
346
	0, 4, 0, 0, 3, 0, 0, 2, 2, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0,
347
	0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 1, 1, 1, 0, 0, 0, 0, 0, 1,
348
	1, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
349
	0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
350
	0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
351
	0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 1, 1, 0, 3, 0, 0, 0, 0,
352
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
353
},
354
355
#if AC_USE_PICKUP_WEAPONS
356
	ac_wModel[] =
357
	{
358
		0, 331, 333, 334, 335, 336, 337, 338, 339, 341, 321, 322, 323, 324, 325,
359
		326, 342, 343, 344, 0, 0, 345, 346, 347, 348, 349, 350, 351, 352, 353, 355, 356,
360
		372, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 371
361
	},
362
363
	ac_pAmmo[] =
364
	{
365
		1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
366
		1, 1, 1, 8, 8, 8, 0, 0, 4, 30, 10, 10, 15,
367
		10, 10, 60, 60, 80, 80, 60, 20, 10, 4, 3,
368
		100, 500, 5, 1, 500, 500, 36, 1, 1, 1
369
	},
370
#endif
371
372
#if AC_USE_TUNING_GARAGES
373
	ac_cPrice[] =
374
	{
375
		400, 550, 200, 250, 100, 150, 80, 500, 500, 200, 1000, 220, 250, 100, 400,
376
		500, 200, 500, 350, 300, 250, 200, 150, 350, 50, 1000, 480, 480, 770, 680, 370,
377
		370, 170, 120, 790, 150, 500, 690, 190, 390, 500, 390, 1000, 500, 500, 510, 710,
378
		670, 530, 810, 620, 670, 530, 130, 210, 230, 520, 430, 620, 720, 530, 180, 550, 430,
379
		830, 850, 750, 250, 200, 550, 450, 550, 450, 1100, 1030, 980, 1560, 1620, 1200,
380
		1030, 900, 1230, 820, 1560, 1350, 770, 100, 1500, 150, 650, 450, 100, 750,
381
		350, 450, 350, 1000, 620, 1140, 1000, 940, 780, 830, 3250, 1610, 1540, 780, 780, 780,
382
		1610, 1540, 0, 0, 3340, 3250, 2130, 2050, 2040, 780, 940, 780, 940, 780, 860,
383
		780, 1120, 3340, 3250, 3340, 1650, 3380, 3290, 1590, 830, 800, 1500, 1000, 800,
384
		580, 470, 870, 980, 150, 150, 100, 100, 490, 600, 890, 1000, 1090, 840, 910,
385
		1200, 1030, 1030, 920, 930, 550, 1050, 1050, 950, 650, 450, 550, 850, 950,
386
		850, 950, 970, 880, 990, 900, 950, 1000, 900, 1000, 900, 2050, 2150, 2130,
387
		2050, 2130, 2040, 2150, 2040, 2095, 2175, 2080, 2200, 1200, 1040, 940, 1100
388
	},
389
#endif
390
391
#if AC_USE_AMMUNATIONS
392
	ac_AmmuNationInfo[][] =
393
	{
394
		{200, 30}, {600, 30}, {1200, 15},
395
		{600, 15}, {800, 12}, {1000, 10},
396
		{500, 60}, {2000, 90}, {3500, 120},
397
		{4500, 150}, {300, 60}
398
	},
399
400
	Float:ac_AmmuNations[][] =
401
	{
402
		{296.5541, -38.5138, 1001.5156},
403
		{295.7008, -80.8109, 1001.5156},
404
		{290.1963, -109.7721, 1001.5156},
405
		{312.2592, -166.1385, 999.601}
406
	},
407
#endif
408
409
#if AC_USE_RESTAURANTS
410
	Float:ac_Restaurants[][] =
411
	{
412
		{374.0, -119.641, 1001.4922},
413
		{368.789, -6.857, 1001.8516},
414
		{375.566, -68.222, 1001.5151}
415
	},
416
#endif
417
418
#if AC_USE_PAYNSPRAY
419
	Float:ac_PayNSpray[][] =
420
	{
421
		{2064.2842, -1831.4736, 13.5469},
422
		{-2425.7822, 1021.1392, 50.3977},
423
		{-1420.5195, 2584.2305, 55.8433},
424
		{487.6401, -1739.9479, 11.1385},
425
		{1024.8651, -1024.087, 32.1016},
426
		{-1904.7019, 284.5968, 41.0469},
427
		{1975.2384, 2162.5088, 11.0703},
428
		{2393.4456, 1491.5537, 10.5616},
429
		{720.0854, -455.2807, 16.3359},
430
		{-99.9417, 1117.9048, 19.7417}
431
	},
432
#endif
433
434
#if AC_USE_VENDING_MACHINES
435
	Float:ac_vMachines[][] =
436
	{
437
		{-862.82, 1536.6, 21.98},
438
		{2271.72, -76.46, 25.96},
439
		{1277.83, 372.51, 18.95},
440
		{662.42, -552.16, 15.71},
441
		{201.01, -107.61, 0.89},
442
		{-253.74, 2597.95, 62.24},
443
		{-253.74, 2599.75, 62.24},
444
		{-76.03, 1227.99, 19.12},
445
		{-14.7, 1175.35, 18.95},
446
		{-1455.11, 2591.66, 55.23},
447
		{2352.17, -1357.15, 23.77},
448
		{2325.97, -1645.13, 14.21},
449
		{2139.51, -1161.48, 23.35},
450
		{2153.23, -1016.14, 62.23},
451
		{1928.73, -1772.44, 12.94},
452
		{1154.72, -1460.89, 15.15},
453
		{2480.85, -1959.27, 12.96},
454
		{2060.11, -1897.64, 12.92},
455
		{1729.78, -1943.04, 12.94},
456
		{1634.1, -2237.53, 12.89},
457
		{1789.21, -1369.26, 15.16},
458
		{-2229.18, 286.41, 34.7},
459
		{2319.99, 2532.85, 10.21},
460
		{2845.72, 1295.04, 10.78},
461
		{2503.14, 1243.69, 10.21},
462
		{2647.69, 1129.66, 10.21},
463
		{-2420.21, 984.57, 44.29},
464
		{-2420.17, 985.94, 44.29},
465
		{2085.77, 2071.35, 10.45},
466
		{1398.84, 2222.6, 10.42},
467
		{1659.46, 1722.85, 10.21},
468
		{1520.14, 1055.26, 10.0},
469
		{-1980.78, 142.66, 27.07},
470
		{-2118.96, -423.64, 34.72},
471
		{-2118.61, -422.41, 34.72},
472
		{-2097.27, -398.33, 34.72},
473
		{-2092.08, -490.05, 34.72},
474
		{-2063.27, -490.05, 34.72},
475
		{-2005.64, -490.05, 34.72},
476
		{-2034.46, -490.05, 34.72},
477
		{-2068.56, -398.33, 34.72},
478
		{-2039.85, -398.33, 34.72},
479
		{-2011.14, -398.33, 34.72},
480
		{-1350.11, 492.28, 10.58},
481
		{-1350.11, 493.85, 10.58},
482
		{2222.36, 1602.64, 1000.06},
483
		{2222.2, 1606.77, 1000.05},
484
		{2155.9, 1606.77, 1000.05},
485
		{2155.84, 1607.87, 1000.06},
486
		{2209.9, 1607.19, 1000.05},
487
		{2202.45, 1617.0, 1000.06},
488
		{2209.24, 1621.21, 1000.06},
489
		{2576.7, -1284.43, 1061.09},
490
		{330.67, 178.5, 1020.07},
491
		{331.92, 178.5, 1020.07},
492
		{350.9, 206.08, 1008.47},
493
		{361.56, 158.61, 1008.47},
494
		{371.59, 178.45, 1020.07},
495
		{374.89, 188.97, 1008.47},
496
		{-19.03, -57.83, 1003.63},
497
		{-36.14, -57.87, 1003.63},
498
		{316.87, -140.35, 998.58},
499
		{2225.2, -1153.42, 1025.9},
500
		{-15.1, -140.22, 1003.63},
501
		{-16.53, -140.29, 1003.63},
502
		{-35.72, -140.22, 1003.63},
503
		{373.82, -178.14, 1000.73},
504
		{379.03, -178.88, 1000.73},
505
		{495.96, -24.32, 1000.73},
506
		{500.56, -1.36, 1000.73},
507
		{501.82, -1.42, 1000.73},
508
		{-33.87, -186.76, 1003.63},
509
		{-32.44, -186.69, 1003.63},
510
		{-16.11, -91.64, 1003.63},
511
		{-17.54, -91.71, 1003.63}
512
	},
513
#endif
514
515
#if AC_USE_CASINOS
516
	Float:ac_Casinos[][] =
517
	{
518
		{2241.2878, 1617.1624, 1006.1797, 2.0},
519
		{2240.9736, 1604.6592, 1006.1797, 6.0},
520
		{2242.5427, 1592.8726, 1006.1836, 6.0},
521
		{2230.2124, 1592.1426, 1006.1832, 6.0},
522
		{2230.4717, 1604.484, 1006.186, 6.0},
523
		{2230.3298, 1616.9272, 1006.1799, 3.0},
524
		{2251.9407, 1586.1736, 1006.186, 1.0},
525
		{2218.6785, 1587.3448, 1006.1749, 1.0},
526
		{2219.2773, 1591.7467, 1006.1867, 1.0},
527
		{2218.5408, 1589.3229, 1006.184, 1.0},
528
		{2218.6477, 1593.6279, 1006.1797, 1.0},
529
		{2221.926, 1603.8285, 1006.1797, 1.0},
530
		{2218.5095, 1603.8385, 1006.1797, 1.0},
531
		{2219.9597, 1603.9216, 1006.1797, 1.0},
532
		{2216.3054, 1603.7996, 1006.1819, 1.0},
533
		{2218.731, 1619.8046, 1006.1794, 1.0},
534
		{2218.9407, 1617.8413, 1006.1821, 1.0},
535
		{2218.668, 1615.4681, 1006.1797, 1.0},
536
		{2218.6418, 1613.2629, 1006.1797, 1.0},
537
		{2252.4272, 1589.8412, 1006.1797, 5.0},
538
		{2252.4229, 1596.6169, 1006.1797, 5.0},
539
		{2255.1565, 1608.8784, 1006.186, 1.0},
540
		{2254.8496, 1610.8605, 1006.1797, 1.0},
541
		{2255.2917, 1612.9167, 1006.1797, 1.0},
542
		{2255.033, 1614.8892, 1006.1797, 1.0},
543
		{2255.1213, 1616.8284, 1006.1797, 1.0},
544
		{2255.2161, 1618.8005, 1006.1797, 1.0},
545
		{2268.5281, 1606.4894, 1006.1797, 1.0},
546
		{2270.4922, 1606.8539, 1006.1797, 1.0},
547
		{2272.5693, 1606.4473, 1006.1797, 1.0},
548
		{2274.5391, 1607.0122, 1006.1797, 1.0},
549
		{2271.8447, 1586.1633, 1006.1797, 1.0},
550
		{2261.4844, 1586.1724, 1006.1797, 1.0},
551
		{2257.4507, 1589.6555, 1006.1797, 5.0},
552
		{2267.8994, 1589.8672, 1006.1797, 5.0},
553
		{2262.8486, 1590.026, 1006.1797, 5.0},
554
		{2272.6458, 1589.7704, 1006.1797, 5.0},
555
		{2272.6533, 1596.5682, 1006.1797, 5.0},
556
		{2270.4895, 1596.4606, 1006.1797, 5.0},
557
		{2265.4441, 1596.4299, 1006.1797, 5.0},
558
		{2260.0308, 1596.7987, 1006.1797, 5.0},
559
		{2254.9907, 1596.241, 1006.1797, 5.0},
560
		{1956.9524, 988.2533, 992.4688, 2.0},
561
		{1961.6155, 993.0375, 992.4688, 2.0},
562
		{1963.7998, 998.4406, 992.4745, 2.0},
563
		{1936.2885, 987.1995, 992.4745, 2.0},
564
		{1944.9768, 986.3937, 992.4688, 2.0},
565
		{1940.7397, 990.9521, 992.4609, 2.0},
566
		{1940.0966, 1005.8996, 992.4688, 6.0},
567
		{1938.8785, 1014.1768, 992.4688, 6.0},
568
		{1938.8811, 1021.4434, 992.4688, 6.0},
569
		{1966.5975, 1006.6469, 992.4745, 6.0},
570
		{1966.5979, 1014.1024, 992.4688, 6.0},
571
		{1939.8351, 1029.912, 992.4688, 6.0},
572
		{1956.854, 1047.3718, 992.4688, 6.0},
573
		{1961.356, 1042.8112, 992.4688, 6.0},
574
		{1963.811, 1037.1263, 992.4745, 6.0},
575
		{1961.733, 1025.8929, 992.4688, 10.0},
576
		{1961.708, 1010.3194, 992.4688, 10.0},
577
		{1966.5989, 1029.7954, 992.4745, 6.0},
578
		{1961.4139, 1017.8281, 992.4688, 10.0},
579
		{1966.5985, 1021.7686, 992.4688, 6.0},
580
		{1128.7106, -1.9779, 1000.6797, 1.0},
581
		{1125.2388, 1.61, 1000.6797, 1.0},
582
		{1125.1249, -5.0489, 1000.6797, 1.0},
583
		{1127.4139, 3.0199, 1000.6797, 1.0},
584
		{1135.0634, -3.8695, 1000.6797, 1.0},
585
		{1135.0861, 0.6107, 1000.6797, 1.0},
586
		{1132.8943, -1.7139, 1000.6797, 1.0},
587
		{1125.3727, 3.0315, 1000.6797, 1.0},
588
		{1119.0272, -1.4916, 1000.6924, 1.0}
589
	},
590
#endif
591
592
ac_MaxPassengers[] =
593
{
594
	0x10331113, 0x11311131, 0x11331313, 0x80133301, 0x1381F110,
595
	0x10311103, 0x10001F10, 0x11113311, 0x13113311, 0x31101100,
596
	0x30002301, 0x11031311, 0x11111331, 0x10013111, 0x01131100,
597
	0x11111110, 0x11100031, 0x11130221, 0x33113311, 0x11111101,
598
	0x33101133, 0x10100550, 0x03133111, 0xFF11113F, 0x13330111,
599
	0xFF131111, 0x0000FF3F
600
},
601
602
ac_vMods[] =
603
{
604
	0x033C2700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x021A27FA, 0x00000000, 0x00FFFE00,
605
	0x00000007, 0x0003C000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
606
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x023B2785, 0x00000000, 0x00FFFE00,
607
	0x00000007, 0x00000000, 0x00000000, 0x02BC4703, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
608
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
609
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
610
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x03BA278A, 0x00000000, 0x00FFFE00,
611
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
612
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
613
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
614
	0x028E078A, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
615
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
616
	0x02310744, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
617
	0x00000007, 0x00000000, 0x00000000, 0x0228073A, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
618
	0x02BD4701, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x023A2780, 0x00000000, 0x00FFFE00,
619
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
620
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
621
	0x00000007, 0x00000000, 0x00000000, 0x0228077A, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
622
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
623
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
624
	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
625
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
626
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
627
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
628
	0x027A27CA, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
629
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
630
	0x0282278A, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
631
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
632
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
633
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
634
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
635
	0x00000000, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
636
	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
637
	0x00000000, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
638
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
639
	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
640
	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
641
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
642
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
643
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
644
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
645
	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
646
	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
647
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
648
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
649
	0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
650
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
651
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
652
	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
653
	0x00000000, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
654
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
655
	0x00000007, 0x00000000, 0x00000000, 0x023E07C0, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
656
	0x03703730, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
657
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
658
	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
659
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
660
	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
661
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
662
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
663
	0x00000007, 0x00000000, 0x00000000, 0x031D2775, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
664
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02BE4788, 0x00000000, 0x00FFFE00,
665
	0x00000007, 0x0003C000, 0x00000000, 0x02010771, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
666
	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
667
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
668
	0x029A0FCE, 0x00000000, 0x00FFFE00, 0x00000007, 0x0000C000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
669
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
670
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x03382700, 0x00000000, 0x00FFFE00,
671
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
672
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
673
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
674
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
675
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
676
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
677
	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
678
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
679
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
680
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
681
	0x00000007, 0x00000000, 0x00000000, 0x023F8795, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
682
	0x029F078C, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000, 0x029627EA, 0x00000000, 0x00FFFE00,
683
	0x00000007, 0x0003C000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
684
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
685
	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
686
	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
687
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
688
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x0236C782, 0x00000000, 0x00FFFE00,
689
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
690
	0x029E1FCA, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
691
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
692
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
693
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0xFC000437, 0x00000000, 0x021C0000,
694
	0x02000700, 0x00000000, 0x00FFFE00, 0x03FE6007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
695
	0x00001B87, 0x00000001, 0x01E00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
696
	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
697
	0x00000007, 0x00000000, 0x00000000, 0x039E07D2, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
698
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x023CC700, 0x00000000, 0x00FFFE00,
699
	0x00000007, 0x00030000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
700
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
701
	0x00000007, 0x00000000, 0x00000000, 0x038E07D6, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
702
	0x023D0709, 0x00000000, 0x00FFFE00, 0x00000007, 0x0000C000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
703
	0x00000007, 0x00000000, 0x00000000, 0x029E1F8A, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
704
	0x029C077A, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000, 0x02BD076C, 0x00000000, 0x00FFFE00,
705
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
706
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
707
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
708
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
709
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0xFFFFFE00, 0x00000007, 0x00000000, 0x000001F8,
710
	0x02000700, 0x00000000, 0x00FFFFFE, 0x00000007, 0xC0000000, 0x00002007, 0xFE000700, 0x00000003, 0x00FFFE00,
711
	0x00000007, 0x00003C00, 0x00000600, 0xCE000700, 0xFF800000, 0x00FFFE01, 0x00000007, 0x3C000000, 0x00000000,
712
	0x02000700, 0x000003FC, 0x00FFFE00, 0x00000007, 0x003C0000, 0x00001800, 0x02000700, 0x00000000, 0x00FFFE00,
713
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
714
	0x02000700, 0x007FE000, 0x00FFFE00, 0x00000007, 0x03C00000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
715
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000047, 0x0000003E, 0x3C000000,
716
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
717
	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
718
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
719
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
720
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00001C00, 0x00FFFE00,
721
	0x0000000F, 0x00000000, 0x0003C000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x000003C0, 0xC0000000,
722
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
723
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
724
	0x029607C2, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
725
	0x00000000, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
726
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
727
	0x00000007, 0x00000000, 0x00000000, 0x03FFE7CF, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
728
	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
729
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
730
	0x031727F1, 0x00000000, 0x00FFFE00, 0x00000007, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
731
	0x00000000, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
732
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
733-
static stock const Float:ac_wRange[] =
733+
734
	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
735
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
736
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
737
	0x00000007, 0x00000000, 0x00000000, 0x025627F0, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
738
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
739
	0x00000007, 0x00000000, 0x00000000, 0x039E07C2, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
740
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
741
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
742
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
743
	0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
744
	0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000, 0x02000700, 0x00000000, 0x00FFFE00,
745
	0x00000007, 0x00000000, 0x00000000
746
};
747
748
static stock const Float:ac_wMinRange[] =
749
{
750
	25.0, 25.0, 25.0, 30.0, 25.0, 35.0,
751
	25.0, 35.0, 40.0, 40.0, 25.0, 55.0,
752
	50.0, 50.0, 50.0, 4.0, 65.0
753
};
754
755
enum acInfo
756
{
757
	Float:acPosX,
758
	Float:acPosY,
759
	Float:acPosZ,
760
	Float:acDropJpX,
761
	Float:acDropJpY,
762
	Float:acDropJpZ,
763
	Float:acSpawnPosX,
764
	Float:acSpawnPosY,
765
	Float:acSpawnPosZ,
766
	Float:acSetVehHealth,
767
	Float:acLastPosX,
768
	Float:acLastPosY,
769
	Float:acSetPosX,
770
	Float:acSetPosY,
771
	Float:acSetPosZ,
772
	acSpeed,
773
	acHealth,
774
	acArmour,
775
	acMoney,
776
	acLastShot,
777
	acLastWeapon,
778
	acEnterSeat,
779
	acEnterVeh,
780
	acKickVeh,
781
	acVeh,
782
	acSeat,
783
	acDialog,
784
	acNextDialog,
785
	acInt,
786
	acAnim,
787
	acDmgRes,
788
	acSpecAct,
789
	acNextSpecAct,
790
	acLastSpecAct,
791-
	acIssuerID,
791+
792
	acReloadTick,
793
	acShotTick,
794
	acSpawnTick,
795
	acTimerTick,
796
	acSetPosTick,
797
	acUpdateTick,
798
	acEnterVehTick,
799
	acSpawnWeapon1,
800
	acSpawnWeapon2,
801
	acSpawnWeapon3,
802
	acSpawnAmmo1,
803
	acSpawnAmmo2,
804
	acSpawnAmmo3,
805
	acSpawnRes,
806
	acTimerID,
807
	acKickTimerID,
808
	acParachute,
809
	acIntRet,
810
	acKicked,
811
	acIp[16],
812
	acSet[13],
813
	acGtc[20],
814
	acWeapon[13],
815
	acAmmo[13],
816
	acSetWeapon[13],
817
	acGiveAmmo[13],
818
	acGtcSetWeapon[13],
819
	acGtcGiveAmmo[13],
820
	acNOPCount[12],
821
	acCheatCount[22],
822
	acCall[sizeof ac_Mtfc],
823
	acFloodCount[sizeof ac_Mtfc],
824
	bool:acNOPAllow[sizeof ac_NOPAllow],
825
	bool:acACAllow[sizeof ac_ACAllow],
826
	bool:acStuntBonus,
827
	bool:acModShop,
828
	bool:acUnFrozen,
829
	bool:acOnline,
830
	bool:acDeathRes,
831
	bool:acVehDmgRes,
832
	bool:acSpawned,
833
	bool:acDead,
834
	bool:acTpToZ,
835
	bool:acIntEnterExits,
836
	bool:acSpec
837
}
838
839
enum acVehInfo
840
{
841
	Float:acVelX,
842
	Float:acVelY,
843
	Float:acVelZ,
844
	Float:acPosX,
845
	Float:acPosY,
846
	Float:acPosZ,
847
	Float:acSpawnPosX,
848
	Float:acSpawnPosY,
849
	Float:acSpawnPosZ,
850
	Float:acSpawnZAngle,
851
	Float:acPosDiff,
852
	Float:acZAngle,
853
	Float:acHealth,
854
	acLastSpeed,
855
	acSpeedDiff,
856
	acDriver,
857
	acInt,
858
	acPaintJob,
859
	bool:acSpawned
860
}
861-
	ac_sInfo[6],
861+
862
enum acPickInfo
863
{
864
	Float:acPosX,
865
	Float:acPosY,
866
	Float:acPosZ,
867
	acType,
868
	acWeapon
869
}
870
871
static
872
	Float:ac_ClassPos[AC_MAX_CLASSES][3],
873
	ac_ClassWeapon[AC_MAX_CLASSES][3][2],
874
875
	#if AC_USE_STATISTICS
876
		ac_sInfo[6],
877
	#endif
878
879
	ACInfo[MAX_PLAYERS][acInfo],
880
	ACVehInfo[MAX_VEHICLES][acVehInfo],
881
	ACPickInfo[MAX_PICKUPS][acPickInfo],
882
883
	bool:ac_IntEnterExits = true,
884
	bool:ac_StuntBonus = true,
885
	bool:ac_LagCompMode,
886
	#if !AC_USE_QUERY
887
		bool:ac_QueryEnable,
888
	#endif
889
	bool:ac_RconEnable,
890
	bool:ac_PedAnims;
891
892
static stock bool:ac_VehFriendlyFire;
893
894
ac_fpublic ac_AddStaticVehicle(vehicleid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle)
895
{
896
	ACVehInfo[vehicleid][acInt] =
897
	ACVehInfo[vehicleid][acLastSpeed] =
898
	ACVehInfo[vehicleid][acSpeedDiff] = 0;
899
	ACVehInfo[vehicleid][acPaintJob] = 3;
900
	ACVehInfo[vehicleid][acSpawned] = true;
901
	ACVehInfo[vehicleid][acHealth] = 1000.0;
902
	ACVehInfo[vehicleid][acPosDiff] =
903
	ACVehInfo[vehicleid][acVelX] =
904
	ACVehInfo[vehicleid][acVelY] =
905
	ACVehInfo[vehicleid][acVelZ] = 0.0;
906
	ACVehInfo[vehicleid][acSpawnPosX] =
907
	ACVehInfo[vehicleid][acPosX] = spawn_x;
908
	ACVehInfo[vehicleid][acSpawnPosY] =
909
	ACVehInfo[vehicleid][acPosY] = spawn_y;
910
	ACVehInfo[vehicleid][acSpawnPosZ] =
911
	ACVehInfo[vehicleid][acPosZ] = spawn_z;
912
	ACVehInfo[vehicleid][acSpawnZAngle] =
913
	ACVehInfo[vehicleid][acZAngle] = z_angle;
914
	ACVehInfo[vehicleid][acDriver] = INVALID_PLAYER_ID;
915
	return 1;
916
}
917
918
ac_fpublic ac_CreateVehicle(vehicleid, ac_vehicletype, Float:x, Float:y, Float:z, Float:rotation)
919
{
920
	ACVehInfo[vehicleid][acInt] =
921
	ACVehInfo[vehicleid][acLastSpeed] =
922
	ACVehInfo[vehicleid][acSpeedDiff] = 0;
923
	ACVehInfo[vehicleid][acPaintJob] = 3;
924
	ACVehInfo[vehicleid][acHealth] = 1000.0;
925
	ACVehInfo[vehicleid][acPosDiff] =
926
	ACVehInfo[vehicleid][acVelX] =
927
	ACVehInfo[vehicleid][acVelY] =
928
	ACVehInfo[vehicleid][acVelZ] = 0.0;
929
	ACVehInfo[vehicleid][acSpawnPosX] =
930
	ACVehInfo[vehicleid][acPosX] = x;
931
	ACVehInfo[vehicleid][acSpawnPosY] =
932
	ACVehInfo[vehicleid][acPosY] = y;
933
	ACVehInfo[vehicleid][acSpawnPosZ] =
934
	ACVehInfo[vehicleid][acPosZ] = z;
935
	ACVehInfo[vehicleid][acSpawnZAngle] =
936
	ACVehInfo[vehicleid][acZAngle] = rotation;
937
	if(!(569 <= ac_vehicletype <= 570)) ACVehInfo[vehicleid][acSpawned] = true;
938
	ACVehInfo[vehicleid][acDriver] = INVALID_PLAYER_ID;
939
	return 1;
940
}
941
942
ac_fpublic ac_AddPlayerClass(ac_classid, Float:ac_spawn_x, Float:ac_spawn_y, Float:ac_spawn_z, ac_weapon1, ac_weapon1_ammo, ac_weapon2, ac_weapon2_ammo, ac_weapon3, ac_weapon3_ammo)
943
{
944
	if(0 <= ac_classid < AC_MAX_CLASSES)
945
	{
946
		#undef AC_MAX_CLASSES
947
		ac_ClassPos[ac_classid][0] = ac_spawn_x;
948
		ac_ClassPos[ac_classid][1] = ac_spawn_y;
949
		ac_ClassPos[ac_classid][2] = ac_spawn_z;
950
		ac_ClassWeapon[ac_classid][0][0] = ac_weapon1;
951
		ac_ClassWeapon[ac_classid][0][1] = ac_weapon1_ammo;
952
		ac_ClassWeapon[ac_classid][1][0] = ac_weapon2;
953
		ac_ClassWeapon[ac_classid][1][1] = ac_weapon2_ammo;
954
		ac_ClassWeapon[ac_classid][2][0] = ac_weapon3;
955
		ac_ClassWeapon[ac_classid][2][1] = ac_weapon3_ammo;
956
	}
957
	return 1;
958
}
959
960
ac_fpublic ac_SetSpawnInfo(playerid, ac_team, ac_skin, Float:ac_x, Float:ac_y, Float:ac_z, Float:ac_rotation, ac_weapon1, ac_weapon1_ammo, ac_weapon2, ac_weapon2_ammo, ac_weapon3, ac_weapon3_ammo)
961
{
962
	if(!SetSpawnInfo(playerid, ac_team, ac_skin, ac_x, ac_y, ac_z, ac_rotation, ac_weapon1, ac_weapon1_ammo, ac_weapon2, ac_weapon2_ammo, ac_weapon3, ac_weapon3_ammo)) return 0;
963
	ACInfo[playerid][acSpawnPosX] = ac_x;
964
	ACInfo[playerid][acSpawnPosY] = ac_y;
965
	ACInfo[playerid][acSpawnPosZ] = ac_z;
966
	ACInfo[playerid][acSpawnWeapon1] = ac_weapon1;
967
	ACInfo[playerid][acSpawnAmmo1] = ac_weapon1_ammo;
968
	ACInfo[playerid][acSpawnWeapon2] = ac_weapon2;
969
	ACInfo[playerid][acSpawnAmmo2] = ac_weapon2_ammo;
970
	ACInfo[playerid][acSpawnWeapon3] = ac_weapon3;
971
	ACInfo[playerid][acSpawnAmmo3] = ac_weapon3_ammo;
972
	return 1;
973
}
974
975
ac_fpublic ac_AddStaticPickup(pickupid, ac_model, ac_type, Float:ac_X, Float:ac_Y, Float:ac_Z)
976
{
977
	#if AC_USE_PICKUP_WEAPONS
978
		ACPickInfo[pickupid][acWeapon] = 0;
979
		switch(ac_type)
980
		{
981
			case 2, 3, 15, 22:
982
			{
983
				switch(ac_model)
984
				{
985
					case 370: ACPickInfo[pickupid][acType] = 2;
986
					case 1240: ACPickInfo[pickupid][acType] = 3;
987
					case 1242: ACPickInfo[pickupid][acType] = 4;
988
					case 321..326, 331, 333..339, 341..353, 355..369, 371, 372:
989
					{
990
						for(new ac_i = 46; ac_i >= 0; --ac_i)
991
						{
992
							if(ac_wModel[ac_i] == ac_model)
993
							{
994
								ACPickInfo[pickupid][acType] = 1;
995
								ACPickInfo[pickupid][acWeapon] = ac_i;
996
								break;
997
							}
998
						}
999
					}
1000
				}
1001
			}
1002
		}
1003
	#endif
1004
	ACPickInfo[pickupid][acPosX] = ac_X;
1005
	ACPickInfo[pickupid][acPosY] = ac_Y;
1006
	ACPickInfo[pickupid][acPosZ] = ac_Z;
1007
	return 1;
1008
}
1009
1010
ac_fpublic ac_CreatePickup(pickupid, ac_model, ac_type, Float:ac_X, Float:ac_Y, Float:ac_Z)
1011
{
1012
	#if AC_USE_PICKUP_WEAPONS
1013
		ACPickInfo[pickupid][acWeapon] = 0;
1014
		switch(ac_type)
1015
		{
1016
			case 2, 3, 15, 22:
1017
			{
1018
				switch(ac_model)
1019
				{
1020
					case 370: ACPickInfo[pickupid][acType] = 2;
1021
					case 1240: ACPickInfo[pickupid][acType] = 3;
1022
					case 1242: ACPickInfo[pickupid][acType] = 4;
1023
					case 321..326, 331, 333..339, 341..353, 355..369, 371, 372:
1024
					{
1025
						for(new ac_i = 46; ac_i >= 0; --ac_i)
1026
						{
1027
							if(ac_wModel[ac_i] == ac_model)
1028
							{
1029
								ACPickInfo[pickupid][acType] = 1;
1030
								ACPickInfo[pickupid][acWeapon] = ac_i;
1031
								break;
1032
							}
1033
						}
1034
					}
1035
				}
1036
			}
1037
		}
1038
	#endif
1039
	ACPickInfo[pickupid][acPosX] = ac_X;
1040
	ACPickInfo[pickupid][acPosY] = ac_Y;
1041
	ACPickInfo[pickupid][acPosZ] = ac_Z;
1042
	return 1;
1043
}
1044
1045
#if AC_USE_PICKUP_WEAPONS\
1046
	&& defined Streamer_SetIntData
1047
	#if defined STREAMER_ENABLE_TAGS
1048
		ac_fpublic ac_CreateDynamicPickup(STREAMER_TAG_PICKUP:pickupid, ac_modelid, ac_type)
1049
	#else
1050
		ac_fpublic ac_CreateDynamicPickup(pickupid, ac_modelid, ac_type)
1051
	#endif
1052
	{
1053
		Streamer_SetIntData(STREAMER_TYPE_PICKUP, pickupid, E_STREAMER_EXTRA_ID, 0);
1054
		switch(ac_type)
1055
		{
1056
			case 2, 3, 15, 22:
1057
			{
1058
				switch(ac_modelid)
1059
				{
1060
					case 370: Streamer_SetIntData(STREAMER_TYPE_PICKUP, pickupid, E_STREAMER_EXTRA_ID, 2);
1061
					case 1240: Streamer_SetIntData(STREAMER_TYPE_PICKUP, pickupid, E_STREAMER_EXTRA_ID, 3);
1062
					case 1242: Streamer_SetIntData(STREAMER_TYPE_PICKUP, pickupid, E_STREAMER_EXTRA_ID, 4);
1063
					case 321..326, 331, 333..339, 341..353, 355..369, 371, 372:
1064
					{
1065
						for(new ac_i = 46; ac_i >= 0; --ac_i)
1066
						{
1067
							if(ac_wModel[ac_i] == ac_modelid)
1068
							{
1069
								Streamer_SetIntData(STREAMER_TYPE_PICKUP, pickupid, E_STREAMER_EXTRA_ID, ac_i + 100);
1070
								break;
1071
							}
1072
						}
1073
					}
1074
				}
1075
			}
1076
		}
1077
		return 1;
1078
	}
1079
#endif
1080
1081
#if defined Streamer_UpdateEx
1082
	stock ac_Streamer_UpdateEx(playerid, Float:x, Float:y, Float:z, worldid = -1, interiorid = -1, type = -1, compensatedtime = -1, freezeplayer = 1)
1083
	{
1084
		if(!Streamer_UpdateEx(playerid, x, y, z, worldid, interiorid, type, compensatedtime, freezeplayer)) return 0;
1085
		if(compensatedtime >= 0)
1086
		{
1087
			ACInfo[playerid][acSet][8] = 4;
1088
			ACInfo[playerid][acNOPCount][10] = 0;
1089
			ACInfo[playerid][acSetPosX] = x;
1090
			ACInfo[playerid][acSetPosY] = y;
1091
			ACInfo[playerid][acSetPosZ] = z;
1092
			ACInfo[playerid][acSetPosTick] =
1093
			ACInfo[playerid][acGtc][11] = GetTickCount() + 3250;
1094
		}
1095
		return 1;
1096
	}
1097
1098
	#if defined _ALS_Streamer_UpdateEx
1099
		#undef Streamer_UpdateEx
1100
	#else
1101
		#define _ALS_Streamer_UpdateEx
1102
	#endif
1103
	#define Streamer_UpdateEx ac_Streamer_UpdateEx
1104
#endif
1105
1106
stock ac_GetPlayerVersion(playerid, version[], len)
1107
{
1108
	new ac_ret = GetPlayerVersion(playerid, version, len);
1109
	for(new ac_i = ac_ret - 1; ac_i >= 0; --ac_i)
1110
	{
1111
		if(version[ac_i] == '%')
1112
		{
1113
			strdel(version, ac_i, ac_i + 1);
1114
			ac_ret--;
1115
		}
1116
	}
1117
	return ac_ret;
1118
}
1119
1120
#if defined _ALS_GetPlayerVersion
1121
	#undef GetPlayerVersion
1122
#else
1123
	#define _ALS_GetPlayerVersion
1124
#endif
1125
#define GetPlayerVersion ac_GetPlayerVersion
1126
1127
stock ac_GetPlayerFacingAngle(playerid, &Float:ang)
1128
{
1129
	if(!GetPlayerFacingAngle(playerid, ang)) return 0;
1130
	if(ang != ang) ang = 0.0;
1131
	ang = ac_AbsoluteAngle(ang);
1132
	return 1;
1133
}
1134
1135
#if defined _ALS_GetPlayerFacingAngle
1136
	#undef GetPlayerFacingAngle
1137
#else
1138
	#define _ALS_GetPlayerFacingAngle
1139
#endif
1140
#define GetPlayerFacingAngle ac_GetPlayerFacingAngle
1141
1142
stock ac_GetVehicleZAngle(vehicleid, &Float:z_angle)
1143
{
1144
	if(!GetVehicleZAngle(vehicleid, z_angle)) return 0;
1145
	if(z_angle != z_angle) z_angle = 0.0;
1146
	z_angle = ac_AbsoluteAngle(z_angle);
1147
	#undef ac_AbsoluteAngle
1148
	return 1;
1149
}
1150
1151
#if defined _ALS_GetVehicleZAngle
1152
	#undef GetVehicleZAngle
1153
#else
1154
	#define _ALS_GetVehicleZAngle
1155
#endif
1156
#define GetVehicleZAngle ac_GetVehicleZAngle
1157
1158
ac_fpublic ac_DestroyVehicle(vehicleid)
1159
{
1160
	if(!DestroyVehicle(vehicleid)) return 0;
1161
	ACVehInfo[vehicleid][acSpawned] = false;
1162
	return 1;
1163
}
1164
1165
ac_fpublic ac_DestroyPickup(pickupid)
1166
{
1167
	if(!DestroyPickup(pickupid)) return 0;
1168
	ACPickInfo[pickupid][acType] = 0;
1169
	return 1;
1170
}
1171
1172
ac_fpublic ac_DisableInteriorEnterExits()
1173
{
1174
	ac_IntEnterExits = false;
1175
	return DisableInteriorEnterExits();
1176
}
1177
1178
ac_fpublic ac_UsePlayerPedAnims()
1179
{
1180
	ac_PedAnims = true;
1181
	return UsePlayerPedAnims();
1182
}
1183
1184
#if defined EnableVehicleFriendlyFire
1185
	ac_fpublic ac_EnableVehicleFriendlyFire()
1186
	{
1187
		ac_VehFriendlyFire = true;
1188
		return EnableVehicleFriendlyFire();
1189
	}
1190
#endif
1191
1192
ac_fpublic ac_EnableStuntBonusForAll(enable)
1193
{
1194
	ac_StuntBonus = !!enable;
1195
	#if defined foreach
1196
		foreach(new ac_i : Player) ACInfo[ac_i][acStuntBonus] = ac_StuntBonus;
1197
	#else
1198
		#if defined GetPlayerPoolSize
1199
			for(new ac_i = GetPlayerPoolSize(); ac_i >= 0; --ac_i)
1200
		#else
1201
			for(new ac_i = MAX_PLAYERS - 1; ac_i >= 0; --ac_i)
1202
		#endif
1203
		{
1204
			if(IsPlayerConnected(ac_i)) ACInfo[ac_i][acStuntBonus] = ac_StuntBonus;
1205
		}
1206
	#endif
1207
	return EnableStuntBonusForAll(enable);
1208
}
1209
1210
ac_fpublic ac_EnableStuntBonusForPlayer(playerid, enable)
1211
{
1212
	if(!EnableStuntBonusForPlayer(playerid, enable)) return 0;
1213
	ACInfo[playerid][acStuntBonus] = !!enable;
1214
	return 1;
1215
}
1216
1217
ac_fpublic ac_ShowPlayerDialog(playerid, ac_dialogid)
1218
{
1219
	ACInfo[playerid][acDialog] = ac_dialogid;
1220
	return 1;
1221
}
1222
1223
ac_fpublic ac_fs_ShowPlayerDialog(playerid, ac_dialogid)
1224
{
1225
	ACInfo[playerid][acNextDialog] = ac_dialogid;
1226
	return 1;
1227
}
1228
1229
ac_fpublic ac_TogglePlayerControllable(playerid, toggle)
1230
{
1231
	if(!TogglePlayerControllable(playerid, toggle)) return 0;
1232
	ACInfo[playerid][acUnFrozen] = !!toggle;
1233
	return 1;
1234
}
1235
1236
ac_fpublic ac_TogglePlayerSpectating(playerid, toggle)
1237
{
1238
	if(!TogglePlayerSpectating(playerid, toggle)) return 0;
1239
	if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING || ACInfo[playerid][acSet][6] != -1)
1240
	{
1241
		if(!toggle)
1242
		{
1243
			if(ACInfo[playerid][acDead]) ACInfo[playerid][acSet][7] = 4;
1244
			else
1245
			{
1246
				ACInfo[playerid][acSet][3] =
1247
				ACInfo[playerid][acSet][4] =
1248
				ACInfo[playerid][acSet][6] =
1249
				ACInfo[playerid][acSet][8] =
1250
				ACInfo[playerid][acSet][9] =
1251
				ACInfo[playerid][acNextSpecAct] = -1;
1252
				for(new ac_i = 12; ac_i >= 0; --ac_i)
1253
				{
1254
					ACInfo[playerid][acSetWeapon][ac_i] = -1;
1255
					ACInfo[playerid][acGiveAmmo][ac_i] = -65535;
1256
				}
1257
				ACInfo[playerid][acTpToZ] = false;
1258
				ACInfo[playerid][acUnFrozen] = true;
1259
				ACInfo[playerid][acSet][7] = 1;
1260
			}
1261
			ACInfo[playerid][acSpawnRes]++;
1262
			ACInfo[playerid][acSpec] = false;
1263
			ACInfo[playerid][acSpawnTick] = ACInfo[playerid][acNOPCount][9] = 0;
1264
			ACInfo[playerid][acGtc][13] = GetTickCount() + 2650;
1265
		}
1266
	}
1267
	else if(toggle)
1268
	{
1269
		ACInfo[playerid][acSet][6] = 1;
1270
		ACInfo[playerid][acNOPCount][8] = 0;
1271
		ACInfo[playerid][acGtc][12] = GetTickCount() + 2650;
1272
	}
1273
	return 1;
1274
}
1275
1276
ac_fpublic ac_SpawnPlayer(playerid)
1277
{
1278
	if(!SpawnPlayer(playerid)) return 0;
1279
	if(ACInfo[playerid][acDead]) ACInfo[playerid][acSet][7] = 5;
1280
	else
1281
	{
1282
		ACInfo[playerid][acSet][3] =
1283
		ACInfo[playerid][acSet][4] =
1284
		ACInfo[playerid][acSet][8] =
1285
		ACInfo[playerid][acSet][9] =
1286
		ACInfo[playerid][acNextSpecAct] = -1;
1287
		for(new ac_i = 12; ac_i >= 0; --ac_i)
1288
		{
1289
			ACInfo[playerid][acSetWeapon][ac_i] = -1;
1290
			ACInfo[playerid][acGiveAmmo][ac_i] = -65535;
1291
		}
1292
		ACInfo[playerid][acTpToZ] = false;
1293
		ACInfo[playerid][acUnFrozen] = true;
1294
		ACInfo[playerid][acSet][7] = 2;
1295
	}
1296
	ACInfo[playerid][acSpawnRes]++;
1297
	ACInfo[playerid][acSpawnTick] = ACInfo[playerid][acNOPCount][9] = 0;
1298
	ACInfo[playerid][acGtc][13] = GetTickCount() + 2650;
1299
	return 1;
1300
}
1301
1302
ac_fpublic ac_SetPlayerHealth(playerid, Float:ac_health)
1303
{
1304
	if(!SetPlayerHealth(playerid, ac_health)) return 0;
1305
	if(ac_health < 0.0) ac_health = 0.0;
1306
	ACInfo[playerid][acNOPCount][3] = 0;
1307
	ACInfo[playerid][acSet][1] = floatround(ac_health, floatround_tozero);
1308
	ACInfo[playerid][acGtc][3] = GetTickCount() + 2650;
1309
	return 1;
1310
}
1311
1312
ac_fpublic ac_SetPlayerArmour(playerid, Float:ac_armour)
1313
{
1314
	if(!SetPlayerArmour(playerid, ac_armour)) return 0;
1315
	if(ac_armour < 0.0) ac_armour = 0.0;
1316
	ACInfo[playerid][acNOPCount][5] = 0;
1317
	ACInfo[playerid][acSet][2] = floatround(ac_armour, floatround_tozero);
1318
	ACInfo[playerid][acGtc][5] = GetTickCount() + 2650;
1319
	return 1;
1320
}
1321
1322
ac_fpublic ac_GivePlayerWeapon(playerid, ac_weaponid, ac_ammo)
1323
{
1324
	if(0 <= ac_weaponid <= 18 || 22 <= ac_weaponid <= 46)
1325
	{
1326
		new ac_s = ac_wSlot[ac_weaponid];
1327
		ACInfo[playerid][acNOPCount][0] = ACInfo[playerid][acNOPCount][1] = 0;
1328
		if(16 <= ac_weaponid <= 18 || 22 <= ac_weaponid <= 43)
1329
		{
1330
			if(3 <= ac_s <= 5 || (ACInfo[playerid][acSetWeapon][ac_s] == -1
1331
			? ACInfo[playerid][acWeapon][ac_s] : ACInfo[playerid][acSetWeapon][ac_s]) == ac_weaponid)
1332
			{
1333
				ACInfo[playerid][acGiveAmmo][ac_s] =
1334
				(ACInfo[playerid][acGiveAmmo][ac_s] == -65535 ? ACInfo[playerid][acAmmo][ac_s]
1335
				: ACInfo[playerid][acGiveAmmo][ac_s]) + ac_ammo;
1336
			}
1337
			else ACInfo[playerid][acGiveAmmo][ac_s] = ac_ammo;
1338
			if(ACInfo[playerid][acGiveAmmo][ac_s] < -32768) ac_ammo = ACInfo[playerid][acGiveAmmo][ac_s] = -32768;
1339
			else if(ACInfo[playerid][acGiveAmmo][ac_s] > 32767) ac_ammo = ACInfo[playerid][acGiveAmmo][ac_s] = 32767;
1340
			ACInfo[playerid][acSetWeapon][ac_s] = ACInfo[playerid][acSet][3] = ac_weaponid;
1341
			ACInfo[playerid][acReloadTick] = 0;
1342
		}
1343
		else
1344
		{
1345
			ACInfo[playerid][acGiveAmmo][ac_s] = -65535;
1346
			ACInfo[playerid][acSetWeapon][ac_s] = ACInfo[playerid][acSet][3] = ac_weaponid;
1347
		}
1348
		ACInfo[playerid][acGtcGiveAmmo][ac_s] =
1349
		ACInfo[playerid][acGtcSetWeapon][ac_s] = ACInfo[playerid][acGtc][2] = GetTickCount() + 2650;
1350
	}
1351
	return GivePlayerWeapon(playerid, ac_weaponid, ac_ammo);
1352
}
1353
1354
ac_fpublic ac_SetPlayerAmmo(playerid, ac_weaponslot, ac_ammo)
1355
{
1356
	if(ac_ammo < -32768) ac_ammo = -32768;
1357
	else if(ac_ammo > 32767) ac_ammo = 32767;
1358
	if(16 <= ac_weaponslot <= 43)
1359
	{
1360
		new ac_s = ac_wSlot[ac_weaponslot];
1361
		if(ACInfo[playerid][acWeapon][ac_s] > 0 || ACInfo[playerid][acSetWeapon][ac_s] > 0)
1362
		{
1363
			ACInfo[playerid][acNOPCount][1] = 0;
1364
			ACInfo[playerid][acGiveAmmo][ac_s] = ac_ammo;
1365
			ACInfo[playerid][acGtcGiveAmmo][ac_s] = GetTickCount() + 2650;
1366
		}
1367
	}
1368
	return SetPlayerAmmo(playerid, ac_weaponslot, ac_ammo);
1369
}
1370
1371
ac_fpublic ac_SetPlayerArmedWeapon(playerid, ac_weaponid)
1372
{
1373
	if(!SetPlayerArmedWeapon(playerid, ac_weaponid)) return 0;
1374
	if(0 <= ac_weaponid <= 18 || 22 <= ac_weaponid <= 46)
1375
	{
1376
		new ac_s = ac_wSlot[ac_weaponid];
1377
		if((ac_weaponid == ACInfo[playerid][acWeapon][ac_s] || ac_weaponid == ACInfo[playerid][acSetWeapon][ac_s]) &&
1378
		(ACInfo[playerid][acAmmo][ac_s] != 0 || ACInfo[playerid][acGiveAmmo][ac_s] != 0))
1379
		{
1380
			ACInfo[playerid][acNOPCount][0] = 0;
1381
			ACInfo[playerid][acSet][3] = ac_weaponid;
1382
			ACInfo[playerid][acGtc][2] = GetTickCount() + 2650;
1383
		}
1384
	}
1385
	return 1;
1386
}
1387
1388
ac_fpublic ac_ResetPlayerWeapons(playerid)
1389
{
1390
	if(!ResetPlayerWeapons(playerid)) return 0;
1391
	for(new ac_i = 12; ac_i >= 0; --ac_i)
1392
	{
1393
		ACInfo[playerid][acWeapon][ac_i] = ACInfo[playerid][acAmmo][ac_i] = 0;
1394
		ACInfo[playerid][acSetWeapon][ac_i] = -1;
1395
		ACInfo[playerid][acGiveAmmo][ac_i] = -65535;
1396
	}
1397
	ACInfo[playerid][acSet][3] = -1;
1398
	ACInfo[playerid][acGtc][7] = GetTickCount() + 2650;
1399
	return 1;
1400
}
1401
1402
ac_fpublic ac_GivePlayerMoney(playerid, ac_money)
1403
{
1404
	if(!GivePlayerMoney(playerid, ac_money)) return 0;
1405
	ACInfo[playerid][acNOPCount][11] = AC_MAX_MONEY_WARNINGS;
1406
	ACInfo[playerid][acMoney] += ac_money;
1407
	#undef AC_MAX_MONEY_WARNINGS
1408
	return 1;
1409
}
1410
1411
ac_fpublic ac_ResetPlayerMoney(playerid)
1412
{
1413
	if(!ResetPlayerMoney(playerid)) return 0;
1414
	ACInfo[playerid][acNOPCount][11] = 0;
1415
	ACInfo[playerid][acMoney] = 0;
1416
	return 1;
1417
}
1418
1419
ac_fpublic ac_SetPlayerSpecialAction(playerid, ac_actionid)
1420
{
1421
	if(!SetPlayerSpecialAction(playerid, ac_actionid)) return 0;
1422
	if(ac_actionid == SPECIAL_ACTION_USEJETPACK || SPECIAL_ACTION_CUFFED <= ac_actionid <= 25 ||
1423
	(ac_actionid == SPECIAL_ACTION_USECELLPHONE || ac_actionid == 68 || SPECIAL_ACTION_DANCE1 <= ac_actionid <= SPECIAL_ACTION_DANCE4) && ACInfo[playerid][acVeh] == 0 ||
1424
	ac_actionid == SPECIAL_ACTION_STOPUSECELLPHONE && ACInfo[playerid][acSpecAct] == SPECIAL_ACTION_USECELLPHONE ||
1425
	(ac_actionid == SPECIAL_ACTION_HANDSUP || SPECIAL_ACTION_DRINK_BEER <= ac_actionid <= SPECIAL_ACTION_DRINK_SPRUNK) && ACInfo[playerid][acSpecAct] != SPECIAL_ACTION_ENTER_VEHICLE && ACInfo[playerid][acVeh] == 0 ||
1426
	ac_actionid == SPECIAL_ACTION_NONE && ACInfo[playerid][acSpecAct] != SPECIAL_ACTION_DUCK &&
1427
	ACInfo[playerid][acSpecAct] != SPECIAL_ACTION_ENTER_VEHICLE && ACInfo[playerid][acSpecAct] != SPECIAL_ACTION_HANDSUP)
1428
	{
1429
		ACInfo[playerid][acNOPCount][6] = 0;
1430
		if((ac_actionid == 68 || SPECIAL_ACTION_HANDSUP <= ac_actionid <= SPECIAL_ACTION_USECELLPHONE ||
1431
		SPECIAL_ACTION_DRINK_BEER <= ac_actionid <= 25) && SPECIAL_ACTION_DANCE1 <= ACInfo[playerid][acSpecAct] <= SPECIAL_ACTION_DANCE4 ||
1432
		SPECIAL_ACTION_DRINK_BEER <= ac_actionid <= 25 && ACInfo[playerid][acSpecAct] == SPECIAL_ACTION_DUCK ||
1433
		(ac_actionid == SPECIAL_ACTION_NONE || SPECIAL_ACTION_CUFFED <= ac_actionid <= 25) && ACInfo[playerid][acVeh] ||
1434
		SPECIAL_ACTION_CUFFED <= ac_actionid <= 25 && ACInfo[playerid][acSpecAct] == SPECIAL_ACTION_ENTER_VEHICLE) ACInfo[playerid][acNextSpecAct] = ac_actionid;
1435
		else
1436
		{
1437
			if(ac_actionid == SPECIAL_ACTION_STOPUSECELLPHONE) ac_actionid = SPECIAL_ACTION_NONE;
1438
			else if(ac_actionid == SPECIAL_ACTION_USEJETPACK || ac_actionid == SPECIAL_ACTION_HANDSUP ||
1439
			ac_actionid == 68 || SPECIAL_ACTION_DANCE1 <= ac_actionid <= SPECIAL_ACTION_DANCE4 ||
1440
			SPECIAL_ACTION_DRINK_BEER <= ac_actionid <= SPECIAL_ACTION_DRINK_SPRUNK) ACInfo[playerid][acNextSpecAct] = ACInfo[playerid][acSpecAct];
1441
			else ACInfo[playerid][acNextSpecAct] = -1;
1442
			ACInfo[playerid][acSet][4] = ac_actionid;
1443
			ACInfo[playerid][acGtc][6] = GetTickCount() + 3250;
1444
		}
1445
	}
1446
	return 1;
1447
}
1448
1449
ac_fpublic ac_SetPlayerInterior(playerid, ac_interiorid)
1450
{
1451
	if(!SetPlayerInterior(playerid, ac_interiorid)) return 0;
1452
	ACInfo[playerid][acNOPCount][2] = 0;
1453
	ACInfo[playerid][acSet][0] = ac_interiorid % 256;
1454
	ACInfo[playerid][acGtc][0] = GetTickCount() + 3250;
1455
	return 1;
1456
}
1457
1458
ac_fpublic ac_SetPlayerPos(playerid, Float:ac_x, Float:ac_y, Float:ac_z)
1459
{
1460
	if(!SetPlayerPos(playerid, ac_x, ac_y, ac_z)) return 0;
1461
	ACInfo[playerid][acSet][8] = 1;
1462
	ACInfo[playerid][acNOPCount][10] = 0;
1463
	ACInfo[playerid][acSetPosX] = ac_x;
1464
	ACInfo[playerid][acSetPosY] = ac_y;
1465
	ACInfo[playerid][acSetPosZ] = ac_z;
1466
	ACInfo[playerid][acSetPosTick] =
1467
	ACInfo[playerid][acGtc][11] = GetTickCount() + 3250;
1468
	return 1;
1469
}
1470
1471
ac_fpublic ac_SetPlayerPosFindZ(playerid, Float:ac_x, Float:ac_y, Float:ac_z)
1472
{
1473
	if(!SetPlayerPosFindZ(playerid, ac_x, ac_y, ac_z)) return 0;
1474
	ACInfo[playerid][acSet][8] = 2;
1475
	ACInfo[playerid][acTpToZ] = true;
1476
	ACInfo[playerid][acNOPCount][10] = 0;
1477
	ACInfo[playerid][acSetPosX] = ac_x;
1478
	ACInfo[playerid][acSetPosY] = ac_y;
1479
	ACInfo[playerid][acSetPosTick] =
1480
	ACInfo[playerid][acGtc][11] = GetTickCount() + 3250;
1481
	return 1;
1482
}
1483
1484
ac_fpublic ac_SetPlayerVelocity(playerid, Float:ac_X, Float:ac_Y, Float:ac_Z)
1485
{
1486
	if(!SetPlayerVelocity(playerid, ac_X, ac_Y, ac_Z)) return 0;
1487
	ACInfo[playerid][acSpeed] = ac_GetSpeed(ac_X, ac_Y, ac_Z);
1488
	ACInfo[playerid][acGtc][10] = GetTickCount() + 1650;
1489
	return 1;
1490
}
1491
1492
ac_fpublic ac_PutPlayerInVehicle(playerid, ac_vehicleid, ac_seatid)
1493
{
1494
	if(!PutPlayerInVehicle(playerid, ac_vehicleid, ac_seatid)) return 0;
1495
	if(!(SPECIAL_ACTION_DANCE1 <= ACInfo[playerid][acSpecAct] <= SPECIAL_ACTION_DANCE4) &&
1496
	!(SPECIAL_ACTION_DRINK_BEER <= ACInfo[playerid][acSpecAct] <= SPECIAL_ACTION_DRINK_SPRUNK) &&
1497
	GetPlayerVirtualWorld(playerid) == GetVehicleVirtualWorld(ac_vehicleid))
1498
	{
1499
		new ac_model = GetVehicleModel(ac_vehicleid);
1500
		ACInfo[playerid][acNOPCount][7] = 0;
1501
		ACInfo[playerid][acSet][9] = ac_vehicleid;
1502
		if(ac_model == 431 || ac_model == 437 || ac_IsVehicleSeatOccupied(ac_vehicleid, ac_seatid) ||
1503
		ac_seatid > ac_GetMaxPassengers(ac_model)) ACInfo[playerid][acSet][5] = -1;
1504
		else ACInfo[playerid][acSet][5] = ac_seatid;
1505
		ACInfo[playerid][acGtc][1] = GetTickCount() + 2650;
1506
	}
1507
	return 1;
1508
}
1509
1510
ac_fpublic ac_RemovePlayerFromVehicle(playerid)
1511
{
1512
	if(!RemovePlayerFromVehicle(playerid)) return 0;
1513
	ACInfo[playerid][acSet][11] = 1;
1514
	ACInfo[playerid][acGtc][8] = GetTickCount() + 4650;
1515
	return 1;
1516
}
1517
1518
ac_fpublic ac_SetVehiclePos(vehicleid, Float:ac_x, Float:ac_y, Float:ac_z)
1519
{
1520
	if(!SetVehiclePos(vehicleid, ac_x, ac_y, ac_z)) return 0;
1521
	new ac_driver = ACVehInfo[vehicleid][acDriver];
1522
	if(ac_driver != INVALID_PLAYER_ID)
1523
	{
1524
		ACInfo[ac_driver][acSet][8] = 3;
1525
		ACInfo[ac_driver][acNOPCount][10] = 0;
1526
		ACInfo[ac_driver][acSetPosX] = ac_x;
1527
		ACInfo[ac_driver][acSetPosY] = ac_y;
1528
		ACInfo[ac_driver][acSetPosZ] = ac_z;
1529
		ACInfo[ac_driver][acSetPosTick] =
1530
		ACInfo[ac_driver][acGtc][11] = GetTickCount() + 3250;
1531
	}
1532
	return 1;
1533
}
1534
1535
ac_fpublic ac_SetVehicleVelocity(vehicleid, Float:ac_X, Float:ac_Y, Float:ac_Z)
1536
{
1537
	if(!SetVehicleVelocity(vehicleid, ac_X, ac_Y, ac_Z)) return 0;
1538
	new ac_driver = ACVehInfo[vehicleid][acDriver];
1539
	if(ac_driver != INVALID_PLAYER_ID)
1540
	{
1541
		ACVehInfo[vehicleid][acVelX] = ac_X;
1542
		ACVehInfo[vehicleid][acVelY] = ac_Y;
1543
		ACVehInfo[vehicleid][acVelZ] = ac_Z;
1544
		ACInfo[ac_driver][acGtc][9] = GetTickCount() + 1650;
1545
	}
1546
	return 1;
1547
}
1548
1549
ac_fpublic ac_SetVehicleAngularVelocity(vehicleid, Float:ac_X, Float:ac_Y, Float:ac_Z)
1550
{
1551
	if(!SetVehicleAngularVelocity(vehicleid, ac_X, ac_Y, ac_Z)) return 0;
1552
	new ac_driver = ACVehInfo[vehicleid][acDriver];
1553
	if(ac_driver != INVALID_PLAYER_ID)
1554
	{
1555
		ACVehInfo[vehicleid][acVelX] = ac_X;
1556
		ACVehInfo[vehicleid][acVelY] = ac_Y;
1557
		ACVehInfo[vehicleid][acVelZ] = ac_Z;
1558
		ACInfo[ac_driver][acGtc][9] = GetTickCount() + 1650;
1559
	}
1560
	return 1;
1561
}
1562
1563
ac_fpublic ac_LinkVehicleToInterior(vehicleid, ac_interiorid)
1564
{
1565
	if(!LinkVehicleToInterior(vehicleid, ac_interiorid)) return 0;
1566
	ACVehInfo[vehicleid][acInt] = ac_interiorid % 256;
1567
	return 1;
1568
}
1569
1570
ac_fpublic ac_ChangeVehiclePaintjob(vehicleid, ac_paintjobid)
1571
{
1572
	if(GetVehicleModel(vehicleid) > 0) ACVehInfo[vehicleid][acPaintJob] = ac_paintjobid;
1573
	return ChangeVehiclePaintjob(vehicleid, ac_paintjobid);
1574
}
1575
1576
ac_fpublic ac_SetVehicleHealth(vehicleid, Float:ac_health)
1577
{
1578
	if(!SetVehicleHealth(vehicleid, ac_health)) return 0;
1579
	new ac_driver = ACVehInfo[vehicleid][acDriver];
1580
	if(ac_driver != INVALID_PLAYER_ID)
1581
	{
1582
		ACInfo[ac_driver][acNOPCount][4] = 0;
1583
		ACInfo[ac_driver][acSetVehHealth] = ac_health;
1584
		ACInfo[ac_driver][acGtc][4] = GetTickCount() + 2650;
1585
	}
1586
	else ACVehInfo[vehicleid][acHealth] = ac_health;
1587
	return 1;
1588
}
1589
1590
ac_fpublic ac_RepairVehicle(vehicleid)
1591
{
1592
	if(!RepairVehicle(vehicleid)) return 0;
1593
	new ac_driver = ACVehInfo[vehicleid][acDriver];
1594
	if(ac_driver != INVALID_PLAYER_ID)
1595
	{
1596
		ACInfo[ac_driver][acNOPCount][4] = 0;
1597
		ACInfo[ac_driver][acSetVehHealth] = 1000.0;
1598
		ACInfo[ac_driver][acGtc][4] = GetTickCount() + 2650;
1599
	}
1600
	else ACVehInfo[vehicleid][acHealth] = 1000.0;
1601
	return 1;
1602
}
1603
1604
ac_fpublic ac_SetVehicleToRespawn(vehicleid)
1605
{
1606
	new ac_driver = ACVehInfo[vehicleid][acDriver];
1607
	if(ac_driver != INVALID_PLAYER_ID) ACInfo[ac_driver][acGtc][9] = GetTickCount() + 1650;
1608
	return SetVehicleToRespawn(vehicleid);
1609
}
1610
1611
ac_fpublic ac_EnableAntiCheat(code, enable)
1612
{
1613
	if(!(0 <= code < sizeof ac_ACAllow)) return 0;
1614
	if(code == 42)
1615
	{
1616
		if(enable)
1617
		{
1618
			if(!ac_ACAllow[code])
1619
			{
1620
				#if !AC_USE_QUERY
1621
					ac_QueryEnable = !!GetServerVarAsBool("query");
1622
				#endif
1623
				ac_RconEnable = !!GetServerVarAsBool("rcon");
1624
			}
1625
			#if !AC_USE_QUERY
1626
				SendRconCommand("query 0");
1627
			#endif
1628
			SendRconCommand("rcon 0");
1629
		}
1630
		else
1631
		{
1632
			static ac_strtmp[9];
1633
			#if !AC_USE_QUERY
1634
				format(ac_strtmp, sizeof ac_strtmp, "query %b", ac_QueryEnable);
1635
				SendRconCommand(ac_strtmp);
1636
			#endif
1637
			format(ac_strtmp, sizeof ac_strtmp, "rcon %b", ac_RconEnable);
1638
			SendRconCommand(ac_strtmp);
1639
		}
1640
	}
1641
	ac_ACAllow[code] = !!enable;
1642
	if(enable)
1643
	{
1644
		#if defined foreach
1645
			foreach(new ac_i : Player)
1646
		#else
1647-
				case 15: ACInfo[ac_i][acCheatCount][10] = 0;
1647+
1648
				for(new ac_i = GetPlayerPoolSize(); ac_i >= 0; --ac_i)
1649
			#else
1650
				for(new ac_i = MAX_PLAYERS - 1; ac_i >= 0; --ac_i)
1651-
				case 23: ACInfo[ac_i][acCheatCount][12] = 0;
1651+
1652
			{
1653
				if(IsPlayerConnected(ac_i))
1654
		#endif
1655
		{
1656
			ACInfo[ac_i][acACAllow][code] = ac_ACAllow[code];
1657
			switch(code)
1658
			{
1659
				case 7: ACInfo[ac_i][acCheatCount][15] = 0;
1660
				case 8: ACInfo[ac_i][acCheatCount][3] = 0;
1661
				case 9: ACInfo[ac_i][acCheatCount][17] = 0;
1662
				case 10: ACInfo[ac_i][acCheatCount][16] = ACInfo[ac_i][acCheatCount][20] = 0;
1663
				#if AC_USE_AMMUNATIONS
1664
					case 15: ACInfo[ac_i][acCheatCount][10] = 0;
1665
				#endif
1666
				case 17: ACInfo[ac_i][acCheatCount][7] = 0;
1667
				case 19: ACInfo[ac_i][acCheatCount][9] = 0;
1668
				case 20: ACInfo[ac_i][acCheatCount][11] = 0;
1669
				#if AC_USE_TUNING_GARAGES
1670
					case 23: ACInfo[ac_i][acCheatCount][12] = 0;
1671
				#endif
1672
				case 26: ACInfo[ac_i][acCheatCount][14] = ACInfo[ac_i][acCheatCount][8] = 0;
1673
				case 29: ACInfo[ac_i][acCheatCount][13] = ACInfo[ac_i][acCheatCount][6] = 0;
1674
				case 30: ACInfo[ac_i][acCheatCount][19] = 0;
1675
				case 31: ACInfo[ac_i][acCheatCount][4] = 0;
1676
				case 34: ACInfo[ac_i][acCheatCount][5] = 0;
1677
				case 38: ACInfo[ac_i][acCheatCount][0] = 0;
1678
				case 47: ACInfo[ac_i][acCheatCount][18] = 0;
1679
			}
1680
		}
1681
		#if !defined foreach
1682
			}
1683
		#endif
1684
	}
1685
	else
1686
	{
1687
		#if defined foreach
1688
			foreach(new ac_i : Player) ACInfo[ac_i][acACAllow][code] = ac_ACAllow[code];
1689
		#else
1690
			#if defined GetPlayerPoolSize
1691
				for(new ac_i = GetPlayerPoolSize(); ac_i >= 0; --ac_i)
1692
			#else
1693
				for(new ac_i = MAX_PLAYERS - 1; ac_i >= 0; --ac_i)
1694
			#endif
1695
			{
1696
				if(IsPlayerConnected(ac_i)) ACInfo[ac_i][acACAllow][code] = ac_ACAllow[code];
1697
			}
1698
		#endif
1699
	}
1700
	#if AUTOSAVE_SETTINGS_IN_CONFIG
1701
		static ac_strtmp[10];
1702
		new ac_string[415], File:ac_cfgFile;
1703
		if((ac_cfgFile = fopen(AC_CONFIG_FILE, io_write)))
1704
		{
1705
			for(new ac_i; ac_i < sizeof ac_ACAllow; ++ac_i)
1706
			{
1707
				format(ac_strtmp, sizeof ac_strtmp, "%d //%d\r\n", ac_ACAllow[ac_i], ac_i);
1708
				strcat(ac_string, ac_strtmp);
1709
			}
1710
			fwrite(ac_cfgFile, ac_string);
1711
			fclose(ac_cfgFile);
1712
		}
1713
	#endif
1714
	return 1;
1715
}
1716
1717
ac_fpublic ac_EnableAntiNOP(nopcode, enable)
1718
{
1719
	if(!(0 <= nopcode < sizeof ac_NOPAllow)) return 0;
1720
	ac_NOPAllow[nopcode] = !!enable;
1721
	#if defined foreach
1722
		foreach(new ac_i : Player) ACInfo[ac_i][acNOPAllow][nopcode] = ac_NOPAllow[nopcode];
1723
	#else
1724
		#if defined GetPlayerPoolSize
1725
			for(new ac_i = GetPlayerPoolSize(); ac_i >= 0; --ac_i)
1726
		#else
1727
			for(new ac_i = MAX_PLAYERS - 1; ac_i >= 0; --ac_i)
1728
		#endif
1729
		{
1730
			if(IsPlayerConnected(ac_i)) ACInfo[ac_i][acNOPAllow][nopcode] = ac_NOPAllow[nopcode];
1731
		}
1732
	#endif
1733
	#if AUTOSAVE_SETTINGS_IN_CONFIG
1734
		static ac_strtmp[10];
1735
		new ac_string[87], File:ac_cfgFile;
1736
		if((ac_cfgFile = fopen(AC_NOP_CONFIG_FILE, io_write)))
1737
		{
1738
			for(new ac_i; ac_i < sizeof ac_NOPAllow; ++ac_i)
1739
			{
1740
				format(ac_strtmp, sizeof ac_strtmp, "%d //%d\r\n", ac_NOPAllow[ac_i], ac_i);
1741
				strcat(ac_string, ac_strtmp);
1742
			}
1743-
			case 15: ACInfo[playerid][acCheatCount][10] = 0;
1743+
1744
			fclose(ac_cfgFile);
1745
		}
1746
	#endif
1747-
			case 23: ACInfo[playerid][acCheatCount][12] = 0;
1747+
1748
	return 1;
1749
}
1750
1751
ac_fpublic ac_EnableAntiCheatForPlayer(playerid, code, enable)
1752
{
1753
	if(!(0 <= code < sizeof ac_ACAllow)) return -1;
1754
	ACInfo[playerid][acACAllow][code] = !!enable;
1755
	if(enable)
1756
	{
1757
		switch(code)
1758
		{
1759
			case 7: ACInfo[playerid][acCheatCount][15] = 0;
1760
			case 8: ACInfo[playerid][acCheatCount][3] = 0;
1761
			case 9: ACInfo[playerid][acCheatCount][17] = 0;
1762
			case 10: ACInfo[playerid][acCheatCount][16] = ACInfo[playerid][acCheatCount][20] = 0;
1763
			#if AC_USE_AMMUNATIONS
1764
				case 15: ACInfo[playerid][acCheatCount][10] = 0;
1765
			#endif
1766
			case 17: ACInfo[playerid][acCheatCount][7] = 0;
1767
			case 19: ACInfo[playerid][acCheatCount][9] = 0;
1768
			case 20: ACInfo[playerid][acCheatCount][11] = 0;
1769
			#if AC_USE_TUNING_GARAGES
1770
				case 23: ACInfo[playerid][acCheatCount][12] = 0;
1771
			#endif
1772
			case 26: ACInfo[playerid][acCheatCount][14] = ACInfo[playerid][acCheatCount][8] = 0;
1773
			case 29: ACInfo[playerid][acCheatCount][13] = ACInfo[playerid][acCheatCount][6] = 0;
1774
			case 30: ACInfo[playerid][acCheatCount][19] = 0;
1775
			case 31: ACInfo[playerid][acCheatCount][4] = 0;
1776
			case 34: ACInfo[playerid][acCheatCount][5] = 0;
1777
			case 38: ACInfo[playerid][acCheatCount][0] = 0;
1778
			case 47: ACInfo[playerid][acCheatCount][18] = 0;
1779
		}
1780
	}
1781
	return 1;
1782
}
1783
1784
ac_fpublic ac_EnableAntiNOPForPlayer(playerid, nopcode, enable)
1785
{
1786
	if(!(0 <= nopcode < sizeof ac_NOPAllow)) return -1;
1787
	ACInfo[playerid][acNOPAllow][nopcode] = !!enable;
1788
	return 1;
1789
}
1790
1791
ac_fpublic ac_IsAntiCheatEnabled(code)
1792
{
1793
	if(!(0 <= code < sizeof ac_ACAllow)) return 0;
1794
	return ac_ACAllow[code];
1795
}
1796
1797
ac_fpublic ac_IsAntiNOPEnabled(nopcode)
1798
{
1799
	if(!(0 <= nopcode < sizeof ac_NOPAllow)) return 0;
1800
	return ac_NOPAllow[nopcode];
1801
}
1802
1803
ac_fpublic ac_IsAntiCheatEnabledForPlayer(playerid, code)
1804
{
1805
	if(!(0 <= code < sizeof ac_ACAllow)) return 0;
1806
	return ACInfo[playerid][acACAllow][code];
1807
}
1808
1809
ac_fpublic ac_IsAntiNOPEnabledForPlayer(playerid, nopcode)
1810
{
1811
	if(!(0 <= nopcode < sizeof ac_NOPAllow)) return 0;
1812
	return ACInfo[playerid][acNOPAllow][nopcode];
1813
}
1814
1815
ac_fpublic ac_AntiCheatGetSpeed(playerid) return ACInfo[playerid][acSpeed];
1816
1817
ac_fpublic ac_AntiCheatGetAnimationIndex(playerid) return ACInfo[playerid][acAnim];
1818
1819
ac_fpublic ac_AntiCheatGetDialog(playerid) return ACInfo[playerid][acDialog];
1820
1821
ac_fpublic ac_AntiCheatGetMoney(playerid) return ACInfo[playerid][acMoney];
1822
1823
ac_fpublic ac_AntiCheatGetEnterVehicle(playerid) return ACInfo[playerid][acEnterVeh];
1824
1825
ac_fpublic ac_AntiCheatGetVehicleID(playerid) return ACInfo[playerid][acVeh];
1826
1827
ac_fpublic ac_AntiCheatGetWeapon(playerid) return ACInfo[playerid][acLastWeapon];
1828
1829
ac_fpublic ac_AntiCheatGetVehicleSeat(playerid) return ACInfo[playerid][acSeat];
1830
1831
ac_fpublic ac_AntiCheatGetSpecialAction(playerid) return ACInfo[playerid][acSpecAct];
1832
1833
ac_fpublic ac_AntiCheatGetLastSpecialActio(playerid) return ACInfo[playerid][acLastSpecAct];
1834
1835
ac_fpublic ac_AntiCheatGetLastShotWeapon(playerid) return ACInfo[playerid][acLastShot];
1836
1837
ac_fpublic ac_AntiCheatGetLastPickup(playerid) return ACInfo[playerid][acLastPickup];
1838
1839
ac_fpublic ac_AntiCheatGetLastUpdateTime(playerid) return ACInfo[playerid][acUpdateTick];
1840
1841
ac_fpublic ac_AntiCheatGetLastReloadTime(playerid) return ACInfo[playerid][acReloadTick];
1842
1843
ac_fpublic ac_AntiCheatGetLastEnteredVehTi(playerid) return ACInfo[playerid][acEnterVehTick];
1844
1845
ac_fpublic ac_AntiCheatGetLastShotTime(playerid) return ACInfo[playerid][acShotTick];
1846
1847
ac_fpublic ac_AntiCheatGetLastSpawnTime(playerid) return ACInfo[playerid][acSpawnTick];
1848
1849
ac_fpublic ac_AntiCheatIntEnterExitsIsEnab(playerid) return ACInfo[playerid][acIntEnterExits];
1850
1851
ac_fpublic ac_AntiCheatStuntBonusIsEnabled(playerid) return ACInfo[playerid][acStuntBonus];
1852
1853
ac_fpublic ac_AntiCheatIsInModShop(playerid) return ACInfo[playerid][acModShop];
1854
1855
ac_fpublic ac_AntiCheatIsFrozen(playerid) return !ACInfo[playerid][acUnFrozen];
1856
1857
ac_fpublic ac_AntiCheatIsDead(playerid) return ACInfo[playerid][acDead];
1858
1859
ac_fpublic ac_AntiCheatIsConnected(playerid) return ACInfo[playerid][acOnline];
1860
1861
ac_fpublic ac_AntiCheatKickWithDesync(playerid, code)
1862
{
1863
	if(ACInfo[playerid][acKicked] > 0) return -1;
1864
	new ac_gpp = GetPlayerPing(playerid) + 150;
1865
	#if defined SetPlayerTimerEx_
1866
		ACInfo[playerid][acKickTimerID] = SetPlayerTimerEx_(playerid, "ac_KickTimer", 0, (ac_gpp > AC_MAX_PING ? AC_MAX_PING : ac_gpp), 1, "i", playerid);
1867
	#else
1868
		ACInfo[playerid][acKickTimerID] = SetTimerEx("ac_KickTimer", (ac_gpp > AC_MAX_PING ? AC_MAX_PING : ac_gpp), false, "i", playerid);
1869
	#endif
1870
	if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
1871
	{
1872
		if(code == 4) ACInfo[playerid][acKickVeh] = GetPlayerVehicleID(playerid);
1873
		ACInfo[playerid][acKicked] = 2;
1874
	}
1875
	else ACInfo[playerid][acKicked] = 1;
1876
	return 1;
1877
}
1878
1879
ac_fpublic ac_AntiCheatIsKickedWithDecync(playerid) return ACInfo[playerid][acKicked];
1880
1881
ac_fpublic ac_AntiCheatGetNextDialog(playerid) return ACInfo[playerid][acNextDialog];
1882
1883
ac_fpublic ac_AntiCheatGetVehicleDriver(vehicleid) return ACVehInfo[vehicleid][acDriver];
1884
1885
ac_fpublic ac_AntiCheatGetVehicleInterior(vehicleid) return ACVehInfo[vehicleid][acInt];
1886
1887
ac_fpublic ac_AntiCheatGetVehiclePaintjob(vehicleid) return ACVehInfo[vehicleid][acPaintJob];
1888
1889
ac_fpublic ac_AntiCheatGetInterior(playerid) return ACInfo[playerid][acInt];
1890
1891
#endif
1892
1893
stock acc_AddStaticVehicle(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, color1, color2)
1894
{
1895
	new ac_vehicleid = AddStaticVehicle(modelid, spawn_x, spawn_y, spawn_z, z_angle, color1, color2);
1896
	if(ac_vehicleid != INVALID_VEHICLE_ID)
1897
	{
1898
		#if defined FILTERSCRIPT
1899
			CallRemoteFunction("ac_AddStaticVehicle", "iffff", ac_vehicleid, spawn_x, spawn_y, spawn_z, z_angle);
1900
		#else
1901
			ac_AddStaticVehicle(ac_vehicleid, spawn_x, spawn_y, spawn_z, z_angle);
1902
		#endif
1903
	}
1904
	return ac_vehicleid;
1905
}
1906
1907
#if defined _ALS_AddStaticVehicle
1908
	#undef AddStaticVehicle
1909
#else
1910
	#define _ALS_AddStaticVehicle
1911
#endif
1912
#define AddStaticVehicle acc_AddStaticVehicle
1913
1914
#if defined OnVehicleSirenStateChange
1915
	stock acc_AddStaticVehicleEx(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, color1, color2, respawn_delay, addsiren = 0)
1916
	{
1917
		new ac_vehicleid = AddStaticVehicleEx(modelid, spawn_x, spawn_y, spawn_z, z_angle, color1, color2, respawn_delay, addsiren);
1918
#else
1919
	stock acc_AddStaticVehicleEx(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, color1, color2, respawn_delay)
1920
	{
1921
		new ac_vehicleid = AddStaticVehicleEx(modelid, spawn_x, spawn_y, spawn_z, z_angle, color1, color2, respawn_delay);
1922
#endif
1923
	if(ac_vehicleid != INVALID_VEHICLE_ID)
1924
	{
1925
		#if defined FILTERSCRIPT
1926
			CallRemoteFunction("ac_AddStaticVehicle", "iffff", ac_vehicleid, spawn_x, spawn_y, spawn_z, z_angle);
1927
		#else
1928
			ac_AddStaticVehicle(ac_vehicleid, spawn_x, spawn_y, spawn_z, z_angle);
1929
		#endif
1930
	}
1931
	return ac_vehicleid;
1932
}
1933
1934
#if defined _ALS_AddStaticVehicleEx
1935
	#undef AddStaticVehicleEx
1936
#else
1937
	#define _ALS_AddStaticVehicleEx
1938
#endif
1939
#define AddStaticVehicleEx acc_AddStaticVehicleEx
1940
1941
#if defined OnVehicleSirenStateChange
1942
	stock acc_CreateVehicle(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn_delay, addsiren = 0)
1943
	{
1944
		new ac_vehicleid = CreateVehicle(vehicletype, x, y, z, rotation, color1, color2, respawn_delay, addsiren);
1945
#else
1946
	stock acc_CreateVehicle(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn_delay)
1947
	{
1948
		new ac_vehicleid = CreateVehicle(vehicletype, x, y, z, rotation, color1, color2, respawn_delay);
1949
#endif
1950
	if(ac_vehicleid != INVALID_VEHICLE_ID && ac_vehicleid > 0)
1951
	{
1952
		#if defined FILTERSCRIPT
1953
			CallRemoteFunction("ac_CreateVehicle", "iiffff", ac_vehicleid, vehicletype, x, y, z, rotation);
1954
		#else
1955
			ac_CreateVehicle(ac_vehicleid, vehicletype, x, y, z, rotation);
1956
		#endif
1957
	}
1958
	return ac_vehicleid;
1959
}
1960
1961
#if defined _ALS_CreateVehicle
1962
	#undef CreateVehicle
1963
#else
1964
	#define _ALS_CreateVehicle
1965
#endif
1966
#define CreateVehicle acc_CreateVehicle
1967
1968
stock acc_AddPlayerClass(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo)
1969
{
1970
	new ac_classid = AddPlayerClass(modelid, spawn_x, spawn_y, spawn_z, z_angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
1971
	#if defined FILTERSCRIPT
1972
		CallRemoteFunction("ac_AddPlayerClass", "ifffiiiiii", ac_classid, spawn_x, spawn_y, spawn_z, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
1973
	#else
1974
		ac_AddPlayerClass(ac_classid, spawn_x, spawn_y, spawn_z, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
1975
	#endif
1976
	return ac_classid;
1977
}
1978
1979
#if defined _ALS_AddPlayerClass
1980
	#undef AddPlayerClass
1981
#else
1982
	#define _ALS_AddPlayerClass
1983
#endif
1984
#define AddPlayerClass acc_AddPlayerClass
1985
1986
stock acc_AddPlayerClassEx(teamid, modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo)
1987
{
1988
	new ac_classid = AddPlayerClassEx(teamid, modelid, spawn_x, spawn_y, spawn_z, z_angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
1989
	#if defined FILTERSCRIPT
1990
		CallRemoteFunction("ac_AddPlayerClass", "ifffiiiiii", ac_classid, spawn_x, spawn_y, spawn_z, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
1991
	#else
1992
		ac_AddPlayerClass(ac_classid, spawn_x, spawn_y, spawn_z, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
1993
	#endif
1994
	return ac_classid;
1995
}
1996
1997
#if defined _ALS_AddPlayerClassEx
1998
	#undef AddPlayerClassEx
1999
#else
2000
	#define _ALS_AddPlayerClassEx
2001
#endif
2002
#define AddPlayerClassEx acc_AddPlayerClassEx
2003
2004
stock orig_SetSpawnInfo(playerid, team, skin, Float:x, Float:y, Float:z, Float:rotation, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo)
2005
	return SetSpawnInfo(playerid, team, skin, x, y, z, rotation, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
2006
2007
stock acc_SetSpawnInfo(playerid, team, skin, Float:x, Float:y, Float:z, Float:rotation, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo)
2008
{
2009
	#if defined FILTERSCRIPT
2010
		return CallRemoteFunction("ac_SetSpawnInfo", "iiiffffiiiiii", playerid, team, skin, x, y, z, rotation, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
2011
	#else
2012
		return ac_SetSpawnInfo(playerid, team, skin, x, y, z, rotation, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
2013
	#endif
2014
}
2015
2016
#if defined _ALS_SetSpawnInfo
2017
	#undef SetSpawnInfo
2018
#else
2019
	#define _ALS_SetSpawnInfo
2020
#endif
2021
#define SetSpawnInfo acc_SetSpawnInfo
2022
2023
stock acc_AddStaticPickup(model, type, Float:X, Float:Y, Float:Z, virtualworld = 0)
2024
{
2025
	new ac_pickupid = CreatePickup(model, type, X, Y, Z, virtualworld);
2026
	if(ac_pickupid != -1)
2027
	{
2028
		#if defined FILTERSCRIPT
2029
			return CallRemoteFunction("ac_AddStaticPickup", "iiifff", ac_pickupid, model, type, X, Y, Z);
2030
		#else
2031
			return ac_AddStaticPickup(ac_pickupid, model, type, X, Y, Z);
2032
		#endif
2033
	}
2034
	return 0;
2035
}
2036
2037
#if defined _ALS_AddStaticPickup
2038
	#undef AddStaticPickup
2039
#else
2040
	#define _ALS_AddStaticPickup
2041
#endif
2042
#define AddStaticPickup acc_AddStaticPickup
2043
2044
stock acc_CreatePickup(model, type, Float:X, Float:Y, Float:Z, virtualworld = 0)
2045
{
2046
	new ac_pickupid = CreatePickup(model, type, X, Y, Z, virtualworld);
2047
	if(ac_pickupid != -1)
2048
	{
2049
		#if defined FILTERSCRIPT
2050
			CallRemoteFunction("ac_CreatePickup", "iiifff", ac_pickupid, model, type, X, Y, Z);
2051
		#else
2052
			ac_CreatePickup(ac_pickupid, model, type, X, Y, Z);
2053
		#endif
2054
	}
2055
	return ac_pickupid;
2056-
				#if AC_USE_PICKUP_WEAPONS
2056+
2057-
					ac_CreateDynamicPickup(ac_pickupid, modelid, type);
2057+
2058
#if defined _ALS_CreatePickup
2059
	#undef CreatePickup
2060
#else
2061
	#define _ALS_CreatePickup
2062
#endif
2063
#define CreatePickup acc_CreatePickup
2064
2065
#if defined CreateDynamicPickup
2066
	#if defined STREAMER_ENABLE_TAGS
2067
		stock STREAMER_TAG_PICKUP:acc_CreateDynamicPickup(modelid, type, Float:x, Float:y, Float:z, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 200.0, STREAMER_TAG_AREA:areaid = STREAMER_TAG_AREA:-1, priority = 0)
2068
		{
2069
			new STREAMER_TAG_PICKUP:ac_pickupid = CreateDynamicPickup(modelid, type, x, y, z, worldid, interiorid, playerid, streamdistance, areaid, priority);
2070
	#else
2071
		stock acc_CreateDynamicPickup(modelid, type, Float:x, Float:y, Float:z, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 200.0, areaid = -1, priority = 0)
2072
		{
2073
			new ac_pickupid = CreateDynamicPickup(modelid, type, x, y, z, worldid, interiorid, playerid, streamdistance, areaid, priority);
2074
	#endif
2075
		if(_:ac_pickupid > 0)
2076
		{
2077
			#if defined FILTERSCRIPT
2078
				CallRemoteFunction("ac_CreateDynamicPickup", "iii", ac_pickupid, modelid, type);
2079
			#elseif AC_USE_PICKUP_WEAPONS
2080
				ac_CreateDynamicPickup(ac_pickupid, modelid, type);
2081
			#endif
2082
		}
2083
		return ac_pickupid;
2084
	}
2085
2086
	#if defined _ALS_CreateDynamicPickup
2087-
				#if AC_USE_PICKUP_WEAPONS
2087+
2088-
					ac_CreateDynamicPickup(ac_pickupid, modelid, type);
2088+
2089
		#define _ALS_CreateDynamicPickup
2090
	#endif
2091
	#define CreateDynamicPickup acc_CreateDynamicPickup
2092
#endif
2093
2094
#if defined CreateDynamicPickupEx
2095
	#if defined STREAMER_ENABLE_TAGS
2096
		stock STREAMER_TAG_PICKUP:acc_CreateDynamicPickupEx(modelid, type, Float:x, Float:y, Float:z, Float:streamdistance = 200.0, const worlds[] = { -1 }, const interiors[] = { -1 }, const players[] = { -1 }, const STREAMER_TAG_AREA:areas[] = { STREAMER_TAG_AREA:-1 }, priority = 0, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players, maxareas = sizeof areas)
2097
		{
2098
			new STREAMER_TAG_PICKUP:ac_pickupid = CreateDynamicPickupEx(modelid, type, x, y, z, streamdistance, worlds, interiors, players, areas, priority, maxworlds, maxinteriors, maxplayers, maxareas);
2099
	#else
2100
			stock acc_CreateDynamicPickupEx(modelid, type, Float:x, Float:y, Float:z, Float:streamdistance = 200.0, const worlds[] = { -1 }, const interiors[] = { -1 }, const players[] = { -1 }, const areas[] = { -1 }, priority = 0, maxworlds = sizeof worlds, maxinteriors = sizeof interiors, maxplayers = sizeof players, maxareas = sizeof areas)
2101
		{
2102
			new ac_pickupid = CreateDynamicPickupEx(modelid, type, x, y, z, streamdistance, worlds, interiors, players, areas, priority, maxworlds, maxinteriors, maxplayers, maxareas);
2103
	#endif
2104
		if(_:ac_pickupid > 0)
2105
		{
2106
			#if defined FILTERSCRIPT
2107
				CallRemoteFunction("ac_CreateDynamicPickup", "iii", ac_pickupid, modelid, type);
2108
			#elseif AC_USE_PICKUP_WEAPONS
2109
				ac_CreateDynamicPickup(ac_pickupid, modelid, type);
2110
			#endif
2111
		}
2112
		return ac_pickupid;
2113
	}
2114
2115
	#if defined _ALS_CreateDynamicPickupEx
2116
		#undef CreateDynamicPickupEx
2117
	#else
2118
		#define _ALS_CreateDynamicPickupEx
2119
	#endif
2120
	#define CreateDynamicPickupEx acc_CreateDynamicPickupEx
2121
#endif
2122
2123
stock acc_DestroyVehicle(vehicleid)
2124
{
2125
	#if defined FILTERSCRIPT
2126
		return CallRemoteFunction("ac_DestroyVehicle", "i", vehicleid);
2127
	#else
2128
		return ac_DestroyVehicle(vehicleid);
2129
	#endif
2130
}
2131
2132
#if defined _ALS_DestroyVehicle
2133
	#undef DestroyVehicle
2134
#else
2135
	#define _ALS_DestroyVehicle
2136
#endif
2137
#define DestroyVehicle acc_DestroyVehicle
2138
2139
stock acc_DestroyPickup(pickup)
2140
{
2141
	#if defined FILTERSCRIPT
2142
		return CallRemoteFunction("ac_DestroyPickup", "i", pickup);
2143
	#else
2144
		return ac_DestroyPickup(pickup);
2145
	#endif
2146
}
2147
2148
#if defined _ALS_DestroyPickup
2149
	#undef DestroyPickup
2150
#else
2151
	#define _ALS_DestroyPickup
2152
#endif
2153
#define DestroyPickup acc_DestroyPickup
2154
2155
stock acc_DisableInteriorEnterExits()
2156
{
2157
	#if defined FILTERSCRIPT
2158
		return CallRemoteFunction("ac_DisableInteriorEnterExits", "");
2159
	#else
2160
		return ac_DisableInteriorEnterExits();
2161
	#endif
2162
}
2163
2164
#if defined _ALS_DisableInteriorEnterExits
2165
	#undef DisableInteriorEnterExits
2166
#else
2167
	#define _ALS_DisableInteriorEnterExits
2168
#endif
2169
#define DisableInteriorEnterExits acc_DisableInteriorEnterExits
2170
2171
stock acc_UsePlayerPedAnims()
2172
{
2173
	#if defined FILTERSCRIPT
2174
		return CallRemoteFunction("ac_UsePlayerPedAnims", "");
2175
	#else
2176
		return ac_UsePlayerPedAnims();
2177
	#endif
2178
}
2179
2180
#if defined _ALS_UsePlayerPedAnims
2181
	#undef UsePlayerPedAnims
2182
#else
2183
	#define _ALS_UsePlayerPedAnims
2184
#endif
2185
#define UsePlayerPedAnims acc_UsePlayerPedAnims
2186
2187
#if defined EnableVehicleFriendlyFire
2188
	stock acc_EnableVehicleFriendlyFire()
2189
	{
2190
		#if defined FILTERSCRIPT
2191
			return CallRemoteFunction("ac_EnableVehicleFriendlyFire", "");
2192
		#else
2193
			return ac_EnableVehicleFriendlyFire();
2194
		#endif
2195
	}
2196
2197
	#if defined _ALS_EnableVehicleFriendlyFire
2198
		#undef EnableVehicleFriendlyFire
2199
	#else
2200
		#define _ALS_EnableVehicleFriendlyFire
2201
	#endif
2202
	#define EnableVehicleFriendlyFire acc_EnableVehicleFriendlyFire
2203
#endif
2204
2205
stock acc_EnableStuntBonusForAll(enable)
2206
{
2207
	#if defined FILTERSCRIPT
2208
		return CallRemoteFunction("ac_EnableStuntBonusForAll", "i", enable);
2209
	#else
2210
		return ac_EnableStuntBonusForAll(enable);
2211
	#endif
2212
}
2213
2214
#if defined _ALS_EnableStuntBonusForAll
2215
	#undef EnableStuntBonusForAll
2216
#else
2217
	#define _ALS_EnableStuntBonusForAll
2218
#endif
2219
#define EnableStuntBonusForAll acc_EnableStuntBonusForAll
2220
2221
stock acc_EnableStuntBonusForPlayer(playerid, enable)
2222
{
2223
	#if defined FILTERSCRIPT
2224
		return CallRemoteFunction("ac_EnableStuntBonusForPlayer", "ii", playerid, enable);
2225
	#else
2226
		return ac_EnableStuntBonusForPlayer(playerid, enable);
2227
	#endif
2228
}
2229
2230
#if defined _ALS_EnableStuntBonusForPlayer
2231
	#undef EnableStuntBonusForPlayer
2232
#else
2233
	#define _ALS_EnableStuntBonusForPlayer
2234
#endif
2235
#define EnableStuntBonusForPlayer acc_EnableStuntBonusForPlayer
2236
2237
#if defined _inc_y_dialog || defined _INC_y_dialog
2238
	stock ac_Dialog_Show(playerid, style, string:title[], string:caption[], string:button1[], string:button2[] = "", dialog = -1)
2239
	{
2240
		if(!(0 <= playerid < MAX_PLAYERS))
2241
		{
2242
			#if defined FILTERSCRIPT
2243
				CallRemoteFunction("ac_fs_ShowPlayerDialog", "id", playerid, dialog);
2244
			#else
2245
				ac_ShowPlayerDialog(playerid, dialog);
2246
			#endif
2247
		}
2248
		return Dialog_Show(playerid, style, title, caption, button1, button2, dialog);
2249
	}
2250
2251
	#if defined _ALS_Dialog_Show
2252
		#undef Dialog_Show
2253
	#else
2254
		#define _ALS_Dialog_Show
2255
	#endif
2256
	#define Dialog_Show ac_Dialog_Show
2257
#endif
2258
2259
stock orig_ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[]) return ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
2260
2261
stock acc_ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[])
2262
{
2263
	if(ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2))
2264
	{
2265
		#if defined FILTERSCRIPT
2266
			return CallRemoteFunction("ac_fs_ShowPlayerDialog", "id", playerid, dialogid);
2267
		#else
2268
			return ac_ShowPlayerDialog(playerid, dialogid);
2269
		#endif
2270
	}
2271
	return 0;
2272
}
2273
2274
#if defined _ALS_ShowPlayerDialog
2275
	#undef ShowPlayerDialog
2276
#else
2277
	#define _ALS_ShowPlayerDialog
2278
#endif
2279
#define ShowPlayerDialog acc_ShowPlayerDialog
2280
2281
stock orig_TogglePlayerControllable(playerid, toggle) return TogglePlayerControllable(playerid, toggle);
2282
2283
stock acc_TogglePlayerControllable(playerid, toggle)
2284
{
2285
	#if defined FILTERSCRIPT
2286
		return CallRemoteFunction("ac_TogglePlayerControllable", "ii", playerid, toggle);
2287
	#else
2288
		return ac_TogglePlayerControllable(playerid, toggle);
2289
	#endif
2290
}
2291
2292
#if defined _ALS_TogglePlayerControllable
2293
	#undef TogglePlayerControllable
2294
#else
2295
	#define _ALS_TogglePlayerControllable
2296
#endif
2297
#define TogglePlayerControllable acc_TogglePlayerControllable
2298
2299
stock orig_TogglePlayerSpectating(playerid, toggle) return TogglePlayerSpectating(playerid, toggle);
2300
2301
stock acc_TogglePlayerSpectating(playerid, toggle)
2302
{
2303
	#if defined FILTERSCRIPT
2304
		return CallRemoteFunction("ac_TogglePlayerSpectating", "ii", playerid, toggle);
2305
	#else
2306
		return ac_TogglePlayerSpectating(playerid, toggle);
2307
	#endif
2308
}
2309
2310
#if defined _ALS_TogglePlayerSpectating
2311
	#undef TogglePlayerSpectating
2312
#else
2313
	#define _ALS_TogglePlayerSpectating
2314
#endif
2315
#define TogglePlayerSpectating acc_TogglePlayerSpectating
2316
2317
stock orig_SpawnPlayer(playerid) return SpawnPlayer(playerid);
2318
2319
stock acc_SpawnPlayer(playerid)
2320
{
2321
	#if defined FILTERSCRIPT
2322
		return CallRemoteFunction("ac_SpawnPlayer", "i", playerid);
2323
	#else
2324
		return ac_SpawnPlayer(playerid);
2325
	#endif
2326
}
2327
2328
#if defined _ALS_SpawnPlayer
2329
	#undef SpawnPlayer
2330
#else
2331
	#define _ALS_SpawnPlayer
2332
#endif
2333
#define SpawnPlayer acc_SpawnPlayer
2334
2335
stock orig_SetPlayerHealth(playerid, Float:health) return SetPlayerHealth(playerid, health);
2336
2337
stock acc_SetPlayerHealth(playerid, Float:health)
2338
{
2339
	#if defined FILTERSCRIPT
2340
		return CallRemoteFunction("ac_SetPlayerHealth", "if", playerid, health);
2341
	#else
2342
		return ac_SetPlayerHealth(playerid, health);
2343
	#endif
2344
}
2345
2346
#if defined _ALS_SetPlayerHealth
2347
	#undef SetPlayerHealth
2348
#else
2349
	#define _ALS_SetPlayerHealth
2350
#endif
2351
#define SetPlayerHealth acc_SetPlayerHealth
2352
2353
stock orig_SetPlayerArmour(playerid, Float:armour) return SetPlayerArmour(playerid, armour);
2354
2355
stock acc_SetPlayerArmour(playerid, Float:armour)
2356
{
2357
	#if defined FILTERSCRIPT
2358
		return CallRemoteFunction("ac_SetPlayerArmour", "if", playerid, armour);
2359
	#else
2360
		return ac_SetPlayerArmour(playerid, armour);
2361
	#endif
2362
}
2363
2364
#if defined _ALS_SetPlayerArmour
2365
	#undef SetPlayerArmour
2366
#else
2367
	#define _ALS_SetPlayerArmour
2368
#endif
2369
#define SetPlayerArmour acc_SetPlayerArmour
2370
2371
stock orig_GivePlayerWeapon(playerid, weaponid, ammo) return GivePlayerWeapon(playerid, weaponid, ammo);
2372
2373
stock acc_GivePlayerWeapon(playerid, weaponid, ammo)
2374
{
2375
	if(!(0 <= playerid < MAX_PLAYERS)) return 0;
2376
	#if defined FILTERSCRIPT
2377
		return CallRemoteFunction("ac_GivePlayerWeapon", "iid", playerid, weaponid, ammo);
2378
	#else
2379
		return ac_GivePlayerWeapon(playerid, weaponid, ammo);
2380
	#endif
2381
}
2382
2383
#if defined _ALS_GivePlayerWeapon
2384
	#undef GivePlayerWeapon
2385
#else
2386
	#define _ALS_GivePlayerWeapon
2387
#endif
2388
#define GivePlayerWeapon acc_GivePlayerWeapon
2389
2390
stock orig_SetPlayerAmmo(playerid, weaponslot, ammo) return SetPlayerAmmo(playerid, weaponslot, ammo);
2391
2392
stock acc_SetPlayerAmmo(playerid, weaponslot, ammo)
2393
{
2394
	if(!(0 <= playerid < MAX_PLAYERS)) return 0;
2395
	#if defined FILTERSCRIPT
2396
		return CallRemoteFunction("ac_SetPlayerAmmo", "iid", playerid, weaponslot, ammo);
2397
	#else
2398
		return ac_SetPlayerAmmo(playerid, weaponslot, ammo);
2399
	#endif
2400
}
2401
2402
#if defined _ALS_SetPlayerAmmo
2403
	#undef SetPlayerAmmo
2404
#else
2405
	#define _ALS_SetPlayerAmmo
2406
#endif
2407
#define SetPlayerAmmo acc_SetPlayerAmmo
2408
2409
stock orig_SetPlayerArmedWeapon(playerid, weaponid) return SetPlayerArmedWeapon(playerid, weaponid);
2410
2411
stock acc_SetPlayerArmedWeapon(playerid, weaponid)
2412
{
2413
	#if defined FILTERSCRIPT
2414
		return CallRemoteFunction("ac_SetPlayerArmedWeapon", "ii", playerid, weaponid);
2415
	#else
2416
		return ac_SetPlayerArmedWeapon(playerid, weaponid);
2417
	#endif
2418
}
2419
2420
#if defined _ALS_SetPlayerArmedWeapon
2421
	#undef SetPlayerArmedWeapon
2422
#else
2423
	#define _ALS_SetPlayerArmedWeapon
2424
#endif
2425
#define SetPlayerArmedWeapon acc_SetPlayerArmedWeapon
2426
2427
stock orig_ResetPlayerWeapons(playerid) return ResetPlayerWeapons(playerid);
2428
2429
stock acc_ResetPlayerWeapons(playerid)
2430
{
2431
	#if defined FILTERSCRIPT
2432
		return CallRemoteFunction("ac_ResetPlayerWeapons", "i", playerid);
2433
	#else
2434
		return ac_ResetPlayerWeapons(playerid);
2435
	#endif
2436
}
2437
2438
#if defined _ALS_ResetPlayerWeapons
2439
	#undef ResetPlayerWeapons
2440
#else
2441
	#define _ALS_ResetPlayerWeapons
2442
#endif
2443
#define ResetPlayerWeapons acc_ResetPlayerWeapons
2444
2445
stock orig_GivePlayerMoney(playerid, money) return GivePlayerMoney(playerid, money);
2446
2447
stock acc_GivePlayerMoney(playerid, money)
2448
{
2449
	#if defined FILTERSCRIPT
2450
		return CallRemoteFunction("ac_GivePlayerMoney", "id", playerid, money);
2451
	#else
2452
		return ac_GivePlayerMoney(playerid, money);
2453
	#endif
2454
}
2455
2456
#if defined _ALS_GivePlayerMoney
2457
	#undef GivePlayerMoney
2458
#else
2459
	#define _ALS_GivePlayerMoney
2460
#endif
2461
#define GivePlayerMoney acc_GivePlayerMoney
2462
2463
stock orig_ResetPlayerMoney(playerid) return ResetPlayerMoney(playerid);
2464
2465
stock acc_ResetPlayerMoney(playerid)
2466
{
2467
	#if defined FILTERSCRIPT
2468
		return CallRemoteFunction("ac_ResetPlayerMoney", "i", playerid);
2469
	#else
2470
		return ac_ResetPlayerMoney(playerid);
2471
	#endif
2472
}
2473
2474
#if defined _ALS_ResetPlayerMoney
2475
	#undef ResetPlayerMoney
2476
#else
2477
	#define _ALS_ResetPlayerMoney
2478
#endif
2479
#define ResetPlayerMoney acc_ResetPlayerMoney
2480
2481
stock orig_GetPlayerMoney(playerid) return GetPlayerMoney(playerid);
2482
2483
stock acc_GetPlayerMoney(playerid)
2484
{
2485
	if(!IsPlayerConnected(playerid)) return 0;
2486
	#if defined FILTERSCRIPT
2487
		return CallRemoteFunction("ac_AntiCheatGetMoney", "i", playerid);
2488
	#else
2489
		return ac_AntiCheatGetMoney(playerid);
2490
	#endif
2491
}
2492
2493
#if defined _ALS_GetPlayerMoney
2494
	#undef GetPlayerMoney
2495
#else
2496
	#define _ALS_GetPlayerMoney
2497
#endif
2498
#define GetPlayerMoney acc_GetPlayerMoney
2499
2500
stock orig_SetPlayerSpecialAction(playerid, actionid) return SetPlayerSpecialAction(playerid, actionid);
2501
2502
stock acc_SetPlayerSpecialAction(playerid, actionid)
2503
{
2504
	#if defined FILTERSCRIPT
2505
		return CallRemoteFunction("ac_SetPlayerSpecialAction", "ii", playerid, actionid);
2506
	#else
2507
		return ac_SetPlayerSpecialAction(playerid, actionid);
2508
	#endif
2509
}
2510
2511
#if defined _ALS_SetPlayerSpecialAction
2512
	#undef SetPlayerSpecialAction
2513
#else
2514
	#define _ALS_SetPlayerSpecialAction
2515
#endif
2516
#define SetPlayerSpecialAction acc_SetPlayerSpecialAction
2517
2518
stock orig_SetPlayerInterior(playerid, interiorid) return SetPlayerInterior(playerid, interiorid);
2519
2520
stock acc_SetPlayerInterior(playerid, interiorid)
2521
{
2522
	#if defined FILTERSCRIPT
2523
		return CallRemoteFunction("ac_SetPlayerInterior", "ii", playerid, interiorid);
2524
	#else
2525
		return ac_SetPlayerInterior(playerid, interiorid);
2526
	#endif
2527
}
2528
2529
#if defined _ALS_SetPlayerInterior
2530
	#undef SetPlayerInterior
2531
#else
2532
	#define _ALS_SetPlayerInterior
2533
#endif
2534
#define SetPlayerInterior acc_SetPlayerInterior
2535
2536
stock orig_SetPlayerPos(playerid, Float:x, Float:y, Float:z) return SetPlayerPos(playerid, x, y, z);
2537
2538
stock acc_SetPlayerPos(playerid, Float:x, Float:y, Float:z)
2539
{
2540
	#if defined FILTERSCRIPT
2541
		return CallRemoteFunction("ac_SetPlayerPos", "ifff", playerid, x, y, z);
2542
	#else
2543
		return ac_SetPlayerPos(playerid, x, y, z);
2544
	#endif
2545
}
2546
2547
#if defined _ALS_SetPlayerPos
2548
	#undef SetPlayerPos
2549
#else
2550
	#define _ALS_SetPlayerPos
2551
#endif
2552
#define SetPlayerPos acc_SetPlayerPos
2553
2554
stock orig_SetPlayerPosFindZ(playerid, Float:x, Float:y, Float:z) return SetPlayerPosFindZ(playerid, x, y, z);
2555
2556
stock acc_SetPlayerPosFindZ(playerid, Float:x, Float:y, Float:z)
2557
{
2558
	#if defined FILTERSCRIPT
2559
		return CallRemoteFunction("ac_SetPlayerPosFindZ", "ifff", playerid, x, y, z);
2560
	#else
2561
		return ac_SetPlayerPosFindZ(playerid, x, y, z);
2562
	#endif
2563
}
2564
2565
#if defined _ALS_SetPlayerPosFindZ
2566
	#undef SetPlayerPosFindZ
2567
#else
2568
	#define _ALS_SetPlayerPosFindZ
2569
#endif
2570
#define SetPlayerPosFindZ acc_SetPlayerPosFindZ
2571
2572
stock orig_SetPlayerVelocity(playerid, Float:X, Float:Y, Float:Z) return SetPlayerVelocity(playerid, X, Y, Z);
2573
2574
stock acc_SetPlayerVelocity(playerid, Float:X, Float:Y, Float:Z)
2575
{
2576
	#if defined FILTERSCRIPT
2577
		return CallRemoteFunction("ac_SetPlayerVelocity", "ifff", playerid, X, Y, Z);
2578
	#else
2579
		return ac_SetPlayerVelocity(playerid, X, Y, Z);
2580
	#endif
2581
}
2582
2583
#if defined _ALS_SetPlayerVelocity
2584
	#undef SetPlayerVelocity
2585
#else
2586
	#define _ALS_SetPlayerVelocity
2587
#endif
2588
#define SetPlayerVelocity acc_SetPlayerVelocity
2589
2590
stock orig_PutPlayerInVehicle(playerid, vehicleid, seatid) return PutPlayerInVehicle(playerid, vehicleid, seatid);
2591
2592
stock acc_PutPlayerInVehicle(playerid, vehicleid, seatid)
2593
{
2594
	#if defined FILTERSCRIPT
2595
		return CallRemoteFunction("ac_PutPlayerInVehicle", "iii", playerid, vehicleid, seatid);
2596
	#else
2597
		return ac_PutPlayerInVehicle(playerid, vehicleid, seatid);
2598
	#endif
2599
}
2600
2601
#if defined _ALS_PutPlayerInVehicle
2602
	#undef PutPlayerInVehicle
2603
#else
2604
	#define _ALS_PutPlayerInVehicle
2605
#endif
2606
#define PutPlayerInVehicle acc_PutPlayerInVehicle
2607
2608
stock orig_RemovePlayerFromVehicle(playerid) return RemovePlayerFromVehicle(playerid);
2609
2610
stock acc_RemovePlayerFromVehicle(playerid)
2611
{
2612
	#if defined FILTERSCRIPT
2613
		return CallRemoteFunction("ac_RemovePlayerFromVehicle", "i", playerid);
2614
	#else
2615
		return ac_RemovePlayerFromVehicle(playerid);
2616
	#endif
2617
}
2618
2619
#if defined _ALS_RemovePlayerFromVehicle
2620
	#undef RemovePlayerFromVehicle
2621
#else
2622
	#define _ALS_RemovePlayerFromVehicle
2623
#endif
2624
#define RemovePlayerFromVehicle acc_RemovePlayerFromVehicle
2625
2626
stock orig_SetVehiclePos(vehicleid, Float:x, Float:y, Float:z) return SetVehiclePos(vehicleid, x, y, z);
2627
2628
stock acc_SetVehiclePos(vehicleid, Float:x, Float:y, Float:z)
2629
{
2630
	#if defined FILTERSCRIPT
2631
		return CallRemoteFunction("ac_SetVehiclePos", "ifff", vehicleid, x, y, z);
2632
	#else
2633
		return ac_SetVehiclePos(vehicleid, x, y, z);
2634
	#endif
2635
}
2636
2637
#if defined _ALS_SetVehiclePos
2638
	#undef SetVehiclePos
2639
#else
2640
	#define _ALS_SetVehiclePos
2641
#endif
2642
#define SetVehiclePos acc_SetVehiclePos
2643
2644
stock orig_SetVehicleVelocity(vehicleid, Float:X, Float:Y, Float:Z) return SetVehicleVelocity(vehicleid, X, Y, Z);
2645
2646
stock acc_SetVehicleVelocity(vehicleid, Float:X, Float:Y, Float:Z)
2647
{
2648
	#if defined FILTERSCRIPT
2649
		return CallRemoteFunction("ac_SetVehicleVelocity", "ifff", vehicleid, X, Y, Z);
2650
	#else
2651
		return ac_SetVehicleVelocity(vehicleid, X, Y, Z);
2652
	#endif
2653
}
2654
2655
#if defined _ALS_SetVehicleVelocity
2656
	#undef SetVehicleVelocity
2657
#else
2658
	#define _ALS_SetVehicleVelocity
2659
#endif
2660
#define SetVehicleVelocity acc_SetVehicleVelocity
2661
2662
stock orig_SetVehicleAngularVelocity(vehicleid, Float:X, Float:Y, Float:Z) return SetVehicleAngularVelocity(vehicleid, X, Y, Z);
2663
2664
stock acc_SetVehicleAngularVelocity(vehicleid, Float:X, Float:Y, Float:Z)
2665
{
2666
	#if defined FILTERSCRIPT
2667
		return CallRemoteFunction("ac_SetVehicleAngularVelocity", "ifff", vehicleid, X, Y, Z);
2668
	#else
2669
		return ac_SetVehicleAngularVelocity(vehicleid, X, Y, Z);
2670
	#endif
2671
}
2672
2673
#if defined _ALS_SetVehicleAngularVelocity
2674
	#undef SetVehicleAngularVelocity
2675
#else
2676
	#define _ALS_SetVehicleAngularVelocity
2677
#endif
2678
#define SetVehicleAngularVelocity acc_SetVehicleAngularVelocity
2679
2680
stock orig_LinkVehicleToInterior(vehicleid, interiorid) return LinkVehicleToInterior(vehicleid, interiorid);
2681
2682
stock acc_LinkVehicleToInterior(vehicleid, interiorid)
2683
{
2684
	#if defined FILTERSCRIPT
2685
		return CallRemoteFunction("ac_LinkVehicleToInterior", "ii", vehicleid, interiorid);
2686
	#else
2687
		return ac_LinkVehicleToInterior(vehicleid, interiorid);
2688
	#endif
2689
}
2690
2691
#if defined _ALS_LinkVehicleToInterior
2692
	#undef LinkVehicleToInterior
2693
#else
2694
	#define _ALS_LinkVehicleToInterior
2695
#endif
2696
#define LinkVehicleToInterior acc_LinkVehicleToInterior
2697
2698
stock orig_ChangeVehiclePaintjob(vehicleid, paintjobid) return ChangeVehiclePaintjob(vehicleid, paintjobid);
2699
2700
stock acc_ChangeVehiclePaintjob(vehicleid, paintjobid)
2701
{
2702
	#if defined FILTERSCRIPT
2703
		return CallRemoteFunction("ac_ChangeVehiclePaintjob", "ii", vehicleid, paintjobid);
2704
	#else
2705
		return ac_ChangeVehiclePaintjob(vehicleid, paintjobid);
2706
	#endif
2707
}
2708
2709
#if defined _ALS_ChangeVehiclePaintjob
2710
	#undef ChangeVehiclePaintjob
2711
#else
2712
	#define _ALS_ChangeVehiclePaintjob
2713
#endif
2714
#define ChangeVehiclePaintjob acc_ChangeVehiclePaintjob
2715
2716
stock orig_SetVehicleHealth(vehicleid, Float:health) return SetVehicleHealth(vehicleid, health);
2717
2718
stock acc_SetVehicleHealth(vehicleid, Float:health)
2719
{
2720
	if(health < 0.0) health = 0.0;
2721
	#if defined FILTERSCRIPT
2722
		return CallRemoteFunction("ac_SetVehicleHealth", "if", vehicleid, health);
2723
	#else
2724
		return ac_SetVehicleHealth(vehicleid, health);
2725
	#endif
2726
}
2727
2728
#if defined _ALS_SetVehicleHealth
2729
	#undef SetVehicleHealth
2730
#else
2731
	#define _ALS_SetVehicleHealth
2732
#endif
2733
#define SetVehicleHealth acc_SetVehicleHealth
2734
2735
stock orig_RepairVehicle(vehicleid) return RepairVehicle(vehicleid);
2736
2737
stock acc_RepairVehicle(vehicleid)
2738
{
2739
	#if defined FILTERSCRIPT
2740
		return CallRemoteFunction("ac_RepairVehicle", "i", vehicleid);
2741
	#else
2742
		return ac_RepairVehicle(vehicleid);
2743
	#endif
2744
}
2745
2746
#if defined _ALS_RepairVehicle
2747
	#undef RepairVehicle
2748
#else
2749
	#define _ALS_RepairVehicle
2750
#endif
2751
#define RepairVehicle acc_RepairVehicle
2752
2753
stock orig_SetVehicleToRespawn(vehicleid) return SetVehicleToRespawn(vehicleid);
2754
2755
stock acc_SetVehicleToRespawn(vehicleid)
2756
{
2757
	if(GetVehicleModel(vehicleid) > 0)
2758
	{
2759
		#if defined FILTERSCRIPT
2760
			return CallRemoteFunction("ac_SetVehicleToRespawn", "i", vehicleid);
2761
		#else
2762
			return ac_SetVehicleToRespawn(vehicleid);
2763
		#endif
2764
	}
2765
	return 0;
2766
}
2767
2768
#if defined _ALS_SetVehicleToRespawn
2769
	#undef SetVehicleToRespawn
2770
#else
2771
	#define _ALS_SetVehicleToRespawn
2772
#endif
2773
#define SetVehicleToRespawn acc_SetVehicleToRespawn
2774
2775
stock EnableAntiCheat(code, enable)
2776
{
2777
	#if defined FILTERSCRIPT
2778
		return CallRemoteFunction("ac_EnableAntiCheat", "ii", code, enable);
2779
	#else
2780
		return ac_EnableAntiCheat(code, enable);
2781
	#endif
2782
}
2783
2784
stock EnableAntiNOP(nopcode, enable)
2785
{
2786
	#if defined FILTERSCRIPT
2787
		return CallRemoteFunction("ac_EnableAntiNOP", "ii", nopcode, enable);
2788
	#else
2789
		return ac_EnableAntiNOP(nopcode, enable);
2790
	#endif
2791
}
2792
2793
stock EnableAntiCheatForPlayer(playerid, code, enable)
2794
{
2795
	if(!IsPlayerConnected(playerid)) return 0;
2796
	#if defined FILTERSCRIPT
2797
		return CallRemoteFunction("ac_EnableAntiCheatForPlayer", "iii", playerid, code, enable);
2798
	#else
2799
		return ac_EnableAntiCheatForPlayer(playerid, code, enable);
2800
	#endif
2801
}
2802
2803
stock EnableAntiNOPForPlayer(playerid, nopcode, enable)
2804
{
2805
	if(!IsPlayerConnected(playerid)) return 0;
2806
	#if defined FILTERSCRIPT
2807
		return CallRemoteFunction("ac_EnableAntiNOPForPlayer", "iii", playerid, nopcode, enable);
2808
	#else
2809
		return ac_EnableAntiNOPForPlayer(playerid, nopcode, enable);
2810
	#endif
2811
}
2812
2813
stock IsAntiCheatEnabled(code)
2814
{
2815
	#if defined FILTERSCRIPT
2816
		return CallRemoteFunction("ac_IsAntiCheatEnabled", "i", code);
2817
	#else
2818
		return ac_IsAntiCheatEnabled(code);
2819
	#endif
2820
}
2821
2822
stock IsAntiNOPEnabled(nopcode)
2823
{
2824
	#if defined FILTERSCRIPT
2825
		return CallRemoteFunction("ac_IsAntiNOPEnabled", "i", nopcode);
2826
	#else
2827
		return ac_IsAntiNOPEnabled(nopcode);
2828
	#endif
2829
}
2830
2831
stock IsAntiCheatEnabledForPlayer(playerid, code)
2832
{
2833
	if(!IsPlayerConnected(playerid)) return 0;
2834
	#if defined FILTERSCRIPT
2835
		return CallRemoteFunction("ac_IsAntiCheatEnabledForPlayer", "ii", playerid, code);
2836
	#else
2837
		return ac_IsAntiCheatEnabledForPlayer(playerid, code);
2838
	#endif
2839
}
2840
2841
stock IsAntiNOPEnabledForPlayer(playerid, nopcode)
2842
{
2843
	if(!IsPlayerConnected(playerid)) return 0;
2844
	#if defined FILTERSCRIPT
2845
		return CallRemoteFunction("ac_IsAntiNOPEnabledForPlayer", "ii", playerid, nopcode);
2846
	#else
2847
		return ac_IsAntiNOPEnabledForPlayer(playerid, nopcode);
2848
	#endif
2849
}
2850
2851
stock AntiCheatGetSpeed(playerid)
2852
{
2853
	if(!IsPlayerConnected(playerid)) return 0;
2854
	#if defined FILTERSCRIPT
2855
		return CallRemoteFunction("ac_AntiCheatGetSpeed", "i", playerid);
2856
	#else
2857
		return ac_AntiCheatGetSpeed(playerid);
2858
	#endif
2859
}
2860
2861
stock AntiCheatGetAnimationIndex(playerid)
2862
{
2863
	if(!IsPlayerConnected(playerid)) return 0;
2864
	#if defined FILTERSCRIPT
2865
		return CallRemoteFunction("ac_AntiCheatGetAnimationIndex", "i", playerid);
2866
	#else
2867
		return ac_AntiCheatGetAnimationIndex(playerid);
2868
	#endif
2869
}
2870
2871
stock AntiCheatGetDialog(playerid)
2872
{
2873
	if(!IsPlayerConnected(playerid)) return -1;
2874
	#if defined FILTERSCRIPT
2875
		return CallRemoteFunction("ac_AntiCheatGetDialog", "i", playerid);
2876
	#else
2877
		return ac_AntiCheatGetDialog(playerid);
2878
	#endif
2879
}
2880
2881
stock AntiCheatGetMoney(playerid)
2882
{
2883
	if(!IsPlayerConnected(playerid)) return 0;
2884
	#if defined FILTERSCRIPT
2885
		return CallRemoteFunction("ac_AntiCheatGetMoney", "i", playerid);
2886
	#else
2887
		return ac_AntiCheatGetMoney(playerid);
2888
	#endif
2889
}
2890
2891
stock AntiCheatGetEnterVehicle(playerid)
2892
{
2893
	if(!IsPlayerConnected(playerid)) return 0;
2894
	#if defined FILTERSCRIPT
2895
		return CallRemoteFunction("ac_AntiCheatGetEnterVehicle", "i", playerid);
2896
	#else
2897
		return ac_AntiCheatGetEnterVehicle(playerid);
2898
	#endif
2899
}
2900
2901
stock AntiCheatGetVehicleID(playerid)
2902
{
2903
	if(!IsPlayerConnected(playerid)) return 0;
2904
	#if defined FILTERSCRIPT
2905
		return CallRemoteFunction("ac_AntiCheatGetVehicleID", "i", playerid);
2906
	#else
2907
		return ac_AntiCheatGetVehicleID(playerid);
2908
	#endif
2909
}
2910
2911
stock AntiCheatGetWeapon(playerid)
2912
{
2913
	if(!IsPlayerConnected(playerid)) return -1;
2914
	#if defined FILTERSCRIPT
2915
		return CallRemoteFunction("ac_AntiCheatGetWeapon", "i", playerid);
2916
	#else
2917
		return ac_AntiCheatGetWeapon(playerid);
2918
	#endif
2919
}
2920
2921
stock AntiCheatGetVehicleSeat(playerid)
2922
{
2923
	if(!IsPlayerConnected(playerid)) return -1;
2924
	#if defined FILTERSCRIPT
2925
		return CallRemoteFunction("ac_AntiCheatGetVehicleSeat", "i", playerid);
2926
	#else
2927
		return ac_AntiCheatGetVehicleSeat(playerid);
2928
	#endif
2929
}
2930
2931
stock AntiCheatGetSpecialAction(playerid)
2932
{
2933
	if(!IsPlayerConnected(playerid)) return 0;
2934
	#if defined FILTERSCRIPT
2935
		return CallRemoteFunction("ac_AntiCheatGetSpecialAction", "i", playerid);
2936
	#else
2937
		return ac_AntiCheatGetSpecialAction(playerid);
2938
	#endif
2939
}
2940
2941
stock AntiCheatGetLastSpecialAction(playerid)
2942
{
2943
	if(!IsPlayerConnected(playerid)) return 0;
2944
	#if defined FILTERSCRIPT
2945
		return CallRemoteFunction("ac_AntiCheatGetLastSpecialActio", "i", playerid);
2946
	#else
2947
		return ac_AntiCheatGetLastSpecialActio(playerid);
2948
	#endif
2949
}
2950
2951
stock AntiCheatGetLastShotWeapon(playerid)
2952
{
2953
	if(!IsPlayerConnected(playerid)) return -1;
2954
	#if defined FILTERSCRIPT
2955
		return CallRemoteFunction("ac_AntiCheatGetLastShotWeapon", "i", playerid);
2956
	#else
2957
		return ac_AntiCheatGetLastShotWeapon(playerid);
2958
	#endif
2959
}
2960
2961
stock AntiCheatGetLastPickup(playerid)
2962
{
2963
	if(!IsPlayerConnected(playerid)) return -1;
2964
	#if defined FILTERSCRIPT
2965
		return CallRemoteFunction("ac_AntiCheatGetLastPickup", "i", playerid);
2966
	#else
2967
		return ac_AntiCheatGetLastPickup(playerid);
2968
	#endif
2969
}
2970
2971
stock AntiCheatGetLastUpdateTime(playerid)
2972
{
2973
	if(!IsPlayerConnected(playerid)) return 0;
2974
	#if defined FILTERSCRIPT
2975
		return CallRemoteFunction("ac_AntiCheatGetLastUpdateTime", "i", playerid);
2976
	#else
2977
		return ac_AntiCheatGetLastUpdateTime(playerid);
2978
	#endif
2979
}
2980
2981
stock AntiCheatGetLastReloadTime(playerid)
2982
{
2983
	if(!IsPlayerConnected(playerid)) return 0;
2984
	#if defined FILTERSCRIPT
2985
		return CallRemoteFunction("ac_AntiCheatGetLastReloadTime", "i", playerid);
2986
	#else
2987
		return ac_AntiCheatGetLastReloadTime(playerid);
2988
	#endif
2989
}
2990
2991
stock AntiCheatGetLastEnteredVehTime(playerid)
2992
{
2993
	if(!IsPlayerConnected(playerid)) return 0;
2994
	#if defined FILTERSCRIPT
2995
		return CallRemoteFunction("ac_AntiCheatGetLastEnteredVehTi", "i", playerid);
2996
	#else
2997
		return ac_AntiCheatGetLastEnteredVehTi(playerid);
2998
	#endif
2999
}
3000
3001
stock AntiCheatGetLastShotTime(playerid)
3002
{
3003
	if(!IsPlayerConnected(playerid)) return 0;
3004
	#if defined FILTERSCRIPT
3005
		return CallRemoteFunction("ac_AntiCheatGetLastShotTime", "i", playerid);
3006
	#else
3007
		return ac_AntiCheatGetLastShotTime(playerid);
3008
	#endif
3009
}
3010
3011
stock AntiCheatGetLastSpawnTime(playerid)
3012
{
3013
	if(!IsPlayerConnected(playerid)) return 0;
3014
	#if defined FILTERSCRIPT
3015
		return CallRemoteFunction("ac_AntiCheatGetLastSpawnTime", "i", playerid);
3016
	#else
3017
		return ac_AntiCheatGetLastSpawnTime(playerid);
3018
	#endif
3019
}
3020
3021
stock AntiCheatIntEnterExitsIsEnabled(playerid)
3022
{
3023
	if(!IsPlayerConnected(playerid)) return 0;
3024
	#if defined FILTERSCRIPT
3025
		return CallRemoteFunction("ac_AntiCheatIntEnterExitsIsEnab", "i", playerid);
3026
	#else
3027
		return ac_AntiCheatIntEnterExitsIsEnab(playerid);
3028
	#endif
3029
}
3030
3031
stock AntiCheatStuntBonusIsEnabled(playerid)
3032
{
3033
	if(!IsPlayerConnected(playerid)) return 0;
3034
	#if defined FILTERSCRIPT
3035
		return CallRemoteFunction("ac_AntiCheatStuntBonusIsEnabled", "i", playerid);
3036
	#else
3037
		return ac_AntiCheatStuntBonusIsEnabled(playerid);
3038
	#endif
3039
}
3040
3041
stock AntiCheatIsInModShop(playerid)
3042
{
3043
	if(!IsPlayerConnected(playerid)) return 0;
3044
	#if defined FILTERSCRIPT
3045
		return CallRemoteFunction("ac_AntiCheatIsInModShop", "i", playerid);
3046
	#else
3047
		return ac_AntiCheatIsInModShop(playerid);
3048
	#endif
3049
}
3050
3051
stock AntiCheatIsFrozen(playerid)
3052
{
3053
	if(!IsPlayerConnected(playerid)) return 0;
3054
	#if defined FILTERSCRIPT
3055
		return CallRemoteFunction("ac_AntiCheatIsFrozen", "i", playerid);
3056
	#else
3057
		return ac_AntiCheatIsFrozen(playerid);
3058
	#endif
3059
}
3060
3061
stock AntiCheatIsDead(playerid)
3062
{
3063
	if(!IsPlayerConnected(playerid)) return 0;
3064
	#if defined FILTERSCRIPT
3065
		return CallRemoteFunction("ac_AntiCheatIsDead", "i", playerid);
3066
	#else
3067
		return ac_AntiCheatIsDead(playerid);
3068
	#endif
3069
}
3070
3071
stock AntiCheatIsConnected(playerid)
3072
{
3073
	if(!IsPlayerConnected(playerid)) return 0;
3074
	#if defined FILTERSCRIPT
3075
		return CallRemoteFunction("ac_AntiCheatIsConnected", "i", playerid);
3076
	#else
3077
		return ac_AntiCheatIsConnected(playerid);
3078
	#endif
3079
}
3080
3081
stock AntiCheatKickWithDesync(playerid, code)
3082
{
3083
	if(!IsPlayerConnected(playerid)) return 0;
3084
	#if defined FILTERSCRIPT
3085
		return CallRemoteFunction("ac_AntiCheatKickWithDesync", "ii", playerid, code);
3086
	#else
3087
		return ac_AntiCheatKickWithDesync(playerid, code);
3088
	#endif
3089
}
3090
3091
stock AntiCheatIsKickedWithDecync(playerid)
3092
{
3093
	if(!IsPlayerConnected(playerid)) return 3;
3094
	#if defined FILTERSCRIPT
3095
		return CallRemoteFunction("ac_AntiCheatIsKickedWithDecync", "i", playerid);
3096
	#else
3097
		return ac_AntiCheatIsKickedWithDecync(playerid);
3098
	#endif
3099
}
3100
3101
stock AntiCheatGetVehicleDriver(vehicleid)
3102
{
3103
	if(GetVehicleModel(vehicleid) <= 0) return INVALID_PLAYER_ID;
3104
	#if defined FILTERSCRIPT
3105
		return CallRemoteFunction("ac_AntiCheatGetVehicleDriver", "i", vehicleid);
3106
	#else
3107
		return ac_AntiCheatGetVehicleDriver(vehicleid);
3108
	#endif
3109
}
3110
3111
stock AntiCheatGetVehicleInterior(vehicleid)
3112
{
3113
	if(GetVehicleModel(vehicleid) <= 0) return 0;
3114
	#if defined FILTERSCRIPT
3115
		return CallRemoteFunction("ac_AntiCheatGetVehicleInterior", "i", vehicleid);
3116
	#else
3117
		return ac_AntiCheatGetVehicleInterior(vehicleid);
3118
	#endif
3119
}
3120
3121
stock AntiCheatGetVehiclePaintjob(vehicleid)
3122
{
3123
	if(GetVehicleModel(vehicleid) <= 0) return 3;
3124
	#if defined FILTERSCRIPT
3125
		return CallRemoteFunction("ac_AntiCheatGetVehiclePaintjob", "i", vehicleid);
3126
	#else
3127
		return ac_AntiCheatGetVehiclePaintjob(vehicleid);
3128
	#endif
3129
}
3130
3131
stock AntiCheatGetInterior(playerid)
3132
{
3133
	if(!IsPlayerConnected(playerid)) return 0;
3134
	#if defined FILTERSCRIPT
3135
		return CallRemoteFunction("ac_AntiCheatGetInterior", "i", playerid);
3136
	#else
3137
		return ac_AntiCheatGetInterior(playerid);
3138
	#endif
3139
}
3140
3141
#if defined _inc_y_hooks || defined _INC_y_hooks
3142
	DEFINE_HOOK_REPLACEMENT(SirenState, Siren);
3143
	DEFINE_HOOK_REPLACEMENT(Vehicle, Veh);
3144
#endif
3145
3146
#if defined FILTERSCRIPT
3147
3148
static fs_AntiCheatGetNextDialog(playerid)
3149
{
3150
	if(!IsPlayerConnected(playerid)) return -1;
3151
	return CallRemoteFunction("ac_AntiCheatGetNextDialog", "i", playerid);
3152
}
3153
3154
static fs_AntiCheatSetDialog(playerid, dialogid)
3155
{
3156
	if(!(0 <= playerid < MAX_PLAYERS)) return 0;
3157
	return CallRemoteFunction("ac_ShowPlayerDialog", "id", playerid, dialogid);
3158
}
3159
3160
static fs_AntiCheatSetNextDialog(playerid, dialogid)
3161
{
3162
	if(!(0 <= playerid < MAX_PLAYERS)) return 0;
3163
	return CallRemoteFunction("ac_fs_ShowPlayerDialog", "id", playerid, dialogid);
3164
}
3165
3166
#else
3167
3168
public OnGameModeInit()
3169
{
3170
	if(!ac_LoadCfg()) printf(CFG_OPENING_ERROR, AC_CONFIG_FILE);
3171
	if(!ac_LoadNOPCfg()) printf(CFG_OPENING_ERROR, AC_NOP_CONFIG_FILE);
3172
	if(ac_ACAllow[42])
3173
	{
3174
		#if !AC_USE_QUERY
3175
			ac_QueryEnable = !!GetServerVarAsBool("query");
3176
			SendRconCommand("query 0");
3177
		#endif
3178
		#undef AC_USE_QUERY
3179
		ac_RconEnable = !!GetServerVarAsBool("rcon");
3180
		SendRconCommand("rcon 0");
3181
	}
3182
	#if AC_MAX_CONNECTS_FROM_IP > 1
3183
		ac_ACAllow[37] = false;
3184
	#endif
3185
	ac_LagCompMode = !!GetServerVarAsInt("lagcompmode");
3186
	print(" ");
3187
	print("--------------------------------------");
3188
	print(LOADED_MSG_1);
3189
	printf(LOADED_MSG_2, NEX_AC_VERSION);
3190
	print(LOADED_MSG_3);
3191
	print("--------------------------------------\n");
3192
	new ac_a = 1;
3193
	#if defined ac_OnGameModeInit
3194-
public OnGameModeExit()
3194+
3195
	#endif
3196
	static ac_strtmp[10];
3197
	GetServerVarAsString("version", ac_strtmp, sizeof ac_strtmp);
3198-
		ac_a = ac_OnGameModeExit();
3198+
3199
	#undef AC_SERVER_DL_VERSION
3200
	#undef AC_SERVER_VERSION
3201
	return ac_a;
3202-
	print(STATS_STRING_1);
3202+
3203-
	print(STATS_STRING_2);
3203+
3204-
	printf(STATS_STRING_3, ac_sInfo[0]);
3204+
3205-
	printf(STATS_STRING_4, ac_sInfo[1]);
3205+
3206-
	printf(STATS_STRING_5, ac_sInfo[2]);
3206+
3207-
	printf(STATS_STRING_6, ac_sInfo[3]);
3207+
3208-
	printf(STATS_STRING_7, ac_sInfo[4]);
3208+
3209-
	printf(STATS_STRING_8, ac_sInfo[5]);
3209+
3210
#if defined ac_OnGameModeInit
3211
	forward ac_OnGameModeInit();
3212
#endif
3213
3214-
#if defined _ALS_OnGameModeExit
3214+
#if AC_USE_STATISTICS
3215-
	#undef OnGameModeExit
3215+
	public OnGameModeExit()
3216
	{
3217-
	#define _ALS_OnGameModeExit
3217+
		new ac_a = 1;
3218
		#if defined ac_OnGameModeExit
3219-
#define OnGameModeExit ac_OnGameModeExit
3219+
			ac_a = ac_OnGameModeExit();
3220-
#if defined ac_OnGameModeExit
3220+
3221-
	forward ac_OnGameModeExit();
3221+
		print(" ");
3222
		print("--------------------------------------");
3223
		print(STATS_STRING_1);
3224
		print(STATS_STRING_2);
3225
		printf(STATS_STRING_3, ac_sInfo[0]);
3226
		printf(STATS_STRING_4, ac_sInfo[1]);
3227
		printf(STATS_STRING_5, ac_sInfo[2]);
3228
		printf(STATS_STRING_6, ac_sInfo[3]);
3229
		printf(STATS_STRING_7, ac_sInfo[4]);
3230
		printf(STATS_STRING_8, ac_sInfo[5]);
3231
		print("--------------------------------------\n");
3232
		return ac_a;
3233
	}
3234
3235
	#if defined _ALS_OnGameModeExit
3236
		#undef OnGameModeExit
3237
	#else
3238
		#define _ALS_OnGameModeExit
3239
	#endif
3240
	#define OnGameModeExit ac_OnGameModeExit
3241
	#if defined ac_OnGameModeExit
3242
		forward ac_OnGameModeExit();
3243
	#endif
3244
#endif
3245
3246
#if defined _inc_y_hooks || defined _INC_y_hooks
3247
	hook OnPlayerConnect(playerid)
3248
#else
3249
	public OnPlayerConnect(playerid)
3250
#endif
3251
{
3252
	ACInfo[playerid][acVeh] =
3253
	ACInfo[playerid][acKicked] =
3254
	ACInfo[playerid][acKickVeh] = 0;
3255
	GetPlayerIp(playerid, ACInfo[playerid][acIp], 16);
3256
	#if AC_USE_NPC
3257
		if(IsPlayerNPC(playerid))
3258
		{
3259
			if(ac_ACAllow[36] && strcmp(ACInfo[playerid][acIp], "127.0.0.1")) ac_KickWithCode(playerid, "", 0, 36);
3260
			ACInfo[playerid][acTimerID] = 0;
3261
		}
3262
		else
3263
		{
3264
	#else
3265
		if(ac_ACAllow[36] && IsPlayerNPC(playerid)) ac_KickWithCode(playerid, "", 0, 36);
3266
	#endif
3267
		if(ac_ACAllow[48] && ACInfo[playerid][acOnline]) ac_KickWithCode(playerid, "", 0, 48, 1);
3268
		if(ac_ACAllow[41])
3269
		{
3270
			static ac_ver[24];
3271
			GetPlayerVersion(playerid, ac_ver, sizeof ac_ver);
3272
			if(!strcmp(ac_ver, "unknown", true))
3273
			{
3274
				#if defined DEBUG
3275
					printf(DEBUG_CODE_2, playerid, ac_ver);
3276
				#endif
3277
				ac_KickWithCode(playerid, "", 0, 41);
3278
			}
3279
		}
3280
		new ac_i = AC_MAX_CONNECTS_FROM_IP;
3281
		if(ac_ACAllow[40])
3282
		{
3283
			#if defined foreach
3284
				foreach(new ac_j : Player)
3285
				{
3286
					#if AC_USE_NPC
3287
						if(ac_j != playerid && !IsPlayerNPC(ac_j) && !strcmp(ACInfo[playerid][acIp], ACInfo[ac_j][acIp], false))
3288
					#else
3289
						if(ac_j != playerid && !strcmp(ACInfo[playerid][acIp], ACInfo[ac_j][acIp], false))
3290
					#endif
3291
			#else
3292
				#if defined GetPlayerPoolSize
3293
					for(new ac_j = GetPlayerPoolSize(); ac_j >= 0; --ac_j)
3294
				#else
3295
					for(new ac_j = MAX_PLAYERS - 1; ac_j >= 0; --ac_j)
3296
				#endif
3297
				{
3298
					#if AC_USE_NPC
3299
						if(ac_j != playerid && IsPlayerConnected(ac_j) && !IsPlayerNPC(ac_j) &&
3300
						!strcmp(ACInfo[playerid][acIp], ACInfo[ac_j][acIp], false))
3301
					#else
3302
						if(ac_j != playerid && IsPlayerConnected(ac_j) &&
3303
						!strcmp(ACInfo[playerid][acIp], ACInfo[ac_j][acIp], false))
3304
					#endif
3305
			#endif
3306
				{
3307
					ac_i--;
3308
					if(ac_i < 1)
3309
					{
3310
						#if defined DEBUG
3311
							printf(DEBUG_CODE_3, playerid, AC_MAX_CONNECTS_FROM_IP);
3312
						#endif
3313
						#undef AC_MAX_CONNECTS_FROM_IP
3314
						ac_KickWithCode(playerid, "", 0, 40);
3315
						break;
3316
					}
3317
				}
3318
			}
3319
		}
3320
		ACInfo[playerid][acSpec] =
3321
		ACInfo[playerid][acSpawned] =
3322
		ACInfo[playerid][acDeathRes] = false;
3323
		ACInfo[playerid][acDead] = true;
3324
		ACInfo[playerid][acIntEnterExits] = ac_IntEnterExits;
3325
		ACInfo[playerid][acStuntBonus] = ac_StuntBonus;
3326
		ACInfo[playerid][acCheatCount][0] =
3327
		ACInfo[playerid][acLastWeapon] =
3328
		ACInfo[playerid][acSpawnRes] =
3329
		ACInfo[playerid][acMoney] =
3330
		ACInfo[playerid][acAnim] =
3331
		ACInfo[playerid][acInt] = 0;
3332
		ACInfo[playerid][acSet][12] =
3333
		ACInfo[playerid][acSet][10] =
3334
		ACInfo[playerid][acSet][0] =
3335
		ACInfo[playerid][acNextDialog] =
3336
		ACInfo[playerid][acDialog] = -1;
3337
		for(ac_i = 12; ac_i >= 0; --ac_i)
3338
		{
3339
			ACInfo[playerid][acSetWeapon][ac_i] = -1;
3340
			ACInfo[playerid][acGiveAmmo][ac_i] = -65535;
3341
		}
3342
		for(ac_i = 27; ac_i >= 0; --ac_i) ACInfo[playerid][acFloodCount][ac_i] = 0;
3343
		ACInfo[playerid][acDropJpX] = ACInfo[playerid][acDropJpY] = ACInfo[playerid][acDropJpZ] = 25000.0;
3344
		memcpy(ACInfo[playerid][acNOPAllow], ac_NOPAllow, 0, sizeof(ac_NOPAllow) * 4, sizeof ac_NOPAllow);
3345
		memcpy(ACInfo[playerid][acACAllow], ac_ACAllow, 0, sizeof(ac_ACAllow) * 4, sizeof ac_ACAllow);
3346
		if(ACInfo[playerid][acKicked] < 1)
3347
		{
3348
			ACInfo[playerid][acTimerTick] = GetTickCount();
3349
			#if defined SetPlayerTimerEx_
3350
				ACInfo[playerid][acTimerID] = SetPlayerTimerEx_(playerid, "ac_Timer", 0, 1000, 1, "i", playerid);
3351
			#else
3352
				ACInfo[playerid][acTimerID] = SetTimerEx("ac_Timer", 1000, false, "i", playerid);
3353
			#endif
3354
		}
3355
	#if AC_USE_NPC
3356
		}
3357
	#endif
3358
	ACInfo[playerid][acOnline] = true;
3359
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
3360
		&& defined ac_OnPlayerConnect
3361
		return ac_OnPlayerConnect(playerid);
3362
	#else
3363
		return 1;
3364
	#endif
3365
}
3366
3367
#if !defined _inc_y_hooks && !defined _INC_y_hooks
3368
	#if defined _ALS_OnPlayerConnect
3369
		#undef OnPlayerConnect
3370
	#else
3371
		#define _ALS_OnPlayerConnect
3372
	#endif
3373
	#define OnPlayerConnect ac_OnPlayerConnect
3374
	#if defined ac_OnPlayerConnect
3375
		forward ac_OnPlayerConnect(playerid);
3376
	#endif
3377
#endif
3378
3379
#if defined _inc_y_hooks || defined _INC_y_hooks
3380
	hook OnPlayerDisconnect(playerid, reason)
3381
#else
3382
	public OnPlayerDisconnect(playerid, reason)
3383
#endif
3384
{
3385
	#if AC_USE_NPC
3386
		if(!IsPlayerNPC(playerid))
3387
		{
3388
	#endif
3389
		#if defined KillPlayerTimer
3390
			KillPlayerTimer(ACInfo[playerid][acTimerID]);
3391
		#else
3392
			KillTimer(ACInfo[playerid][acTimerID]);
3393
		#endif
3394
		#if defined BlockIpAddress
3395
			if(ACInfo[playerid][acACAllow][37]) BlockIpAddress(ACInfo[playerid][acIp],
3396
			(AC_MIN_TIME_RECONNECT * 1000) - (reason > 0 ? 0 : GetServerVarAsInt("playertimeout")));
3397
		#endif
3398
		#undef AC_MIN_TIME_RECONNECT
3399
	#if AC_USE_NPC
3400
		}
3401
	#endif
3402
	#if defined KillPlayerTimer
3403
		KillPlayerTimer(ACInfo[playerid][acKickTimerID]);
3404
	#else
3405
		KillTimer(ACInfo[playerid][acKickTimerID]);
3406
	#endif
3407
	new ac_vehid = ACInfo[playerid][acKickVeh];
3408
	if(ac_vehid > 0)
3409
	{
3410
		if(ACVehInfo[ac_vehid][acDriver] == playerid) ACVehInfo[ac_vehid][acDriver] = INVALID_PLAYER_ID;
3411
		if(ACInfo[playerid][acKicked] == 2)
3412
		{
3413
			LinkVehicleToInterior(ac_vehid, ACVehInfo[ac_vehid][acInt]);
3414
			SetVehicleZAngle(ac_vehid, ACVehInfo[ac_vehid][acZAngle]);
3415
			SetVehiclePos(ac_vehid, ACVehInfo[ac_vehid][acPosX], ACVehInfo[ac_vehid][acPosY], ACVehInfo[ac_vehid][acPosZ]);
3416
			SetVehicleHealth(ac_vehid, ACVehInfo[ac_vehid][acHealth]);
3417
			ChangeVehiclePaintjob(ac_vehid, ACVehInfo[ac_vehid][acPaintJob]);
3418
		}
3419
	}
3420
	if((ac_vehid = ACInfo[playerid][acVeh]) > 0)
3421
	{
3422
		if(ACVehInfo[ac_vehid][acDriver] == playerid) ACVehInfo[ac_vehid][acDriver] = INVALID_PLAYER_ID;
3423
		if(ACInfo[playerid][acKicked] == 2)
3424
		{
3425
			LinkVehicleToInterior(ac_vehid, ACVehInfo[ac_vehid][acInt]);
3426
			SetVehicleZAngle(ac_vehid, ACVehInfo[ac_vehid][acZAngle]);
3427
			SetVehiclePos(ac_vehid, ACVehInfo[ac_vehid][acPosX], ACVehInfo[ac_vehid][acPosY], ACVehInfo[ac_vehid][acPosZ]);
3428
			SetVehicleHealth(ac_vehid, ACVehInfo[ac_vehid][acHealth]);
3429
			ChangeVehiclePaintjob(ac_vehid, ACVehInfo[ac_vehid][acPaintJob]);
3430
		}
3431
	}
3432
	ACInfo[playerid][acOnline] = false;
3433
	if(ACInfo[playerid][acKicked] < 1) ACInfo[playerid][acKicked] = 3;
3434
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
3435
		&& defined ac_OnPlayerDisconnect
3436
		return ac_OnPlayerDisconnect(playerid, reason);
3437
	#else
3438
		return 1;
3439
	#endif
3440
}
3441
3442
#if !defined _inc_y_hooks && !defined _INC_y_hooks
3443
	#if defined _ALS_OnPlayerDisconnect
3444
		#undef OnPlayerDisconnect
3445
	#else
3446
		#define _ALS_OnPlayerDisconnect
3447
	#endif
3448
	#define OnPlayerDisconnect ac_OnPlayerDisconnect
3449
	#if defined ac_OnPlayerDisconnect
3450
		forward ac_OnPlayerDisconnect(playerid, reason);
3451
	#endif
3452
#endif
3453
3454
#if defined _inc_y_hooks || defined _INC_y_hooks
3455
	hook OnPlayerSpawn(playerid)
3456
#else
3457
	public OnPlayerSpawn(playerid)
3458
#endif
3459
{
3460
	if(ACInfo[playerid][acKicked] > 0) return 0;
3461
	#if AC_USE_NPC
3462
		if(!IsPlayerNPC(playerid))
3463
		{
3464
	#endif
3465
		new ac_i, ac_gtc = GetTickCount();
3466
		if(ACInfo[playerid][acSpec] && ACInfo[playerid][acSet][7] < 2)
3467
		{
3468
			ACInfo[playerid][acSet][3] =
3469
			ACInfo[playerid][acSet][4] =
3470
			ACInfo[playerid][acSet][8] =
3471
			ACInfo[playerid][acSet][9] = -1;
3472
			ACInfo[playerid][acSpec] = false;
3473
		}
3474
		else
3475
		{
3476
			if(ACInfo[playerid][acACAllow][27] &&
3477
			(ACInfo[playerid][acSpawnRes] < 1 || ac_gtc < ACInfo[playerid][acSpawnTick] + 1000))
3478
			{
3479
				#if defined DEBUG
3480
					printf("[Nex-AC debug] Spawn res: %d, Respawn time: %d",
3481
					ACInfo[playerid][acSpawnRes], ac_gtc - ACInfo[playerid][acSpawnTick]);
3482
				#endif
3483
				ac_KickWithCode(playerid, "", 0, 27);
3484
				#if defined OnCheatDetected
3485
					ACInfo[playerid][acSpawnRes] = 1;
3486
				#endif
3487
			}
3488
			if(ACInfo[playerid][acSpawnRes] > 0) ACInfo[playerid][acSpawnRes]--;
3489
			if(!(1 <= ACInfo[playerid][acSet][7] <= 2))
3490
			{
3491
				for(ac_i = 11; ac_i >= 0; --ac_i) ACInfo[playerid][acSet][ac_i] = -1;
3492
				SetPlayerHealth(playerid, 100.0);
3493
				SetPlayerArmour(playerid, 0.0);
3494
				SetPlayerInterior(playerid, 0);
3495
			}
3496
		}
3497
		if(!(1 <= ACInfo[playerid][acSet][7] <= 2))
3498
		{
3499
			for(ac_i = 12; ac_i >= 0; --ac_i)
3500
			{
3501
				ACInfo[playerid][acSetWeapon][ac_i] = -1;
3502
				ACInfo[playerid][acGiveAmmo][ac_i] = -65535;
3503
			}
3504
			ACInfo[playerid][acNextSpecAct] = -1;
3505
			ACInfo[playerid][acUnFrozen] = true;
3506
			ACInfo[playerid][acTpToZ] = false;
3507
		}
3508
		for(ac_i = 12; ac_i >= 0; --ac_i) ACInfo[playerid][acWeapon][ac_i] = ACInfo[playerid][acAmmo][ac_i] = 0;
3509
		ACInfo[playerid][acModShop] =
3510
		ACInfo[playerid][acDead] = false;
3511
		ACInfo[playerid][acSpawned] = true;
3512
		ACInfo[playerid][acLastPickup] =
3513
		ACInfo[playerid][acEnterSeat] =
3514
		ACInfo[playerid][acSet][7] =
3515
		ACInfo[playerid][acSeat] = -1;
3516
		ACInfo[playerid][acCheatCount][5] =
3517-
		ACInfo[playerid][acIssuerID] = INVALID_PLAYER_ID;
3517+
3518
		ACInfo[playerid][acCheatCount][7] =
3519
		ACInfo[playerid][acCheatCount][8] =
3520
		ACInfo[playerid][acCheatCount][9] =
3521
		ACInfo[playerid][acCheatCount][13] =
3522
		ACInfo[playerid][acCheatCount][14] =
3523
		ACInfo[playerid][acCheatCount][16] =
3524
		ACInfo[playerid][acCheatCount][18] =
3525
		ACInfo[playerid][acCheatCount][20] =
3526
		ACInfo[playerid][acLastSpecAct] =
3527
		ACInfo[playerid][acLastWeapon] =
3528
		ACInfo[playerid][acParachute] =
3529
		ACInfo[playerid][acEnterVeh] =
3530
		ACInfo[playerid][acLastShot] =
3531
		ACInfo[playerid][acKickVeh] =
3532
		ACInfo[playerid][acSpecAct] =
3533
		ACInfo[playerid][acDmgRes] =
3534
		ACInfo[playerid][acIntRet] =
3535
		ACInfo[playerid][acSpeed] =
3536
		ACInfo[playerid][acVeh] = 0;
3537
		ACInfo[playerid][acSetPosTick] =
3538
		ACInfo[playerid][acGtc][7] = ac_gtc + 2650;
3539
		if(1 <= ACInfo[playerid][acSpawnWeapon1] <= 46)
3540
		{
3541
			ac_i = ac_wSlot[ACInfo[playerid][acSpawnWeapon1]];
3542
			ACInfo[playerid][acWeapon][ac_i] = ACInfo[playerid][acSpawnWeapon1];
3543
			ACInfo[playerid][acAmmo][ac_i] = ACInfo[playerid][acSpawnAmmo1];
3544
		}
3545
		if(1 <= ACInfo[playerid][acSpawnWeapon2] <= 46)
3546
		{
3547
			ac_i = ac_wSlot[ACInfo[playerid][acSpawnWeapon2]];
3548
			ACInfo[playerid][acWeapon][ac_i] = ACInfo[playerid][acSpawnWeapon2];
3549
			ACInfo[playerid][acAmmo][ac_i] = ACInfo[playerid][acSpawnAmmo2];
3550
		}
3551
		if(1 <= ACInfo[playerid][acSpawnWeapon3] <= 46)
3552
		{
3553
			ac_i = ac_wSlot[ACInfo[playerid][acSpawnWeapon3]];
3554
			ACInfo[playerid][acWeapon][ac_i] = ACInfo[playerid][acSpawnWeapon3];
3555
			ACInfo[playerid][acAmmo][ac_i] = ACInfo[playerid][acSpawnAmmo3];
3556
		}
3557
	#if AC_USE_NPC
3558
		}
3559
	#endif
3560
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
3561
		&& defined ac_OnPlayerSpawn
3562
		return ac_OnPlayerSpawn(playerid);
3563
	#else
3564
		return 1;
3565
	#endif
3566
}
3567-
	(ACInfo[playerid][acDead] || killerid != INVALID_PLAYER_ID && ACInfo[playerid][acIssuerID] != killerid ||
3567+
3568-
	!ACInfo[playerid][acDeathRes] && reason != 255 && (reason != WEAPON_COLLISION || killerid != INVALID_PLAYER_ID)))
3568+
3569
	#if defined _ALS_OnPlayerSpawn
3570
		#undef OnPlayerSpawn
3571-
			printf("[Nex-AC debug] Is dead: %d, death res: %d, last issuerid: %d, killerid: %d, reason: %d",
3571+
3572-
			ACInfo[playerid][acDead], ACInfo[playerid][acDeathRes], ACInfo[playerid][acIssuerID], killerid, reason);
3572+
3573
	#endif
3574
	#define OnPlayerSpawn ac_OnPlayerSpawn
3575
	#if defined ac_OnPlayerSpawn
3576
		forward ac_OnPlayerSpawn(playerid);
3577
	#endif
3578
#endif
3579
3580
#if defined _inc_y_hooks || defined _INC_y_hooks
3581
	hook OnPlayerDeath(playerid, killerid, reason)
3582
#else
3583
	public OnPlayerDeath(playerid, killerid, reason)
3584
#endif
3585
{
3586
	if(ACInfo[playerid][acKicked] > 0) return 0;
3587
	if(ACInfo[playerid][acACAllow][28] &&
3588
	(ACInfo[playerid][acDead] || !ACInfo[playerid][acDeathRes] &&
3589
	(reason != WEAPON_COLLISION && reason != 255 || killerid != INVALID_PLAYER_ID)))
3590
	{
3591
		#if defined DEBUG
3592
			printf("[Nex-AC debug] Is dead: %d, death res: %d, killerid: %d, reason: %d",
3593
			ACInfo[playerid][acDead], ACInfo[playerid][acDeathRes], killerid, reason);
3594
		#endif
3595
		ac_KickWithCode(playerid, "", 0, 28);
3596
	}
3597
	ACInfo[playerid][acDead] = true;
3598
	ACInfo[playerid][acDeathRes] = false;
3599
	if(ACInfo[playerid][acSpawnRes] < 1) ACInfo[playerid][acSpawnTick] = GetTickCount();
3600
	ACInfo[playerid][acSpawnRes] = 1;
3601
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
3602
		&& defined ac_OnPlayerDeath
3603
		return ac_OnPlayerDeath(playerid, killerid, reason);
3604
	#else
3605
		return 1;
3606
	#endif
3607
}
3608
3609
#if !defined _inc_y_hooks && !defined _INC_y_hooks
3610
	#if defined _ALS_OnPlayerDeath
3611
		#undef OnPlayerDeath
3612
	#else
3613
		#define _ALS_OnPlayerDeath
3614
	#endif
3615
	#define OnPlayerDeath ac_OnPlayerDeath
3616
	#if defined ac_OnPlayerDeath
3617
		forward ac_OnPlayerDeath(playerid, killerid, reason);
3618
	#endif
3619
#endif
3620
3621
#if defined _inc_y_hooks || defined _INC_y_hooks
3622
	#if defined OnPlayerWeaponShot
3623
		hook OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
3624
	#else
3625
		hook OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid)
3626
	#endif
3627
#else
3628
	#if defined OnPlayerWeaponShot
3629
		public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
3630
	#else
3631
		public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid)
3632
	#endif
3633
#endif
3634-
	if(!ACInfo[playerid][acDead])
3634+
3635
	if(ACInfo[playerid][acKicked] > 0) return 1;
3636-
		ACInfo[playerid][acDeathRes] = true;
3636+
3637-
		if(issuerid != INVALID_PLAYER_ID) ACInfo[playerid][acIssuerID] = issuerid;
3637+
3638
		{
3639
			#if defined DEBUG
3640
				printf("[Nex-AC debug] Issuerid: %d, amount: %f, weaponid: %d, bodypart: %d", issuerid, amount, weaponid, bodypart);
3641
			#endif
3642
			ac_KickWithCode(playerid, "", 0, 47, 4);
3643
			return 1;
3644
		}
3645
	#else
3646
		if(ACInfo[playerid][acACAllow][47] && amount < 0.0)
3647
		{
3648
			#if defined DEBUG
3649
				printf("[Nex-AC debug] Issuerid: %d, amount: %f, weaponid: %d", issuerid, amount, weaponid);
3650
			#endif
3651
			ac_KickWithCode(playerid, "", 0, 47, 4);
3652
			return 1;
3653
		}
3654
	#endif
3655
	if(!ACInfo[playerid][acDead]) ACInfo[playerid][acDeathRes] = true;
3656
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
3657
		&& defined ac_OnPlayerTakeDamage
3658
		#if defined OnPlayerWeaponShot
3659
			return ac_OnPlayerTakeDamage(playerid, issuerid, amount, weaponid, bodypart);
3660
		#else
3661
			return ac_OnPlayerTakeDamage(playerid, issuerid, amount, weaponid);
3662
		#endif
3663
	#else
3664
		return 0;
3665
	#endif
3666
}
3667
3668
#if !defined _inc_y_hooks && !defined _INC_y_hooks
3669
	#if defined _ALS_OnPlayerTakeDamage
3670
		#undef OnPlayerTakeDamage
3671
	#else
3672
		#define _ALS_OnPlayerTakeDamage
3673
	#endif
3674
	#define OnPlayerTakeDamage ac_OnPlayerTakeDamage
3675
	#if defined ac_OnPlayerTakeDamage
3676
		#if defined OnPlayerWeaponShot
3677
			forward ac_OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart);
3678
		#else
3679
			forward ac_OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid);
3680
		#endif
3681
	#endif
3682
#endif
3683
3684
#if defined _inc_y_hooks || defined _INC_y_hooks
3685
	#if defined OnPlayerWeaponShot
3686
		hook OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart)
3687
	#else
3688
		hook OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
3689
	#endif
3690
#else
3691
	#if defined OnPlayerWeaponShot
3692
		public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart)
3693
	#else
3694
		public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
3695
	#endif
3696-
			if(ACInfo[playerid][acWeapon][ac_s] != weaponid &&
3696+
3697
{
3698
	if(ACInfo[playerid][acKicked] > 0) return 1;
3699
	#if defined OnPlayerWeaponShot
3700
		if(ACInfo[playerid][acACAllow][47])
3701
		{
3702
			if(amount < 0.0 || !(0 <= damagedid < MAX_PLAYERS) || !(3 <= bodypart <= 9) ||
3703
			!(0 <= weaponid <= WEAPON_MOLTOV || WEAPON_COLT45 <= weaponid <= WEAPON_PARACHUTE))
3704
			{
3705
				#if defined DEBUG
3706
					printf("[Nex-AC debug] Damagedid: %d, amount: %f, weaponid: %d, bodypart: %d",
3707
					damagedid, amount, weaponid, bodypart);
3708
				#endif
3709
				ac_KickWithCode(playerid, "", 0, 47, 3);
3710
				return 1;
3711
			}
3712
			new ac_s = ac_wSlot[weaponid];
3713
			if(!ACInfo[playerid][acDead] && ACInfo[playerid][acWeapon][ac_s] != weaponid &&
3714
			ACInfo[playerid][acSetWeapon][ac_s] != weaponid && weaponid != WEAPON_FLAMETHROWER)
3715
			{
3716
				#if defined DEBUG
3717
					printf("[Nex-AC debug] Damagedid: %d, amount: %f, AC weapon: %d, weaponid: %d, bodypart: %d",
3718
					damagedid, amount, ACInfo[playerid][acWeapon][ac_s], weaponid, bodypart);
3719
				#endif
3720-
			if(ACInfo[playerid][acWeapon][ac_s] != weaponid &&
3720+
3721
				return 1;
3722
			}
3723
		}
3724
	#else
3725
		if(ACInfo[playerid][acACAllow][47])
3726
		{
3727
			if(amount < 0.0 || !(0 <= damagedid < MAX_PLAYERS) ||
3728
			!(0 <= weaponid <= WEAPON_MOLTOV || WEAPON_COLT45 <= weaponid <= WEAPON_PARACHUTE))
3729
			{
3730
				#if defined DEBUG
3731
					printf("[Nex-AC debug] Damagedid: %d, amount: %f, weaponid: %d", damagedid, amount, weaponid);
3732
				#endif
3733
				ac_KickWithCode(playerid, "", 0, 47, 3);
3734
				return 1;
3735
			}
3736
			new ac_s = ac_wSlot[weaponid];
3737
			if(!ACInfo[playerid][acDead] && ACInfo[playerid][acWeapon][ac_s] != weaponid &&
3738
			ACInfo[playerid][acSetWeapon][ac_s] != weaponid && weaponid != WEAPON_FLAMETHROWER)
3739
			{
3740
				#if defined DEBUG
3741
					printf("[Nex-AC debug] Damagedid: %d, amount: %f, AC weapon: %d, weaponid: %d",
3742
					damagedid, amount, ACInfo[playerid][acWeapon][ac_s], weaponid);
3743
				#endif
3744
				ac_KickWithCode(playerid, "", 0, 47, 5);
3745
				return 1;
3746
			}
3747
		}
3748
	#endif
3749
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
3750
		&& defined ac_OnPlayerGiveDamage
3751
		#if defined OnPlayerWeaponShot
3752
			return ac_OnPlayerGiveDamage(playerid, damagedid, amount, weaponid, bodypart);
3753
		#else
3754
			return ac_OnPlayerGiveDamage(playerid, damagedid, amount, weaponid);
3755
		#endif
3756
	#else
3757
		return 0;
3758
	#endif
3759
}
3760
3761
#if !defined _inc_y_hooks && !defined _INC_y_hooks
3762
	#if defined _ALS_OnPlayerGiveDamage
3763
		#undef OnPlayerGiveDamage
3764
	#else
3765
		#define _ALS_OnPlayerGiveDamage
3766
	#endif
3767
	#define OnPlayerGiveDamage ac_OnPlayerGiveDamage
3768
	#if defined ac_OnPlayerGiveDamage
3769
		#if defined OnPlayerWeaponShot
3770
			forward ac_OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart);
3771
		#else
3772
			forward ac_OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid);
3773
		#endif
3774
	#endif
3775
#endif
3776
3777
#endif
3778
3779
#if defined FILTERSCRIPT
3780
3781
#if defined _inc_y_hooks || defined _INC_y_hooks
3782
	hook OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
3783
#else
3784
	public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
3785
#endif
3786
{
3787
	if(dialogid != AntiCheatGetDialog(playerid))
3788
	{
3789
		new ac_nd = fs_AntiCheatGetNextDialog(playerid);
3790
		if(dialogid == ac_nd) fs_AntiCheatSetDialog(playerid, ac_nd);
3791
	}
3792
	fs_AntiCheatSetNextDialog(playerid, -1);
3793
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
3794
		&& defined ac_fs_OnDialogResponse
3795
		return ac_fs_OnDialogResponse(playerid, dialogid, response, listitem, inputtext);
3796
	#else
3797
		return 0;
3798
	#endif
3799
}
3800
3801
#if !defined _inc_y_hooks && !defined _INC_y_hooks
3802
	#if defined _ALS_OnDialogResponse
3803
		#undef OnDialogResponse
3804
	#else
3805
		#define _ALS_OnDialogResponse
3806
	#endif
3807
	#define OnDialogResponse ac_fs_OnDialogResponse
3808
	#if defined ac_fs_OnDialogResponse
3809
		forward ac_fs_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
3810
	#endif
3811
#endif
3812
3813
#else
3814
3815
#if defined _inc_y_hooks || defined _INC_y_hooks
3816
	hook OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
3817
#else
3818
	public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
3819
#endif
3820
{
3821
	if(ACInfo[playerid][acKicked] > 0) return 1;
3822
	new ac_i = GetTickCount();
3823
	if(ACInfo[playerid][acACAllow][49])
3824
	{
3825
		if(ac_i < ACInfo[playerid][acCall][0] + ac_Mtfc[0][0]) ac_FloodDetect(playerid, 0);
3826
		else if(ac_i < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
3827
		else ACInfo[playerid][acFloodCount][0] = ACInfo[playerid][acFloodCount][27] = 0;
3828
	}
3829
	if(ACInfo[playerid][acACAllow][39] && (dialogid != ACInfo[playerid][acDialog] || listitem < -1))
3830
	{
3831
		#if defined DEBUG
3832
			printf("[Nex-AC debug] AC dialog: %d, dialogid: %d, listitem: %d, playerid: %d",
3833
			ACInfo[playerid][acDialog], dialogid, listitem, playerid);
3834
		#endif
3835
		ac_KickWithCode(playerid, "", 0, 39);
3836
		return 1;
3837
	}
3838
	ACInfo[playerid][acDialog] = -1;
3839
	ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][0] = ac_i;
3840
	if(ACInfo[playerid][acACAllow][45])
3841
	{
3842
		for(ac_i = strlen(inputtext) - 1; ac_i >= 0; --ac_i)
3843
		{
3844
			if(inputtext[ac_i] == '%') strdel(inputtext, ac_i, ac_i + 1);
3845
		}
3846
	}
3847
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
3848
		&& defined ac_OnDialogResponse
3849
		return ac_OnDialogResponse(playerid, dialogid, response, listitem, inputtext);
3850
	#else
3851
		return 0;
3852
	#endif
3853
}
3854
3855
#if !defined _inc_y_hooks && !defined _INC_y_hooks
3856
	#if defined _ALS_OnDialogResponse
3857
		#undef OnDialogResponse
3858
	#else
3859
		#define _ALS_OnDialogResponse
3860
	#endif
3861
	#define OnDialogResponse ac_OnDialogResponse
3862
	#if defined ac_OnDialogResponse
3863
		forward ac_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
3864
	#endif
3865
#endif
3866
3867
#if defined _inc_y_hooks || defined _INC_y_hooks
3868
	hook OnEnterExitModShop(playerid, enterexit, interiorid)
3869
#else
3870
	public OnEnterExitModShop(playerid, enterexit, interiorid)
3871
#endif
3872
{
3873
	if(ACInfo[playerid][acKicked] > 0) return 0;
3874
	#if !AC_USE_TUNING_GARAGES
3875
		if(ACInfo[playerid][acACAllow][23]) ac_KickWithCode(playerid, "", 0, 23, 1);
3876
	#else
3877
		if(ACInfo[playerid][acACAllow][23] &&
3878
		(!(0 <= enterexit <= 1) || !(0 <= interiorid <= 3))) ac_KickWithCode(playerid, "", 0, 23, 7);
3879
	#endif
3880
	new ac_i = GetTickCount();
3881
	if(ACInfo[playerid][acACAllow][49])
3882
	{
3883
		if(ac_i < ACInfo[playerid][acCall][1] + ac_Mtfc[1][0]) ac_FloodDetect(playerid, 1);
3884
		else if(ac_i < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
3885
		else ACInfo[playerid][acFloodCount][1] = ACInfo[playerid][acFloodCount][27] = 0;
3886
	}
3887
	ACInfo[playerid][acModShop] = !!enterexit;
3888
	ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][1] = ac_i;
3889
	ACInfo[playerid][acSetPosTick] = ACInfo[playerid][acGtc][19] = ac_i + 3250;
3890
	new ac_vehid = ACInfo[playerid][acVeh];
3891
	if(ACInfo[playerid][acKicked] < 1)
3892
	{
3893
		ac_i = interiorid % 256;
3894
		ACVehInfo[ac_vehid][acInt] = ac_i;
3895
		#if defined foreach
3896
			foreach(new ac_j : Player)
3897
			{
3898
				if(ACInfo[ac_j][acVeh] == ac_vehid) ACInfo[ac_j][acInt] = ac_i;
3899
			}
3900
		#else
3901
			#if defined GetPlayerPoolSize
3902
				for(new ac_j = GetPlayerPoolSize(); ac_j >= 0; --ac_j)
3903
			#else
3904
				for(new ac_j = MAX_PLAYERS - 1; ac_j >= 0; --ac_j)
3905
			#endif
3906
			{
3907
				if(IsPlayerInVehicle(ac_j, ac_vehid)) ACInfo[ac_j][acInt] = ac_i;
3908
			}
3909
		#endif
3910
	}
3911
	else
3912
	{
3913
		#if defined foreach
3914
			foreach(new ac_j : Player)
3915
			{
3916
				if(ACInfo[ac_j][acVeh] == ac_vehid)
3917
				{
3918
					if(ACInfo[ac_j][acUnFrozen]) ACInfo[ac_j][acIntRet] = 2;
3919
					else ACInfo[ac_j][acIntRet] = 1;
3920
				}
3921
			}
3922
		#else
3923
			#if defined GetPlayerPoolSize
3924
				for(new ac_j = GetPlayerPoolSize(); ac_j >= 0; --ac_j)
3925
			#else
3926
				for(new ac_j = MAX_PLAYERS - 1; ac_j >= 0; --ac_j)
3927
			#endif
3928
			{
3929
				if(IsPlayerInVehicle(ac_j, ac_vehid))
3930
				{
3931
					if(ACInfo[ac_j][acUnFrozen]) ACInfo[ac_j][acIntRet] = 2;
3932
					else ACInfo[ac_j][acIntRet] = 1;
3933
				}
3934
			}
3935
		#endif
3936
	}
3937
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
3938
		&& defined ac_OnEnterExitModShop
3939
		return ac_OnEnterExitModShop(playerid, enterexit, interiorid);
3940
	#else
3941
		return 1;
3942
	#endif
3943
}
3944
3945
#if !defined _inc_y_hooks && !defined _INC_y_hooks
3946
	#if defined _ALS_OnEnterExitModShop
3947
		#undef OnEnterExitModShop
3948
	#else
3949
		#define _ALS_OnEnterExitModShop
3950
	#endif
3951
	#define OnEnterExitModShop ac_OnEnterExitModShop
3952
	#if defined ac_OnEnterExitModShop
3953
		forward ac_OnEnterExitModShop(playerid, enterexit, interiorid);
3954
	#endif
3955
#endif
3956
3957
#if defined _inc_y_hooks || defined _INC_y_hooks
3958
	hook OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
3959
#else
3960
	public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
3961
#endif
3962
{
3963
	if(!(0 <= playerid < MAX_PLAYERS) || ACInfo[playerid][acKicked] > 0) return 0;
3964
	if(ACInfo[playerid][acIntRet] > 0)
3965
	{
3966
		SetPlayerInterior(playerid, ACInfo[playerid][acInt]);
3967
		if(ACInfo[playerid][acIntRet] == 2) TogglePlayerControllable(playerid, 1);
3968
		ACInfo[playerid][acIntRet] = 0;
3969
	}
3970
	else if(newinteriorid != ACInfo[playerid][acSet][0])
3971
	{
3972
		if(ACInfo[playerid][acSet][0] == -1)
3973
		{
3974
			new ac_vehid = GetPlayerVehicleID(playerid);
3975
			if(ac_vehid > 0)
3976
			{
3977
				if(ACInfo[playerid][acACAllow][3] && newinteriorid != ACInfo[playerid][acInt])
3978
				{
3979
					#if defined DEBUG
3980
						printf("[Nex-AC debug] AC interior: %d, acInt (last): %d, newinteriorid: %d, oldinteriorid: %d, veh: %d",
3981
						ACInfo[playerid][acSet][0], ACInfo[playerid][acInt], newinteriorid, oldinteriorid, ac_vehid);
3982
					#endif
3983
					ac_KickWithCode(playerid, "", 0, 3, 1);
3984
				}
3985
			}
3986
			else if(ACInfo[playerid][acIntEnterExits]) ACInfo[playerid][acSetPosTick] = GetTickCount() + 3250;
3987
			else if(ACInfo[playerid][acACAllow][2] && newinteriorid != ACInfo[playerid][acInt])
3988
			{
3989
				#if defined DEBUG
3990
					printf("[Nex-AC debug] AC interior: %d, acInt (last): %d, newinteriorid: %d, oldinteriorid: %d",
3991
					ACInfo[playerid][acSet][0], ACInfo[playerid][acInt], newinteriorid, oldinteriorid);
3992
				#endif
3993
				ac_KickWithCode(playerid, "", 0, 2, 1);
3994
			}
3995
		}
3996
	}
3997
	else ACInfo[playerid][acSet][0] = -1;
3998
	if(ACInfo[playerid][acKicked] < 1) ACInfo[playerid][acInt] = newinteriorid % 256;
3999
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
4000
		&& defined ac_OnPlayerInteriorChange
4001
		return ac_OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid);
4002
	#else
4003
		return 1;
4004
	#endif
4005
}
4006
4007
#if !defined _inc_y_hooks && !defined _INC_y_hooks
4008
	#if defined _ALS_OnPlayerInteriorChange
4009
		#undef OnPlayerInteriorChange
4010
	#else
4011
		#define _ALS_OnPlayerInteriorChange
4012
	#endif
4013
	#define OnPlayerInteriorChange ac_OnPlayerInteriorChange
4014
	#if defined ac_OnPlayerInteriorChange
4015
		forward ac_OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid);
4016
	#endif
4017
#endif
4018
4019
#if defined _inc_y_hooks || defined _INC_y_hooks
4020
	hook OnRconLoginAttempt(ip[], password[], success)
4021
#else
4022
	public OnRconLoginAttempt(ip[], password[], success)
4023
#endif
4024
{
4025
	static ac_ipTables[MAX_PLAYERS][2], ac_ipIndex;
4026
	new ac_i, ac_currentIp = ac_IpToInt(ip);
4027
	for(; ac_i < ac_ipIndex && ac_i < sizeof ac_ipTables; ++ac_i)
4028
	{
4029
		if(ac_ipTables[ac_i][0] == ac_currentIp)
4030
		{
4031
			if(success) ac_ipTables[ac_i][1] = 0;
4032
			else if(ac_ACAllow[42])
4033
			{
4034
				if(++ac_ipTables[ac_i][1] > AC_MAX_RCON_LOGIN_ATTEMPT)
4035
				{
4036
					#if defined DEBUG
4037
						printf(DEBUG_CODE_4, ip, password);
4038
					#endif
4039
					ac_ipTables[ac_i][1] = 0;
4040
					ac_KickWithCode(INVALID_PLAYER_ID, ip, 1, 42, 1);
4041
				}
4042
				#if defined OnCheatWarning
4043
					else OnCheatWarning(INVALID_PLAYER_ID, ip, 1, 42, 1, ac_ipTables[ac_i][1]);
4044
				#endif
4045
			}
4046
			ac_i = -1;
4047
			break;
4048
		}
4049
	}
4050
	if(ac_i != -1 && !success)
4051
	{
4052
		ac_ipTables[ac_ipIndex][0] = ac_currentIp;
4053
		if(ac_ACAllow[42])
4054
		{
4055
			if(++ac_ipTables[ac_ipIndex][1] > AC_MAX_RCON_LOGIN_ATTEMPT)
4056
			{
4057
				#undef AC_MAX_RCON_LOGIN_ATTEMPT
4058
				#if defined DEBUG
4059
					printf(DEBUG_CODE_4, ip, password, ac_ipTables[ac_ipIndex][1]);
4060
				#endif
4061
				ac_ipTables[ac_ipIndex][1] = 0;
4062
				ac_KickWithCode(INVALID_PLAYER_ID, ip, 1, 42, 2);
4063
			}
4064
			#if defined OnCheatWarning
4065
				else OnCheatWarning(INVALID_PLAYER_ID, ip, 1, 42, 2, ac_ipTables[ac_ipIndex][1]);
4066
			#endif
4067
		}
4068
		if(++ac_ipIndex >= sizeof ac_ipTables) ac_ipIndex = 0;
4069
		ac_ipTables[ac_ipIndex][1] = 0;
4070
	}
4071
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
4072
		&& defined ac_OnRconLoginAttempt
4073
		return ac_OnRconLoginAttempt(ip, password, success);
4074
	#else
4075
		return 1;
4076
	#endif
4077
}
4078
4079
#if !defined _inc_y_hooks && !defined _INC_y_hooks
4080
	#if defined _ALS_OnRconLoginAttempt
4081
		#undef OnRconLoginAttempt
4082
	#else
4083
		#define _ALS_OnRconLoginAttempt
4084
	#endif
4085
	#define OnRconLoginAttempt ac_OnRconLoginAttempt
4086
	#if defined ac_OnRconLoginAttempt
4087
		forward ac_OnRconLoginAttempt(ip[], password[], success);
4088
	#endif
4089
#endif
4090
4091
public OnPlayerUpdate(playerid)
4092
{
4093
	if(!(0 <= playerid < MAX_PLAYERS) || ACInfo[playerid][acKicked] > 0) return 0;
4094
	new ac_gtc = GetTickCount(), ac_gpp;
4095
	#if AC_USE_NPC
4096
		if(!IsPlayerNPC(playerid))
4097
		{
4098
	#endif
4099
		new ac_w, ac_sa = GetPlayerState(playerid);
4100
		if(ac_sa != PLAYER_STATE_SPECTATING && (ac_w = GetPlayerWeapon(playerid)) != -1)
4101
		{
4102
			ac_gpp = GetPlayerPing(playerid);
4103
			new ac_a = GetPlayerAmmo(playerid), ac_s = ac_wSlot[ac_w];
4104
			if(ACInfo[playerid][acSet][3] != -1)
4105
			{
4106
				if(ACInfo[playerid][acSet][3] == ac_w)
4107
				{
4108
					ACInfo[playerid][acSet][3] =
4109
					ACInfo[playerid][acSetWeapon][ac_s] = -1;
4110
					ACInfo[playerid][acWeapon][ac_s] = ac_w;
4111
				}
4112
				else if(ACInfo[playerid][acGiveAmmo][ac_wSlot[ACInfo[playerid][acSet][3]]] == 0 || ACInfo[playerid][acSet][3] == 0 ||
4113
				ac_wSlot[ACInfo[playerid][acSet][3]] != ac_s && ac_gtc > ACInfo[playerid][acGtc][2] + ac_gpp) ACInfo[playerid][acSet][3] = -1;
4114
				else if(!(PLAYER_STATE_DRIVER <= ac_sa <= PLAYER_STATE_PASSENGER) && ac_gtc > ACInfo[playerid][acGtc][2] + ac_gpp)
4115
				{
4116
					if(ACInfo[playerid][acACAllow][52] && ACInfo[playerid][acNOPAllow][0])
4117
					{
4118
						if(++ACInfo[playerid][acNOPCount][0] > AC_MAX_NOP_WARNINGS)
4119
						{
4120
							#if defined DEBUG
4121
								printf(DEBUG_CODE_5, playerid, "SetPlayerArmedWeapon");
4122
								printf("[Nex-AC debug] AC weapon: %d, weaponid: %d", ACInfo[playerid][acSet][3], ac_w);
4123
							#endif
4124
							#if defined OnCheatDetected
4125
								ac_KickWithCode(playerid, "", 0, 52, 1);
4126
								if(ACInfo[playerid][acKicked] > 0) return 0;
4127
								ACInfo[playerid][acSetWeapon][ac_s] = ACInfo[playerid][acSet][3] = -1;
4128
							#else
4129
								return ac_KickWithCode(playerid, "", 0, 52, 1);
4130
							#endif
4131
						}
4132
						#if defined OnNOPWarning
4133
							else OnNOPWarning(playerid, 1, ACInfo[playerid][acNOPCount][0]);
4134
						#endif
4135
					}
4136
					else if(++ACInfo[playerid][acNOPCount][0] > AC_MAX_NOP_WARNINGS)
4137
					{
4138
						ACInfo[playerid][acSetWeapon][ac_s] =
4139
						ACInfo[playerid][acSet][3] = -1;
4140
					}
4141
				}
4142
			}
4143
			if(ACInfo[playerid][acGiveAmmo][ac_s] != -65535)
4144
			{
4145
				if(ACInfo[playerid][acGiveAmmo][ac_s] == ac_a ||
4146
				ACInfo[playerid][acGiveAmmo][ac_s] > ac_a && !(ac_a < 0 <= ACInfo[playerid][acGiveAmmo][ac_s]) &&
4147
				ac_gtc > ACInfo[playerid][acGtcGiveAmmo][ac_s] + ac_gpp)
4148
				{
4149
					ACInfo[playerid][acGiveAmmo][ac_s] = -65535;
4150
					ACInfo[playerid][acAmmo][ac_s] = ac_a;
4151
				}
4152
				else if(ac_gtc > ACInfo[playerid][acGtcGiveAmmo][ac_s] + ac_gpp)
4153
				{
4154
					if(ACInfo[playerid][acACAllow][52] && ACInfo[playerid][acNOPAllow][1])
4155
					{
4156
						if(++ACInfo[playerid][acNOPCount][1] > AC_MAX_NOP_WARNINGS)
4157
						{
4158
							#if defined DEBUG
4159
								printf(DEBUG_CODE_5, playerid, "SetPlayerAmmo");
4160
								printf("[Nex-AC debug] AC ammo: %d, ammo: %d, weaponid: %d",
4161
								ACInfo[playerid][acGiveAmmo][ac_s], ac_a, ac_w);
4162
							#endif
4163
							#if defined OnCheatDetected
4164
								ac_KickWithCode(playerid, "", 0, 52, 2);
4165
								if(ACInfo[playerid][acKicked] > 0) return 0;
4166
								ACInfo[playerid][acGiveAmmo][ac_s] = -65535;
4167
							#else
4168
								return ac_KickWithCode(playerid, "", 0, 52, 2);
4169
							#endif
4170
						}
4171
						#if defined OnNOPWarning
4172
							else OnNOPWarning(playerid, 2, ACInfo[playerid][acNOPCount][1]);
4173
						#endif
4174
					}
4175
					else if(++ACInfo[playerid][acNOPCount][1] > AC_MAX_NOP_WARNINGS) ACInfo[playerid][acGiveAmmo][ac_s] = -65535;
4176
				}
4177
			}
4178
			#if AC_USE_AMMUNATIONS || AC_USE_TUNING_GARAGES
4179
				new ac_money = orig_GetPlayerMoney(playerid);
4180
			#endif
4181
			#if AC_USE_AMMUNATIONS
4182
				if(ACInfo[playerid][acSet][10] != -1)
4183
				{
4184
					if(ac_money < ACInfo[playerid][acMoney] &&
4185
					ACInfo[playerid][acSet][10] <= ACInfo[playerid][acMoney] - ac_money) ACInfo[playerid][acSet][10] = -1;
4186
					else if(ac_gtc > ACInfo[playerid][acGtc][15] + ac_gpp)
4187
					{
4188
						if(ACInfo[playerid][acACAllow][15])
4189
						{
4190
							if(++ACInfo[playerid][acCheatCount][10] > AC_MAX_NOP_WARNINGS)
4191
							{
4192
								#if defined DEBUG
4193
									printf("[Nex-AC debug] Money: %d, old money: %d, price: %d",
4194
									ac_money, ACInfo[playerid][acMoney], ACInfo[playerid][acSet][10]);
4195
								#endif
4196
								#if defined OnCheatDetected
4197
									ac_KickWithCode(playerid, "", 0, 15, 3);
4198
									if(ACInfo[playerid][acKicked] > 0) return 0;
4199
									ACInfo[playerid][acSet][10] = -1;
4200
								#else
4201
									return ac_KickWithCode(playerid, "", 0, 15, 3);
4202
								#endif
4203
							}
4204
							#if defined OnCheatWarning
4205
								else OnCheatWarning(playerid, "", 0, 15, 3, ACInfo[playerid][acCheatCount][10]);
4206
							#endif
4207
						}
4208
						else if(++ACInfo[playerid][acCheatCount][10] > AC_MAX_NOP_WARNINGS) ACInfo[playerid][acSet][10] = -1;
4209
					}
4210
				}
4211
			#endif
4212
			new ac_i = GetPlayerInterior(playerid), Float:ac_pX, Float:ac_pY, Float:ac_pZ, Float:ac_tmp;
4213
			GetPlayerPos(playerid, ac_pX, ac_pY, ac_pZ);
4214
			if(ACInfo[playerid][acLastWeapon] != ac_w)
4215
			{
4216
				if(ACInfo[playerid][acWeapon][ac_s] != ac_w && ac_gtc > ACInfo[playerid][acGtc][7] + ac_gpp)
4217
				{
4218
					#if AC_USE_PICKUP_WEAPONS
4219
						#if defined Streamer_GetDistanceToItem\
4220
							&& defined Streamer_GetIntData
4221
						if(ACInfo[playerid][acLastPickup] > MAX_PICKUPS) Streamer_GetDistanceToItem(ac_pX, ac_pY, ac_pZ, STREAMER_TYPE_PICKUP, ACInfo[playerid][acLastPickup] - MAX_PICKUPS, ac_tmp);
4222
						if(0 <= ACInfo[playerid][acLastPickup] < MAX_PICKUPS && ACPickInfo[ACInfo[playerid][acLastPickup]][acWeapon] == ac_w &&
4223
						ac_a <= (3 <= ac_s <= 5 ? ACInfo[playerid][acAmmo][ac_s] + ac_pAmmo[ac_w] : ac_pAmmo[ac_w]) &&
4224
						IsPlayerInRangeOfPoint(playerid, 15.0, ACPickInfo[ACInfo[playerid][acLastPickup]][acPosX],
4225
						ACPickInfo[ACInfo[playerid][acLastPickup]][acPosY], ACPickInfo[ACInfo[playerid][acLastPickup]][acPosZ]) ||
4226
						ACInfo[playerid][acLastPickup] > MAX_PICKUPS &&
4227
						Streamer_GetIntData(STREAMER_TYPE_PICKUP, ACInfo[playerid][acLastPickup] - MAX_PICKUPS, E_STREAMER_EXTRA_ID) == ac_w + 100 &&
4228
						ac_a <= (3 <= ac_s <= 5 ? ACInfo[playerid][acAmmo][ac_s] + ac_pAmmo[ac_w] : ac_pAmmo[ac_w]) && ac_tmp <= 15.0)
4229
						#else
4230
						if(0 <= ACInfo[playerid][acLastPickup] < MAX_PICKUPS && ACPickInfo[ACInfo[playerid][acLastPickup]][acWeapon] == ac_w &&
4231
						ac_a <= (3 <= ac_s <= 5 ? ACInfo[playerid][acAmmo][ac_s] + ac_pAmmo[ac_w] : ac_pAmmo[ac_w]) &&
4232
						IsPlayerInRangeOfPoint(playerid, 15.0, ACPickInfo[ACInfo[playerid][acLastPickup]][acPosX],
4233
						ACPickInfo[ACInfo[playerid][acLastPickup]][acPosY], ACPickInfo[ACInfo[playerid][acLastPickup]][acPosZ]))
4234
						#endif
4235
						{
4236
							ACInfo[playerid][acWeapon][ac_s] = ac_w;
4237
							ACInfo[playerid][acAmmo][ac_s] = ac_a;
4238
						}
4239
						else
4240
						{
4241
					#endif
4242
						#if AC_USE_AMMUNATIONS
4243
							if(22 <= ac_w <= 32 && ac_InAmmuNation(playerid, ac_i))
4244
							{
4245
								ACInfo[playerid][acCheatCount][10] = 0;
4246
								if(ACInfo[playerid][acSet][10] != -1) ACInfo[playerid][acSet][10] += ac_AmmuNationInfo[ac_w - 22][0];
4247
								else ACInfo[playerid][acSet][10] = ac_AmmuNationInfo[ac_w - 22][0];
4248
								if(3 <= ac_s <= 5) ACInfo[playerid][acAmmo][ac_s] += ac_AmmuNationInfo[ac_w - 22][1];
4249
								else ACInfo[playerid][acAmmo][ac_s] = ac_AmmuNationInfo[ac_w - 22][1];
4250
								ACInfo[playerid][acWeapon][ac_s] = ac_w;
4251
								ACInfo[playerid][acGtc][15] = ac_gtc + 2650;
4252
							}
4253
							else
4254
							{
4255
						#endif
4256
							if(ac_w == 40 || ac_w == 46 && ACInfo[playerid][acVeh] > 0 && ACInfo[playerid][acParachute] > 0)
4257
							{
4258
								ACInfo[playerid][acWeapon][ac_s] = ac_w;
4259
								ACInfo[playerid][acAmmo][ac_s] = ac_a;
4260
								ACInfo[playerid][acParachute] = 0;
4261
							}
4262
							else if(ACInfo[playerid][acACAllow][15] && ACInfo[playerid][acSetWeapon][ac_s] == -1)
4263
							{
4264
								#if defined DEBUG
4265
									printf("[Nex-AC debug] AC weaponid: %d, AC ammo: %d, weaponid: %d, ammo: %d",
4266
									ACInfo[playerid][acWeapon][ac_s], ACInfo[playerid][acAmmo][ac_s], ac_w, ac_a);
4267
								#endif
4268
								#if defined OnCheatDetected
4269
									ac_KickWithCode(playerid, "", 0, 15, 1);
4270
									if(ACInfo[playerid][acKicked] > 0) return 0;
4271
									ACInfo[playerid][acWeapon][ac_s] = ac_w;
4272
									ACInfo[playerid][acAmmo][ac_s] = ac_a;
4273
								#else
4274
									return ac_KickWithCode(playerid, "", 0, 15, 1);
4275
								#endif
4276
							}
4277
						#if AC_USE_AMMUNATIONS
4278
							}
4279
						#endif
4280
					#if AC_USE_PICKUP_WEAPONS
4281
						}
4282
					#endif
4283
				}
4284
			}
4285
			else if(ACInfo[playerid][acAmmo][ac_s] != ac_a)
4286
			{
4287
				switch(ac_w)
4288
				{
4289
					case 16..18, 35..37, 39, 41..43:
4290
					{
4291
						if(ac_sa != PLAYER_STATE_DRIVER && ACInfo[playerid][acGiveAmmo][ac_s] == -65535 &&
4292
						ac_gtc > ACInfo[playerid][acGtc][7] + ac_gpp)
4293
						{
4294
							if(ACInfo[playerid][acACAllow][16] &&
4295
							(ACInfo[playerid][acAmmo][ac_s] == 0 || ac_a > ACInfo[playerid][acAmmo][ac_s] ||
4296
							ac_a < 0 < ACInfo[playerid][acAmmo][ac_s]))
4297
							{
4298
								#if defined DEBUG
4299
									printf("[Nex-AC debug] AC ammo: %d, ammo: %d, weaponid: %d",
4300
									ACInfo[playerid][acAmmo][ac_s], ac_a, ac_w);
4301
								#endif
4302
								#if defined OnCheatDetected
4303
									ac_KickWithCode(playerid, "", 0, 16, 1);
4304
									if(ACInfo[playerid][acKicked] > 0) return 0;
4305
								#else
4306
									return ac_KickWithCode(playerid, "", 0, 16, 1);
4307
								#endif
4308
							}
4309
							ACInfo[playerid][acAmmo][ac_s] = ac_a;
4310
						}
4311
					}
4312
				}
4313
			}
4314
			GetPlayerHealth(playerid, ac_tmp);
4315
			new ac_health = floatround(ac_tmp, floatround_tozero);
4316
			if(ACInfo[playerid][acSet][1] != -1)
4317
			{
4318
				if(ACInfo[playerid][acSet][1] > 255)
4319
				{
4320
					ac_health += 256 * (((ACInfo[playerid][acSet][1] - (ACInfo[playerid][acSet][1] % 256)) / 256) - 1);
4321
					if(ACInfo[playerid][acSet][1] > ac_health + 255) ac_health += 256;
4322
				}
4323
				if(ACInfo[playerid][acSet][1] == ac_health || ACInfo[playerid][acDmgRes] ||
4324
				ACInfo[playerid][acSet][1] > ac_health && ac_gtc > ACInfo[playerid][acGtc][3] + ac_gpp)
4325
				{
4326
					ACInfo[playerid][acSet][1] = -1;
4327
					ACInfo[playerid][acDmgRes] = 0;
4328
				}
4329
				else if(ac_gtc > ACInfo[playerid][acGtc][3] + ac_gpp)
4330
				{
4331
					if(ACInfo[playerid][acACAllow][52] && ACInfo[playerid][acNOPAllow][3])
4332
					{
4333
						if(++ACInfo[playerid][acNOPCount][3] > AC_MAX_NOP_WARNINGS)
4334
						{
4335
							#if defined DEBUG
4336
								printf(DEBUG_CODE_5, playerid, "SetPlayerHealth");
4337
								printf("[Nex-AC debug] AC health: %d, health: %d", ACInfo[playerid][acSet][1], ac_health);
4338
							#endif
4339
							#if defined OnCheatDetected
4340
								ac_KickWithCode(playerid, "", 0, 52, 3);
4341
								if(ACInfo[playerid][acKicked] > 0) return 0;
4342
								ACInfo[playerid][acSet][1] = -1;
4343
							#else
4344
								return ac_KickWithCode(playerid, "", 0, 52, 3);
4345
							#endif
4346
						}
4347
						#if defined OnNOPWarning
4348
							else OnNOPWarning(playerid, 3, ACInfo[playerid][acNOPCount][3]);
4349
						#endif
4350
					}
4351
					else if(++ACInfo[playerid][acNOPCount][3] > AC_MAX_NOP_WARNINGS) ACInfo[playerid][acSet][1] = -1;
4352
				}
4353
			}
4354
			else if(ACInfo[playerid][acACAllow][12])
4355
			{
4356
				if(ACInfo[playerid][acHealth] > 255)
4357
				{
4358
					ac_health += 256 * (((ACInfo[playerid][acHealth] - (ACInfo[playerid][acHealth] % 256)) / 256) - 1);
4359
					if(ACInfo[playerid][acHealth] > ac_health + 255) ac_health += 256;
4360
				}
4361
				if(ac_health > ACInfo[playerid][acHealth])
4362
				{
4363
					#if AC_USE_RESTAURANTS
4364
						if(ac_health > ACInfo[playerid][acHealth] + 70 || !ac_InRestaurant(playerid, ac_i))
4365
						{
4366
					#endif
4367
						#if AC_USE_VENDING_MACHINES
4368
							if(ac_health > ACInfo[playerid][acHealth] + 35 || !ac_NearVendingMachine(playerid, ac_i))
4369
							{
4370
						#endif
4371
							#if defined DEBUG
4372
								printf("[Nex-AC debug] AC health: %d, health: %d", ACInfo[playerid][acHealth], ac_health);
4373
							#endif
4374
							#if defined OnCheatDetected
4375
								ac_KickWithCode(playerid, "", 0, 12);
4376
								if(ACInfo[playerid][acKicked] > 0) return 0;
4377
							#else
4378
								return ac_KickWithCode(playerid, "", 0, 12);
4379
							#endif
4380
						#if AC_USE_VENDING_MACHINES
4381
							}
4382
						#endif
4383
					#if AC_USE_RESTAURANTS
4384
						}
4385
					#endif
4386
				}
4387
			}
4388
			GetPlayerArmour(playerid, ac_tmp);
4389
			new ac_armour = floatround(ac_tmp, floatround_tozero);
4390
			if(ACInfo[playerid][acSet][2] != -1)
4391
			{
4392
				if(ACInfo[playerid][acSet][2] > 255)
4393
				{
4394
					ac_armour += 256 * (((ACInfo[playerid][acSet][2] - (ACInfo[playerid][acSet][2] % 256)) / 256) - 1);
4395
					if(ACInfo[playerid][acSet][2] > ac_armour + 255) ac_armour += 256;
4396
				}
4397
				if(ACInfo[playerid][acSet][2] == ac_armour || ACInfo[playerid][acDmgRes] ||
4398
				ACInfo[playerid][acSet][2] > ac_armour && ac_gtc > ACInfo[playerid][acGtc][5] + ac_gpp)
4399
				{
4400
					ACInfo[playerid][acSet][2] = -1;
4401
					ACInfo[playerid][acDmgRes] = 0;
4402
				}
4403
				else if(ac_gtc > ACInfo[playerid][acGtc][5] + ac_gpp)
4404
				{
4405
					if(ACInfo[playerid][acACAllow][52] && ACInfo[playerid][acNOPAllow][5])
4406
					{
4407
						if(++ACInfo[playerid][acNOPCount][5] > AC_MAX_NOP_WARNINGS)
4408
						{
4409
							#if defined DEBUG
4410
								printf(DEBUG_CODE_5, playerid, "SetPlayerArmour");
4411
								printf("[Nex-AC debug] AC armour: %d, armour: %d", ACInfo[playerid][acSet][2], ac_armour);
4412
							#endif
4413
							#if defined OnCheatDetected
4414
								ac_KickWithCode(playerid, "", 0, 52, 4);
4415
								if(ACInfo[playerid][acKicked] > 0) return 0;
4416
								ACInfo[playerid][acSet][2] = -1;
4417
							#else
4418
								return ac_KickWithCode(playerid, "", 0, 52, 4);
4419
							#endif
4420
						}
4421
						#if defined OnNOPWarning
4422
							else OnNOPWarning(playerid, 4, ACInfo[playerid][acNOPCount][5]);
4423
						#endif
4424
					}
4425
					else if(++ACInfo[playerid][acNOPCount][5] > AC_MAX_NOP_WARNINGS) ACInfo[playerid][acSet][2] = -1;
4426
				}
4427
			}
4428
			else if(ACInfo[playerid][acACAllow][13])
4429
			{
4430
				if(ACInfo[playerid][acArmour] > 255)
4431
				{
4432
					ac_armour += 256 * (((ACInfo[playerid][acArmour] - (ACInfo[playerid][acArmour] % 256)) / 256) - 1);
4433
					if(ACInfo[playerid][acArmour] > ac_armour + 255) ac_armour += 256;
4434
				}
4435
				if(ac_armour > ACInfo[playerid][acArmour])
4436
				{
4437
					#if AC_USE_AMMUNATIONS
4438
						if(ac_InAmmuNation(playerid, ac_i))
4439
						{
4440
							ACInfo[playerid][acCheatCount][10] = 0;
4441
							if(ACInfo[playerid][acSet][10] != -1) ACInfo[playerid][acSet][10] += 200;
4442
							else ACInfo[playerid][acSet][10] = 200;
4443
							ACInfo[playerid][acGtc][15] = ac_gtc + 2650;
4444
						}
4445
						else
4446
						{
4447
					#endif
4448
						#if defined DEBUG
4449
							printf("[Nex-AC debug] AC armour: %d, armour: %d", ACInfo[playerid][acArmour], ac_armour);
4450
						#endif
4451
						#if defined OnCheatDetected
4452
							ac_KickWithCode(playerid, "", 0, 13);
4453
							if(ACInfo[playerid][acKicked] > 0) return 0;
4454
						#else
4455
							return ac_KickWithCode(playerid, "", 0, 13);
4456
						#endif
4457
					#if AC_USE_AMMUNATIONS
4458
						}
4459
					#endif
4460
				}
4461
			}
4462
			if(ac_health < ACInfo[playerid][acHealth] || ac_armour < ACInfo[playerid][acArmour])
4463
			{
4464
				ACInfo[playerid][acVehDmgRes] = false;
4465
				ACInfo[playerid][acCheatCount][9] = ACInfo[playerid][acDmgRes] = 0;
4466
			}
4467
			else if(ACInfo[playerid][acACAllow][19] &&
4468
			ACInfo[playerid][acDmgRes] && ac_gtc > ACInfo[playerid][acGtc][14] + ac_gpp)
4469
			{
4470
				ACInfo[playerid][acDmgRes] = 0;
4471
				ACInfo[playerid][acVehDmgRes] = false;
4472
				if(++ACInfo[playerid][acCheatCount][9] > AC_MAX_GODMODE_WARNINGS)
4473
				{
4474
					#undef AC_MAX_GODMODE_WARNINGS
4475
					#if defined DEBUG
4476
						printf("[Nex-AC debug] AC health: %d, health: %d, AC armour: %d, armour: %d",
4477
						ACInfo[playerid][acHealth], ac_health, ACInfo[playerid][acArmour], ac_armour);
4478
					#endif
4479
					#if defined OnCheatDetected
4480
						ac_KickWithCode(playerid, "", 0, 19);
4481
						if(ACInfo[playerid][acKicked] > 0) return 0;
4482
						ACInfo[playerid][acCheatCount][9] = 0;
4483
					#else
4484
						return ac_KickWithCode(playerid, "", 0, 19);
4485
					#endif
4486
				}
4487
				#if defined OnCheatWarning
4488
					else OnCheatWarning(playerid, "", 0, 19, 0, ACInfo[playerid][acCheatCount][9]);
4489
				#endif
4490
			}
4491
			#if AC_USE_TUNING_GARAGES
4492
			if(ACInfo[playerid][acSet][12] != -1)
4493
			{
4494
				if(ac_money < ACInfo[playerid][acMoney] &&
4495
				ACInfo[playerid][acSet][12] <= ACInfo[playerid][acMoney] - ac_money) ACInfo[playerid][acSet][12] = -1;
4496
				else if(ac_gtc > ACInfo[playerid][acGtc][17] + ac_gpp)
4497
				{
4498
					if(ACInfo[playerid][acACAllow][23])
4499
					{
4500
						if(++ACInfo[playerid][acCheatCount][12] > AC_MAX_NOP_WARNINGS)
4501
						{
4502
							#if defined DEBUG
4503
								printf("[Nex-AC debug] Money: %d, old money: %d, component price: %d",
4504
								ac_money, ACInfo[playerid][acMoney], ACInfo[playerid][acSet][12]);
4505
							#endif
4506
							#if defined OnCheatDetected
4507
								ac_KickWithCode(playerid, "", 0, 23, 3);
4508
								if(ACInfo[playerid][acKicked] > 0) return 0;
4509
								ACInfo[playerid][acSet][12] = -1;
4510
							#else
4511
								return ac_KickWithCode(playerid, "", 0, 23, 3);
4512
							#endif
4513
						}
4514
						#if defined OnCheatWarning
4515
							else OnCheatWarning(playerid, "", 0, 23, 3, ACInfo[playerid][acCheatCount][12]);
4516
						#endif
4517
					}
4518
					else if(++ACInfo[playerid][acCheatCount][12] > AC_MAX_NOP_WARNINGS) ACInfo[playerid][acSet][12] = -1;
4519
				}
4520
			}
4521
			#endif
4522
			if(ACInfo[playerid][acSet][0] != -1 && ac_gtc > ACInfo[playerid][acGtc][0] + ac_gpp)
4523
			{
4524
				if(ACInfo[playerid][acACAllow][52] && ACInfo[playerid][acNOPAllow][2] && ac_i != ACInfo[playerid][acSet][0])
4525
				{
4526
					if(++ACInfo[playerid][acNOPCount][2] > AC_MAX_NOP_WARNINGS)
4527
					{
4528
						#if defined DEBUG
4529
							printf(DEBUG_CODE_5, playerid, "SetPlayerInterior");
4530
							printf("[Nex-AC debug] AC interior: %d, interiorid: %d", ACInfo[playerid][acSet][0], ac_i);
4531
						#endif
4532
						#if defined OnCheatDetected
4533
							ac_KickWithCode(playerid, "", 0, 52, 5);
4534
							if(ACInfo[playerid][acKicked] > 0) return 0;
4535
							ACInfo[playerid][acSet][0] = -1;
4536
						#else
4537
							return ac_KickWithCode(playerid, "", 0, 52, 5);
4538
						#endif
4539
					}
4540
					#if defined OnNOPWarning
4541
						else OnNOPWarning(playerid, 5, ACInfo[playerid][acNOPCount][2]);
4542
					#endif
4543
				}
4544
				else if(++ACInfo[playerid][acNOPCount][2] > AC_MAX_NOP_WARNINGS) ACInfo[playerid][acSet][0] = -1;
4545
			}
4546
			if(ACInfo[playerid][acSet][6] != -1 && ac_gtc > ACInfo[playerid][acGtc][12] + ac_gpp)
4547
			{
4548
				if(ACInfo[playerid][acACAllow][52] && ACInfo[playerid][acNOPAllow][8])
4549
				{
4550
					if(++ACInfo[playerid][acNOPCount][8] > AC_MAX_NOP_WARNINGS)
4551
					{
4552
						#if defined DEBUG
4553
							printf(DEBUG_CODE_5, playerid, "TogglePlayerSpectating");
4554
						#endif
4555
						#if defined OnCheatDetected
4556
							ac_KickWithCode(playerid, "", 0, 52, 6);
4557
							if(ACInfo[playerid][acKicked] > 0) return 0;
4558
							ACInfo[playerid][acSet][6] = -1;
4559
						#else
4560
							return ac_KickWithCode(playerid, "", 0, 52, 6);
4561
						#endif
4562
					}
4563
					#if defined OnNOPWarning
4564
						else OnNOPWarning(playerid, 6, ACInfo[playerid][acNOPCount][8]);
4565
					#endif
4566
				}
4567
				else if(++ACInfo[playerid][acNOPCount][8] > AC_MAX_NOP_WARNINGS) ACInfo[playerid][acSet][6] = -1;
4568
			}
4569
			if(ACInfo[playerid][acSet][7] != -1 && ac_gtc > ACInfo[playerid][acGtc][13] + ac_gpp)
4570
			{
4571
				if(ACInfo[playerid][acACAllow][52] && ACInfo[playerid][acNOPAllow][9])
4572
				{
4573
					if(++ACInfo[playerid][acNOPCount][9] > AC_MAX_NOP_WARNINGS)
4574
					{
4575
						#if defined DEBUG
4576
							printf(DEBUG_CODE_5, playerid, "SpawnPlayer");
4577
							printf("[Nex-AC debug] acSet[7]: %d", ACInfo[playerid][acSet][7]);
4578
						#endif
4579
						#if defined OnCheatDetected
4580
							ac_KickWithCode(playerid, "", 0, 52, 7);
4581
							if(ACInfo[playerid][acKicked] > 0) return 0;
4582
							ACInfo[playerid][acSet][7] = -1;
4583
						#else
4584
							return ac_KickWithCode(playerid, "", 0, 52, 7);
4585
						#endif
4586
					}
4587
					#if defined OnNOPWarning
4588
						else OnNOPWarning(playerid, 7, ACInfo[playerid][acNOPCount][9]);
4589
					#endif
4590
				}
4591
				else if(++ACInfo[playerid][acNOPCount][9] > AC_MAX_NOP_WARNINGS) ACInfo[playerid][acSet][7] = -1;
4592
			}
4593
			new ac_vehid = GetPlayerVehicleID(playerid);
4594
			if(ACInfo[playerid][acSet][11] != -1 && ac_vehid > 0 && ac_gtc > ACInfo[playerid][acGtc][8] + ac_gpp)
4595
			{
4596
				if(ACInfo[playerid][acACAllow][52] && ACInfo[playerid][acNOPAllow][11])
4597
				{
4598
					new Float:ac_vX, Float:ac_vY, Float:ac_vZ;
4599
					GetVehicleVelocity(ac_vehid, ac_vX, ac_vY, ac_vZ);
4600
					if(ac_GetSpeed(ac_vX, ac_vY, ac_vZ) <= 30)
4601
					{
4602
						#if defined DEBUG
4603
							printf(DEBUG_CODE_5, playerid, "RemovePlayerFromVehicle");
4604
							printf("[Nex-AC debug] Veh model: %d, veh: %d", GetVehicleModel(ac_vehid), ac_vehid);
4605
						#endif
4606
						#if defined OnCheatDetected
4607
							ac_KickWithCode(playerid, "", 0, 52, 8);
4608
							if(ACInfo[playerid][acKicked] > 0) return 0;
4609
							ACInfo[playerid][acSet][11] = -1;
4610
						#else
4611
							return ac_KickWithCode(playerid, "", 0, 52, 8);
4612
						#endif
4613
					}
4614
				}
4615
				else ACInfo[playerid][acSet][11] = -1;
4616
			}
4617
			ac_s = GetPlayerVehicleSeat(playerid);
4618
			if(ACInfo[playerid][acSet][9] != -1)
4619
			{
4620
				if(ACInfo[playerid][acSet][9] == ac_vehid &&
4621
				(ACInfo[playerid][acSet][5] == ac_s || ACInfo[playerid][acSet][5] == -1))
4622
				{
4623
					if(ACInfo[playerid][acVeh] > 0)
4624
					{
4625
						if(ac_IsAnAircraft(GetVehicleModel(ACInfo[playerid][acVeh]))) ACInfo[playerid][acParachute] = 2;
4626
						if(ACVehInfo[ACInfo[playerid][acVeh]][acDriver] == playerid) ACVehInfo[ACInfo[playerid][acVeh]][acDriver] = INVALID_PLAYER_ID;
4627
					}
4628
					if(ac_s == 0)
4629
					{
4630
						ACVehInfo[ac_vehid][acDriver] = playerid;
4631
						GetVehicleZAngle(ac_vehid, ACVehInfo[ac_vehid][acZAngle]);
4632
						ACInfo[playerid][acGtc][9] = ac_gtc + 1650;
4633
						ACInfo[playerid][acSetVehHealth] = -1.0;
4634
						ACInfo[playerid][acLastPosX] = ac_pX;
4635
						ACInfo[playerid][acLastPosY] = ac_pY;
4636
					}
4637
					ACInfo[playerid][acEnterVeh] =
4638
					ACInfo[playerid][acCheatCount][11] = 0;
4639
					ACInfo[playerid][acVehDmgRes] = false;
4640
					ACInfo[playerid][acEnterSeat] =
4641
					ACInfo[playerid][acSet][11] =
4642
					ACInfo[playerid][acSet][9] =
4643
					ACInfo[playerid][acSet][8] = -1;
4644
					ACInfo[playerid][acSeat] = ac_s;
4645
				}
4646
				else if(ac_gtc > ACInfo[playerid][acGtc][1] + ac_gpp)
4647
				{
4648
					if(ACInfo[playerid][acACAllow][52] && ACInfo[playerid][acNOPAllow][7] &&
4649
					ACInfo[playerid][acSet][5] != -1 && ACVehInfo[ACInfo[playerid][acSet][9]][acSpawned])
4650
					{
4651
						if(++ACInfo[playerid][acNOPCount][7] > AC_MAX_NOP_WARNINGS)
4652
						{
4653
							#if defined DEBUG
4654
								printf(DEBUG_CODE_5, playerid, "PutPlayerInVehicle");
4655
								printf("[Nex-AC debug] AC veh: %d, veh: %d, AC seat: %d, seatid: %d",
4656
								ACInfo[playerid][acSet][9], ac_vehid, ACInfo[playerid][acSet][5], ac_s);
4657
							#endif
4658
							#if defined OnCheatDetected
4659
								ac_KickWithCode(playerid, "", 0, 52, 9);
4660
								if(ACInfo[playerid][acKicked] > 0) return 0;
4661
								ACInfo[playerid][acSet][9] = -1;
4662
							#else
4663
								return ac_KickWithCode(playerid, "", 0, 52, 9);
4664
							#endif
4665
						}
4666
						#if defined OnNOPWarning
4667
							else OnNOPWarning(playerid, 9, ACInfo[playerid][acNOPCount][7]);
4668
						#endif
4669
					}
4670
					else if(++ACInfo[playerid][acNOPCount][7] > AC_MAX_NOP_WARNINGS) ACInfo[playerid][acSet][9] = -1;
4671
				}
4672
			}
4673
			else
4674
			{
4675
				new Float:ac_dist_set = 25000.0;
4676
				if(ACInfo[playerid][acSet][8] != -1)
4677
				{
4678
					ac_dist_set = GetPlayerDistanceFromPoint(playerid, ACInfo[playerid][acSetPosX], ACInfo[playerid][acSetPosY], (ACInfo[playerid][acTpToZ] ? ac_pZ : ACInfo[playerid][acSetPosZ]));
4679
					if(ac_dist_set < 15.0)
4680
					{
4681
						ACInfo[playerid][acSet][8] = -1;
4682
						ACInfo[playerid][acGtc][11] = 0;
4683
						ACInfo[playerid][acTpToZ] = false;
4684
						ACInfo[playerid][acLastPosX] = ac_pX;
4685
						ACInfo[playerid][acLastPosY] = ac_pY;
4686
						ACInfo[playerid][acPosX] = ac_pX;
4687
						ACInfo[playerid][acPosY] = ac_pY;
4688
						ACInfo[playerid][acPosZ] = ac_pZ;
4689
					}
4690
					else if(ac_gtc > ACInfo[playerid][acGtc][11] + ac_gpp)
4691
					{
4692
						if(ACInfo[playerid][acACAllow][52] && ACInfo[playerid][acNOPAllow][10])
4693
						{
4694
							if(++ACInfo[playerid][acNOPCount][10] > AC_MAX_NOP_WARNINGS)
4695
							{
4696
								#if defined DEBUG
4697
									printf(DEBUG_CODE_5, playerid, "SetPlayerPos");
4698
									printf("[Nex-AC debug] Dist: %f, acSet[8]: %d", ac_dist_set, ACInfo[playerid][acSet][8]);
4699
								#endif
4700
								#if defined OnCheatDetected
4701
									ac_KickWithCode(playerid, "", 0, 52, 10);
4702
									if(ACInfo[playerid][acKicked] > 0) return 0;
4703
									ACInfo[playerid][acTpToZ] = false;
4704
									ACInfo[playerid][acSet][8] = -1;
4705
								#else
4706
									return ac_KickWithCode(playerid, "", 0, 52, 10);
4707
								#endif
4708
							}
4709
							#if defined OnNOPWarning
4710
								else OnNOPWarning(playerid, 10, ACInfo[playerid][acNOPCount][10]);
4711
							#endif
4712
						}
4713
						else if(++ACInfo[playerid][acNOPCount][10] > AC_MAX_NOP_WARNINGS)
4714
						{
4715
							ACInfo[playerid][acTpToZ] = false;
4716
							ACInfo[playerid][acSet][8] = -1;
4717
						}
4718
					}
4719
				}
4720
				new Float:ac_vX, Float:ac_vY, Float:ac_vZ, ac_specact = GetPlayerSpecialAction(playerid),
4721
				Float:ac_dist = GetPlayerDistanceFromPoint(playerid, ACInfo[playerid][acPosX], ACInfo[playerid][acPosY], ACInfo[playerid][acPosZ]);
4722
				if(ac_vehid > 0)
4723
				{
4724
					if(ACInfo[playerid][acVeh] > 0)
4725
					{
4726
						if(ACInfo[playerid][acVeh] != ac_vehid)
4727
						{
4728
							if(ACInfo[playerid][acACAllow][4])
4729
							{
4730
								#if defined DEBUG
4731
									printf("[Nex-AC debug] AC veh: %d, veh: %d", ACInfo[playerid][acVeh], ac_vehid);
4732
								#endif
4733
								#if defined OnCheatDetected
4734
									ac_KickWithCode(playerid, "", 0, 4, 2);
4735
									if(ACInfo[playerid][acKicked] > 0) return 0;
4736
								#else
4737
									return ac_KickWithCode(playerid, "", 0, 4, 2);
4738
								#endif
4739
							}
4740
						}
4741
						else if(ACInfo[playerid][acACAllow][50] && ACInfo[playerid][acSeat] != ac_s)
4742
						{
4743
							#if defined DEBUG
4744
								printf("[Nex-AC debug] AC seat: %d, seatid: %d, veh: %d", ACInfo[playerid][acSeat], ac_s, ac_vehid);
4745
							#endif
4746
							#if defined OnCheatDetected
4747
								ac_KickWithCode(playerid, "", 0, 50);
4748
								if(ACInfo[playerid][acKicked] > 0) return 0;
4749
							#else
4750
								return ac_KickWithCode(playerid, "", 0, 50);
4751
							#endif
4752
						}
4753
					}
4754
					if(ac_sa == PLAYER_STATE_DRIVER)
4755
					{
4756
						if(ACInfo[playerid][acACAllow][32] && ACVehInfo[ac_vehid][acDriver] != playerid &&
4757
						ACVehInfo[ac_vehid][acDriver] != INVALID_PLAYER_ID)
4758
						{
4759
							#if defined DEBUG
4760
								printf("[Nex-AC debug] AC driver: %d, driver: %d, veh: %d",
4761
								ACVehInfo[ac_vehid][acDriver], playerid, ac_vehid);
4762
							#endif
4763
							#if defined OnCheatDetected
4764
								ac_KickWithCode(playerid, "", 0, 32);
4765
								if(ACInfo[playerid][acKicked] > 0) return 0;
4766
							#else
4767
								return SetPlayerPos(playerid, ACInfo[playerid][acPosX], ACInfo[playerid][acPosY], ACInfo[playerid][acPosZ]);
4768
							#endif
4769
						}
4770
						new Float:ac_vHealth;
4771
						GetVehicleHealth(ac_vehid, ac_vHealth);
4772
						if(ACInfo[playerid][acSetVehHealth] != -1.0)
4773
						{
4774
							if(ACInfo[playerid][acSetVehHealth] == ac_vHealth ||
4775
							ACInfo[playerid][acSetVehHealth] > ac_vHealth && ac_gtc > ACInfo[playerid][acGtc][4] + ac_gpp)
4776
							{
4777
								ACInfo[playerid][acSetVehHealth] = -1.0;
4778
								ACInfo[playerid][acVehDmgRes] = false;
4779
							}
4780
							else if(ac_gtc > ACInfo[playerid][acGtc][4] + ac_gpp)
4781
							{
4782
								if(ACInfo[playerid][acACAllow][52] && ACInfo[playerid][acNOPAllow][4])
4783
								{
4784
									if(++ACInfo[playerid][acNOPCount][4] > AC_MAX_NOP_WARNINGS)
4785
									{
4786
										#if defined DEBUG
4787
											printf(DEBUG_CODE_5, playerid, "SetVehicleHealth");
4788
											printf("[Nex-AC debug] AC veh health: %f, veh health: %f, veh: %d",
4789
											ACInfo[playerid][acSetVehHealth], ac_vHealth, ac_vehid);
4790
										#endif
4791
										#if defined OnCheatDetected
4792
											ac_KickWithCode(playerid, "", 0, 52, 11);
4793
											if(ACInfo[playerid][acKicked] > 0) return 0;
4794
											ACInfo[playerid][acSetVehHealth] = -1.0;
4795
										#else
4796
											return ac_KickWithCode(playerid, "", 0, 52, 11);
4797
										#endif
4798
									}
4799
									#if defined OnNOPWarning
4800
										else OnNOPWarning(playerid, 11, ACInfo[playerid][acNOPCount][4]);
4801
									#endif
4802
								}
4803
								else if(++ACInfo[playerid][acNOPCount][4] > AC_MAX_NOP_WARNINGS) ACInfo[playerid][acSetVehHealth] = -1.0;
4804
							}
4805
						}
4806
						else if(ACInfo[playerid][acACAllow][11] &&
4807
						(ac_vHealth != ac_vHealth || ac_vHealth > ACVehInfo[ac_vehid][acHealth] &&
4808
						!ACInfo[playerid][acModShop] && ac_vHealth))
4809
						{
4810
							#if AC_USE_PAYNSPRAY
4811
								if(!ac_InPayNSpray(playerid, ac_i))
4812
								{
4813
							#endif
4814
								#if defined DEBUG
4815
									printf("[Nex-AC debug] AC veh health: %f, veh health: %f, veh: %d, playerid: %d",
4816
									ACVehInfo[ac_vehid][acHealth], ac_vHealth, ac_vehid, playerid);
4817
								#endif
4818
								#if defined OnCheatDetected
4819
									ac_KickWithCode(playerid, "", 0, 11);
4820
									if(ACInfo[playerid][acKicked] > 0) return 0;
4821
								#endif
4822
								SetVehicleHealth(ac_vehid, ACVehInfo[ac_vehid][acHealth]);
4823
							#if AC_USE_PAYNSPRAY
4824
								}
4825
							#endif
4826
						}
4827
						if(ACInfo[playerid][acVehDmgRes])
4828
						{
4829
							if(ac_vHealth < ACVehInfo[ac_vehid][acHealth])
4830
							{
4831
								ACInfo[playerid][acVehDmgRes] = false;
4832
								ACInfo[playerid][acCheatCount][11] = ACInfo[playerid][acDmgRes] = 0;
4833
							}
4834
							else if(ACInfo[playerid][acACAllow][20] && ac_gtc > ACInfo[playerid][acGtc][16] + ac_gpp)
4835
							{
4836
								ACInfo[playerid][acDmgRes] = 0;
4837
								ACInfo[playerid][acVehDmgRes] = false;
4838
								if(++ACInfo[playerid][acCheatCount][11] > AC_MAX_GODMODE_VEH_WARNINGS)
4839
								{
4840
									#undef AC_MAX_GODMODE_VEH_WARNINGS
4841
									#if defined DEBUG
4842
										printf("[Nex-AC debug] AC veh health: %f, veh health: %f, veh: %d",
4843
										ACVehInfo[ac_vehid][acHealth], ac_vHealth, ac_vehid);
4844
									#endif
4845
									#if defined OnCheatDetected
4846
										ac_KickWithCode(playerid, "", 0, 20);
4847
										if(ACInfo[playerid][acKicked] > 0) return 0;
4848
										ACInfo[playerid][acCheatCount][11] = 0;
4849
									#else
4850
										return ac_KickWithCode(playerid, "", 0, 20);
4851
									#endif
4852
								}
4853
								#if defined OnCheatWarning
4854
									else OnCheatWarning(playerid, "", 0, 20, 0, ACInfo[playerid][acCheatCount][11]);
4855
								#endif
4856
							}
4857
						}
4858
						GetVehicleVelocity(ac_vehid, ac_vX, ac_vY, ac_vZ);
4859
						new Float:ac_zAngle, ac_vsp = ac_GetSpeed(ac_vX, ac_vY, ac_vZ);
4860
						GetVehicleZAngle(ac_vehid, ac_zAngle);
4861
						if(ac_dist > 0.8)
4862
						{
4863
							if(ac_dist >= 80.0 && ac_dist > ACVehInfo[ac_vehid][acPosDiff] + ((ac_dist / 2.6) * 1.8) &&
4864
							ac_dist_set >= 80.0 && ac_dist_set > ACVehInfo[ac_vehid][acPosDiff] + ((ac_dist_set / 2.6) * 1.8))
4865
							{
4866
								#if defined VectorSize
4867
								if(ACInfo[playerid][acACAllow][3] && ac_gtc > ACInfo[playerid][acGtc][19] + ac_gpp &&
4868
								(ACInfo[playerid][acPosZ] > -95.0 || ac_pZ - ACInfo[playerid][acPosZ] < 40.0 ||
4869
								VectorSize(ac_pX - ACInfo[playerid][acPosX], ac_pY - ACInfo[playerid][acPosY], 0.0) >= 180.0 ||
4870
								++ACInfo[playerid][acCheatCount][21] > AC_MAX_TELEPORT_GLITCH_WARNINGS))
4871
								#else
4872
								if(ACInfo[playerid][acACAllow][3] && ac_gtc > ACInfo[playerid][acGtc][19] + ac_gpp &&
4873
								(ACInfo[playerid][acPosZ] > -95.0 || ac_pZ - ACInfo[playerid][acPosZ] < 40.0 ||
4874
								floatsqroot(floatpower(ac_pX - ACInfo[playerid][acPosX], 2.0) + floatpower(ac_pY - ACInfo[playerid][acPosY], 2.0)) >= 180.0 ||
4875
								++ACInfo[playerid][acCheatCount][21] > AC_MAX_TELEPORT_GLITCH_WARNINGS))
4876
								#endif
4877
								{
4878
									#if defined DEBUG
4879
										printf("[Nex-AC debug] Dist: %f, dist set: %f, old pos diff: %f, speed: %d, veh: %d",
4880
										ac_dist, ac_dist_set, ACVehInfo[ac_vehid][acPosDiff], ac_vsp, ac_vehid);
4881
									#endif
4882
									#if defined OnCheatDetected
4883
										ac_KickWithCode(playerid, "", 0, 3, 2);
4884
										if(ACInfo[playerid][acKicked] > 0) return 0;
4885
										ACInfo[playerid][acCheatCount][21] = 0;
4886
									#else
4887
										return ac_KickWithCode(playerid, "", 0, 3, 2);
4888
									#endif
4889
								}
4890
								else
4891
								{
4892
									ACInfo[playerid][acLastPosX] = ac_pX;
4893
									ACInfo[playerid][acLastPosY] = ac_pY;
4894
								}
4895
							}
4896
							else if(ac_vsp < 12 && ac_gtc > ACInfo[playerid][acGtc][11] + ac_gpp)
4897
							{
4898
								if(ac_dist >= 40.0 && ac_dist_set >= 40.0)
4899
								{
4900
									if(ACInfo[playerid][acACAllow][3])
4901
									{
4902
										#if defined DEBUG
4903
											printf("[Nex-AC debug] Speed: %d, dist: %f, dist set: %f", ac_vsp, ac_dist, ac_dist_set);
4904
										#endif
4905
										#if defined OnCheatDetected
4906
											ac_KickWithCode(playerid, "", 0, 3, 4);
4907
											if(ACInfo[playerid][acKicked] > 0) return 0;
4908
										#else
4909
											return ac_KickWithCode(playerid, "", 0, 3, 4);
4910
										#endif
4911
									}
4912
								}
4913
								else if(ACInfo[playerid][acACAllow][1])
4914
								{
4915
									if(++ACInfo[playerid][acCheatCount][2] > AC_MAX_AIR_VEH_WARNINGS)
4916
									{
4917
										#undef AC_MAX_AIR_VEH_WARNINGS
4918
										#if defined DEBUG
4919
											printf("[Nex-AC debug] Speed: %d, dist: %f, veh: %d", ac_vsp, ac_dist, ac_vehid);
4920
										#endif
4921
										#if defined OnCheatDetected
4922
											ac_KickWithCode(playerid, "", 0, 1);
4923
											if(ACInfo[playerid][acKicked] > 0) return 0;
4924
											ACInfo[playerid][acCheatCount][2] = 0;
4925
										#else
4926
											return ac_KickWithCode(playerid, "", 0, 1);
4927
										#endif
4928
									}
4929
									#if defined OnCheatWarning
4930
										else OnCheatWarning(playerid, "", 0, 1, 0, ACInfo[playerid][acCheatCount][2]);
4931
									#endif
4932
								}
4933
							}
4934
						}
4935
						if(ac_gtc > ACInfo[playerid][acGtc][9] + ac_gpp)
4936
						{
4937
							ac_i = GetVehicleModel(ac_vehid);
4938
							new ac_spDiff = ac_vsp - ac_GetSpeed(ACVehInfo[ac_vehid][acVelX], ACVehInfo[ac_vehid][acVelY], ACVehInfo[ac_vehid][acVelZ]);
4939
							if(ACInfo[playerid][acACAllow][10])
4940
							{
4941
								if(ac_spDiff > 270)
4942
								{
4943
									#if defined DEBUG
4944
										printf("[Nex-AC debug] Speed: %d, old speed: %d, veh model: %d",
4945
										ac_vsp, ac_vsp - ac_spDiff, ac_i);
4946
									#endif
4947
									#if defined OnCheatDetected
4948
										ac_KickWithCode(playerid, "", 0, 10, 3);
4949
										if(ACInfo[playerid][acKicked] > 0) return 0;
4950
									#else
4951
										return ac_KickWithCode(playerid, "", 0, 10, 3);
4952
									#endif
4953
								}
4954
								else if(ac_spDiff >= 20 &&
4955
								ACVehInfo[ac_vehid][acSpeedDiff] <= ac_spDiff && ACVehInfo[ac_vehid][acHealth] <= ac_vHealth &&
4956
								!((ac_i == 432 || ac_i == 449 || 537 <= ac_i <= 538) && ac_spDiff < 65 ||
4957
								ac_IsABicycle(ac_i) && floatabs(ac_vX) <= 0.3 && floatabs(ac_vY) <= 0.3 && floatabs(ac_vZ) <= 0.3 ||
4958
								!(ac_IsABicycle(ac_i) || ac_i == 449 || 537 <= ac_i <= 538) && ACVehInfo[ac_vehid][acHealth] < 250.0))
4959
								{
4960
									ACInfo[playerid][acCheatCount][16] += (1 * AC_SPEEDHACK_VEH_RESET_DELAY);
4961
									if(ACInfo[playerid][acCheatCount][16] > AC_MAX_SPEEDHACK_VEH_WARNINGS)
4962
									{
4963
										#if defined DEBUG
4964
											printf("[Nex-AC debug] Speed: %d, old speed: %d, veh model: %d",
4965
											ac_vsp, ac_vsp - ac_spDiff, ac_i);
4966
										#endif
4967
										#if defined OnCheatDetected
4968
											ac_KickWithCode(playerid, "", 0, 10, 1);
4969
											if(ACInfo[playerid][acKicked] > 0) return 0;
4970
											ACInfo[playerid][acCheatCount][16] = 0;
4971
										#else
4972
											return ac_KickWithCode(playerid, "", 0, 10, 1);
4973
										#endif
4974
									}
4975
									#if defined OnCheatWarning
4976
										else OnCheatWarning(playerid, "", 0, 10, 1, floatround(ACInfo[playerid][acCheatCount][16] / AC_SPEEDHACK_VEH_RESET_DELAY));
4977
									#endif
4978
								}
4979
							}
4980
							if(ACInfo[playerid][acACAllow][25] &&
4981
							ac_vsp > 15 && ac_abs(ac_spDiff) < 25 &&
4982
							floatround(floatabs(ac_zAngle - ACVehInfo[ac_vehid][acZAngle])) == 180 &&
4983
							(ac_vX < 0.0) != (ACVehInfo[ac_vehid][acVelX] < 0.0) &&
4984
							(ac_vY < 0.0) != (ACVehInfo[ac_vehid][acVelY] < 0.0) &&
4985
							(ac_vZ < 0.0) != (ACVehInfo[ac_vehid][acVelZ] < 0.0))
4986
							{
4987
								#undef ac_abs
4988
								#if defined DEBUG
4989
									printf("[Nex-AC debug] Speed: %d, speed diff: %d, z angle: %f, old z angle: %f, veh: %d",
4990
									ac_vsp, ac_spDiff, ac_zAngle, ACVehInfo[ac_vehid][acZAngle], ac_vehid);
4991
								#endif
4992
								#if defined OnCheatDetected
4993
									ac_KickWithCode(playerid, "", 0, 25);
4994
									if(ACInfo[playerid][acKicked] > 0) return 0;
4995
								#else
4996
									return ac_KickWithCode(playerid, "", 0, 25);
4997
								#endif
4998
							}
4999
							if(ac_IsAnAircraft(ac_i))
5000
							{
5001
								if(ACInfo[playerid][acACAllow][10] && (ac_vsp = ac_GetSpeed(ac_vX, ac_vY)) > 270)
5002
								{
5003
									#if defined DEBUG
5004
										printf("[Nex-AC debug] Speed (x, y): %d, veh model: %d", ac_vsp, ac_i);
5005
									#endif
5006
									#if defined OnCheatDetected
5007
										ac_KickWithCode(playerid, "", 0, 10, 2);
5008
										if(ACInfo[playerid][acKicked] > 0) return 0;
5009
									#else
5010
										return ac_KickWithCode(playerid, "", 0, 10, 2);
5011
									#endif
5012
								}
5013
							}
5014
							else if(ACInfo[playerid][acACAllow][8])
5015
							{
5016
								new Float:ac_zDiff = ac_pZ - ACInfo[playerid][acPosZ];
5017
								if(ac_vZ >= 0.1 && ac_vZ > ACVehInfo[ac_vehid][acVelZ] &&
5018
								floatabs(ACInfo[playerid][acPosX] - ac_pX) < ac_zDiff / 2.0 &&
5019
								floatabs(ACInfo[playerid][acPosY] - ac_pY) < ac_zDiff / 2.0)
5020
								{
5021
									if(++ACInfo[playerid][acCheatCount][3] > (ac_IsABicycle(ac_i) ? AC_MAX_FLYHACK_BIKE_WARNINGS : AC_MAX_FLYHACK_VEH_WARNINGS))
5022
									{
5023
										#undef AC_MAX_FLYHACK_BIKE_WARNINGS
5024
										#if defined DEBUG
5025
											printf("[Nex-AC debug] Vel z: %f, old vel z: %f, pos diff x, y, z: %f, %f, %f, veh: %d",
5026
											ac_vZ, ACVehInfo[ac_vehid][acVelZ], ACInfo[playerid][acPosX] - ac_pX, ACInfo[playerid][acPosY] - ac_pY, ac_zDiff, ac_vehid);
5027
										#endif
5028
										#if defined OnCheatDetected
5029
											ac_KickWithCode(playerid, "", 0, 8, 1);
5030
											if(ACInfo[playerid][acKicked] > 0) return 0;
5031
											ACInfo[playerid][acCheatCount][3] = 0;
5032
										#else
5033
											return ac_KickWithCode(playerid, "", 0, 8, 1);
5034
										#endif
5035
									}
5036
									#if defined OnCheatWarning
5037
										else OnCheatWarning(playerid, "", 0, 8, 1, ACInfo[playerid][acCheatCount][3]);
5038
									#endif
5039
								}
5040
								else ACInfo[playerid][acCheatCount][3] = 0;
5041
							}
5042
							ACVehInfo[ac_vehid][acSpeedDiff] = ac_spDiff;
5043
						}
5044
						ACVehInfo[ac_vehid][acPosX] = ac_pX;
5045
						ACVehInfo[ac_vehid][acPosY] = ac_pY;
5046
						ACVehInfo[ac_vehid][acPosZ] = ac_pZ;
5047
						ACVehInfo[ac_vehid][acVelX] = ac_vX;
5048
						ACVehInfo[ac_vehid][acVelY] = ac_vY;
5049
						ACVehInfo[ac_vehid][acVelZ] = ac_vZ;
5050
						ACVehInfo[ac_vehid][acPosDiff] = ac_dist;
5051
						if(ACInfo[playerid][acSetVehHealth] == -1.0) ACVehInfo[ac_vehid][acHealth] = ac_vHealth;
5052
						ACVehInfo[ac_vehid][acZAngle] = ac_zAngle;
5053
					}
5054
					ACInfo[playerid][acSeat] = ac_s;
5055
				}
5056
				else
5057
				{
5058
					GetPlayerVelocity(playerid, ac_vX, ac_vY, ac_vZ);
5059
					ac_s = ac_GetSpeed(ac_vX, ac_vY, ac_vZ);
5060
					if(ACInfo[playerid][acAnim] != (ac_sa = GetPlayerAnimationIndex(playerid)))
5061
					{
5062
						if(ac_sa == -1)
5063
						{
5064
							if(ACInfo[playerid][acACAllow][24])
5065
							{
5066
								#if defined OnCheatDetected
5067
									ac_KickWithCode(playerid, "", 0, 24);
5068
									if(ACInfo[playerid][acKicked] > 0) return 0;
5069
								#else
5070
									return ac_KickWithCode(playerid, "", 0, 24);
5071
								#endif
5072
							}
5073
						}
5074
						else if(ACInfo[playerid][acACAllow][30] && !ac_PedAnims)
5075
						{
5076
							ac_i = GetPlayerSkin(playerid);
5077
							if(ac_sa == 1231 && ac_w != 46 && 1 <= ac_i <= 311 && ac_i != 74)
5078
							{
5079
								if(++ACInfo[playerid][acCheatCount][19] > AC_MAX_CJ_RUN_WARNINGS)
5080
								{
5081
									#undef AC_MAX_CJ_RUN_WARNINGS
5082
									#if defined DEBUG
5083
										printf("[Nex-AC debug] Skin: %d, old anim: %d, weaponid: %d",
5084
										ac_i, ACInfo[playerid][acAnim], ac_w);
5085
									#endif
5086
									#if defined OnCheatDetected
5087
										ac_KickWithCode(playerid, "", 0, 30);
5088
										if(ACInfo[playerid][acKicked] > 0) return 0;
5089
										ACInfo[playerid][acCheatCount][19] = 0;
5090
									#else
5091
										return ac_KickWithCode(playerid, "", 0, 30);
5092
									#endif
5093
								}
5094
								#if defined OnCheatWarning
5095
									else OnCheatWarning(playerid, "", 0, 30, 0, ACInfo[playerid][acCheatCount][19]);
5096
								#endif
5097
							}
5098
							else ACInfo[playerid][acCheatCount][19] = 0;
5099
						}
5100
					}
5101
					else if(ACInfo[playerid][acACAllow][7])
5102
					{
5103
						if(ac_sa == 157 || ac_sa == 159 || ac_sa == 161 || ac_sa == 1058)
5104
						{
5105
							if(++ACInfo[playerid][acCheatCount][15] > AC_MAX_FLYHACK_WARNINGS)
5106
							{
5107
								#if defined DEBUG
5108
									printf("[Nex-AC debug] Anim: %d, old anim: %d, old veh: %d",
5109
									ac_sa, ACInfo[playerid][acAnim], ACInfo[playerid][acVeh]);
5110
								#endif
5111
								#if defined OnCheatDetected
5112
									ac_KickWithCode(playerid, "", 0, 7, 2);
5113
									if(ACInfo[playerid][acKicked] > 0) return 0;
5114
									ACInfo[playerid][acCheatCount][15] = 0;
5115
								#else
5116
									return ac_KickWithCode(playerid, "", 0, 7, 2);
5117
								#endif
5118
							}
5119
							#if defined OnCheatWarning
5120
								else OnCheatWarning(playerid, "", 0, 7, 2, ACInfo[playerid][acCheatCount][15]);
5121
							#endif
5122
						}
5123
						else if(1538 <= ac_sa <= 1544 && ac_s > 36 && ACInfo[playerid][acSpeed] < ac_s)
5124
						{
5125
							if(++ACInfo[playerid][acCheatCount][15] > AC_MAX_FLYHACK_WARNINGS)
5126
							{
5127
								#if defined DEBUG
5128
									printf("[Nex-AC debug] Speed: %d, old speed: %d, anim: %d",
5129
									ac_s, ACInfo[playerid][acSpeed], ac_sa);
5130
								#endif
5131
								#if defined OnCheatDetected
5132
									ac_KickWithCode(playerid, "", 0, 7, 3);
5133
									if(ACInfo[playerid][acKicked] > 0) return 0;
5134
									ACInfo[playerid][acCheatCount][15] = 0;
5135
								#else
5136
									return ac_KickWithCode(playerid, "", 0, 7, 3);
5137
								#endif
5138
							}
5139
							#if defined OnCheatWarning
5140
								else OnCheatWarning(playerid, "", 0, 7, 3, ACInfo[playerid][acCheatCount][15]);
5141
							#endif
5142
						}
5143
						#if defined VectorSize
5144
						else if(958 <= ac_sa <= 979 && (ac_vZ > 0.08 || VectorSize(ac_vX, ac_vY, 0.0) > 0.9))
5145
						#else
5146
						else if(958 <= ac_sa <= 979 && (ac_vZ > 0.08 || floatsqroot(floatpower(ac_vX, 2.0) + floatpower(ac_vY, 2.0)) > 0.9))
5147
						#endif
5148
						{
5149
							if(++ACInfo[playerid][acCheatCount][15] > AC_MAX_FLYHACK_WARNINGS)
5150
							{
5151
								#undef AC_MAX_FLYHACK_WARNINGS
5152
								#if defined DEBUG
5153
									printf("[Nex-AC debug] Anim: %d, old anim: %d, weaponid: %d, spec act: %d",
5154
									ac_sa, ACInfo[playerid][acAnim], ac_w, ac_specact);
5155
								#endif
5156
								#if defined OnCheatDetected
5157
									ac_KickWithCode(playerid, "", 0, 7, 1);
5158
									if(ACInfo[playerid][acKicked] > 0) return 0;
5159
									ACInfo[playerid][acCheatCount][15] = 0;
5160
								#else
5161
									return ac_KickWithCode(playerid, "", 0, 7, 1);
5162
								#endif
5163
							}
5164
							#if defined OnCheatWarning
5165
								else OnCheatWarning(playerid, "", 0, 7, 1, ACInfo[playerid][acCheatCount][15]);
5166
							#endif
5167
						}
5168
						else ACInfo[playerid][acCheatCount][15] = 0;
5169
					}
5170
					if(ACInfo[playerid][acSet][4] != -1)
5171
					{
5172
						if(ac_specact == ACInfo[playerid][acSet][4]) ACInfo[playerid][acSet][4] = -1;
5173
						else if(ac_gtc > ACInfo[playerid][acGtc][6] + ac_gpp)
5174
						{
5175
							if(ACInfo[playerid][acACAllow][52] && ACInfo[playerid][acNOPAllow][6] &&
5176
							ac_specact != SPECIAL_ACTION_DUCK &&
5177
							!(SPECIAL_ACTION_ENTER_VEHICLE <= ac_specact <= SPECIAL_ACTION_EXIT_VEHICLE))
5178
							{
5179
								if(++ACInfo[playerid][acNOPCount][6] > AC_MAX_NOP_WARNINGS)
5180
								{
5181
									#if defined DEBUG
5182
										printf(DEBUG_CODE_5, playerid, "SetPlayerSpecialAction");
5183
										printf("[Nex-AC debug] AC spec act: %d, spec act: %d", ACInfo[playerid][acSet][4], ac_specact);
5184
									#endif
5185
									#if defined OnCheatDetected
5186
										ac_KickWithCode(playerid, "", 0, 52, 12);
5187
										if(ACInfo[playerid][acKicked] > 0) return 0;
5188
										ACInfo[playerid][acSet][4] = -1;
5189
									#else
5190
										return ac_KickWithCode(playerid, "", 0, 52, 12);
5191
									#endif
5192
								}
5193
								#if defined OnNOPWarning
5194
									else OnNOPWarning(playerid, 12, ACInfo[playerid][acNOPCount][6]);
5195
								#endif
5196
							}
5197
							else if(++ACInfo[playerid][acNOPCount][6] > AC_MAX_NOP_WARNINGS) ACInfo[playerid][acSet][4] = -1;
5198
							#undef AC_MAX_NOP_WARNINGS
5199
						}
5200
					}
5201
					else if(ac_specact != ACInfo[playerid][acSpecAct])
5202
					{
5203
						if(ac_specact == ACInfo[playerid][acNextSpecAct]) ACInfo[playerid][acNextSpecAct] = -1;
5204
						else if(ACInfo[playerid][acACAllow][18])
5205
						{
5206
							switch(ac_specact)
5207
							{
5208
								case SPECIAL_ACTION_NONE:
5209
								{
5210
									switch(ACInfo[playerid][acSpecAct])
5211
									{
5212
										case SPECIAL_ACTION_USECELLPHONE, SPECIAL_ACTION_CUFFED, 25:
5213
										{
5214
											#if defined OnCheatDetected
5215
												ac_KickWithCode(playerid, "", 0, 18, 1);
5216
												if(ACInfo[playerid][acKicked] > 0) return 0;
5217
											#else
5218
												return ac_KickWithCode(playerid, "", 0, 18, 1);
5219
											#endif
5220
										}
5221
									}
5222
								}
5223
								case SPECIAL_ACTION_DUCK:
5224
								{
5225
									if(ACInfo[playerid][acSpecAct] > SPECIAL_ACTION_NONE &&
5226
									!(SPECIAL_ACTION_DRINK_BEER <= ACInfo[playerid][acSpecAct] <= SPECIAL_ACTION_CUFFED))
5227
									{
5228
										#if defined DEBUG
5229
											printf("[Nex-AC debug] AC spec act: %d, spec act: %d", ACInfo[playerid][acSpecAct], ac_specact);
5230
										#endif
5231
										#if defined OnCheatDetected
5232
											ac_KickWithCode(playerid, "", 0, 18, 2);
5233
											if(ACInfo[playerid][acKicked] > 0) return 0;
5234
										#else
5235
											return ac_KickWithCode(playerid, "", 0, 18, 2);
5236
										#endif
5237
									}
5238
								}
5239
								case SPECIAL_ACTION_USEJETPACK:
5240
								{
5241
									if((ac_tmp = GetPlayerDistanceFromPoint(playerid, ACInfo[playerid][acDropJpX], ACInfo[playerid][acDropJpY], ACInfo[playerid][acDropJpZ])) > 15.0)
5242
									{
5243
										#if defined DEBUG
5244
											printf("[Nex-AC debug] AC spec act: %d, spec act: %d, dist: %f",
5245
											ACInfo[playerid][acSpecAct], ac_specact, ac_tmp);
5246
										#endif
5247
										#if defined OnCheatDetected
5248
											ac_KickWithCode(playerid, "", 0, 18, 3);
5249
											if(ACInfo[playerid][acKicked] > 0) return 0;
5250
										#else
5251
											return ac_KickWithCode(playerid, "", 0, 18, 3);
5252
										#endif
5253
									}
5254
									else ACInfo[playerid][acNextSpecAct] = ACInfo[playerid][acSpecAct];
5255
									ACInfo[playerid][acDropJpX] = ACInfo[playerid][acDropJpY] = ACInfo[playerid][acDropJpZ] = 25000.0;
5256
								}
5257
								case SPECIAL_ACTION_ENTER_VEHICLE:
5258
								{
5259
									switch(ACInfo[playerid][acSpecAct])
5260
									{
5261
										case SPECIAL_ACTION_DANCE1, SPECIAL_ACTION_DANCE2, SPECIAL_ACTION_DANCE3, SPECIAL_ACTION_DANCE4, SPECIAL_ACTION_USECELLPHONE, 68:
5262
										{
5263
											#if defined OnCheatDetected
5264
												ac_KickWithCode(playerid, "", 0, 18, 4);
5265
												if(ACInfo[playerid][acKicked] > 0) return 0;
5266
											#else
5267
												return ac_KickWithCode(playerid, "", 0, 18, 4);
5268
											#endif
5269
										}
5270
									}
5271
								}
5272
								default:
5273
								{
5274
									if(!((SPECIAL_ACTION_DRINK_BEER <= ac_specact <= SPECIAL_ACTION_CUFFED &&
5275
									ACInfo[playerid][acSpecAct] == SPECIAL_ACTION_DUCK ||
5276
									ACInfo[playerid][acSpecAct] == SPECIAL_ACTION_ENTER_VEHICLE) &&
5277
									ac_specact == ACInfo[playerid][acLastSpecAct]) &&
5278
									(ACInfo[playerid][acVeh] == 0 || ac_specact != SPECIAL_ACTION_EXIT_VEHICLE &&
5279
									!(SPECIAL_ACTION_CUFFED <= ac_specact <= 25) &&
5280
									ac_specact != SPECIAL_ACTION_USECELLPHONE))
5281
									{
5282
										#if defined DEBUG
5283
											printf("[Nex-AC debug] AC spec act: %d, spec act: %d, Last spec act: %d, old veh: %d",
5284
											ACInfo[playerid][acSpecAct], ac_specact, ACInfo[playerid][acLastSpecAct], ACInfo[playerid][acVeh]);
5285
										#endif
5286
										#if defined OnCheatDetected
5287
											ac_KickWithCode(playerid, "", 0, 18, 5);
5288
											if(ACInfo[playerid][acKicked] > 0) return 0;
5289
										#else
5290
											return ac_KickWithCode(playerid, "", 0, 18, 5);
5291
										#endif
5292
									}
5293
								}
5294
							}
5295
						}
5296
						ACInfo[playerid][acLastSpecAct] = ACInfo[playerid][acSpecAct];
5297
					}
5298
					ac_a = GetPlayerSurfingVehicleID(playerid);
5299
					if(!IsVehicleStreamedIn(ac_a, playerid) && GetPlayerSurfingObjectID(playerid) == INVALID_OBJECT_ID)
5300
					{
5301
						if(ac_dist > 0.7)
5302
						{
5303
							if(ac_dist >= 40.0 && ac_dist_set >= 40.0)
5304
							{
5305
								#if defined VectorSize
5306
								if(ACInfo[playerid][acACAllow][2] && !ACInfo[playerid][acIntEnterExits] &&
5307
								(ACInfo[playerid][acPosZ] > -95.0 || ac_pZ - ACInfo[playerid][acPosZ] < 40.0 ||
5308
								VectorSize(ac_pX - ACInfo[playerid][acPosX], ac_pY - ACInfo[playerid][acPosY], 0.0) >= 180.0 ||
5309
								++ACInfo[playerid][acCheatCount][21] > AC_MAX_TELEPORT_GLITCH_WARNINGS))
5310
								#else
5311
								if(ACInfo[playerid][acACAllow][2] && !ACInfo[playerid][acIntEnterExits] &&
5312
								(ACInfo[playerid][acPosZ] > -95.0 || ac_pZ - ACInfo[playerid][acPosZ] < 40.0 ||
5313
								floatsqroot(floatpower(ac_pX - ACInfo[playerid][acPosX], 2.0) + floatpower(ac_pY - ACInfo[playerid][acPosY], 2.0)) >= 180.0 ||
5314
								++ACInfo[playerid][acCheatCount][21] > AC_MAX_TELEPORT_GLITCH_WARNINGS))
5315
								#endif
5316
								{
5317
									#undef AC_MAX_TELEPORT_GLITCH_WARNINGS
5318
									#if defined DEBUG
5319
										printf("[Nex-AC debug] Dist: %f, dist set: %f, speed: %d, old pos x, y, z: %f, %f, %f",
5320
										ac_dist, ac_dist_set, ac_s, ACInfo[playerid][acPosX], ACInfo[playerid][acPosY], ACInfo[playerid][acPosZ]);
5321-
								if(ac_s < 3 && ac_dist >= 20.0 && ac_dist_set >= 20.0)
5321+
5322
									#if defined OnCheatDetected
5323
										ac_KickWithCode(playerid, "", 0, 2, 2);
5324
										if(ACInfo[playerid][acKicked] > 0) return 0;
5325
										ACInfo[playerid][acCheatCount][21] = 0;
5326
									#else
5327
										return ac_KickWithCode(playerid, "", 0, 2, 2);
5328
									#endif
5329
								}
5330
								else
5331
								{
5332
									ACInfo[playerid][acLastPosX] = ac_pX;
5333
									ACInfo[playerid][acLastPosY] = ac_pY;
5334
								}
5335
							}
5336
							else if(ac_s <= ac_dist * (ac_dist < 1.0 ? 14.0 : 5.0) && ac_gtc > ACInfo[playerid][acGtc][11] + ac_gpp)
5337
							{
5338
								if(ac_s < 3 && (ac_dist >= 30.0 && ac_dist_set >= 30.0 ||
5339
								ac_dist >= 20.0 && ac_dist_set >= 20.0 && ac_gtc < ACInfo[playerid][acUpdateTick] + 1500))
5340
								{
5341
									if(ACInfo[playerid][acACAllow][2])
5342
									{
5343
										#if defined DEBUG
5344
											printf("[Nex-AC debug] Speed: %d, dist: %f, dist set: %f", ac_s, ac_dist, ac_dist_set);
5345
										#endif
5346
										#if defined OnCheatDetected
5347
											ac_KickWithCode(playerid, "", 0, 2, 3);
5348
											if(ACInfo[playerid][acKicked] > 0) return 0;
5349
										#else
5350
											return ac_KickWithCode(playerid, "", 0, 2, 3);
5351
										#endif
5352
									}
5353
								}
5354
								else if(ACInfo[playerid][acACAllow][0] && (ac_s || ac_dist >= 3.0))
5355
								{
5356
									if(++ACInfo[playerid][acCheatCount][1] > AC_MAX_AIR_WARNINGS)
5357
									{
5358
										#undef AC_MAX_AIR_WARNINGS
5359
										#if defined DEBUG
5360
											printf("[Nex-AC debug] Speed: %d, dist: %f", ac_s, ac_dist);
5361
										#endif
5362
										#if defined OnCheatDetected
5363
											ac_KickWithCode(playerid, "", 0, 0);
5364
											if(ACInfo[playerid][acKicked] > 0) return 0;
5365
											ACInfo[playerid][acCheatCount][1] = 0;
5366
										#else
5367
											return ac_KickWithCode(playerid, "", 0, 0);
5368
										#endif
5369
									}
5370
									#if defined OnCheatWarning
5371
										else OnCheatWarning(playerid, "", 0, 0, 0, ACInfo[playerid][acCheatCount][1]);
5372
									#endif
5373
								}
5374
							}
5375
						}
5376
						if(ac_gtc > ACInfo[playerid][acGtc][10] + ac_gpp)
5377
						{
5378
							if(ACInfo[playerid][acACAllow][9] && ACInfo[playerid][acSpeed] < ac_s)
5379
							{
5380
								if(ac_s > 530)
5381
								{
5382
									#if defined DEBUG
5383
										printf("[Nex-AC debug] Speed: %d, old speed: %d", ac_s, ACInfo[playerid][acSpeed]);
5384
									#endif
5385
									#if defined OnCheatDetected
5386
										ac_KickWithCode(playerid, "", 0, 9, 1);
5387
										if(ACInfo[playerid][acKicked] > 0) return 0;
5388
									#else
5389
										return ac_KickWithCode(playerid, "", 0, 9, 1);
5390
									#endif
5391
								}
5392
								else if((ac_s > 257 || (ac_i = ac_GetSpeed(ac_vX, ac_vY)) > 180) &&
5393
								ACInfo[playerid][acHealth] <= ac_health)
5394
								{
5395
									if(++ACInfo[playerid][acCheatCount][17] > AC_MAX_SPEEDHACK_WARNINGS)
5396
									{
5397
										#if defined DEBUG
5398
											printf("[Nex-AC debug] Speed: %d, speed x, y: %d, old speed: %d",
5399
											ac_s, ac_i, ACInfo[playerid][acSpeed]);
5400
										#endif
5401
										#if defined OnCheatDetected
5402
											ac_KickWithCode(playerid, "", 0, 9, 2);
5403
											if(ACInfo[playerid][acKicked] > 0) return 0;
5404
											ACInfo[playerid][acCheatCount][17] = 0;
5405
										#else
5406-
							if(ac_s > ac_vsp + 80)
5406+
5407
										#endif
5408
									}
5409
									#if defined OnCheatWarning
5410
										else OnCheatWarning(playerid, "", 0, 9, 2, ACInfo[playerid][acCheatCount][17]);
5411
									#endif
5412
								}
5413
								else ACInfo[playerid][acCheatCount][17] = 0;
5414
							}
5415
							ACInfo[playerid][acSpeed] = ac_s;
5416
						}
5417
					}
5418
					else if(ac_gtc > ACInfo[playerid][acGtc][10] + ac_gpp)
5419
					{
5420
						if(ACInfo[playerid][acACAllow][9] && ac_a != INVALID_VEHICLE_ID)
5421
						{
5422
							GetVehicleVelocity(ac_a, ac_vX, ac_vY, ac_vZ);
5423
							new ac_vsp = ac_GetSpeed(ac_vX, ac_vY, ac_vZ);
5424
							if(ac_s > ac_vsp + 180)
5425
							{
5426
								if(++ACInfo[playerid][acCheatCount][17] > AC_MAX_SPEEDHACK_WARNINGS)
5427
								{
5428
									#undef AC_MAX_SPEEDHACK_WARNINGS
5429
									#if defined DEBUG
5430
										printf("[Nex-AC debug] Speed: %d, old speed: %d, veh speed: %d",
5431
										ac_s, ACInfo[playerid][acSpeed], ac_vsp);
5432
									#endif
5433
									#if defined OnCheatDetected
5434
										ac_KickWithCode(playerid, "", 0, 9, 3);
5435
										if(ACInfo[playerid][acKicked] > 0) return 0;
5436
										ACInfo[playerid][acCheatCount][17] = 0;
5437
									#else
5438
										return ac_KickWithCode(playerid, "", 0, 9, 3);
5439
									#endif
5440
								}
5441
								#if defined OnCheatWarning
5442
									else OnCheatWarning(playerid, "", 0, 9, 3, ACInfo[playerid][acCheatCount][17]);
5443
								#endif
5444
							}
5445
							else ACInfo[playerid][acCheatCount][17] = 0;
5446
						}
5447
						ACInfo[playerid][acSpeed] = ac_s;
5448
					}
5449
					ACInfo[playerid][acAnim] = ac_sa;
5450
				}
5451
				ACInfo[playerid][acSpecAct] = ac_specact;
5452
				ACInfo[playerid][acHealth] = ac_health;
5453
				ACInfo[playerid][acArmour] = ac_armour;
5454
			}
5455
			ACInfo[playerid][acVeh] = ac_vehid;
5456
			if(ac_gtc > ACInfo[playerid][acGtc][7] + ac_gpp) ACInfo[playerid][acLastWeapon] = ac_w;
5457
			ACInfo[playerid][acPosX] = ac_pX;
5458
			ACInfo[playerid][acPosY] = ac_pY;
5459
			ACInfo[playerid][acPosZ] = ac_pZ;
5460
		}
5461
	#if AC_USE_NPC
5462
		}
5463
	#endif
5464
	ac_gpp = 1;
5465
	ACInfo[playerid][acUpdateTick] = ac_gtc;
5466
	#if defined ac_OnPlayerUpdate
5467
		ac_gpp = ac_OnPlayerUpdate(playerid);
5468
	#endif
5469
	if(ACInfo[playerid][acACAllow][33] && ac_gpp) return ACInfo[playerid][acUnFrozen];
5470
	return ac_gpp;
5471
}
5472
5473
#if defined _ALS_OnPlayerUpdate
5474
	#undef OnPlayerUpdate
5475
#else
5476
	#define _ALS_OnPlayerUpdate
5477
#endif
5478
#define OnPlayerUpdate ac_OnPlayerUpdate
5479
#if defined ac_OnPlayerUpdate
5480
	forward ac_OnPlayerUpdate(playerid);
5481
#endif
5482
5483
#if defined _inc_y_hooks || defined _INC_y_hooks
5484
	hook OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
5485
#else
5486
	public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
5487
#endif
5488
{
5489
	if(!(0 <= playerid < MAX_PLAYERS) || ACInfo[playerid][acKicked] > 0) return 0;
5490
	#if AC_USE_NPC
5491
		if(!IsPlayerNPC(playerid))
5492
		{
5493
	#endif
5494
		if((newkeys & KEY_SECONDARY_ATTACK) && ACInfo[playerid][acSpecAct] == SPECIAL_ACTION_USEJETPACK &&
5495
		GetPlayerSpecialAction(playerid) != SPECIAL_ACTION_USEJETPACK)
5496
		{
5497
			ACInfo[playerid][acDropJpX] = ACInfo[playerid][acPosX];
5498
			ACInfo[playerid][acDropJpY] = ACInfo[playerid][acPosY];
5499
			ACInfo[playerid][acDropJpZ] = ACInfo[playerid][acPosZ];
5500
		}
5501
		new ac_w = GetPlayerWeapon(playerid);
5502
		if((newkeys & KEY_CROUCH) && (24 <= ac_w <= 25 || 33 <= ac_w <= 34)) ACInfo[playerid][acCheatCount][14] = 0;
5503
	#if AC_USE_NPC
5504
		}
5505
	#endif
5506
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
5507
		&& defined ac_OnPlayerKeyStateChange
5508
		return ac_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
5509
	#else
5510
		return 1;
5511
	#endif
5512
}
5513
5514
#if !defined _inc_y_hooks && !defined _INC_y_hooks
5515
	#if defined _ALS_OnPlayerKeyStateChange
5516
		#undef OnPlayerKeyStateChange
5517
	#else
5518
		#define _ALS_OnPlayerKeyStateChange
5519
	#endif
5520
	#define OnPlayerKeyStateChange ac_OnPlayerKeyStateChange
5521
	#if defined ac_OnPlayerKeyStateChange
5522
		forward ac_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
5523
	#endif
5524
#endif
5525
5526
#if defined _inc_y_hooks || defined _INC_y_hooks
5527
	hook OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
5528
#else
5529
	public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
5530
#endif
5531
{
5532
	if(ACInfo[playerid][acKicked] > 0) return 1;
5533
	new ac_gtc = GetTickCount();
5534
	if(ACInfo[playerid][acACAllow][49])
5535
	{
5536
		if(ac_gtc < ACInfo[playerid][acCall][2] + ac_Mtfc[2][0]) ac_FloodDetect(playerid, 2);
5537
		else if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
5538
		else ACInfo[playerid][acFloodCount][2] = ACInfo[playerid][acFloodCount][27] = 0;
5539
	}
5540
	ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][2] = ac_gtc;
5541
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
5542
		&& defined ac_OnPlayerClickMap
5543
		return ac_OnPlayerClickMap(playerid, fX, fY, fZ);
5544
	#else
5545
		return 0;
5546
	#endif
5547
}
5548
5549
#if !defined _inc_y_hooks && !defined _INC_y_hooks
5550
	#if defined _ALS_OnPlayerClickMap
5551
		#undef OnPlayerClickMap
5552
	#else
5553
		#define _ALS_OnPlayerClickMap
5554
	#endif
5555
	#define OnPlayerClickMap ac_OnPlayerClickMap
5556
	#if defined ac_OnPlayerClickMap
5557
		forward ac_OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ);
5558
	#endif
5559
#endif
5560
5561
#if defined _inc_y_hooks || defined _INC_y_hooks
5562
	hook OnPlayerClickPlayer(playerid, clickedplayerid, source)
5563
#else
5564
	public OnPlayerClickPlayer(playerid, clickedplayerid, source)
5565
#endif
5566
{
5567
	if(ACInfo[playerid][acKicked] > 0) return 1;
5568
	new ac_gtc = GetTickCount();
5569
	if(ACInfo[playerid][acACAllow][49])
5570
	{
5571
		if(ac_gtc < ACInfo[playerid][acCall][3] + ac_Mtfc[3][0])
5572
		{
5573
			ac_FloodDetect(playerid, 3);
5574
			return 1;
5575
		}
5576
		if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
5577
		else ACInfo[playerid][acFloodCount][3] = ACInfo[playerid][acFloodCount][27] = 0;
5578
	}
5579
	ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][3] = ac_gtc;
5580
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
5581
		&& defined ac_OnPlayerClickPlayer
5582
		return ac_OnPlayerClickPlayer(playerid, clickedplayerid, source);
5583
	#else
5584
		return 0;
5585
	#endif
5586
}
5587
5588
#if !defined _inc_y_hooks && !defined _INC_y_hooks
5589
	#if defined _ALS_OnPlayerClickPlayer
5590
		#undef OnPlayerClickPlayer
5591
	#else
5592
		#define _ALS_OnPlayerClickPlayer
5593
	#endif
5594
	#define OnPlayerClickPlayer ac_OnPlayerClickPlayer
5595
	#if defined ac_OnPlayerClickPlayer
5596
		forward ac_OnPlayerClickPlayer(playerid, clickedplayerid, source);
5597
	#endif
5598
#endif
5599
5600
#if defined _inc_y_hooks || defined _INC_y_hooks
5601
	hook OnPlayerClickTextDraw(playerid, Text:clickedid)
5602
#else
5603
	public OnPlayerClickTextDraw(playerid, Text:clickedid)
5604
#endif
5605
{
5606
	if(ACInfo[playerid][acKicked] > 0) return 1;
5607
	new ac_gtc = GetTickCount();
5608
	if(ACInfo[playerid][acACAllow][49])
5609
	{
5610
		if(ac_gtc < ACInfo[playerid][acCall][4] + ac_Mtfc[4][0])
5611
		{
5612
			ac_FloodDetect(playerid, 4);
5613
			return 1;
5614
		}
5615
		if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
5616
		else ACInfo[playerid][acFloodCount][4] = ACInfo[playerid][acFloodCount][27] = 0;
5617
	}
5618
	ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][4] = ac_gtc;
5619
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
5620
		&& defined ac_OnPlayerClickTextDraw
5621
		return ac_OnPlayerClickTextDraw(playerid, clickedid);
5622
	#else
5623
		return 0;
5624
	#endif
5625
}
5626
5627
#if !defined _inc_y_hooks && !defined _INC_y_hooks
5628
	#if defined _ALS_OnPlayerClickTextDraw
5629
		#undef OnPlayerClickTextDraw
5630
	#else
5631
		#define _ALS_OnPlayerClickTextDraw
5632
	#endif
5633
	#define OnPlayerClickTextDraw ac_OnPlayerClickTextDraw
5634
	#if defined ac_OnPlayerClickTextDraw
5635
		forward ac_OnPlayerClickTextDraw(playerid, Text:clickedid);
5636
	#endif
5637
#endif
5638
5639
#if defined _inc_y_hooks || defined _INC_y_hooks
5640
	hook OnPlayerCommandText(playerid, cmdtext[])
5641
#else
5642
	public OnPlayerCommandText(playerid, cmdtext[])
5643
#endif
5644
{
5645
	if(ACInfo[playerid][acKicked] > 0) return 1;
5646
	#if AC_USE_NPC
5647
		if(!IsPlayerNPC(playerid))
5648
		{
5649
	#endif
5650
		new ac_gtc = GetTickCount();
5651
		if(ACInfo[playerid][acACAllow][49])
5652
		{
5653
			if(ac_gtc < ACInfo[playerid][acCall][5] + ac_Mtfc[5][0])
5654
			{
5655
				ac_FloodDetect(playerid, 5);
5656
				return 1;
5657
			}
5658
			if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
5659
			else ACInfo[playerid][acFloodCount][5] = ACInfo[playerid][acFloodCount][27] = 0;
5660
		}
5661
		ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][5] = ac_gtc;
5662
	#if AC_USE_NPC
5663
		}
5664
	#endif
5665
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
5666
		&& defined ac_OnPlayerCommandText
5667
		return ac_OnPlayerCommandText(playerid, cmdtext);
5668
	#else
5669
		return 0;
5670
	#endif
5671
}
5672
5673
#if !defined _inc_y_hooks && !defined _INC_y_hooks
5674
	#if defined _ALS_OnPlayerCommandText
5675
		#undef OnPlayerCommandText
5676
	#else
5677
		#define _ALS_OnPlayerCommandText
5678
	#endif
5679
	#define OnPlayerCommandText ac_OnPlayerCommandText
5680
	#if defined ac_OnPlayerCommandText
5681
		forward ac_OnPlayerCommandText(playerid, cmdtext[]);
5682
	#endif
5683
#endif
5684
5685
#if defined _inc_y_hooks || defined _INC_y_hooks
5686
	hook OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
5687
#else
5688
	public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
5689
#endif
5690
{
5691
	if(!(0 <= playerid < MAX_PLAYERS) || ACInfo[playerid][acKicked] > 0) return 0;
5692
	new ac_gtc = GetTickCount();
5693
	if(ACInfo[playerid][acACAllow][49])
5694
	{
5695
		if(ac_gtc < ACInfo[playerid][acCall][6] + ac_Mtfc[6][0]) ac_FloodDetect(playerid, 6);
5696
		if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
5697
		else ACInfo[playerid][acFloodCount][6] = ACInfo[playerid][acFloodCount][27] = 0;
5698
	}
5699
	ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][6] = ac_gtc;
5700
	new ac_model = GetVehicleModel(vehicleid);
5701
	if(ACInfo[playerid][acACAllow][44] && !(569 <= ac_model <= 570) && !IsVehicleStreamedIn(vehicleid, playerid))
5702
	{
5703
		#if defined DEBUG
5704
			printf("[Nex-AC debug] Veh: %d, veh model: %d, ispassenger: %d", vehicleid, ac_model, ispassenger);
5705
		#endif
5706
		return ac_KickWithCode(playerid, "", 0, 44, 1);
5707
	}
5708
	#if defined SetVehicleFakePosForPlayer\
5709
		&& defined SetVehicleFakeZAngleForPlayer
5710
		if(ACInfo[playerid][acACAllow][5] && !(ac_model == 449 || 537 <= ac_model <= 538 || 569 <= ac_model <= 570))
5711
		{
5712
			new Float:ac_dist = GetVehicleDistanceFromPoint(vehicleid, ACInfo[playerid][acPosX], ACInfo[playerid][acPosY], ACInfo[playerid][acPosZ]);
5713
			if(ac_dist > 25.0 || ac_dist > 15.0 && ac_model != 577 && ac_model != 592)
5714
			{
5715
				#if defined DEBUG
5716
					printf("[Nex-AC debug] Veh model: %d, dist: %f, ispassenger: %d, playerid: %d",
5717
					ac_model, ac_dist, ispassenger, playerid);
5718
				#endif
5719
				#if defined OnCheatDetected
5720
					ac_KickWithCode(playerid, "", 0, 5, 3);
5721
					if(ACInfo[playerid][acKicked] > 0) return 0;
5722
				#endif
5723
				SetVehicleFakeZAngleForPlayer(playerid, vehicleid, ACVehInfo[vehicleid][acZAngle]);
5724
				SetVehicleFakePosForPlayer(playerid, vehicleid, ACVehInfo[vehicleid][acPosX], ACVehInfo[vehicleid][acPosY], ACVehInfo[vehicleid][acPosZ]);
5725
			}
5726
		}
5727
	#endif
5728
	new ac_doors, ac_tmp;
5729
	GetVehicleParamsEx(vehicleid, ac_tmp, ac_tmp, ac_tmp, ac_doors, ac_tmp, ac_tmp, ac_tmp);
5730
	if(ispassenger || ac_doors != VEHICLE_PARAMS_ON)
5731
	{
5732
		if(ac_doors != VEHICLE_PARAMS_ON) ACInfo[playerid][acEnterSeat] = -1;
5733
		else ACInfo[playerid][acEnterSeat] = ispassenger;
5734
		if(ACInfo[playerid][acEnterVeh] != vehicleid)
5735
		{
5736
			ACInfo[playerid][acEnterVeh] = vehicleid;
5737
			if(ac_model == 570 || ac_IsABoat(ac_model)) ACInfo[playerid][acEnterVehTick] = 0;
5738
			else ACInfo[playerid][acEnterVehTick] = ac_gtc;
5739
		}
5740
	}
5741
	else
5742
	{
5743
		ACInfo[playerid][acEnterSeat] = -1;
5744
		ACInfo[playerid][acEnterVeh] = 0;
5745
	}
5746
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
5747
		&& defined ac_OnPlayerEnterVehicle
5748
		return ac_OnPlayerEnterVehicle(playerid, vehicleid, ispassenger);
5749
	#else
5750
		return 1;
5751
	#endif
5752
}
5753
5754
#if !defined _inc_y_hooks && !defined _INC_y_hooks
5755
	#if defined _ALS_OnPlayerEnterVehicle
5756
		#undef OnPlayerEnterVehicle
5757
	#else
5758
		#define _ALS_OnPlayerEnterVehicle
5759
	#endif
5760
	#define OnPlayerEnterVehicle ac_OnPlayerEnterVehicle
5761
	#if defined ac_OnPlayerEnterVehicle
5762
		forward ac_OnPlayerEnterVehicle(playerid, vehicleid, ispassenger);
5763
	#endif
5764
#endif
5765
5766
#if defined _inc_y_hooks || defined _INC_y_hooks
5767
	hook OnPlayerExitVehicle(playerid, vehicleid)
5768
#else
5769
	public OnPlayerExitVehicle(playerid, vehicleid)
5770
#endif
5771
{
5772
	if(!(0 <= playerid < MAX_PLAYERS) || ACInfo[playerid][acKicked] > 0) return 0;
5773
	new ac_gtc = GetTickCount();
5774
	if(ACInfo[playerid][acACAllow][49])
5775
	{
5776
		if(ac_gtc < ACInfo[playerid][acCall][7] + ac_Mtfc[7][0]) ac_FloodDetect(playerid, 7);
5777
		if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
5778
		else ACInfo[playerid][acFloodCount][7] = ACInfo[playerid][acFloodCount][27] = 0;
5779
	}
5780
	ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][7] = ac_gtc;
5781
	if(ACInfo[playerid][acACAllow][44] && !IsVehicleStreamedIn(vehicleid, playerid))
5782
	{
5783
		#if defined DEBUG
5784
			printf("[Nex-AC debug] Veh: %d, veh model: %d", vehicleid, GetVehicleModel(vehicleid));
5785
		#endif
5786
		return ac_KickWithCode(playerid, "", 0, 44, 5);
5787
	}
5788
	if(ac_IsAnAircraft(GetVehicleModel(ACInfo[playerid][acVeh]))) ACInfo[playerid][acParachute] = 1;
5789
	else if(ACInfo[playerid][acParachute] != 2) ACInfo[playerid][acParachute] = 0;
5790
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
5791
		&& defined ac_OnPlayerExitVehicle
5792
		return ac_OnPlayerExitVehicle(playerid, vehicleid);
5793
	#else
5794
		return 1;
5795
	#endif
5796
}
5797
5798
#if !defined _inc_y_hooks && !defined _INC_y_hooks
5799
	#if defined _ALS_OnPlayerExitVehicle
5800
		#undef OnPlayerExitVehicle
5801
	#else
5802
		#define _ALS_OnPlayerExitVehicle
5803
	#endif
5804
	#define OnPlayerExitVehicle ac_OnPlayerExitVehicle
5805
	#if defined ac_OnPlayerExitVehicle
5806
		forward ac_OnPlayerExitVehicle(playerid, vehicleid);
5807
	#endif
5808
#endif
5809
5810
#if defined OnPlayerPickUpDynamicPickup\
5811
	&& defined Streamer_GetDistanceToItem\
5812
	&& defined Streamer_GetIntData
5813
	#if defined _inc_y_hooks || defined _INC_y_hooks
5814
		#if defined STREAMER_ENABLE_TAGS
5815
			hook OnPlayerPickUpDynPickup(playerid, STREAMER_TAG_PICKUP:pickupid)
5816
		#else
5817
			hook OnPlayerPickUpDynPickup(playerid, pickupid)
5818
		#endif
5819
	#else
5820
		#if defined STREAMER_ENABLE_TAGS
5821
			public OnPlayerPickUpDynamicPickup(playerid, STREAMER_TAG_PICKUP:pickupid)
5822
		#else
5823
			public OnPlayerPickUpDynamicPickup(playerid, pickupid)
5824
		#endif
5825
	#endif
5826
	{
5827
		if(!(0 <= playerid < MAX_PLAYERS) || ACInfo[playerid][acKicked] > 0) return 0;
5828
		new ac_i = GetTickCount();
5829
		if(ACInfo[playerid][acACAllow][49])
5830
		{
5831
			if(ac_i < ACInfo[playerid][acCall][8] + ac_Mtfc[8][0]) ac_FloodDetect(playerid, 8);
5832
			else if(ac_i < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
5833
			else ACInfo[playerid][acFloodCount][8] = ACInfo[playerid][acFloodCount][27] = 0;
5834
		}
5835
		if(ACInfo[playerid][acACAllow][6])
5836
		{
5837
			new Float:ac_x, Float:ac_y, Float:ac_z, Float:ac_dist, Float:ac_dist_set;
5838
			GetPlayerPos(playerid, ac_x, ac_y, ac_z);
5839
			Streamer_GetDistanceToItem(ac_x, ac_y, ac_z, STREAMER_TYPE_PICKUP, pickupid, ac_dist);
5840
			Streamer_GetDistanceToItem(ACInfo[playerid][acSetPosX], ACInfo[playerid][acSetPosY], (ACInfo[playerid][acTpToZ] ? ac_z : ACInfo[playerid][acSetPosZ]), STREAMER_TYPE_PICKUP, pickupid, ac_dist_set);
5841
			if(ac_dist > 15.0 && (ACInfo[playerid][acSet][8] == -1 || ac_dist_set > 15.0))
5842
			{
5843
				#if defined DEBUG
5844
					printf("[Nex-AC debug] Pickupid: %d, dist: %f, dist set: %f, acSet[8]: %d, playerid: %d",
5845
					_:pickupid, ac_dist, ac_dist_set, ACInfo[playerid][acSet][8], playerid);
5846
				#endif
5847
				#if defined OnCheatDetected
5848
					ac_KickWithCode(playerid, "", 0, 6, 2);
5849
				#endif
5850
				return 0;
5851
			}
5852
		}
5853
		ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][8] = ac_i;
5854
		#if AC_USE_PICKUP_WEAPONS
5855
			switch((ac_i = Streamer_GetIntData(STREAMER_TYPE_PICKUP, pickupid, E_STREAMER_EXTRA_ID)))
5856
			{
5857
				case 2: ACInfo[playerid][acSpecAct] = SPECIAL_ACTION_USEJETPACK;
5858
				case 3: ACInfo[playerid][acHealth] = 100;
5859
				case 4: ACInfo[playerid][acArmour] = 100;
5860
				default:
5861
				{
5862
					if(ac_i > 100)
5863
					{
5864
						ac_i -= 100;
5865
						new ac_s = ac_wSlot[ac_i];
5866
						if(ACInfo[playerid][acWeapon][ac_s] == ac_i ||
5867
						3 <= ac_s <= 5 && ACInfo[playerid][acWeapon][ac_s] > 0) ACInfo[playerid][acAmmo][ac_s] += ac_pAmmo[ac_i];
5868
					}
5869
				}
5870
			}
5871
		#endif
5872
		ACInfo[playerid][acLastPickup] = _:pickupid + MAX_PICKUPS;
5873
		#if !defined _inc_y_hooks && !defined _INC_y_hooks\
5874
			&& defined ac_OnPlayerPickUpDynamicPickup
5875
			return ac_OnPlayerPickUpDynamicPickup(playerid, pickupid);
5876
		#else
5877
			return 1;
5878
		#endif
5879
	}
5880
5881
	#if !defined _inc_y_hooks && !defined _INC_y_hooks
5882
		#if defined _ALS_OnPlayerPickUpDynamicPicku\
5883
			|| defined _ALS_OnPlayerPickUpDynPickup\
5884
			|| defined _ALS_OnPlayerPickUpDynamicPick || defined _ALS_OnPlayerPickUpDynamicPUp
5885
			#undef OnPlayerPickUpDynamicPickup
5886
		#else
5887
			#define _ALS_OnPlayerPickUpDynamicPicku
5888
			#define _ALS_OnPlayerPickUpDynPickup
5889
			#define _ALS_OnPlayerPickUpDynamicPick
5890
			#define _ALS_OnPlayerPickUpDynamicPUp
5891
		#endif
5892
		#define OnPlayerPickUpDynamicPickup ac_OnPlayerPickUpDynamicPickup
5893
		#if defined ac_OnPlayerPickUpDynamicPickup
5894
			#if defined STREAMER_ENABLE_TAGS
5895
				forward ac_OnPlayerPickUpDynamicPickup(playerid, STREAMER_TAG_PICKUP:pickupid);
5896
			#else
5897
				forward ac_OnPlayerPickUpDynamicPickup(playerid, pickupid);
5898
			#endif
5899
		#endif
5900
	#endif
5901
#endif
5902
5903
#if defined _inc_y_hooks || defined _INC_y_hooks
5904
	hook OnPlayerPickUpPickup(playerid, pickupid)
5905
#else
5906
	public OnPlayerPickUpPickup(playerid, pickupid)
5907
#endif
5908
{
5909
	if(!(0 <= playerid < MAX_PLAYERS) || ACInfo[playerid][acKicked] > 0 || !(0 <= pickupid < MAX_PICKUPS)) return 0;
5910
	#if defined Streamer_GetItemStreamerID\
5911
		&& defined IsValidDynamicPickup
5912
		#if defined STREAMER_ENABLE_TAGS
5913
			new STREAMER_TAG_PICKUP:streamerid = STREAMER_TAG_PICKUP:Streamer_GetItemStreamerID(playerid, STREAMER_TYPE_PICKUP, pickupid);
5914
		#else
5915
			new streamerid = Streamer_GetItemStreamerID(playerid, STREAMER_TYPE_PICKUP, pickupid);
5916
		#endif
5917
		if(!IsValidDynamicPickup(streamerid))
5918
		{
5919
	#endif
5920
		new ac_i = GetTickCount();
5921
		if(ACInfo[playerid][acACAllow][49])
5922
		{
5923
			if(ac_i < ACInfo[playerid][acCall][8] + ac_Mtfc[8][0]) ac_FloodDetect(playerid, 8);
5924
			else if(ac_i < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
5925
			else ACInfo[playerid][acFloodCount][8] = ACInfo[playerid][acFloodCount][27] = 0;
5926
		}
5927
		if(ACInfo[playerid][acACAllow][6])
5928
		{
5929
			#if defined VectorSize
5930
				new Float:ac_dist = GetPlayerDistanceFromPoint(playerid, ACPickInfo[pickupid][acPosX], ACPickInfo[pickupid][acPosY], ACPickInfo[pickupid][acPosZ]),
5931
				Float:ac_dist_set = VectorSize(ACInfo[playerid][acSetPosX] - ACPickInfo[pickupid][acPosX], ACInfo[playerid][acSetPosY] - ACPickInfo[pickupid][acPosY], (ACInfo[playerid][acTpToZ] ? ACPickInfo[pickupid][acPosZ] : ACInfo[playerid][acSetPosZ]) - ACPickInfo[pickupid][acPosZ]);
5932
			#else
5933
				new Float:ac_dist = GetPlayerDistanceFromPoint(playerid, ACPickInfo[pickupid][acPosX], ACPickInfo[pickupid][acPosY], ACPickInfo[pickupid][acPosZ]),
5934
				Float:ac_dist_set = floatsqroot(floatpower(ACInfo[playerid][acSetPosX] - ACPickInfo[pickupid][acPosX], 2.0) + floatpower(ACInfo[playerid][acSetPosY] - ACPickInfo[pickupid][acPosY], 2.0) + floatpower((ACInfo[playerid][acTpToZ] ? ACPickInfo[pickupid][acPosZ] : ACInfo[playerid][acSetPosZ]) - ACPickInfo[pickupid][acPosZ], 2.0));
5935
			#endif
5936
			if(ac_dist > 15.0 && (ACInfo[playerid][acSet][8] == -1 || ac_dist_set > 15.0))
5937
			{
5938
				#if defined DEBUG
5939
					printf("[Nex-AC debug] Pickupid: %d, dist: %f, dist set: %f, acSet[8]: %d, playerid: %d",
5940
					pickupid, ac_dist, ac_dist_set, ACInfo[playerid][acSet][8], playerid);
5941
				#endif
5942
				#if defined OnCheatDetected
5943
					ac_KickWithCode(playerid, "", 0, 6, 1);
5944
				#endif
5945
				return 0;
5946
			}
5947
		}
5948
		ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][8] = ac_i;
5949
		#if AC_USE_PICKUP_WEAPONS
5950
			switch(ACPickInfo[pickupid][acType])
5951
			{
5952
				case 1:
5953
				{
5954
					ac_i = ACPickInfo[pickupid][acWeapon];
5955
					new ac_s = ac_wSlot[ac_i];
5956
					if(ACInfo[playerid][acWeapon][ac_s] == ac_i ||
5957
					3 <= ac_s <= 5 && ACInfo[playerid][acWeapon][ac_s] > 0) ACInfo[playerid][acAmmo][ac_s] += ac_pAmmo[ac_i];
5958
				}
5959
				case 2: ACInfo[playerid][acSpecAct] = SPECIAL_ACTION_USEJETPACK;
5960
				case 3: ACInfo[playerid][acHealth] = 100;
5961
				case 4: ACInfo[playerid][acArmour] = 100;
5962
			}
5963
		#endif
5964
		ACInfo[playerid][acLastPickup] = pickupid;
5965
	#if defined Streamer_GetItemStreamerID\
5966
		&& defined IsValidDynamicPickup
5967
		}
5968
	#endif
5969
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
5970
		&& defined ac_OnPlayerPickUpPickup
5971
		return ac_OnPlayerPickUpPickup(playerid, pickupid);
5972
	#else
5973
		return 1;
5974
	#endif
5975
}
5976
5977
#if !defined _inc_y_hooks && !defined _INC_y_hooks
5978
	#if defined _ALS_OnPlayerPickUpPickup
5979
		#undef OnPlayerPickUpPickup
5980
	#else
5981
		#define _ALS_OnPlayerPickUpPickup
5982
	#endif
5983
	#define OnPlayerPickUpPickup ac_OnPlayerPickUpPickup
5984
	#if defined ac_OnPlayerPickUpPickup
5985
		forward ac_OnPlayerPickUpPickup(playerid, pickupid);
5986
	#endif
5987
#endif
5988
5989
#if defined _inc_y_hooks || defined _INC_y_hooks
5990
	hook OnPlayerRequestClass(playerid, classid)
5991
#else
5992
	public OnPlayerRequestClass(playerid, classid)
5993
#endif
5994
{
5995
	if(ACInfo[playerid][acKicked] > 0) return 0;
5996
	#if AC_USE_NPC
5997
		if(!IsPlayerNPC(playerid))
5998
		{
5999
	#endif
6000
		new ac_gtc = GetTickCount();
6001
		if(ACInfo[playerid][acACAllow][49])
6002
		{
6003
			if(ac_gtc < ACInfo[playerid][acCall][9] + ac_Mtfc[9][0]) ac_FloodDetect(playerid, 9);
6004
			else if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
6005
			else ACInfo[playerid][acFloodCount][9] = ACInfo[playerid][acFloodCount][27] = 0;
6006
		}
6007
		if(ACInfo[playerid][acDead]) ACInfo[playerid][acSpawned] = false;
6008
		ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][9] = ac_gtc;
6009
		ACInfo[playerid][acSpawnPosX] = ac_ClassPos[classid][0];
6010
		ACInfo[playerid][acSpawnPosY] = ac_ClassPos[classid][1];
6011
		ACInfo[playerid][acSpawnPosZ] = ac_ClassPos[classid][2];
6012
		ACInfo[playerid][acSpawnWeapon1] = ac_ClassWeapon[classid][0][0];
6013
		ACInfo[playerid][acSpawnAmmo1] = ac_ClassWeapon[classid][0][1];
6014
		ACInfo[playerid][acSpawnWeapon2] = ac_ClassWeapon[classid][1][0];
6015
		ACInfo[playerid][acSpawnAmmo2] = ac_ClassWeapon[classid][1][1];
6016
		ACInfo[playerid][acSpawnWeapon3] = ac_ClassWeapon[classid][2][0];
6017
		ACInfo[playerid][acSpawnAmmo3] = ac_ClassWeapon[classid][2][1];
6018
	#if AC_USE_NPC
6019
		}
6020
	#endif
6021
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
6022
		&& defined ac_OnPlayerRequestClass
6023
		return ac_OnPlayerRequestClass(playerid, classid);
6024
	#else
6025
		return 1;
6026
	#endif
6027
}
6028
6029
#if !defined _inc_y_hooks && !defined _INC_y_hooks
6030
	#if defined _ALS_OnPlayerRequestClass
6031
		#undef OnPlayerRequestClass
6032
	#else
6033
		#define _ALS_OnPlayerRequestClass
6034
	#endif
6035
	#define OnPlayerRequestClass ac_OnPlayerRequestClass
6036
	#if defined ac_OnPlayerRequestClass
6037
		forward ac_OnPlayerRequestClass(playerid, classid);
6038
	#endif
6039
#endif
6040
6041
#if defined _inc_y_hooks || defined _INC_y_hooks
6042
	hook OnPlayerSelectedMenuRow(playerid, row)
6043
#else
6044
	public OnPlayerSelectedMenuRow(playerid, row)
6045
#endif
6046
{
6047
	if(!(0 <= playerid < MAX_PLAYERS) || ACInfo[playerid][acKicked] > 0) return 0;
6048
	new ac_gtc = GetTickCount();
6049
	if(ACInfo[playerid][acACAllow][49])
6050
	{
6051
		if(ac_gtc < ACInfo[playerid][acCall][10] + ac_Mtfc[10][0]) ac_FloodDetect(playerid, 10);
6052
		else if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
6053
		else ACInfo[playerid][acFloodCount][10] = ACInfo[playerid][acFloodCount][27] = 0;
6054
	}
6055
	ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][10] = ac_gtc;
6056
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
6057
		&& defined ac_OnPlayerSelectedMenuRow
6058
		return ac_OnPlayerSelectedMenuRow(playerid, row);
6059
	#else
6060
		return 1;
6061
	#endif
6062
}
6063
6064
#if !defined _inc_y_hooks && !defined _INC_y_hooks
6065
	#if defined _ALS_OnPlayerSelectedMenuRow
6066
		#undef OnPlayerSelectedMenuRow
6067
	#else
6068
		#define _ALS_OnPlayerSelectedMenuRow
6069
	#endif
6070
	#define OnPlayerSelectedMenuRow ac_OnPlayerSelectedMenuRow
6071
	#if defined ac_OnPlayerSelectedMenuRow
6072
		forward ac_OnPlayerSelectedMenuRow(playerid, row);
6073
	#endif
6074
#endif
6075
6076
#if defined _inc_y_hooks || defined _INC_y_hooks
6077
	hook OnPlayerStateChange(playerid, newstate, oldstate)
6078
#else
6079
	public OnPlayerStateChange(playerid, newstate, oldstate)
6080
#endif
6081
{
6082
	if(ACInfo[playerid][acKicked] > 0) return 0;
6083
	#if AC_USE_NPC
6084
		if(!IsPlayerNPC(playerid))
6085
		{
6086
	#endif
6087
		new ac_i = GetTickCount(), ac_s = GetPlayerPing(playerid);
6088
		if(ACInfo[playerid][acACAllow][49])
6089
		{
6090
			if(ac_i < ACInfo[playerid][acCall][11] + ac_Mtfc[11][0])
6091
			{
6092
				if(newstate != PLAYER_STATE_ONFOOT || oldstate != PLAYER_STATE_SPAWNED)
6093
				{
6094
					new ac_model;
6095
					if(oldstate == PLAYER_STATE_DRIVER) ac_model = GetVehicleModel(ACInfo[playerid][acVeh]);
6096
					else if(newstate == PLAYER_STATE_DRIVER) ac_model = GetVehicleModel(GetPlayerVehicleID(playerid));
6097
					if(!ac_IsABoat(ac_model)) ac_FloodDetect(playerid, 11);
6098
				}
6099
			}
6100
			else if(ac_i < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
6101
			else ACInfo[playerid][acFloodCount][11] = ACInfo[playerid][acFloodCount][27] = 0;
6102
		}
6103
		ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][11] = ac_i;
6104
		switch(oldstate)
6105
		{
6106
			case PLAYER_STATE_NONE, PLAYER_STATE_WASTED:
6107
			{
6108
				if(ACInfo[playerid][acACAllow][48] && !(PLAYER_STATE_SPAWNED <= newstate <= PLAYER_STATE_SPECTATING))
6109
				{
6110
					#if defined DEBUG
6111
						printf("[Nex-AC debug] Newstate: %d, oldstate: %d", newstate, oldstate);
6112
					#endif
6113
					ac_KickWithCode(playerid, "", 0, 48, 2);
6114
				}
6115
			}
6116
			case PLAYER_STATE_DRIVER:
6117
			{
6118
				new ac_t;
6119
				if(ACVehInfo[ACInfo[playerid][acVeh]][acDriver] == playerid) ACVehInfo[ACInfo[playerid][acVeh]][acDriver] = INVALID_PLAYER_ID;
6120
				GetPlayerWeaponData(playerid, 4, ac_t, ac_t);
6121
				if(ac_t < ACInfo[playerid][acAmmo][4] && !(ac_t < 0 <= ACInfo[playerid][acAmmo][4])) ACInfo[playerid][acAmmo][4] = ac_t;
6122
				ac_t = GetVehicleModel(ACInfo[playerid][acVeh]);
6123
				if(1 <= ACInfo[playerid][acHealth] < 5 && ac_IsABike(ac_t)) ACInfo[playerid][acHealth] = 5;
6124
				new Float:ac_x, Float:ac_y, Float:ac_z;
6125
				GetPlayerPos(playerid, ac_x, ac_y, ac_z);
6126
				#if defined VectorSize
6127
				if(ACInfo[playerid][acACAllow][2] &&
6128
				newstate == PLAYER_STATE_ONFOOT && ac_i > ACInfo[playerid][acGtc][11] + ac_s &&
6129
				(ACInfo[playerid][acPosZ] > -95.0 || ac_z - ACInfo[playerid][acPosZ] < 40.0 ||
6130
				VectorSize(ac_x - ACInfo[playerid][acPosX], ac_y - ACInfo[playerid][acPosY], 0.0) >= 180.0))
6131
				#else
6132
				if(ACInfo[playerid][acACAllow][2] &&
6133
				newstate == PLAYER_STATE_ONFOOT && ac_i > ACInfo[playerid][acGtc][11] + ac_s &&
6134
				(ACInfo[playerid][acPosZ] > -95.0 || ac_z - ACInfo[playerid][acPosZ] < 40.0 ||
6135
				floatsqroot(floatpower(ac_x - ACInfo[playerid][acPosX], 2.0) + floatpower(ac_y - ACInfo[playerid][acPosY], 2.0)) >= 180.0))
6136
				#endif
6137
				{
6138
					if(!ac_IsAnAircraft(ac_t)) ac_z = ACInfo[playerid][acPosZ];
6139
					if((ac_x = GetPlayerDistanceFromPoint(playerid, ACInfo[playerid][acPosX], ACInfo[playerid][acPosY], ac_z)) >= 50.0)
6140
					{
6141
						#if defined DEBUG
6142
							printf("[Nex-AC debug] Veh model: %d, dist: %f", ac_t, ac_x);
6143
						#endif
6144
						ac_KickWithCode(playerid, "", 0, 2, 4);
6145
					}
6146
				}
6147
				GetPlayerVelocity(playerid, ac_x, ac_y, ac_z);
6148
				ACInfo[playerid][acSpeed] = ac_GetSpeed(ac_x, ac_y, ac_z);
6149
				if(ACInfo[playerid][acSet][8] == 3) ACInfo[playerid][acSet][8] = -1;
6150
				ACInfo[playerid][acGtc][18] = ACInfo[playerid][acGtc][10] = ac_i + 1650;
6151
			}
6152
			case PLAYER_STATE_PASSENGER:
6153
			{
6154
				new Float:ac_x, Float:ac_y, Float:ac_z;
6155
				GetPlayerPos(playerid, ac_x, ac_y, ac_z);
6156
				#if defined VectorSize
6157
				if(ACInfo[playerid][acACAllow][2] &&
6158
				newstate == PLAYER_STATE_ONFOOT && ac_i > ACInfo[playerid][acGtc][11] + ac_s &&
6159
				(ACInfo[playerid][acPosZ] > -95.0 || ac_z - ACInfo[playerid][acPosZ] < 40.0 ||
6160
				VectorSize(ac_x - ACInfo[playerid][acPosX], ac_y - ACInfo[playerid][acPosY], 0.0) >= 180.0))
6161
				#else
6162
				if(ACInfo[playerid][acACAllow][2] &&
6163
				newstate == PLAYER_STATE_ONFOOT && ac_i > ACInfo[playerid][acGtc][11] + ac_s &&
6164
				(ACInfo[playerid][acPosZ] > -95.0 || ac_z - ACInfo[playerid][acPosZ] < 40.0 ||
6165
				floatsqroot(floatpower(ac_x - ACInfo[playerid][acPosX], 2.0) + floatpower(ac_y - ACInfo[playerid][acPosY], 2.0)) >= 180.0))
6166
				#endif
6167
				{
6168
					new ac_model = GetVehicleModel(ACInfo[playerid][acVeh]);
6169
					ac_s = ACVehInfo[ACInfo[playerid][acVeh]][acDriver];
6170
					ac_x = GetPlayerDistanceFromPoint(playerid, ACInfo[playerid][acPosX], ACInfo[playerid][acPosY], ACInfo[playerid][acPosZ]);
6171
					if(ac_x >= 180.0 || ac_x >= 50.0 && (ac_s == INVALID_PLAYER_ID || ac_i < ACInfo[ac_s][acUpdateTick] + 2000) &&
6172
					!(ac_model == 449 || 537 <= ac_model <= 538 || 569 <= ac_model <= 570))
6173
					{
6174
						#if defined DEBUG
6175
							if(ac_s == INVALID_PLAYER_ID) printf("[Nex-AC debug] Veh model: %d, dist: %f", ac_model, ac_x);
6176
							else printf("[Nex-AC debug] Veh model: %d, driver AFK time: %d, dist: %f", ac_model, ac_i - ACInfo[ac_s][acUpdateTick], ac_x);
6177
						#endif
6178
						ac_KickWithCode(playerid, "", 0, 2, 5);
6179
					}
6180
				}
6181
				GetPlayerVelocity(playerid, ac_x, ac_y, ac_z);
6182
				ACInfo[playerid][acSpeed] = ac_GetSpeed(ac_x, ac_y, ac_z);
6183
				ACInfo[playerid][acGtc][18] = ACInfo[playerid][acGtc][10] = ac_i + 1650;
6184
			}
6185
		}
6186
		switch(newstate)
6187
		{
6188
			case PLAYER_STATE_ONFOOT:
6189
			{
6190
				ACInfo[playerid][acSet][11] = -1;
6191
				if(PLAYER_STATE_DRIVER <= oldstate <= PLAYER_STATE_PASSENGER)
6192
				{
6193
					GetPlayerPos(playerid, ACInfo[playerid][acPosX], ACInfo[playerid][acPosY], ACInfo[playerid][acPosZ]);
6194
					ACInfo[playerid][acLastPosX] = ACInfo[playerid][acPosX];
6195
					ACInfo[playerid][acLastPosY] = ACInfo[playerid][acPosY];
6196
				}
6197
			}
6198
			case PLAYER_STATE_DRIVER, PLAYER_STATE_PASSENGER:
6199
			{
6200
				ACInfo[playerid][acSet][11] = -1;
6201
				ACInfo[playerid][acCheatCount][3] =
6202
				ACInfo[playerid][acCheatCount][4] = 0;
6203
				new ac_vehid = GetPlayerVehicleID(playerid);
6204
				ac_s = GetVehicleModel(ac_vehid);
6205
				if(ACInfo[playerid][acSet][9] == -1)
6206
				{
6207
					if(ACInfo[playerid][acACAllow][4])
6208
					{
6209
						new ac_seat = GetPlayerVehicleSeat(playerid);
6210
						if(ACInfo[playerid][acEnterVeh] != ac_vehid ||
6211
						ACInfo[playerid][acEnterSeat] != -1 && ACInfo[playerid][acEnterSeat] != _:!!ac_seat ||
6212
						ac_i < ACInfo[playerid][acEnterVehTick] + 300)
6213
						{
6214
							#if defined DEBUG
6215
								printf("[Nex-AC debug] Entered veh: %d, veh: %d, entered seat: %d, seat: %d, veh model: %d, enter time: %d",
6216
								ACInfo[playerid][acEnterVeh], ac_vehid, ACInfo[playerid][acEnterSeat], ac_seat, ac_s, ac_i - ACInfo[playerid][acEnterVehTick]);
6217
							#endif
6218
							ac_KickWithCode(playerid, "", 0, 4, 1);
6219
						}
6220
						else
6221
						{
6222
							new Float:ac_dist = GetPlayerDistanceFromPoint(playerid, ACInfo[playerid][acPosX], ACInfo[playerid][acPosY], ACInfo[playerid][acPosZ]);
6223
							if(newstate == PLAYER_STATE_DRIVER)
6224
							{
6225
								if(ac_dist > 25.0 || ac_dist > 15.0 && ac_s != 577 && ac_s != 592)
6226
								{
6227
									#if defined DEBUG
6228
										printf("[Nex-AC debug] Veh model: %d, dist: %f", ac_s, ac_dist);
6229
									#endif
6230
									ac_KickWithCode(playerid, "", 0, 4, 3);
6231
								}
6232
							}
6233
							else if(ac_dist > 80.0 || ac_dist > 30.0 && ac_i >= ACInfo[playerid][acUpdateTick] + 1500)
6234
							{
6235
								#if defined DEBUG
6236
									printf("[Nex-AC debug] Veh model: %d, AFK time: %d, dist: %f", ac_s, ac_i - ACInfo[playerid][acUpdateTick], ac_dist);
6237
								#endif
6238
								ac_KickWithCode(playerid, "", 0, 4, 4);
6239
							}
6240
							#if defined SetVehicleFakePosForPlayer\
6241
								&& defined SetVehicleFakeZAngleForPlayer
6242
								if(ACInfo[playerid][acKicked] < 1 && !(ac_s == 449 || 537 <= ac_s <= 538 || 569 <= ac_s <= 570))
6243
								{
6244
									ac_dist = GetPlayerDistanceFromPoint(playerid, ACVehInfo[ac_vehid][acPosX], ACVehInfo[ac_vehid][acPosY], ACVehInfo[ac_vehid][acPosZ]);
6245
									if(newstate == PLAYER_STATE_DRIVER)
6246
									{
6247
										if(ac_dist > 25.0 || ac_dist > 15.0 && ac_s != 577 && ac_s != 592)
6248
										{
6249
											#if defined DEBUG
6250
												printf("[Nex-AC debug] Veh model: %d, dist: %f", ac_s, ac_dist);
6251
											#endif
6252
											ac_KickWithCode(playerid, "", 0, 4, 5);
6253
										}
6254
									}
6255
									else if(ac_dist > 80.0 || ac_dist > 30.0 && ac_i >= ACInfo[playerid][acUpdateTick] + 1500)
6256
									{
6257
										#if defined DEBUG
6258
											printf("[Nex-AC debug] Veh model: %d, AFK time: %d, dist: %f", ac_s, ac_i - ACInfo[playerid][acUpdateTick], ac_dist);
6259
										#endif
6260
										ac_KickWithCode(playerid, "", 0, 4, 6);
6261
									}
6262
								}
6263
							#endif
6264
						}
6265
					}
6266
					if(newstate == PLAYER_STATE_DRIVER && ACInfo[playerid][acKicked] < 1)
6267
					{
6268
						ACVehInfo[ac_vehid][acDriver] = playerid;
6269
						GetPlayerPos(playerid, ACInfo[playerid][acPosX], ACInfo[playerid][acPosY], ACInfo[playerid][acPosZ]);
6270
						ACInfo[playerid][acLastPosX] = ACInfo[playerid][acPosX];
6271
						ACInfo[playerid][acLastPosY] = ACInfo[playerid][acPosY];
6272
						ACInfo[playerid][acSetVehHealth] = -1.0;
6273
						ACInfo[playerid][acCheatCount][11] = 0;
6274
						ACInfo[playerid][acVehDmgRes] = false;
6275
					}
6276
					ACInfo[playerid][acEnterSeat] = -1;
6277
					ACInfo[playerid][acEnterVeh] = 0;
6278
				}
6279
				if(ACInfo[playerid][acACAllow][44])
6280
				{
6281
					ac_i = GetPlayerVehicleSeat(playerid);
6282
					if(ac_s < 400)
6283
					{
6284
						#if defined DEBUG
6285
							printf("[Nex-AC debug] Veh model: %d, seatid: %d", ac_s, ac_i);
6286
						#endif
6287
						ac_KickWithCode(playerid, "", 0, 44, 2);
6288
					}
6289
					else if(ACInfo[playerid][acSet][9] == -1)
6290
					{
6291
						new ac_maxseats = ac_GetMaxPassengers(ac_s);
6292
						if(newstate == PLAYER_STATE_DRIVER)
6293
						{
6294
							if(ac_i != 0 || ac_maxseats == 15)
6295
							{
6296
								#if defined DEBUG
6297
									printf("[Nex-AC debug] Veh model: %d, seatid: %d", ac_s, ac_i);
6298
								#endif
6299
								ac_KickWithCode(playerid, "", 0, 44, 3);
6300
							}
6301
						}
6302
						else if(ac_i < 1 || ac_maxseats == 15 || ac_i > ac_maxseats && ac_s != 431 && ac_s != 437 && ac_s != 570)
6303
						{
6304
							#if defined DEBUG
6305
								printf("[Nex-AC debug] Veh model: %d, max seats: %d, seatid: %d", ac_s, ac_maxseats, ac_i);
6306
							#endif
6307
							ac_KickWithCode(playerid, "", 0, 44, 4);
6308
						}
6309
					}
6310
				}
6311
			}
6312
			case PLAYER_STATE_SPAWNED:
6313
			{
6314
				ACInfo[playerid][acPosX] = ACInfo[playerid][acSpawnPosX];
6315
				ACInfo[playerid][acPosY] = ACInfo[playerid][acSpawnPosY];
6316
				ACInfo[playerid][acPosZ] = ACInfo[playerid][acSpawnPosZ];
6317
				ACInfo[playerid][acLastPosX] = ACInfo[playerid][acPosX];
6318
				ACInfo[playerid][acLastPosY] = ACInfo[playerid][acPosY];
6319
			}
6320
			case PLAYER_STATE_SPECTATING:
6321
			{
6322
				if(ACInfo[playerid][acACAllow][21] && !ACInfo[playerid][acSpec] &&
6323
				ACInfo[playerid][acSet][6] == -1) ac_KickWithCode(playerid, "", 0, 21);
6324
				if(ACInfo[playerid][acKicked] < 1)
6325
				{
6326
					ACInfo[playerid][acHealth] = 100;
6327
					ACInfo[playerid][acSet][6] = -1;
6328
					ACInfo[playerid][acSpec] = true;
6329
				}
6330
			}
6331
		}
6332
	#if AC_USE_NPC
6333
		}
6334
	#endif
6335
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
6336
		&& defined ac_OnPlayerStateChange
6337
		return ac_OnPlayerStateChange(playerid, newstate, oldstate);
6338
	#else
6339
		return 1;
6340
	#endif
6341
}
6342
6343
#if !defined _inc_y_hooks && !defined _INC_y_hooks
6344
	#if defined _ALS_OnPlayerStateChange
6345
		#undef OnPlayerStateChange
6346
	#else
6347
		#define _ALS_OnPlayerStateChange
6348
	#endif
6349
	#define OnPlayerStateChange ac_OnPlayerStateChange
6350
	#if defined ac_OnPlayerStateChange
6351
		forward ac_OnPlayerStateChange(playerid, newstate, oldstate);
6352
	#endif
6353
#endif
6354
6355
#if defined OnPlayerWeaponShot
6356
	public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
6357
	{
6358
		if(ACInfo[playerid][acKicked] > 0 || ACInfo[playerid][acDead]) return 0;
6359
		if(ACInfo[playerid][acACAllow][22] && !ac_LagCompMode)
6360
		{
6361
			#if defined OnCheatDetected
6362
				ac_KickWithCode(playerid, "", 0, 22);
6363
			#endif
6364
			return 0;
6365
		}
6366
		if(ACInfo[playerid][acACAllow][47] &&
6367
		(!(BULLET_HIT_TYPE_NONE <= hittype <= BULLET_HIT_TYPE_PLAYER_OBJECT) ||
6368
		hittype == BULLET_HIT_TYPE_PLAYER && !(0 <= hitid < MAX_PLAYERS) ||
6369
		hittype == BULLET_HIT_TYPE_VEHICLE && !(1 <= hitid < MAX_VEHICLES) ||
6370
		hittype == BULLET_HIT_TYPE_OBJECT && !(1 <= hitid < MAX_OBJECTS) ||
6371
		hittype == BULLET_HIT_TYPE_PLAYER_OBJECT && !(1 <= hitid < MAX_OBJECTS) ||
6372
		weaponid != 38 && !(22 <= weaponid <= 34)))
6373
		{
6374
			#if defined DEBUG
6375
				printf("[Nex-AC debug] Hittype: %d, hitid: %d, weaponid: %d", hittype, hitid, weaponid);
6376
			#endif
6377
			return ac_KickWithCode(playerid, "", 0, 47, 1);
6378
		}
6379
		new Float:ac_oX, Float:ac_oY, Float:ac_oZ, Float:ac_hX, Float:ac_hY, Float:ac_hZ;
6380
		GetPlayerLastShotVectors(playerid, ac_oX, ac_oY, ac_oZ, ac_hX, ac_hY, ac_hZ);
6381
		if(ACInfo[playerid][acACAllow][34])
6382
		{
6383
			new Float:ac_dist = GetPlayerDistanceFromPoint(playerid, ac_oX, ac_oY, ac_oZ);
6384
			if(ac_dist > 50.0 || ac_dist > 15.0 && !IsPlayerInAnyVehicle(playerid) &&
6385
			!IsVehicleStreamedIn(GetPlayerSurfingVehicleID(playerid), playerid) &&
6386
			GetPlayerSurfingObjectID(playerid) == INVALID_OBJECT_ID)
6387
			{
6388
				if(++ACInfo[playerid][acCheatCount][5] > AC_MAX_AFK_GHOST_WARNINGS)
6389
				{
6390
					#undef AC_MAX_AFK_GHOST_WARNINGS
6391
					#if defined DEBUG
6392
						printf("[Nex-AC debug] Dist: %f", ac_dist);
6393
					#endif
6394
					#if defined OnCheatDetected
6395
						ac_KickWithCode(playerid, "", 0, 34);
6396
						if(ACInfo[playerid][acKicked] > 0) return 0;
6397
						ACInfo[playerid][acCheatCount][5] = 0;
6398
					#else
6399
						return ac_KickWithCode(playerid, "", 0, 34);
6400
					#endif
6401
				}
6402
				#if defined OnCheatWarning
6403
					else OnCheatWarning(playerid, "", 0, 34, 0, ACInfo[playerid][acCheatCount][5]);
6404
				#endif
6405
			}
6406
			else ACInfo[playerid][acCheatCount][5] = 0;
6407
		}
6408
		new ac_gtc = GetTickCount(), ac_gpp = GetPlayerPing(playerid);
6409
		if(ACInfo[playerid][acACAllow][29])
6410
		{
6411
			new Float:ac_pX, Float:ac_pY, Float:ac_pZ;
6412
			GetPlayerPos(playerid, ac_pX, ac_pY, ac_pZ);
6413
			if(hittype > BULLET_HIT_TYPE_NONE &&
6414
			(fX == 0.0 && fY == 0.0 && fZ == 0.0 || ac_oX == ac_hX && ac_oY == ac_hY ||
6415
			ac_oX == ac_pX || ac_oY == ac_pY || floatabs(ac_oZ - ac_pZ) < 0.01))
6416
			{
6417
				if(++ACInfo[playerid][acCheatCount][13] > AC_MAX_SILENT_AIM_WARNINGS)
6418
				{
6419
					#undef AC_MAX_SILENT_AIM_WARNINGS
6420
					#if defined DEBUG
6421
						printf("[Nex-AC debug] Hittype: %d, weaponid: %d, pZ: %f, oZ: %f, fX, fY, fZ: %f, %f, %f",
6422
						hittype, weaponid, ac_pZ, ac_oZ, fX, fY, fZ);
6423
					#endif
6424
					#if defined OnCheatDetected
6425
						ac_KickWithCode(playerid, "", 0, 29, 1);
6426
						if(ACInfo[playerid][acKicked] > 0) return 0;
6427
						ACInfo[playerid][acCheatCount][13] = 0;
6428
					#else
6429
						return ac_KickWithCode(playerid, "", 0, 29, 1);
6430
					#endif
6431
				}
6432
				#if defined OnCheatWarning
6433
					else OnCheatWarning(playerid, "", 0, 29, 1, ACInfo[playerid][acCheatCount][13]);
6434
				#endif
6435
			}
6436
			else
6437
			{
6438
				ACInfo[playerid][acCheatCount][13] = 0;
6439
				if(hittype == BULLET_HIT_TYPE_PLAYER && hitid != INVALID_PLAYER_ID &&
6440
				!ACInfo[hitid][acDead] && ac_gtc > ACInfo[hitid][acSetPosTick] + ac_gpp &&
6441
				ac_gtc < ACInfo[hitid][acUpdateTick] + 1500)
6442
				{
6443
					new Float:ac_dist = GetPlayerDistanceFromPoint(hitid, ac_hX, ac_hY, ac_hZ);
6444
					if(ac_dist > 50.0 || ac_dist > 20.0 && !IsPlayerInAnyVehicle(hitid) &&
6445
					!IsVehicleStreamedIn(GetPlayerSurfingVehicleID(hitid), hitid) &&
6446
					GetPlayerSurfingObjectID(hitid) == INVALID_OBJECT_ID)
6447
					{
6448
						if(++ACInfo[playerid][acCheatCount][6] > AC_MAX_PRO_AIM_WARNINGS)
6449
						{
6450
							#undef AC_MAX_PRO_AIM_WARNINGS
6451
							#if defined DEBUG
6452
								printf("[Nex-AC debug] Dist: %f", ac_dist);
6453
							#endif
6454
							#if defined OnCheatDetected
6455
								ac_KickWithCode(playerid, "", 0, 29, 2);
6456
								if(ACInfo[playerid][acKicked] > 0) return 0;
6457
								ACInfo[playerid][acCheatCount][6] = 0;
6458-
					IsPlayerInRangeOfPoint(hitid, ac_wRange[weaponid - 22], ac_oX, ac_oY, ac_oZ) &&
6458+
6459
								return ac_KickWithCode(playerid, "", 0, 29, 2);
6460
							#endif
6461
						}
6462
						#if defined OnCheatWarning
6463-
					IsPlayerInRangeOfPoint(hitid, ac_wRange[weaponid - 22], ac_oX, ac_oY, ac_oZ) &&
6463+
6464
						#endif
6465
					}
6466
					else ACInfo[playerid][acCheatCount][6] = 0;
6467
				}
6468
			}
6469
		}
6470-
						ac_i = GetPlayerInterior(hitid);
6470+
6471
		switch(hittype)
6472
		{
6473
			case BULLET_HIT_TYPE_PLAYER:
6474
			{
6475
				#if AC_USE_NPC
6476
					if(hitid != INVALID_PLAYER_ID && !IsPlayerNPC(hitid) &&
6477
					ACInfo[hitid][acACAllow][19] && ACInfo[hitid][acUnFrozen] &&
6478
					!ACInfo[hitid][acDead] && ac_gtc > ACInfo[hitid][acSetPosTick] + ac_gpp &&
6479
					IsPlayerInRangeOfPoint(hitid, ac_wMinRange[weaponid - 22], ac_oX, ac_oY, ac_oZ) &&
6480
					!(SPECIAL_ACTION_ENTER_VEHICLE <= GetPlayerSpecialAction(hitid) <= SPECIAL_ACTION_EXIT_VEHICLE))
6481
				#else
6482
					if(hitid != INVALID_PLAYER_ID && ACInfo[hitid][acACAllow][19] && ACInfo[hitid][acUnFrozen] &&
6483
					!ACInfo[hitid][acDead] && ac_gtc > ACInfo[hitid][acSetPosTick] + ac_gpp &&
6484
					IsPlayerInRangeOfPoint(hitid, ac_wMinRange[weaponid - 22], ac_oX, ac_oY, ac_oZ) &&
6485
					!(SPECIAL_ACTION_ENTER_VEHICLE <= GetPlayerSpecialAction(hitid) <= SPECIAL_ACTION_EXIT_VEHICLE))
6486
				#endif
6487
				{
6488
					ac_t = GetPlayerTeam(playerid);
6489
					if(ac_t == NO_TEAM || ac_t != GetPlayerTeam(hitid))
6490
					{
6491
						#if AC_USE_RESTAURANTS || AC_USE_AMMUNATIONS || AC_USE_CASINOS
6492
							ac_i = GetPlayerInterior(hitid);
6493
						#endif
6494
						#if AC_USE_RESTAURANTS
6495
							if(!ac_InRestaurant(hitid, ac_i))
6496
							{
6497
						#endif
6498
							#if AC_USE_AMMUNATIONS
6499
								if(!ac_InAmmuNation(hitid, ac_i))
6500
								{
6501
							#endif
6502
								#if AC_USE_CASINOS
6503
									if(!ac_InCasino(hitid, ac_i))
6504
									{
6505
								#endif
6506
									ac_ur = true;
6507
								#if AC_USE_CASINOS
6508
									}
6509
								#endif
6510
							#if AC_USE_AMMUNATIONS
6511
								}
6512
							#endif
6513
						#if AC_USE_RESTAURANTS
6514
							}
6515
						#endif
6516
					}
6517
				}
6518
			}
6519
			case BULLET_HIT_TYPE_VEHICLE:
6520
			{
6521
				if(hitid != INVALID_VEHICLE_ID)
6522
				{
6523
					ac_i = ACVehInfo[hitid][acDriver];
6524
					#if AC_USE_NPC
6525
						if(ac_i != INVALID_PLAYER_ID && !IsPlayerNPC(ac_i) &&
6526
						ACInfo[ac_i][acACAllow][20] && ACInfo[ac_i][acUnFrozen] &&
6527
						ACVehInfo[hitid][acHealth] >= 250.0 && ac_gtc > ACInfo[ac_i][acSetPosTick] + ac_gpp)
6528
					#else
6529
						if(ac_i != INVALID_PLAYER_ID && ACInfo[ac_i][acACAllow][20] && ACInfo[ac_i][acUnFrozen] &&
6530
						ACVehInfo[hitid][acHealth] >= 250.0 && ac_gtc > ACInfo[ac_i][acSetPosTick] + ac_gpp)
6531
					#endif
6532
					{
6533
						ac_t = GetPlayerTeam(playerid);
6534
						if(!ac_VehFriendlyFire || ac_t == NO_TEAM || ac_t != GetPlayerTeam(ac_i))
6535
						{
6536
							ac_t = GetVehicleModel(hitid);
6537
							new Float:ac_wX, Float:ac_wY, Float:ac_wZ;
6538
							GetVehicleModelInfo(ac_t, VEHICLE_MODEL_INFO_WHEELSFRONT, ac_hX, ac_hY, ac_hZ);
6539
							GetVehicleModelInfo(ac_t, VEHICLE_MODEL_INFO_WHEELSREAR, ac_oX, ac_oY, ac_oZ);
6540
							GetVehicleModelInfo(ac_t, VEHICLE_MODEL_INFO_WHEELSMID, ac_wX, ac_wY, ac_wZ);
6541
							#if defined VectorSize
6542
								if(VectorSize(ac_hX - fX, ac_hY - fY, ac_hZ - fZ) > 1.2 &&
6543
								VectorSize(-ac_hX - fX, ac_hY - fY, ac_hZ - fZ) > 1.2 &&
6544
								VectorSize(ac_oX - fX, ac_oY - fY, ac_oZ - fZ) > 1.2 &&
6545
								VectorSize(-ac_oX - fX, ac_oY - fY, ac_oZ - fZ) > 1.2 &&
6546
								(ac_wX == 0.0 && ac_wY == 0.0 && ac_wZ == 0.0 || VectorSize(ac_wX - fX, ac_wY - fY, ac_wZ - fZ) > 1.2 &&
6547
								VectorSize(-ac_wX - fX, ac_wY - fY, ac_wZ - fZ) > 1.2)) ac_ur2 = true;
6548
							#else
6549
								if(floatsqroot(floatpower(ac_hX - fX, 2.0) + floatpower(ac_hY - fY, 2.0) + floatpower(ac_hZ - fZ, 2.0)) > 1.2 &&
6550
								floatsqroot(floatpower(-ac_hX - fX, 2.0) + floatpower(ac_hY - fY, 2.0) + floatpower(ac_hZ - fZ, 2.0)) > 1.2 &&
6551
								floatsqroot(floatpower(ac_oX - fX, 2.0) + floatpower(ac_oY - fY, 2.0) + floatpower(ac_oZ - fZ, 2.0)) > 1.2 &&
6552
								floatsqroot(floatpower(-ac_oX - fX, 2.0) + floatpower(ac_oY - fY, 2.0) + floatpower(ac_oZ - fZ, 2.0)) > 1.2 &&
6553
								(ac_wX == 0.0 && ac_wY == 0.0 && ac_wZ == 0.0 || floatsqroot(floatpower(ac_wX - fX, 2.0) + floatpower(ac_wY - fY, 2.0) + floatpower(ac_wZ - fZ, 2.0)) > 1.2 &&
6554
								floatsqroot(floatpower(-ac_wX - fX, 2.0) + floatpower(ac_wY - fY, 2.0) + floatpower(ac_wZ - fZ, 2.0)) > 1.2)) ac_ur2 = true;
6555
							#endif
6556
						}
6557
					}
6558
				}
6559
			}
6560
		}
6561
		if((ac_t = GetPlayerState(playerid)) != PLAYER_STATE_DRIVER)
6562
		{
6563
			new ac_s = ac_wSlot[weaponid];
6564
			if(ACInfo[playerid][acACAllow][47])
6565
			{
6566
				ac_i = GetPlayerWeapon(playerid);
6567
				if(ac_i != weaponid && ac_t != PLAYER_STATE_PASSENGER ||
6568
				ACInfo[playerid][acWeapon][ac_s] != weaponid && ACInfo[playerid][acSetWeapon][ac_s] != weaponid)
6569
				{
6570
					if(++ACInfo[playerid][acCheatCount][18] > AC_MAX_FAKE_WEAPON_WARNINGS)
6571
					{
6572
						#undef AC_MAX_FAKE_WEAPON_WARNINGS
6573
						#if defined DEBUG
6574
							printf("[Nex-AC debug] Armed weapon: %d, AC weapon: %d, weaponid: %d, state: %d",
6575
							ac_i, ACInfo[playerid][acWeapon][ac_s], weaponid, ac_t);
6576
						#endif
6577
						ac_KickWithCode(playerid, "", 0, 47, 2);
6578
						#if defined OnCheatDetected
6579
							ACInfo[playerid][acCheatCount][18] = 0;
6580
						#endif
6581
					}
6582
					#if defined OnCheatWarning
6583
						else OnCheatWarning(playerid, "", 0, 47, 2, ACInfo[playerid][acCheatCount][18]);
6584
					#endif
6585
					return 0;
6586
				}
6587
				else ACInfo[playerid][acCheatCount][18] = 0;
6588
			}
6589
			if(ACInfo[playerid][acACAllow][26])
6590
			{
6591
				ac_i = ac_gtc - ACInfo[playerid][acShotTick];
6592
				if(ACInfo[playerid][acLastShot] == weaponid)
6593
				{
6594
					if(weaponid != 38 && ac_t != PLAYER_STATE_PASSENGER)
6595
					{
6596
						if(ac_gtc < ACInfo[playerid][acReloadTick] + 110)
6597
						{
6598
							#if defined DEBUG
6599
								printf("[Nex-AC debug] Weaponid: %d, Reload time: %d, state: %d",
6600
								weaponid, ac_gtc - ACInfo[playerid][acReloadTick], ac_t);
6601
							#endif
6602
							#if defined OnCheatDetected
6603
								ac_KickWithCode(playerid, "", 0, 26, 4);
6604
								if(ACInfo[playerid][acKicked] > 0) return 0;
6605
								ACInfo[playerid][acReloadTick] = 0;
6606
							#else
6607
								return ac_KickWithCode(playerid, "", 0, 26, 4);
6608
							#endif
6609
						}
6610
						else if(ac_i < 30 || ac_i < 50 && weaponid != 32 && !(28 <= weaponid <= 29))
6611
						{
6612
							if(++ACInfo[playerid][acCheatCount][8] > AC_MAX_RAPID_FIRE_WARNINGS)
6613
							{
6614
								#undef AC_MAX_RAPID_FIRE_WARNINGS
6615
								#if defined DEBUG
6616
									printf("[Nex-AC debug] Fire rate: %d, weaponid: %d", ac_i, weaponid);
6617
								#endif
6618
								#if defined OnCheatDetected
6619
									ac_KickWithCode(playerid, "", 0, 26, 1);
6620
									if(ACInfo[playerid][acKicked] > 0) return 0;
6621
									ACInfo[playerid][acCheatCount][8] = 0;
6622
								#else
6623
									return ac_KickWithCode(playerid, "", 0, 26, 1);
6624
								#endif
6625
							}
6626
							#if defined OnCheatWarning
6627
								else OnCheatWarning(playerid, "", 0, 26, 1, ACInfo[playerid][acCheatCount][8]);
6628
							#endif
6629
						}
6630
						else ACInfo[playerid][acCheatCount][8] = 0;
6631
						if(weaponid == 25 && ac_i < 600 || (weaponid == 24 || 33 <= weaponid <= 34) && ac_i < 380)
6632
						{
6633
							if(++ACInfo[playerid][acCheatCount][14] > AC_MAX_AUTO_C_WARNINGS)
6634
							{
6635
								#undef AC_MAX_AUTO_C_WARNINGS
6636
								#if defined DEBUG
6637
									printf("[Nex-AC debug] Fire rate: %d, weaponid: %d", ac_i, weaponid);
6638
								#endif
6639
								#if defined OnCheatDetected
6640
									ac_KickWithCode(playerid, "", 0, 26, 2);
6641
									if(ACInfo[playerid][acKicked] > 0) return 0;
6642
									ACInfo[playerid][acCheatCount][14] = 0;
6643
								#else
6644
									return ac_KickWithCode(playerid, "", 0, 26, 2);
6645
								#endif
6646
							}
6647
							#if defined OnCheatWarning
6648
								else OnCheatWarning(playerid, "", 0, 26, 2, ACInfo[playerid][acCheatCount][14]);
6649
							#endif
6650
						}
6651
					}
6652
				}
6653
				else if(ac_i < 30)
6654
				{
6655
					#if defined DEBUG
6656
						printf("[Nex-AC debug] Fire rate: %d, weaponid: %d, last weapon: %d",
6657
						ac_i, weaponid, ACInfo[playerid][acLastShot]);
6658
					#endif
6659
					#if defined OnCheatDetected
6660
						ac_KickWithCode(playerid, "", 0, 26, 3);
6661
						if(ACInfo[playerid][acKicked] > 0) return 0;
6662
					#else
6663
						return ac_KickWithCode(playerid, "", 0, 26, 3);
6664
					#endif
6665
				}
6666
				if(GetPlayerWeaponState(playerid) == WEAPONSTATE_LAST_BULLET) ACInfo[playerid][acReloadTick] = ac_gtc;
6667
			}
6668
			if(ACInfo[playerid][acACAllow][17] && ac_t != PLAYER_STATE_PASSENGER &&
6669
			ACInfo[playerid][acGiveAmmo][ac_s] == -65535 && ac_gtc > ACInfo[playerid][acGtc][7] + ac_gpp)
6670
			{
6671
				ac_t = GetPlayerAmmo(playerid);
6672
				if(ACInfo[playerid][acAmmo][ac_s] == 0)
6673
				{
6674
					#if defined DEBUG
6675
						printf("[Nex-AC debug] Weaponid: %d, AC ammo: %d, ammo: %d", weaponid, ACInfo[playerid][acAmmo][ac_s], ac_t);
6676
					#endif
6677
					#if defined OnCheatDetected
6678
						ac_KickWithCode(playerid, "", 0, 17, 1);
6679
						if(ACInfo[playerid][acKicked] > 0) return 0;
6680
						ACInfo[playerid][acAmmo][ac_s] = ac_t;
6681
					#else
6682
						return ac_KickWithCode(playerid, "", 0, 17, 1);
6683
					#endif
6684
				}
6685
				if(ACInfo[playerid][acAmmo][ac_s] < ac_t)
6686
				{
6687
					switch(weaponid)
6688
					{
6689
						case 38:
6690
						{
6691
							if(++ACInfo[playerid][acCheatCount][7] > 9)
6692
							{
6693
								#if defined DEBUG
6694
									printf("[Nex-AC debug] Weaponid: %d, AC ammo: %d, ammo: %d, acCheatCount[7]: %d",
6695
									weaponid, ACInfo[playerid][acAmmo][ac_s], ac_t, ACInfo[playerid][acCheatCount][7]);
6696
								#endif
6697
								#if defined OnCheatDetected
6698
									ac_KickWithCode(playerid, "", 0, 17, 2);
6699
									if(ACInfo[playerid][acKicked] > 0) return 0;
6700
									ACInfo[playerid][acCheatCount][7] = 0;
6701
									ACInfo[playerid][acAmmo][ac_s] = ac_t;
6702
								#else
6703
									return ac_KickWithCode(playerid, "", 0, 17, 2);
6704
								#endif
6705
							}
6706
							#if defined OnCheatWarning
6707
								else OnCheatWarning(playerid, "", 0, 17, 2, ACInfo[playerid][acCheatCount][7]);
6708
							#endif
6709
						}
6710
						default:
6711
						{
6712
							if(ac_t > ACInfo[playerid][acAmmo][ac_s] + 6)
6713
							{
6714
								#if defined DEBUG
6715
									printf("[Nex-AC debug] Weaponid: %d, AC ammo: %d, ammo: %d",
6716
									weaponid, ACInfo[playerid][acAmmo][ac_s], ac_t);
6717
								#endif
6718
								#if defined OnCheatDetected
6719
									ac_KickWithCode(playerid, "", 0, 17, 3);
6720
									if(ACInfo[playerid][acKicked] > 0) return 0;
6721
									ACInfo[playerid][acCheatCount][7] = 0;
6722
									ACInfo[playerid][acAmmo][ac_s] = ac_t;
6723
								#else
6724
									return ac_KickWithCode(playerid, "", 0, 17, 3);
6725
								#endif
6726
							}
6727
						}
6728
					}
6729
				}
6730
				else ACInfo[playerid][acCheatCount][7] = 0;
6731
			}
6732
			if(ACInfo[playerid][acAmmo][ac_s] != 0)
6733
			{
6734
				ACInfo[playerid][acAmmo][ac_s]--;
6735
				if(ACInfo[playerid][acAmmo][ac_s] == 0 &&
6736
				ACInfo[playerid][acSet][3] == weaponid) ACInfo[playerid][acSet][3] = ACInfo[playerid][acSetWeapon][ac_s] = -1;
6737
			}
6738
			if(ACInfo[playerid][acAmmo][ac_s] < -32768) ACInfo[playerid][acAmmo][ac_s] += 65536;
6739
		}
6740
		ACInfo[playerid][acLastShot] = weaponid;
6741
		ACInfo[playerid][acShotTick] = ac_gtc;
6742
		ac_i = 1;
6743
		#if defined ac_OnPlayerWeaponShot
6744
			ac_i = ac_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, fX, fY, fZ);
6745
		#endif
6746
		if(ac_i)
6747
		{
6748
			if(ac_ur)
6749
			{
6750
				if(ACInfo[hitid][acArmour] > 0) ACInfo[hitid][acDmgRes] = 2;
6751
				else ACInfo[hitid][acDmgRes] = 1;
6752
				ACInfo[hitid][acGtc][14] = ac_gtc + 165;
6753
			}
6754
			if(ac_ur2)
6755
			{
6756
				ACInfo[ACVehInfo[hitid][acDriver]][acVehDmgRes] = true;
6757
				ACInfo[ACVehInfo[hitid][acDriver]][acGtc][16] = ac_gtc + 165;
6758
			}
6759
		}
6760
		return ac_i;
6761
	}
6762
6763
	#if defined _ALS_OnPlayerWeaponShot
6764
		#undef OnPlayerWeaponShot
6765
	#else
6766
		#define _ALS_OnPlayerWeaponShot
6767
	#endif
6768
	#define OnPlayerWeaponShot ac_OnPlayerWeaponShot
6769
	#if defined ac_OnPlayerWeaponShot
6770
		forward ac_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ);
6771
	#endif
6772
#endif
6773
6774
#if defined _inc_y_hooks || defined _INC_y_hooks
6775-
	ACInfo[playerid][acGtc][17] = ac_i + 3250;
6775+
6776
#else
6777
	public OnVehicleMod(playerid, vehicleid, componentid)
6778
#endif
6779
{
6780
	if(ACInfo[playerid][acKicked] > 0) return 0;
6781
	new ac_i = GetTickCount();
6782
	if(ACInfo[playerid][acACAllow][49])
6783
	{
6784
		if(ac_i < ACInfo[playerid][acCall][12] + ac_Mtfc[12][0]) return ac_FloodDetect(playerid, 12);
6785
		if(ac_i < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
6786
		else ACInfo[playerid][acFloodCount][12] = ACInfo[playerid][acFloodCount][27] = 0;
6787
	}
6788
	if(ACInfo[playerid][acACAllow][23] && !ACInfo[playerid][acModShop])
6789
	{
6790
		#if defined OnCheatDetected
6791
			ac_KickWithCode(playerid, "", 0, 23, 2);
6792
			if(ACInfo[playerid][acKicked] > 0) return 0;
6793
		#else
6794
			return ac_KickWithCode(playerid, "", 0, 23, 2);
6795
		#endif
6796
	}
6797
	ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][12] = ac_i;
6798
	#if AC_USE_TUNING_GARAGES
6799
		ACInfo[playerid][acGtc][17] = ac_i + 3250;
6800
	#endif
6801
	if(ACInfo[playerid][acACAllow][43] && !ac_IsCompatible((ac_i = GetVehicleModel(vehicleid)), componentid))
6802
	{
6803
		#if defined DEBUG
6804
			printf("[Nex-AC debug] Veh model: %d, componentid: %d", ac_i, componentid);
6805
		#endif
6806
		return ac_KickWithCode(playerid, "", 0, 43, 1);
6807
	}
6808
	#if AC_USE_TUNING_GARAGES
6809
		ac_i = componentid - 1000;
6810
		if(ACInfo[playerid][acSet][12] != -1) ACInfo[playerid][acSet][12] += ac_cPrice[ac_i];
6811
		else ACInfo[playerid][acSet][12] = ac_cPrice[ac_i];
6812
		ACInfo[playerid][acCheatCount][12] = 0;
6813
	#endif
6814
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
6815
		&& defined ac_OnVehicleMod
6816
		return ac_OnVehicleMod(playerid, vehicleid, componentid);
6817
	#else
6818
		return 1;
6819
	#endif
6820
}
6821
6822
#if !defined _inc_y_hooks && !defined _INC_y_hooks
6823
	#if defined _ALS_OnVehicleMod
6824
		#undef OnVehicleMod
6825
	#else
6826
		#define _ALS_OnVehicleMod
6827
	#endif
6828
	#define OnVehicleMod ac_OnVehicleMod
6829
	#if defined ac_OnVehicleMod
6830
		forward ac_OnVehicleMod(playerid, vehicleid, componentid);
6831
	#endif
6832
#endif
6833
6834
#if defined _inc_y_hooks || defined _INC_y_hooks
6835
	hook OnVehiclePaintjob(playerid, vehicleid, paintjobid)
6836
#else
6837
	public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
6838
#endif
6839
{
6840
	if(ACInfo[playerid][acKicked] > 0) return 0;
6841
	new ac_gtc = GetTickCount();
6842
	if(ACInfo[playerid][acACAllow][49])
6843
	{
6844
		if(ac_gtc < ACInfo[playerid][acCall][13] + ac_Mtfc[13][0]) ac_FloodDetect(playerid, 13);
6845
		else if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
6846
		else ACInfo[playerid][acFloodCount][13] = ACInfo[playerid][acFloodCount][27] = 0;
6847
	}
6848
	if(ACInfo[playerid][acACAllow][43] && !(0 <= paintjobid <= 2) && paintjobid != 255)
6849
	{
6850
		#if defined DEBUG
6851
			printf("[Nex-AC debug] Veh model: %d, paintjobid: %d", GetVehicleModel(vehicleid), paintjobid);
6852
		#endif
6853
		ac_KickWithCode(playerid, "", 0, 43, 2);
6854
	}
6855
	else if(ACInfo[playerid][acACAllow][23] && !ACInfo[playerid][acModShop]) ac_KickWithCode(playerid, "", 0, 23, 4);
6856
	if(ACInfo[playerid][acKicked] < 1)
6857
	{
6858
		if(paintjobid == 255) ACVehInfo[vehicleid][acPaintJob] = 3;
6859
		else ACVehInfo[vehicleid][acPaintJob] = paintjobid;
6860
	}
6861
	ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][13] = ac_gtc;
6862
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
6863
		&& defined ac_OnVehiclePaintjob
6864
		return ac_OnVehiclePaintjob(playerid, vehicleid, paintjobid);
6865
	#else
6866
		return 1;
6867
	#endif
6868
}
6869
6870
#if !defined _inc_y_hooks && !defined _INC_y_hooks
6871
	#if defined _ALS_OnVehiclePaintjob
6872
		#undef OnVehiclePaintjob
6873
	#else
6874
		#define _ALS_OnVehiclePaintjob
6875
	#endif
6876
	#define OnVehiclePaintjob ac_OnVehiclePaintjob
6877
	#if defined ac_OnVehiclePaintjob
6878
		forward ac_OnVehiclePaintjob(playerid, vehicleid, paintjobid);
6879
	#endif
6880
#endif
6881
6882
#if defined _inc_y_hooks || defined _INC_y_hooks
6883
	hook OnVehicleRespray(playerid, vehicleid, color1, color2)
6884
#else
6885
	public OnVehicleRespray(playerid, vehicleid, color1, color2)
6886
#endif
6887
{
6888
	if(ACInfo[playerid][acKicked] > 0) return 0;
6889
	new ac_gtc = GetTickCount();
6890
	if(ACInfo[playerid][acACAllow][49])
6891
	{
6892
		if(ac_gtc < ACInfo[playerid][acCall][14] + ac_Mtfc[14][0]) return ac_FloodDetect(playerid, 14);
6893
		if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
6894
		else ACInfo[playerid][acFloodCount][14] = ACInfo[playerid][acFloodCount][27] = 0;
6895
	}
6896
	#if !AC_USE_TUNING_GARAGES && !AC_USE_PAYNSPRAY
6897
		if(ACInfo[playerid][acACAllow][23])
6898
		{
6899
			#if defined DEBUG
6900
				printf("[Nex-AC debug] Veh model: %d, color1: %d, color2: %d", GetVehicleModel(vehicleid), color1, color2);
6901
			#endif
6902
			#if defined OnCheatDetected
6903
				ac_KickWithCode(playerid, "", 0, 23, 5);
6904
				if(ACInfo[playerid][acKicked] > 0) return 0;
6905
			#else
6906
				return ac_KickWithCode(playerid, "", 0, 23, 5);
6907
			#endif
6908
		}
6909
	#endif
6910
	ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][14] = ac_gtc;
6911
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
6912
		&& defined ac_OnVehicleRespray
6913
		return ac_OnVehicleRespray(playerid, vehicleid, color1, color2);
6914
	#else
6915
		return 1;
6916
	#endif
6917
}
6918
6919
#if !defined _inc_y_hooks && !defined _INC_y_hooks
6920
	#if defined _ALS_OnVehicleRespray
6921
		#undef OnVehicleRespray
6922
	#else
6923
		#define _ALS_OnVehicleRespray
6924
	#endif
6925
	#define OnVehicleRespray ac_OnVehicleRespray
6926
	#if defined ac_OnVehicleRespray
6927
		forward ac_OnVehicleRespray(playerid, vehicleid, color1, color2);
6928
	#endif
6929
#endif
6930
6931
#if defined _inc_y_hooks || defined _INC_y_hooks
6932
	hook OnVehicleSpawn(vehicleid)
6933
#else
6934
	public OnVehicleSpawn(vehicleid)
6935
#endif
6936
{
6937
	ACVehInfo[vehicleid][acPaintJob] = 3;
6938
	ACVehInfo[vehicleid][acSpawned] = true;
6939
	ACVehInfo[vehicleid][acHealth] = 1000.0;
6940
	ACVehInfo[vehicleid][acPosDiff] =
6941
	ACVehInfo[vehicleid][acVelX] =
6942
	ACVehInfo[vehicleid][acVelY] =
6943
	ACVehInfo[vehicleid][acVelZ] = 0.0;
6944
	ACVehInfo[vehicleid][acLastSpeed] =
6945
	ACVehInfo[vehicleid][acSpeedDiff] = 0;
6946
	ACVehInfo[vehicleid][acPosX] = ACVehInfo[vehicleid][acSpawnPosX];
6947
	ACVehInfo[vehicleid][acPosY] = ACVehInfo[vehicleid][acSpawnPosY];
6948
	ACVehInfo[vehicleid][acPosZ] = ACVehInfo[vehicleid][acSpawnPosZ];
6949
	ACVehInfo[vehicleid][acZAngle] = ACVehInfo[vehicleid][acSpawnZAngle];
6950
	ACVehInfo[vehicleid][acDriver] = INVALID_PLAYER_ID;
6951
	new ac_gtc = GetTickCount() + 2650;
6952
	#if defined foreach
6953
		foreach(new ac_i : Player)
6954
		{
6955
			if(ACInfo[ac_i][acVeh] == vehicleid)
6956
			{
6957
				ACInfo[ac_i][acSetPosTick] =
6958
				ACInfo[ac_i][acGtc][11] = ac_gtc;
6959
			}
6960
		}
6961
	#else
6962
		#if defined GetPlayerPoolSize
6963
			for(new ac_i = GetPlayerPoolSize(); ac_i >= 0; --ac_i)
6964
		#else
6965
			for(new ac_i = MAX_PLAYERS - 1; ac_i >= 0; --ac_i)
6966
		#endif
6967
		{
6968
			if(IsPlayerInVehicle(ac_i, vehicleid))
6969
			{
6970
				ACInfo[ac_i][acSetPosTick] =
6971
				ACInfo[ac_i][acGtc][11] = ac_gtc;
6972
			}
6973
		}
6974
	#endif
6975
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
6976
		&& defined ac_OnVehicleSpawn
6977
		return ac_OnVehicleSpawn(vehicleid);
6978
	#else
6979
		return 1;
6980
	#endif
6981
}
6982
6983
#if !defined _inc_y_hooks && !defined _INC_y_hooks
6984
	#if defined _ALS_OnVehicleSpawn
6985
		#undef OnVehicleSpawn
6986
	#else
6987
		#define _ALS_OnVehicleSpawn
6988
	#endif
6989
	#define OnVehicleSpawn ac_OnVehicleSpawn
6990
	#if defined ac_OnVehicleSpawn
6991
		forward ac_OnVehicleSpawn(vehicleid);
6992
	#endif
6993
#endif
6994
6995
#if defined _inc_y_hooks || defined _INC_y_hooks
6996
	hook OnVehicleDeath(vehicleid, killerid)
6997
#else
6998
	public OnVehicleDeath(vehicleid, killerid)
6999
#endif
7000
{
7001
	#if AC_USE_NPC
7002
	if(IsPlayerConnected(killerid) && !IsPlayerNPC(killerid))
7003
	#else
7004
	if(IsPlayerConnected(killerid))
7005
	#endif
7006
	{
7007
		new ac_gtc = GetTickCount();
7008
		if(ACInfo[killerid][acACAllow][49])
7009
		{
7010
			if(ac_gtc < ACInfo[killerid][acCall][15] + ac_Mtfc[15][0]) ac_FloodDetect(killerid, 15);
7011
			else if(ac_gtc < ACInfo[killerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(killerid, 27);
7012
			else ACInfo[killerid][acFloodCount][15] = ACInfo[killerid][acFloodCount][27] = 0;
7013
		}
7014
		ACInfo[killerid][acCall][27] = ACInfo[killerid][acCall][15] = ac_gtc;
7015
	}
7016
	new Float:ac_vHealth;
7017
	GetVehicleHealth(vehicleid, ac_vHealth);
7018
	if(ac_vHealth < 250.0) ACVehInfo[vehicleid][acSpawned] = false;
7019
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
7020
		&& defined ac_OnVehicleDeath
7021
		return ac_OnVehicleDeath(vehicleid, killerid);
7022
	#else
7023
		return 1;
7024
	#endif
7025
}
7026
7027
#if !defined _inc_y_hooks && !defined _INC_y_hooks
7028
	#if defined _ALS_OnVehicleDeath
7029
		#undef OnVehicleDeath
7030
	#else
7031
		#define _ALS_OnVehicleDeath
7032
	#endif
7033
	#define OnVehicleDeath ac_OnVehicleDeath
7034
	#if defined ac_OnVehicleDeath
7035
		forward ac_OnVehicleDeath(vehicleid, killerid);
7036
	#endif
7037
#endif
7038
7039
#if defined _inc_y_hooks || defined _INC_y_hooks
7040
	hook OnPlayerText(playerid, text[])
7041
#else
7042
	public OnPlayerText(playerid, text[])
7043
#endif
7044
{
7045
	if(ACInfo[playerid][acKicked] > 0) return 0;
7046
	#if AC_USE_NPC
7047
		if(!IsPlayerNPC(playerid))
7048
		{
7049
	#endif
7050
		new ac_gtc = GetTickCount();
7051
		if(ACInfo[playerid][acACAllow][49])
7052
		{
7053
			if(ac_gtc < ACInfo[playerid][acCall][16] + ac_Mtfc[16][0]) return ac_FloodDetect(playerid, 16);
7054
			if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
7055
			else ACInfo[playerid][acFloodCount][16] = ACInfo[playerid][acFloodCount][27] = 0;
7056
		}
7057
		ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][16] = ac_gtc;
7058
	#if AC_USE_NPC
7059
		}
7060
	#endif
7061
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
7062
		&& defined ac_OnPlayerText
7063
		return ac_OnPlayerText(playerid, text);
7064
	#else
7065
		return 1;
7066
	#endif
7067
}
7068
7069
#if !defined _inc_y_hooks && !defined _INC_y_hooks
7070
	#if defined _ALS_OnPlayerText
7071
		#undef OnPlayerText
7072
	#else
7073
		#define _ALS_OnPlayerText
7074
	#endif
7075
	#define OnPlayerText ac_OnPlayerText
7076
	#if defined ac_OnPlayerText
7077
		forward ac_OnPlayerText(playerid, text[]);
7078
	#endif
7079
#endif
7080
7081
#if defined _inc_y_hooks || defined _INC_y_hooks
7082
	hook OnPlayerEnterCheckpoint(playerid)
7083
#else
7084
	public OnPlayerEnterCheckpoint(playerid)
7085
#endif
7086
{
7087
	if(ACInfo[playerid][acKicked] > 0) return 0;
7088
	#if AC_USE_NPC
7089
		if(!IsPlayerNPC(playerid))
7090
		{
7091
	#endif
7092
		new ac_gtc = GetTickCount();
7093
		if(ACInfo[playerid][acACAllow][49])
7094
		{
7095
			if(ac_gtc < ACInfo[playerid][acCall][17] + ac_Mtfc[17][0]) ac_FloodDetect(playerid, 17);
7096
			else if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
7097
			else ACInfo[playerid][acFloodCount][17] = ACInfo[playerid][acFloodCount][27] = 0;
7098
		}
7099
		ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][17] = ac_gtc;
7100
	#if AC_USE_NPC
7101
		}
7102
	#endif
7103
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
7104
		&& defined ac_OnPlayerEnterCheckpoint
7105
		return ac_OnPlayerEnterCheckpoint(playerid);
7106
	#else
7107
		return 1;
7108
	#endif
7109
}
7110
7111
#if !defined _inc_y_hooks && !defined _INC_y_hooks
7112
	#if defined _ALS_OnPlayerEnterCheckpoint
7113
		#undef OnPlayerEnterCheckpoint
7114
	#else
7115
		#define _ALS_OnPlayerEnterCheckpoint
7116
	#endif
7117
	#define OnPlayerEnterCheckpoint ac_OnPlayerEnterCheckpoint
7118
	#if defined ac_OnPlayerEnterCheckpoint
7119
		forward ac_OnPlayerEnterCheckpoint(playerid);
7120
	#endif
7121
#endif
7122
7123
#if defined _inc_y_hooks || defined _INC_y_hooks
7124
	hook OnPlayerLeaveCheckpoint(playerid)
7125
#else
7126
	public OnPlayerLeaveCheckpoint(playerid)
7127
#endif
7128
{
7129
	if(ACInfo[playerid][acKicked] > 0) return 0;
7130
	#if AC_USE_NPC
7131
		if(!IsPlayerNPC(playerid))
7132
		{
7133
	#endif
7134
		new ac_gtc = GetTickCount();
7135
		if(ACInfo[playerid][acACAllow][49])
7136
		{
7137
			if(ac_gtc < ACInfo[playerid][acCall][18] + ac_Mtfc[18][0]) ac_FloodDetect(playerid, 18);
7138
			else if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
7139
			else ACInfo[playerid][acFloodCount][18] = ACInfo[playerid][acFloodCount][27] = 0;
7140
		}
7141
		ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][18] = ac_gtc;
7142
	#if AC_USE_NPC
7143
		}
7144
	#endif
7145
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
7146
		&& defined ac_OnPlayerLeaveCheckpoint
7147
		return ac_OnPlayerLeaveCheckpoint(playerid);
7148
	#else
7149
		return 1;
7150
	#endif
7151
}
7152
7153
#if !defined _inc_y_hooks && !defined _INC_y_hooks
7154
	#if defined _ALS_OnPlayerLeaveCheckpoint
7155
		#undef OnPlayerLeaveCheckpoint
7156
	#else
7157
		#define _ALS_OnPlayerLeaveCheckpoint
7158
	#endif
7159
	#define OnPlayerLeaveCheckpoint ac_OnPlayerLeaveCheckpoint
7160
	#if defined ac_OnPlayerLeaveCheckpoint
7161
		forward ac_OnPlayerLeaveCheckpoint(playerid);
7162
	#endif
7163
#endif
7164
7165
public OnPlayerRequestSpawn(playerid)
7166
{
7167
	if(ACInfo[playerid][acKicked] > 0) return 0;
7168
	new ac_gtc;
7169
	#if AC_USE_NPC
7170
		if(!IsPlayerNPC(playerid))
7171
		{
7172
	#endif
7173
		ac_gtc = GetTickCount();
7174
		if(ACInfo[playerid][acACAllow][49])
7175
		{
7176
			if(ac_gtc < ACInfo[playerid][acCall][19] + ac_Mtfc[19][0]) ac_FloodDetect(playerid, 19);
7177
			else if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
7178
			else ACInfo[playerid][acFloodCount][19] = ACInfo[playerid][acFloodCount][27] = 0;
7179
		}
7180
	#if AC_USE_NPC
7181
		}
7182
	#endif
7183
	new ac_i = 1;
7184
	#if defined ac_OnPlayerRequestSpawn
7185
		ac_i = ac_OnPlayerRequestSpawn(playerid);
7186
	#endif
7187
	if(ac_i)
7188
	{
7189
		ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][19] = ac_gtc;
7190
		if(!ACInfo[playerid][acSpawned])
7191
		{
7192
			ACInfo[playerid][acSet][7] = 3;
7193
			ACInfo[playerid][acSpawnTick] =
7194
			ACInfo[playerid][acNOPCount][9] = 0;
7195
			ACInfo[playerid][acSpawnRes] = 1;
7196
		}
7197
	}
7198
	return ac_i;
7199
}
7200
7201
#if defined _ALS_OnPlayerRequestSpawn
7202
	#undef OnPlayerRequestSpawn
7203
#else
7204
	#define _ALS_OnPlayerRequestSpawn
7205
#endif
7206
#define OnPlayerRequestSpawn ac_OnPlayerRequestSpawn
7207
#if defined ac_OnPlayerRequestSpawn
7208
	forward ac_OnPlayerRequestSpawn(playerid);
7209
#endif
7210
7211
#if defined _inc_y_hooks || defined _INC_y_hooks
7212
	hook OnPlayerExitedMenu(playerid)
7213
#else
7214
	public OnPlayerExitedMenu(playerid)
7215
#endif
7216
{
7217
	if(!(0 <= playerid < MAX_PLAYERS) || ACInfo[playerid][acKicked] > 0) return 0;
7218
	new ac_gtc = GetTickCount();
7219
	if(ACInfo[playerid][acACAllow][49])
7220
	{
7221
		if(ac_gtc < ACInfo[playerid][acCall][20] + ac_Mtfc[20][0]) ac_FloodDetect(playerid, 20);
7222
		else if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
7223
		else ACInfo[playerid][acFloodCount][20] = ACInfo[playerid][acFloodCount][27] = 0;
7224
	}
7225
	ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][20] = ac_gtc;
7226
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
7227
		&& defined ac_OnPlayerExitedMenu
7228
		return ac_OnPlayerExitedMenu(playerid);
7229
	#else
7230
		return 1;
7231
	#endif
7232
}
7233
7234
#if !defined _inc_y_hooks && !defined _INC_y_hooks
7235
	#if defined _ALS_OnPlayerExitedMenu
7236
		#undef OnPlayerExitedMenu
7237
	#else
7238
		#define _ALS_OnPlayerExitedMenu
7239
	#endif
7240
	#define OnPlayerExitedMenu ac_OnPlayerExitedMenu
7241
	#if defined ac_OnPlayerExitedMenu
7242
		forward ac_OnPlayerExitedMenu(playerid);
7243
	#endif
7244
#endif
7245
7246
#if defined _inc_y_hooks || defined _INC_y_hooks
7247
	hook OnPlayerEnterRaceCP(playerid)
7248
#else
7249
	public OnPlayerEnterRaceCheckpoint(playerid)
7250
#endif
7251
{
7252
	if(ACInfo[playerid][acKicked] > 0) return 0;
7253
	#if AC_USE_NPC
7254
		if(!IsPlayerNPC(playerid))
7255
		{
7256
	#endif
7257
		new ac_gtc = GetTickCount();
7258
		if(ACInfo[playerid][acACAllow][49])
7259
		{
7260
			if(ac_gtc < ACInfo[playerid][acCall][21] + ac_Mtfc[21][0]) ac_FloodDetect(playerid, 21);
7261
			else if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
7262
			else ACInfo[playerid][acFloodCount][21] = ACInfo[playerid][acFloodCount][27] = 0;
7263
		}
7264
		ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][21] = ac_gtc;
7265
	#if AC_USE_NPC
7266
		}
7267
	#endif
7268
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
7269
		&& defined ac_OnPlayerEnterRaceCheckpoint
7270
		return ac_OnPlayerEnterRaceCheckpoint(playerid);
7271
	#else
7272
		return 1;
7273
	#endif
7274
}
7275
7276
#if !defined _inc_y_hooks && !defined _INC_y_hooks
7277
	#if defined _ALS_OnPlayerEnterRaceCheckpoin\
7278
		|| defined _ALS_OnPlayerEnterRaceCP
7279
		#undef OnPlayerEnterRaceCheckpoint
7280
	#else
7281
		#define _ALS_OnPlayerEnterRaceCheckpoin
7282
		#define _ALS_OnPlayerEnterRaceCP
7283
	#endif
7284
	#define OnPlayerEnterRaceCheckpoint ac_OnPlayerEnterRaceCheckpoint
7285
	#if defined ac_OnPlayerEnterRaceCheckpoint
7286
		forward ac_OnPlayerEnterRaceCheckpoint(playerid);
7287
	#endif
7288
#endif
7289
7290
#if defined _inc_y_hooks || defined _INC_y_hooks
7291
	hook OnPlayerLeaveRaceCP(playerid)
7292
#else
7293
	public OnPlayerLeaveRaceCheckpoint(playerid)
7294
#endif
7295
{
7296
	if(ACInfo[playerid][acKicked] > 0) return 0;
7297
	#if AC_USE_NPC
7298
		if(!IsPlayerNPC(playerid))
7299
		{
7300
	#endif
7301
		new ac_gtc = GetTickCount();
7302
		if(ACInfo[playerid][acACAllow][49])
7303
		{
7304
			if(ac_gtc < ACInfo[playerid][acCall][22] + ac_Mtfc[22][0]) ac_FloodDetect(playerid, 22);
7305
			else if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
7306
			else ACInfo[playerid][acFloodCount][22] = ACInfo[playerid][acFloodCount][27] = 0;
7307
		}
7308
		ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][22] = ac_gtc;
7309
	#if AC_USE_NPC
7310
		}
7311
	#endif
7312
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
7313
		&& defined ac_OnPlayerLeaveRaceCheckpoint
7314
		return ac_OnPlayerLeaveRaceCheckpoint(playerid);
7315
	#else
7316
		return 1;
7317
	#endif
7318
}
7319
7320
#if !defined _inc_y_hooks && !defined _INC_y_hooks
7321
	#if defined _ALS_OnPlayerLeaveRaceCheckpoin\
7322
		|| defined _ALS_OnPlayerLeaveRaceCP
7323
		#undef OnPlayerLeaveRaceCheckpoint
7324
	#else
7325
		#define _ALS_OnPlayerLeaveRaceCheckpoin
7326
		#define _ALS_OnPlayerLeaveRaceCP
7327
	#endif
7328
	#define OnPlayerLeaveRaceCheckpoint ac_OnPlayerLeaveRaceCheckpoint
7329
	#if defined ac_OnPlayerLeaveRaceCheckpoint
7330
		forward ac_OnPlayerLeaveRaceCheckpoint(playerid);
7331
	#endif
7332
#endif
7333
7334
#if defined _inc_y_hooks || defined _INC_y_hooks
7335
	hook OnPlayerClickPlayerTD(playerid, PlayerText:playertextid)
7336
#else
7337
	public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
7338
#endif
7339
{
7340
	if(ACInfo[playerid][acKicked] > 0) return 1;
7341
	new ac_gtc = GetTickCount();
7342
	if(ACInfo[playerid][acACAllow][49])
7343
	{
7344
		if(ac_gtc < ACInfo[playerid][acCall][23] + ac_Mtfc[23][0])
7345
		{
7346
			ac_FloodDetect(playerid, 23);
7347
			return 1;
7348
		}
7349
		if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
7350
		else ACInfo[playerid][acFloodCount][23] = ACInfo[playerid][acFloodCount][27] = 0;
7351
	}
7352
	ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][23] = ac_gtc;
7353
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
7354
		&& defined ac_OnPlayerClickPlayerTextDraw
7355
		return ac_OnPlayerClickPlayerTextDraw(playerid, playertextid);
7356
	#else
7357
		return 0;
7358
	#endif
7359
}
7360
7361
#if !defined _inc_y_hooks && !defined _INC_y_hooks
7362
	#if defined _ALS_OnPlayerClickPlayerTextDra\
7363
		|| defined _ALS_OnPlayerClickPlayerTD
7364
		#undef OnPlayerClickPlayerTextDraw
7365
	#else
7366
		#define _ALS_OnPlayerClickPlayerTextDra
7367
		#define _ALS_OnPlayerClickPlayerTD
7368
	#endif
7369
	#define OnPlayerClickPlayerTextDraw ac_OnPlayerClickPlayerTextDraw
7370
	#if defined ac_OnPlayerClickPlayerTextDraw
7371
		forward ac_OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid);
7372
	#endif
7373
#endif
7374
7375
#if defined _inc_y_hooks || defined _INC_y_hooks
7376
	hook OnVehDamageStatusUpd(vehicleid, playerid)
7377
#else
7378
	public OnVehicleDamageStatusUpdate(vehicleid, playerid)
7379
#endif
7380
{
7381
	if(ACInfo[playerid][acKicked] > 0) return 1;
7382
	new ac_gtc = GetTickCount();
7383
	if(ACInfo[playerid][acACAllow][49])
7384
	{
7385
		if(ac_gtc < ACInfo[playerid][acCall][24] + ac_Mtfc[24][0]) ac_FloodDetect(playerid, 24);
7386
		else if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
7387
		else
7388
		{
7389
			if(ACInfo[playerid][acFloodCount][24] > 0) ACInfo[playerid][acFloodCount][24]--;
7390
			ACInfo[playerid][acFloodCount][27] = 0;
7391
		}
7392
	}
7393
	ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][24] = ac_gtc;
7394
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
7395
		&& defined ac_OnVehicleDamageStatusUpdate
7396
		return ac_OnVehicleDamageStatusUpdate(vehicleid, playerid);
7397
	#else
7398
		return 0;
7399
	#endif
7400
}
7401
7402
#if !defined _inc_y_hooks && !defined _INC_y_hooks
7403
	#if defined _ALS_OnVehicleDamageStatusUpdat\
7404
		|| defined _ALS_OnVehicleDamageStatusUpd
7405
		#undef OnVehicleDamageStatusUpdate
7406
	#else
7407
		#define _ALS_OnVehicleDamageStatusUpdat
7408
		#define _ALS_OnVehicleDamageStatusUpd
7409
	#endif
7410
	#define OnVehicleDamageStatusUpdate ac_OnVehicleDamageStatusUpdate
7411
	#if defined ac_OnVehicleDamageStatusUpdate
7412
		forward ac_OnVehicleDamageStatusUpdate(vehicleid, playerid);
7413
	#endif
7414
#endif
7415
7416
#if defined OnVehicleSirenStateChange
7417
	#if defined _inc_y_hooks || defined _INC_y_hooks
7418
		hook OnVehicleSirenChange(playerid, vehicleid, newstate)
7419
	#else
7420
		public OnVehicleSirenStateChange(playerid, vehicleid, newstate)
7421
	#endif
7422
	{
7423
		if(ACInfo[playerid][acKicked] > 0) return 1;
7424
		#if AC_USE_NPC
7425
			if(!IsPlayerNPC(playerid))
7426
			{
7427
		#endif
7428
			new ac_gtc = GetTickCount();
7429
			if(ACInfo[playerid][acACAllow][49])
7430
			{
7431
				if(ac_gtc < ACInfo[playerid][acCall][25] + ac_Mtfc[25][0]) ac_FloodDetect(playerid, 25);
7432
				else if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
7433
				else ACInfo[playerid][acFloodCount][25] = ACInfo[playerid][acFloodCount][27] = 0;
7434
			}
7435
			ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][25] = ac_gtc;
7436
		#if AC_USE_NPC
7437
			}
7438
		#endif
7439
		#if !defined _inc_y_hooks && !defined _INC_y_hooks\
7440
			&& defined ac_OnVehicleSirenStateChange
7441
			return ac_OnVehicleSirenStateChange(playerid, vehicleid, newstate);
7442
		#else
7443
			return 0;
7444
		#endif
7445
	}
7446
7447
	#if !defined _inc_y_hooks && !defined _INC_y_hooks
7448
		#if defined _ALS_OnVehicleSirenStateChange
7449
			#undef OnVehicleSirenStateChange
7450
		#else
7451
			#define _ALS_OnVehicleSirenStateChange
7452
		#endif
7453
		#define OnVehicleSirenStateChange ac_OnVehicleSirenStateChange
7454
		#if defined ac_OnVehicleSirenStateChange
7455
			forward ac_OnVehicleSirenStateChange(playerid, vehicleid, newstate);
7456
		#endif
7457
	#endif
7458
#endif
7459
7460
#if defined OnPlayerSelectDynamicObject
7461
	#if defined _inc_y_hooks || defined _INC_y_hooks
7462
		#if defined STREAMER_ENABLE_TAGS
7463
			hook OnPlayerSelectDynObject(playerid, STREAMER_TAG_OBJECT:objectid, modelid, Float:x, Float:y, Float:z)
7464
		#else
7465
			hook OnPlayerSelectDynObject(playerid, objectid, modelid, Float:x, Float:y, Float:z)
7466
		#endif
7467
	#else
7468
		#if defined STREAMER_ENABLE_TAGS
7469
			public OnPlayerSelectDynamicObject(playerid, STREAMER_TAG_OBJECT:objectid, modelid, Float:x, Float:y, Float:z)
7470
		#else
7471
			public OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z)
7472
		#endif
7473
	#endif
7474
	{
7475
		if(ACInfo[playerid][acKicked] > 0) return 0;
7476
		new ac_gtc = GetTickCount();
7477
		if(ACInfo[playerid][acACAllow][49])
7478
		{
7479
			if(ac_gtc < ACInfo[playerid][acCall][26] + ac_Mtfc[26][0]) ac_FloodDetect(playerid, 26);
7480
			else if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
7481
			else ACInfo[playerid][acFloodCount][26] = ACInfo[playerid][acFloodCount][27] = 0;
7482
		}
7483
		ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][26] = ac_gtc;
7484
		#if !defined _inc_y_hooks && !defined _INC_y_hooks\
7485
			&& defined ac_OnPlayerSelectDynamicObject
7486
			return ac_OnPlayerSelectDynamicObject(playerid, objectid, modelid, x, y, z);
7487
		#else
7488
			return 1;
7489
		#endif
7490
	}
7491
7492
	#if !defined _inc_y_hooks && !defined _INC_y_hooks
7493
		#if defined _ALS_OnPlayerSelectDynamicObjec\
7494
			|| defined _ALS_OnPlayerSelectDynObject || defined _ALS_OnPlayerSelectDynamicObj
7495
			#undef OnPlayerSelectDynamicObject
7496
		#else
7497
			#define _ALS_OnPlayerSelectDynamicObjec
7498
			#define _ALS_OnPlayerSelectDynObject
7499
			#define _ALS_OnPlayerSelectDynamicObj
7500
		#endif
7501
		#define OnPlayerSelectDynamicObject ac_OnPlayerSelectDynamicObject
7502
		#if defined ac_OnPlayerSelectDynamicObject
7503
			#if defined STREAMER_ENABLE_TAGS
7504
				forward ac_OnPlayerSelectDynamicObject(playerid, STREAMER_TAG_OBJECT:objectid, modelid, Float:x, Float:y, Float:z);
7505
			#else
7506
				forward ac_OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z);
7507
			#endif
7508
		#endif
7509
	#endif
7510
#endif
7511
7512
#if defined _inc_y_hooks || defined _INC_y_hooks
7513
	hook OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
7514
#else
7515
	public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
7516
#endif
7517
{
7518
	if(ACInfo[playerid][acKicked] > 0) return 1;
7519
	new ac_gtc = GetTickCount();
7520
	if(ACInfo[playerid][acACAllow][49])
7521
	{
7522
		if(ac_gtc < ACInfo[playerid][acCall][26] + ac_Mtfc[26][0])
7523
		{
7524
			ac_FloodDetect(playerid, 26);
7525
			return 1;
7526
		}
7527
		if(ac_gtc < ACInfo[playerid][acCall][27] + ac_Mtfc[27][0]) ac_FloodDetect(playerid, 27);
7528
		else ACInfo[playerid][acFloodCount][26] = ACInfo[playerid][acFloodCount][27] = 0;
7529
	}
7530
	ACInfo[playerid][acCall][27] = ACInfo[playerid][acCall][26] = ac_gtc;
7531
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
7532
		&& defined ac_OnPlayerSelectObject
7533-
		vel_x - ACVehInfo[vehicleid][acVelX] >= 20.0 || vel_y - ACVehInfo[vehicleid][acVelY] >= 20.0 || vel_z - ACVehInfo[vehicleid][acVelZ] >= 20.0 ||
7533+
7534
	#else
7535
		return 0;
7536
	#endif
7537
}
7538
7539
#if !defined _inc_y_hooks && !defined _INC_y_hooks
7540
	#if defined _ALS_OnPlayerSelectObject
7541
		#undef OnPlayerSelectObject
7542
	#else
7543
		#define _ALS_OnPlayerSelectObject
7544
	#endif
7545
	#define OnPlayerSelectObject ac_OnPlayerSelectObject
7546
	#if defined ac_OnPlayerSelectObject
7547
		forward ac_OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ);
7548
	#endif
7549
#endif
7550
7551
#if defined OnTrailerUpdate
7552
	public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat, Float:new_x, Float:new_y, Float:new_z, Float:vel_x, Float:vel_y, Float:vel_z)
7553
#elseif defined GetServerTickRate
7554
	public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat, Float:new_x, Float:new_y, Float:new_z)
7555
#else
7556
	public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat)
7557
#endif
7558
{
7559
	if(ACInfo[playerid][acKicked] > 0) return 0;
7560
	#if defined OnTrailerUpdate
7561
		if(ACInfo[playerid][acACAllow][31] &&
7562
		(new_x != new_x || new_y != new_y || new_z != new_z || vel_x != vel_x || vel_y != vel_y || vel_z != vel_z ||
7563-
			ac_zDiff >= -5.0 && (floatabs(new_x - ac_x) >= 12.0 || floatabs(new_y - ac_y) >= 12.0)))
7563+
7564
		floatabs(vel_x) - floatabs(ACVehInfo[vehicleid][acVelX]) >= 4.0 ||
7565
		floatabs(vel_y) - floatabs(ACVehInfo[vehicleid][acVelY]) >= 4.0 ||
7566
		floatabs(vel_z) - floatabs(ACVehInfo[vehicleid][acVelZ]) >= 4.0 ||
7567
		floatabs(vel_x) >= 100.0 || floatabs(vel_y) >= 100.0 || floatabs(vel_z) >= 100.0))
7568-
						printf("[Nex-AC debug] Vel x, y: %f, %f, old vel x, y: %f, %f, pos diff x, y, z: %f, %f, %f, veh: %d",
7568+
7569-
						vel_x, vel_y, ACVehInfo[vehicleid][acVelX], ACVehInfo[vehicleid][acVelY], new_x - ac_x, new_y - ac_y, ac_zDiff, vehicleid);
7569+
7570
				printf("[Nex-AC debug] Pos x, y, z: %f, %f, %f, vel x, y, z: %f, %f, %f", new_x, new_y, new_z, vel_x, vel_y, vel_z);
7571
			#endif
7572
			return ac_KickWithCode(playerid, "", 0, 31, 2);
7573
		}
7574
	#elseif defined GetServerTickRate
7575
		if(ACInfo[playerid][acACAllow][31] &&
7576
		(new_x != new_x || new_y != new_y || new_z != new_z ||
7577
		floatabs(new_x) >= 25000.0 || floatabs(new_y) >= 25000.0 || floatabs(new_z) >= 25000.0))
7578
		{
7579
			#if defined DEBUG
7580
				printf("[Nex-AC debug] Pos x, y, z: %f, %f, %f", new_x, new_y, new_z);
7581
			#endif
7582
			return ac_KickWithCode(playerid, "", 0, 31, 2);
7583
		}
7584
	#endif
7585
	#if defined GetServerTickRate
7586
		new Float:ac_x, Float:ac_y, Float:ac_z, Float:ac_dist = GetVehicleDistanceFromPoint(vehicleid, new_x, new_y, new_z);
7587
		GetVehiclePos(vehicleid, ac_x, ac_y, ac_z);
7588
		if(passenger_seat > 0)
7589
		{
7590
			new Float:ac_zDiff = new_z - ac_z;
7591
			#if defined OnTrailerUpdate
7592
			if(ACInfo[playerid][acACAllow][31] &&
7593
			((vel_z > ACVehInfo[vehicleid][acVelZ] || ac_zDiff >= -0.8) &&
7594
			(floatabs(vel_x) >= floatabs(ACVehInfo[vehicleid][acVelX]) && floatabs(ACVehInfo[vehicleid][acVelX]) >= 0.3 ||
7595
			floatabs(vel_y) >= floatabs(ACVehInfo[vehicleid][acVelY]) && floatabs(ACVehInfo[vehicleid][acVelY]) >= 0.3) ||
7596
			ac_zDiff >= -5.0 && (floatabs(new_x - ac_x) >= 12.0 || floatabs(new_y - ac_y) >= 12.0) ||
7597
			vel_z >= 0.0 && ac_zDiff <= -3.0 || vel_z <= 0.0 && ac_zDiff >= 3.0))
7598
			{
7599
				if(++ACInfo[playerid][acCheatCount][4] > AC_MAX_CARSHOT_WARNINGS)
7600
				{
7601
					#if defined DEBUG
7602
						printf("[Nex-AC debug] Vel x, y, z: %f, %f, %f, old vel x, y: %f, %f, pos diff x, y, z: %f, %f, %f, veh: %d",
7603
						vel_x, vel_y, vel_z, ACVehInfo[vehicleid][acVelX], ACVehInfo[vehicleid][acVelY], new_x - ac_x, new_y - ac_y, ac_zDiff, vehicleid);
7604
					#endif
7605
					#if defined OnCheatDetected
7606
						ac_KickWithCode(playerid, "", 0, 31, 1);
7607
						if(ACInfo[playerid][acKicked] > 0) return 0;
7608
						ACInfo[playerid][acCheatCount][4] = 0;
7609
					#else
7610
						return ac_KickWithCode(playerid, "", 0, 31, 1);
7611
					#endif
7612
				}
7613
				#if defined OnCheatWarning
7614
					else OnCheatWarning(playerid, "", 0, 31, 1, ACInfo[playerid][acCheatCount][4]);
7615
				#endif
7616
			}
7617
			#else
7618
			if(ACInfo[playerid][acACAllow][31] &&
7619
			ac_zDiff >= -5.0 && (floatabs(new_x - ac_x) >= 12.0 || floatabs(new_y - ac_y) >= 12.0))
7620
			{
7621
				if(++ACInfo[playerid][acCheatCount][4] > AC_MAX_CARSHOT_WARNINGS)
7622
				{
7623
					#if defined DEBUG
7624
						printf("[Nex-AC debug] Pos diff x, y, z: %f, %f, %f, veh: %d",
7625
						new_x - ac_x, new_y - ac_y, ac_zDiff, vehicleid);
7626
					#endif
7627
					#if defined OnCheatDetected
7628
						ac_KickWithCode(playerid, "", 0, 31, 1);
7629
						if(ACInfo[playerid][acKicked] > 0) return 0;
7630
						ACInfo[playerid][acCheatCount][4] = 0;
7631
					#else
7632
						return ac_KickWithCode(playerid, "", 0, 31, 1);
7633
					#endif
7634
				}
7635
				#if defined OnCheatWarning
7636
					else OnCheatWarning(playerid, "", 0, 31, 1, ACInfo[playerid][acCheatCount][4]);
7637
				#endif
7638
			}
7639
			#endif
7640
			#if defined OnTrailerUpdate
7641
			else if(ACInfo[playerid][acACAllow][8] &&
7642
			vel_z >= 0.1 && vel_z > ACVehInfo[vehicleid][acVelZ] &&
7643
			floatabs(ac_x - new_x) < ac_zDiff / 2.0 && floatabs(ac_y - new_y) < ac_zDiff / 2.0)
7644
			{
7645
				if(++ACInfo[playerid][acCheatCount][3] > AC_MAX_FLYHACK_VEH_WARNINGS)
7646
				{
7647
					#if defined DEBUG
7648
						printf("[Nex-AC debug] Vel z: %f, old vel z: %f, pos diff x, y, z: %f, %f, %f, veh: %d",
7649
						vel_z, ACVehInfo[vehicleid][acVelZ], ac_x - new_x, ac_y - new_y, ac_zDiff, vehicleid);
7650
					#endif
7651
					#if defined OnCheatDetected
7652
						ac_KickWithCode(playerid, "", 0, 8, 2);
7653
						if(ACInfo[playerid][acKicked] > 0) return 0;
7654
						ACInfo[playerid][acCheatCount][3] = 0;
7655
					#else
7656
						return ac_KickWithCode(playerid, "", 0, 8, 2);
7657
					#endif
7658
				}
7659
				#if defined OnCheatWarning
7660
					else OnCheatWarning(playerid, "", 0, 8, 2, ACInfo[playerid][acCheatCount][3]);
7661
				#endif
7662
			}
7663
			#endif
7664
			else
7665
			{
7666
				if(ACInfo[playerid][acCheatCount][4] > 0) ACInfo[playerid][acCheatCount][4]--;
7667
				ACInfo[playerid][acCheatCount][3] = 0;
7668
			}
7669
		}
7670
		if(ACInfo[playerid][acACAllow][5] &&
7671
		(ac_dist >= 25.0 || ac_dist >= 15.0 && GetTickCount() > ACInfo[playerid][acGtc][18] + GetPlayerPing(playerid)) &&
7672
		ac_dist > ACVehInfo[vehicleid][acPosDiff] + ((ac_dist / 3.0) * 1.6) &&
7673
		(ac_z > -45.0 || VectorSize(new_x - ac_x, new_y - ac_y, 0.0) >= 180.0))
7674
		{
7675
			#if defined DEBUG
7676
				printf("[Nex-AC debug] Dist: %f, old pos diff: %f, old pos z: %f, veh: %d, playerid: %d",
7677
				ac_dist, ACVehInfo[vehicleid][acPosDiff], ac_z, vehicleid, playerid);
7678
			#endif
7679
			#if defined OnCheatDetected
7680
				ac_KickWithCode(playerid, "", 0, 5, 1);
7681
			#endif
7682
			GetVehicleZAngle(vehicleid, ACVehInfo[vehicleid][acZAngle]);
7683
			#if defined SetVehicleFakeZAngleForPlayer
7684
				SetVehicleFakeZAngleForPlayer(playerid, vehicleid, ACVehInfo[vehicleid][acZAngle]);
7685
			#else
7686
				SetVehicleZAngle(vehicleid, ACVehInfo[vehicleid][acZAngle]);
7687
			#endif
7688
			#if defined SetVehicleFakePosForPlayer
7689
				SetVehicleFakePosForPlayer(playerid, vehicleid, ac_x, ac_y, ac_z);
7690
			#else
7691
				SetVehiclePos(vehicleid, ac_x, ac_y, ac_z);
7692
			#endif
7693
			return 0;
7694
		}
7695
	#else
7696
		new Float:ac_x, Float:ac_y, Float:ac_z, Float:ac_dist = GetVehicleDistanceFromPoint(vehicleid, ACVehInfo[vehicleid][acPosX], ACVehInfo[vehicleid][acPosY], ACVehInfo[vehicleid][acPosZ]);
7697
		GetVehiclePos(vehicleid, ac_x, ac_y, ac_z);
7698
		if(passenger_seat > 0)
7699
		{
7700
			new Float:ac_zDiff = ac_z - ACVehInfo[vehicleid][acPosZ];
7701
			if(ACInfo[playerid][acACAllow][31] && ac_zDiff >= -5.0 &&
7702
			(floatabs(ac_x - ACVehInfo[vehicleid][acPosX]) >= 12.0 || floatabs(ac_y - ACVehInfo[vehicleid][acPosY]) >= 12.0))
7703
			{
7704
				if(++ACInfo[playerid][acCheatCount][4] > AC_MAX_CARSHOT_WARNINGS)
7705
				{
7706
					#if defined DEBUG
7707
						printf("[Nex-AC debug] Pos diff x, y, z: %f, %f, %f, veh: %d",
7708
						ac_x - ACVehInfo[vehicleid][acPosX], ac_y - ACVehInfo[vehicleid][acPosY], ac_zDiff, vehicleid);
7709
					#endif
7710
					#if defined OnCheatDetected
7711
						ac_KickWithCode(playerid, "", 0, 31, 1);
7712
						if(ACInfo[playerid][acKicked] > 0) return 0;
7713
						ACInfo[playerid][acCheatCount][4] = 0;
7714
					#else
7715
						return ac_KickWithCode(playerid, "", 0, 31, 1);
7716
					#endif
7717
				}
7718
				#if defined OnCheatWarning
7719
					else OnCheatWarning(playerid, "", 0, 31, 1, ACInfo[playerid][acCheatCount][4]);
7720
				#endif
7721
			}
7722
			else if(ACInfo[playerid][acCheatCount][4] > 0) ACInfo[playerid][acCheatCount][4]--;
7723
		}
7724
		#if defined VectorSize
7725
		if(ACInfo[playerid][acACAllow][5] &&
7726
		(ac_dist >= 25.0 || ac_dist >= 15.0 && GetTickCount() > ACInfo[playerid][acGtc][18] + GetPlayerPing(playerid)) &&
7727
		ac_dist > ACVehInfo[vehicleid][acPosDiff] + ((ac_dist / 3.0) * 1.6) &&
7728
		(ACVehInfo[vehicleid][acPosZ] > -45.0 || VectorSize(ac_x - ACVehInfo[vehicleid][acPosX], ac_y - ACVehInfo[vehicleid][acPosY], 0.0) >= 180.0))
7729
		#else
7730
		if(ACInfo[playerid][acACAllow][5] &&
7731
		(ac_dist >= 25.0 || ac_dist >= 15.0 && GetTickCount() > ACInfo[playerid][acGtc][18] + GetPlayerPing(playerid)) &&
7732
		ac_dist > ACVehInfo[vehicleid][acPosDiff] + ((ac_dist / 3.0) * 1.6) &&
7733
		(ACVehInfo[vehicleid][acPosZ] > -45.0 || floatsqroot(floatpower(ac_x - ACVehInfo[vehicleid][acPosX], 2.0) + floatpower(ac_y - ACVehInfo[vehicleid][acPosY], 2.0)) >= 180.0))
7734
		#endif
7735
		{
7736
			#if defined DEBUG
7737
				printf("[Nex-AC debug] Dist: %f, old pos diff: %f, old pos z: %f, veh: %d, playerid: %d",
7738
				ac_dist, ACVehInfo[vehicleid][acPosDiff], ACVehInfo[vehicleid][acPosZ], vehicleid, playerid);
7739
			#endif
7740
			#if defined OnCheatDetected
7741
				ac_KickWithCode(playerid, "", 0, 5, 1);
7742
			#endif
7743
			SetVehicleZAngle(vehicleid, ACVehInfo[vehicleid][acZAngle]);
7744
			SetVehiclePos(vehicleid, ACVehInfo[vehicleid][acPosX], ACVehInfo[vehicleid][acPosY], ACVehInfo[vehicleid][acPosZ]);
7745
			return 0;
7746
		}
7747
	#endif
7748
	#undef AC_MAX_FLYHACK_VEH_WARNINGS
7749
	#undef AC_MAX_CARSHOT_WARNINGS
7750
	new ac_a = 1;
7751
	#if defined ac_OnUnoccupiedVehicleUpdate
7752
		#if defined OnTrailerUpdate
7753
			ac_a = ac_OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat, new_x, new_y, new_z, vel_x, vel_y, vel_z);
7754
		#elseif defined GetServerTickRate
7755
			ac_a = ac_OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat, new_x, new_y, new_z);
7756
		#else
7757
			ac_a = ac_OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat);
7758
		#endif
7759
	#endif
7760
	#if defined OnTrailerUpdate
7761
		if(ac_a)
7762
		{
7763
			ACVehInfo[vehicleid][acSpeedDiff] = ac_GetSpeed(vel_x, vel_y, vel_z) - ac_GetSpeed(ACVehInfo[vehicleid][acVelX], ACVehInfo[vehicleid][acVelY], ACVehInfo[vehicleid][acVelZ]);
7764
			ACVehInfo[vehicleid][acPosDiff] = ac_dist;
7765
			ACVehInfo[vehicleid][acPosX] = new_x;
7766
			ACVehInfo[vehicleid][acPosY] = new_y;
7767
			ACVehInfo[vehicleid][acPosZ] = new_z;
7768
			ACVehInfo[vehicleid][acVelX] = vel_x;
7769
			ACVehInfo[vehicleid][acVelY] = vel_y;
7770
			ACVehInfo[vehicleid][acVelZ] = vel_z;
7771
		}
7772
	#elseif defined GetServerTickRate
7773
		if(ac_a)
7774
		{
7775
			ACVehInfo[vehicleid][acPosDiff] = ac_dist;
7776
			ACVehInfo[vehicleid][acPosX] = new_x;
7777
			ACVehInfo[vehicleid][acPosY] = new_y;
7778
			ACVehInfo[vehicleid][acPosZ] = new_z;
7779
		}
7780
	#else
7781
		GetVehicleZAngle(vehicleid, ACVehInfo[vehicleid][acZAngle]);
7782
		ACVehInfo[vehicleid][acPosDiff] = ac_dist;
7783
		ACVehInfo[vehicleid][acPosX] = ac_x;
7784
		ACVehInfo[vehicleid][acPosY] = ac_y;
7785
		ACVehInfo[vehicleid][acPosZ] = ac_z;
7786
	#endif
7787
	return ac_a;
7788
}
7789
7790
#if defined _ALS_OnUnoccupiedVehicleUpdate
7791
	#undef OnUnoccupiedVehicleUpdate
7792
#else
7793
	#define _ALS_OnUnoccupiedVehicleUpdate
7794
#endif
7795
#define OnUnoccupiedVehicleUpdate ac_OnUnoccupiedVehicleUpdate
7796
#if defined ac_OnUnoccupiedVehicleUpdate
7797
	#if defined OnTrailerUpdate
7798
		forward ac_OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat, Float:new_x, Float:new_y, Float:new_z, Float:vel_x, Float:vel_y, Float:vel_z);
7799
	#elseif defined GetServerTickRate
7800
		forward ac_OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat, Float:new_x, Float:new_y, Float:new_z);
7801
	#else
7802
		forward ac_OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat);
7803
	#endif
7804
#endif
7805
7806
#if defined OnTrailerUpdate
7807
	#if defined _inc_y_hooks || defined _INC_y_hooks
7808
		hook OnTrailerUpdate(playerid, vehicleid)
7809
	#else
7810
		public OnTrailerUpdate(playerid, vehicleid)
7811
	#endif
7812
	{
7813
		if(ACInfo[playerid][acKicked] > 0) return 0;
7814
		#if !defined _inc_y_hooks && !defined _INC_y_hooks\
7815
			&& defined ac_OnTrailerUpdate
7816
			return ac_OnTrailerUpdate(playerid, vehicleid);
7817
		#else
7818
			return 1;
7819
		#endif
7820
	}
7821
7822
	#if !defined _inc_y_hooks && !defined _INC_y_hooks
7823
		#if defined _ALS_OnTrailerUpdate
7824
			#undef OnTrailerUpdate
7825
		#else
7826
			#define _ALS_OnTrailerUpdate
7827
		#endif
7828
		#define OnTrailerUpdate ac_OnTrailerUpdate
7829
		#if defined ac_OnTrailerUpdate
7830
			forward ac_OnTrailerUpdate(playerid, vehicleid);
7831
		#endif
7832
	#endif
7833
#endif
7834
7835
#if defined _inc_y_hooks || defined _INC_y_hooks
7836
	hook OnPlayerEditAttachedObj(playerid, response, index, modelid, boneid, Float:fOffsetX, Float:fOffsetY, Float:fOffsetZ, Float:fRotX, Float:fRotY, Float:fRotZ, Float:fScaleX, Float:fScaleY, Float:fScaleZ)
7837
#else
7838
	public OnPlayerEditAttachedObject(playerid, response, index, modelid, boneid, Float:fOffsetX, Float:fOffsetY, Float:fOffsetZ, Float:fRotX, Float:fRotY, Float:fRotZ, Float:fScaleX, Float:fScaleY, Float:fScaleZ)
7839
#endif
7840-
		if(packetid == 209)
7840+
7841
	if(ACInfo[playerid][acKicked] > 0) return 1;
7842-
			new ac_uData[PR_UnoccupiedSync];
7842+
7843-
			BS_IgnoreBits(bs, 8);
7843+
7844-
			BS_ReadUnoccupiedSync(bs, ac_uData);
7844+
7845-
			if(ac_uData[PR_seatId] > 0 &&
7845+
7846-
			(ac_uData[PR_seatId] != GetPlayerVehicleSeat(playerid) || !IsPlayerInVehicle(playerid, ac_uData[PR_vehicleId])) ||
7846+
7847-
			ac_uData[PR_roll][0] != ac_uData[PR_roll][0] ||
7847+
7848-
			ac_uData[PR_roll][1] != ac_uData[PR_roll][1] ||
7848+
7849-
			ac_uData[PR_roll][2] != ac_uData[PR_roll][2] ||
7849+
7850-
			ac_uData[PR_direction][0] != ac_uData[PR_direction][0] ||
7850+
7851-
			ac_uData[PR_direction][1] != ac_uData[PR_direction][1] ||
7851+
7852-
			ac_uData[PR_direction][2] != ac_uData[PR_direction][2] ||
7852+
7853-
			ac_uData[PR_angularVelocity][0] != ac_uData[PR_angularVelocity][0] ||
7853+
7854-
			ac_uData[PR_angularVelocity][1] != ac_uData[PR_angularVelocity][1] ||
7854+
7855-
			ac_uData[PR_angularVelocity][2] != ac_uData[PR_angularVelocity][2] ||
7855+
7856-
			floatabs(ac_uData[PR_roll][0]) >= 1.0 ||
7856+
7857-
			floatabs(ac_uData[PR_roll][1]) >= 1.0 ||
7857+
7858-
			floatabs(ac_uData[PR_roll][2]) >= 1.0 ||
7858+
7859-
			floatabs(ac_uData[PR_direction][0]) >= 1.0 ||
7859+
7860-
			floatabs(ac_uData[PR_direction][1]) >= 1.0 ||
7860+
7861-
			floatabs(ac_uData[PR_direction][2]) >= 1.0 ||
7861+
7862-
			floatabs(ac_uData[PR_angularVelocity][0]) >= 1.0 ||
7862+
7863-
			floatabs(ac_uData[PR_angularVelocity][1]) >= 1.0 ||
7863+
7864-
			floatabs(ac_uData[PR_angularVelocity][2]) >= 1.0) return 0;
7864+
7865
	#if defined ac_OnPlayerEditAttachedObject
7866-
		else if(packetid == 210)
7866+
7867
	#endif
7868-
			new ac_tData[PR_TrailerSync];
7868+
7869-
			BS_IgnoreBits(bs, 8);
7869+
7870-
			BS_ReadTrailerSync(bs, ac_tData);
7870+
7871-
			if(!(1 <= ac_tData[PR_trailerId] < MAX_VEHICLES) ||
7871+
7872-
			ACVehInfo[ac_tData[PR_trailerId]][acDriver] != INVALID_PLAYER_ID) return 0;
7872+
7873-
			else if(ACInfo[playerid][acACAllow][5])
7873+
7874
		switch(packetid)
7875-
				new Float:ac_dist = GetVehicleDistanceFromPoint(ac_tData[PR_trailerId], ac_tData[PR_position][0], ac_tData[PR_position][1], ac_tData[PR_position][2]);
7875+
7876-
				if(ac_dist >= 80.0)
7876+
			case 203:
7877
			{
7878-
					new Float:ac_x, Float:ac_y, Float:ac_z;
7878+
				new ac_aData[PR_AimSync];
7879-
					GetVehiclePos(ac_tData[PR_trailerId], ac_x, ac_y, ac_z);
7879+
				BS_IgnoreBits(bs, 8);
7880
				BS_ReadAimSync(bs, ac_aData);
7881-
						printf("[Nex-AC debug] Dist: %f, old pos z: %f, veh: %d, playerid: %d",
7881+
				if(ac_aData[PR_aimZ] != ac_aData[PR_aimZ])
7882-
						ac_dist, ac_z, ac_tData[PR_trailerId], playerid);
7882+
7883
					ac_aData[PR_aimZ] = 0.0;
7884
					BS_SetWriteOffset(bs, 8);
7885-
						ac_KickWithCode(playerid, "", 0, 5, 2);
7885+
					BS_WriteAimSync(bs, ac_aData);
7886
				}
7887-
					GetVehicleZAngle(ac_tData[PR_trailerId], ACVehInfo[ac_tData[PR_trailerId]][acZAngle]);
7887+
7888-
					#if defined SetVehicleFakeZAngleForPlayer
7888+
			case 207:
7889-
						SetVehicleFakeZAngleForPlayer(playerid, ac_tData[PR_trailerId], ACVehInfo[ac_tData[PR_trailerId]][acZAngle]);
7889+
7890
				new ac_fData[PR_OnFootSync];
7891-
						SetVehicleZAngle(ac_tData[PR_trailerId], ACVehInfo[ac_tData[PR_trailerId]][acZAngle]);
7891+
				BS_IgnoreBits(bs, 8);
7892
				BS_ReadOnFootSync(bs, ac_fData);
7893-
					#if defined SetVehicleFakePosForPlayer
7893+
				if(ac_fData[PR_surfingOffsets][0] != ac_fData[PR_surfingOffsets][0] ||
7894-
						SetVehicleFakePosForPlayer(playerid, ac_tData[PR_trailerId], ac_x, ac_y, ac_z);
7894+
				ac_fData[PR_surfingOffsets][1] != ac_fData[PR_surfingOffsets][1] ||
7895
				ac_fData[PR_surfingOffsets][2] != ac_fData[PR_surfingOffsets][2])
7896-
						SetVehiclePos(ac_tData[PR_trailerId], ac_x, ac_y, ac_z);
7896+
7897
					ac_fData[PR_surfingOffsets][0] =
7898
					ac_fData[PR_surfingOffsets][1] =
7899
					ac_fData[PR_surfingOffsets][2] = 0.0;
7900
					BS_SetWriteOffset(bs, 8);
7901
					BS_WriteOnFootSync(bs, ac_fData);
7902-
		else if(packetid == 211)
7902+
7903
			}
7904-
			new ac_pData[PR_PassengerSync];
7904+
			case 209:
7905-
			BS_IgnoreBits(bs, 8);
7905+
7906-
			BS_ReadPassengerSync(bs, ac_pData);
7906+
				new ac_uData[PR_UnoccupiedSync];
7907-
			if(ACInfo[playerid][acACAllow][44] && ac_pData[PR_seatId] < 1)
7907+
				BS_IgnoreBits(bs, 8);
7908
				BS_ReadUnoccupiedSync(bs, ac_uData);
7909
				if(ac_uData[PR_seatId] > 0 &&
7910-
					printf("[Nex-AC debug] AC seat: %d, seat: %d, veh: %d",
7910+
				(ac_uData[PR_seatId] != GetPlayerVehicleSeat(playerid) || !IsPlayerInVehicle(playerid, ac_uData[PR_vehicleId])) ||
7911-
					ACInfo[playerid][acSeat], ac_pData[PR_seatId], ac_pData[PR_vehicleId]);
7911+
				ac_uData[PR_roll][0] != ac_uData[PR_roll][0] ||
7912
				ac_uData[PR_roll][1] != ac_uData[PR_roll][1] ||
7913
				ac_uData[PR_roll][2] != ac_uData[PR_roll][2] ||
7914-
					ac_KickWithCode(playerid, "", 0, 44, 6);
7914+
				ac_uData[PR_direction][0] != ac_uData[PR_direction][0] ||
7915
				ac_uData[PR_direction][1] != ac_uData[PR_direction][1] ||
7916
				ac_uData[PR_direction][2] != ac_uData[PR_direction][2] ||
7917-
					return ac_KickWithCode(playerid, "", 0, 44, 6);
7917+
				ac_uData[PR_angularVelocity][0] != ac_uData[PR_angularVelocity][0] ||
7918
				ac_uData[PR_angularVelocity][1] != ac_uData[PR_angularVelocity][1] ||
7919
				ac_uData[PR_angularVelocity][2] != ac_uData[PR_angularVelocity][2] ||
7920
				floatabs(ac_uData[PR_roll][0]) >= 1.0 ||
7921
				floatabs(ac_uData[PR_roll][1]) >= 1.0 ||
7922
				floatabs(ac_uData[PR_roll][2]) >= 1.0 ||
7923
				floatabs(ac_uData[PR_direction][0]) >= 1.0 ||
7924
				floatabs(ac_uData[PR_direction][1]) >= 1.0 ||
7925
				floatabs(ac_uData[PR_direction][2]) >= 1.0 ||
7926
				floatabs(ac_uData[PR_angularVelocity][0]) >= 1.0 ||
7927
				floatabs(ac_uData[PR_angularVelocity][1]) >= 1.0 ||
7928
				floatabs(ac_uData[PR_angularVelocity][2]) >= 1.0) return 0;
7929
			}
7930
			case 210:
7931
			{
7932
				new ac_tData[PR_TrailerSync];
7933
				BS_IgnoreBits(bs, 8);
7934
				BS_ReadTrailerSync(bs, ac_tData);
7935
				if(!(1 <= ac_tData[PR_trailerId] < MAX_VEHICLES) ||
7936
				ACVehInfo[ac_tData[PR_trailerId]][acDriver] != INVALID_PLAYER_ID) return 0;
7937
				else if(ACInfo[playerid][acACAllow][5])
7938
				{
7939
					new Float:ac_dist = GetVehicleDistanceFromPoint(ac_tData[PR_trailerId], ac_tData[PR_position][0], ac_tData[PR_position][1], ac_tData[PR_position][2]);
7940
					if(ac_dist >= 80.0)
7941
					{
7942
						new Float:ac_x, Float:ac_y, Float:ac_z;
7943
						GetVehiclePos(ac_tData[PR_trailerId], ac_x, ac_y, ac_z);
7944
						#if defined DEBUG
7945
							printf("[Nex-AC debug] Dist: %f, old pos z: %f, veh: %d, playerid: %d",
7946
							ac_dist, ac_z, ac_tData[PR_trailerId], playerid);
7947
						#endif
7948
						#if defined OnCheatDetected
7949
							ac_KickWithCode(playerid, "", 0, 5, 2);
7950
						#endif
7951
						GetVehicleZAngle(ac_tData[PR_trailerId], ACVehInfo[ac_tData[PR_trailerId]][acZAngle]);
7952
						#if defined SetVehicleFakeZAngleForPlayer
7953
							SetVehicleFakeZAngleForPlayer(playerid, ac_tData[PR_trailerId], ACVehInfo[ac_tData[PR_trailerId]][acZAngle]);
7954
						#else
7955
							SetVehicleZAngle(ac_tData[PR_trailerId], ACVehInfo[ac_tData[PR_trailerId]][acZAngle]);
7956
						#endif
7957
						#if defined SetVehicleFakePosForPlayer
7958
							SetVehicleFakePosForPlayer(playerid, ac_tData[PR_trailerId], ac_x, ac_y, ac_z);
7959
						#else
7960
							SetVehiclePos(ac_tData[PR_trailerId], ac_x, ac_y, ac_z);
7961
						#endif
7962
						return 0;
7963-
		BS_RPC(bs, playerid, 159);
7963+
7964
				}
7965
			}
7966
			case 211:
7967
			{
7968
				new ac_pData[PR_PassengerSync];
7969
				BS_IgnoreBits(bs, 8);
7970
				BS_ReadPassengerSync(bs, ac_pData);
7971
				if(ACInfo[playerid][acACAllow][44] &&
7972
				(ac_pData[PR_seatId] < 1 || !(1 <= ac_pData[PR_vehicleId] < MAX_VEHICLES)))
7973-
		BS_RPC(bs, playerid, 160);
7973+
7974
					#if defined DEBUG
7975
						printf("[Nex-AC debug] AC seat: %d, seat: %d, veh: %d",
7976
						ACInfo[playerid][acSeat], ac_pData[PR_seatId], ac_pData[PR_vehicleId]);
7977
					#endif
7978
					#if defined OnCheatDetected
7979
						ac_KickWithCode(playerid, "", 0, 44, 6);
7980
						if(ACInfo[playerid][acKicked] > 0) return 0;
7981
					#else
7982
						return ac_KickWithCode(playerid, "", 0, 44, 6);
7983
					#endif
7984
				}
7985
			}
7986
		}
7987
		#if defined ac_OnIncomingPacket
7988
			return ac_OnIncomingPacket(playerid, packetid, bs);
7989
		#else
7990
			return 1;
7991
		#endif
7992
	}
7993
7994
	#if defined _ALS_OnIncomingPacket
7995
		#undef OnIncomingPacket
7996
	#else
7997
		#define _ALS_OnIncomingPacket
7998
	#endif
7999
	#define OnIncomingPacket ac_OnIncomingPacket
8000
	#if defined ac_OnIncomingPacket
8001
		forward ac_OnIncomingPacket(playerid, packetid, BitStream:bs);
8002
	#endif
8003
8004
	public OnIncomingRPC(playerid, rpcid, BitStream:bs)
8005
	{
8006
		if(ACInfo[playerid][acKicked] > 0 && ACInfo[playerid][acOnline]) return 0;
8007
		#if defined ac_OnIncomingRPC
8008
			return ac_OnIncomingRPC(playerid, rpcid, bs);
8009
		#else
8010
			return 1;
8011
		#endif
8012
	}
8013
8014
	#if defined _ALS_OnIncomingRPC
8015
		#undef OnIncomingRPC
8016
	#else
8017
		#define _ALS_OnIncomingRPC
8018
	#endif
8019
	#define OnIncomingRPC ac_OnIncomingRPC
8020
	#if defined ac_OnIncomingRPC
8021
		forward ac_OnIncomingRPC(playerid, rpcid, BitStream:bs);
8022
	#endif
8023
8024
	static SetVehicleFakePosForPlayer(playerid, vehicleid, Float:x, Float:y, Float:z)
8025
	{
8026
		if(!IsPlayerConnected(playerid) || GetVehicleModel(vehicleid) <= 0) return 0;
8027
		new BitStream:bs = BS_New();
8028
		BS_WriteValue(bs, PR_UINT16, vehicleid, PR_FLOAT, x, PR_FLOAT, y, PR_FLOAT, z);
8029
		#if defined BS_SendRPC
8030
			BS_SendRPC(bs, playerid, 159);
8031
		#else
8032
			BS_RPC(bs, playerid, 159);
8033
		#endif
8034
		BS_Delete(bs);
8035
		return 1;
8036
	}
8037
8038
	static SetVehicleFakeZAngleForPlayer(playerid, vehicleid, Float:z_angle)
8039
	{
8040
		if(!IsPlayerConnected(playerid) || GetVehicleModel(vehicleid) <= 0) return 0;
8041
		new BitStream:bs = BS_New();
8042
		BS_WriteValue(bs, PR_UINT16, vehicleid, PR_FLOAT, z_angle);
8043
		#if defined BS_SendRPC
8044
			BS_SendRPC(bs, playerid, 160);
8045
		#else
8046
			BS_RPC(bs, playerid, 160);
8047
		#endif
8048
		BS_Delete(bs);
8049
		return 1;
8050
	}
8051
#endif
8052
8053
ac_fpublic ac_Timer(playerid)
8054
{
8055
	if(!IsPlayerConnected(playerid) || ACInfo[playerid][acKicked] > 0) return 0;
8056
	new ac_gpp;
8057
	#if defined NetStats_MessagesRecvPerSecond
8058
		if(ACInfo[playerid][acACAllow][51] && (ac_gpp = NetStats_MessagesRecvPerSecond(playerid)) > AC_MAX_MSGS_REC_DIFF)
8059
		{
8060
			#if defined DEBUG
8061
				printf("[Nex-AC debug] Max msgs per sec: %d, msgs per sec: %d", AC_MAX_MSGS_REC_DIFF, ac_gpp);
8062
			#endif
8063
			ac_KickWithCode(playerid, "", 0, 51);
8064
		}
8065
	#endif
8066
	#undef AC_MAX_MSGS_REC_DIFF
8067
	ac_gpp = GetPlayerPing(playerid);
8068
	if(ACInfo[playerid][acACAllow][38])
8069
	{
8070
		if(ac_gpp > AC_MAX_PING && ac_gpp != 65535)
8071
		{
8072
			if(++ACInfo[playerid][acCheatCount][0] > AC_MAX_PING_WARNINGS)
8073
			{
8074
				#if defined DEBUG
8075
					printf("[Nex-AC debug] Max ping: %d, ping: %d", AC_MAX_PING, ac_gpp);
8076
				#endif
8077
				#undef AC_MAX_PING
8078
				#undef AC_MAX_PING_WARNINGS
8079
				ac_KickWithCode(playerid, "", 0, 38);
8080
				#if defined OnCheatDetected
8081
					ACInfo[playerid][acCheatCount][0] = 0;
8082
				#endif
8083
			}
8084
			#if defined OnCheatWarning
8085
				else OnCheatWarning(playerid, "", 0, 38, 0, ACInfo[playerid][acCheatCount][0]);
8086
			#endif
8087
		}
8088
		else ACInfo[playerid][acCheatCount][0] = 0;
8089
	}
8090
	new ac_gtc = GetTickCount();
8091
	if(ac_gtc < ACInfo[playerid][acUpdateTick] + 1500)
8092
	{
8093
		new ac_t, ac_s;
8094
		#if AC_USE_AMMUNATIONS || AC_USE_CASINOS
8095
			new ac_int = GetPlayerInterior(playerid);
8096
		#endif
8097
		#if AC_USE_PICKUP_WEAPONS\
8098
			&& defined Streamer_GetDistanceToItem\
8099
			&& defined Streamer_GetIntData
8100
			new Float:ac_pick_dist;
8101
			if(ACInfo[playerid][acLastPickup] > MAX_PICKUPS)
8102
			{
8103
				new Float:ac_x, Float:ac_y, Float:ac_z;
8104
				GetPlayerPos(playerid, ac_x, ac_y, ac_z);
8105
				Streamer_GetDistanceToItem(ac_x, ac_y, ac_z, STREAMER_TYPE_PICKUP, ACInfo[playerid][acLastPickup] - MAX_PICKUPS, ac_pick_dist);
8106
				ac_t = Streamer_GetIntData(STREAMER_TYPE_PICKUP, ACInfo[playerid][acLastPickup] - MAX_PICKUPS, E_STREAMER_EXTRA_ID) - 100;
8107
			}
8108
		#endif
8109
		if(!ACInfo[playerid][acDead] && (ac_s = GetPlayerWeapon(playerid)) != -1 && ac_gtc > ACInfo[playerid][acGtc][7] + ac_gpp)
8110
		{
8111
			#if AC_USE_AMMUNATIONS
8112
				new ac_m;
8113
			#endif
8114
			ac_s = ac_wSlot[ac_s];
8115
			for(new ac_i, ac_w, ac_a, bool:ac_cw; ac_i <= 12; ++ac_i)
8116
			{
8117
				GetPlayerWeaponData(playerid, ac_i, ac_w, ac_a);
8118
				if(ac_w == 39) ac_cw = true;
8119
				if(ac_s != ac_i)
8120
				{
8121
					if(ACInfo[playerid][acSetWeapon][ac_i] != -1)
8122
					{
8123
						if(ACInfo[playerid][acSetWeapon][ac_i] == ac_w)
8124
						{
8125
							if(ACInfo[playerid][acSet][3] == ac_w) ACInfo[playerid][acSet][3] = -1;
8126
							ACInfo[playerid][acSetWeapon][ac_i] = -1;
8127
							ACInfo[playerid][acWeapon][ac_i] = ac_w;
8128
						}
8129
						else if(ac_gtc > ACInfo[playerid][acGtcSetWeapon][ac_i] + ac_gpp)
8130
						{
8131
							#if defined _inc_fixes
8132
							if(ACInfo[playerid][acACAllow][52] && ACInfo[playerid][acNOPAllow][0] &&
8133
							ACInfo[playerid][acGiveAmmo][ac_i] != 0)
8134
							#else
8135
							if(ACInfo[playerid][acACAllow][52] && ACInfo[playerid][acNOPAllow][0])
8136
							#endif
8137
							{
8138
								if(++ACInfo[playerid][acNOPCount][0] > AC_MAX_NOP_TIMER_WARNINGS)
8139
								{
8140
									#if defined DEBUG
8141
										printf(DEBUG_CODE_5, playerid, "GivePlayerWeapon");
8142
										printf("[Nex-AC debug] AC weapon: %d, weaponid: %d", ACInfo[playerid][acSetWeapon][ac_i], ac_w);
8143
									#endif
8144
									ac_KickWithCode(playerid, "", 0, 52, 13);
8145
									#if defined OnCheatDetected
8146
										ACInfo[playerid][acSetWeapon][ac_i] = -1;
8147
									#endif
8148
								}
8149
								#if defined OnNOPWarning
8150
									else OnNOPWarning(playerid, 13, ACInfo[playerid][acNOPCount][0]);
8151
								#endif
8152
							}
8153
							else if(++ACInfo[playerid][acNOPCount][0] > AC_MAX_NOP_TIMER_WARNINGS) ACInfo[playerid][acSetWeapon][ac_i] = -1;
8154
						}
8155
					}
8156
					else
8157
					{
8158
						if(ACInfo[playerid][acWeapon][ac_i] != ac_w)
8159
						{
8160
							#if AC_USE_PICKUP_WEAPONS
8161
								#if defined Streamer_GetDistanceToItem\
8162
									&& defined Streamer_GetIntData
8163
								if(0 <= ACInfo[playerid][acLastPickup] < MAX_PICKUPS &&
8164
								ACPickInfo[ACInfo[playerid][acLastPickup]][acWeapon] == ac_w &&
8165
								ac_a <= (3 <= ac_i <= 5 ? ACInfo[playerid][acAmmo][ac_i] + ac_pAmmo[ac_w] : ac_pAmmo[ac_w]) &&
8166
								IsPlayerInRangeOfPoint(playerid, 15.0, ACPickInfo[ACInfo[playerid][acLastPickup]][acPosX],
8167
								ACPickInfo[ACInfo[playerid][acLastPickup]][acPosY], ACPickInfo[ACInfo[playerid][acLastPickup]][acPosZ]) ||
8168
								ACInfo[playerid][acLastPickup] > MAX_PICKUPS && ac_t == ac_w &&
8169
								ac_a <= (3 <= ac_i <= 5 ? ACInfo[playerid][acAmmo][ac_i] + ac_pAmmo[ac_w] : ac_pAmmo[ac_w]) && ac_pick_dist <= 15.0)
8170
								#else
8171
								if(0 <= ACInfo[playerid][acLastPickup] < MAX_PICKUPS &&
8172
								ACPickInfo[ACInfo[playerid][acLastPickup]][acWeapon] == ac_w &&
8173
								ac_a <= (3 <= ac_i <= 5 ? ACInfo[playerid][acAmmo][ac_i] + ac_pAmmo[ac_w] : ac_pAmmo[ac_w]) &&
8174
								IsPlayerInRangeOfPoint(playerid, 15.0, ACPickInfo[ACInfo[playerid][acLastPickup]][acPosX],
8175
								ACPickInfo[ACInfo[playerid][acLastPickup]][acPosY], ACPickInfo[ACInfo[playerid][acLastPickup]][acPosZ]))
8176
								#endif
8177
								{
8178
									ACInfo[playerid][acWeapon][ac_i] = ac_w;
8179
									ACInfo[playerid][acAmmo][ac_i] = ac_a;
8180
								}
8181
								else
8182
								{
8183
							#endif
8184
								if(ac_w == 0 || ac_w == 40 && ac_cw ||
8185
								ac_w == 46 && ACInfo[playerid][acVeh] > 0 && ACInfo[playerid][acParachute] > 0)
8186
								{
8187
									ACInfo[playerid][acWeapon][ac_i] = ac_w;
8188
									ACInfo[playerid][acAmmo][ac_i] = ac_a;
8189
									ACInfo[playerid][acParachute] = 0;
8190
								}
8191
								else if(ACInfo[playerid][acACAllow][15] && !(16 <= ac_w <= 43 && ac_a == 0))
8192
								{
8193
									#if defined DEBUG
8194
										printf("[Nex-AC debug] AC weaponid: %d, AC ammo: %d, weaponid: %d, ammo: %d",
8195
										ACInfo[playerid][acWeapon][ac_i], ACInfo[playerid][acAmmo][ac_i], ac_w, ac_a);
8196
									#endif
8197
									ac_KickWithCode(playerid, "", 0, 15, 2);
8198
									#if defined OnCheatDetected
8199
										if(ACInfo[playerid][acKicked] < 1)
8200
										{
8201
											ACInfo[playerid][acWeapon][ac_i] = ac_w;
8202
											ACInfo[playerid][acAmmo][ac_i] = ac_a;
8203
										}
8204
									#endif
8205
								}
8206
							#if AC_USE_PICKUP_WEAPONS
8207
								}
8208
							#endif
8209
							#undef AC_USE_PICKUP_WEAPONS
8210
						}
8211
						if(ACInfo[playerid][acGiveAmmo][ac_i] != -65535)
8212
						{
8213
							if(ACInfo[playerid][acGiveAmmo][ac_i] == ac_a ||
8214
							ACInfo[playerid][acGiveAmmo][ac_i] > ac_a && !(ac_a < 0 <= ACInfo[playerid][acGiveAmmo][ac_i]) &&
8215
							ac_gtc > ACInfo[playerid][acGtcGiveAmmo][ac_i] + ac_gpp)
8216
							{
8217
								ACInfo[playerid][acGiveAmmo][ac_i] = -65535;
8218
								ACInfo[playerid][acAmmo][ac_i] = ac_a;
8219
							}
8220
							else if(ac_gtc > ACInfo[playerid][acGtcGiveAmmo][ac_i] + ac_gpp)
8221
							{
8222
								if(ACInfo[playerid][acACAllow][52] && ACInfo[playerid][acNOPAllow][1])
8223
								{
8224
									if(++ACInfo[playerid][acNOPCount][1] > AC_MAX_NOP_TIMER_WARNINGS)
8225
									{
8226
										#if defined DEBUG
8227
											printf(DEBUG_CODE_5, playerid, "SetPlayerAmmo");
8228
											printf("[Nex-AC debug] AC ammo: %d, ammo: %d, weaponid: %d",
8229
											ACInfo[playerid][acGiveAmmo][ac_i], ac_a, ac_w);
8230
										#endif
8231
										ac_KickWithCode(playerid, "", 0, 52, 14);
8232
										#if defined OnCheatDetected
8233
											ACInfo[playerid][acGiveAmmo][ac_i] = -65535;
8234
										#endif
8235
									}
8236
									#if defined OnNOPWarning
8237
										else OnNOPWarning(playerid, 14, ACInfo[playerid][acNOPCount][1]);
8238
									#endif
8239
								}
8240
								else if(++ACInfo[playerid][acNOPCount][1] > AC_MAX_NOP_TIMER_WARNINGS) ACInfo[playerid][acGiveAmmo][ac_i] = -65535;
8241
							}
8242
						}
8243
						else if(16 <= ac_w <= 43)
8244
						{
8245
							if(ac_a == 0) ACInfo[playerid][acAmmo][ac_i] = 0;
8246
							else if(ACInfo[playerid][acACAllow][16] && ac_w != 40 &&
8247
							(ac_a > ACInfo[playerid][acAmmo][ac_i] || ac_a < 0 <= ACInfo[playerid][acAmmo][ac_i]) &&
8248
							(!ac_LagCompMode || ac_w != 38 && !(22 <= ac_w <= 34) || ac_gtc > ACInfo[playerid][acShotTick] + 3650))
8249
							{
8250
								#if defined DEBUG
8251
									printf("[Nex-AC debug] AC ammo: %d, ammo: %d, weaponid: %d",
8252
									ACInfo[playerid][acAmmo][ac_i], ac_a, ac_w);
8253
								#endif
8254
								ac_KickWithCode(playerid, "", 0, 16, 2);
8255
								#if defined OnCheatDetected
8256
									if(ACInfo[playerid][acKicked] < 1) ACInfo[playerid][acAmmo][ac_i] = ac_a;
8257
								#endif
8258
							}
8259
						}
8260
					}
8261
				}
8262
				else if(ac_w == 38 || 22 <= ac_w <= 34)
8263
				{
8264
					if(ac_a > ACInfo[playerid][acAmmo][ac_i] || ac_a < 0 <= ACInfo[playerid][acAmmo][ac_i])
8265
					{
8266
						if(ACInfo[playerid][acGiveAmmo][ac_i] == -65535)
8267
						{
8268
							#if AC_USE_AMMUNATIONS
8269
								if(22 <= ac_w <= 32 && ac_InAmmuNation(playerid, ac_int) &&
8270
								(ac_m = ac_a - ACInfo[playerid][acAmmo][ac_i]) % ac_AmmuNationInfo[ac_w - 22][1] == 0)
8271
								{
8272
									if(ACInfo[playerid][acSet][10] != -1) ACInfo[playerid][acSet][10] += ac_AmmuNationInfo[ac_w - 22][0] * (ac_m / ac_AmmuNationInfo[ac_w - 22][1]);
8273
									else ACInfo[playerid][acSet][10] = ac_AmmuNationInfo[ac_w - 22][0] * (ac_m / ac_AmmuNationInfo[ac_w - 22][1]);
8274
									ACInfo[playerid][acAmmo][ac_i] += ac_m;
8275
									ACInfo[playerid][acGtc][15] = ac_gtc + 2650;
8276
									ACInfo[playerid][acCheatCount][10] = 0;
8277
								}
8278
								else
8279
								{
8280
							#endif
8281
								if(ACInfo[playerid][acACAllow][16] && (!ac_LagCompMode || ac_gtc > ACInfo[playerid][acShotTick] + 3650))
8282
								{
8283
									#if defined DEBUG
8284
										printf("[Nex-AC debug] AC ammo: %d, ammo: %d, weaponid: %d",
8285
										ACInfo[playerid][acAmmo][ac_i], ac_a, ac_w);
8286
									#endif
8287
									ac_KickWithCode(playerid, "", 0, 16, 3);
8288
									#if defined OnCheatDetected
8289
										if(ACInfo[playerid][acKicked] < 1) ACInfo[playerid][acAmmo][ac_i] = ac_a;
8290
									#endif
8291
								}
8292
							#if AC_USE_AMMUNATIONS
8293
								}
8294
							#endif
8295
						}
8296
					}
8297
					else if(ACInfo[playerid][acAmmo][ac_i] != 0) ACInfo[playerid][acAmmo][ac_i] = ac_a;
8298
				}
8299
			}
8300
		}
8301
		if((ac_s = GetPlayerState(playerid)) == PLAYER_STATE_DRIVER)
8302
		{
8303
			ac_t = GetPlayerVehicleID(playerid);
8304
			new Float:ac_pX, Float:ac_pY, Float:ac_pZ, Float:ac_vX, Float:ac_vY, Float:ac_vZ;
8305
			GetPlayerPos(playerid, ac_pX, ac_pY, ac_pZ);
8306
			GetVehicleVelocity(ac_t, ac_vX, ac_vY, ac_vZ);
8307
			if(ACInfo[playerid][acACAllow][35] && GetPlayerCameraMode(playerid) == 55) ac_KickWithCode(playerid, "", 0, 35);
8308
			if(ACInfo[playerid][acACAllow][3] && ACInfo[playerid][acSet][9] == -1)
8309
			{
8310
				new Float:ac_time, Float:ac_maxdist = 140.0,
8311
				Float:ac_dist = GetPlayerDistanceFromPoint(playerid, ACInfo[playerid][acLastPosX], ACInfo[playerid][acLastPosY], ac_pZ),
8312
				Float:ac_dist_set = GetPlayerDistanceFromPoint(playerid, ACInfo[playerid][acSetPosX], ACInfo[playerid][acSetPosY], ac_pZ);
8313
				if((ac_time = (ac_gtc - ACInfo[playerid][acTimerTick]) / 1000.0) > 1.0) ac_maxdist *= ac_time;
8314
				if(ac_dist >= ac_maxdist && (ACInfo[playerid][acSet][8] == -1 || ac_dist_set >= ac_maxdist))
8315
				{
8316
					#if defined DEBUG
8317
						printf("[Nex-AC debug] Dist: %f, dist set: %f, acSet[8]: %d, speed: %d, veh: %d",
8318
						ac_dist, ac_dist_set, ACInfo[playerid][acSet][8], ac_GetSpeed(ac_vX, ac_vY, ac_vZ), ac_t);
8319
					#endif
8320
					ac_KickWithCode(playerid, "", 0, 3, 3);
8321
				}
8322
			}
8323
			ACInfo[playerid][acLastPosX] = ac_pX;
8324
			ACInfo[playerid][acLastPosY] = ac_pY;
8325
			ac_s = ac_GetSpeed(ac_vX, ac_vY);
8326
			if(ACInfo[playerid][acACAllow][10] && ac_gtc > ACInfo[playerid][acGtc][9] + ac_gpp)
8327
			{
8328
				new ac_model = GetVehicleModel(ac_t), Float:ac_time, ac_maxdiff = 80;
8329
				if((ac_time = (ac_gtc - ACInfo[playerid][acTimerTick]) / 1100.0) > 1.0) ac_maxdiff = floatround(ac_maxdiff * ac_time);
8330
				if(ac_s >= ACVehInfo[ac_t][acLastSpeed] + ac_maxdiff && !(ac_model == 449 || 537 <= ac_model <= 538))
8331
				{
8332
					ACInfo[playerid][acCheatCount][20] += (1 * AC_SPEEDHACK_VEH_RESET_DELAY);
8333
					if(ACInfo[playerid][acCheatCount][20] > AC_MAX_SPEEDHACK_VEH_WARNINGS)
8334
					{
8335
						#undef AC_MAX_SPEEDHACK_VEH_WARNINGS
8336
						#if defined DEBUG
8337
							printf("[Nex-AC debug] Speed: %d, last speed: %d, veh model: %d",
8338
							ac_s, ACVehInfo[ac_t][acLastSpeed], ac_model);
8339
						#endif
8340
						ac_KickWithCode(playerid, "", 0, 10, 4);
8341
						#if defined OnCheatDetected
8342
							ACInfo[playerid][acCheatCount][20] = 0;
8343
						#endif
8344
					}
8345
					#if defined OnCheatWarning
8346
						else OnCheatWarning(playerid, "", 0, 10, 4, floatround(ACInfo[playerid][acCheatCount][20] / AC_SPEEDHACK_VEH_RESET_DELAY));
8347
					#endif
8348
					#undef AC_SPEEDHACK_VEH_RESET_DELAY
8349
				}
8350
			}
8351
			ACVehInfo[ac_t][acLastSpeed] = ac_s;
8352
		}
8353
		else if(ac_s == PLAYER_STATE_ONFOOT)
8354
		{
8355
			new Float:ac_pX, Float:ac_pY, Float:ac_pZ;
8356
			GetPlayerPos(playerid, ac_pX, ac_pY, ac_pZ);
8357
			if(ACInfo[playerid][acACAllow][2] && ACInfo[playerid][acSet][9] == -1 &&
8358
			!IsVehicleStreamedIn(GetPlayerSurfingVehicleID(playerid), playerid) &&
8359
			GetPlayerSurfingObjectID(playerid) == INVALID_OBJECT_ID)
8360
			{
8361
				new Float:ac_time, Float:ac_maxdist = 80.0,
8362
				Float:ac_dist = GetPlayerDistanceFromPoint(playerid, ACInfo[playerid][acLastPosX], ACInfo[playerid][acLastPosY], ac_pZ),
8363
				Float:ac_dist_set = GetPlayerDistanceFromPoint(playerid, ACInfo[playerid][acSetPosX], ACInfo[playerid][acSetPosY], ac_pZ);
8364
				if((ac_time = (ac_gtc - ACInfo[playerid][acTimerTick]) / 1000.0) > 1.0) ac_maxdist *= ac_time;
8365
				if(ac_dist >= ac_maxdist && (ACInfo[playerid][acSet][8] == -1 || ac_dist_set >= ac_maxdist))
8366
				{
8367
					#if defined DEBUG
8368
						new Float:ac_vX, Float:ac_vY, Float:ac_vZ;
8369
						GetPlayerVelocity(playerid, ac_vX, ac_vY, ac_vZ);
8370
						printf("[Nex-AC debug] Dist: %f, dist set: %f, acSet[8]: %d, speed: %d, old pos x, y: %f, %f",
8371
						ac_dist, ac_dist_set, ACInfo[playerid][acSet][8], ac_GetSpeed(ac_vX, ac_vY, ac_vZ), ACInfo[playerid][acLastPosX], ACInfo[playerid][acLastPosY]);
8372
					#endif
8373
					ac_KickWithCode(playerid, "", 0, 2, 6);
8374
				}
8375
			}
8376
			ACInfo[playerid][acLastPosX] = ac_pX;
8377
			ACInfo[playerid][acLastPosY] = ac_pY;
8378
		}
8379
		ac_t = orig_GetPlayerMoney(playerid);
8380
		#if AC_USE_AMMUNATIONS
8381
			if(ACInfo[playerid][acSet][10] != -1)
8382
			{
8383
				if(ac_t < ACInfo[playerid][acMoney] &&
8384
				ACInfo[playerid][acSet][10] <= ACInfo[playerid][acMoney] - ac_t) ACInfo[playerid][acSet][10] = -1;
8385
				else if(ac_gtc > ACInfo[playerid][acGtc][15] + ac_gpp)
8386
				{
8387
					if(ACInfo[playerid][acACAllow][15])
8388
					{
8389
						if(++ACInfo[playerid][acCheatCount][10] > AC_MAX_NOP_TIMER_WARNINGS)
8390
						{
8391
							#if defined DEBUG
8392
								printf("[Nex-AC debug] Money: %d, old money: %d, price: %d",
8393
								ac_t, ACInfo[playerid][acMoney], ACInfo[playerid][acSet][10]);
8394
							#endif
8395
							ac_KickWithCode(playerid, "", 0, 15, 4);
8396
							#if defined OnCheatDetected
8397
								ACInfo[playerid][acSet][10] = -1;
8398
							#endif
8399
						}
8400
						#if defined OnCheatWarning
8401
							else OnCheatWarning(playerid, "", 0, 15, 4, ACInfo[playerid][acCheatCount][10]);
8402
						#endif
8403-
//Don't make changes in this public
8403+
8404-
//To customize punishments, declare 'OnCheatDetected' in your script
8404+
8405-
ac_fpublic ac_OnCheatDetected(playerid, ip_address[], type, code)
8405+
8406
			}
8407-
	if(type)
8407+
8408
		#if AC_USE_TUNING_GARAGES
8409
			if(ACInfo[playerid][acSet][12] != -1)
8410-
			BlockIpAddress(ip_address, 0);
8410+
8411
				if(ac_t < ACInfo[playerid][acMoney] &&
8412-
			new ac_strtmp[32];
8412+
8413-
			format(ac_strtmp, sizeof ac_strtmp, "banip %s", ip_address);
8413+
8414
				{
8415
					if(ACInfo[playerid][acACAllow][23])
8416
					{
8417
						if(++ACInfo[playerid][acCheatCount][12] > AC_MAX_NOP_TIMER_WARNINGS)
8418
						{
8419
							#if defined DEBUG
8420
								printf("[Nex-AC debug] Money: %d, old money: %d, component price: %d",
8421-
			case 40: SendClientMessage(playerid, AC_DEFAULT_COLOR, MAX_CONNECTS_MSG);
8421+
8422-
			case 41: SendClientMessage(playerid, AC_DEFAULT_COLOR, UNKNOWN_CLIENT_MSG);
8422+
8423-
			default:
8423+
8424
							#if defined OnCheatDetected
8425-
				static ac_strtmp[sizeof KICK_MSG];
8425+
8426-
				format(ac_strtmp, sizeof ac_strtmp, KICK_MSG, code);
8426+
8427-
				SendClientMessage(playerid, AC_DEFAULT_COLOR, ac_strtmp);
8427+
8428-
				#undef AC_DEFAULT_COLOR
8428+
8429
							else OnCheatWarning(playerid, "", 0, 23, 6, ACInfo[playerid][acCheatCount][12]);
8430
						#endif
8431-
		AntiCheatKickWithDesync(playerid, code);
8431+
8432
					else if(++ACInfo[playerid][acCheatCount][12] > AC_MAX_NOP_TIMER_WARNINGS) ACInfo[playerid][acSet][12] = -1;
8433
				}
8434
			}
8435
		#endif
8436
		#undef AC_USE_TUNING_GARAGES
8437
		#undef AC_MAX_NOP_TIMER_WARNINGS
8438
		if(ACInfo[playerid][acNOPCount][11] > 0) ACInfo[playerid][acNOPCount][11]--;
8439
		else
8440
		{
8441
			if(ACInfo[playerid][acACAllow][14] && ac_t > ACInfo[playerid][acMoney] &&
8442
			(!ACInfo[playerid][acStuntBonus] || ACInfo[playerid][acVeh] == 0))
8443
			{
8444
				#if AC_USE_CASINOS
8445
					if(!ac_InCasino(playerid, ac_int))
8446
					{
8447
				#endif
8448
					#if defined DEBUG
8449
						printf("[Nex-AC debug] AC money: %d, money: %d, stunt bonus: %d, veh: %d, playerid: %d",
8450
						ACInfo[playerid][acMoney], ac_t, ACInfo[playerid][acStuntBonus], ACInfo[playerid][acVeh], playerid);
8451
					#endif
8452
					#if defined OnCheatDetected
8453
						ac_KickWithCode(playerid, "", 0, 14);
8454
					#endif
8455
					ac_t = ACInfo[playerid][acMoney];
8456
					ResetPlayerMoney(playerid);
8457
					GivePlayerMoney(playerid, ac_t);
8458
				#if AC_USE_CASINOS
8459
					}
8460
				#endif
8461
			}
8462
			ACInfo[playerid][acMoney] = ac_t;
8463
		}
8464
	}
8465
	ACInfo[playerid][acCheatCount][1] =
8466
	ACInfo[playerid][acCheatCount][2] =
8467
	ACInfo[playerid][acCheatCount][21] = 0;
8468
	if(ACInfo[playerid][acCheatCount][16] > 0) ACInfo[playerid][acCheatCount][16]--;
8469
	if(ACInfo[playerid][acCheatCount][20] > 0) ACInfo[playerid][acCheatCount][20]--;
8470
	if(ACInfo[playerid][acKicked] < 1)
8471
	{
8472
		ACInfo[playerid][acTimerTick] = ac_gtc;
8473
		#if defined SetPlayerTimerEx_
8474
			ACInfo[playerid][acTimerID] = SetPlayerTimerEx_(playerid, "ac_Timer", 0, 1000, 1, "i", playerid);
8475
		#else
8476
			ACInfo[playerid][acTimerID] = SetTimerEx("ac_Timer", 1000, false, "i", playerid);
8477
		#endif
8478
	}
8479
	return 1;
8480
}
8481
8482
#if !defined OnCheatDetected
8483
	//Don't make changes in this public
8484
	//To customize punishments, declare 'OnCheatDetected' in your script
8485
	ac_fpublic ac_OnCheatDetected(playerid, ip_address[], type, code)
8486
	{
8487
		if(type)
8488
		{
8489
			#if defined BlockIpAddress
8490
				BlockIpAddress(ip_address, 0);
8491
			#else
8492
				new ac_strtmp[32];
8493
				format(ac_strtmp, sizeof ac_strtmp, "banip %s", ip_address);
8494
				SendRconCommand(ac_strtmp);
8495
			#endif
8496
		}
8497
		else
8498
		{
8499
			switch(code)
8500
			{
8501
				case 40: SendClientMessage(playerid, AC_DEFAULT_COLOR, MAX_CONNECTS_MSG);
8502
				case 41: SendClientMessage(playerid, AC_DEFAULT_COLOR, UNKNOWN_CLIENT_MSG);
8503
				default:
8504
				{
8505
					static ac_strtmp[sizeof KICK_MSG];
8506
					format(ac_strtmp, sizeof ac_strtmp, KICK_MSG, code);
8507
					SendClientMessage(playerid, AC_DEFAULT_COLOR, ac_strtmp);
8508
					#undef AC_DEFAULT_COLOR
8509
				}
8510
			}
8511
			AntiCheatKickWithDesync(playerid, code);
8512
		}
8513
		return 1;
8514
	}
8515
#endif
8516
8517
ac_fpublic ac_KickTimer(playerid) return Kick(playerid);
8518
8519
#undef ac_fpublic
8520
8521
stock AntiCheatGetHealth(playerid, &Float:health)
8522
{
8523
	if(!IsPlayerConnected(playerid)) return 0;
8524
	health = ACInfo[playerid][acHealth];
8525
	return 1;
8526
}
8527
8528
stock AntiCheatGetArmour(playerid, &Float:armour)
8529
{
8530
	if(!IsPlayerConnected(playerid)) return 0;
8531
	armour = ACInfo[playerid][acArmour];
8532
	return 1;
8533
}
8534
8535
stock AntiCheatGetVehicleHealth(vehicleid, &Float:health)
8536
{
8537
	if(GetVehicleModel(vehicleid) <= 0) return 0;
8538
	health = ACVehInfo[vehicleid][acHealth];
8539
	return 1;
8540
}
8541
8542
stock AntiCheatGetWeaponData(playerid, slot, &weapons, &ammo)
8543
{
8544
	if(!IsPlayerConnected(playerid)) return 0;
8545
	if(!(0 <= slot <= 12)) return -1;
8546
	weapons = ACInfo[playerid][acWeapon][slot];
8547
	ammo = ACInfo[playerid][acAmmo][slot];
8548
	return 1;
8549
}
8550
8551
stock AntiCheatGetSpawnPos(playerid, &Float:x, &Float:y, &Float:z)
8552
{
8553
	if(!IsPlayerConnected(playerid)) return 0;
8554
	x = ACInfo[playerid][acSpawnPosX];
8555
	y = ACInfo[playerid][acSpawnPosY];
8556
	z = ACInfo[playerid][acSpawnPosZ];
8557
	return 1;
8558
}
8559
8560
stock AntiCheatGetSpawnWeapon(playerid, &weapon1, &weapon1_ammo, &weapon2, &weapon2_ammo, &weapon3, &weapon3_ammo)
8561
{
8562
	if(!IsPlayerConnected(playerid)) return 0;
8563
	weapon1 = ACInfo[playerid][acSpawnWeapon1];
8564
	weapon1_ammo = ACInfo[playerid][acSpawnAmmo1];
8565
	weapon2 = ACInfo[playerid][acSpawnWeapon2];
8566
	weapon2_ammo = ACInfo[playerid][acSpawnAmmo2];
8567
	weapon3 = ACInfo[playerid][acSpawnWeapon3];
8568
	weapon3_ammo = ACInfo[playerid][acSpawnAmmo3];
8569
	return 1;
8570
}
8571
8572
stock AntiCheatGetPos(playerid, &Float:x, &Float:y, &Float:z)
8573
{
8574
	if(!IsPlayerConnected(playerid)) return 0;
8575
	x = ACInfo[playerid][acPosX];
8576
	y = ACInfo[playerid][acPosY];
8577
	z = ACInfo[playerid][acPosZ];
8578
	return 1;
8579
}
8580
8581
stock AntiCheatGetVehicleVelocity(vehicleid, &Float:x, &Float:y, &Float:z)
8582
{
8583
	if(GetVehicleModel(vehicleid) <= 0) return 0;
8584
	x = ACVehInfo[vehicleid][acVelX];
8585
	y = ACVehInfo[vehicleid][acVelY];
8586
	z = ACVehInfo[vehicleid][acVelZ];
8587
	return 1;
8588
}
8589
8590
stock AntiCheatGetVehiclePos(vehicleid, &Float:x, &Float:y, &Float:z)
8591
{
8592
	if(GetVehicleModel(vehicleid) <= 0) return 0;
8593
	x = ACVehInfo[vehicleid][acPosX];
8594
	y = ACVehInfo[vehicleid][acPosY];
8595
	z = ACVehInfo[vehicleid][acPosZ];
8596
	return 1;
8597
}
8598
8599
stock AntiCheatGetVehicleZAngle(vehicleid, &Float:z_angle)
8600
{
8601
	if(GetVehicleModel(vehicleid) <= 0) return 0;
8602
	z_angle = ACVehInfo[vehicleid][acZAngle];
8603
	return 1;
8604
}
8605
8606
stock AntiCheatGetVehicleSpawnPos(vehicleid, &Float:x, &Float:y, &Float:z)
8607
{
8608
	if(GetVehicleModel(vehicleid) <= 0) return 0;
8609
	x = ACVehInfo[vehicleid][acSpawnPosX];
8610
	y = ACVehInfo[vehicleid][acSpawnPosY];
8611
	z = ACVehInfo[vehicleid][acSpawnPosZ];
8612
	return 1;
8613
}
8614
8615
stock AntiCheatGetVehicleSpawnZAngle(vehicleid, &Float:z_angle)
8616
{
8617
	if(GetVehicleModel(vehicleid) <= 0) return 0;
8618
	z_angle = ACVehInfo[vehicleid][acSpawnZAngle];
8619
	return 1;
8620
}
8621
8622
static ac_IsAnAircraft(modelid) return (417 <= modelid <= 593 && 1 <= ac_vType[modelid - 400] <= 2);
8623
8624
static ac_IsABoat(modelid) return (430 <= modelid <= 595 && ac_vType[modelid - 400] == 3);
8625
8626
static ac_IsABicycle(modelid) return (481 <= modelid <= 510 && ac_vType[modelid - 400] == 4);
8627
8628
static ac_IsABike(modelid) return (448 <= modelid <= 586 && 4 <= ac_vType[modelid - 400] <= 5);
8629
8630
#if defined VectorSize
8631
	static ac_GetSpeed(Float:ac_x, Float:ac_y, Float:ac_z = 0.0) return floatround(VectorSize(ac_x, ac_y, ac_z) * 179.28625);
8632
#else
8633
	static ac_GetSpeed(Float:ac_x, Float:ac_y, Float:ac_z = 0.0) return floatround(floatsqroot(floatpower(ac_x, 2.0) + floatpower(ac_y, 2.0) + floatpower(ac_z, 2.0)) * 179.28625);
8634
#endif
8635
8636
static ac_IsVehicleSeatOccupied(vehicleid, seat)
8637
{
8638
	#if defined foreach
8639
		foreach(new ac_i : Player)
8640
		{
8641
			if(ACInfo[ac_i][acVeh] == vehicleid && ACInfo[ac_i][acSeat] == seat) return 1;
8642
		}
8643
	#else
8644
		#if defined GetPlayerPoolSize
8645
			for(new ac_i = GetPlayerPoolSize(); ac_i >= 0; --ac_i)
8646
		#else
8647
			for(new ac_i = MAX_PLAYERS - 1; ac_i >= 0; --ac_i)
8648
		#endif
8649
		{
8650
			if(IsPlayerInVehicle(ac_i, vehicleid) && ACInfo[ac_i][acSeat] == seat) return 1;
8651
		}
8652
	#endif
8653
	return 0;
8654
}
8655
8656
#if AC_USE_RESTAURANTS
8657
	static ac_InRestaurant(playerid, interiorid)
8658
	{
8659
		new ac_i;
8660
		switch(interiorid)
8661
		{
8662
			case 5: ac_i = 0;
8663
			case 9: ac_i = 1;
8664
			case 10: ac_i = 2;
8665
			default: return 0;
8666
		}
8667
		return IsPlayerInRangeOfPoint(playerid, 3.0, ac_Restaurants[ac_i][0], ac_Restaurants[ac_i][1], ac_Restaurants[ac_i][2]);
8668
	}
8669
#endif
8670
#undef AC_USE_RESTAURANTS
8671
8672
#if AC_USE_AMMUNATIONS
8673
	static ac_InAmmuNation(playerid, interiorid)
8674
	{
8675
		new ac_i, ac_s;
8676
		switch(interiorid)
8677
		{
8678
			case 1: ac_i = 0, ac_s = -1;
8679
			case 4: ac_i = 1, ac_s = 0;
8680
			case 6: ac_i = 3, ac_s = 1;
8681
			default: return 0;
8682
		}
8683
		for(; ac_i > ac_s; --ac_i)
8684
		{
8685
			if(IsPlayerInRangeOfPoint(playerid, 3.0, ac_AmmuNations[ac_i][0],
8686
			ac_AmmuNations[ac_i][1], ac_AmmuNations[ac_i][2])) return 1;
8687
		}
8688
		return 0;
8689
	}
8690
#endif
8691
#undef AC_USE_AMMUNATIONS
8692
8693
#if AC_USE_PAYNSPRAY
8694
	static ac_InPayNSpray(playerid, interiorid)
8695
	{
8696
		if(interiorid == 0)
8697
		{
8698
			for(new ac_i = sizeof(ac_PayNSpray) - 1; ac_i >= 0; --ac_i)
8699
			{
8700
				if(IsPlayerInRangeOfPoint(playerid, 7.5, ac_PayNSpray[ac_i][0], ac_PayNSpray[ac_i][1], ac_PayNSpray[ac_i][2])) return 1;
8701
			}
8702
		}
8703
		return 0;
8704
	}
8705
#endif
8706
#undef AC_USE_PAYNSPRAY
8707
8708
#if AC_USE_VENDING_MACHINES
8709
	static ac_NearVendingMachine(playerid, interiorid)
8710
	{
8711
		new ac_i, ac_s;
8712
		switch(interiorid)
8713
		{
8714
			case 0: ac_i = 44, ac_s = -1;
8715
			case 1: ac_i = 51, ac_s = 44;
8716
			case 2: ac_i = 52, ac_s = 51;
8717
			case 3: ac_i = 58, ac_s = 52;
8718
			case 6: ac_i = 60, ac_s = 58;
8719
			case 7: ac_i = 61, ac_s = 60;
8720
			case 15: ac_i = 62, ac_s = 61;
8721
			case 16: ac_i = 65, ac_s = 62;
8722
			case 17: ac_i = 72, ac_s = 65;
8723
			case 18: ac_i = 74, ac_s = 72;
8724
			default: return 0;
8725
		}
8726
		for(; ac_i > ac_s; --ac_i)
8727
		{
8728
			if(IsPlayerInRangeOfPoint(playerid, 1.5, ac_vMachines[ac_i][0], ac_vMachines[ac_i][1], ac_vMachines[ac_i][2])) return 1;
8729
		}
8730
		return 0;
8731
	}
8732
#endif
8733
#undef AC_USE_VENDING_MACHINES
8734
8735
#if AC_USE_CASINOS
8736
	static ac_InCasino(playerid, interiorid)
8737
	{
8738
		new ac_i, ac_s;
8739
		switch(interiorid)
8740
		{
8741
			case 1: ac_i = 41, ac_s = -1;
8742
			case 10: ac_i = 61, ac_s = 41;
8743
			case 12: ac_i = 70, ac_s = 61;
8744
			default: return 0;
8745
		}
8746
		for(; ac_i > ac_s; --ac_i)
8747-
	ac_sInfo[5]++;
8747+
8748-
	switch(code)
8748+
8749
			ac_Casinos[ac_i][1], ac_Casinos[ac_i][2])) return 1;
8750-
		case 0..35, 37, 39, 51: ac_sInfo[0]++;
8750+
8751-
		case 36, 38, 40, 41, 50: ac_sInfo[4]++;
8751+
8752-
		case 42: ac_sInfo[1]++;
8752+
8753-
		case 47..49: ac_sInfo[3]++;
8753+
8754-
		case 43..46: ac_sInfo[2]++;
8754+
8755
8756
static ac_IsCompatible(modelid, componentid)
8757
{
8758
	if(400 <= modelid <= 611)
8759
	{
8760
		switch(componentid)
8761
		{
8762
			case 1000..1191:
8763
			{
8764
				componentid -= 1000;
8765
				if(ac_vMods[(modelid - 400) * 6 + (componentid >>> 5)] & 1 << (componentid & 0b00011111)) return 1;
8766
			}
8767
			case 1192, 1193:
8768
			{
8769
				if(modelid == 576) return 1;
8770
			}
8771
		}
8772
	}
8773
	return 0;
8774
}
8775
8776
static ac_GetMaxPassengers(modelid)
8777
{
8778
	if(400 <= modelid <= 611)
8779
	{
8780
		modelid -= 400;
8781
		return ((ac_MaxPassengers[modelid >>> 3] >>> ((modelid & 7) << 2)) & 0xF);
8782
	}
8783
	return 0xF;
8784
}
8785
8786
static ac_IpToInt(const ip[])
8787
{
8788
	new ac_bytes[1], ac_pos;
8789
	ac_bytes{0} = strval(ip[ac_pos]);
8790
	while(ac_pos < 15 && ip[ac_pos++] != '.'){}
8791
	ac_bytes{1} = strval(ip[ac_pos]);
8792
	while(ac_pos < 15 && ip[ac_pos++] != '.'){}
8793
	ac_bytes{2} = strval(ip[ac_pos]);
8794
	while(ac_pos < 15 && ip[ac_pos++] != '.'){}
8795
	ac_bytes{3} = strval(ip[ac_pos]);
8796
	return ac_bytes[0];
8797
}
8798
8799
static ac_FloodDetect(playerid, publicid)
8800
{
8801
	if(ACInfo[playerid][acKicked] < 1)
8802
	{
8803
		if(++ACInfo[playerid][acFloodCount][publicid] > ac_Mtfc[publicid][1])
8804
		{
8805
			#if defined DEBUG
8806
				printf(DEBUG_CODE_1, playerid, ac_Mtfc[publicid][1], publicid);
8807
				#if !defined mysql_included
8808
					#undef DEBUG
8809
				#endif
8810
			#endif
8811
			#if defined OnCheatDetected
8812
				ac_KickWithCode(playerid, "", 0, 49, publicid);
8813
				ACInfo[playerid][acFloodCount][publicid] = ACInfo[playerid][acFloodCount][27] = 0;
8814
			#else
8815
				return ac_KickWithCode(playerid, "", 0, 49, publicid);
8816
			#endif
8817
		}
8818
		#if defined OnFloodWarning
8819
			else OnFloodWarning(playerid, publicid, ACInfo[playerid][acFloodCount][publicid]);
8820
		#endif
8821
		ACInfo[playerid][acCall][publicid] = ACInfo[playerid][acCall][27] = GetTickCount();
8822
	}
8823
	return 0;
8824
}
8825
8826
static ac_KickWithCode(playerid, ip_address[], type, code, code2 = 0)
8827
{
8828
	if(type == 0 && (!IsPlayerConnected(playerid) || ACInfo[playerid][acKicked] > 0)) return 0;
8829
	#if AC_USE_STATISTICS
8830
		ac_sInfo[5]++;
8831
		switch(code)
8832
		{
8833
			case 0..35, 37, 39, 51: ac_sInfo[0]++;
8834
			case 36, 38, 40, 41, 50: ac_sInfo[4]++;
8835
			case 42: ac_sInfo[1]++;
8836
			case 47..49: ac_sInfo[3]++;
8837
			case 43..46: ac_sInfo[2]++;
8838
		}
8839
	#endif
8840
	#if defined NO_SUSPICION_LOGS
8841
		#pragma unused code2
8842
	#else
8843
		new ac_strtmp[6];
8844
		if(code2) format(ac_strtmp, sizeof ac_strtmp, " (%d)", code2);
8845
		if(type) printf(SUSPICION_2, ip_address, code, ac_strtmp);
8846
		else printf(SUSPICION_1, playerid, code, ac_strtmp);
8847
	#endif
8848
	#if defined OnCheatDetected
8849
		OnCheatDetected(playerid, ip_address, type, code);
8850
	#else
8851
		ac_OnCheatDetected(playerid, ip_address, type, code);
8852
	#endif
8853
	return 0;
8854
}
8855
8856
static ac_LoadCfg()
8857
{
8858
	static ac_strtmp[10];
8859
	new ac_i, ac_string[415], File:ac_cfgFile;
8860
	if(fexist(AC_CONFIG_FILE))
8861
	{
8862
		if((ac_cfgFile = fopen(AC_CONFIG_FILE, io_read)))
8863
		{
8864
			#if defined sscanf
8865
				new ac_j;
8866
			#endif
8867
			while(fread(ac_cfgFile, ac_string) > 0)
8868
			{
8869
				#if defined sscanf
8870
					sscanf(ac_string, "i'//'i", ac_j, ac_i);
8871
					ac_ACAllow[ac_i] = !!ac_j;
8872
				#else
8873
					if((ac_i = strfind(ac_string, "//")) != -1)
8874
					{
8875
						strmid(ac_strtmp, ac_string, ac_i + 2, strlen(ac_string));
8876
						if(0 <= (ac_i = strval(ac_strtmp)) < sizeof ac_ACAllow) ac_ACAllow[ac_i] = !!strval(ac_string);
8877
					}
8878
				#endif
8879
			}
8880
			fclose(ac_cfgFile);
8881
		}
8882
		else return 0;
8883
	}
8884
	else if((ac_cfgFile = fopen(AC_CONFIG_FILE, io_write)))
8885
	{
8886
		#undef AC_CONFIG_FILE
8887
		for(; ac_i < sizeof ac_ACAllow; ++ac_i)
8888
		{
8889
			format(ac_strtmp, sizeof ac_strtmp, "%d //%d\r\n", ac_ACAllow[ac_i], ac_i);
8890
			strcat(ac_string, ac_strtmp);
8891
		}
8892
		fwrite(ac_cfgFile, ac_string);
8893
		fclose(ac_cfgFile);
8894
	}
8895
	else return 0;
8896
	return 1;
8897
}
8898
8899
static ac_LoadNOPCfg()
8900
{
8901
	static ac_strtmp[10];
8902
	new ac_i, ac_string[87], File:ac_cfgFile;
8903
	if(fexist(AC_NOP_CONFIG_FILE))
8904
	{
8905
		if((ac_cfgFile = fopen(AC_NOP_CONFIG_FILE, io_read)))
8906
		{
8907
			#if defined sscanf
8908
				new ac_j;
8909
			#endif
8910
			while(fread(ac_cfgFile, ac_string) > 0)
8911
			{
8912
				#if defined sscanf
8913
					sscanf(ac_string, "i'//'i", ac_j, ac_i);
8914
					ac_NOPAllow[ac_i] = !!ac_j;
8915
				#else
8916
					if((ac_i = strfind(ac_string, "//")) != -1)
8917
					{
8918
						strmid(ac_strtmp, ac_string, ac_i + 2, strlen(ac_string));
8919
						if(0 <= (ac_i = strval(ac_strtmp)) < sizeof ac_NOPAllow) ac_NOPAllow[ac_i] = !!strval(ac_string);
8920
					}
8921
				#endif
8922
			}
8923
			fclose(ac_cfgFile);
8924
		}
8925
		else return 0;
8926
	}
8927
	else if((ac_cfgFile = fopen(AC_NOP_CONFIG_FILE, io_write)))
8928
	{
8929
		#undef AC_NOP_CONFIG_FILE
8930
		for(; ac_i < sizeof ac_NOPAllow; ++ac_i)
8931
		{
8932
			format(ac_strtmp, sizeof ac_strtmp, "%d //%d\r\n", ac_NOPAllow[ac_i], ac_i);
8933
			strcat(ac_string, ac_strtmp);
8934
		}
8935
		fwrite(ac_cfgFile, ac_string);
8936
		fclose(ac_cfgFile);
8937
	}
8938
	else return 0;
8939
	return 1;
8940
}
8941
8942
#endif