View difference between Paste ID: vQeiDfNa and Fua9CS3b
SHOW: | | - or go back to the newest paste.
1-
//Admin System by Nexius v2.0
1+
//Admin System by Nexius v2.1
2
3
#if defined _admsys_included
4
	#endinput
5
#endif
6
#define _admsys_included
7
8
#include <a_samp>
9
10-
#define	ADMSYS_VERSION				"2.0"
10+
#define	ADMSYS_VERSION				"2.1"
11
12
//#define SEND_ACTION_MESSAGES_TO_ALL
13
14
#define ADMSYS_DEFAULT_COLOR			-1
15
16
#define ADMSYS_MAX_TAB_INPUT			8
17
#define ADMSYS_MAX_SUSPECTS_IN_TABLE	8
18
#define ADMSYS_MAX_GIVE_PLAYERS_IN_CMD	3
19
#define ADMSYS_MAX_WARNS				2
20
21
#define admsys_isnull(%0) ((!(%0[0])) || (((%0[0]) == '\1') && (!(%0[1]))))
22
#define admsys_fpublic%0(%1) forward %0(%1); public %0(%1)
23
24
#if !defined CMD
25
	#define CMD:%0(%1) forward cmd_%0(%1); public cmd_%0(%1)
26
#endif
27
28
static const AdmSysCmds[][] =
29
{
30
	"Level 1:\n",
31
	"/achat [text] - Admin chat\n",
32
	"/ahelp - Help with admin commands\n",
33
	"/showstats [id] - Show player's statistics\n",
34
	"/answer [id] [text] - Respond on player's report\n",
35
	"/apanel - Admin panel with all available commands\n",
36
	"/admins - View a list of online administrators\n",
37
	"/eject [id] - Remove player from vehicle\n",
38
	"\n",
39
	"Level 2:\n",
40
	"/spec [id] - Begin spectate player\n",
41
	"/spawnveh [vehicle id] - Teleport vehicle to respawn\n",
42
	"/(un)mute [id] [time] [reason] - Mute/unmute player\n",
43
	"/asay [text] - Message: 'Administrator: [text]'\n",
44
	"/warn [id] [reason] - Give warn to player\n",
45
	"/kick [id] [reason] - Kick player from the server\n",
46
	"/(un)freeze [id] - Freeze/unfreeze player\n",
47
	"/slap [id] [reason] - Slap player\n",
48
	"/goto [id] - Teleport to player\n",
49
	"\n",
50
	"Level 3:\n",
51
	"/suspectlist - List of suspects players\n",
52
	"/gethere [id] - Teleport player to yourself\n",
53
	"/gotoveh [vehicle id] - Teleport to vehicle\n",
54
	"/ban [id] [reason] - Ban player's account\n",
55
	"/gmtest [id] - Check for infinite health\n",
56
	"/spawn [id] - Teleport player to respawn\n",
57
	"/unwarn [id] - Remove warn from player\n",
58
	"/banip [IP] - Block an IP address\n",
59
	"/cc - Clear the chat\n",
60
	"\n",
61
	"Level 4:\n",
62
	"/sethealth [id] [health] - Set health to player\n",
63
	"/setarmour [id] [armour] - Set armour to player\n",
64
	"/setmoney [id] [money] - Set money to player\n",
65
	"/setskin [id] [skin id] - Set skin to player\n",
66
	"/setint [id] [interior] - Set interior to player\n",
67
	"/setvw [id] [vw] - Set virtual world to player\n",
68
	"/giveweapon [id] [weapon] [ammo] - Give weapon to player\n",
69
	"/repairveh [vehicle id] - Repair vehicle\n",
70
	"/unbanip [IP] - Unblock IP address\n",
71
	"\n",
72
	"Level 5:\n",
73
	"/getall - Teleport all to yourself\n",
74
	"/setweather [number] - Set weather\n",
75
	"/settime [hour] - Set time of day\n",
76
	"/destroyveh [vehicle id] - Destroy vehicle\n",
77
	"/veh [vehicle id] [color 1] [color 2] - Create vehicle\n",
78
	"/sban [id] - Silent ban\n",
79
	"/skick [id] - Silent kick"
80
};
81
82
enum
83
{
84
	ADMSYS_DIALOG_TAB_PANEL = 8192,
85
	ADMSYS_DIALOG_ANSWER,
86
	ADMSYS_DIALOG_MUTE_TIME,
87
	ADMSYS_DIALOG_MUTE,
88
	ADMSYS_DIALOG_WARN,
89
	ADMSYS_DIALOG_KICK,
90
	ADMSYS_DIALOG_SLAP,
91
	ADMSYS_DIALOG_BAN,
92
	ADMSYS_DIALOG_SET_HEALTH,
93
	ADMSYS_DIALOG_SET_ARMOUR,
94
	ADMSYS_DIALOG_SET_MONEY,
95
	ADMSYS_DIALOG_CHANGE_SKIN,
96
	ADMSYS_DIALOG_SET_INT,
97
	ADMSYS_DIALOG_SET_VW,
98
	ADMSYS_DIALOG_GIVE_WEAPON,
99
	ADMSYS_DIALOG_GIVE_WEAPON_AMMO,
100
	ADMSYS_DIALOG_AHELP,
101
	ADMSYS_DIALOG_STATS,
102
	ADMSYS_DIALOG_APANEL,
103
	ADMSYS_DIALOG_ACHAT,
104
	ADMSYS_DIALOG_SPAWN_VEH,
105
	ADMSYS_DIALOG_ASAY,
106
	ADMSYS_DIALOG_GOTO_VEH,
107
	ADMSYS_DIALOG_BAN_IP,
108
	ADMSYS_DIALOG_REPAIR_VEH,
109
	ADMSYS_DIALOG_UNBAN_IP,
110
	ADMSYS_DIALOG_SET_WEATHER,
111
	ADMSYS_DIALOG_SET_TIME,
112
	ADMSYS_DIALOG_DESTROY_VEH,
113
	ADMSYS_DIALOG_CREATE_VEH,
114
	ADMSYS_DIALOG_CREATE_VEH_COL_1,
115
	ADMSYS_DIALOG_CREATE_VEH_COL_2,
116
	ADMSYS_DIALOG_ADMINS,
117
	ADMSYS_DIALOG_SUSPECT_LIST,
118
	ADMSYS_DIALOG_GMTEST
119
}
120
121
enum asInfo
122
{
123
	Float:asGmTestHP,
124
	Float:asGmTestAR,
125
	Float:asLastAngle,
126
	Float:asLastPos[3],
127
	Float:asLastFloatData,
128
	asInput[ADMSYS_MAX_TAB_INPUT],
129
	asInput2[ADMSYS_MAX_TAB_INPUT],
130
	asLastWeapon[13],
131
	asLastIntData[2],
132
	asLastAmmo[13],
133
	asLastActionID,
134
	asLastAction,
135
	asLastSpecID,
136
	asGmTestID,
137
	asAdminLvl,
138
	asTabPanel,
139
	asMuteTime,
140
	asWarns,
141
	asSpecID,
142
	asLastVW,
143
	asLastInt,
144
	asUpdTimer,
145
	bool:asLastSpec,
146
	bool:asIsSpawned,
147
	bool:asIsDead,
148
	bool:asGmTest
149
}
150
151
static
152
	AdmSysInfo[MAX_PLAYERS][asInfo],
153
	SuspectList[ADMSYS_MAX_SUSPECTS_IN_TABLE] = {INVALID_PLAYER_ID, ...},
154
	AdmSysCmdsStr[1790];
155
156
forward OnPlayerBan(playerid, gaveid, bool:sban);
157
forward OnPlayerKick(playerid, gaveid, bool:skick);
158
forward OnPlayerWarn(playerid, gaveid, count);
159
160
#if defined _inc_y_hooks || defined _INC_y_hooks
161
	hook OnGameModeInit()
162
#else
163
	public OnGameModeInit()
164
#endif
165
{
166
	print(" ");
167
	print(" Admin System by Nexius loaded!");
168
	printf(" Version: %s", ADMSYS_VERSION);
169
	print(" ");
170
	for(new i; i < sizeof AdmSysCmds; i++) strcat(AdmSysCmdsStr, AdmSysCmds[i]);
171
	SetTimer("UpdateMuteTime", 1000, 1);
172
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
173
		&& defined admsys_OnGameModeInit
174
		return admsys_OnGameModeInit();
175
	#else
176
		return 1;
177
	#endif
178
}
179
180
#if !defined _inc_y_hooks && !defined _INC_y_hooks
181
	#if defined _ALS_OnGameModeInit
182
		#undef OnGameModeInit
183
	#else
184
		#define _ALS_OnGameModeInit
185
	#endif
186
	#define OnGameModeInit admsys_OnGameModeInit
187
	#if defined admsys_OnGameModeInit
188
		forward admsys_OnGameModeInit();
189
	#endif
190
#endif
191
192
#if defined _inc_y_hooks || defined _INC_y_hooks
193
	hook OnGameModeExit()
194
#else
195
	public OnGameModeExit()
196
#endif
197
{
198
	print(" ");
199
	print(" Admin System by Nexius unloaded!");
200
	print(" ");
201
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
202
		&& defined admsys_OnGameModeExit
203
		return admsys_OnGameModeExit();
204
	#else
205
		return 1;
206
	#endif
207
}
208
209
#if !defined _inc_y_hooks && !defined _INC_y_hooks
210
	#if defined _ALS_OnGameModeExit
211
		#undef OnGameModeExit
212
	#else
213
		#define _ALS_OnGameModeExit
214
	#endif
215
	#define OnGameModeExit admsys_OnGameModeExit
216
	#if defined admsys_OnGameModeExit
217
		forward admsys_OnGameModeExit();
218
	#endif
219
#endif
220
221
#if defined _inc_y_hooks || defined _INC_y_hooks
222
	hook OnPlayerConnect(playerid)
223
#else
224
	public OnPlayerConnect(playerid)
225
#endif
226
{
227
	AdmSysInfo[playerid][asWarns] = 0;
228
	AdmSysInfo[playerid][asMuteTime] = 0;
229
	AdmSysInfo[playerid][asAdminLvl] = 0;
230
	AdmSysInfo[playerid][asUpdTimer] = -1;
231
	AdmSysInfo[playerid][asSpecID] = INVALID_PLAYER_ID;
232
	AdmSysInfo[playerid][asGmTestID] = INVALID_PLAYER_ID;
233
	AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
234
	AdmSysInfo[playerid][asIsSpawned] = false;
235
	AdmSysInfo[playerid][asIsDead] = false;
236
	AdmSysInfo[playerid][asGmTest] = false;
237
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
238
		&& defined admsys_OnPlayerConnect
239
		return admsys_OnPlayerConnect(playerid);
240
	#else
241
		return 1;
242
	#endif
243
}
244
245
#if !defined _inc_y_hooks && !defined _INC_y_hooks
246
	#if defined _ALS_OnPlayerConnect
247
		#undef OnPlayerConnect
248
	#else
249
		#define _ALS_OnPlayerConnect
250
	#endif
251
	#define OnPlayerConnect admsys_OnPlayerConnect
252
	#if defined admsys_OnPlayerConnect
253
		forward admsys_OnPlayerConnect(playerid);
254
	#endif
255
#endif
256
257
#if defined _inc_y_hooks || defined _INC_y_hooks
258
	hook OnPlayerDisconnect(playerid, reason)
259
#else
260
	public OnPlayerDisconnect(playerid, reason)
261
#endif
262
{
263
	AdmSysInfo[playerid][asLastAction] = 0;
264
	KillTimer(AdmSysInfo[playerid][asUpdTimer]);
265
	#if defined foreach
266
		foreach(new i : Player)
267
	#else
268
		for(new i = GetPlayerPoolSize(); i != -1; --i)
269
		{
270
			if(IsPlayerConnected(i))
271
	#endif
272
	{
273
		if(AdmSysInfo[i][asSpecID] == playerid)
274
		{
275
			SendClientMessage(i, ADMSYS_DEFAULT_COLOR, "Player disconnected");
276
			StopSpectating(i);
277
		}
278
	}
279
	#if !defined foreach
280
		}
281
	#endif
282
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
283
		&& defined admsys_OnPlayerDisconnect
284
		return admsys_OnPlayerDisconnect(playerid, reason);
285
	#else
286
		return 1;
287
	#endif
288
}
289
290
#if !defined _inc_y_hooks && !defined _INC_y_hooks
291
	#if defined _ALS_OnPlayerDisconnect
292
		#undef OnPlayerDisconnect
293
	#else
294
		#define _ALS_OnPlayerDisconnect
295
	#endif
296
	#define OnPlayerDisconnect admsys_OnPlayerDisconnect
297
	#if defined admsys_OnPlayerDisconnect
298
		forward admsys_OnPlayerDisconnect(playerid, reason);
299
	#endif
300
#endif
301
302
#if defined _inc_y_hooks || defined _INC_y_hooks
303
	hook OnPlayerSpawn(playerid)
304
#else
305
	public OnPlayerSpawn(playerid)
306
#endif
307
{
308
	if(IsPlayerSpectating(playerid))
309
	{
310
		for(new i = 12; i != -1; --i)
311
			GivePlayerWeapon(playerid, AdmSysInfo[playerid][asLastWeapon][i], AdmSysInfo[playerid][asLastAmmo][i]);
312
		SetPlayerPos(playerid, AdmSysInfo[playerid][asLastPos][0],
313
		AdmSysInfo[playerid][asLastPos][1], AdmSysInfo[playerid][asLastPos][2]);
314
		SetPlayerFacingAngle(playerid, AdmSysInfo[playerid][asLastAngle]);
315
		SetPlayerVirtualWorld(playerid, AdmSysInfo[playerid][asLastVW]);
316
		SetPlayerInterior(playerid, AdmSysInfo[playerid][asLastInt]);
317
	}
318
	AdmSysInfo[playerid][asSpecID] = INVALID_PLAYER_ID;
319
	AdmSysInfo[playerid][asIsSpawned] = true;
320
	AdmSysInfo[playerid][asLastSpec] = false;
321
	AdmSysInfo[playerid][asIsDead] = false;
322
	#if defined foreach
323
		foreach(new i : Player)
324
	#else
325
		for(new i = GetPlayerPoolSize(); i != -1; --i)
326
		{
327
			if(IsPlayerConnected(i))
328
	#endif
329
	{
330
		if(AdmSysInfo[i][asSpecID] == playerid) UpdateSpectating(i);
331
	}
332
	#if !defined foreach
333
		}
334
	#endif
335
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
336
		&& defined admsys_OnPlayerSpawn
337
		return admsys_OnPlayerSpawn(playerid);
338
	#else
339
		return 1;
340
	#endif
341
}
342
343
#if !defined _inc_y_hooks && !defined _INC_y_hooks
344
	#if defined _ALS_OnPlayerSpawn
345
		#undef OnPlayerSpawn
346
	#else
347
		#define _ALS_OnPlayerSpawn
348
	#endif
349
	#define OnPlayerSpawn admsys_OnPlayerSpawn
350
	#if defined admsys_OnPlayerSpawn
351
		forward admsys_OnPlayerSpawn(playerid);
352
	#endif
353
#endif
354
355
#if defined _inc_y_hooks || defined _INC_y_hooks
356
	hook OnPlayerDeath(playerid, killerid, reason)
357
#else
358
	public OnPlayerDeath(playerid, killerid, reason)
