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