· 7 years ago · Oct 05, 2018, 08:34 AM
1/*
2 *****************************-
3 Scripter: Jyothiranand. S
4 Credits:-
5 Gammix - Ban System
6 *****************************-
7*/
8#include <a_samp>
9#include <a_mysql>
10#include <kickbanfix>
11#include <zcmd>
12#include <easydialog>
13#include <sscanf2>
14#include <TimestampToDate>
15
16new connection = -1;
17
18native WP_Hash(buffer[], len, const str[]);
19
20#define SQL_HOST "localhost"
21#define SQL_USER "root"
22#define SQL_DBSE "jadmin"
23#define SQL_PASS ""
24
25#define DIALOG_LOGIN 1
26#define DIALOG_REGISTER 2
27#define DIALOG_ADMINCMDS 3
28#define DIALOG_COMMANDS 4
29#define DIALOG_ADMINS 5
30#define DIALOG_STATS 6
31
32#define WHITE 0xFFFFFFAA
33#define GREY 0xAFAFAFAA
34#define RED 0xFF0000AA
35#define YELLOW 0xFFFF00AA
36#define LIGHTBLUE 0x33CCFFAA
37
38#define CHAT_WHITE "{FFFFFF}"
39#define CHAT_GREY "{AFAFAF}"
40#define CHAT_RED "{FF0000}"
41#define CHAT_YELLOW "{FFFF00}"
42#define CHAT_LIGHTBLUE "{33CCFF}"
43
44enum playerInfo
45{
46 jID,
47 jName[MAX_PLAYER_NAME],
48 jPassword[129],
49 jScore,
50 jMoney,
51 jKills,
52 jDeaths,
53 jWanted,
54 jMutedTime,
55 jLevel,
56 jVIP,
57 jHelper,
58 jLoginAttempts,
59 jWarns,
60 jVeh,
61 onDuty,
62 bool:jLogged
63};
64new PlayerData[MAX_PLAYERS][playerInfo];
65
66#define COLOR_WHITE (0xFFFFFFFF)
67#define COL_WHITE "{FFFFFF}"
68
69#define COLOR_RED (0xFF0400FF)
70#define COL_RED "{FF0400}"
71
72#define COLOR_TOMATO (0xFF6347FF)
73#define COL_TOMATO "{FF6347}"
74
75#define COLOR_PINK (0xFF0090FF)
76#define COL_PINK "{FF0090}"
77
78#define COLOR_GREEN (0x6AFF2AFF)
79#define COL_GREEN "{6AFF2A}"
80
81const KICK_DELAY = 50; // in ms
82
83const BAN_MASK = (-1 << (32 - (/*this is the CIDR ip detection range [def: 26]*/26)));
84
85new DB:banDatabase;
86
87new banTargetID[MAX_PLAYERS];
88new banTargetDays[MAX_PLAYERS];
89new banTargetReason[MAX_PLAYERS][64];
90
91new unbanTargetID[MAX_PLAYERS];
92new unbanTargetName[MAX_PLAYERS][MAX_PLAYER_NAME];
93new unbanTargetIp[MAX_PLAYERS][18];
94
95new Text:banTextDraw[2];
96
97new TotalConnectedPlayers;
98
99forward OnAccountDataLoaded(playerid);
100forward OnAccountCreate(playerid);
101forward KickPlayer(playerid);
102forward MuteCheck();
103native IsValidVehicle(vehicleid);
104
105main(){}
106
107public OnFilterScriptInit()
108{
109 mysql_log(LOG_ERROR | LOG_WARNING, LOG_TYPE_HTML);
110 connection = mysql_connect(SQL_HOST, SQL_USER, SQL_DBSE, SQL_PASS);
111 print("..............................");
112 print("..............................");
113 print("JAdmin :: by :: Jyothiranand.S");
114 print("..............................");
115 print("..............................");
116 banDatabase = db_open("bans.db");
117
118 db_query(banDatabase, "PRAGMA synchronous = NORMAL");
119 db_query(banDatabase, "PRAGMA journal_mode = WAL");
120
121 db_query(banDatabase, "CREATE TABLE IF NOT EXISTS `users` \
122 (`id` INTEGER PRIMARY KEY, \
123 `name` VARCHAR(24), \
124 `ip` VARCHAR(18), \
125 `longip` INTEGER, \
126 `expire_timestamp` INTEGER, \
127 `register_timestamp` INTEGER, \
128 `last_activity_timestamp` INTEGER, \
129 `admin` VRACHAR(24), \
130 `reason` VARCHAR(128)\
131 )");
132
133 banTextDraw[0] = TextDrawCreate(0.000000, 0.000000, "_");
134 TextDrawBackgroundColor(banTextDraw[0], 255);
135 TextDrawFont(banTextDraw[0], 1);
136 TextDrawLetterSize(banTextDraw[0], 0.000000, 480.000000);
137 TextDrawColor(banTextDraw[0], -1);
138 TextDrawSetOutline(banTextDraw[0], 0);
139 TextDrawSetProportional(banTextDraw[0], 1);
140 TextDrawSetShadow(banTextDraw[0], 1);
141 TextDrawUseBox(banTextDraw[0], 1);
142 TextDrawBoxColor(banTextDraw[0], 255);
143 TextDrawTextSize(banTextDraw[0], 640.000000, 0.000000);
144 TextDrawSetSelectable(banTextDraw[0], 0);
145
146 banTextDraw[1] = TextDrawCreate(310.000000, 200.000000, "~r~You are banned!");
147 TextDrawAlignment(banTextDraw[1], 2);
148 TextDrawBackgroundColor(banTextDraw[1], 255);
149 TextDrawFont(banTextDraw[1], 1);
150 TextDrawLetterSize(banTextDraw[1], 1.400000, 8.000000);
151 TextDrawColor(banTextDraw[1], -1);
152 TextDrawSetOutline(banTextDraw[1], 0);
153 TextDrawSetProportional(banTextDraw[1], 1);
154 TextDrawSetShadow(banTextDraw[1], 1);
155 TextDrawSetSelectable(banTextDraw[1], 0);
156
157 SetTimer("MuteCheck", 1000, true);
158 return 1;
159}
160
161public OnFilterScriptExit()
162{
163 for(new i = 0; i <MAX_PLAYERS; i++)
164 {
165 OnPlayerDisconnect(i, 1);
166 }
167 mysql_close(connection);
168 db_close(banDatabase);
169 return 1;
170}
171
172public OnPlayerText(playerid, text[])
173{
174 if(PlayerData[playerid][jLogged] == false) return 0;
175 if(PlayerData[playerid][jMutedTime] >= 1)
176 {
177 new msg[128];
178 format(msg, sizeof(msg), CHAT_RED"You are muted! "CHAT_YELLOW"Wait for %i seconds.", PlayerData[playerid][jMutedTime]);
179 SendClientMessage(playerid, -1, msg);
180 }
181 return 1;
182}
183
184public OnPlayerConnect(playerid)
185{
186 TotalConnectedPlayers++;
187 new name[MAX_PLAYER_NAME];
188 new ip[18];
189 GetPlayerName(playerid, name, sizeof name);
190 GetPlayerIp(playerid, ip, sizeof ip);
191
192 new string[150];
193 format(string, sizeof string, "SELECT * FROM `users` WHERE `name` = '%s' OR `ip` = '%s' OR (`longip` != 0 AND (`longip` & %i) = %i) LIMIT 1", name, ip, BAN_MASK, (Ban_GetLongIP(ip) & BAN_MASK));
194 new DBResult:result = db_query(banDatabase, string);
195 if (db_num_rows(result) != 0)
196 {
197 if (db_get_field_assoc_int(result, "expire_timestamp") != 0 && db_get_field_assoc_int(result, "expire_timestamp") <= gettime())
198 {
199 format(string, sizeof string, "DELETE FROM `users` WHERE `id` = %i", db_get_field_assoc_int(result, "id"));
200 db_query(banDatabase, string);
201
202 format(string, sizeof string, "Welcome back to server, its been %s since your ban was lifted.", ReturnTimelapse(db_get_field_assoc_int(result, "expire_timestamp"), gettime()));
203 SendClientMessage(playerid, COLOR_GREEN, string);
204 }
205 else
206 {
207 format(string, sizeof string, "UPDATE `users` SET `last_activity_timestamp` = %i WHERE `id` = %i", gettime(), db_get_field_assoc_int(result, "id"));
208 db_query(banDatabase, string);
209
210 for (new i; i < 100; i++)
211 {
212 SendClientMessage(playerid, -1, "");
213 }
214
215 new admin[MAX_PLAYER_NAME];
216 db_get_field_assoc(result, "admin", admin, sizeof admin);
217 new reason[128];
218 db_get_field_assoc(result, "reason", reason, sizeof reason);
219
220 if (db_get_field_assoc_int(result, "expire_timestamp") == 0)
221 {
222 format(string, sizeof string, "You are still banned from server | Admin who banned you: %s | Banned on: %s | Timeleft for unban: Never (permanent ban)", admin, ReturnDate(db_get_field_assoc_int(result, "register_timestamp")));
223 SendClientMessageToAll(COLOR_RED, string);
224 }
225 else
226 {
227 format(string, sizeof string, "You are still banned from server | Admin who banned you: %s | Banned on: %s | Timeleft for unban: %s", admin, ReturnDate(db_get_field_assoc_int(result, "register_timestamp")), ReturnTimelapse(gettime(), db_get_field_assoc_int(result, "expire_timestamp")));
228 SendClientMessageToAll(COLOR_RED, string);
229 }
230 format(string, sizeof string, "Reason for ban: %s", reason);
231 SendClientMessageToAll(COLOR_RED, string);
232
233 TextDrawShowForPlayer(playerid, banTextDraw[0]);
234 TextDrawShowForPlayer(playerid, banTextDraw[1]);
235 return Kick(banTargetID[playerid], KICK_DELAY);
236 }
237 }
238 db_free_result(result);
239 PlayerData[playerid][jScore] = 0;
240 PlayerData[playerid][jMoney] = 0;
241 PlayerData[playerid][jKills] = 0;
242 PlayerData[playerid][jDeaths] = 0;
243 PlayerData[playerid][jWanted] = 0;
244 PlayerData[playerid][jMutedTime] = 0;
245 PlayerData[playerid][jLevel] = 0;
246 PlayerData[playerid][jVIP] = 0;
247 PlayerData[playerid][jHelper] = 0;
248 PlayerData[playerid][jLoginAttempts] = 0;
249 PlayerData[playerid][jWarns] = 0;
250 PlayerData[playerid][jVeh] = INVALID_VEHICLE_ID;
251 PlayerData[playerid][onDuty] = 0;
252 PlayerData[playerid][jLogged] = false;
253 new jQuery[128];
254 GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
255 mysql_format(connection, jQuery, sizeof(jQuery), "SELECT * FROM `player` WHERE `name` = '%e' LIMIT 1", PlayerData[playerid][jName]);
256 mysql_tquery(connection, jQuery, "OnAccountDataLoaded", "i", playerid);
257
258 new msg[128];
259 format(msg, sizeof(msg), CHAT_YELLOW"%s(%i) "CHAT_GREY"has connected to the server"CHAT_LIGHTBLUE" (Total Players: %i)", PlayerData[playerid][jName], playerid, TotalConnectedPlayers);
260 SendClientMessageToAll(-1, msg);
261 return 1;
262}
263
264public OnPlayerDisconnect(playerid, reason)
265{
266 TotalConnectedPlayers--;
267 new jQuery[256], msg[128];
268 GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
269 mysql_format(connection, jQuery, sizeof(jQuery), "UPDATE `player` SET `score` = '%i',`money` = '%i',`kills` = '%i',`deaths` = '%i',`wanted` = '%i',`mutedtime` = '%i',`level` = '%i',`vip` = '%i',`helper` = '%i' WHERE `name` = '%e'", GetPlayerScore(playerid),
270 GetPlayerMoney(playerid), PlayerData[playerid][jKills], PlayerData[playerid][jDeaths], GetPlayerWantedLevel(playerid), PlayerData[playerid][jMutedTime], PlayerData[playerid][jLevel], PlayerData[playerid][jVIP], PlayerData[playerid][jHelper], PlayerData[playerid][jName]);
271 mysql_query(connection, jQuery);
272 switch(reason)
273 {
274 case 0: format(msg, sizeof(msg), CHAT_YELLOW"%s(%i) "CHAT_RED"left the server"CHAT_LIGHTBLUE" (Timeout / Crash).", PlayerData[playerid][jName], playerid);
275 case 1: format(msg, sizeof(msg), CHAT_YELLOW"%s(%i) "CHAT_RED"left the server"CHAT_LIGHTBLUE" (Quit). ", PlayerData[playerid][jName], playerid);
276 case 2: format(msg, sizeof(msg), CHAT_YELLOW"%s(%i) "CHAT_RED"left the server"CHAT_LIGHTBLUE" (Kick / Ban).", PlayerData[playerid][jName], playerid);
277 }
278 SendClientMessageToAll(-1, msg);
279 return 1;
280}
281
282public OnPlayerDeath(playerid, killerid, reason)
283{
284 if(killerid == INVALID_PLAYER_ID) return 0;
285 if(PlayerData[killerid][jLogged] == false) return 0;
286 if(PlayerData[playerid][jLogged] == false) return 0;
287 PlayerData[killerid][jKills]++;
288 PlayerData[playerid][jDeaths]++;
289 return 1;
290}
291
292public OnPlayerRequestSpawn(playerid)
293{
294 if(PlayerData[playerid][jLogged] == false) return 0;
295 return 1;
296}
297
298public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
299{
300 switch(dialogid)
301 {
302 case DIALOG_LOGIN:
303 {
304 if(!response) return Kick(playerid);
305 new hashed_pass[129], string[128];
306 WP_Hash(hashed_pass, sizeof(hashed_pass), inputtext);
307 if(strcmp(hashed_pass, PlayerData[playerid][jPassword]) == 0)
308 {
309 PlayerData[playerid][jLogged] = true;
310 format(string, sizeof(string), CHAT_YELLOW"%s(%i) "CHAT_GREY"has logged in to the server!", PlayerData[playerid][jName], playerid);
311 SendClientMessageToAll(-1, string);
312 SetPlayerScore(playerid, PlayerData[playerid][jScore]);
313 ResetPlayerMoney(playerid);
314 GivePlayerMoney(playerid, PlayerData[playerid][jMoney]);
315 SetPlayerWantedLevel(playerid, PlayerData[playerid][jWanted]);
316 }
317 else
318 {
319 PlayerData[playerid][jLoginAttempts]++;
320 if(PlayerData[playerid][jLoginAttempts] >= 3)
321 {
322 SendClientMessage(playerid, RED, "You have been kicked for (3/3) login attempts.");
323 DelayKick(playerid);
324 }
325 else
326 {
327 format(string, sizeof(string), CHAT_RED"Wrong password! (%i/3) attempts left.", PlayerData[playerid][jName], playerid);
328 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", string, "Login", "Leave");
329 }
330 }
331 }
332 case DIALOG_REGISTER:
333 {
334 if(!response) return Kick(playerid);
335 if(strlen(inputtext) <= 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Register", CHAT_RED"Your password must be greater than 3 characters!", "Register", "Leave");
336 WP_Hash(PlayerData[playerid][jPassword], 129, inputtext);
337 new jQuery[300];
338 mysql_format(connection, jQuery, sizeof(jQuery), "INSERT INTO `player` (`name`, `password`) VALUES ('%e', '%e')", PlayerData[playerid][jName], PlayerData[playerid][jPassword]);
339 mysql_tquery(connection, jQuery, "OnAccountCreate", "i", playerid);
340 }
341 }
342 return 1;
343}
344
345public OnAccountDataLoaded(playerid)
346{
347 new string[128];
348 if(cache_num_rows() > 0)
349 {
350 PlayerData[playerid][jID] = cache_get_field_content_int(0, "id");
351 cache_get_field_content(0, "password", PlayerData[playerid][jPassword], connection, 129);
352 PlayerData[playerid][jScore] = cache_get_field_content_int(0, "score");
353 PlayerData[playerid][jMoney] = cache_get_field_content_int(0, "money");
354 PlayerData[playerid][jKills] = cache_get_field_content_int(0, "kills");
355 PlayerData[playerid][jDeaths] = cache_get_field_content_int(0, "deaths");
356 PlayerData[playerid][jWanted] = cache_get_field_content_int(0, "wanted");
357 PlayerData[playerid][jMutedTime] = cache_get_field_content_int(0, "mutedtime");
358 PlayerData[playerid][jLevel] = cache_get_field_content_int(0, "level");
359 PlayerData[playerid][jVIP] = cache_get_field_content_int(0, "vip");
360 PlayerData[playerid][jHelper] = cache_get_field_content_int(0, "helper");
361 format(string, sizeof(string), CHAT_YELLOW"Welcome back '%s'. This name is already registered in the server.\n"CHAT_GREY"Type password below to login:", PlayerData[playerid][jName]);
362 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", string, "Login", "Leave");
363 }
364 else
365 {
366 format(string, sizeof(string), CHAT_YELLOW"Welcome back '%s'. This name is not registered in the server.\n"CHAT_GREY"Type password below to register:", PlayerData[playerid][jName]);
367 ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Register", string, "Register", "Leave");
368 }
369 return 1;
370}
371
372public OnAccountCreate(playerid)
373{
374 new string[128];
375 PlayerData[playerid][jID] = cache_insert_id();
376 format(string, sizeof(string), CHAT_YELLOW"%s(%i) "CHAT_WHITE"has registered to the server!", PlayerData[playerid][jName], playerid);
377 SendClientMessageToAll(-1, string);
378 return 1;
379}
380
381public KickPlayer(playerid)
382{
383 Kick(playerid);
384 return 1;
385}
386
387public MuteCheck()
388{
389 for(new i = 0; i <MAX_PLAYERS; i++)
390 {
391 if(PlayerData[i][jMutedTime] >= 1)
392 {
393 PlayerData[i][jMutedTime]--;
394 if(PlayerData[i][jMutedTime] <= 0) return SendClientMessage(i, RED, "You have been unmuted by the server.");
395 }
396 }
397 return 1;
398}
399
400Ban_GetLongIP(const ip[])
401{
402 new len = strlen(ip);
403 if (!(len > 0 && len < 17))
404 {
405 return 0;
406 }
407
408 new count;
409 new pos;
410 new dest[3];
411 new val[4];
412 for (new i; i < len; i++)
413 {
414 if (ip[i] == '.' || i == len)
415 {
416 strmid(dest, ip, pos, i);
417 pos = (i + 1);
418
419 val[count] = strval(dest);
420 if (!(0 <= val[count] <= 255))
421 {
422 return 0;
423 }
424
425 count++;
426 if (count > 3)
427 {
428 return 0;
429 }
430 }
431 }
432
433 if (count != 3)
434 {
435 return 0;
436 }
437 return ((val[0] * 16777216) + (val[1] * 65536) + (val[2] * 256) + (val[3]));
438}
439
440ReturnDate(timestamp)
441{
442 new year, month, day, unused;
443 TimestampToDate(timestamp, year, month, day, unused, unused, unused, 0);
444
445 static monthname[15];
446 switch (month)
447 {
448 case 1: monthname = "January";
449 case 2: monthname = "February";
450 case 3: monthname = "March";
451 case 4: monthname = "April";
452 case 5: monthname = "May";
453 case 6: monthname = "June";
454 case 7: monthname = "July";
455 case 8: monthname = "August";
456 case 9: monthname = "September";
457 case 10: monthname = "October";
458 case 11: monthname = "November";
459 case 12: monthname = "December";
460 }
461
462 new date[30];
463 format(date, sizeof (date), "%i %s, %i", day, monthname, year);
464 return date;
465}
466
467ReturnTimelapse(start, till)
468{
469 new ret[32];
470 new seconds = till - start;
471
472 const
473 MINUTE = 60,
474 HOUR = 60 * MINUTE,
475 DAY = 24 * HOUR,
476 MONTH = 30 * DAY;
477
478 if (seconds == 1)
479 format(ret, sizeof(ret), "a second");
480 if (seconds < (1 * MINUTE))
481 format(ret, sizeof(ret), "%i seconds", seconds);
482 else if (seconds < (2 * MINUTE))
483 format(ret, sizeof(ret), "a minute");
484 else if (seconds < (45 * MINUTE))
485 format(ret, sizeof(ret), "%i minutes", (seconds / MINUTE));
486 else if (seconds < (90 * MINUTE))
487 format(ret, sizeof(ret), "an hour");
488 else if (seconds < (24 * HOUR))
489 format(ret, sizeof(ret), "%i hours", (seconds / HOUR));
490 else if (seconds < (48 * HOUR))
491 format(ret, sizeof(ret), "a day");
492 else if (seconds < (30 * DAY))
493 format(ret, sizeof(ret), "%i days", (seconds / DAY));
494 else if (seconds < (12 * MONTH))
495 {
496 new months = floatround(seconds / DAY / 30);
497 if (months <= 1)
498 format(ret, sizeof(ret), "a month");
499 else
500 format(ret, sizeof(ret), "%i months", months);
501 }
502 else
503 {
504 new years = floatround(seconds / DAY / 365);
505 if (years <= 1)
506 format(ret, sizeof(ret), "a year");
507 else
508 format(ret, sizeof(ret), "%i years", years);
509 }
510 return ret;
511}
512
513DelayKick(playerid)
514{
515 SetTimerEx("KickPlayer", 500, false, "i", playerid);
516 return 1;
517}
518
519//Admin Commands
520CMD:acmds(playerid, params[])
521{
522 new msg[700];
523 if(PlayerData[playerid][jLogged] == false) return 0;
524 if(PlayerData[playerid][jLevel] < 1) return 0;
525 if(PlayerData[playerid][jLevel] >= 1)
526 {
527 strcat(msg, CHAT_GREY"Admin Level 1:-\n"CHAT_YELLOW"/slap, /warn, /kick, /goto, /bring, /setvw");
528 strcat(msg, CHAT_YELLOW"/rac, /veh, /fixveh, /mute, /unmute\n\n");
529 strcat(msg, CHAT_GREY"Admin Level 2:-\n"CHAT_YELLOW"/slay, /spawn, /aheal, /jetpack, /setw\n");
530 strcat(msg, CHAT_YELLOW"/getip, /teleport, /giveweapon, /disarm, /clearchat, /aod\n\n");
531 strcat(msg, CHAT_GREY"Admin Level 3:-\n"CHAT_YELLOW"/sethealth, /setarmour, /setallhealth, /setallarmour\n");
532 strcat(msg, CHAT_YELLOW"/settime, /freeze, /unfreeze, /announce\n\n");
533 strcat(msg, CHAT_GREY"Admin Level 4:-\n"CHAT_YELLOW"/givecash, /giveallcash, /setskin, /setallskin\n");
534 strcat(msg, CHAT_YELLOW"/setmoney, /resetmoney, /ban, /searchban\n\n");
535 strcat(msg, CHAT_GREY"Admin Level 5:-\n"CHAT_YELLOW"/setlevel, /sethelper, /setvip, /setwanted, /restart\n\n\n");
536 strcat(msg, CHAT_GREY" For chatting with other admins, use /a <text>.");
537 ShowPlayerDialog(playerid, DIALOG_ADMINCMDS, DIALOG_STYLE_MSGBOX, "Admin Commands", msg, "Close", "");
538 }
539 return 1;
540}
541
542CMD:a(playerid, params[])
543{
544 new textmsg[128], string[400];
545 if(PlayerData[playerid][jLogged] == false) return 0;
546 if(PlayerData[playerid][jLevel] >= 1)
547 {
548 if(sscanf(params, "s[128]", textmsg)) return SendClientMessage(playerid, RED, "USAGE: /a <text>");
549 GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
550 format(string, sizeof(string), "ADMIN CHAT: %s(%i): %s", PlayerData[playerid][jName], playerid, textmsg);
551 for(new i = 0; i <MAX_PLAYERS; i++)
552 {
553 if(PlayerData[i][jLevel] >= 1)
554 {
555 SendClientMessage(i, -1, string);
556 }
557 }
558 }
559 else return 0;
560 return 1;
561}
562
563CMD:slap(playerid, params[])
564{
565 new playerID, Float:playerX, Float:playerY, Float:playerZ, msg[150];
566 if(PlayerData[playerid][jLogged] == false) return 0;
567 if(PlayerData[playerid][jLevel] >= 1)
568 {
569 if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /slap <playerid>");
570 if(PlayerData[playerID][jLevel] >= PlayerData[playerid][jLevel]) return SendClientMessage(playerid, RED, "You cannot use this command to your higher level or at your level.");
571 if(GetPlayerState(playerID) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "That player is not on foot.");
572 if(PlayerData[playerID][jLogged] == false) return 0;
573 GetPlayerPos(playerID, playerX, playerY, playerZ);
574 SetPlayerPos(playerID, playerX, playerY, playerZ+8.0);
575 GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
576 format(msg, sizeof(msg), CHAT_RED"You have been slapped by"CHAT_GREY" administrator: "CHAT_YELLOW"%s(%i)", PlayerData[playerid][jName], playerid);
577 SendClientMessage(playerID, -1, msg);
578 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
579 format(msg, sizeof(msg), CHAT_RED"You have slapped"CHAT_YELLOW" %s(%i)", PlayerData[playerID][jName], playerID);
580 SendClientMessage(playerid, -1, msg);
581 }
582 else return 0;
583 return 1;
584}
585
586CMD:warn(playerid, params[])
587{
588 new playerID, reason[128], msg[200];
589 if(PlayerData[playerid][jLogged] == false) return 0;
590 if(PlayerData[playerid][jLevel] >= 1)
591 {
592 if(sscanf(params, "is[128]", playerID, reason)) return SendClientMessage(playerid, RED, "USAGE: /warn <playerid> <reason>");
593 if(PlayerData[playerID][jLogged] == false) return 0;
594 if(PlayerData[playerID][jLevel] >= PlayerData[playerid][jLevel]) return SendClientMessage(playerid, RED, "You cannot use this command to your higher level or at your level.");
595 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
596 format(msg, sizeof(msg), CHAT_GREY"Administrator: "CHAT_RED"have warned"CHAT_YELLOW" %s(%i)"CHAT_RED" REASON: %s", PlayerData[playerID][jName], playerID, reason);
597 SendClientMessageToAll(-1, msg);
598 PlayerData[playerID][jWarns]++;
599 if(PlayerData[playerID][jWarns] >= 3)
600 {
601 SendClientMessage(playerID, RED, "You have been kicked for exceed warnings!");
602 DelayKick(playerID);
603 }
604 GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
605 for(new i = 0; i <MAX_PLAYERS; i++)
606 {
607 if(PlayerData[i][jLevel] >= 1)
608 {
609 format(msg, sizeof(msg), CHAT_RED"ADMINISTRATOR WARNING: %s(%i) have warned %s(%i).", PlayerData[playerid][jName], playerid, PlayerData[playerID][jName], playerID);
610 SendClientMessage(i, -1, msg);
611 }
612 }
613 }
614 else return 0;
615 return 1;
616}
617
618CMD:kick(playerid, params[])
619{
620 new playerID, reason[128], msg[200];
621 if(PlayerData[playerid][jLogged] == false) return 0;
622 if(PlayerData[playerid][jLevel] >= 1)
623 {
624 if(sscanf(params, "is[128]", playerID, reason)) return SendClientMessage(playerid, RED, "USAGE: /kick <playerid> <reason>");
625 if(PlayerData[playerID][jLogged] == false) return 0;
626 if(PlayerData[playerID][jLevel] >= PlayerData[playerid][jLevel]) return SendClientMessage(playerid, RED, "You cannot use this command to your higher level or at your level.");
627 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
628 format(msg, sizeof(msg), CHAT_GREY"Administrator: "CHAT_RED"have kicked"CHAT_YELLOW" %s(%i)"CHAT_RED" REASON: %s", PlayerData[playerID][jName], playerID, reason);
629 SendClientMessageToAll(-1, msg);
630 for(new i = 0; i <MAX_PLAYERS; i++)
631 {
632 if(PlayerData[i][jLevel] >= 1)
633 {
634 format(msg, sizeof(msg), CHAT_RED"ADMINISTRATOR WARNING: %s(%i) have warned %s(%i).", PlayerData[playerid][jName], playerid, PlayerData[playerID][jName], playerID);
635 }
636 }
637 }
638 else return 0;
639 return 1;
640}
641
642CMD:goto(playerid, params[])
643{
644 new playerID, Float:x, Float:y, Float:z, msg[128];
645 if(PlayerData[playerid][jLogged] == false) return 0;
646 if(PlayerData[playerid][jLevel] >= 1)
647 {
648 if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /goto <playerid>");
649 if(PlayerData[playerID][jLogged] == false) return 0;
650 if(playerID == playerid) return 0;
651 if(GetPlayerState(playerID) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "This player is not on foot!");
652 if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "You must be on foot to use this command!");
653 GetPlayerPos(playerID, x, y, z);
654 SetPlayerPos(playerid, x+2.0, y+2.0, z);
655 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
656 format(msg, sizeof(msg), CHAT_LIGHTBLUE"You have been teleported to"CHAT_YELLOW" %s(%i).", PlayerData[playerID][jName], playerID);
657 SendClientMessage(playerid, -1, msg);
658 GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
659 format(msg, sizeof(msg), CHAT_GREY"Administrator "CHAT_YELLOW"%s(%i) "CHAT_LIGHTBLUE"has teleported to you.", PlayerData[playerid][jName], playerID);
660 SendClientMessage(playerID, -1, msg);
661 for(new i = 0; i <MAX_PLAYERS; i++)
662 {
663 if(PlayerData[i][jLevel] >= 1)
664 {
665 format(msg, sizeof(msg), CHAT_GREY"ADMINISTRATOR WARNING: "CHAT_RED"%s(%i) have teleported %s(%i).", PlayerData[playerid][jName], playerid, PlayerData[playerID][jName], playerID);
666 SendClientMessage(i, -1, msg);
667 }
668 }
669 }
670 else return 0;
671 return 1;
672}
673
674CMD:bring(playerid, params[])
675{
676 new playerID, Float:x, Float:y, Float:z, msg[128];
677 if(PlayerData[playerid][jLogged] == false) return 0;
678 if(PlayerData[playerid][jLevel] >= 1)
679 {
680 if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /bring <playerid>");
681 if(PlayerData[playerID][jLogged] == false) return 0;
682 if(playerID == playerid) return 0;
683 if(GetPlayerState(playerID) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "This player is not on foot!");
684 if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "You must be on foot to use this command!");
685 GetPlayerPos(playerid, x, y, z);
686 SetPlayerPos(playerID, x+2.0, y+2.0, z);
687 GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
688 format(msg, sizeof(msg), CHAT_LIGHTBLUE"You have been teleported to"CHAT_YELLOW" %s(%i).", PlayerData[playerid][jName], playerid);
689 SendClientMessage(playerID, -1, msg);
690 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
691 format(msg, sizeof(msg), CHAT_YELLOW"%s(%i) "CHAT_LIGHTBLUE"has been teleported to you.", PlayerData[playerID][jName], playerID);
692 SendClientMessage(playerid, -1, msg);
693 for(new i = 0; i <MAX_PLAYERS; i++)
694 {
695 if(PlayerData[i][jLevel] >= 1)
696 {
697 format(msg, sizeof(msg), CHAT_RED"ADMINISTRATOR WARNING: %s(%i) teleported %s(%i) to him.", PlayerData[playerid][jName], playerid, PlayerData[playerID][jName], playerID);
698 SendClientMessage(i, -1, msg);
699 }
700 }
701 }
702 else return 0;
703 return 1;
704}
705
706CMD:setvw(playerid, params[])
707{
708 new playerID, vwID, msg[128];
709 if(PlayerData[playerid][jLogged] == false) return 0;
710 if(PlayerData[playerid][jLevel] >= 1)
711 {
712 if(sscanf(params, "ii", playerID, vwID)) return SendClientMessage(playerid, RED, "USAGE: /setvw <playerid> <world id>");
713 if(vwID > 2147483647) return SendClientMessage(playerid, RED, "You cannot type number greater than 2,147,483,647. Its maximum.");
714 if(vwID < 0) return SendClientMessage(playerid, RED, "You cannot type number less than 0.");
715 SetPlayerVirtualWorld(playerID, vwID);
716 format(msg, sizeof(msg), CHAT_YELLOW"Administrator "CHAT_LIGHTBLUE"has set your virtual world to %i.", vwID);
717 SendClientMessage(playerID, -1, msg);
718 GetPlayerName(playerid, PlayerData[playerID][jName], MAX_PLAYER_NAME);
719 format(msg, sizeof(msg), CHAT_LIGHTBLUE"You have set "CHAT_YELLOW"%s's(%i) virtual world to %i.", PlayerData[playerID][jName], playerID, vwID);
720 SendClientMessage(playerid, -1, msg);
721 GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
722 for(new i =0; i <MAX_PLAYERS; i++)
723 {
724 if(PlayerData[i][jLevel] >= 1)
725 {
726 format(msg, sizeof(msg), CHAT_RED"ADMINISTRATOR WARNING: %s(%i) has set %s's(%i) virtual world to %i.", PlayerData[playerid][jName], playerid, PlayerData[playerID][jName], playerID, vwID);
727 SendClientMessage(i, -1, msg);
728 }
729 }
730 }
731 else return 0;
732 return 1;
733}
734
735CMD:rac(playerid, params[])
736{
737 new msg[128];
738 if(PlayerData[playerid][jLogged] == false) return 0;
739 if(PlayerData[playerid][jLevel] >= 1)
740 {
741 for(new maxveh = 0; maxveh <MAX_VEHICLES; maxveh++)
742 {
743 SetVehicleToRespawn(maxveh);
744 format(msg, sizeof(msg), CHAT_GREY"ADMINISTRATOR have respawned all vehicles.");
745 SendClientMessageToAll(-1, msg);
746 }
747 }
748 else return 0;
749 return 1;
750}
751
752CMD:veh(playerid, params[])
753{
754 new vehicleID, Float:X, Float:Y, Float:Z, Float:A, colorfirst, colorsecond, msg[128];
755 if(PlayerData[playerid][jLogged] == false) return 0;
756 if(PlayerData[playerid][jLevel] >= 1)
757 {
758 if(sscanf(params, "iii", vehicleID, colorfirst, colorsecond)) return SendClientMessage(playerid, RED, "USAGE: /veh <vehicleID> <color1> <color2>");
759 if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return 0;
760 if(vehicleID < 400) return SendClientMessage(playerid, RED, "You have typed wrong vehicle ID.");
761 if(vehicleID > 611) return SendClientMessage(playerid, RED, "You have typed wrong vehicle ID.");
762 GetPlayerPos(playerid, X, Y, Z);
763 GetPlayerFacingAngle(playerid, A);
764 if(IsValidVehicle(PlayerData[playerid][jVeh]))
765 {
766 DestroyVehicle(PlayerData[playerid][jVeh]);
767 }
768 CreateVehicle(vehicleID, X+2.0, Y+2.0, Z, A, colorfirst, colorsecond, 0, 0);
769 format(msg, sizeof(msg), CHAT_RED"You have created vehicle ID %i with color %i and color %i.", vehicleID, colorfirst, colorsecond);
770 SendClientMessage(playerid, -1, msg);
771 GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
772 for(new i = 0; i <MAX_PLAYERS; i++)
773 {
774 if(PlayerData[i][jLevel] >= 1)
775 {
776 format(msg, sizeof(msg), CHAT_RED"ADMINISTRATOR WARNING: %s(%i) spawned a vehicle.", PlayerData[playerid][jName], playerid);
777 SendClientMessage(i, -1, msg);
778 }
779 }
780 }
781 else return 0;
782 return 1;
783}
784
785CMD:fixveh(playerid, params[])
786{
787 new msg[128];
788 if(PlayerData[playerid][jLogged] == false) return 0;
789 if(PlayerData[playerid][jLevel] >= 1)
790 {
791 if(IsPlayerInAnyVehicle(playerid))
792 {
793 RepairVehicle(GetPlayerVehicleID(playerid));
794 format(msg, sizeof(msg), CHAT_YELLOW"You have repaired this vehicle.");
795 SendClientMessage(playerid, -1, msg);
796 }
797 else return SendClientMessage(playerid, RED, "You must be in vehicle to use this command!");
798 }
799 else return 0;
800 return 1;
801}
802
803CMD:mute(playerid, params[])
804{
805 new playerID, seconds, reason[128], msg[256];
806 if(PlayerData[playerid][jLogged] == false) return 0;
807 if(PlayerData[playerid][jLevel] >= 1)
808 {
809 if(sscanf(params, "iis[128]", playerID, seconds, reason)) return SendClientMessage(playerid, RED, "USAGE: /mute <playerid> <seconds> <reason>");
810 if(PlayerData[playerID][jLogged] == false) return 0;
811 if(playerID == playerid) return 0;
812 if(PlayerData[playerID][jLevel] >= PlayerData[playerid][jLevel]) return SendClientMessage(playerid, RED, "You cannot use this command to higher level or at your level!");
813 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
814 format(msg, sizeof(msg), CHAT_RED"An administrator "CHAT_YELLOW"have muted %s(%i) for %i seconds, REASON: %s.", PlayerData[playerID][jName], playerID, seconds, reason);
815 SendClientMessageToAll(-1, msg);
816 GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
817 PlayerData[playerID][jMutedTime] = seconds;
818 for(new i = 0; i <MAX_PLAYERS; i++)
819 {
820 if(PlayerData[i][jLevel] >= 1)
821 {
822 format(msg, sizeof(msg), CHAT_RED"%s(%i) muted %s(%i) for %s.", PlayerData[playerid][jName], playerid, PlayerData[playerID][jName], playerID, reason);
823 SendClientMessage(i, -1, msg);
824 }
825 }
826 }
827 else return 0;
828 return 1;
829}
830
831CMD:unmute(playerid, params[])
832{
833 new playerID, msg[128];
834 if(PlayerData[playerid][jLogged] == false) return 0;
835 if(PlayerData[playerid][jLevel] >= 1)
836 {
837 if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /unmute <playerid>");
838 if(PlayerData[playerID][jLogged] == false) return 0;
839 if(PlayerData[playerID][jMutedTime] <= 0) return SendClientMessage(playerid, RED, "This player is not muted!");
840 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
841 if(PlayerData[playerID][jMutedTime] >= 1)
842 {
843 format(msg, sizeof(msg), CHAT_RED"You have unmuted "CHAT_YELLOW"%s(%i).", PlayerData[playerID][jName], playerID);
844 SendClientMessage(playerid, -1, msg);
845 SendClientMessage(playerID, GREY, "You have been unmuted by an administrator.");
846 }
847 }
848 else return 0;
849 return 1;
850}
851
852CMD:slay(playerid, params[])
853{
854 new playerID, reason[128], msg[256];
855 if(PlayerData[playerid][jLogged] == false) return 0;
856 if(PlayerData[playerid][jLevel] >= 2)
857 {
858 if(sscanf(params, "is[128]", playerID, reason)) return SendClientMessage(playerid, RED, "USAGE: /slay <playerid> <reason>");
859 if(PlayerData[playerID][jLogged] == false) return 0;
860 if(playerID == playerid) return 0;
861 if(GetPlayerState(playerID) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "This player must be on foot.");
862 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
863 format(msg, sizeof(msg), CHAT_RED"An administrator has slayed "CHAT_YELLOW"%s(%i), REASON: %s.", PlayerData[playerID][jName], playerID, reason);
864 SendClientMessageToAll(-1, msg);
865 GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
866 for(new i = 0; i <MAX_PLAYERS; i++)
867 {
868 if(PlayerData[i][jLevel] >= 1)
869 {
870 format(msg, sizeof(msg), CHAT_RED"ADMINISTRATOR WARNING: %s(%i) have slayed %s(%i) REASON: %s.", PlayerData[playerid][jName], playerid, PlayerData[playerID][jName], playerID);
871 SendClientMessage(i, -1, msg);
872 }
873 }
874 }
875 else return 0;
876 return 1;
877}
878
879CMD:spawn(playerid, params[])
880{
881 new playerID, msg[128];
882 if(PlayerData[playerid][jLogged] == false) return 0;
883 if(PlayerData[playerid][jLevel] >= 2)
884 {
885 if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /spawn <playerid>");
886 if(PlayerData[playerID][jLogged] == false) return 0;
887 SpawnPlayer(playerID);
888 SendClientMessage(playerID, GREY, "You have been spawned by an administrator.");
889 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
890 format(msg, sizeof(msg), CHAT_RED"You have spawned "CHAT_YELLOW"%s(%i).", PlayerData[playerID][jName], playerID);
891 SendClientMessage(playerid, -1, msg);
892 }
893 else return 0;
894 return 1;
895}
896
897CMD:aheal(playerid, params[])
898{
899 new playerID, msg[128];
900 if(PlayerData[playerid][jLogged] == false) return 0;
901 if(PlayerData[playerid][jLevel] >= 2)
902 {
903 if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /aheal <playerid>");
904 if(PlayerData[playerID][jLogged] == false) return 0;
905 SetPlayerHealth(playerID, 100);
906 SendClientMessage(playerID, GREY, "You have been healed by an administrator.");
907 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
908 format(msg, sizeof(msg), CHAT_RED"You have healed "CHAT_YELLOW"%s(%i).", PlayerData[playerID][jName], playerID);
909 SendClientMessage(playerid, -1, msg);
910 }
911 else return 0;
912 return 1;
913}
914
915CMD:jetpack(playerid, params[])
916{
917 if(PlayerData[playerid][jLogged] == false) return 0;
918 if(PlayerData[playerid][jLevel] >= 2)
919 {
920 if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "You must be on foot to use this command!");
921 SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USEJETPACK);
922 SendClientMessage(playerid, RED, "You've spawned jetpack.");
923 }
924 else return 0;
925 return 1;
926}
927
928CMD:setw(playerid, params[])
929{
930 new playerID, wID, msg[128];
931 if(PlayerData[playerid][jLogged] == false) return 0;
932 if(PlayerData[playerid][jLevel] >= 2)
933 {
934 if(sscanf(params, "ii", playerID, wID)) return SendClientMessage(playerid, RED, "USAGE: /setw <playerid> <1-20>");
935 if(wID < 1) return SendClientMessage(playerid, RED, "Weather ID cannot be less than 1.");
936 if(wID > 20) return SendClientMessage(playerid, RED, "Weather ID cannot be greater than 20.");
937 if(PlayerData[playerid][jLogged] == false) return 0;
938 SetPlayerWeather(playerID, wID);
939 format(msg, sizeof(msg), CHAT_YELLOW"An administrator has set your weather ID to "CHAT_YELLOW"%i.", wID);
940 SendClientMessage(playerID, -1, msg);
941 format(msg, sizeof(msg), CHAT_RED"You have set %s's(%i) weather ID to %i", wID);
942 SendClientMessage(playerid, -1, msg);
943 }
944 else return 0;
945 return 1;
946}
947
948CMD:getip(playerid, params[])
949{
950 new playerID, findip[16], msg[128];
951 if(PlayerData[playerid][jLogged] == false) return 0;
952 if(PlayerData[playerid][jLevel] >= 2)
953 {
954 if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /getip <playerid>");
955 GetPlayerIp(playerID, findip, sizeof(findip));
956 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
957 format(msg, sizeof(msg), CHAT_RED"%s's(%i) IP: %s.", PlayerData[playerID][jName], playerID, findip);
958 SendClientMessage(playerid, -1, msg);
959 }
960 else return 0;
961 return 1;
962}
963
964CMD:teleport(playerid, params[])
965{
966 new Float:x, Float:y, Float:z, msg[128];
967 if(PlayerData[playerid][jLogged] == false) return 0;
968 if(PlayerData[playerid][jLevel] >= 2)
969 {
970 if(sscanf(params, "iii", x, y, z)) return SendClientMessage(playerid, RED, "USAGE: /teleport <x> <y> <z>");
971 SetPlayerPos(playerid, x, y, z);
972 format(msg, sizeof(msg), CHAT_RED"You have been teleported to %f, %f, %f.", x, y, z);
973 SendClientMessage(playerid, -1, msg);
974 }
975 else return 0;
976 return 1;
977}
978
979CMD:giveweapon(playerid, params[])
980{
981 new playerID, weaponID, ammo, msg[128];
982 if(PlayerData[playerid][jLogged] == false) return 0;
983 if(PlayerData[playerid][jLevel] >= 2)
984 {
985 if(sscanf(params, "iii", playerID, weaponID, ammo)) return SendClientMessage(playerid, RED, "USAGE: /giveweapon <playerid> <weaponid> <ammo>");
986 if(GetPlayerState(playerID) != PLAYER_STATE_ONFOOT) return 0;
987 if(weaponID < 1) return SendClientMessage(playerid, RED, "The weapon ID you typed was wrong!");
988 if(weaponID > 46) return SendClientMessage(playerid, RED, "The weapon ID you typed was wrong!");
989 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
990 format(msg, sizeof(msg), CHAT_RED"You have given %s(%i) weapon ID: %i with ammo: %i.", PlayerData[playerID][jName], playerID, weaponID, ammo);
991 SendClientMessage(playerid, -1, msg);
992 GivePlayerWeapon(playerID, weaponID, ammo);
993 }
994 else return 0;
995 return 1;
996}
997
998CMD:disarm(playerid, params[])
999{
1000 new playerID, msg[128];
1001 if(PlayerData[playerid][jLogged] == false) return 0;
1002 if(PlayerData[playerid][jLevel] >= 2)
1003 {
1004 if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /disarm <playerid>");
1005 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
1006 format(msg, sizeof(msg), CHAT_RED"You have disarmed %s(%i).", PlayerData[playerID][jName], playerID);
1007 SendClientMessage(playerid, -1, msg);
1008 ResetPlayerWeapons(playerID);
1009 }
1010 else return 0;
1011 return 1;
1012}
1013
1014CMD:clearchat(playerid, params[])
1015{
1016 if(PlayerData[playerid][jLogged] == false) return 0;
1017 if(PlayerData[playerid][jLevel] >= 2)
1018 {
1019 SendClientMessageToAll(-1, "");
1020 SendClientMessageToAll(-1, "");
1021 SendClientMessageToAll(-1, "");
1022 SendClientMessageToAll(-1, "");
1023 SendClientMessageToAll(-1, "");
1024 SendClientMessageToAll(-1, "");
1025 SendClientMessageToAll(-1, "");
1026 SendClientMessageToAll(-1, "");
1027 SendClientMessageToAll(-1, "");
1028 SendClientMessageToAll(-1, "");
1029 SendClientMessageToAll(-1, "");
1030 SendClientMessageToAll(-1, "");
1031 SendClientMessageToAll(-1, "");
1032 SendClientMessageToAll(-1, "");
1033 SendClientMessageToAll(-1, "");
1034 SendClientMessageToAll(-1, "");
1035 SendClientMessageToAll(WHITE, "Administrator cleared the chat!");
1036 }
1037 else return 0;
1038 return 1;
1039}
1040
1041CMD:aod(playerid, params[])
1042{
1043 if(PlayerData[playerid][jLogged] == false) return 0;
1044 if(PlayerData[playerid][jLevel] >= 2)
1045 {
1046 if(PlayerData[playerid][onDuty] >= 1)
1047 {
1048 SendClientMessage(playerid, RED, "You are now off duty.");
1049 PlayerData[playerid][onDuty] = 0;
1050 }
1051 else
1052 {
1053 if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "You must be on foot to use this command!");
1054 SendClientMessage(playerid, GREY, "You are now on duty.");
1055 SetPlayerHealth(playerid, 100000000);
1056 PlayerData[playerid][onDuty] = 1;
1057 }
1058 }
1059 else return 0;
1060 return 1;
1061}
1062
1063CMD:sethealth(playerid, params[])
1064{
1065 new playerID, amount, msg[128];
1066 if(PlayerData[playerid][jLogged] == false) return 0;
1067 if(PlayerData[playerid][jLevel] >= 3)
1068 {
1069 if(sscanf(params, "ii", playerID, amount)) return SendClientMessage(playerid, RED, "USAGE: /sethealth <playerid> <amount>");
1070 if(PlayerData[playerID][jLogged] == false) return 0;
1071 if(GetPlayerState(playerID) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "This player must be on foot to use this command.");
1072 SetPlayerHealth(playerID, amount);
1073 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
1074 format(msg, sizeof(msg), CHAT_RED"You have set "CHAT_YELLOW"%s's(%i) health to %i.", PlayerData[playerID][jName], playerID, amount);
1075 SendClientMessage(playerid, -1, msg);
1076 format(msg, sizeof(msg), CHAT_RED"An administrator has set your health to %i.", amount);
1077 SendClientMessage(playerID, -1, msg);
1078 }
1079 else return 0;
1080 return 1;
1081}
1082
1083CMD:setarmour(playerid, params[])
1084{
1085 new playerID, amount, msg[128];
1086 if(PlayerData[playerid][jLogged] == false) return 0;
1087 if(PlayerData[playerid][jLevel] >= 3)
1088 {
1089 if(sscanf(params, "ii", playerID, amount)) return SendClientMessage(playerid, RED, "USAGE: /setarmour <playerid> <amount>");
1090 if(PlayerData[playerID][jLogged] == false) return 0;
1091 if(GetPlayerState(playerID) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "This player must be on foot to use this command.");
1092 SetPlayerArmour(playerID, amount);
1093 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
1094 format(msg, sizeof(msg), CHAT_RED"You have set "CHAT_YELLOW"%s's(%i) armour to %i.", PlayerData[playerID][jName], playerID, amount);
1095 SendClientMessage(playerid, -1, msg);
1096 format(msg, sizeof(msg), CHAT_RED"An administrator has set your armour to %i.", amount);
1097 SendClientMessage(playerID, -1, msg);
1098 }
1099 else return 0;
1100 return 1;
1101}
1102
1103CMD:setallhealth(playerid, params[])
1104{
1105 new amount, msg[128];
1106 if(PlayerData[playerid][jLogged] == false) return 0;
1107 if(PlayerData[playerid][jLevel] >= 3)
1108 {
1109 if(sscanf(params, "i", amount)) return SendClientMessage(playerid, RED, "USAGE: /setallhealth <amount>");
1110 for(new i = 0; i <MAX_PLAYERS; i++)
1111 {
1112 SetPlayerHealth(i, amount);
1113 }
1114 format(msg, sizeof(msg), CHAT_RED"You have set all player's health to %i.", amount);
1115 SendClientMessage(playerid, -1, msg);
1116 format(msg, sizeof(msg), CHAT_RED"An administrator have set all player's health to %i.", amount);
1117 SendClientMessageToAll(-1, msg);
1118 }
1119 else return 0;
1120 return 1;
1121}
1122
1123CMD:setallarmour(playerid, params[])
1124{
1125 new amount, msg[128];
1126 if(PlayerData[playerid][jLogged] == false) return 0;
1127 if(PlayerData[playerid][jLevel] >= 3)
1128 {
1129 if(sscanf(params, "i", amount)) return SendClientMessage(playerid, RED, "USAGE: /setallarmour <amount>");
1130 for(new i = 0; i <MAX_PLAYERS; i++)
1131 {
1132 SetPlayerArmour(i, amount);
1133 }
1134 format(msg, sizeof(msg), CHAT_RED"You have set all player's armour to %i.", amount);
1135 SendClientMessage(playerid, -1, msg);
1136 format(msg, sizeof(msg), CHAT_RED"An administrator have set all player's armour to %i.", amount);
1137 SendClientMessageToAll(-1, msg);
1138 }
1139 else return 0;
1140 return 1;
1141}
1142
1143CMD:settime(playerid, params[])
1144{
1145 new playerID, hours, minutes, msg[128];
1146 if(PlayerData[playerid][jLogged] == false) return 0;
1147 if(PlayerData[playerid][jLevel] >= 3)
1148 {
1149 if(sscanf(params, "ii", playerID, hours, minutes)) return SendClientMessage(playerid, RED, "USAGE: /settime <playerid> <hours> <minutes>");
1150 if(PlayerData[playerID][jLogged] == false) return 0;
1151 SetPlayerTime(playerID, hours, minutes);
1152 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
1153 format(msg, sizeof(msg), CHAT_RED"You have set %s's(%i) time to : hours - %i, minutes - %i.", PlayerData[playerID][jName], playerID, hours, minutes);
1154 SendClientMessage(playerid, -1, msg);
1155 format(msg, sizeof(msg), CHAT_RED"An administrator have set your time to"CHAT_YELLOW" hours - %i, minutes - %i.", hours, minutes);
1156 SendClientMessage(playerID, -1, msg);
1157 }
1158 else return 0;
1159 return 1;
1160}
1161
1162CMD:freeze(playerid, params[])
1163{
1164 new playerID, string[128];
1165 if(PlayerData[playerid][jLogged] == false) return 0;
1166 if(PlayerData[playerid][jLevel] >= 3)
1167 {
1168 if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /freeze <playerid>");
1169 if(PlayerData[playerID][jLogged] == false) return 0;
1170 TogglePlayerControllable(playerID, 0);
1171 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
1172 format(string, sizeof(string), CHAT_RED"You have freezed %s(%i).", PlayerData[playerID][jName], playerID);
1173 SendClientMessage(playerid, -1, string);
1174 SendClientMessage(playerID, RED, "You have been freeze by an administrator.");
1175 }
1176 else return 0;
1177 return 1;
1178}
1179
1180CMD:unfreeze(playerid, params[])
1181{
1182 new playerID, string[128];
1183 if(PlayerData[playerid][jLogged] == false) return 0;
1184 if(PlayerData[playerid][jLevel] >= 3)
1185 {
1186 if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /unfreeze <playerid>");
1187 TogglePlayerSpectating(playerID, 1);
1188 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
1189 format(string, sizeof(string), CHAT_RED"You have unfreezed %s(%i).", PlayerData[playerID][jName], playerID);
1190 SendClientMessage(playerid, -1, string);
1191 SendClientMessage(playerID, -1, "You have been unfreezed by an administrator.");
1192 }
1193 else return 0;
1194 return 1;
1195}
1196
1197CMD:announce(playerid, params[])
1198{
1199 new textmsg[256], string[300];
1200 if(PlayerData[playerid][jLogged] == false) return 0;
1201 if(PlayerData[playerid][jLevel] >= 3)
1202 {
1203 if(sscanf(params, "s[256]", textmsg)) return SendClientMessage(playerid, RED, "USAGE: /announce <text>");
1204 format(string, sizeof(string), "Administrator Announcement: %s", textmsg);
1205 SendClientMessageToAll(-1, string);
1206 }
1207 else return 0;
1208 return 1;
1209}
1210
1211CMD:givecash(playerid, params[])
1212{
1213 new playerID, amount, msg[128];
1214 if(PlayerData[playerid][jLogged] == false) return 0;
1215 if(PlayerData[playerid][jLevel] >= 4)
1216 {
1217 if(sscanf(params, "ii", playerID, amount)) return SendClientMessage(playerid, RED, "USAGE: /givecash <playerid> <amount>");
1218 if(PlayerData[playerID][jLogged] == false) return 0;
1219 GivePlayerMoney(playerID, amount);
1220 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
1221 format(msg, sizeof(msg), CHAT_RED"You have given $%i to %s(%i).", amount, PlayerData[playerID][jName], playerID);
1222 SendClientMessage(playerid, -1, msg);
1223 format(msg, sizeof(msg), CHAT_RED"An administrator has given you $%i.", amount);
1224 SendClientMessage(playerID, -1, msg);
1225 for(new i = 0; i <MAX_PLAYERS; i++)
1226 {
1227 if(PlayerData[i][jLevel] >= 1)
1228 {
1229 format(msg, sizeof(msg), CHAT_RED"ADMINISTRATOR WARNING: %s(%i) has given $%i to %s(%i).", PlayerData[playerid][jName], playerid, amount, PlayerData[playerID][jName], playerID);
1230 SendClientMessage(i, -1, msg);
1231 }
1232 }
1233 }
1234 else return 0;
1235 return 1;
1236}
1237
1238CMD:giveallcash(playerid, params[])
1239{
1240 new amount, msg[128];
1241 if(PlayerData[playerid][jLogged] == false) return 0;
1242 if(PlayerData[playerid][jLevel] >= 4)
1243 {
1244 if(sscanf(params, "i", amount)) return SendClientMessage(playerid, RED, "USAGE: /giveallcash <amount>");
1245 for(new i = 0; i <MAX_PLAYERS; i++)
1246 {
1247 GivePlayerMoney(i, amount);
1248 format(msg, sizeof(msg), CHAT_RED"An administrator have given $%i to all players.", amount);
1249 SendClientMessageToAll(-1, msg);
1250 }
1251 }
1252 else return 0;
1253 return 1;
1254}
1255
1256CMD:setskin(playerid, params[])
1257{
1258 new playerID, skinID, msg[128];
1259 if(PlayerData[playerid][jLogged] == false) return 0;
1260 if(PlayerData[playerid][jLevel] >= 4)
1261 {
1262 if(sscanf(params, "ii", playerID, skinID)) return SendClientMessage(playerid, RED, "USAGE: /setskin <playerid> <skinid>");
1263 if(GetPlayerState(playerID) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "This player must be on foot to use this command.");
1264 if(skinID < 0) return SendClientMessage(playerid, RED, "The skin ID you typed was wrong, you can type in range 0-299.");
1265 if(skinID > 299) return SendClientMessage(playerid, RED, "The skin ID you typed was wrong, you can type in range 0-299.");
1266 SetPlayerSkin(playerID, skinID);
1267 format(msg, sizeof(msg), CHAT_RED"An administrator has set your skin to "CHAT_YELLOW"%i", skinID);
1268 SendClientMessage(playerID, -1, msg);
1269 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
1270 format(msg, sizeof(msg), CHAT_RED"You have set %s's(%i) skin ID to %i.", PlayerData[playerID][jName], playerID, skinID);
1271 SendClientMessage(playerid, -1, msg);
1272 }
1273 else return 0;
1274 return 1;
1275}
1276
1277CMD:setallskin(playerid, params[])
1278{
1279 new skinID, msg[128];
1280 if(PlayerData[playerid][jLogged] == false) return 0;
1281 if(PlayerData[playerid][jLevel] >= 4)
1282 {
1283 if(sscanf(params, "i", skinID)) return SendClientMessage(playerid, RED, "USAGE: /setallskin <skinid>");
1284 if(skinID < 0) return SendClientMessage(playerid, RED, "The skin ID you typed was wrong, you can type in rage 0-299.");
1285 if(skinID > 299) return SendClientMessage(playerid, RED, "The skin ID you typed was wrong, you can type in rage 0-299.");
1286 for(new i = 0; i <MAX_PLAYERS; i++)
1287 {
1288 SetPlayerSkin(i, skinID);
1289 format(msg, sizeof(msg), CHAT_RED"An administrator has set all player's skin ID to "CHAT_YELLOW"%i.", skinID);
1290 SendClientMessageToAll(-1, msg);
1291 }
1292 }
1293 else return 0;
1294 return 1;
1295}
1296
1297CMD:setmoney(playerid, params[])
1298{
1299 new playerID, amount, msg[128];
1300 if(PlayerData[playerid][jLogged] == false) return 0;
1301 if(PlayerData[playerid][jLevel] >= 4)
1302 {
1303 if(sscanf(params, "ii", playerID, amount)) return SendClientMessage(playerid, RED, "USAGE: /setmoney <playerid> <amount>");
1304 if(PlayerData[playerID][jLogged] == false) return 0;
1305 ResetPlayerMoney(playerID);
1306 GivePlayerMoney(playerID, amount);
1307 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
1308 format(msg, sizeof(msg), CHAT_RED"You have set %s's(%i) money to %i", PlayerData[playerID][jName], playerID, amount);
1309 GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
1310 for(new i = 0; i <MAX_PLAYERS; i++)
1311 {
1312 if(PlayerData[i][jLevel] >= 1)
1313 {
1314 format(msg, sizeof(msg), CHAT_RED"%s(%i) has set %s's(%i) money to %i.", PlayerData[playerid][jName], playerid, PlayerData[playerID][jName], playerID, amount);
1315 SendClientMessage(i, -1, msg);
1316 }
1317 }
1318 }
1319 else return 0;
1320 return 1;
1321}
1322
1323CMD:resetmoney(playerid, params[])
1324{
1325 new playerID, msg[128];
1326 if(PlayerData[playerid][jLogged] == false) return 0;
1327 if(PlayerData[playerid][jLevel] >= 4)
1328 {
1329 if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /resetmoney <playerid>");
1330 if(PlayerData[playerID][jLogged] == false) return 0;
1331 ResetPlayerMoney(playerID);
1332 GetPlayerName(playerID, PlayerData[playerid][jName], MAX_PLAYER_NAME);
1333 format(msg, sizeof(msg), CHAT_RED"You have resetted %s's(%i) money.", PlayerData[playerID][jName], playerID);
1334 SendClientMessage(playerid, -1, msg);
1335 GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
1336 for(new i = 0; i <MAX_PLAYERS; i++)
1337 {
1338 if(PlayerData[i][jLevel] >= 1)
1339 {
1340 format(msg, sizeof(msg), CHAT_RED"ADMINISTRATOR WARNING: %s(%i) has reset %s's(%i) money.", PlayerData[playerid][jName], playerid, PlayerData[playerID][jName], playerID);
1341 SendClientMessage(i, -1, msg);
1342 }
1343 }
1344 }
1345 else return 0;
1346 return 1;
1347}
1348
1349CMD:ban(playerid, params[])
1350{
1351 if(PlayerData[playerid][jLogged] == false) return 0;
1352 if(PlayerData[playerid][jLevel] < 4) return 0;
1353
1354 new targetid;
1355 new reason[64];
1356 new days;
1357 if (sscanf(params, "uis[64]", targetid, days, reason))
1358 {
1359 SendClientMessage(playerid, COLOR_WHITE, "Usage: /ban [id/name] [days] [reason]");
1360 return SendClientMessage(playerid, COLOR_WHITE, "Note: 0 days means a permanent ban from server.");
1361 }
1362
1363 if (!IsPlayerConnected(targetid))
1364 {
1365 return SendClientMessage(playerid, COLOR_TOMATO, "Target player isn't online.");
1366 }
1367
1368 if (days < 0 || days > 365)
1369 {
1370 return SendClientMessage(playerid, COLOR_TOMATO, "Number of days cannot be negative or greater than 365 days i.e. a year! [0 = permanent ban]");
1371 }
1372
1373 if (strlen(reason) < 4)
1374 {
1375 return SendClientMessage(playerid, COLOR_TOMATO, "Invalid reason entered.");
1376 }
1377
1378 banTargetID[playerid] = targetid;
1379 banTargetDays[playerid] = days;
1380 format(banTargetReason[playerid], sizeof banTargetReason[], reason);
1381
1382 new name[MAX_PLAYER_NAME];
1383 new ip[18];
1384 GetPlayerName(targetid, name, sizeof name);
1385 GetPlayerIp(targetid, ip, sizeof ip);
1386
1387 new string[1024] = ""COL_WHITE"You are about to ban a player! Please confirm the following\ncredentials and click \""COL_PINK"Ban"COL_WHITE"\" if they are correct, else click \""COL_TOMATO"Cancel"COL_WHITE"\".";
1388 if (days != 0)
1389 {
1390 format(string, sizeof string, "%s\n\n- "COL_PINK"Player: "COL_WHITE"%s (IP: %s)\n- "COL_PINK"Type: "COL_WHITE"Temporary - %i days\n- "COL_PINK"Reason: "COL_WHITE"%s",
1391 string, name, ip, days, reason);
1392 }
1393 else
1394 {
1395 format(string, sizeof string, "%s\n\n- "COL_PINK"Player: "COL_WHITE"%s (IP: %s)\n- "COL_PINK"Type: "COL_WHITE"Permanent\n- "COL_PINK"Reason: "COL_WHITE"%s",
1396 string, name, ip, reason);
1397 }
1398 strcat(string, "\n\n"COL_WHITE"Admin Note: If the cheat player used is challengable, make sure you have\nsome kind of evidence in case a ban appeal is posted.");
1399
1400 return Dialog_Show(playerid, BAN_PLAYER, DIALOG_STYLE_MSGBOX, "Ban A Player...", string, "Ban", "Cancel");
1401}
1402
1403CMD:searchban(playerid, params[])
1404{
1405 if(PlayerData[playerid][jLogged] == false) return 0;
1406 if(PlayerData[playerid][jLevel] < 4) return 0;
1407 if (!params[0] || params[0] == ' ' || strlen(params) < 4)
1408 {
1409 return SendClientMessage(playerid, COLOR_WHITE, "Usage: /searchban [name/ip]");
1410 }
1411 new bool:nameEntered;
1412 for (new i; params[i] != EOS; i++)
1413 {
1414 if (params[i] == '.' || params[i] >= '0' && params[i] <= '9')
1415 {
1416 continue;
1417 }
1418 nameEntered = true;
1419 break;
1420 }
1421
1422 new string[1024];
1423 if (nameEntered)
1424 {
1425 format(string, sizeof string, "SELECT * FROM `users` WHERE `name` = '%s' LIMIT 1", params);
1426 }
1427 else
1428 {
1429 if (!Ban_GetLongIP(params))
1430 {
1431 return SendClientMessage(playerid, COLOR_TOMATO, "Invalid IP. Address entered.");
1432 }
1433 format(string, sizeof string, "SELECT * FROM `users` WHERE (`longip` != 0 AND (`longip` & %i) = %i) LIMIT 1", BAN_MASK, (Ban_GetLongIP(params) & BAN_MASK));
1434 }
1435 new DBResult:result = db_query(banDatabase, string);
1436 if (db_num_rows(result) == 0)
1437 {
1438 if (nameEntered)
1439 {
1440 SendClientMessage(playerid, COLOR_TOMATO, "The player you are looking for is not banned.");
1441 }
1442 else
1443 {
1444 SendClientMessage(playerid, COLOR_TOMATO, "The IP. you entered is not banned.");
1445 }
1446 return db_free_result(result);
1447 }
1448 if (db_get_field_assoc_int(result, "expire_timestamp") != 0 && db_get_field_assoc_int(result, "expire_timestamp") <= gettime())
1449 {
1450 format(string, sizeof string, "DELETE FROM `users` WHERE `id` = %i", db_get_field_assoc_int(result, "id"));
1451 db_query(banDatabase, string);
1452
1453 new name[MAX_PLAYER_NAME];
1454 db_get_field_assoc(result, "name", name, sizeof name);
1455 format(string, sizeof string, "\"%s\"'s ban was lifted %s ago.", name, ReturnTimelapse(db_get_field_assoc_int(result, "expire_timestamp"), gettime()));
1456 SendClientMessage(playerid, COLOR_GREEN, string);
1457
1458 return db_free_result(result);
1459 }
1460
1461 unbanTargetID[playerid] = db_get_field_assoc_int(result, "id");
1462
1463 db_get_field_assoc(result, "name", unbanTargetName[playerid], sizeof unbanTargetName[]);
1464 db_get_field_assoc(result, "ip", unbanTargetIp[playerid], sizeof unbanTargetIp[]);
1465 new reason[64];
1466 db_get_field_assoc(result, "reason", reason, sizeof reason);
1467 new admin[MAX_PLAYER_NAME];
1468 db_get_field_assoc(result, "admin", admin, sizeof admin);
1469
1470 format(string, sizeof string, ""COL_WHITE"Showing ban result for your search \""COL_TOMATO"%s"COL_WHITE"\".\nIf you want to unban this player personally, click \""COL_PINK"Unban"COL_WHITE"\"; or click \""COL_TOMATO"Close"COL_WHITE"\" to close this dialog!", params);
1471 if (db_get_field_assoc_int(result, "expire_timestamp") != 0)
1472 {
1473 format(string, sizeof string, "%s\n\n- "COL_PINK"Player: "COL_WHITE"%s (IP: %s)\n- "COL_PINK"Dated: "COL_WHITE"%s (%s ago)\n- "COL_PINK"Timeleft For Unban: "COL_WHITE"%s\n- "COL_PINK"Admin Who Banned: "COL_WHITE"%s\n- "COL_PINK"Reason: "COL_WHITE"%s",
1474 string, unbanTargetName[playerid], unbanTargetIp[playerid], ReturnDate(db_get_field_assoc_int(result, "register_timestamp")), ReturnTimelapse(db_get_field_assoc_int(result, "register_timestamp"), gettime()), ReturnTimelapse(gettime(), db_get_field_assoc_int(result, "expire_timestamp")), admin, reason);
1475 }
1476 else
1477 {
1478 format(string, sizeof string, "%s\n\n- "COL_PINK"Player: "COL_WHITE"%s (IP: %s)\n- "COL_PINK"Dated: "COL_WHITE"%s (%s ago)\n- "COL_PINK"Timeleft For Unban: "COL_WHITE"Never (permanent ban)\n- "COL_PINK"Admin Who Banned: "COL_WHITE"%s\n- "COL_PINK"Reason: "COL_WHITE"%s",
1479 string, unbanTargetName[playerid], unbanTargetIp[playerid], ReturnDate(db_get_field_assoc_int(result, "register_timestamp")), ReturnTimelapse(db_get_field_assoc_int(result, "register_timestamp"), gettime()), admin, reason);
1480 }
1481 format(string, sizeof string, "%s\n\n"COL_WHITE"Player last active was on \"%s\" during ban time period!", string, ReturnDate(db_get_field_assoc_int(result, "last_activity_timestamp")));
1482
1483 db_free_result(result);
1484
1485 return Dialog_Show(playerid, SEARCH_BANNED_PLAYER, DIALOG_STYLE_MSGBOX, "Search result for banned Player / IP...", string, "Close", "UnBan");
1486}
1487
1488CMD:setlevel(playerid, params[])
1489{
1490 new playerID, aLevel, msg[128];
1491 if(PlayerData[playerid][jLogged] == false) return 0;
1492 if(PlayerData[playerid][jLevel] >= 5)
1493 {
1494 if(sscanf(params, "ii", playerID, aLevel)) return SendClientMessage(playerid, RED, "USAGE: /setlevel <playerid> <level>");
1495 if(PlayerData[playerID][jLogged] == false) return 0;
1496 PlayerData[playerID][jLevel] = aLevel;
1497 GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
1498 format(msg, sizeof(msg), CHAT_RED"%s(%i) has set you to admin level %i.", PlayerData[playerid][jName], playerid, aLevel);
1499 SendClientMessage(playerid, -1, msg);
1500 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
1501 format(msg, sizeof(msg), CHAT_RED"You have set %s's(%i) admin level to %i.", PlayerData[playerID][jName], playerID, aLevel);
1502 SendClientMessage(playerID, -1, msg);
1503 }
1504 else return 0;
1505 return 1;
1506}
1507
1508CMD:sethelper(playerid, params[])
1509{
1510 new playerID, hLevel, msg[128];
1511 if(PlayerData[playerid][jLogged] == false) return 0;
1512 if(PlayerData[playerid][jLevel] >= 5)
1513 {
1514 if(sscanf(params, "ii", playerID, hLevel)) return SendClientMessage(playerid, RED, "USAGE: /sethelper <playerid> <level>");
1515 if(PlayerData[playerID][jLogged] == false) return 0;
1516 PlayerData[playerID][jHelper] = hLevel;
1517 GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
1518 format(msg, sizeof(msg), CHAT_RED"%s(%i) has set you to helper level %i.", PlayerData[playerid][jName], playerid, hLevel);
1519 SendClientMessage(playerID, -1, msg);
1520 format(msg, sizeof(msg), CHAT_RED"You have set %s's(%i) helper level to %i.", PlayerData[playerID][jName], playerid, hLevel);
1521 SendClientMessage(playerid, -1, msg);
1522 }
1523 else return 0;
1524 return 1;
1525}
1526
1527CMD:setvip(playerid, params[])
1528{
1529 new playerID, vLevel, msg[128];
1530 if(PlayerData[playerid][jLogged] == false) return 0;
1531 if(PlayerData[playerid][jLevel] >= 5)
1532 {
1533 if(sscanf(params, "ii", playerID, vLevel)) return SendClientMessage(playerid, RED, "USAGE: /setvip <playerid> <level>");
1534 if(PlayerData[playerID][jLogged] == false) return 0;
1535 PlayerData[playerID][jVIP] = vLevel;
1536 GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
1537 format(msg, sizeof(msg), CHAT_RED"%s(%i) has set you to vip level %i.", PlayerData[playerid][jName], playerid, vLevel);
1538 SendClientMessage(playerID, -1, msg);
1539 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
1540 format(msg, sizeof(msg), CHAT_RED"You have set %s's(%i) vip level to %i.", PlayerData[playerid][jName], playerid, vLevel);
1541 SendClientMessage(playerid, -1, msg);
1542 }
1543 else return 0;
1544 return 1;
1545}
1546
1547CMD:setwanted(playerid, params[])
1548{
1549 new playerID, wLevel, msg[128];
1550 if(PlayerData[playerid][jLogged] == false) return 0;
1551 if(PlayerData[playerid][jLevel] >= 5)
1552 {
1553 if(sscanf(params, "ii", playerID, wLevel)) return SendClientMessage(playerid, RED, "USAGE: /setwanted <playerid> <wanted level>");
1554 if(PlayerData[playerID][jLogged] == false) return 0;
1555 SetPlayerWantedLevel(playerID, wLevel);
1556 GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
1557 format(msg, sizeof(msg), CHAT_RED"%s(%i) has set your wanted level to %i.", PlayerData[playerid][jName], playerid, wLevel);
1558 SendClientMessage(playerID, -1, msg);
1559 GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
1560 format(msg, sizeof(msg), CHAT_RED"You have set %s's(%i) wanted level to %i.", PlayerData[playerID][jName], playerID, wLevel);
1561 SendClientMessage(playerid, -1, msg);
1562 }
1563 else return 0;
1564 return 1;
1565}
1566
1567CMD:restart(playerid, params[])
1568{
1569 if(PlayerData[playerid][jLogged] == false) return 0;
1570 if(PlayerData[playerid][jLevel] >= 5)
1571 {
1572 SendRconCommand("gmx");
1573 }
1574 else return 0;
1575 return 1;
1576}
1577
1578//Player Commands
1579CMD:cmds(playerid, params[])
1580{
1581 new str[128];
1582 if(PlayerData[playerid][jLogged] == false) return 0;
1583 strcat(str, "/admins, /stats.");
1584 ShowPlayerDialog(playerid, DIALOG_COMMANDS, DIALOG_STYLE_MSGBOX, "Server Commands", str, "Close", "");
1585 return 1;
1586}
1587
1588CMD:admins(playerid, params[])
1589{
1590 new string[256];
1591 if(PlayerData[playerid][jLogged] == false) return 0;
1592 for(new i = 0; i <MAX_PLAYERS; i++)
1593 {
1594 if(PlayerData[i][jLevel] >= 1)
1595 {
1596 GetPlayerName(i, PlayerData[i][jName], MAX_PLAYER_NAME);
1597 format(string, sizeof(string), CHAT_YELLOW"%s(%i) - Level %i", PlayerData[i][jName], i, PlayerData[i][jLevel]);
1598 ShowPlayerDialog(playerid, DIALOG_ADMINS, DIALOG_STYLE_MSGBOX, "Server Admins", string, "Close", "");
1599 }
1600 SendClientMessage(playerid, RED, "No Admins Online.");
1601 }
1602 return 1;
1603}
1604
1605CMD:stats(playerid, params[])
1606{
1607 new string[1500];
1608 if(PlayerData[playerid][jLogged] == false) return 0;
1609 format(string, sizeof(string), CHAT_GREY"Score: "CHAT_YELLOW"%i\n"CHAT_GREY"Money: "CHAT_YELLOW"%i\n"CHAT_GREY"Wanted Level: "CHAT_YELLOW"%i\n"CHAT_GREY"Kills: "CHAT_YELLOW"%i\n"CHAT_GREY"Deaths: "CHAT_YELLOW"%i\n"CHAT_GREY"Admin: "CHAT_YELLOW"%i\n"CHAT_GREY"VIP: "CHAT_YELLOW"%i\n"CHAT_GREY"Helper: "CHAT_YELLOW"%i\n",
1610 GetPlayerScore(playerid), GetPlayerMoney(playerid), GetPlayerWantedLevel(playerid), PlayerData[playerid][jKills], PlayerData[playerid][jDeaths], PlayerData[playerid][jLevel], PlayerData[playerid][jVIP], PlayerData[playerid][jHelper]);
1611 ShowPlayerDialog(playerid, DIALOG_STATS, DIALOG_STYLE_MSGBOX, "Your Stats", string, "Close", "");
1612 return 1;
1613}
1614
1615Dialog:BAN_PLAYER(playerid, response, listitem, inputtext[])
1616{
1617 if (!IsPlayerConnected(banTargetID[playerid]))
1618 {
1619 return SendClientMessage(playerid, COLOR_TOMATO, "The player you were trying to ban left the server recently.");
1620 }
1621
1622 new string[512];
1623 if (!response)
1624 {
1625 new name[MAX_PLAYER_NAME];
1626 GetPlayerName(banTargetID[playerid], name, sizeof name);
1627 format(string, sizeof string, "Ban on %s was canceled by you!", name);
1628 return SendClientMessage(playerid, COLOR_TOMATO, string);
1629 }
1630
1631 new name[MAX_PLAYER_NAME];
1632 new ip[18];
1633 GetPlayerName(banTargetID[playerid], name, sizeof name);
1634 GetPlayerIp(banTargetID[playerid], ip, sizeof ip);
1635
1636 new admin[MAX_PLAYER_NAME];
1637 GetPlayerName(playerid, admin, sizeof admin);
1638
1639 for (new i; i < 100; i++)
1640 {
1641 SendClientMessage(banTargetID[playerid], -1, "");
1642 }
1643
1644 if (banTargetDays[playerid] != 0)
1645 {
1646 format(string, sizeof string, "\"%s\" has been banned by admin \"%s\" for %i days; for reason: %s.", name, admin, banTargetDays[playerid], banTargetReason[playerid]);
1647 SendClientMessageToAll(COLOR_RED, string);
1648 }
1649 else
1650 {
1651 format(string, sizeof string, "\"%s\" has been permanently banned by admin \"%s\"; for reason: %s.", name, admin, banTargetReason[playerid]);
1652 SendClientMessageToAll(COLOR_RED, string);
1653 }
1654
1655 format(string, sizeof string, "INSERT INTO `users`(`name`, `ip`, `longip`, `expire_timestamp`, `register_timestamp`, `last_activity_timestamp`, `admin`, `reason`) VALUES('%s', '%s', %i, %i, %i, %i, '%s', '%s')", name, ip, Ban_GetLongIP(ip), (banTargetDays[playerid] == 0) ? (0) : (gettime() + (banTargetDays[playerid] * 24 * 60 * 60)), gettime(), gettime(), name, banTargetReason[playerid]);
1656 db_query(banDatabase, string);
1657
1658 TextDrawShowForPlayer(playerid, banTextDraw[0]);
1659 TextDrawShowForPlayer(playerid, banTextDraw[1]);
1660 return Kick(banTargetID[playerid], KICK_DELAY);
1661}
1662
1663Dialog:SEARCH_BANNED_PLAYER(playerid, response, listitem, inputtext[])
1664{
1665 if (response)
1666 {
1667 return 1;
1668 }
1669
1670 new string[256];
1671 format(string, sizeof string, "DELETE FROM `users` WHERE `name` = '%s' OR `ip` = '%s' OR `longip` != 0 AND (`longip` & %i) = %i", unbanTargetName[playerid], unbanTargetIp[playerid], BAN_MASK, (Ban_GetLongIP(unbanTargetIp[playerid]) & BAN_MASK));
1672 db_query(banDatabase, string);
1673
1674 format(string, sizeof string, "You have unbanned player \"%s\" successfully!", unbanTargetName[playerid]);
1675 return SendClientMessage(playerid, COLOR_GREEN, string);
1676}