359
#endif
360
{
361-
	new Float:pX, Float:pY, Float:pZ, Float:cX, Float:cY, Float:cZ, interior, vw;
361+
	new interior, vw;
362-
	GetPlayerCameraPos(playerid, cX, cY, cZ);
362+
363-
	GetPlayerPos(playerid, pX, pY, pZ);
363+
364
	#if defined foreach
365
		foreach(new i : Player)
366
	#else
367
		for(new i = GetPlayerPoolSize(); i != -1; --i)
368
		{
369
			if(IsPlayerConnected(i))
370
	#endif
371
	{
372
		if(AdmSysInfo[i][asSpecID] == playerid)
373
		{
374
			SendClientMessage(i, ADMSYS_DEFAULT_COLOR, "Player died");
375
			SetPlayerInterior(i, interior);
376
			SetPlayerVirtualWorld(i, vw);
377-
			SetPlayerCameraPos(i, cX, cY, cZ);
377+
378-
			SetPlayerCameraLookAt(i, pX, pY, pZ);
378+
379
	#if !defined foreach
380
		}
381
	#endif
382
	AdmSysInfo[playerid][asIsSpawned] = false;
383
	AdmSysInfo[playerid][asIsDead] = true;
384
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
385
		&& defined admsys_OnPlayerDeath
386
		return admsys_OnPlayerDeath(playerid, killerid, reason);
387
	#else
388
		return 1;
389
	#endif
390
}
391
392
#if !defined _inc_y_hooks && !defined _INC_y_hooks
393
	#if defined _ALS_OnPlayerDeath
394
		#undef OnPlayerDeath
395
	#else
396
		#define _ALS_OnPlayerDeath
397
	#endif
398
	#define OnPlayerDeath admsys_OnPlayerDeath
399
	#if defined admsys_OnPlayerDeath
400
		forward admsys_OnPlayerDeath(playerid, killerid, reason);
401
	#endif
402
#endif
403
404
#if defined _inc_y_hooks || defined _INC_y_hooks
405
	hook OnPlayerText(playerid, text[])
406
#else
407
	public OnPlayerText(playerid, text[])
408
#endif
409
{
410
	static strtmp[58];
411
	if(AdmSysInfo[playerid][asMuteTime] > 0)
412
	{
413
		format(strtmp, sizeof strtmp, "You are muted. Remained mute time: %d minutes %d seconds",
414
		floatround(AdmSysInfo[playerid][asMuteTime] / 60, floatround_tozero), AdmSysInfo[playerid][asMuteTime] % 60);
415-
	if(AdmSysInfo[playerid][asMuteTime])
415+
416
		return 0;
417
	}
418
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
419
		&& defined admsys_OnPlayerText
420
		return admsys_OnPlayerText(playerid, text);
421
	#else
422
		return 1;
423
	#endif
424
}
425
426
#if !defined _inc_y_hooks && !defined _INC_y_hooks
427
	#if defined _ALS_OnPlayerText
428
		#undef OnPlayerText
429
	#else
430
		#define _ALS_OnPlayerText
431
	#endif
432
	#define OnPlayerText admsys_OnPlayerText
433
	#if defined admsys_OnPlayerText
434
		forward admsys_OnPlayerText(playerid, text[]);
435
	#endif
436
#endif
437
438
#if !defined YCMD && !defined _I_ZCMD_INCLUDED
439
	#if defined _inc_y_hooks || defined _INC_y_hooks
440
		hook OnPlayerCommandText(playerid, cmdtext[])
441
	#else
442
		public OnPlayerCommandText(playerid, cmdtext[])
443
	#endif
444
	{
445
		static params[112];
446
		new cmd[32], pos;
447
		params[0] = EOS;
448
		while(cmdtext[pos] > ' ')
449
		{
450
			cmd[pos] = cmdtext[pos];
451
			pos++;
452
		}
453
		while(cmdtext[pos] == ' ')
454
		{
455
			pos++;
456
			if(!cmdtext[pos])
457
			{
458
				params = "\1";
459
				break;
460
			}
461
		}
462
		strcat(params, cmdtext[pos]);
463
		if(!strcmp(cmd, "/report", true)) return admsys_cmd_report(playerid, params);
464
		if(!strcmp(cmd, "/achat", true) || !strcmp(cmd, "/adminchat", true)) return admsys_cmd_achat(playerid, params);
465
		if(!strcmp(cmd, "/ahelp", true) || !strcmp(cmd, "/adminhelp", true)) return admsys_cmd_ahelp(playerid, params);
466
		if(!strcmp(cmd, "/showstats", true)) return admsys_cmd_showstats(playerid, params);
467
		if(!strcmp(cmd, "/answer", true)) return admsys_cmd_answer(playerid, params);
468
		if(!strcmp(cmd, "/apanel", true) || !strcmp(cmd, "/adminpanel", true)) return admsys_cmd_apanel(playerid, params);
469
		if(!strcmp(cmd, "/admins", true)) return admsys_cmd_admins(playerid, params);
470
		if(!strcmp(cmd, "/eject", true)) return admsys_cmd_eject(playerid, params);
471
472
		if(!strcmp(cmd, "/spec", true)) return admsys_cmd_spec(playerid, params);
473
		if(!strcmp(cmd, "/specupdate", true)) return admsys_cmd_specupdate(playerid, params);
474
		if(!strcmp(cmd, "/specoff", true)) return admsys_cmd_specoff(playerid, params);
475
		if(!strcmp(cmd, "/spawnveh", true)) return admsys_cmd_spawnveh(playerid, params);
476
		if(!strcmp(cmd, "/mute", true)) return admsys_cmd_mute(playerid, params);
477
		if(!strcmp(cmd, "/unmute", true)) return admsys_cmd_unmute(playerid, params);
478
		if(!strcmp(cmd, "/asay", true)) return admsys_cmd_asay(playerid, params);
479
		if(!strcmp(cmd, "/warn", true)) return admsys_cmd_warn(playerid, params);
480
		if(!strcmp(cmd, "/kick", true)) return admsys_cmd_kick(playerid, params);
481
		if(!strcmp(cmd, "/freeze", true)) return admsys_cmd_freeze(playerid, params);
482
		if(!strcmp(cmd, "/unfreeze", true)) return admsys_cmd_unfreeze(playerid, params);
483
		if(!strcmp(cmd, "/slap", true)) return admsys_cmd_slap(playerid, params);
484
		if(!strcmp(cmd, "/goto", true)) return admsys_cmd_goto(playerid, params);
485
486
		if(!strcmp(cmd, "/suspectlist", true)) return admsys_cmd_suspectlist(playerid, params);
487
		if(!strcmp(cmd, "/gethere", true) || !strcmp(cmd, "/get", true)) return admsys_cmd_gethere(playerid, params);
488
		if(!strcmp(cmd, "/gotoveh", true)) return admsys_cmd_gotoveh(playerid, params);
489
		if(!strcmp(cmd, "/ban", true)) return admsys_cmd_ban(playerid, params);
490
		if(!strcmp(cmd, "/gmtest", true)) return admsys_cmd_gmtest(playerid, params);
491
		if(!strcmp(cmd, "/spawn", true)) return admsys_cmd_spawn(playerid, params);
492
		if(!strcmp(cmd, "/unwarn", true)) return admsys_cmd_unwarn(playerid, params);
493
		if(!strcmp(cmd, "/banip", true)) return admsys_cmd_banip(playerid, params);
494
		if(!strcmp(cmd, "/cc", true) || !strcmp(cmd, "/clearchat", true)) return admsys_cmd_cc(playerid, params);
495
496
		if(!strcmp(cmd, "/sethealth", true)) return admsys_cmd_sethealth(playerid, params);
497
		if(!strcmp(cmd, "/setarmour", true)) return admsys_cmd_setarmour(playerid, params);
498
		if(!strcmp(cmd, "/setmoney", true)) return admsys_cmd_setmoney(playerid, params);
499
		if(!strcmp(cmd, "/setskin", true)) return admsys_cmd_setskin(playerid, params);
500
		if(!strcmp(cmd, "/setint", true) || !strcmp(cmd, "/setinterior", true)) return admsys_cmd_setint(playerid, params);
501
		if(!strcmp(cmd, "/setvw", true) || !strcmp(cmd, "/setvirtualworld", true)) return admsys_cmd_setvw(playerid, params);
502
		if(!strcmp(cmd, "/giveweapon", true)) return admsys_cmd_giveweapon(playerid, params);
503
		if(!strcmp(cmd, "/repairveh", true)) return admsys_cmd_repairveh(playerid, params);
504
		if(!strcmp(cmd, "/unbanip", true)) return admsys_cmd_unbanip(playerid, params);
505
506
		if(!strcmp(cmd, "/setweather", true)) return admsys_cmd_setweather(playerid, params);
507
		if(!strcmp(cmd, "/getall", true)) return admsys_cmd_getall(playerid, params);
508
		if(!strcmp(cmd, "/settime", true)) return admsys_cmd_settime(playerid, params);
509
		if(!strcmp(cmd, "/destroyveh", true)) return admsys_cmd_destroyveh(playerid, params);
510
		if(!strcmp(cmd, "/veh", true) || !strcmp(cmd, "/vehicle", true)) return admsys_cmd_veh(playerid, params);
511
		if(!strcmp(cmd, "/sban", true)) return admsys_cmd_sban(playerid, params);
512
		if(!strcmp(cmd, "/skick", true)) return admsys_cmd_skick(playerid, params);
513
		#if !defined _inc_y_hooks && !defined _INC_y_hooks\
514
			&& defined admsys_OnPlayerCommandText
515
			return admsys_OnPlayerCommandText(playerid, cmdtext);
516
		#else
517
			return 0;
518
		#endif
519
	}
520
521
	#if !defined _inc_y_hooks && !defined _INC_y_hooks
522
		#if defined _ALS_OnPlayerCommandText
523
			#undef OnPlayerCommandText
524
		#else
525
			#define _ALS_OnPlayerCommandText
526
		#endif
527
		#define OnPlayerCommandText admsys_OnPlayerCommandText
528
		#if defined admsys_OnPlayerCommandText
529
			forward admsys_OnPlayerCommandText(playerid, cmdtext[]);
530
		#endif
531
	#endif
532
#endif
533
534
#if defined _inc_y_hooks || defined _INC_y_hooks
535
	hook OnPlayerStateChange(playerid, newstate, oldstate)
536
#else
537
	public OnPlayerStateChange(playerid, newstate, oldstate)
538
#endif
539
{
540
	if(newstate == PLAYER_STATE_SPECTATING)
541
	{
542
		#if defined foreach
543
			foreach(new i : Player)
544-
	if(newstate == 9)
544+
545
			for(new i = GetPlayerPoolSize(); i != -1; --i)
546
			{
547
				if(IsPlayerConnected(i))
548
		#endif
549
		{
550
			if(AdmSysInfo[i][asSpecID] == playerid)
551
			{
552
				SendClientMessage(i, ADMSYS_DEFAULT_COLOR, "Player in spectator mode");
553
				StopSpectating(i);
554
			}
555
		}
556
		#if !defined foreach
557
			}
558
		#endif
559
	}
560
	else if(PLAYER_STATE_DRIVER <= newstate <= PLAYER_STATE_PASSENGER || PLAYER_STATE_DRIVER <= oldstate <= PLAYER_STATE_PASSENGER)
561
	{
562
		#if defined foreach
563
			foreach(new i : Player)
564-
	else if(1 < newstate < 4 || 1 < oldstate < 4)
564+
565
			for(new i = GetPlayerPoolSize(); i != -1; --i)
566
			{
567
				if(IsPlayerConnected(i))
568
		#endif
569
		{
570
			if(AdmSysInfo[i][asSpecID] == playerid) UpdateSpectating(i);
571
		}
572
		#if !defined foreach
573
			}
574
		#endif
575
	}
576
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
577
		&& defined admsys_OnPlayerStateChange
578
		return admsys_OnPlayerStateChange(playerid, newstate, oldstate);
579
	#else
580
		return 1;
581
	#endif
582
}
583
584
#if !defined _inc_y_hooks && !defined _INC_y_hooks
585
	#if defined _ALS_OnPlayerStateChange
586
		#undef OnPlayerStateChange
587
	#else
588
		#define _ALS_OnPlayerStateChange
589
	#endif
590
	#define OnPlayerStateChange admsys_OnPlayerStateChange
591
	#if defined admsys_OnPlayerStateChange
592
		forward admsys_OnPlayerStateChange(playerid, newstate, oldstate);
593
	#endif
594
#endif
595
596
#if defined _inc_y_hooks || defined _INC_y_hooks
597
	hook OnPlayerUpdate(playerid)
598
#else
599
	public OnPlayerUpdate(playerid)
600
#endif
601
{
602
	if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING &&
603
	AdmSysInfo[playerid][asSpecID] != INVALID_PLAYER_ID && AdmSysInfo[AdmSysInfo[playerid][asSpecID]][asIsDead])
604
	{
605
		new Float:pX, Float:pY, Float:pZ, Float:cX, Float:cY, Float:cZ;
606
		GetPlayerCameraPos(AdmSysInfo[playerid][asSpecID], cX, cY, cZ);
607
		GetPlayerPos(AdmSysInfo[playerid][asSpecID], pX, pY, pZ);
608
		SetPlayerCameraPos(playerid, cX, cY, cZ);
609
		SetPlayerCameraLookAt(playerid, pX, pY, pZ);
610
	}
611
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
612
		&& defined admsys_OnPlayerUpdate
613
		return admsys_OnPlayerUpdate(playerid);
614
	#else
615
		return 1;
616
	#endif
617
}
618-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_ANSWER, 1, "Respond on report", "Enter the answer to the report:", "Ok", "Close");
618+
619
#if !defined _inc_y_hooks && !defined _INC_y_hooks
620
	#if defined _ALS_OnPlayerUpdate
621
		#undef OnPlayerUpdate
622-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_MUTE_TIME, 1, "Mute", "Enter mute time:", "Ok", "Close");
622+
623
		#define _ALS_OnPlayerUpdate
624
	#endif
625-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_WARN, 1, "Give warn", "Enter the reason of the warn:", "Ok", "Close");
625+
	#define OnPlayerUpdate admsys_OnPlayerUpdate
626
	#if defined admsys_OnPlayerUpdate
627-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_KICK, 1, "Kick", "Enter the reason of kick:", "Ok", "Close");
627+
		forward admsys_OnPlayerUpdate(playerid);
628
	#endif
629
#endif
630
631-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_SLAP, 1, "Slap", "Enter the reason of slap:", "Ok", "Close");
631+
632
	hook OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
633
#else
634
	public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
635-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_BAN, 1, "Ban", "Enter the reason of ban:", "Ok", "Close");
635+
636
{
637
	switch(dialogid)
638
	{
639
		case ADMSYS_DIALOG_TAB_PANEL:
640-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_HEALTH, 1, "Set health", "Enter the amount of health which you want to set:", "Ok", "Close");
640+
641
			if(response)
642-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_ARMOUR, 1, "Set armour", "Enter the amount of armour which you want to set:", "Ok", "Close");
642+
643
				static strtmp[3];
644-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_MONEY, 1, "Set money", "Enter the amount of money which you want to set:", "Ok", "Close");
644+
645
				switch(listitem)
646-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_CHANGE_SKIN, 1, "Set skin", "Enter the ID of the skin which you want to set:", "Ok", "Close");
646+
647
					case 0: admsys_cmd_showstats(playerid, strtmp);
648-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_INT, 1, "Set interior", "Enter the ID of the interior which you want to set:", "Ok", "Close");
648+
649
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_ANSWER, DIALOG_STYLE_INPUT, "Respond on report", "Enter the answer to the report:", "Ok", "Close");
650-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_VW, 1, "Set virtual world", "Enter the ID of the virtual world which you want to set:", "Ok", "Close");
650+
651
					case 3: admsys_cmd_spec(playerid, strtmp);
652-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_GIVE_WEAPON, 1, "Give weapon", "Enter the ID of the weapon which you want to give:", "Ok", "Close");
652+
653
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_MUTE_TIME, DIALOG_STYLE_INPUT, "Mute", "Enter mute time:", "Ok", "Close");
654
					case 5: admsys_cmd_unmute(playerid, strtmp);
655
					case 6:
656
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_WARN, DIALOG_STYLE_INPUT, "Give warn", "Enter the reason of the warn:", "Ok", "Close");
657
					case 7:
658
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_KICK, DIALOG_STYLE_INPUT, "Kick", "Enter the reason of kick:", "Ok", "Close");
659
					case 8: admsys_cmd_freeze(playerid, strtmp);
660
					case 9: admsys_cmd_unfreeze(playerid, strtmp);
661
					case 10:
662
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_SLAP, DIALOG_STYLE_INPUT, "Slap", "Enter the reason of slap:", "Ok", "Close");
663
					case 11: admsys_cmd_goto(playerid, strtmp);
664-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_ANSWER, 1, "Respond on report", "Enter the answer to the report:", "Ok", "Close");
664+
665
					case 13:
666
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_BAN, DIALOG_STYLE_INPUT, "Ban", "Enter the reason of ban:", "Ok", "Close");
667
					case 14: admsys_cmd_gmtest(playerid, strtmp);
668
					case 15: admsys_cmd_spawn(playerid, strtmp);
669
					case 16: admsys_cmd_unwarn(playerid, strtmp);
670
					case 17:
671
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_HEALTH, DIALOG_STYLE_INPUT, "Set health", "Enter the amount of health which you want to set:", "Ok", "Close");
672
					case 18:
673
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_ARMOUR, DIALOG_STYLE_INPUT, "Set armour", "Enter the amount of armour which you want to set:", "Ok", "Close");
674
					case 19:
675
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_MONEY, DIALOG_STYLE_INPUT, "Set money", "Enter the amount of money which you want to set:", "Ok", "Close");
676
					case 20:
677
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_CHANGE_SKIN, DIALOG_STYLE_INPUT, "Set skin", "Enter the ID of the skin which you want to set:", "Ok", "Close");
678
					case 21:
679
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_INT, DIALOG_STYLE_INPUT, "Set interior", "Enter the ID of the interior which you want to set:", "Ok", "Close");
680-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_MUTE_TIME, 1, "Mute", "Enter mute time:", "Ok", "Close");
680+
681
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_VW, DIALOG_STYLE_INPUT, "Set virtual world", "Enter the ID of the virtual world which you want to set:", "Ok", "Close");
682
					case 23:
683
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_GIVE_WEAPON, DIALOG_STYLE_INPUT, "Give weapon", "Enter the ID of the weapon which you want to give:", "Ok", "Close");
684-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_MUTE, 1, "Mute", "Enter the reason of mute:", "Ok", "Back");
684+
685
					case 25: admsys_cmd_skick(playerid, strtmp);
686
				}
687
			}
688
			return 1;
689
		}
690
		case ADMSYS_DIALOG_ANSWER:
691
		{
692
			if(response)
693
			{
694-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_MUTE, 1, "Mute", "Enter the reason of mute:", "Ok", "Back");
694+
695
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_ANSWER, DIALOG_STYLE_INPUT, "Respond on report", "Enter the answer to the report:", "Ok", "Close");
696
				else
697
				{
698
					static strtmp[145];
699
					format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
700
					AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
701
					admsys_cmd_answer(playerid, strtmp);
702
				}
703-
			else ShowPlayerDialog(playerid, ADMSYS_DIALOG_MUTE_TIME, 1, "Mute", "Enter the time of mute:", "Ok", "Close");
703+
704
			return 1;
705
		}
706
		case ADMSYS_DIALOG_MUTE_TIME:
707
		{
708
			if(response)
709
			{
710
				if(!inputtext[0])
711-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_WARN, 1, "Give warn", "Enter the reason of the warn:", "Ok", "Close");
711+
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_MUTE_TIME, DIALOG_STYLE_INPUT, "Mute", "Enter mute time:", "Ok", "Close");
712
				else
713
				{
714
					format(AdmSysInfo[playerid][asInput], ADMSYS_MAX_TAB_INPUT, "%s", inputtext);
715
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_MUTE, DIALOG_STYLE_INPUT, "Mute", "Enter the reason of mute:", "Ok", "Back");
716
				}
717
			}
718
			return 1;
719
		}
720
		case ADMSYS_DIALOG_MUTE:
721
		{
722
			if(response)
723
			{
724
				if(!inputtext[0])
725
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_MUTE, DIALOG_STYLE_INPUT, "Mute", "Enter the reason of mute:", "Ok", "Back");
726
				else
727-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_KICK, 1, "Kick", "Enter the reason of kick:", "Ok", "Close");
727+
728
					static strtmp[145];
729
					format(strtmp, sizeof strtmp, "%d %s %s", AdmSysInfo[playerid][asTabPanel], AdmSysInfo[playerid][asInput], inputtext);
730
					AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
731
					admsys_cmd_mute(playerid, strtmp);
732
				}
733
			}
734
			else ShowPlayerDialog(playerid, ADMSYS_DIALOG_MUTE_TIME, DIALOG_STYLE_INPUT, "Mute", "Enter the time of mute:", "Ok", "Close");
735
			return 1;
736
		}
737
		case ADMSYS_DIALOG_WARN:
738
		{
739
			if(response)
740
			{
741
				if(!inputtext[0])
742
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_WARN, DIALOG_STYLE_INPUT, "Give warn", "Enter the reason of the warn:", "Ok", "Close");
743-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_SLAP, 1, "Slap", "Enter the reason of slap:", "Ok", "Close");
743+
744
				{
745
					static strtmp[145];
746
					format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
747
					AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
748
					admsys_cmd_warn(playerid, strtmp);
749
				}
750
			}
751
			return 1;
752
		}
753
		case ADMSYS_DIALOG_KICK:
754
		{
755
			if(response)
756
			{
757
				if(!inputtext[0])
758
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_KICK, DIALOG_STYLE_INPUT, "Kick", "Enter the reason of kick:", "Ok", "Close");
759-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_BAN, 1, "Ban", "Enter the reason of ban:", "Ok", "Close");
759+
760
				{
761
					static strtmp[145];
762
					format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
763
					AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
764
					admsys_cmd_kick(playerid, strtmp);
765
				}
766
			}
767
			return 1;
768
		}
769
		case ADMSYS_DIALOG_SLAP:
770
		{
771
			if(response)
772
			{
773
				if(!inputtext[0])
774
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_SLAP, DIALOG_STYLE_INPUT, "Slap", "Enter the reason of slap:", "Ok", "Close");
775-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_HEALTH, 1, "Set health", "Enter the amount of health which you want to set:", "Ok", "Close");
775+
776
				{
777
					static strtmp[145];
778
					format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
779
					AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
780
					admsys_cmd_slap(playerid, strtmp);
781
				}
782
			}
783
			return 1;
784
		}
785
		case ADMSYS_DIALOG_BAN:
786
		{
787
			if(response)
788
			{
789
				if(!inputtext[0])
790
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_BAN, DIALOG_STYLE_INPUT, "Ban", "Enter the reason of ban:", "Ok", "Close");
791-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_ARMOUR, 1, "Set armour", "Enter the amount of armour which you want to set:", "Ok", "Close");
791+
792
				{
793
					static strtmp[145];
794
					format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
795
					AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
796
					admsys_cmd_ban(playerid, strtmp);
797
				}
798
			}
799
			return 1;
800
		}
801
		case ADMSYS_DIALOG_SET_HEALTH:
802
		{
803
			if(response)
804
			{
805
				if(!inputtext[0])
806
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_HEALTH, DIALOG_STYLE_INPUT, "Set health", "Enter the amount of health which you want to set:", "Ok", "Close");
807-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_MONEY, 1, "Set money", "Enter the amount of money which you want to set:", "Ok", "Close");
807+
808
				{
809
					static strtmp[32];
810
					format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
811
					AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
812
					admsys_cmd_sethealth(playerid, strtmp);
813
				}
814
			}
815
			return 1;
