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