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