816
		}
817
		case ADMSYS_DIALOG_SET_ARMOUR:
818
		{
819
			if(response)
820
			{
821
				if(!inputtext[0])
822
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_ARMOUR, DIALOG_STYLE_INPUT, "Set armour", "Enter the amount of armour which you want to set:", "Ok", "Close");
823-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_CHANGE_SKIN, 1, "Set skin", "Enter the ID of the skin which you want to set:", "Ok", "Close");
823+
824
				{
825
					static strtmp[32];
826
					format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
827
					AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
828
					admsys_cmd_setarmour(playerid, strtmp);
829
				}
830
			}
831
			return 1;
832
		}
833
		case ADMSYS_DIALOG_SET_MONEY:
834
		{
835
			if(response)
836
			{
837
				if(!inputtext[0])
838
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_MONEY, DIALOG_STYLE_INPUT, "Set money", "Enter the amount of money which you want to set:", "Ok", "Close");
839-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_INT, 1, "Set interior", "Enter the ID of the interior which you want to set:", "Ok", "Close");
839+
840
				{
841
					static strtmp[32];
842
					format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
843
					AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
844
					admsys_cmd_setmoney(playerid, strtmp);
845
				}
846
			}
847
			return 1;
848
		}
849
		case ADMSYS_DIALOG_CHANGE_SKIN:
850
		{
851
			if(response)
852
			{
853
				if(!inputtext[0])
854
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_CHANGE_SKIN, DIALOG_STYLE_INPUT, "Set skin", "Enter the ID of the skin which you want to set:", "Ok", "Close");
855-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_VW, 1, "Set virtual world", "Enter the ID of the virtual world which you want to set:", "Ok", "Close");
855+
856
				{
857
					static strtmp[32];
858
					format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
859
					AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
860
					admsys_cmd_setskin(playerid, strtmp);
861
				}
862
			}
863
			return 1;
864
		}
865
		case ADMSYS_DIALOG_SET_INT:
866
		{
867
			if(response)
868
			{
869
				if(!inputtext[0])
870
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_INT, DIALOG_STYLE_INPUT, "Set interior", "Enter the ID of the interior which you want to set:", "Ok", "Close");
871-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_GIVE_WEAPON, 1, "Give weapon", "Enter the ID of the weapon which you want to give:", "Ok", "Close");
871+
872
				{
873
					static strtmp[32];
874
					format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
875-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_GIVE_WEAPON_AMMO, 1, "Give weapon", "Enter the number of ammo which you want to give:", "Ok", "Back");
875+
876
					admsys_cmd_setint(playerid, strtmp);
877
				}
878
			}
879
			return 1;
880
		}
881
		case ADMSYS_DIALOG_SET_VW:
882
		{
883
			if(response)
884
			{
885-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_GIVE_WEAPON_AMMO, 1, "Give weapon", "Enter the number of ammo which you want to give:", "Ok", "Back");
885+
886
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_VW, DIALOG_STYLE_INPUT, "Set virtual world", "Enter the ID of the virtual world which you want to set:", "Ok", "Close");
887
				else
888
				{
889
					static strtmp[32];
890
					format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
891
					AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
892
					admsys_cmd_setvw(playerid, strtmp);
893
				}
894-
			else ShowPlayerDialog(playerid, ADMSYS_DIALOG_GIVE_WEAPON, 1, "Give weapon", "Enter the ID of the weapon which you want to give:", "Ok", "Close");
894+
895
			return 1;
896
		}
897
		case ADMSYS_DIALOG_GIVE_WEAPON:
898
		{
899
			if(response)
900
			{
901
				if(!inputtext[0])
902
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_GIVE_WEAPON, DIALOG_STYLE_INPUT, "Give weapon", "Enter the ID of the weapon which you want to give:", "Ok", "Close");
903
				else
904-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_ACHAT, 1, "Admin chat", "Write your message:", "Ok", "Close");
904+
905
					format(AdmSysInfo[playerid][asInput], ADMSYS_MAX_TAB_INPUT, "%s", inputtext);
906
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_GIVE_WEAPON_AMMO, DIALOG_STYLE_INPUT, "Give weapon", "Enter the number of ammo which you want to give:", "Ok", "Back");
907
				}
908-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_SPAWN_VEH, 1, "Teleport vehicle to respawn", "Enter the ID of vehicle which you want to spawn:", "Ok", "Close");
908+
909
			return 1;
910-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_ASAY, 1, "Message from admin", "Write your message:", "Ok", "Close");
910+
911
		case ADMSYS_DIALOG_GIVE_WEAPON_AMMO:
912
		{
913-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_GOTO_VEH, 1, "Teleport to vehicle", "Enter the ID of vehicle to which you want to teleport:", "Ok", "Close");
913+
914
			{
915-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_BAN_IP, 1, "Block an IP address", "Enter the IP address which you want to block:", "Ok", "Close");
915+
916
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_GIVE_WEAPON_AMMO, DIALOG_STYLE_INPUT, "Give weapon", "Enter the number of ammo which you want to give:", "Ok", "Back");
917
				else
918-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_REPAIR_VEH, 1, "Repair vehicle", "Enter the ID of vehicle which you want to repair:", "Ok", "Close");
918+
919
					static strtmp[32];
920-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_UNBAN_IP, 1, "Unblock IP address", "Enter the IP address which you want to unblock:", "Ok", "Close");
920+
921
					AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
922
					admsys_cmd_giveweapon(playerid, strtmp);
923-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_WEATHER, 1, "Set weather", "Enter the ID of the weather which you want to set:", "Ok", "Close");
923+
924
			}
925-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_TIME, 1, "Set the time of day", "Enter the hour which you want to set:", "Ok", "Close");
925+
			else ShowPlayerDialog(playerid, ADMSYS_DIALOG_GIVE_WEAPON, DIALOG_STYLE_INPUT, "Give weapon", "Enter the ID of the weapon which you want to give:", "Ok", "Close");
926
			return 1;
927-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_DESTROY_VEH, 1, "Destroy vehicle", "Enter the ID of vehicle which you want to destroy:", "Ok", "Close");
927+
928
		case ADMSYS_DIALOG_APANEL:
929-
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH, 1, "Create vehicle", "Enter vehicle model which you want to create:", "Ok", "Close");
929+
930
			if(response)
931
			{
932
				switch(listitem)
933
				{
934
					case 0:
935
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_ACHAT, DIALOG_STYLE_INPUT, "Admin chat", "Write your message:", "Ok", "Close");
936
					case 1: admsys_cmd_ahelp(playerid, "\1");
937
					case 2: admsys_cmd_admins(playerid, "\1");
938
					case 3:
939
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_SPAWN_VEH, DIALOG_STYLE_INPUT, "Teleport vehicle to respawn", "Enter the ID of vehicle which you want to spawn:", "Ok", "Close");
940
					case 4:
941
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_ASAY, DIALOG_STYLE_INPUT, "Message from admin", "Write your message:", "Ok", "Close");
942
					case 5: admsys_cmd_suspectlist(playerid, "\1");
943
					case 6:
944
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_GOTO_VEH, DIALOG_STYLE_INPUT, "Teleport to vehicle", "Enter the ID of vehicle to which you want to teleport:", "Ok", "Close");
945
					case 7:
946
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_BAN_IP, DIALOG_STYLE_INPUT, "Block an IP address", "Enter the IP address which you want to block:", "Ok", "Close");
947
					case 8: admsys_cmd_cc(playerid, "\1");
948
					case 9:
949
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_REPAIR_VEH, DIALOG_STYLE_INPUT, "Repair vehicle", "Enter the ID of vehicle which you want to repair:", "Ok", "Close");
950
					case 10:
951
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_UNBAN_IP, DIALOG_STYLE_INPUT, "Unblock IP address", "Enter the IP address which you want to unblock:", "Ok", "Close");
952
					case 11: admsys_cmd_getall(playerid, "\1");
953
					case 12:
954
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_WEATHER, DIALOG_STYLE_INPUT, "Set weather", "Enter the ID of the weather which you want to set:", "Ok", "Close");
955
					case 13:
956
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_TIME, DIALOG_STYLE_INPUT, "Set the time of day", "Enter the hour which you want to set:", "Ok", "Close");
957
					case 14:
958
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_DESTROY_VEH, DIALOG_STYLE_INPUT, "Destroy vehicle", "Enter the ID of vehicle which you want to destroy:", "Ok", "Close");
959
					case 15:
960
						ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH, DIALOG_STYLE_INPUT, "Create vehicle", "Enter vehicle model which you want to create:", "Ok", "Close");
961
					case 16:
962-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_ACHAT, 1, "Admin chat", "Write your message:", "Ok", "Close");
962+
963
						if(AdmSysInfo[playerid][asLastAction])
964
						{
965
							switch(AdmSysInfo[playerid][asLastAction])
966
							{
967
								case 1: SetPlayerHealth(AdmSysInfo[playerid][asLastActionID], AdmSysInfo[playerid][asLastFloatData]);
968
								case 2: SetPlayerArmour(AdmSysInfo[playerid][asLastActionID], AdmSysInfo[playerid][asLastFloatData]);
969
								case 3:
970
								{
971
									ResetPlayerMoney(AdmSysInfo[playerid][asLastActionID]);
972
									GivePlayerMoney(AdmSysInfo[playerid][asLastActionID], AdmSysInfo[playerid][asLastIntData][0]);
973
								}
974
								case 4: SetPlayerSkin(AdmSysInfo[playerid][asLastActionID], AdmSysInfo[playerid][asLastIntData][0]);
975
								case 5: SetPlayerInterior(AdmSysInfo[playerid][asLastActionID], AdmSysInfo[playerid][asLastIntData][0]);
976
								case 6: SetPlayerVirtualWorld(AdmSysInfo[playerid][asLastActionID], AdmSysInfo[playerid][asLastIntData][0]);
977
								case 7:
978
									GivePlayerWeapon(AdmSysInfo[playerid][asLastActionID], AdmSysInfo[playerid][asLastIntData][0], -AdmSysInfo[playerid][asLastIntData][1]);
979
							}
980
							AdmSysInfo[playerid][asLastAction] = 0;
981-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_ASAY, 1, "Message from admin", "Write your message:", "Ok", "Close");
981+
982
						}
983
					}
984
				}
985
			}
986
			return 1;
987
		}
988
		case ADMSYS_DIALOG_ACHAT:
989
		{
990
			if(response)
991-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_GOTO_VEH, 1, "Teleport to vehicle", "Enter the ID of vehicle to which you want to teleport:", "Ok", "Close");
991+
992
				if(!inputtext[0])
993
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_ACHAT, DIALOG_STYLE_INPUT, "Admin chat", "Write your message:", "Ok", "Close");
994
				else admsys_cmd_achat(playerid, inputtext);
995
			}
996
			return 1;
997
		}
998
		case ADMSYS_DIALOG_SPAWN_VEH:
999
		{
1000
			if(response)
1001-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_BAN_IP, 1, "Block an IP address", "Enter the IP address which you want to block:", "Ok", "Close");
1001+
1002
				if(!inputtext[0]) admsys_cmd_spawnveh(playerid, "\1");
1003
				else admsys_cmd_spawnveh(playerid, inputtext);
1004
			}
1005
			return 1;
1006
		}
1007
		case ADMSYS_DIALOG_ASAY:
1008
		{
1009
			if(response)
1010
			{
1011
				if(!inputtext[0])
1012
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_ASAY, DIALOG_STYLE_INPUT, "Message from admin", "Write your message:", "Ok", "Close");
1013
				else admsys_cmd_asay(playerid, inputtext);
1014
			}
1015
			return 1;
1016
		}
1017
		case ADMSYS_DIALOG_GOTO_VEH:
1018
		{
1019
			if(response)
1020-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_UNBAN_IP, 1, "Unblock IP address", "Enter the IP address which you want to unblock:", "Ok", "Close");
1020+
1021
				if(!inputtext[0])
1022
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_GOTO_VEH, DIALOG_STYLE_INPUT, "Teleport to vehicle", "Enter the ID of vehicle to which you want to teleport:", "Ok", "Close");
1023
				else admsys_cmd_gotoveh(playerid, inputtext);
1024
			}
1025
			return 1;
1026
		}
1027
		case ADMSYS_DIALOG_BAN_IP:
1028
		{
1029
			if(response)
1030-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_WEATHER, 1, "Set weather", "Enter the ID of the weather which you want to set:", "Ok", "Close");
1030+
1031
				if(!inputtext[0])
1032
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_BAN_IP, DIALOG_STYLE_INPUT, "Block an IP address", "Enter the IP address which you want to block:", "Ok", "Close");
1033
				else admsys_cmd_banip(playerid, inputtext);
1034
			}
1035
			return 1;
1036
		}
1037
		case ADMSYS_DIALOG_REPAIR_VEH:
1038
		{
1039
			if(response)
1040-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_TIME, 1, "Set the time of day", "Enter the hour which you want to set:", "Ok", "Close");
1040+
1041
				if(!inputtext[0]) admsys_cmd_repairveh(playerid, "\1");
1042
				else admsys_cmd_repairveh(playerid, inputtext);
1043
			}
1044
			return 1;
1045
		}
1046
		case ADMSYS_DIALOG_UNBAN_IP:
1047
		{
1048
			if(response)
1049
			{
1050
				if(!inputtext[0])
1051
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_UNBAN_IP, DIALOG_STYLE_INPUT, "Unblock IP address", "Enter the IP address which you want to unblock:", "Ok", "Close");
1052
				else admsys_cmd_unbanip(playerid, inputtext);
1053
			}
1054
			return 1;
1055
		}
1056
		case ADMSYS_DIALOG_SET_WEATHER:
1057
		{
1058
			if(response)
1059-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH, 1, "Create vehicle", "Enter vehicle model which you want to create:", "Ok", "Close");
1059+
1060
				if(!inputtext[0])
1061
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_WEATHER, DIALOG_STYLE_INPUT, "Set weather", "Enter the ID of the weather which you want to set:", "Ok", "Close");
1062
				else admsys_cmd_setweather(playerid, inputtext);
1063-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH_COL_1, 1, "Create vehicle", "Enter the color 1 for vehicle which you want to create:", "Ok", "Back");
1063+
1064
			return 1;
1065
		}
1066
		case ADMSYS_DIALOG_SET_TIME:
1067
		{
1068
			if(response)
1069
			{
1070
				if(!inputtext[0])
1071
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_TIME, DIALOG_STYLE_INPUT, "Set the time of day", "Enter the hour which you want to set:", "Ok", "Close");
1072
				else admsys_cmd_settime(playerid, inputtext);
1073
			}
1074
			return 1;
1075
		}
1076-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH_COL_2, 1, "Create vehicle", "Enter the color 2 for vehicle which you want to create:", "Ok", "Back");
1076+
1077
		{
1078
			if(response)
1079-
			else ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH, 1, "Create vehicle", "Enter vehicle model which you want to create:", "Ok", "Close");
1079+
1080
				if(!inputtext[0]) admsys_cmd_destroyveh(playerid, "\1");
1081
				else admsys_cmd_destroyveh(playerid, inputtext);
1082
			}
1083
			return 1;
1084
		}
1085
		case ADMSYS_DIALOG_CREATE_VEH:
1086
		{
1087-
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH_COL_2, 1, "Create vehicle", "Enter the color 2 for vehicle which you want to create:", "Ok", "Back");
1087+
1088
			{
1089
				if(!inputtext[0])
1090
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH, DIALOG_STYLE_INPUT, "Create vehicle", "Enter vehicle model which you want to create:", "Ok", "Close");
1091
				else
1092
				{
1093
					format(AdmSysInfo[playerid][asInput], ADMSYS_MAX_TAB_INPUT, "%s", inputtext);
1094
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH_COL_1, DIALOG_STYLE_INPUT, "Create vehicle", "Enter the color 1 for vehicle which you want to create:", "Ok", "Back");
1095-
			else ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH_COL_1, 1, "Create vehicle", "Enter the color 1 for vehicle which you want to create:", "Ok", "Back");
1095+
1096
			}
1097
			return 1;
1098
		}
1099
		case ADMSYS_DIALOG_CREATE_VEH_COL_1:
1100-
			if(response && -1 < listitem < sizeof SuspectList)
1100+
1101
			if(response)
1102
			{
1103
				if(!inputtext[0]) admsys_cmd_veh(playerid, AdmSysInfo[playerid][asInput]);
1104
				else
1105
				{
1106
					format(AdmSysInfo[playerid][asInput2], ADMSYS_MAX_TAB_INPUT, "%s", inputtext);
1107
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH_COL_2, DIALOG_STYLE_INPUT, "Create vehicle", "Enter the color 2 for vehicle which you want to create:", "Ok", "Back");
1108
				}
1109
			}
1110
			else ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH, DIALOG_STYLE_INPUT, "Create vehicle", "Enter vehicle model which you want to create:", "Ok", "Close");
1111
			return 1;
1112
		}
1113
		case ADMSYS_DIALOG_CREATE_VEH_COL_2:
1114
		{
1115
			if(response)
1116
			{
1117
				if(!inputtext[0])
1118
					ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH_COL_2, DIALOG_STYLE_INPUT, "Create vehicle", "Enter the color 2 for vehicle which you want to create:", "Ok", "Back");
1119
				else
1120
				{
1121
					static strtmp[32];
1122
					format(strtmp, sizeof strtmp, "%s %s %s", AdmSysInfo[playerid][asInput], AdmSysInfo[playerid][asInput2], inputtext);
1123
					admsys_cmd_veh(playerid, strtmp);
1124
				}
1125
			}
1126
			else ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH_COL_1, DIALOG_STYLE_INPUT, "Create vehicle", "Enter the color 1 for vehicle which you want to create:", "Ok", "Back");
1127
			return 1;
1128
		}
1129
		case ADMSYS_DIALOG_SUSPECT_LIST:
1130
		{
1131
			if(response && 0 <= listitem < sizeof SuspectList)
1132
			{
1133
				if(!StartSpectating(playerid, SuspectList[listitem]))
1134
				{
1135
					SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player disconnected");
1136
					admsys_cmd_suspectlist(playerid, "\1");
1137
				}
1138
				else if(AdmSysInfo[playerid][asSpecID] == SuspectList[listitem]) RemovePlayerFromSuspectList(SuspectList[listitem]);
1139
			}
1140
			return 1;
1141
		}
1142
	}
1143
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
1144
		&& defined admsys_OnDialogResponse
1145
		return admsys_OnDialogResponse(playerid, dialogid, response, listitem, inputtext);
1146
	#else
1147
		return 0;
1148
	#endif
1149
}
1150
1151
#if !defined _inc_y_hooks && !defined _INC_y_hooks
1152
	#if defined _ALS_OnDialogResponse
1153
		#undef OnDialogResponse
1154
	#else
1155
		#define _ALS_OnDialogResponse
1156
	#endif
1157
	#define OnDialogResponse admsys_OnDialogResponse
1158
	#if defined admsys_OnDialogResponse
1159
		forward admsys_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
1160
	#endif
1161
#endif
1162
1163
#if defined _inc_y_hooks || defined _INC_y_hooks
1164
	hook OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
1165
#else
1166
	public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
1167
#endif
1168
{
1169
	#if defined foreach
1170
		foreach(new i : Player)
1171
	#else
1172
		for(new i = GetPlayerPoolSize(); i != -1; --i)
1173
		{
1174
			if(IsPlayerConnected(i))
1175
	#endif
1176
	{
1177-
	if(GetPlayerState(playerid) == 9 && AdmSysInfo[playerid][asSpecID] != INVALID_PLAYER_ID)
1177+
1178
	}
1179
	#if !defined foreach
1180
		}
1181
	#endif
1182
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
1183
		&& defined admsys_OnPlayerInteriorChange
1184
		return admsys_OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid);
1185
	#else
1186
		return 1;
1187
	#endif
1188
}
1189
1190
#if !defined _inc_y_hooks && !defined _INC_y_hooks
1191
	#if defined _ALS_OnPlayerInteriorChange
1192
		#undef OnPlayerInteriorChange
1193
	#else
1194
		#define _ALS_OnPlayerInteriorChange
1195
	#endif
1196
	#define OnPlayerInteriorChange admsys_OnPlayerInteriorChange
1197
	#if defined admsys_OnPlayerInteriorChange
1198
		forward admsys_OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid);
1199
	#endif
1200
#endif
1201
1202
#if defined _inc_y_hooks || defined _INC_y_hooks
1203
	hook OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
1204
#else
1205
	public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
1206
#endif
1207
{
1208
	if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING && AdmSysInfo[playerid][asSpecID] != INVALID_PLAYER_ID)
1209
	{
1210
		if(newkeys & KEY_ANALOG_LEFT)
1211
		{
1212
			new ud = AdmSysInfo[playerid][asSpecID];
1213
			AdmSysInfo[playerid][asSpecID]--;
1214
			while(!IsPlayerConnected(AdmSysInfo[playerid][asSpecID]) || IsPlayerSpectating(AdmSysInfo[playerid][asSpecID]) || AdmSysInfo[playerid][asSpecID] == playerid)
1215
			{
1216
				AdmSysInfo[playerid][asSpecID]--;
1217
				if(AdmSysInfo[playerid][asSpecID] < 0) AdmSysInfo[playerid][asSpecID] = GetPlayerPoolSize();
1218
				if(AdmSysInfo[playerid][asSpecID] == ud) break;
1219
			}
1220
			if(AdmSysInfo[playerid][asSpecID] != ud) UpdateSpectating(playerid);
1221
		}
1222
		else if(newkeys & KEY_ANALOG_RIGHT)
1223
		{
1224
			new ud = AdmSysInfo[playerid][asSpecID];
1225
			AdmSysInfo[playerid][asSpecID]++;
1226
			while(!IsPlayerConnected(AdmSysInfo[playerid][asSpecID]) || IsPlayerSpectating(AdmSysInfo[playerid][asSpecID]) || AdmSysInfo[playerid][asSpecID] == playerid)
1227
			{
1228
				AdmSysInfo[playerid][asSpecID]++;
1229
				if(AdmSysInfo[playerid][asSpecID] > GetPlayerPoolSize()) AdmSysInfo[playerid][asSpecID] = 0;
1230
				if(AdmSysInfo[playerid][asSpecID] == ud) break;
1231
			}
1232
			if(AdmSysInfo[playerid][asSpecID] != ud) UpdateSpectating(playerid);
1233
		}
1234
	}
1235
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
1236
		&& defined admsys_OnPlayerKeyStateChange
1237
		return admsys_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
1238
	#else
1239
		return 1;
1240
	#endif
1241
}
1242
1243
#if !defined _inc_y_hooks && !defined _INC_y_hooks
1244
	#if defined _ALS_OnPlayerKeyStateChange
1245-
		ShowPlayerDialog(playerid, ADMSYS_DIALOG_TAB_PANEL, 2, strtmp2, strtmp, "Ok", "Close");
1245+
1246
	#else
1247
		#define _ALS_OnPlayerKeyStateChange
1248
	#endif
1249
	#define OnPlayerKeyStateChange admsys_OnPlayerKeyStateChange
1250
	#if defined admsys_OnPlayerKeyStateChange
1251
		forward admsys_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
1252
	#endif
1253
#endif
1254
1255
#if defined _inc_y_hooks || defined _INC_y_hooks
1256
	hook OnPlayerClickPlayer(playerid, clickedplayerid, source)
1257
#else
1258
	public OnPlayerClickPlayer(playerid, clickedplayerid, source)
1259
#endif
1260
{
1261
	if(IsPlayerAdminEx(playerid))
1262
	{
1263
		static strtmp[351], strtmp2[43], strname[24];
1264
		strtmp[0] = EOS;
1265
		AdmSysInfo[playerid][asTabPanel] = clickedplayerid;
1266
		GetPlayerName(clickedplayerid, strname, sizeof strname);
1267
		format(strtmp2, sizeof strtmp2, "Admin panel for %s", strname);
1268
		strcat(strtmp, "Show statistics\nRespond on report\nRemove from vehicle");
1269
		if(IsPlayerAdminEx(playerid, 2)) strcat(strtmp, "\nBegin spectate\n\
1270
		Mute\nUnmute\nGive warn\nKick\nFreeze\nUnfreeze\nSlap\nTeleport to player");
1271
		if(IsPlayerAdminEx(playerid, 3)) strcat(strtmp, "\nTeleport to yourself\nBan\n\
1272
		Check for infinite health\nTeleport to respawn\nRemove warn");
1273
		if(IsPlayerAdminEx(playerid, 4)) strcat(strtmp, "\nSet health\nSet armour\nSet money\n\
1274
		Set skin\nSet interior\nSet virtual world\nGive weapon");
1275
		if(IsPlayerAdminEx(playerid, 5)) strcat(strtmp, "\nSilent ban\nSilent kick");
1276
		ShowPlayerDialog(playerid, ADMSYS_DIALOG_TAB_PANEL, DIALOG_STYLE_LIST, strtmp2, strtmp, "Ok", "Close");
1277
	}
1278
	#if !defined _inc_y_hooks && !defined _INC_y_hooks\
1279
		&& defined admsys_OnPlayerClickPlayer
1280
		return admsys_OnPlayerClickPlayer(playerid, clickedplayerid, source);
1281
	#else
1282
		return 1;
1283
	#endif
1284
}
1285
1286
#if !defined _inc_y_hooks && !defined _INC_y_hooks
1287
	#if defined _ALS_OnPlayerClickPlayer
1288
		#undef OnPlayerClickPlayer
1289
	#else
1290
		#define _ALS_OnPlayerClickPlayer
1291
	#endif
1292
	#define OnPlayerClickPlayer admsys_OnPlayerClickPlayer
1293
	#if defined admsys_OnPlayerClickPlayer
1294
		forward admsys_OnPlayerClickPlayer(playerid, clickedplayerid, source);
1295
	#endif
1296-
	if(AdmSysInfo[playerid][asSpecID] != INVALID_PLAYER_ID)
1296+
1297
1298
admsys_fpublic BanWithDelay(playerid) return Ban(playerid);
1299
1300
admsys_fpublic KickWithDelay(playerid) return Kick(playerid);
1301
1302
admsys_fpublic UpdateMuteTime()
1303
{
1304
	#if defined foreach
1305
		foreach(new i : Player)
1306
	#else
1307
	for(new i = GetPlayerPoolSize(); i != -1; --i)
1308
	{
1309
		if(IsPlayerConnected(i))
1310
	#endif
1311
	{
1312
		if(AdmSysInfo[i][asMuteTime] > 0)
1313
		{
1314
			AdmSysInfo[i][asMuteTime]--;
1315
			if(AdmSysInfo[i][asMuteTime] < 1)
1316
				SendClientMessage(i, ADMSYS_DEFAULT_COLOR, "Time of mute has expired");
1317
		}
1318
	}
1319
	#if !defined foreach
1320
		}
1321
	#endif
1322
	return 1;
1323
}
1324
1325
admsys_fpublic UpdateSpecInfo(playerid)
1326
{
1327
	if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING && AdmSysInfo[playerid][asSpecID] != INVALID_PLAYER_ID)
1328-
			if(!hpdiff && !ardiff)
1328+
1329
		static strtmp[101], sname[24], sip[16];
1330
		GetPlayerIp(AdmSysInfo[playerid][asSpecID], sip, sizeof sip);
1331
		GetPlayerName(AdmSysInfo[playerid][asSpecID], sname, sizeof sname);
1332-
				ShowPlayerDialog(playerid, ADMSYS_DIALOG_GMTEST, 0, "Check for GodMode", strtmp, "Close", "");
1332+
1333
		sname, AdmSysInfo[playerid][asSpecID], sip, GetPlayerPing(AdmSysInfo[playerid][asSpecID]));
1334
		SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(AdmSysInfo[playerid][asSpecID]));
1335
		AdmSysInfo[playerid][asUpdTimer] = SetTimerEx("UpdateSpecInfo", 1000, false, "d", playerid);
1336
		GameTextForPlayer(playerid, strtmp, 1500, 3);
1337
		return 1;
1338-
				ShowPlayerDialog(playerid, ADMSYS_DIALOG_GMTEST, 0, "Check for GodMode", strtmp, "Close", "");
1338+
1339
	return 0;
1340
}
1341
1342
admsys_fpublic GmTest(playerid)
1343
{
1344
	if(AdmSysInfo[playerid][asGmTestID] != INVALID_PLAYER_ID)
1345
	{
1346
		if(AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTest])
1347
		{
1348
			static strtmp[179];
1349
			new vehid, Float:nowhp, Float:nowar, Float:hpdiff, Float:ardiff;
1350
			vehid = GetPlayerVehicleID(AdmSysInfo[playerid][asGmTestID]);
1351
			if(vehid) GetVehicleHealth(vehid, nowhp);
1352
			else
1353
			{
1354
				GetPlayerHealth(AdmSysInfo[playerid][asGmTestID], nowhp);
1355
				GetPlayerArmour(AdmSysInfo[playerid][asGmTestID], nowar);
1356
			}
1357-
	if(AdmSysInfo[playerid][asMuteTime])
1357+
1358
			ardiff = AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTestAR] - nowar;
1359
			if(hpdiff == 0.0 && ardiff == 0.0)
1360
			{
1361
				format(strtmp, sizeof strtmp, "Before:\t%.1f health, %.1f armour\nAfter:\t%.1f health, %.1f armour\nHealth and armour hasn't decreased\n\nPerhaps the player uses GodMode.",
1362
				AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTestHP], AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTestAR], nowhp, nowar);
1363
				ShowPlayerDialog(playerid, ADMSYS_DIALOG_GMTEST, DIALOG_STYLE_MSGBOX, "Check for GodMode", strtmp, "Close", "");
1364
			}
1365
			else
1366
			{
1367
				format(strtmp, sizeof strtmp, "Before:\t%.1f health, %.1f armour\nAfter:\t%.1f health, %.1f armour\nHealth decreased by:\t%.1f\nArmour decreased by:\t%.1f\n\nGodMode isn't detected.\nHealth and armor restored.",
1368
				AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTestHP], AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTestAR], nowhp, nowar, hpdiff, ardiff);
1369
				ShowPlayerDialog(playerid, ADMSYS_DIALOG_GMTEST, DIALOG_STYLE_MSGBOX, "Check for GodMode", strtmp, "Close", "");
1370
				if(vehid) SetVehicleHealth(vehid, AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTestHP]);
1371
				else
1372
				{
1373
					SetPlayerHealth(AdmSysInfo[playerid][asGmTestID], AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTestHP]);
1374
					SetPlayerArmour(AdmSysInfo[playerid][asGmTestID], AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTestAR]);
1375
				}
1376
			}
1377
		}
1378
		AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTest] = false;
1379
		AdmSysInfo[playerid][asGmTestID] = INVALID_PLAYER_ID;
1380
	}
1381
	return 1;
1382
}
1383
1384
CMD:report(playerid, params[]) return admsys_cmd_report(playerid, params);
1385
admsys_cmd_report(playerid, params[])
1386
{
1387
	static strtmp[145];
1388
	if(AdmSysInfo[playerid][asMuteTime] > 0)
1389
	{
1390
		format(strtmp, sizeof strtmp, "You are muted. Remained mute time: %d minutes %d seconds",
1391
		floatround(AdmSysInfo[playerid][asMuteTime] / 60, floatround_tozero), AdmSysInfo[playerid][asMuteTime] % 60);
1392
		return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
1393
	}
1394
	if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /report [text]");
1395
	static strname[24];
1396-
		ShowPlayerDialog(playerid, ADMSYS_DIALOG_AHELP, 0, "Help with admin commands", AdmSysCmdsStr, "Ok", "");
1396+
1397
	format(strtmp, sizeof strtmp, "[Report] %s[%d]: %s", strname, playerid, params);
1398
	SendMessageToAdmins(1, ADMSYS_DEFAULT_COLOR, strtmp);
1399
	SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
1400
	return 1;
1401
}
1402
1403
CMD:achat(playerid, params[]) return admsys_cmd_achat(playerid, params);
1404
CMD:adminchat(playerid, params[]) return admsys_cmd_achat(playerid, params);
1405
admsys_cmd_achat(playerid, params[])
1406
{
1407
	if(IsPlayerAdminEx(playerid))
1408
	{
1409
		if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /achat [text]");
1410
		static strtmp[145], strname[24];
1411
		strtmp = "[Admin chat] ";
1412
		GetPlayerName(playerid, strname, sizeof strname);
1413
		strcat(strtmp, strname);
1414
		strcat(strtmp, ": ");
1415
		strcat(strtmp, params);
1416
		SendMessageToAdmins(1, ADMSYS_DEFAULT_COLOR, strtmp);
1417
	}
1418
	return 1;
1419
}
1420
1421
CMD:ahelp(playerid, params[]) return admsys_cmd_ahelp(playerid, params);
1422-
		ShowPlayerDialog(playerid, ADMSYS_DIALOG_STATS, 0, strtmp, strtmp2, "Ok", "");
1422+
1423
admsys_cmd_ahelp(playerid, params[])
1424
{
1425
	#pragma unused params
1426
	if(IsPlayerAdminEx(playerid))
1427
		ShowPlayerDialog(playerid, ADMSYS_DIALOG_AHELP, DIALOG_STYLE_MSGBOX, "Help with admin commands", AdmSysCmdsStr, "Ok", "");
1428
	return 1;
1429
}
1430
1431
CMD:showstats(playerid, params[]) return admsys_cmd_showstats(playerid, params);
1432
admsys_cmd_showstats(playerid, params[])
1433
{
1434
	if(IsPlayerAdminEx(playerid))
1435
	{
1436
		if(admsys_isnull(params)) params[0] = playerid;
1437
		else
1438
		{
1439
			if(!admsys_IsNumeric(params)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /showstats [id]");
1440
			params[0] = strval(params);
1441
			if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player not found");
1442
		}
1443
		new Float:ghealth, Float:garmour;
1444
		static strtmp[45], strtmp2[192], strname[24], gip[16];
1445
		GetPlayerName(params[0], strname, sizeof strname);
1446
		GetPlayerHealth(params[0], ghealth);
1447
		GetPlayerArmour(params[0], garmour);
1448
		GetPlayerIp(params[0], gip, sizeof gip);
1449
		format(strtmp, sizeof strtmp, "Information about %s", strname);
1450
		format(strtmp2, sizeof strtmp2, "Health: %.1f\nArmour: %.1f\nMoney: %d\nInterior: %d\nVirtual world: %d\nWanted level: %d\nIP address: %s\nPing: %d\nWeapon: %d\nAmmo: %d\nScore: %d\nSkin: %d",
1451
		ghealth, garmour, GetPlayerMoney(params[0]), GetPlayerInterior(params[0]), GetPlayerVirtualWorld(params[0]), GetPlayerWantedLevel(params[0]), gip, GetPlayerPing(params[0]),
1452
		GetPlayerWeapon(params[0]), GetPlayerAmmo(params[0]), GetPlayerScore(params[0]), GetPlayerSkin(params[0]));
1453
		ShowPlayerDialog(playerid, ADMSYS_DIALOG_STATS, DIALOG_STYLE_MSGBOX, strtmp, strtmp2, "Ok", "");
1454
	}
1455
	return 1;
1456
}
1457
1458
CMD:answer(playerid, params[]) return admsys_cmd_answer(playerid, params);
1459
admsys_cmd_answer(playerid, params[])
1460
{
1461
	if(IsPlayerAdminEx(playerid))
1462
	{
1463
		if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /answer [id] [text]");
1464
		new pos;
1465
		static strtmp[145];
1466
		while(params[pos] > ' ') pos++;
1467
		strmid(strtmp, params, 0, pos);
1468
		if(!admsys_IsNumeric(strtmp)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /answer [id] [text]");
1469
		new giveid = strval(strtmp);
1470
		if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player not found");
1471
		while(params[pos] == ' ') pos++;
1472-
		ShowPlayerDialog(playerid, ADMSYS_DIALOG_APANEL, 2, "Admin panel", strtmp, "Ok", "Close");
1472+
1473
		static strname[24], strname2[24];
1474
		GetPlayerName(playerid, strname, sizeof strname);
1475
		GetPlayerName(giveid, strname2, sizeof strname2);
1476
		format(strtmp, sizeof strtmp, "[Response to report %s] %s: %s", strname2, strname, params[pos]);
1477
		SendMessageToAdmins(1, ADMSYS_DEFAULT_COLOR, strtmp);
1478
		strtmp = "[Response to report]: ";
1479
		strcat(strtmp, params[pos]);
1480
		SendClientMessage(giveid, ADMSYS_DEFAULT_COLOR, strtmp);
1481
	}
1482
	return 1;
1483
}
1484
1485
CMD:apanel(playerid, params[]) return admsys_cmd_apanel(playerid, params);
1486
CMD:adminpanel(playerid, params[]) return admsys_cmd_apanel(playerid, params);
1487
admsys_cmd_apanel(playerid, params[])
1488
{
1489
	#pragma unused params
1490
	if(IsPlayerAdminEx(playerid))
1491
	{
1492
		static strtmp[374];
1493
		strtmp[0] = EOS;
1494
		strcat(strtmp, "Admin chat\nHelp with admin commands\nView a list of online administrators");
1495
		if(IsPlayerAdminEx(playerid, 2)) strcat(strtmp, "\nTeleport vehicle to respawn\n\
1496
		Message: 'Administrator: [text]'");
1497
		if(IsPlayerAdminEx(playerid, 3)) strcat(strtmp, "\nList of suspects players\n\
1498
		Teleport to vehicle\nBlock an IP address\nClear the chat");
1499
		if(IsPlayerAdminEx(playerid, 4)) strcat(strtmp, "\nRepair vehicle\nUnblock IP address");
1500-
		ShowPlayerDialog(playerid, ADMSYS_DIALOG_ADMINS, 0, "Administrators online", strtmp, "Ok", "");
1500+
1501
		Set the time of day\nDestroy vehicle\nCreate vehicle");
1502
		strcat(strtmp, "\nUndo the last command");
1503
		ShowPlayerDialog(playerid, ADMSYS_DIALOG_APANEL, DIALOG_STYLE_LIST, "Admin panel", strtmp, "Ok", "Close");
1504
	}
1505
	return 1;
1506
}
1507
1508
CMD:admins(playerid, params[]) return admsys_cmd_admins(playerid, params);
1509
admsys_cmd_admins(playerid, params[])
1510
{
1511
	#pragma unused params
1512
	if(IsPlayerAdminEx(playerid))
1513
	{
1514
		static strtmp[296];
1515
		strtmp[0] = EOS;
1516
		static strtmp2[59], strtmp3[24];
1517
		#if defined foreach
1518
		foreach(new i : Player)
1519
		#else
1520
		for(new i = GetPlayerPoolSize(); i != -1; --i)
1521
		#endif
1522
		{
1523
			if(IsPlayerAdminEx(i))
1524
			{
1525
				GetPlayerName(i, strtmp3, sizeof strtmp3);
1526
				format(strtmp2, sizeof strtmp2, "Administrator %s[%d] [Level %d]\n", strtmp3, i, GetPlayerAdminLevel(i));
1527
				strcat(strtmp, strtmp2);
1528
			}
1529
		}
1530
		if(!strtmp[0]) strtmp = "Right now no administrators online";
1531
		ShowPlayerDialog(playerid, ADMSYS_DIALOG_ADMINS, DIALOG_STYLE_MSGBOX, "Administrators online", strtmp, "Ok", "");
1532
	}
1533
	return 1;
1534
}
1535
1536
CMD:eject(playerid, params[]) return admsys_cmd_eject(playerid, params);
1537
admsys_cmd_eject(playerid, params[])
1538
{
1539
	if(IsPlayerAdminEx(playerid))
1540
	{
1541
		new strtmp[66];
1542
		if(admsys_isnull(params))
1543
		{
1544
			format(strtmp, sizeof strtmp, "%d", playerid);
1545
			return admsys_cmd_eject(playerid, strtmp);
1546
		}
1547
		static strname[24], strname2[24];
1548
		GetPlayerName(playerid, strname, sizeof strname);
1549
		for(new i = 1, pos, oldpos, giveid, j; i <= ADMSYS_MAX_GIVE_PLAYERS_IN_CMD; i++)
1550
		{
1551
			while(params[pos] == ' ') pos++;
1552
			if(params[pos])
1553
			{
1554
				oldpos = pos;
1555
				while(params[pos] > ' ') pos++;
1556
				strmid(strtmp, params, oldpos, pos);
1557
				if(!admsys_IsNumeric(strtmp))
1558
				{
1559
					strtmp = "Use: /eject [id]";
1560
					if(i > 1)
1561
					{
1562
						for(j = 2; j <= i; j++)
1563
						{
1564
							format(strname2, sizeof strname2, " [id %d]", j);
1565
							strcat(strtmp, strname2);
1566
						}
1567
					}
1568
					return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
1569
				}
1570
				giveid = strval(strtmp);
1571
				if(!IsPlayerConnected(giveid))
1572
				{
1573
					if(i == 1) strtmp = "Player not found";
1574
					else format(strtmp, sizeof strtmp, "Player %d not found", i);
1575
					SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
1576
				}
1577
				else if(!IsPlayerInAnyVehicle(giveid))
1578
				{
1579
					if(i == 1)
1580
					{
1581
						if(giveid == playerid) strtmp = "You are not in vehicle";
1582
						else strtmp = "Player is not in vehicle";
1583
					}
1584
					else format(strtmp, sizeof strtmp, "Player %d is not in vehicle", i);
1585
					SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
1586
				}
1587
				else
1588
				{
1589
					RemovePlayerFromVehicle(giveid);
1590
					GetPlayerName(giveid, strname2, sizeof strname2);
1591
					format(strtmp, sizeof strtmp, "You removed %s[%d] from vehicle", strname2, giveid);
1592
					SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
1593
					format(strtmp, sizeof strtmp, "Administrator %s removed you from vehicle", strname);
1594
					SendClientMessage(giveid, ADMSYS_DEFAULT_COLOR, strtmp);
1595
				}
1596
			}
1597
		}
1598
	}
1599
	return 1;
1600
}
1601
1602
CMD:spec(playerid, params[]) return admsys_cmd_spec(playerid, params);
1603
admsys_cmd_spec(playerid, params[])
1604
{
1605
	if(IsPlayerAdminEx(playerid, 2))
1606
	{
1607
		if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /spec [id]");
1608
		if(!strcmp(params, "off", true)) return admsys_cmd_specoff(playerid, "\1");
1609
		if(!strcmp(params, "update", true)) return admsys_cmd_specupdate(playerid, "\1");
1610
		if(!admsys_IsNumeric(params)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /spec [id]");
1611
		params[0] = strval(params);
1612
		if(!StartSpectating(playerid, params[0])) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player not found");
1613
	}
1614
	return 1;
1615
}
1616
1617
CMD:specupdate(playerid, params[]) return admsys_cmd_specupdate(playerid, params);
1618
admsys_cmd_specupdate(playerid, params[])
1619
{
1620
	#pragma unused params
1621
	if(IsPlayerAdminEx(playerid, 2)) UpdateSpectating(playerid);
1622
	return 1;
1623
}
1624
1625
CMD:specoff(playerid, params[]) return admsys_cmd_specoff(playerid, params);
1626
admsys_cmd_specoff(playerid, params[])
1627
{
1628
	#pragma unused params
1629
	if(IsPlayerAdminEx(playerid, 2)) StopSpectating(playerid);
1630
	return 1;
1631
}
1632
1633
CMD:spawnveh(playerid, params[]) return admsys_cmd_spawnveh(playerid, params);
1634
admsys_cmd_spawnveh(playerid, params[])
1635
{
1636
	if(IsPlayerAdminEx(playerid, 2))
1637
	{
1638
		if(admsys_isnull(params))
1639
		{
1640
			if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "You are not in vehicle");
1641
			params[0] = GetPlayerVehicleID(playerid);
1642
		}
1643-
		if(AdmSysInfo[giveid][asMuteTime]) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player is already muted");
1643+
1644
		{
1645
			if(!admsys_IsNumeric(params))
1646
				return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /spawnveh [vehicle id]");
1647
			params[0] = strval(params);
1648
			if(!GetVehicleModel(params[0]))
1649
				return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Vehicle is not found");
1650
		}
1651
		static strtmp[24];
1652
		SetVehicleToRespawn(params[0]);
1653-
		if(!(0 < gtime < 61)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use time for 1 to 60 minutes");
1653+
1654
		SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
1655
	}
1656
	return 1;
1657
}
1658
1659
CMD:mute(playerid, params[]) return admsys_cmd_mute(playerid, params);
1660
admsys_cmd_mute(playerid, params[])
1661
{
1662
	if(IsPlayerAdminEx(playerid, 2))
1663
	{
1664
		if(admsys_isnull(params))
1665
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /mute [id] [time] [reason]");
1666
		static strtmp[145];
1667
		new pos, oldpos;
1668
		while(params[pos] > ' ') pos++;
1669
		strmid(strtmp, params, 0, pos);
1670
		if(!admsys_IsNumeric(strtmp))
1671
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /mute [id] [time] [reason]");
1672
		new giveid = strval(strtmp);
1673
		if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player not found");
1674
		if(AdmSysInfo[giveid][asMuteTime] > 0) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player is already muted");
1675
		if(GetPlayerAdminLevel(playerid) <= GetPlayerAdminLevel(giveid) && playerid != giveid)
1676
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "You can't apply this action to the administrator");
1677
		while(params[pos] == ' ') pos++;
1678
		oldpos = pos;
1679
		while(params[pos] > ' ') pos++;
1680
		strmid(strtmp, params, oldpos, pos);
1681
		if(!params[oldpos] || !admsys_IsNumeric(strtmp))
1682
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /mute [id] [time] [reason]");
1683
		new gtime = strval(strtmp);
1684
		if(!(1 <= gtime <= 60)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use time for 1 to 60 minutes");
1685
		while(params[pos] == ' ') pos++;
1686
		if(!params[pos]) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /mute [id] [time] [reason]");
1687
		static strname[24], strname2[24];
1688
		AdmSysInfo[giveid][asMuteTime] = gtime * 60;
1689
		GetPlayerName(playerid, strname, sizeof strname);
1690
		GetPlayerName(giveid, strname2, sizeof strname2);
1691
		format(strtmp, sizeof strtmp, "Administrator %s muted %s[%d] on %d minutes. Reason: %s", strname, strname2, giveid, gtime, params[pos]);
1692
		#if defined SEND_ACTION_MESSAGES_TO_ALL
1693
			SendClientMessageToAll(ADMSYS_DEFAULT_COLOR, strtmp);
1694
		#else
1695
			SendMessageToAdmins(2, ADMSYS_DEFAULT_COLOR, strtmp);
1696
		#endif
1697
		format(strtmp, sizeof strtmp, "Administrator %s muted you on %d minutes. Reason: %s", strname, gtime, params[pos]);
1698
		SendClientMessage(giveid, ADMSYS_DEFAULT_COLOR, strtmp);
1699
	}
1700
	return 1;
1701
}
1702
1703
CMD:unmute(playerid, params[]) return admsys_cmd_unmute(playerid, params);
1704
admsys_cmd_unmute(playerid, params[])
1705
{
1706
	if(IsPlayerAdminEx(playerid, 2))
1707
	{
1708
		new strtmp[92];
1709
		if(admsys_isnull(params))
1710
		{
1711
			format(strtmp, sizeof strtmp, "%d", playerid);
1712
			return admsys_cmd_unmute(playerid, strtmp);
1713-
				else if(!AdmSysInfo[giveid][asMuteTime])
1713+
1714
		static strname[24], strname2[24];
1715
		GetPlayerName(playerid, strname, sizeof strname);
1716
		for(new i = 1, pos, oldpos, giveid, j; i <= ADMSYS_MAX_GIVE_PLAYERS_IN_CMD; i++)
1717
		{
1718
			while(params[pos] == ' ') pos++;
1719
			if(params[pos])
1720
			{
1721
				oldpos = pos;
1722
				while(params[pos] > ' ') pos++;
1723
				strmid(strtmp, params, oldpos, pos);
1724
				if(!admsys_IsNumeric(strtmp))
1725
				{
1726
					strtmp = "Use: /unmute [id]";
1727
					if(i > 1)
1728
					{
1729
						for(j = 2; j <= i; j++)
1730
						{
1731
							format(strname2, sizeof strname2, " [id %d]", j);
1732
							strcat(strtmp, strname2);
1733
						}
1734
					}
1735
					return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
1736
				}
1737
				giveid = strval(strtmp);
1738
				if(!IsPlayerConnected(giveid))
1739
				{
1740
					if(i == 1) strtmp = "Player not found";
1741
					else format(strtmp, sizeof strtmp, "Player %d not found", i);
1742
					SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
1743
				}
1744
				else if(AdmSysInfo[giveid][asMuteTime] < 1)
1745
				{
1746
					if(i == 1) strtmp = "Player isn't muted";
1747
					else format(strtmp, sizeof strtmp, "Player %d isn't muted", i);
1748
					SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
1749
				}
1750
				else
1751
				{
1752
					AdmSysInfo[giveid][asMuteTime] = 0;
1753
					GetPlayerName(giveid, strname2, sizeof strname2);
1754
					format(strtmp, sizeof strtmp, "Administrator %s unmuted %s[%d]", strname, strname2, giveid);
1755
					#if defined SEND_ACTION_MESSAGES_TO_ALL
1756
						SendClientMessageToAll(ADMSYS_DEFAULT_COLOR, strtmp);
1757
					#else
1758
						SendMessageToAdmins(2, ADMSYS_DEFAULT_COLOR, strtmp);
1759
					#endif
1760
					format(strtmp, sizeof strtmp, "Administrator %s unmuted you", strname);
1761
					SendClientMessage(giveid, ADMSYS_DEFAULT_COLOR, strtmp);
1762
				}
1763
			}
1764
		}
1765
	}
1766
	return 1;
1767
}
1768
1769
CMD:asay(playerid, params[]) return admsys_cmd_asay(playerid, params);
1770
admsys_cmd_asay(playerid, params[])
1771
{
1772
	if(IsPlayerAdminEx(playerid, 2))
1773
	{
1774
		if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /asay [text]");
1775
		static strtmp[145], strname[24];
1776
		strtmp = "Administrator ";
1777
		GetPlayerName(playerid, strname, sizeof strname);
1778
		strcat(strtmp, strname);
1779
		strcat(strtmp, ": ");
1780
		strcat(strtmp, params);
1781
		SendClientMessageToAll(ADMSYS_DEFAULT_COLOR, strtmp);
1782
	}
1783
	return 1;
1784
}
1785
1786
CMD:warn(playerid, params[]) return admsys_cmd_warn(playerid, params);
1787
admsys_cmd_warn(playerid, params[])
1788
{
1789
	if(IsPlayerAdminEx(playerid, 2))
1790
	{
1791
		if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /warn [id] [reason]");
1792
		static strtmp[145];
1793
		new pos;
1794
		while(params[pos] > ' ') pos++;
1795
		strmid(strtmp, params, 0, pos);
1796
		if(!admsys_IsNumeric(strtmp)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /warn [id] [reason]");
1797
		new giveid = strval(strtmp);
1798
		if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player not found");
1799
		if(GetPlayerAdminLevel(playerid) <= GetPlayerAdminLevel(giveid) && playerid != giveid)
1800
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "You can't apply this action to the administrator");
1801
		while(params[pos] == ' ') pos++;
1802
		if(!params[pos]) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /warn [id] [reason]");
1803
		static strname[24], strname2[24];
1804
		AdmSysInfo[giveid][asWarns]++;
1805
		CallLocalFunction("OnPlayerWarn", "iii", giveid, playerid, AdmSysInfo[giveid][asWarns]);
1806
		GetPlayerName(playerid, strname, sizeof strname);
1807
		GetPlayerName(giveid, strname2, sizeof strname2);
1808
		format(strtmp, sizeof strtmp, "Administrator %s has given %s[%d] a warn. Reason: %s", strname, strname2, giveid, params[pos]);
1809
		#if defined SEND_ACTION_MESSAGES_TO_ALL
1810
			SendClientMessageToAll(ADMSYS_DEFAULT_COLOR, strtmp);
1811
		#else
1812
			SendMessageToAdmins(2, ADMSYS_DEFAULT_COLOR, strtmp);
1813
		#endif
1814
		format(strtmp, sizeof strtmp, "Administrator %s has given you a warn. Reason: %s", strname, params[pos]);
1815
		SendClientMessage(giveid, ADMSYS_DEFAULT_COLOR, strtmp);
1816
		if(AdmSysInfo[giveid][asWarns] > ADMSYS_MAX_WARNS) return admsys_cmd_ban(playerid, params);
1817
	}
1818
	return 1;
1819
}
1820
1821
CMD:kick(playerid, params[]) return admsys_cmd_kick(playerid, params);
1822
admsys_cmd_kick(playerid, params[])
1823
{
1824
	if(IsPlayerAdminEx(playerid, 2))
1825
	{
1826
		if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /kick [id] [reason]");
1827
		static strtmp[145];
1828
		new pos;
1829
		while(params[pos] > ' ') pos++;
1830
		strmid(strtmp, params, 0, pos);
1831
		if(!admsys_IsNumeric(strtmp)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /kick [id] [reason]");
1832
		new giveid = strval(strtmp);
1833
		if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player not found");
1834
		if(GetPlayerAdminLevel(playerid) <= GetPlayerAdminLevel(giveid) && playerid != giveid)
1835
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "You can't apply this action to the administrator");
1836
		while(params[pos] == ' ') pos++;
1837
		if(!params[pos]) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /kick [id] [reason]");
1838
		static strname[24], strname2[24];
1839
		CallLocalFunction("OnPlayerKick", "iii", giveid, playerid, false);
1840
		GetPlayerName(playerid, strname, sizeof strname);
1841
		GetPlayerName(giveid, strname2, sizeof strname2);
1842
		format(strtmp, sizeof strtmp, "Administrator %s has kicked %s[%d]. Reason: %s", strname, strname2, giveid, params[pos]);
1843
		#if defined SEND_ACTION_MESSAGES_TO_ALL
1844
			SendClientMessageToAll(ADMSYS_DEFAULT_COLOR, strtmp);
1845
		#else
1846
			SendMessageToAdmins(2, ADMSYS_DEFAULT_COLOR, strtmp);
1847
		#endif
1848
		format(strtmp, sizeof strtmp, "Administrator %s has kicked you. Reason: %s", strname, params[pos]);
1849
		SendClientMessage(giveid, ADMSYS_DEFAULT_COLOR, strtmp);
1850
		SetTimerEx("KickWithDelay", 500, 0, "i", giveid);
1851
	}
1852
	return 1;
1853
}
1854
1855
CMD:freeze(playerid, params[]) return admsys_cmd_freeze(playerid, params);
1856
admsys_cmd_freeze(playerid, params[])
1857
{
1858
	if(IsPlayerAdminEx(playerid, 2))
1859
	{
1860
		new strtmp[95];
1861
		if(admsys_isnull(params))
1862
		{
1863
			format(strtmp, sizeof strtmp, "%d", playerid);
1864
			return admsys_cmd_freeze(playerid, strtmp);
1865
		}
1866
		static strname[24], strname2[24];
1867
		GetPlayerName(playerid, strname, sizeof strname);
1868
		for(new i = 1, pos, oldpos, giveid, j; i <= ADMSYS_MAX_GIVE_PLAYERS_IN_CMD; i++)
1869
		{
1870
			while(params[pos] == ' ') pos++;
1871
			if(params[pos])
1872
			{
1873
				oldpos = pos;
1874
				while(params[pos] > ' ') pos++;
1875
				strmid(strtmp, params, oldpos, pos);
1876
				if(!admsys_IsNumeric(strtmp))
1877
				{
1878
					strtmp = "Use: /freeze [id]";
1879
					if(i > 1)
1880
					{
1881
						for(j = 2; j <= i; j++)
1882
						{
1883
							format(strname2, sizeof strname2, " [id %d]", j);
1884
							strcat(strtmp, strname2);
1885
						}
1886
					}
1887
					return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
1888
				}
1889
				giveid = strval(strtmp);
1890
				if(!IsPlayerConnected(giveid))
1891
				{
1892
					if(i == 1) strtmp = "Player not found";
1893
					else format(strtmp, sizeof strtmp, "Player %d not found", i);
1894
					SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
1895
				}
1896
				else
1897
				{
1898
					TogglePlayerControllable(giveid, 0);
1899
					GetPlayerName(giveid, strname2, sizeof strname2);
1900
					format(strtmp, sizeof strtmp, "Administrator %s has frozen %s[%d]", strname, strname2, giveid);
1901
					#if defined SEND_ACTION_MESSAGES_TO_ALL
1902
						SendClientMessageToAll(ADMSYS_DEFAULT_COLOR, strtmp);
1903
					#else
1904
						SendMessageToAdmins(2, ADMSYS_DEFAULT_COLOR, strtmp);
1905
					#endif
1906
					format(strtmp, sizeof strtmp, "Administrator %s has frozen you", strname);
1907
					SendClientMessage(giveid, ADMSYS_DEFAULT_COLOR, strtmp);
1908
				}
1909
			}
1910
		}
1911
	}
1912
	return 1;
1913
}
1914
1915
CMD:unfreeze(playerid, params[]) return admsys_cmd_unfreeze(playerid, params);
1916
admsys_cmd_unfreeze(playerid, params[])
1917
{
1918
	if(IsPlayerAdminEx(playerid, 2))
1919
	{
1920
		new strtmp[97];
1921
		if(admsys_isnull(params))
1922
		{
1923
			format(strtmp, sizeof strtmp, "%d", playerid);
1924
			return admsys_cmd_unfreeze(playerid, strtmp);
1925
		}
1926
		static strname[24], strname2[24];
1927
		GetPlayerName(playerid, strname, sizeof strname);
1928
		for(new i = 1, pos, oldpos, giveid, j; i <= ADMSYS_MAX_GIVE_PLAYERS_IN_CMD; i++)
1929
		{
1930
			while(params[pos] == ' ') pos++;
1931
			if(params[pos])
1932
			{
1933
				oldpos = pos;
1934
				while(params[pos] > ' ') pos++;
1935
				strmid(strtmp, params, oldpos, pos);
1936
				if(!admsys_IsNumeric(strtmp))
1937
				{
1938
					strtmp = "Use: /unfreeze [id]";
1939
					if(i > 1)
1940
					{
1941
						for(j = 2; j <= i; j++)
1942
						{
1943
							format(strname2, sizeof strname2, " [id %d]", j);
1944
							strcat(strtmp, strname2);
1945
						}
1946
					}
1947
					return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
1948
				}
1949
				giveid = strval(strtmp);
1950
				if(!IsPlayerConnected(giveid))
1951
				{
1952
					if(i == 1) strtmp = "Player not found";
1953
					else format(strtmp, sizeof strtmp, "Player %d not found", i);
1954
					SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
1955
				}
1956
				else
1957
				{
1958
					TogglePlayerControllable(giveid, 1);
1959
					GetPlayerName(giveid, strname2, sizeof strname2);
1960
					format(strtmp, sizeof strtmp, "Administrator %s has unfreeze %s[%d]", strname, strname2, giveid);
1961
					#if defined SEND_ACTION_MESSAGES_TO_ALL
1962
						SendClientMessageToAll(ADMSYS_DEFAULT_COLOR, strtmp);
1963
					#else
1964
						SendMessageToAdmins(2, ADMSYS_DEFAULT_COLOR, strtmp);
1965
					#endif
1966
					format(strtmp, sizeof strtmp, "Administrator %s has unfreeze you", strname);
1967
					SendClientMessage(giveid, ADMSYS_DEFAULT_COLOR, strtmp);
1968
				}
1969
			}
1970
		}
1971
	}
1972
	return 1;
1973
}
1974
1975
CMD:slap(playerid, params[]) return admsys_cmd_slap(playerid, params);
1976
admsys_cmd_slap(playerid, params[])
1977
{
1978
	if(IsPlayerAdminEx(playerid, 2))
1979
	{
1980
		if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /slap [id] [reason]");
1981
		static strtmp[145];
1982
		new pos;
1983
		while(params[pos] > ' ') pos++;
1984
		strmid(strtmp, params, 0, pos);
1985
		if(!admsys_IsNumeric(strtmp)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /slap [id] [reason]");
1986
		new giveid = strval(strtmp);
1987
		if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player not found");
1988
		if(GetPlayerAdminLevel(playerid) <= GetPlayerAdminLevel(giveid) && playerid != giveid)
1989
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "You can't apply this action to the administrator");
1990
		if(IsPlayerSpectating(giveid))
1991
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player in spectator mode");
1992
		while(params[pos] == ' ') pos++;
1993
		if(!params[pos]) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /slap [id] [reason]");
1994
		static strname[24], strname2[24];
1995
		new Float:pX, Float:pY, Float:pZ;
1996
		GetPlayerPos(giveid, pX, pY, pZ);
1997
		SetPlayerPos(giveid, pX, pY, pZ + 8.0);
1998
		PlayerPlaySound(giveid, 1130, 0.0, 0.0, 0.0);
1999
		GetPlayerName(playerid, strname, sizeof strname);
2000
		GetPlayerName(giveid, strname2, sizeof strname2);
2001
		format(strtmp, sizeof strtmp, "Administrator %s slapped %s[%d]. Reason: %s", strname, strname2, giveid, params[pos]);
2002
		#if defined SEND_ACTION_MESSAGES_TO_ALL
2003
			SendClientMessageToAll(ADMSYS_DEFAULT_COLOR, strtmp);
2004
		#else
2005
			SendMessageToAdmins(2, ADMSYS_DEFAULT_COLOR, strtmp);
2006
		#endif
2007
		format(strtmp, sizeof strtmp, "Administrator %s slapped you. Reason: %s", strname, params[pos]);
2008
		SendClientMessage(giveid, ADMSYS_DEFAULT_COLOR, strtmp);
2009
	}
2010
	return 1;
2011
}
2012
2013
CMD:goto(playerid, params[]) return admsys_cmd_goto(playerid, params);
2014
admsys_cmd_goto(playerid, params[])
2015
{
2016
	if(IsPlayerAdminEx(playerid, 2))
2017
	{
2018
		if(IsPlayerSpectating(playerid))
2019
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "You are in spectator mode");
2020
		if(admsys_isnull(params) || !admsys_IsNumeric(params))
2021
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /goto [id]");
2022
		params[0] = strval(params);
2023
		if(params[0] == playerid) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "You can't specify your id");
2024
		if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player not found");
2025
		static strtmp[54], strname[24];
2026
		new Float:pX, Float:pY, Float:pZ;
2027-
		if(c) ShowPlayerDialog(playerid, ADMSYS_DIALOG_SUSPECT_LIST, 2, "Waiting for checking", strtmp, "Ok", "Close");
2027+
2028
		SetPlayerPos(playerid, pX + 1.0, pY + 1.0, pZ);
2029
		SetPlayerInterior(playerid, GetPlayerInterior(params[0]));
2030
		SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(params[0]));
2031
		GetPlayerName(params[0], strname, sizeof strname);
2032
		format(strtmp, sizeof strtmp, "You are teleported to %s[%d]", strname, params[0]);
2033
		SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2034
	}
2035
	return 1;
2036
}
2037
2038
CMD:suspectlist(playerid, params[]) return admsys_cmd_suspectlist(playerid, params);
2039
admsys_cmd_suspectlist(playerid, params[])
2040
{
2041
	#pragma unused params
2042
	if(IsPlayerAdminEx(playerid, 3))
2043
	{
2044
		UpdateSuspectList();
2045
		new c;
2046
		static strtmp[353], strtmp2[44], iname[24];
2047
		strtmp[0] = EOS;
2048
		for(new i; i < sizeof SuspectList; ++i)
2049
		{
2050
			if(SuspectList[i] != INVALID_PLAYER_ID)
2051
			{
2052
				GetPlayerName(SuspectList[i], iname, sizeof iname);
2053
				format(strtmp2, sizeof strtmp2, "%d. %s [ID: %d]\n", i + 1, iname, SuspectList[i]);
2054
				strcat(strtmp, strtmp2);
2055
				c++;
2056
			}
2057
		}
2058
		if(c) ShowPlayerDialog(playerid, ADMSYS_DIALOG_SUSPECT_LIST, DIALOG_STYLE_LIST, "Waiting for checking", strtmp, "Ok", "Close");
2059
		else SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "List is empty");
2060
	}
2061
	return 1;
2062
}
2063
2064
CMD:gethere(playerid, params[]) return admsys_cmd_gethere(playerid, params);
2065
CMD:get(playerid, params[]) return admsys_cmd_gethere(playerid, params);
2066
admsys_cmd_gethere(playerid, params[])
2067
{
2068
	if(IsPlayerAdminEx(playerid, 3))
2069
	{
2070
		if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /gethere [id]");
2071
		if(!strcmp(params, "all", true)) return admsys_cmd_getall(playerid, "\1");
2072
		static strname[24], strname2[24];
2073
		new strtmp[67], interior, vw, Float:pX, Float:pY, Float:pZ;
2074
		GetPlayerName(playerid, strname, sizeof strname);
2075
		interior = GetPlayerInterior(playerid);
2076
		vw = GetPlayerVirtualWorld(playerid);
2077
		GetPlayerPos(playerid, pX, pY, pZ);
2078
		pX += 1.0;
2079
		pY += 1.0;
2080
		for(new i = 1, pos, oldpos, giveid, j; i <= ADMSYS_MAX_GIVE_PLAYERS_IN_CMD; i++)
2081
		{
2082
			while(params[pos] == ' ') pos++;
2083
			if(params[pos])
2084
			{
2085
				oldpos = pos;
2086
				while(params[pos] > ' ') pos++;
2087
				strmid(strtmp, params, oldpos, pos);
2088
				if(!admsys_IsNumeric(strtmp))
2089
				{
2090
					strtmp = "Use: /gethere [id]";
2091
					if(i > 1)
2092
					{
2093
						for(j = 2; j <= i; j++)
2094
						{
2095
							format(strname2, sizeof strname2, " [id %d]", j);
2096
							strcat(strtmp, strname2);
2097
						}
2098
					}
2099
					return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2100
				}
2101
				giveid = strval(strtmp);
2102
				if(giveid == playerid) SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "You can't specify your id");
2103
				else if(!IsPlayerConnected(giveid))
2104
				{
2105
					if(i == 1) strtmp = "Player not found";
2106
					else format(strtmp, sizeof strtmp, "Player %d not found", i);
2107
					SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2108
				}
2109
				else
2110
				{
2111
					SetPlayerPos(giveid, pX, pY, pZ);
2112
					SetPlayerVirtualWorld(giveid, vw);
2113
					SetPlayerInterior(giveid, interior);
2114
					GetPlayerName(giveid, strname2, sizeof strname2);
2115
					format(strtmp, sizeof strtmp, "You teleported %s[%d] to himself", strname2, giveid);
2116
					SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2117
					format(strtmp, sizeof strtmp, "Administrator %s teleported you to himself", strname);
2118
					SendClientMessage(giveid, ADMSYS_DEFAULT_COLOR, strtmp);
2119
				}
2120
			}
2121
		}
2122
	}
2123
	return 1;
2124
}
2125
2126
CMD:gotoveh(playerid, params[]) return admsys_cmd_gotoveh(playerid, params);
2127
admsys_cmd_gotoveh(playerid, params[])
2128
{
2129
	if(IsPlayerAdminEx(playerid, 3))
2130
	{
2131
		if(IsPlayerSpectating(playerid))
2132
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "You are in spectator mode");
2133
		if(admsys_isnull(params) || !admsys_IsNumeric(params))
2134
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /gotoveh [vehicle id]");
2135
		params[0] = strval(params);
2136
		if(!GetVehicleModel(params[0])) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Vehicle not found");
2137
		static strtmp[50];
2138
		new Float:vX, Float:vY, Float:vZ;
2139
		GetVehiclePos(params[0], vX, vY, vZ);
2140
		SetPlayerPos(playerid, vX, vY, vZ + 2.5);
2141
		SetPlayerVirtualWorld(playerid, GetVehicleVirtualWorld(params[0]));
2142
		format(strtmp, sizeof strtmp, "You are teleported to vehicle id %d", params[0]);
2143
		SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2144
	}
2145
	return 1;
2146
}
2147
2148
CMD:ban(playerid, params[]) return admsys_cmd_ban(playerid, params);
2149
admsys_cmd_ban(playerid, params[])
2150
{
2151
	if(IsPlayerAdminEx(playerid, 3))
2152
	{
2153
		if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /ban [id] [reason]");
2154
		static strtmp[145];
2155
		new pos;
2156
		while(params[pos] > ' ') pos++;
2157
		strmid(strtmp, params, 0, pos);
2158
		if(!admsys_IsNumeric(strtmp)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /ban [id] [reason]");
2159
		new giveid = strval(strtmp);
2160
		if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player not found");
2161
		if(GetPlayerAdminLevel(playerid) <= GetPlayerAdminLevel(giveid) && playerid != giveid)
2162
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "You can't apply this action to the administrator");
2163
		while(params[pos] == ' ') pos++;
2164
		if(!params[pos]) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /ban [id] [reason]");
2165
		static strname[24], strname2[24];
2166
		CallLocalFunction("OnPlayerBan", "iii", giveid, playerid, false);
2167
		GetPlayerName(playerid, strname, sizeof strname);
2168
		GetPlayerName(giveid, strname2, sizeof strname2);
2169
		format(strtmp, sizeof strtmp, "Administrator %s has banned %s[%d]. Reason: %s", strname, strname2, giveid, params[pos]);
2170
		#if defined SEND_ACTION_MESSAGES_TO_ALL
2171
			SendClientMessageToAll(ADMSYS_DEFAULT_COLOR, strtmp);
2172
		#else
2173
			SendMessageToAdmins(3, ADMSYS_DEFAULT_COLOR, strtmp);
2174
		#endif
2175
		format(strtmp, sizeof strtmp, "Administrator %s has banned you. Reason: %s", strname, params[pos]);
2176
		SendClientMessage(giveid, ADMSYS_DEFAULT_COLOR, strtmp);
2177
		SetTimerEx("BanWithDelay", 500, 0, "i", giveid);
2178
	}
2179
	return 1;
2180
}
2181
2182
CMD:gmtest(playerid, params[]) return admsys_cmd_gmtest(playerid, params);
2183
admsys_cmd_gmtest(playerid, params[])
2184
{
2185
	if(IsPlayerAdminEx(playerid, 3))
2186
	{
2187
		if(admsys_isnull(params) || !admsys_IsNumeric(params))
2188
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /gmtest [id]");
2189
		params[0] = strval(params);
2190
		if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player not found");
2191
		if(AdmSysInfo[playerid][asGmTestID] != INVALID_PLAYER_ID)
2192
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "You already checks someone on GodMode");
2193
		if(AdmSysInfo[params[0]][asGmTest])
2194
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player are already checked for GodMode");
2195
		if(!AdmSysInfo[params[0]][asIsSpawned])
2196
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player isn't spawned");
2197
		if(IsPlayerSpectating(params[0]))
2198
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player in spectator mode");
2199
		new Float:bx, Float:by, Float:bz;
2200
		GetPlayerPos(params[0], bx, by, bz);
2201
		if(!IsPlayerInAnyVehicle(params[0]))
2202
		{
2203
			GetPlayerHealth(params[0], AdmSysInfo[params[0]][asGmTestHP]);
2204
			GetPlayerArmour(params[0], AdmSysInfo[params[0]][asGmTestAR]);
2205
		}
2206
		else GetVehicleHealth(GetPlayerVehicleID(params[0]), AdmSysInfo[params[0]][asGmTestHP]);
2207
		AdmSysInfo[params[0]][asGmTest] = true;
2208
		AdmSysInfo[playerid][asGmTestID] = params[0];
2209
		CreateExplosionForPlayer(params[0], bx, by, bz + 7.5, 5, 0.5);
2210
		SetTimerEx("GmTest", 1000, 0, "d", playerid);
2211
	}
2212
	return 1;
2213
}
2214
2215
CMD:spawn(playerid, params[]) return admsys_cmd_spawn(playerid, params);
2216
admsys_cmd_spawn(playerid, params[])
2217
{
2218
	if(IsPlayerAdminEx(playerid, 3))
2219
	{
2220
		new strtmp[102];
2221
		if(admsys_isnull(params))
2222
		{
2223
			format(strtmp, sizeof strtmp, "%d", playerid);
2224
			return admsys_cmd_spawn(playerid, strtmp);
2225
		}
2226
		static strname[24], strname2[24];
2227
		GetPlayerName(playerid, strname, sizeof strname);
2228
		for(new i = 1, pos, oldpos, giveid, j; i <= ADMSYS_MAX_GIVE_PLAYERS_IN_CMD; i++)
2229
		{
2230
			while(params[pos] == ' ') pos++;
2231
			if(params[pos])
2232
			{
2233
				oldpos = pos;
2234
				while(params[pos] > ' ') pos++;
2235
				strmid(strtmp, params, oldpos, pos);
2236
				if(!admsys_IsNumeric(strtmp))
2237
				{
2238
					strtmp = "Use: /spawn [id]";
2239
					if(i > 1)
2240
					{
2241
						for(j = 2; j <= i; j++)
2242
						{
2243
							format(strname2, sizeof strname2, " [id %d]", j);
2244
							strcat(strtmp, strname2);
2245
						}
2246
					}
2247
					return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2248
				}
2249
				giveid = strval(strtmp);
2250
				if(!IsPlayerConnected(giveid))
2251
				{
2252
					if(i == 1) strtmp = "Player not found";
2253
					else format(strtmp, sizeof strtmp, "Player %d not found", i);
2254
					SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2255
				}
2256
				else
2257
				{
2258
					if(IsPlayerSpectating(giveid)) TogglePlayerSpectating(giveid, 0);
2259
					else SpawnPlayer(giveid);
2260
					GetPlayerName(giveid, strname2, sizeof strname2);
2261
					format(strtmp, sizeof strtmp, "Administrator %s has spawned %s[%d]", strname, strname2, giveid);
2262
					#if defined SEND_ACTION_MESSAGES_TO_ALL
2263
						SendClientMessageToAll(ADMSYS_DEFAULT_COLOR, strtmp);
2264
					#else
2265
						SendMessageToAdmins(3, ADMSYS_DEFAULT_COLOR, strtmp);
2266
					#endif
2267
					format(strtmp, sizeof strtmp, "Administrator %s has spawned you", strname);
2268
					SendClientMessage(giveid, ADMSYS_DEFAULT_COLOR, strtmp);
2269
				}
2270
			}
2271
		}
2272
	}
2273
	return 1;
2274
}
2275
2276
CMD:unwarn(playerid, params[]) return admsys_cmd_unwarn(playerid, params);
2277
admsys_cmd_unwarn(playerid, params[])
2278
{
2279
	if(IsPlayerAdminEx(playerid, 3))
2280
	{
2281
		new strtmp[109];
2282
		if(admsys_isnull(params))
2283
		{
2284
			format(strtmp, sizeof strtmp, "%d", playerid);
2285
			return admsys_cmd_unwarn(playerid, strtmp);
2286-
				else if(!AdmSysInfo[giveid][asWarns])
2286+
2287
		static strname[24], strname2[24];
2288
		GetPlayerName(playerid, strname, sizeof strname);
2289
		for(new i = 1, pos, oldpos, giveid, j; i <= ADMSYS_MAX_GIVE_PLAYERS_IN_CMD; i++)
2290
		{
2291
			while(params[pos] == ' ') pos++;
2292
			if(params[pos])
2293
			{
2294
				oldpos = pos;
2295
				while(params[pos] > ' ') pos++;
2296
				strmid(strtmp, params, oldpos, pos);
2297
				if(!admsys_IsNumeric(strtmp))
2298
				{
2299
					strtmp = "Use: /unwarn [id]";
2300
					if(i > 1)
2301
					{
2302
						for(j = 2; j <= i; j++)
2303
						{
2304
							format(strname2, sizeof strname2, " [id %d]", j);
2305
							strcat(strtmp, strname2);
2306
						}
2307
					}
2308
					return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2309
				}
2310
				giveid = strval(strtmp);
2311
				if(!IsPlayerConnected(giveid))
2312
				{
2313
					if(i == 1) strtmp = "Player not found";
2314
					else format(strtmp, sizeof strtmp, "Player %d not found", i);
2315
					SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2316
				}
2317
				else if(AdmSysInfo[giveid][asWarns] < 1)
2318
				{
2319
					if(i == 1) strtmp = "Player has no warns";
2320
					else format(strtmp, sizeof strtmp, "Player %d has no warns", i);
2321
					SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2322
				}
2323
				else
2324
				{
2325
					AdmSysInfo[giveid][asWarns]--;
2326
					GetPlayerName(giveid, strname2, sizeof strname2);
2327
					format(strtmp, sizeof strtmp, "Administrator %s has removed warning from %s[%d]", strname, strname2, giveid);
2328
					#if defined SEND_ACTION_MESSAGES_TO_ALL
2329
						SendClientMessageToAll(ADMSYS_DEFAULT_COLOR, strtmp);
2330
					#else
2331
						SendMessageToAdmins(3, ADMSYS_DEFAULT_COLOR, strtmp);
2332
					#endif
2333
					format(strtmp, sizeof strtmp, "Administrator %s has removed warning from you", strname);
2334
					SendClientMessage(giveid, ADMSYS_DEFAULT_COLOR, strtmp);
2335
				}
2336
			}
2337
		}
2338
	}
2339
	return 1;
2340
}
2341
2342
CMD:banip(playerid, params[]) return admsys_cmd_banip(playerid, params);
2343
admsys_cmd_banip(playerid, params[])
2344
{
2345
	if(IsPlayerAdminEx(playerid, 3))
2346
	{
2347
		if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /banip [IP]");
2348
		for(new i, c, j = strlen(params); i < j; i++)
2349
		{
2350
			switch(params[i])
2351
			{
2352
				case '*':
2353-
		for(new i = 20; i != -1; --i) SendClientMessageToAll(-1, " ");
2353+
2354
					if(c < 2) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "IP address entered incorrectly");
2355
				}
2356
				case '.': c++;
2357
				case '0'..'9':{}
2358
				default: return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "IP address entered incorrectly");
2359
			}
2360
		}
2361
		static strtmp[75], strname[24];
2362
		format(strtmp, sizeof strtmp, "banip %s", params);
2363
		SendRconCommand(strtmp);
2364
		SendRconCommand("reloadbans");
2365
		GetPlayerName(playerid, strname, sizeof strname);
2366
		format(strtmp, sizeof strtmp, "Administrator %s has blocked IP %s", strname, params);
2367
		#if defined SEND_ACTION_MESSAGES_TO_ALL
2368
			SendClientMessageToAll(ADMSYS_DEFAULT_COLOR, strtmp);
2369
		#else
2370
			SendMessageToAdmins(3, ADMSYS_DEFAULT_COLOR, strtmp);
2371
		#endif
2372
	}
2373
	return 1;
2374
}
2375
2376
CMD:cc(playerid, params[]) return admsys_cmd_cc(playerid, params);
2377
CMD:clearchat(playerid, params[]) return admsys_cmd_cc(playerid, params);
2378
admsys_cmd_cc(playerid, params[])
2379
{
2380
	#pragma unused params
2381
	if(IsPlayerAdminEx(playerid, 3))
2382
	{
2383
		static strtmp[62], strname[24];
2384
		for(new i = 30; i != -1; --i) SendClientMessageToAll(-1, " ");
2385
		GetPlayerName(playerid, strname, sizeof strname);
2386
		format(strtmp, sizeof strtmp, "Administrator %s has cleared the chat", strname);
2387
		#if defined SEND_ACTION_MESSAGES_TO_ALL
2388
			SendClientMessageToAll(ADMSYS_DEFAULT_COLOR, strtmp);
2389
		#else
2390
			SendMessageToAdmins(3, ADMSYS_DEFAULT_COLOR, strtmp);
2391
		#endif
2392
	}
2393
	return 1;
2394
}
2395
2396
CMD:sethealth(playerid, params[]) return admsys_cmd_sethealth(playerid, params);
2397
admsys_cmd_sethealth(playerid, params[])
2398
{
2399
	if(IsPlayerAdminEx(playerid, 4))
2400
	{
2401
		if(admsys_isnull(params))
2402
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /sethealth [id] [health]");
2403
		static strtmp[68];
2404
		new pos, oldpos;
2405
		while(params[pos] > ' ') pos++;
2406
		strmid(strtmp, params, 0, pos);
2407
		if(!admsys_IsNumeric(strtmp))
2408
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /sethealth [id] [health]");
2409
		new giveid = strval(strtmp);
2410
		if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player not found");
2411
		while(params[pos] == ' ') pos++;
2412
		oldpos = pos;
2413
		while(params[pos] > ' ') pos++;
2414
		strmid(strtmp, params, oldpos, pos);
2415
		if(!params[oldpos] || !admsys_IsNumeric(strtmp))
2416
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /sethealth [id] [health]");
2417
		static strname[24];
2418
		new Float:ghealth = strval(strtmp);
2419
		AdmSysInfo[playerid][asLastAction] = 1;
2420
		GetPlayerHealth(giveid, AdmSysInfo[playerid][asLastFloatData]);
2421
		AdmSysInfo[playerid][asLastActionID] = giveid;
2422
		SetPlayerHealth(giveid, ghealth);
2423
		GetPlayerName(giveid, strname, sizeof strname);
2424
		format(strtmp, sizeof strtmp, "You have set %.1f health to %s[%d]", ghealth, strname, giveid);
2425
		SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2426
		GetPlayerName(playerid, strname, sizeof strname);
2427
		format(strtmp, sizeof strtmp, "Administrator %s has set you %.1f health", strname, ghealth);
2428
		SendClientMessage(giveid, ADMSYS_DEFAULT_COLOR, strtmp);
2429
	}
2430
	return 1;
2431
}
2432
2433
CMD:setarmour(playerid, params[]) return admsys_cmd_setarmour(playerid, params);
2434
admsys_cmd_setarmour(playerid, params[])
2435
{
2436
	if(IsPlayerAdminEx(playerid, 4))
2437
	{
2438
		if(admsys_isnull(params))
2439
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /setarmour [id] [armour]");
2440
		static strtmp[68];
2441
		new pos, oldpos;
2442
		while(params[pos] > ' ') pos++;
2443
		strmid(strtmp, params, 0, pos);
2444
		if(!admsys_IsNumeric(strtmp))
2445
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /setarmour [id] [armour]");
2446
		new giveid = strval(strtmp);
2447
		if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player not found");
2448
		while(params[pos] == ' ') pos++;
2449
		oldpos = pos;
2450
		while(params[pos] > ' ') pos++;
2451
		strmid(strtmp, params, oldpos, pos);
2452
		if(!params[oldpos] || !admsys_IsNumeric(strtmp))
2453
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /setarmour [id] [armour]");
2454
		static strname[24];
2455
		new Float:garmour = strval(strtmp);
2456
		AdmSysInfo[playerid][asLastAction] = 2;
2457
		GetPlayerArmour(giveid, AdmSysInfo[playerid][asLastFloatData]);
2458
		AdmSysInfo[playerid][asLastActionID] = giveid;
2459
		SetPlayerArmour(giveid, garmour);
2460
		GetPlayerName(giveid, strname, sizeof strname);
2461
		format(strtmp, sizeof strtmp, "You have set %.1f armour to %s[%d]", garmour, strname, giveid);
2462
		SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2463
		GetPlayerName(playerid, strname, sizeof strname);
2464
		format(strtmp, sizeof strtmp, "Administrator %s has set you %.1f armour", strname, garmour);
2465
		SendClientMessage(giveid, ADMSYS_DEFAULT_COLOR, strtmp);
2466
	}
2467
	return 1;
2468
}
2469
2470
CMD:setmoney(playerid, params[]) return admsys_cmd_setmoney(playerid, params);
2471
admsys_cmd_setmoney(playerid, params[])
2472
{
2473
	if(IsPlayerAdminEx(playerid, 4))
2474
	{
2475
		if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /setmoney [id] [money]");
2476
		static strtmp[64];
2477
		new pos, oldpos;
2478
		while(params[pos] > ' ') pos++;
2479
		strmid(strtmp, params, 0, pos);
2480
		if(!admsys_IsNumeric(strtmp)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /setmoney [id] [money]");
2481
		new giveid = strval(strtmp);
2482
		if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player not found");
2483
		while(params[pos] == ' ') pos++;
2484
		oldpos = pos;
2485
		while(params[pos] > ' ') pos++;
2486
		strmid(strtmp, params, oldpos, pos);
2487
		if(!params[oldpos] || !admsys_IsNumeric(strtmp))
2488
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /setmoney [id] [money]");
2489
		static strname[24];
2490
		new gmoney = strval(strtmp);
2491
		AdmSysInfo[playerid][asLastAction] = 3;
2492
		AdmSysInfo[playerid][asLastIntData][0] = GetPlayerMoney(giveid);
2493
		AdmSysInfo[playerid][asLastActionID] = giveid;
2494
		ResetPlayerMoney(giveid);
2495-
		if(!(-1 < skinid < 312)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use ID of skin from 0 to 311");
2495+
2496
		GetPlayerName(giveid, strname, sizeof strname);
2497
		format(strtmp, sizeof strtmp, "You have set $%d to %s[%d]", gmoney, strname, giveid);
2498
		SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2499
		GetPlayerName(playerid, strname, sizeof strname);
2500
		format(strtmp, sizeof strtmp, "Administrator %s has set you $%d", strname, gmoney);
2501
		SendClientMessage(giveid, ADMSYS_DEFAULT_COLOR, strtmp);
2502
	}
2503
	return 1;
2504
}
2505
2506
CMD:setskin(playerid, params[]) return admsys_cmd_setskin(playerid, params);
2507
admsys_cmd_setskin(playerid, params[])
2508
{
2509
	if(IsPlayerAdminEx(playerid, 4))
2510
	{
2511
		if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /setskin [id] [skin]");
2512
		static strtmp[60];
2513
		new pos, oldpos;
2514
		while(params[pos] > ' ') pos++;
2515
		strmid(strtmp, params, 0, pos);
2516
		if(!admsys_IsNumeric(strtmp)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /setskin [id] [skin]");
2517
		new giveid = strval(strtmp);
2518
		if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player not found");
2519
		while(params[pos] == ' ') pos++;
2520
		oldpos = pos;
2521
		while(params[pos] > ' ') pos++;
2522
		strmid(strtmp, params, oldpos, pos);
2523
		if(!params[oldpos] || !admsys_IsNumeric(strtmp))
2524
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /setskin [id] [skin]");
2525
		new skinid = strval(strtmp);
2526
		if(!(0 <= skinid <= 311)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use ID of skin from 0 to 311");
2527
		static strname[24];
2528
		AdmSysInfo[playerid][asLastAction] = 4;
2529
		AdmSysInfo[playerid][asLastIntData][0] = GetPlayerSkin(giveid);
2530
		AdmSysInfo[playerid][asLastActionID] = giveid;
2531
		SetPlayerSkin(giveid, skinid);
2532
		GetPlayerName(giveid, strname, sizeof strname);
2533
		format(strtmp, sizeof strtmp, "You have changed the skin to %d to %s[%d]", skinid, strname, giveid);
2534
		SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2535
		GetPlayerName(playerid, strname, sizeof strname);
2536
		format(strtmp, sizeof strtmp, "Administrator %s has changed your skin to %d", strname, skinid);
2537
		SendClientMessage(giveid, ADMSYS_DEFAULT_COLOR, strtmp);
2538
	}
2539
	return 1;
2540
}
2541
2542
CMD:setint(playerid, params[]) return admsys_cmd_setint(playerid, params);
2543
CMD:setinterior(playerid, params[]) return admsys_cmd_setint(playerid, params);
2544
admsys_cmd_setint(playerid, params[])
2545
{
2546
	if(IsPlayerAdminEx(playerid, 4))
2547
	{
2548
		if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /setint [id] [interior]");
2549
		static strtmp[70];
2550
		new pos, oldpos;
2551
		while(params[pos] > ' ') pos++;
2552
		strmid(strtmp, params, 0, pos);
2553
		if(!admsys_IsNumeric(strtmp)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /setint [id] [interior]");
2554
		new giveid = strval(strtmp);
2555
		if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player not found");
2556
		while(params[pos] == ' ') pos++;
2557
		oldpos = pos;
2558
		while(params[pos] > ' ') pos++;
2559
		strmid(strtmp, params, oldpos, pos);
2560
		if(!params[oldpos] || !admsys_IsNumeric(strtmp))
2561
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /setint [id] [interior]");
2562
		static strname[24];
2563
		new gint = strval(strtmp);
2564
		AdmSysInfo[playerid][asLastAction] = 5;
2565
		AdmSysInfo[playerid][asLastIntData][0] = GetPlayerInterior(giveid);
2566
		AdmSysInfo[playerid][asLastActionID] = giveid;
2567
		SetPlayerInterior(giveid, gint);
2568
		GetPlayerName(giveid, strname, sizeof strname);
2569
		format(strtmp, sizeof strtmp, "You have set the interior to %d to %s[%d]", gint, strname, giveid);
2570
		SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2571
		GetPlayerName(playerid, strname, sizeof strname);
2572
		format(strtmp, sizeof strtmp, "Administrator %s has set your interior to %d", strname, gint);
2573
		SendClientMessage(giveid, ADMSYS_DEFAULT_COLOR, strtmp);
2574
	}
2575
	return 1;
2576
}
2577
2578
CMD:setvw(playerid, params[]) return admsys_cmd_setvw(playerid, params);
2579
CMD:setvirtualworld(playerid, params[]) return admsys_cmd_setvw(playerid, params);
2580
admsys_cmd_setvw(playerid, params[])
2581
{
2582
	if(IsPlayerAdminEx(playerid, 4))
2583
	{
2584
		if(admsys_isnull(params))
2585
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /setvw [id] [vw]");
2586
		static strtmp[82];
2587
		new pos, oldpos;
2588
		while(params[pos] > ' ') pos++;
2589
		strmid(strtmp, params, 0, pos);
2590
		if(!admsys_IsNumeric(strtmp))
2591
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /setvw [id] [vw]");
2592
		new giveid = strval(strtmp);
2593
		if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player not found");
2594
		while(params[pos] == ' ') pos++;
2595
		oldpos = pos;
2596
		while(params[pos] > ' ') pos++;
2597
		strmid(strtmp, params, oldpos, pos);
2598
		if(!params[oldpos] || !admsys_IsNumeric(strtmp))
2599
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /setvw [id] [vw]");
2600
		static strname[24];
2601
		new gvw = strval(strtmp);
2602
		AdmSysInfo[playerid][asLastAction] = 6;
2603
		AdmSysInfo[playerid][asLastIntData][0] = GetPlayerVirtualWorld(giveid);
2604
		AdmSysInfo[playerid][asLastActionID] = giveid;
2605
		SetPlayerVirtualWorld(giveid, gvw);
2606
		GetPlayerName(giveid, strname, sizeof strname);
2607-
		if(!(-1 < gweapon < 47)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use the ID of weapon from 0 to 46");
2607+
2608
		SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2609
		GetPlayerName(playerid, strname, sizeof strname);
2610
		format(strtmp, sizeof strtmp, "Administrator %s has set your virtual world to %d", strname, gvw);
2611
		SendClientMessage(giveid, ADMSYS_DEFAULT_COLOR, strtmp);
2612
	}
2613
	return 1;
2614
}
2615
2616
CMD:giveweapon(playerid, params[]) return admsys_cmd_giveweapon(playerid, params);
2617
admsys_cmd_giveweapon(playerid, params[])
2618
{
2619
	if(IsPlayerAdminEx(playerid, 4))
2620
	{
2621
		if(admsys_isnull(params))
2622
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /giveweapon [id] [weapon] [ammo]");
2623
		static strtmp[79];
2624
		new pos, oldpos;
2625
		while(params[pos] > ' ') pos++;
2626
		strmid(strtmp, params, 0, pos);
2627
		if(!admsys_IsNumeric(strtmp))
2628
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /giveweapon [id] [weapon] [ammo]");
2629
		new giveid = strval(strtmp);
2630
		if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player not found");
2631
		while(params[pos] == ' ') pos++;
2632
		oldpos = pos;
2633
		while(params[pos] > ' ') pos++;
2634
		strmid(strtmp, params, oldpos, pos);
2635
		if(!params[oldpos] || !admsys_IsNumeric(strtmp))
2636
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /giveweapon [id] [weapon] [ammo]");
2637
		new gweapon = strval(strtmp);
2638
		if(!(0 <= gweapon <= 46)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use the ID of weapon from 0 to 46");
2639
		while(params[pos] == ' ') pos++;
2640
		oldpos = pos;
2641
		while(params[pos] > ' ') pos++;
2642
		strmid(strtmp, params, oldpos, pos);
2643
		if(!params[oldpos] || !admsys_IsNumeric(strtmp))
2644
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /giveweapon [id] [weapon] [ammo]");
2645
		static strname[24];
2646
		new gammo = strval(strtmp);
2647
		AdmSysInfo[playerid][asLastAction] = 7;
2648
		AdmSysInfo[playerid][asLastIntData][0] = gweapon;
2649
		AdmSysInfo[playerid][asLastIntData][1] = gammo;
2650
		AdmSysInfo[playerid][asLastActionID] = giveid;
2651
		GivePlayerWeapon(giveid, gweapon, gammo);
2652
		GetPlayerName(giveid, strname, sizeof strname);
2653
		format(strtmp, sizeof strtmp, "You have gave the weapon %d with %d ammo to %s[%d]", gweapon, gammo, strname, giveid);
2654
		SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2655
		GetPlayerName(playerid, strname, sizeof strname);
2656
		format(strtmp, sizeof strtmp, "Administrator %s gave you weapon %d with %d ammo", strname, gweapon, gammo);
2657
		SendClientMessage(giveid, ADMSYS_DEFAULT_COLOR, strtmp);
2658
	}
2659
	return 1;
2660
}
2661
2662
CMD:repairveh(playerid, params[]) return admsys_cmd_repairveh(playerid, params);
2663
admsys_cmd_repairveh(playerid, params[])
2664
{
2665
	if(IsPlayerAdminEx(playerid, 4))
2666
	{
2667
		if(admsys_isnull(params))
2668
		{
2669
			if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "You are not in vehicle");
2670
			params[0] = GetPlayerVehicleID(playerid);
2671
		}
2672
		else
2673
		{
2674
			if(!admsys_IsNumeric(params))
2675
				return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /repairveh [vehicle id]");
2676
			params[0] = strval(params);
2677
			if(!GetVehicleModel(params[0]))
2678
				return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Vehicle is not found");
2679
		}
2680
		static strtmp[25];
2681
		RepairVehicle(params[0]);
2682
		format(strtmp, sizeof strtmp, "Vehicle id %d repaired", params[0]);
2683
		SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2684
	}
2685
	return 1;
2686
}
2687
2688
CMD:unbanip(playerid, params[]) return admsys_cmd_unbanip(playerid, params);
2689
admsys_cmd_unbanip(playerid, params[])
2690
{
2691
	if(IsPlayerAdminEx(playerid, 4))
2692
	{
2693
		if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /unbanip [IP]");
2694-
		if(!(-1 < params[0] < 21)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Weather ID should be from 0 to 20");
2694+
2695
		{
2696
			switch(params[i])
2697
			{
2698
				case '*', '.', '0'..'9':{}
2699
				default: return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "IP address entered incorrectly");
2700
			}
2701
		}
2702
		static strtmp[77], strname[24];
2703
		format(strtmp, sizeof strtmp, "unbanip %s", params);
2704
		SendRconCommand(strtmp);
2705
		SendRconCommand("reloadbans");
2706
		GetPlayerName(playerid, strname, sizeof strname);
2707
		format(strtmp, sizeof strtmp, "Administrator %s unblocked the IP %s", strname, params);
2708
		#if defined SEND_ACTION_MESSAGES_TO_ALL
2709
			SendClientMessageToAll(ADMSYS_DEFAULT_COLOR, strtmp);
2710
		#else
2711
			SendMessageToAdmins(4, ADMSYS_DEFAULT_COLOR, strtmp);
2712
		#endif
2713
	}
2714
	return 1;
2715
}
2716
2717
CMD:setweather(playerid, params[]) return admsys_cmd_setweather(playerid, params);
2718
admsys_cmd_setweather(playerid, params[])
2719
{
2720
	if(IsPlayerAdminEx(playerid, 5))
2721
	{
2722
		if(admsys_isnull(params) || !admsys_IsNumeric(params))
2723
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /setweather [weather]");
2724
		params[0] = strval(params);
2725
		if(!(0 <= params[0] <= 20)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Weather ID should be from 0 to 20");
2726
		SetWeather(params[0]);
2727
		#if defined foreach
2728
		foreach(new i : Player)
2729
		#else
2730
		for(new i = GetPlayerPoolSize(); i != -1; --i)
2731
		#endif
2732
		{
2733
			SetPlayerWeather(i, params[0]);
2734
		}
2735
		static strtmp[66], strname[24];
2736
		GetPlayerName(playerid, strname, sizeof strname);
2737
		format(strtmp, sizeof strtmp, "Administrator %s changed the weather to %d", strname, params[0]);
2738
		#if defined SEND_ACTION_MESSAGES_TO_ALL
2739
			SendClientMessageToAll(ADMSYS_DEFAULT_COLOR, strtmp);
2740
		#else
2741
			SendMessageToAdmins(5, ADMSYS_DEFAULT_COLOR, strtmp);
2742
		#endif
2743
	}
2744
	return 1;
2745
}
2746
2747
CMD:getall(playerid, params[]) return admsys_cmd_getall(playerid, params);
2748
admsys_cmd_getall(playerid, params[])
2749
{
2750
	#pragma unused params
2751
	if(IsPlayerAdminEx(playerid, 5))
2752
	{
2753
		new Float:pX, Float:pY, Float:pZ;
2754
		GetPlayerPos(playerid, pX, pY, pZ);
2755
		pX += 1.0;
2756
		pY += 1.0;
2757
		new interior = GetPlayerInterior(playerid), vw = GetPlayerVirtualWorld(playerid);
2758
		#if defined foreach
2759
			foreach(new i : Player)
2760
		#else
2761-
		if(!(-1 < params[0] < 24)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "The hour must be between 0 and 23");
2761+
2762
			{
2763
				if(IsPlayerConnected(i))
2764
		#endif
2765
		{
2766
			if(!IsPlayerNPC(i) && i != playerid)
2767
			{
2768
				SetPlayerVirtualWorld(i, vw);
2769
				SetPlayerInterior(i, interior);
2770
				SetPlayerPos(i, pX, pY, pZ);
2771
			}
2772
		}
2773
		#if !defined foreach
2774
			}
2775
		#endif
2776
		static strtmp[67], strname[24];
2777
		GetPlayerName(playerid, strname, sizeof strname);
2778
		format(strtmp, sizeof strtmp, "Administrator %s teleported all to himself", strname);
2779
		SendClientMessageToAll(ADMSYS_DEFAULT_COLOR, strtmp);
2780
	}
2781
	return 1;
2782
}
2783
2784
CMD:settime(playerid, params[]) return admsys_cmd_settime(playerid, params);
2785
admsys_cmd_settime(playerid, params[])
2786
{
2787
	if(IsPlayerAdminEx(playerid, 5))
2788
	{
2789
		if(admsys_isnull(params) || !admsys_IsNumeric(params))
2790
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /settime [hour]");
2791
		params[0] = strval(params);
2792
		if(!(0 <= params[0] <= 23)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "The hour must be between 0 and 23");
2793
		SetWorldTime(params[0]);
2794
		#if defined foreach
2795
		foreach(new i : Player)
2796
		#else
2797
		for(new i = GetPlayerPoolSize(); i != -1; --i)
2798
		#endif
2799
		{
2800
			SetPlayerTime(i, params[0], 0);
2801
		}
2802
		static strtmp[70], strname[24];
2803
		GetPlayerName(playerid, strname, sizeof strname);
2804
		format(strtmp, sizeof strtmp, "Administrator %s changed the time to %d hours", strname, params[0]);
2805
		#if defined SEND_ACTION_MESSAGES_TO_ALL
2806
			SendClientMessageToAll(ADMSYS_DEFAULT_COLOR, strtmp);
2807
			#undef SEND_ACTION_MESSAGES_TO_ALL
2808
		#else
2809
			SendMessageToAdmins(5, ADMSYS_DEFAULT_COLOR, strtmp);
2810
		#endif
2811
	}
2812
	return 1;
2813
}
2814
2815
CMD:destroyveh(playerid, params[]) return admsys_cmd_destroyveh(playerid, params);
2816
admsys_cmd_destroyveh(playerid, params[])
2817
{
2818
	if(IsPlayerAdminEx(playerid, 5))
2819
	{
2820
		if(admsys_isnull(params))
2821
		{
2822
			if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "You are not in vehicle");
2823
			params[0] = GetPlayerVehicleID(playerid);
2824
		}
2825
		else
2826
		{
2827-
		if(!(399 < gveh < 612)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use the vehicle ID from 400 to 611");
2827+
2828
				return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /destroyveh [vehicle id]");
2829
			params[0] = strval(params);
2830
			if(!GetVehicleModel(params[0]))
2831
				return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Vehicle is not found");
2832
		}
2833
		static strtmp[26];
2834
		DestroyVehicle(params[0]);
2835
		format(strtmp, sizeof strtmp, "Vehicle id %d destroyed", params[0]);
2836
		SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2837
	}
2838
	return 1;
2839
}
2840
2841
CMD:veh(playerid, params[]) return admsys_cmd_veh(playerid, params);
2842
CMD:vehicle(playerid, params[]) return admsys_cmd_veh(playerid, params);
2843-
			if(!(-1 < gcolor1 < 256))
2843+
2844
{
2845
	if(IsPlayerAdminEx(playerid, 5))
2846
	{
2847
		if(IsPlayerSpectating(playerid))
2848
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "You are in spectator mode");
2849
		if(admsys_isnull(params))
2850
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /veh [vehicle id] [color 1] [color 2]");
2851
		static strtmp[48];
2852-
			if(!(-1 < gcolor2 < 256))
2852+
2853
		while(params[pos] > ' ') pos++;
2854
		strmid(strtmp, params, 0, pos);
2855
		if(!admsys_IsNumeric(strtmp))
2856
			return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /veh [vehicle id] [color 1] [color 2]");
2857
		new gveh = strval(strtmp);
2858
		if(!(400 <= gveh <= 611)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use the vehicle ID from 400 to 611");
2859
		while(params[pos] == ' ') pos++;
2860
		oldpos = pos;
2861
		new gcolor1, gcolor2;
2862
		if(!params[oldpos])
2863
		{
2864
			gcolor1 = random(256);
2865
			gcolor2 = random(256);
2866
		}
2867
		else
2868
		{
2869
			while(params[pos] > ' ') pos++;
2870
			strmid(strtmp, params, oldpos, pos);
2871
			if(!admsys_IsNumeric(strtmp))
2872
				return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /veh [vehicle id] [color 1] [color 2]");
2873
			gcolor1 = strval(strtmp);
2874
			if(!(0 <= gcolor1 <= 255))
2875
				return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use the color 1 from 0 to 255");
2876
			while(params[pos] == ' ') pos++;
2877
			oldpos = pos;
2878
			while(params[pos] > ' ') pos++;
2879
			strmid(strtmp, params, oldpos, pos);
2880
			if(!params[oldpos] || !admsys_IsNumeric(strtmp))
2881
				return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /veh [vehicle id] [color 1] [color 2]");
2882
			gcolor2 = strval(strtmp);
2883
			if(!(0 <= gcolor2 <= 255))
2884
				return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use the color 2 from 0 to 255");
2885
		}
2886
		new vid, Float:pX, Float:pY, Float:pZ, Float:pAngle;
2887
		GetPlayerPos(playerid, pX, pY, pZ);
2888
		GetPlayerFacingAngle(playerid, pAngle);
2889
		vid = CreateVehicle(gveh, pX, pY, pZ, pAngle, gcolor1, gcolor2, -1);
2890
		SetVehicleVirtualWorld(vid, GetPlayerVirtualWorld(playerid));
2891
		LinkVehicleToInterior(vid, GetPlayerInterior(playerid));
2892
		PutPlayerInVehicle(playerid, vid, 0);
2893
		format(strtmp, sizeof strtmp, "Vehicle id %d with colors %d and %d spawned", vid, gcolor1, gcolor2);
2894
		SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2895
	}
2896
	return 1;
2897
}
2898
2899
CMD:skick(playerid, params[]) return admsys_cmd_skick(playerid, params);
2900
admsys_cmd_skick(playerid, params[])
2901
{
2902
	if(IsPlayerAdminEx(playerid, 5))
2903
	{
2904
		if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /skick [id]");
2905
		static strtmp2[10];
2906
		for(new i = 1, strtmp[32], pos, oldpos, giveid, j; i <= ADMSYS_MAX_GIVE_PLAYERS_IN_CMD; i++)
2907
		{
2908
			while(params[pos] == ' ') pos++;
2909
			if(params[pos])
2910
			{
2911
				oldpos = pos;
2912
				while(params[pos] > ' ') pos++;
2913
				strmid(strtmp, params, oldpos, pos);
2914
				if(!admsys_IsNumeric(strtmp))
2915
				{
2916
					strtmp = "Use: /skick [id]";
2917
					if(i > 1)
2918
					{
2919
						for(j = 2; j <= i; j++)
2920
						{
2921
							format(strtmp2, sizeof strtmp2, " [id %d]", j);
2922
							strcat(strtmp, strtmp2);
2923
						}
2924
					}
2925
					return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2926
				}
2927
				giveid = strval(strtmp);
2928
				if(!IsPlayerConnected(giveid))
2929
				{
2930
					if(i == 1) strtmp = "Player not found";
2931
					else format(strtmp, sizeof strtmp, "Player %d not found", i);
2932
					SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2933
				}
2934
				else
2935
				{
2936
					CallLocalFunction("OnPlayerKick", "iii", giveid, playerid, true);
2937
					Kick(giveid);
2938
				}
2939
			}
2940
		}
2941
	}
2942
	return 1;
2943
}
2944
2945
CMD:sban(playerid, params[]) return admsys_cmd_sban(playerid, params);
2946
admsys_cmd_sban(playerid, params[])
2947
{
2948
	if(IsPlayerAdminEx(playerid, 5))
2949
	{
2950
		if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Use: /sban [id]");
2951
		static strtmp2[10];
2952
		for(new i = 1, strtmp[32], pos, oldpos, giveid, j; i <= ADMSYS_MAX_GIVE_PLAYERS_IN_CMD; i++)
2953
		{
2954
			while(params[pos] == ' ') pos++;
2955
			if(params[pos])
2956
			{
2957
				oldpos = pos;
2958
				while(params[pos] > ' ') pos++;
2959
				strmid(strtmp, params, oldpos, pos);
2960
				if(!admsys_IsNumeric(strtmp))
2961
				{
2962
					strtmp = "Use: /sban [id]";
2963
					if(i > 1)
2964
					{
2965
						for(j = 2; j <= i; j++)
2966
						{
2967
							format(strtmp2, sizeof strtmp2, " [id %d]", j);
2968
							strcat(strtmp, strtmp2);
2969
						}
2970
					}
2971
					return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2972
				}
2973
				giveid = strval(strtmp);
2974
				if(!IsPlayerConnected(giveid))
2975
				{
2976
					if(i == 1) strtmp = "Player not found";
2977
					else format(strtmp, sizeof strtmp, "Player %d not found", i);
2978
					SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
2979
				}
2980
				else
2981
				{
2982
					CallLocalFunction("OnPlayerBan", "iii", giveid, playerid, true);
2983
					Ban(giveid);
2984
				}
2985
			}
2986
		}
2987
	}
2988
	return 1;
2989
}
2990
2991
stock SetPlayerAdminLevel(playerid, lvl)
2992
{
2993
	if(!IsPlayerConnected(playerid) || !(0 <= lvl <= 5)) return 0;
2994
	AdmSysInfo[playerid][asAdminLvl] = lvl;
2995
	return 1;
2996
}
2997
2998
stock GetPlayerAdminLevel(playerid)
2999
{
3000
	if(!IsPlayerConnected(playerid)) return 0;
3001
	if(IsPlayerAdmin(playerid)) return 5;
3002
	return AdmSysInfo[playerid][asAdminLvl];
3003
}
3004
3005
stock IsPlayerAdminEx(playerid, lvl = 1) return (GetPlayerAdminLevel(playerid) >= lvl);
3006
3007
stock SetPlayerMuteTime(playerid, time)
3008
{
3009
	if(!IsPlayerConnected(playerid) || time < 0) return 0;
3010
	AdmSysInfo[playerid][asMuteTime] = time;
3011
	return 1;
3012
}
3013
3014
stock GetPlayerMuteTime(playerid) return (IsPlayerConnected(playerid) ? AdmSysInfo[playerid][asMuteTime] : 0);
3015
3016
stock UpdateSuspectList()
3017
{
3018
	new c;
3019
	for(new i, j; i < sizeof SuspectList; ++i)
3020
	{
3021
		if(!IsPlayerConnected(SuspectList[i]))
3022
		{
3023
			c++;
3024
			for(j = i; j < sizeof(SuspectList) - 1; ++j) SuspectList[j] = SuspectList[j + 1];
3025
			SuspectList[j] = INVALID_PLAYER_ID;
3026
		}
3027
	}
3028
	return c;
3029
}
3030
3031
stock AddPlayerInSuspectList(playerid)
3032
{
3033
	UpdateSuspectList();
3034
	if(IsPlayerConnected(playerid))
3035
	{
3036
		new i;
3037
		for(i = sizeof(SuspectList) - 1; i != -1; --i)
3038
		{
3039
			if(SuspectList[i] == playerid) return 0;
3040
		}
3041
		new tmp1 = SuspectList[0], tmp2;
3042
		for(i = 0; i < sizeof(SuspectList) - 1; ++i)
3043
		{
3044
			tmp2 = SuspectList[i + 1];
3045
			SuspectList[i + 1] = tmp1;
3046
			tmp1 = tmp2;
3047
		}
3048
		SuspectList[0] = playerid;
3049
		return 1;
3050
	}
3051
	return 0;
3052
}
3053
3054
stock RemovePlayerFromSuspectList(playerid)
3055
{
3056-
		if(!('0' <= string[i] <= '9' || !i && (string[i] == '-' || string[i] == '+'))) return 0;
3056+
3057
	{
3058
		if(SuspectList[i] == playerid)
3059
		{
3060
			SuspectList[i] = INVALID_PLAYER_ID;
3061
			break;
3062
		}
3063
	}
3064
	UpdateSuspectList();
3065
	return 1;
3066
}
3067
3068
stock SendMessageToAdmins(lvl, color, const msg[])
3069
{
3070
	#if defined foreach
3071
	foreach(new i : Player)
3072
	#else
3073
	for(new i = GetPlayerPoolSize(); i != -1; --i)
3074
	#endif
3075
	{
3076
		if(GetPlayerAdminLevel(i) >= lvl) SendClientMessage(i, color, msg);
3077-
		AdmSysInfo[playerid][asLastSpec] = (GetPlayerState(playerid) == 9);
3077+
3078
	return 1;
3079
}
3080
3081
static stock admsys_IsNumeric(const string[])
3082
{
3083
	new length = strlen(string);
3084-
	if(AdmSysInfo[specid][asIsDead])
3084+
3085
	for(new i; i < length; i++)
3086
	{
3087-
		GetPlayerCameraPos(specid, cX, cY, cZ);
3087+
		if(!('0' <= string[i] <= '9' || i == 0 && (string[i] == '-' || string[i] == '+'))) return 0;
3088-
		GetPlayerPos(specid, pX, pY, pZ);
3088+
3089-
		SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player died");
3089+
3090
}
3091
3092
stock IsPlayerSpectating(playerid) return IsPlayerConnected(AdmSysInfo[playerid][asSpecID]);
3093
3094
stock StartSpectating(playerid, specid)
3095
{
3096
	if(!IsPlayerConnected(playerid) || !IsPlayerConnected(specid)) return 0;
3097
	if(playerid == specid) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "You can't spectate yourself");
3098
	if(IsPlayerSpectating(specid)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player in spectator mode");
3099
	if(AdmSysInfo[playerid][asSpecID] == specid) return UpdateSpectating(playerid);
3100
	if(!AdmSysInfo[specid][asIsSpawned] && !AdmSysInfo[specid][asIsDead])
3101
		return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player isn't spawned yet");
3102
	if(!IsPlayerSpectating(playerid))
3103
	{
3104
		for(new i = 12; i != -1; --i)
3105
			GetPlayerWeaponData(playerid, i, AdmSysInfo[playerid][asLastWeapon][i], AdmSysInfo[playerid][asLastAmmo][i]);
3106
		GetPlayerPos(playerid, AdmSysInfo[playerid][asLastPos][0],
3107
		AdmSysInfo[playerid][asLastPos][1], AdmSysInfo[playerid][asLastPos][2]);
3108
		AdmSysInfo[playerid][asLastSpec] = (GetPlayerState(playerid) == PLAYER_STATE_SPECTATING);
3109
		GetPlayerFacingAngle(playerid, AdmSysInfo[playerid][asLastAngle]);
3110
		AdmSysInfo[playerid][asLastVW] = GetPlayerVirtualWorld(playerid);
3111
		AdmSysInfo[playerid][asLastInt] = GetPlayerInterior(playerid);
3112
	}
3113
	AdmSysInfo[playerid][asLastSpecID] = AdmSysInfo[playerid][asSpecID];
3114
	TogglePlayerSpectating(playerid, 1);
3115
	if(AdmSysInfo[specid][asIsDead]) SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Player died");
3116
	SetPlayerInterior(playerid, GetPlayerInterior(specid));
3117
	SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(specid));
3118
	if(IsPlayerInAnyVehicle(specid)) PlayerSpectateVehicle(playerid, GetPlayerVehicleID(specid));
3119
	else PlayerSpectatePlayer(playerid, specid);
3120
	AdmSysInfo[playerid][asSpecID] = specid;
3121-
	if(AdmSysInfo[playerid][asLastSpecID] == INVALID_PLAYER_ID)
3121+
3122
	return 1;
3123
}
3124
3125
stock UpdateSpectating(playerid)
3126
{
3127
	if(!IsPlayerConnected(playerid)) return 0;
3128
	if(AdmSysInfo[playerid][asSpecID] == INVALID_PLAYER_ID)
3129
		return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "You are not in spectator mode");
3130
	if(!IsPlayerConnected(AdmSysInfo[playerid][asSpecID])) return StopSpectating(playerid);
3131
	TogglePlayerSpectating(playerid, 1);
3132
	SetPlayerInterior(playerid, GetPlayerInterior(AdmSysInfo[playerid][asSpecID]));
3133
	SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(AdmSysInfo[playerid][asSpecID]));
3134
	if(IsPlayerInAnyVehicle(AdmSysInfo[playerid][asSpecID]))
3135
		PlayerSpectateVehicle(playerid, GetPlayerVehicleID(AdmSysInfo[playerid][asSpecID]));
3136
	else PlayerSpectatePlayer(playerid, AdmSysInfo[playerid][asSpecID]);
3137
	return 1;
3138
}
3139
3140
stock StopSpectating(playerid)
3141
{
3142
	if(!IsPlayerConnected(playerid)) return 0;
3143
	if(!IsPlayerSpectating(playerid)) return SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "You are not in spectator mode");
3144
	if(AdmSysInfo[playerid][asLastSpecID] == INVALID_PLAYER_ID || AdmSysInfo[playerid][asLastSpecID] == AdmSysInfo[playerid][asSpecID])
3145
	{
3146
		TogglePlayerSpectating(playerid, AdmSysInfo[playerid][asLastSpec]);
3147
		KillTimer(AdmSysInfo[playerid][asUpdTimer]);
3148
	}
3149
	else
3150
	{
3151
		AdmSysInfo[playerid][asSpecID] = AdmSysInfo[playerid][asLastSpecID];
3152
		AdmSysInfo[playerid][asLastSpecID] = INVALID_PLAYER_ID;
3153
		UpdateSpectating(playerid);
3154
	}
3155
	return 1;
3156
}
3157
3158
#undef ADMSYS_DEFAULT_COLOR
3159
3160
#undef ADMSYS_MAX_TAB_INPUT
3161
#undef ADMSYS_MAX_SUSPECTS_IN_TABLE
3162
#undef ADMSYS_MAX_GIVE_PLAYERS_IN_CMD
3163
#undef ADMSYS_MAX_WARNS
3164
3165
#undef admsys_isnull
3166
#undef admsys_fpublic