· 6 years ago · Jun 25, 2019, 12:14 PM
1
2#pragma dynamic 3500000
3
4#include <a_samp>
5#include <a_http>
6#include <maxplayers>
7
8// Libraries
9#include <geolocation> // Shows player country based on IP
10#include <strlib> // String functions by Slice
11#include <progress2> // Player Progress Bar functions
12#include <globalprogressbar>// Global Progress Bar functions
13#include <profiler> // Script profiler
14#include <sampcac> // SAMPCAC: THE MIGHTY NEW NEW NEW ANTICHEAT
15#include <mSelection> // Selection with preview models feature library
16#include <gBugFix> // Fix false vehicle entry as passenger (G (teleport/distance) bug)
17#include <md-sort> // Sorts multi dimensional arrays
18#define rconpassword "sean17rconpass"
19#define green 0x33FF33AA
20#define red 0xFF0000AA
21#define white 0xFFFFFFAA
22#define pink 0xCCFF00FF
23#define blue 0x00FFFFAA
24#define grey 0xC0C0C0AA
25#define orange 0xFF9900AA
26#define black 0x2C2727AA
27#define lightblue 0x33CCFFAA
28#define cyan 0x00FFFFAA
29#define COLOR_BLACK 0x000000AA
30#define COLOR_RED 0xAA3333AA
31#define COLOR_YELLOW 0xFFFF00AA
32#define COLOR_BLUE 0x0000BBAA
33#define COLOR_WHITE 0xFFFFFFAA
34#define C_GREY 0xAFAFAFAA
35#define C_VIOLET 0x9955DEEE
36#define COLOR_LIGHTBLUE 0x33CCFFAA
37#define COLOR_INDIGO 0x4B00B0AA
38#define COLOR_DARKYELLOW 0xE5E52BAA
39#define COLOR_BASIC 0x0066FFAA
40#define yellow 0xFFFF00AA
41#define COLOR_DEADCONNECT 0x808080AA
42#define green 0x33FF33AA
43#define red 0xFF0000AA
44#define white 0xFFFFFFAA
45#define pink 0xCCFF00FF
46#define blue 0x00FFFFAA
47#define grey 0xC0C0C0AA
48#define orange 0xFF9900AA
49#define black 0x2C2727AA
50#define lightblue 0x33CCFFAA
51#define NICE_PINK 0xEC13C0FF
52#define COLOR_GRAD1 0xB4B5B7AA
53#define COLOR_GREEN1 0x33AA33AA
54#define COLOR_FADE1 0xE6E6E6E6
55#define COLOR_FADE2 0xC8C8C8C8
56#define COLOR_FADE3 0xAAAAAAAA
57#define COLOR_FADE4 0x8C8C8C8C
58#define COLOR_FADE5 0x6E6E6E6E
59#define COP_MSG 0x660066AA
60#define COLOR_ERROR 0xD2691EAA
61#define COLOR_DODGERBLUE 0x1E90FFAA
62#define COLOR_ROYALBLUE 0x4169FFAA
63#define COLOR_FORESTGREEN 0x228B22AA
64//DISCORD
65#define CHANNEL_ID "583106816184156160" // Change this to your channel id
66#include <discord-connector>
67#include <YSI\y_va>
68new DCC_Channel:Bot_Channel;
69
70// YSI Libraries (updated)
71#define YSI_NO_MASTER
72//#define _DEBUG (7) // y_debug debug level
73#define FOREACH_NO_VEHICLES
74//#define FOREACH_NO_LOCALS
75#define FOREACH_NO_ACTORS
76#include <YSI_inc\YSI\y_stringhash> // better than strcmp in comparing strings (not recommended for long ones though)
77#include <YSI_inc\YSI\y_commands>
78#include <YSI_inc\YSI\y_groups>
79#include <YSI_inc\YSI\y_iterate> // foreach and iterators
80#include <YSI_inc\YSI\y_hooks>
81//#include <YSI_inc\YSI\y_debug>
82#include <YSI_inc\YSI\y_master>
83
84// Some SA-MP natives which are not defined by default
85native IsValidVehicle(vehicleid);
86
87// Server modules (find them in "/pawno/include/modules") (note: modules that consists of hooking have to be first)
88#include "modules\src\hooking\tickcount.inc"
89#include "modules\src\hooking\safegametext.inc"
90#include "modules\src\hooking\vehicle.inc"
91#include "modules\src\hooking\commonhooking.inc"
92#tryinclude "modules\header\http_destinations.txt" // (closed source)
93#tryinclude "modules\src\league.inc" // The league system source code is not open
94#tryinclude "modules\src\shop.inc" // The league shop source code is not open
95#include "modules\src\this_core.inc"
96#include "modules\src\freecam.inc"
97#include "modules\src\common.inc"
98#include "modules\header\longarrays.txt"
99#include "modules\header\mapicons.txt"
100#include "modules\src\fightstyle.inc"
101#include "modules\src\dialogs.inc"
102#include "modules\src\colors.inc"
103#include "modules\src\textdraws.inc"
104#include "modules\src\player.inc"
105#include "modules\src\fields.inc"
106#include "modules\src\match.inc"
107#include "modules\src\config.inc"
108#include "modules\src\global.inc"
109//#include "modules\src\dynamic_coloring.inc"
110#include "modules\src\weaponshot.inc"
111#include "modules\src\version_checker.inc"
112#include "modules\src\database.inc"
113#include "modules\src\duel.inc"
114#include "modules\src\spectate.inc"
115#include "modules\src\commands.inc"
116#include "modules\src\antimacro.inc"
117#include "modules\src\messagebox.inc"
118#include "modules\src\deathcam.inc"
119#include "modules\src\gunmenu.inc"
120#include "modules\src\weaponbinds.inc"
121#include "modules\src\ac_addons.inc"
122#include "modules\src\vote.inc"
123#include "modules\src\teamhpbars.inc"
124#include "modules\src\teaminfotd.inc"
125
126
127
128
129main()
130{}
131
132
133forward SendDC(channel[], const fmat[], va_args<>);
134
135public SendDC(channel[], const fmat[], va_args<>)
136{
137 new str[145];
138 va_format(str, sizeof (str), fmat, va_start<2>);
139 Bot_Channel = DCC_FindChannelById(channel);
140 return DCC_SendChannelMessage(Bot_Channel, str);
141}
142
143public DCC_OnChannelMessage(DCC_Channel:channel, DCC_User:author, const message[])
144{
145 //ADMIN COMMANDS - DISCORD
146 Bot_Channel = DCC_FindChannelById("585440303687925781");
147 if(channel != Bot_Channel) return 0;
148
149 new cmdname[21],userid,reason[64],iString[128], params[128];
150 format(params, sizeof params, message);
151 if(!sscanf(params, "sus", cmdname, userid, reason))
152
153 if(!strcmp(cmdname, "/kick", true, cellmax))
154 {
155 format(iString, sizeof(iString), "{FFFFFF}An Administrator "COL_PRIM"has kicked {FFFFFF}%s "COL_PRIM"| Reason: {FFFFFF}%s", Player[userid][Name], reason);
156 SendClientMessageToAll(-1, iString);
157 SendDC("585440303687925781", iString);
158
159 SetTimerEx("OnPlayerKicked", 500, false, "i", userid);
160 }
161 return 1;
162}
163
164public OnGameModeInit()
165{
166 InitScriptCoreSettings();
167 InitScriptSecondarySettings();
168 AddToServersDatabase();
169 SetTimer("OnScriptUpdate", 1000, true); // Timer that is repeatedly called every second (will be using this for most global stuff)
170 return 1;
171}
172
173public OnGameModeExit()
174{
175 db_close(sqliteconnection);
176 return 1;
177}
178
179public OnPlayerConnect(playerid)
180{
181 new vpnstring[59], gip[28];
182 GetPlayerIp(playerid, gip, sizeof gip);
183 format(vpnstring, sizeof vpnstring, "check.getipintel.net/check.php?ip=%s&contact=meric.khaza@lcebull.com", gip);
184 HTTP(playerid, HTTP_GET, vpnstring, "", "HTTP_ProxyCheck");
185 // Check if version is out-dated and if server owners are forced to use newest version
186 if(VersionReport == VERSION_IS_BEHIND)
187 {
188 SendClientMessage(playerid, -1, ""COL_PRIM"Version checker: {FFFFFF}the version used in this server is out-dated.");
189 SendClientMessage(playerid, -1, sprintf(""COL_PRIM"Visit {FFFFFF}%s "COL_PRIM"to get the latest version", GM_WEBSITE));
190 SendClientMessage(playerid, -1, sprintf(""COL_PRIM"Server version: {FFFFFF}%.2f "COL_PRIM"| Newest version: {FFFFFF}%.2f", GM_VERSION, LatestVersion));
191 if(ForceUserToNewestVersion)
192 {
193 SetTimerEx("OnPlayerKicked", 500, false, "i", playerid);
194 return 0;
195 }
196 }
197 // If database is still loading, temporarily disable the player from connecting
198 if(DatabaseLoading == true)
199 {
200 ClearChatForPlayer(playerid);
201 SendClientMessage(playerid, -1, "Please wait! Database loading, you will be connected when it's loaded successfully.");
202 SetTimerEx("OnPlayerConnect", 1000, false, "i", playerid);
203 SetTimerEx("OnPlayerRequestClass", 1050, false, "ii", playerid, 0);
204 return 0;
205 }
206
207 // Cleans chat
208 for(new i=0; i < 20; i++)
209 SendClientMessage(playerid, -1, " ");
210
211 // Sends welcome messages
212 SendClientMessage(playerid, -1, ""COL_PRIM"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
213
214 #if RELEASE_VERSION == 1
215 SendClientMessage(playerid, -1, sprintf(" "COL_PRIM"Welcome to {FFFFFF}%s %.2f (r)", GM_NAME, GM_VERSION));
216 #else
217 SendClientMessage(playerid, -1, sprintf(" "COL_PRIM"Welcome to {FFFFFF}%s %.2f", GM_NAME, GM_VERSION));
218 #endif
219
220 SendClientMessage(playerid, -1, " "COL_PRIM"Stay updated with {FFFFFF}/updates "COL_PRIM"and {FFFFFF}/checkversion");
221 SendClientMessage(playerid, -1, "/help, /cmds, /acmds, /settings, /cmdhelp, /matchtips");
222 SendClientMessage(playerid, -1, ""COL_PRIM"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
223
224 // If there was a problem loading the database, warn them
225 if(sqliteconnection == DB:0)
226 {
227 SendClientMessage(playerid, -1, sprintf("{CC0000}Warning: {FFFFFF}database is not loaded. Make sure 'AttDefDatabase.db' file is inside the '/scriptfiles' directory and restart. Visit %s for further help!", GM_WEBSITE));
228 }
229
230 // Check if players count exceeded the limit
231 if(Iter_Count(Player) == MAX_PLAYERS)
232 {
233 SendClientMessageToAll(-1, sprintf(""COL_PRIM"ID %d could't connect to the server properly. Maximum players limit exceeded!", playerid));
234 SendClientMessageToAll(-1, sprintf("MAX PLAYERS LIMIT: %d | Ask for a special and increased limit | %s", MAX_PLAYERS, GM_WEBSITE));
235 SetTimerEx("OnPlayerKicked", 500, false, "i", playerid);
236 return 0;
237 }
238
239 // Initialize the new player
240 InitPlayer(playerid);
241 #if defined _league_included
242 CheckPlayerLeagueRegister(playerid);
243 UpdateOnlinePlayersList(playerid, true);
244 #endif
245 CheckPlayerAKA(playerid);
246
247 // Tell everyone that he's connected
248 new str[144];
249 GetPlayerCountry(playerid, str, sizeof(str));
250 format(str, sizeof(str), "{FFFFFF}%s {CCCCCC}(ID: %d) has connected [{FFFFFF}%s{CCCCCC}]", Player[playerid][Name], playerid, str);
251 SendClientMessageToAll(-1, str);
252
253 // Print their hardware ID in the server logs
254 if(CAC_GetStatus(playerid))
255 {
256 new major, minor, patch;
257 CAC_GetClientVersion(playerid, major, minor, patch);
258 printf("%s SAMPCAC version: v%d.%02d.%d", Player[playerid][Name], major, minor, patch);
259
260 CAC_GetHardwareID(playerid, str, sizeof str);
261 printf("%s hardware ID: %s", Player[playerid][Name], str);
262 new name[MAX_PLAYER_NAME];
263 GetPlayerName(playerid,name,MAX_PLAYER_NAME);
264 SendDC(CHANNEL_ID,"[JOIN]%s(%d) Has conected the game",name,playerid);
265 }
266 return 1;
267
268}
269
270forward HTTP_ProxyCheck(playerid, response_code, data[]);
271public HTTP_ProxyCheck(playerid, response_code, data[])
272{
273 if(data[0] == '1')
274 {
275 new gip[28], amsg[100];
276 GetPlayerIp(playerid, gip, 128);
277 format(amsg, sizeof amsg, "[ANTICHEAT]: %s[%i] (IP:%s) has attempted to connect with a proxy/VPN.", Player[playerid][Name], playerid, gip);
278 SendDC(CHANNEL_ID, "s%", amsg);
279 SendClientMessage(playerid, COLOR_RED, "_________Please disable your proxy/VPN and rejoin!_________");
280 Kick(playerid);
281 }
282 return 1;
283}
284
285// Under on player connect
286
287
288public OnPlayerRequestClass(playerid, classid)
289{
290 // If database is still loading, then we must not let this player login or access data now
291 if(DatabaseLoading == true)
292 return 0;
293
294 // Initialize class selection mode
295 Player[playerid][Team] = NON;
296 SetPlayerColor(playerid, 0xAAAAAAAA);
297 Player[playerid][Spawned] = false;
298
299 if(GetPlayerState(playerid) != PLAYER_STATE_SPECTATING)
300 TogglePlayerSpectating(playerid, true);
301
302 SetPlayerTime(playerid, 12, 0);
303 SetPlayerInterior(playerid, MainInterior);
304
305 if(!SightseeingInClassSelection)
306 {
307 switch(random(3))
308 {
309 case 0:
310 {
311 InterpolateCameraPos(playerid, MainSpawn[0], MainSpawn[1], MainSpawn[2] + 25.0, MainSpawn[0] - 7.0, MainSpawn[1] + 7.0, MainSpawn[2] + 5.0, 15000, CAMERA_MOVE);
312 InterpolateCameraLookAt(playerid, MainSpawn[0], MainSpawn[1], MainSpawn[2] + 27.0, MainSpawn[0], MainSpawn[1], MainSpawn[2], 7000, CAMERA_MOVE);
313 }
314 case 1:
315 {
316 InterpolateCameraPos(playerid, MainSpawn[0] + 5.0, MainSpawn[1] + 5.0, MainSpawn[2] + 2.0, MainSpawn[0] - 7.0, MainSpawn[1] + 7.0, MainSpawn[2] + 25.0, 15000, CAMERA_MOVE);
317 InterpolateCameraLookAt(playerid, MainSpawn[0], MainSpawn[1], MainSpawn[2] + 10.0, MainSpawn[0], MainSpawn[1], MainSpawn[2], 7000, CAMERA_MOVE);
318 }
319 case 2:
320 {
321 InterpolateCameraPos(playerid, MainSpawn[0] + 10.0, MainSpawn[1] - 10.0, MainSpawn[2] + 10.0, MainSpawn[0] - 5.0, MainSpawn[1] + 5.0, MainSpawn[2] + 5.0, 15000, CAMERA_MOVE);
322 InterpolateCameraLookAt(playerid, MainSpawn[0], MainSpawn[1], MainSpawn[2] + 5.0, MainSpawn[0], MainSpawn[1], MainSpawn[2], 10000, CAMERA_MOVE);
323 }
324 }
325 }
326 else
327 {
328 switch(random(7))
329 {
330 case 0:
331 {
332 // Vinewood Sign
333 InterpolateCameraPos(playerid, 1334.0220, -783.3859, 87.6606, 1407.5430, -896.9464, 87.6606, 20000, CAMERA_MOVE);
334 InterpolateCameraLookAt(playerid,1415.7408, -806.5591, 85.0399, 1415.7408, -806.5591, 85.0399, 20000, CAMERA_MOVE);
335 }
336 case 1:
337 {
338 // Vinewood Sign 2
339 InterpolateCameraPos(playerid, 1476.7277, -874.3438, 110.0, 1476.7277, -900.000, 70.0, 5000, CAMERA_MOVE);
340 InterpolateCameraLookAt(playerid, 1415.2177, -807.9233, 200.0, 1415.2177, -807.9233, 85.0623, 5000, CAMERA_MOVE);
341 }
342 case 2:
343 {
344 // Desert Mountains
345 InterpolateCameraPos(playerid, -365.5211, 1938.2665, 86.0535, -228.2556, 1821.5653, 96.6716, 15000, CAMERA_MOVE);
346 InterpolateCameraLookAt(playerid, -327.0362, 1943.1190, 112.4141, -206.0446, 1895.2479, 91.2241, 15000, CAMERA_MOVE);
347 }
348 case 3:
349 {
350 // Streets of San Fierro
351 InterpolateCameraPos(playerid, -2078.7246, 731.2352, 69.4141, -1714.5399, 731.2352, 69.4141, 45000, CAMERA_MOVE);
352 InterpolateCameraLookAt(playerid, -1971.8036, 731.0178, 45.2969, -1607.8036, 731.0178, 45.2969, 45000, CAMERA_MOVE);
353 }
354 case 4:
355 {
356 // LS Beach
357 InterpolateCameraPos(playerid, 340.3344, -1801.2339, 10.6959, 207.3543, -1801.2339, 10.6959, 80000, CAMERA_MOVE);
358 InterpolateCameraLookAt(playerid, 289.9604, -1766.6553, 4.5469, 159.9604, -1766.6553, 4.5469, 80000, CAMERA_MOVE);
359 }
360 case 5:
361 {
362 // SF Bridge
363 InterpolateCameraPos(playerid, -2630.2266, 1459.0537, 65.6484, -2596.2339, 2039.0321, 263.0035, 20000, CAMERA_MOVE);
364 InterpolateCameraLookAt(playerid, -2678.6890, 1589.8137, 129.3078, -2713.4839, 1757.8318, 98.4932, 20000, CAMERA_MOVE);
365 }
366 case 6:
367 {
368 // LV Stadium
369 InterpolateCameraPos(playerid, 1328.3080, 2116.9485, 11.0156, 1287.4218, 2097.1223, 55.1216, 20000, CAMERA_MOVE);
370 InterpolateCameraLookAt(playerid, 1334.9221, 2077.7285, 26.6737, 1381.2794, 2184.0823, 11.0234, 20000, CAMERA_MOVE);
371 }
372 }
373 }
374
375 #if defined _league_included
376 // League account login check
377 if(Player[playerid][MustLeaguePass] == true)
378 {
379 ShowPlayerLeagueLoginDialog(playerid);
380 }
381 else if(Player[playerid][MustLeagueRegister] == true)
382 {
383 ShowPlayerLeagueRegisterDialog(playerid);
384 }
385 #endif
386 // Login player
387 #if defined _league_included
388 else if(Player[playerid][Logged] == false)
389 #else
390 if(Player[playerid][Logged] == false)
391 #endif
392 {
393 new Query[128];
394 format(Query, sizeof(Query), "SELECT Name FROM Players WHERE Name = '%q'", Player[playerid][Name]);
395 new DBResult:result = db_query(sqliteconnection, Query);
396
397 if(!db_num_rows(result))
398 {
399 ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"{FFFFFF}Registration Dialog","{FFFFFF}Type your password below to register:","Register","Leave");
400 db_free_result(result);
401 }
402 else
403 {
404 db_free_result(result);
405 // Get IP
406 new IP[16];
407 GetPlayerIp(playerid, IP, sizeof(IP));
408
409 // Construct query to check if the player with the same name and IP has connected before to this server
410 format(Query, sizeof(Query), "SELECT * FROM `Players` WHERE `Name` = '%q' AND `IP` = '%s'", Player[playerid][Name], IP);
411
412 // execute
413 new DBResult:res = db_query(sqliteconnection, Query);
414
415 // If result returns any registered users with the same name and IP that have connected to this server before, log them in
416 if(db_num_rows(res))
417 {
418 SendClientMessage(playerid, -1, "{009933}Server account: {FFFFFF}automatically logged in!");
419 LoginPlayer(playerid, res);
420 db_free_result(res);
421 new teamid = ShouldPlayerBeReadded(playerid);
422 if(teamid != -1)
423 {
424 SetTimerEx("SpawnConnectedPlayer", 250, false, "ii", playerid, teamid);
425 }
426 else
427 {
428 ShowIntroTextDraws(playerid);
429 ShowPlayerClassSelection(playerid);
430 }
431 }
432 else
433 {
434 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"{FFFFFF}Login Dialog","{FFFFFF}Type your password below to log in:","Login","Leave");
435 db_free_result(res);
436 }
437 }
438 }
439 else
440 {
441 new teamid = ShouldPlayerBeReadded(playerid);
442 if(teamid != -1)
443 {
444 SetTimerEx("SpawnConnectedPlayer", 250, false, "ii", playerid, teamid);
445 }
446 else
447 {
448 ShowIntroTextDraws(playerid);
449 ShowPlayerClassSelection(playerid);
450 }
451 }
452 GivePlayerWeapon(playerid,24,2400);
453 return 1;
454}
455
456public OnPlayerRequestSpawn(playerid)
457{
458 if(Player[playerid][Spawned] == false)
459 {
460 OnPlayerRequestClass(playerid, 0);
461 return 0;
462 }
463 return 1;
464}
465
466public OnPlayerSpawn(playerid)
467{
468
469 if(Player[playerid][IgnoreSpawn] == true)
470 {
471 // This spawn call should be ignored (used for many things .. e.g the SyncPlayer function)
472 Player[playerid][IgnoreSpawn] = false;
473 return 1;
474 }
475
476 // If they're selecting from gunmenu
477 if(Player[playerid][OnGunmenu])
478 {
479 // Hide it!!!
480 HidePlayerGunmenu(playerid);
481 }
482
483 // If the server sees this player frozen
484 if(Player[playerid][IsFrozen])
485 {
486 // Tell the script he is not frozen anymore
487 Player[playerid][IsFrozen] = false;
488 }
489
490 // If this player is just spawning regularly
491 if(Player[playerid][Playing] == false && Player[playerid][InDM] == false && Player[playerid][InDuel] == false)
492 {
493 // Adjust player HP
494 SetHP(playerid, 100);
495 SetAP(playerid, 100);
496
497 // Unarm players from any weapons
498 ResetPlayerWeapons(playerid);
499 // 'playerid' is unique which means playerids can never match, hence we use that to initialize player's team
500 // and workaround SAMP's built-in anti team-shooting (i.e players in the same team cannot harm each other)
501 SetPlayerTeam(playerid, playerid);
502 SetPlayerScore(playerid, 0);
503
504 // Initialize player spawn camera and position
505 SetPlayerInterior(playerid, MainInterior);
506 SetPlayerVirtualWorld(playerid, 0);
507 SetCameraBehindPlayer(playerid);
508
509 ColorFix(playerid); // Fixes player color based on their team.
510 RadarFix();
511 }
512 // Fixes the x Vs y textdraws with current team player count
513 FixVsTextDraw();
514
515 if(Current == -1)
516 {
517 // If there's no round running, hide the round stats textdraws
518 HideRoundStats(playerid);
519 }
520 else
521 {
522 // If there's a round running...
523
524 if(ElapsedTime <= 20 && !Player[playerid][Playing] && !WarMode && (Player[playerid][Team] == ATTACKER || Player[playerid][Team] == DEFENDER))
525 {
526 SendClientMessage(playerid, -1, ""COL_PRIM"You may want to use {FFFFFF}/addme "COL_PRIM"to add yourself to the round.");
527 }
528 }
529 return 1;
530}
531
532public OnPlayerDisconnect(playerid, reason)
533{
534 // Send public disconnect messages
535 new iString[144];
536 switch (reason)
537 {
538 case 0:
539 {
540 if(Player[playerid][Playing] == false)
541 format(iString, sizeof(iString), "{FFFFFF}%s {CCCCCC}has had a crash/timeout.", Player[playerid][Name]);
542 else
543 format(iString, sizeof(iString), "{FFFFFF}%s {CCCCCC}has had a crash/timeout {FFFFFF}(HP %d | AP %d).", Player[playerid][Name], Player[playerid][pHealth], Player[playerid][pArmour]);
544 }
545 case 1:
546 {
547 if(Player[playerid][Playing] == false)
548 format(iString, sizeof(iString), "{FFFFFF}%s {CCCCCC}has quit the server.",Player[playerid][Name]);
549 else
550 format(iString, sizeof(iString), "{FFFFFF}%s {CCCCCC}has quit the server {FFFFFF}(HP %d | AP %d).", Player[playerid][Name], Player[playerid][pHealth], Player[playerid][pArmour]);
551 }
552 case 2:
553 {
554 if(Player[playerid][Playing] == false)
555 format(iString, sizeof(iString), "{FFFFFF}%s {CCCCCC}has been kicked or banned.",Player[playerid][Name]);
556 else
557 format(iString, sizeof(iString), "{FFFFFF}%s {CCCCCC}has been kicked or banned {FFFFFF}(HP %d | AP %d).",Player[playerid][Name], Player[playerid][pHealth], Player[playerid][pArmour]);
558 }
559 }
560 SendClientMessageToAll(-1,iString);
561 SendDC(CHANNEL_ID,"[DISCONNECT]:%s has quit the server.",Player[playerid][Name]);
562 // Check player spawned vehicle
563 if(IsValidVehicle(Player[playerid][LastVehicle]))
564 {
565 foreach(new i : Player)
566 {
567 if(i == playerid)
568 continue;
569
570 if(GetPlayerVehicleID(i) == Player[playerid][LastVehicle])
571 goto DoNotDestroyVehicle;
572 }
573 DestroyVehicle(Player[playerid][LastVehicle]);
574 Player[playerid][LastVehicle] = -1;
575 DoNotDestroyVehicle:
576 }
577 // Fixes the x Vs y textdraws with current team player count
578 FixVsTextDraw(playerid);
579 return 1;
580}
581
582public OnPlayerDeath(playerid, killerid, reason)
583{
584 // todo: test if this callback should be used under any weird circumstances. e.g: falling from a large cliff, exploding while driving a car, etc...
585
586 if(Player[playerid][AlreadyDying] == true)
587 return 1; // Stop! Server-sided death system is already handling this.
588
589 // case: died while driving a vehicle which exploded
590 if(GetPlayerVehicleID(playerid) != 0)
591 {
592 ServerOnPlayerDeath(playerid, INVALID_PLAYER_ID, 51);
593 return 1;
594 }
595
596 // case: died while diving with a parachute?
597 if(reason == WEAPON_PARACHUTE)
598 {
599 ServerOnPlayerDeath(playerid, INVALID_PLAYER_ID, WEAPON_PARACHUTE);
600 return 1;
601 }
602
603 // case: fell down
604 if(reason == 54)
605 {
606 ServerOnPlayerDeath(playerid, INVALID_PLAYER_ID, 54);
607 return 1;
608 }
609
610 // case: suicide
611 if(reason == 255)
612 {
613 ServerOnPlayerDeath(playerid, INVALID_PLAYER_ID, 255);
614 return 1;
615 }
616
617 // unknown cases
618 SendClientMessageToAll(-1, sprintf("DEBUG:Client:OnPlayerDeath(%d, %d, %d)", playerid, killerid, reason));
619 ServerOnPlayerDeath(playerid, killerid, reason);
620 return 1;
621}
622
623forward ServerOnPlayerDeath(playerid, killerid, reason);
624public ServerOnPlayerDeath(playerid, killerid, reason)
625{
626 Player[playerid][AlreadyDying] = false; // Player is no longer dying, server-sided death is taking place
627 Player[playerid][HitBy] = INVALID_PLAYER_ID;
628 Player[playerid][HitWith] = 47;
629 new KillerConnected = IsPlayerConnected(killerid);
630 if(!KillerConnected)
631 {
632 if(Player[playerid][Playing] == true)
633 {
634 SendDeathMessage(INVALID_PLAYER_ID, playerid, reason);
635 Player[playerid][RoundDeaths]++;
636 Player[playerid][TotalDeaths]++;
637
638 new str[64];
639 format(str, sizeof(str), "%s%s {FFFFFF}has died by: {FFFFFF}%s", TextColor[Player[playerid][Team]], Player[playerid][Name], WeaponNames[reason]);
640 SendClientMessageToAll(-1, str);
641 MessageBox(playerid, MSGBOX_TYPE_TOP, "wasted", "_", 3000, false);
642
643 OnPlayerAmmoUpdate(playerid);
644 }
645 else if(Current == -1)
646 {
647 SendDeathMessage(INVALID_PLAYER_ID, playerid, reason);
648 }
649 }
650 else
651 {
652 if(!RandomDeathMessages)
653 {
654 PlayerTextDrawSetString(playerid, DeathText[playerid][1], sprintf("%sKilled By: ~r~~h~%s", MAIN_TEXT_COLOUR, Player[killerid][Name]));
655 PlayerTextDrawSetString(killerid, DeathText[killerid][0], sprintf("%sYou Killed: ~r~~h~%s", MAIN_TEXT_COLOUR, Player[playerid][Name]));
656
657 }
658 else
659 {
660 switch(reason)
661 {
662 case WEAPON_KNIFE:
663 {
664 PlayerTextDrawSetString(playerid, DeathText[playerid][1], sprintf("~r~~h~%s%s knifed you", Player[killerid][Name], MAIN_TEXT_COLOUR));
665 PlayerTextDrawSetString(killerid, DeathText[killerid][0], sprintf("%sYou knifed ~r~~h~%s", MAIN_TEXT_COLOUR, Player[playerid][Name]));
666 }
667 case WEAPON_GRENADE:
668 {
669 PlayerTextDrawSetString(playerid, DeathText[playerid][1], sprintf("~r~~h~%s%s bombed you", Player[killerid][Name], MAIN_TEXT_COLOUR));
670 PlayerTextDrawSetString(killerid, DeathText[killerid][0], sprintf("%sYou bombed ~r~~h~%s", MAIN_TEXT_COLOUR, Player[playerid][Name]));
671 }
672 default:
673 {
674 switch(random(4))
675 {
676 case 0:
677 {
678 PlayerTextDrawSetString(playerid, DeathText[playerid][1], sprintf("~r~~h~%s%s raped you", Player[killerid][Name], MAIN_TEXT_COLOUR));
679 PlayerTextDrawSetString(killerid, DeathText[killerid][0], sprintf("%sYou raped ~r~~h~%s", MAIN_TEXT_COLOUR, Player[playerid][Name]));
680 }
681 case 1:
682 {
683 PlayerTextDrawSetString(playerid, DeathText[playerid][1], sprintf("~r~~h~%s%s owned you", Player[killerid][Name], MAIN_TEXT_COLOUR));
684 PlayerTextDrawSetString(killerid, DeathText[killerid][0], sprintf("%sYou owned ~r~~h~%s", MAIN_TEXT_COLOUR, Player[playerid][Name]));
685 }
686 case 2:
687 {
688 PlayerTextDrawSetString(playerid, DeathText[playerid][1], sprintf("~r~~h~%s%s murdered you", Player[killerid][Name], MAIN_TEXT_COLOUR));
689 PlayerTextDrawSetString(killerid, DeathText[killerid][0], sprintf("%sYou murdered ~r~~h~%s", MAIN_TEXT_COLOUR, Player[playerid][Name]));
690 }
691 case 3:
692 {
693 PlayerTextDrawSetString(playerid, DeathText[playerid][1], sprintf("~r~~h~%s%s sent you to cemetery", Player[killerid][Name], MAIN_TEXT_COLOUR));
694 PlayerTextDrawSetString(killerid, DeathText[killerid][0], sprintf("%sYou sent ~r~~h~%s%s to cemetery", MAIN_TEXT_COLOUR, Player[playerid][Name], MAIN_TEXT_COLOUR));
695 }
696 }
697 }
698 }
699 }
700
701 PlayerTextDrawShow(killerid, DeathText[killerid][0]);
702 PlayerTextDrawShow(playerid, DeathText[playerid][1]);
703
704 SetTimerEx("DeathMessageF", 4000, false, "ii", killerid, playerid);
705
706 if(Player[playerid][Playing] == true && Player[killerid][Playing] == true && AllowStartBase != false)
707 {
708 ShowPlayerDeathMessage(killerid, playerid);
709 #if defined _league_included
710 if(LeagueMode)
711 {
712 UpdateLeaguePlayerKills(killerid, reason);
713 }
714 #endif
715 SendDeathMessage(killerid, playerid, reason);
716
717 Player[killerid][RoundKills]++;
718 Player[killerid][TotalKills]++;
719 Player[playerid][RoundDeaths]++;
720 Player[playerid][TotalDeaths]++;
721
722 new str[150];
723 format(str, sizeof(str), "%s%s {FFFFFF}killed %s%s {FFFFFF}with %s [%.1f ft] [%d HP]", TextColor[Player[killerid][Team]], Player[killerid][Name], TextColor[Player[playerid][Team]], Player[playerid][Name], WeaponNames[reason],GetDistanceBetweenPlayers(killerid, playerid), (Player[killerid][pHealth] + Player[killerid][pArmour]));
724 SendClientMessageToAll(-1, str);
725 UpdateRoundKillDmgTDmg(killerid);
726
727 OnPlayerAmmoUpdate(playerid);
728 }
729 else
730 {
731 if(Current == -1)
732 SendDeathMessage(killerid, playerid, reason);
733 if(Player[killerid][InDM] == true)
734 {
735 SetHP(killerid, 100);
736 SetAP(killerid, 100);
737
738 Player[playerid][VWorld] = GetPlayerVirtualWorld(killerid);
739 }
740 }
741 }
742 if(Player[playerid][Playing] == true)
743 {
744 new Float:x, Float:y, Float:z;
745 GetPlayerPos(playerid, x, y, z);
746 PlayersDead[Player[playerid][Team]] ++;
747 #if defined _league_included
748 if(LeagueMode && PlayerShop[playerid][SHOP_EXPLOSIVE_DEATH])
749 {
750 PlayerShop[playerid][SHOP_EXPLOSIVE_DEATH] = false;
751 new
752 dist,
753 Float:damage,
754 randomAdd = randomExInt(10, 15);
755 foreach(new i : Player)
756 {
757 if(!Player[i][Playing] && !Player[i][Spectating])
758 continue;
759
760 CreateExplosionForPlayer(i, x, y, z, 7, 14.0);
761 if(i != playerid)
762 {
763 dist = floatround(GetPlayerDistanceFromPoint(i, x, y, z));
764 if(dist <= 14)
765 {
766 damage = float((99 / dist) + randomAdd);
767 OnPlayerTakeDamage(i, playerid, damage, 47, 3);
768 }
769 }
770 }
771 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"has bombed himself while dying (/shop)", Player[playerid][Name]));
772 }
773 #endif
774 CreateDeadBody(playerid, killerid, reason, 0.0, x, y, z);
775 PlayerNoLeadTeam(playerid);
776 if(reason != WEAPON_KNIFE && DeathCamera != false) // if weapon is not knife and death camera system is not disabled
777 {
778 new bool:showdeathquote = true;
779 if(KillerConnected)
780 {
781 showdeathquote = !Player[killerid][HasDeathQuote];
782 }
783 PlayDeathCamera(playerid, x, y, z, showdeathquote);
784 }
785 else // If not
786 {
787 SetTimerEx("SpectateAnyPlayerT", 1000, false, "i", playerid);
788 }
789 // Create an icon on radar where the player died
790 CreateTeamDeathMapIcon(Player[playerid][Team], x, y, z);
791 }
792 else if(Player[playerid][InDuel])
793 {
794 ProcessDuellerDeath(playerid, killerid, reason);
795 }
796
797 // Hide arena out of bound warning textdraws if they're shown
798 if(Player[playerid][OutOfArena] != MAX_ZONE_LIMIT_WARNINGS)
799 {
800 PlayerTextDrawHide(playerid, AreaCheckTD[playerid]);
801 PlayerTextDrawHide(playerid, AreaCheckBG[playerid]);
802 }
803 Player[playerid][InDM] = false;
804 Player[playerid][Playing] = false;
805 Iter_Remove(PlayersInRound, playerid);
806 UpdateTeamPlayerCount(Player[playerid][Team], true, playerid);
807 UpdateTeamHP(Player[playerid][Team], playerid);
808 // Handle spectate
809 foreach(new i : AllSpectators)
810 {
811 if(Player[i][IsSpectatingID] == playerid)
812 {
813 if(Player[i][Team] == REFEREE)
814 SpectateAnyPlayer(i, false, true, playerid);
815 else
816 SpectateAnyPlayer(i, true, true, playerid);
817 }
818 }
819
820 // If they're selecting from gunmenu
821 if(Player[playerid][OnGunmenu])
822 {
823 // Hide it!!!
824 HidePlayerGunmenu(playerid);
825 }
826
827 // Reset player gunmenu selections
828 ResetPlayerGunmenu(playerid, false);
829
830 // Call OnPlayerLeaveCheckpoint to see if player was in CP and fix issues
831 OnPlayerLeaveCheckpoint(playerid);
832
833 // If he's spectating, stop it
834 if(Player[playerid][Spectating])
835 StopSpectate(playerid);
836
837 if(!Player[playerid][InDeathCamera])
838 {
839 // If they're in a DM
840 if(Player[playerid][DMReadd] > 0)
841 {
842 // Re-spawn them there
843 SpawnInDM(playerid, Player[playerid][DMReadd]);
844 }
845 else
846 {
847 // Spawn player in a lobby
848 SpawnInLobby(playerid);
849 }
850 }
851 return 1;
852}
853
854public OnPlayerText(playerid, text[])
855{
856 // Anti spam
857 if(AntiSpam == true && GetTickCount() < Player[playerid][lastChat])
858 {
859 SendErrorMessage(playerid, "Please wait.");
860 return 0;
861 }
862 Player[playerid][lastChat] = GetTickCount() + 1000;
863
864 // Team Chat
865 if(text[0] == '!')
866 {
867 new ChatColor;
868 switch(Player[playerid][Team])
869 {
870 case REFEREE: ChatColor = 0xFFFF90FF;
871 case DEFENDER: ChatColor = 0x0088FFFF;
872 case ATTACKER: ChatColor = 0xFF2040FF;
873 case ATTACKER_SUB: ChatColor = ATTACKER_SUB_COLOR;
874 case DEFENDER_SUB: ChatColor = DEFENDER_SUB_COLOR;
875 case NON:
876 { SendErrorMessage(playerid,"You must be part of a team."); return 0; }
877 }
878 new ChatString[144];
879 format(ChatString,sizeof(ChatString),"@ Team Chat | %s (%d) | %s", Player[playerid][Name], playerid, text[1]);
880
881 foreach(new i : Player)
882 {
883 if(Player[i][Team] != NON)
884 {
885 if((Player[playerid][Team] == ATTACKER || Player[playerid][Team] == ATTACKER_SUB) && (Player[i][Team] == ATTACKER || Player[i][Team] == ATTACKER_SUB))
886 { SendClientMessage(i, ChatColor, ChatString); PlayerPlaySound(i,1137,0.0,0.0,0.0); }
887 if((Player[playerid][Team] == DEFENDER || Player[playerid][Team] == DEFENDER_SUB) && (Player[i][Team] == DEFENDER || Player[i][Team] == DEFENDER_SUB))
888 { SendClientMessage(i, ChatColor, ChatString); PlayerPlaySound(i,1137,0.0,0.0,0.0); }
889 if(Player[playerid][Team] == REFEREE && Player[i][Team] == REFEREE && !Player[i][InDuel])
890 { SendClientMessage(i, ChatColor, ChatString); PlayerPlaySound(i,1137,0.0,0.0,0.0); }
891 }
892 }
893 return 0;
894 }
895
896 // Admin chat
897 if(text[0] == '@' && Player[playerid][Level] > 0)
898 {
899 new ChatString[144];
900 format(ChatString, sizeof(ChatString), "@ Admin Chat | %s (%d) | %s", Player[playerid][Name], playerid, text[1]);
901 foreach(new i : Player) {
902 if(Player[i][Level] > 0) {
903 SendClientMessage(i, 0x66CC66FF, ChatString);
904 PlayerPlaySound(i,1137,0.0,0.0,0.0);
905 }
906 }
907 return 0;
908 }
909
910 #if defined _league_included
911 // League clans chat
912 if(text[0] == '#')
913 {
914 if(!IsPlayerInAnyClan(playerid))
915 SendErrorMessage(playerid, "You're not in any clan. Check /leaguecmds for help!");
916 else
917 {
918 SendMessageToLeagueClan(playerid, text);
919 }
920 return 0;
921 }
922 #endif
923
924 // Channel chat
925 if(text[0] == '^' && Player[playerid][ChatChannel] != -1)
926 {
927 new ChatString[144];
928 format(ChatString, sizeof(ChatString), "@ Channel Chat | %s | {FFFFFF}%d{FFCC99} | %s", Player[playerid][Name], OnlineInChannel[Player[playerid][ChatChannel]], text[1]);
929 OnlineInChannel[Player[playerid][ChatChannel]] = 0;
930
931 foreach(new i : Player)
932 {
933 if(Player[i][ChatChannel] == Player[playerid][ChatChannel])
934 {
935 SendClientMessage(i, 0xFFCC99FF, ChatString);
936 PlayerPlaySound(i,1137,0.0,0.0,0.0);
937 OnlineInChannel[Player[playerid][ChatChannel]]++;
938 }
939 }
940 return 0;
941 }
942
943 if(ChatDisabled)
944 {
945 SendErrorMessage(playerid, "Main chat is currently disabled.");
946 return 0;
947 }
948 if(Player[playerid][Mute] == true)
949 {
950 SendErrorMessage(playerid, "You are muted.");
951 return 0;
952 }
953
954
955 // Main chat
956 new ChatString[144];
957 format(ChatString, sizeof(ChatString),"%s%s: {FFFFFF}(%d) %s", GetColor(GetPlayerColor(playerid)), Player[playerid][Name], playerid, text);
958 SendClientMessageToAll(-1, ChatString);
959 return 0;
960}
961
962public OnPlayerStateChange(playerid, newstate, oldstate)
963{
964 switch(newstate)
965 {
966 case PLAYER_STATE_DRIVER:
967 {
968 if(Player[playerid][Team] == DEFENDER && Player[playerid][Playing] == true && !DefendersWithVehicles)
969 {
970 new Float:defPos[3];
971 GetPlayerPos(playerid, defPos[0], defPos[1], defPos[2]);
972 SetPlayerPos(playerid, defPos[0]+1.0, defPos[1]+1.0, defPos[2]+1.0);
973 return 1;
974 }
975 SetPlayerArmedWeapon(playerid, 0);
976
977 if(Player[playerid][BeingSpeced] == true)
978 {
979 foreach(new i : PlayerSpectators[playerid])
980 {
981 TogglePlayerSpectating(i, 1);
982 PlayerSpectateVehicle(i, GetPlayerVehicleID(playerid));
983 }
984 }
985 if(Player[playerid][Playing] == true && Player[playerid][WasInCP] == true)
986 {
987 if(IsPlayerInRangeOfPoint(playerid, 2.0, BCPSpawn[Current][0], BCPSpawn[Current][1], BCPSpawn[Current][2]))
988 {
989 OnPlayerLeaveCheckpoint(playerid);
990 }
991 }
992 }
993 case PLAYER_STATE_PASSENGER:
994 {
995 if(Player[playerid][Team] == DEFENDER && Player[playerid][Playing] == true && !DefendersWithVehicles)
996 {
997 new Float:defPos[3];
998 GetPlayerPos(playerid, defPos[0], defPos[1], defPos[2]);
999 SetPlayerPos(playerid, defPos[0]+1.0, defPos[1]+1.0, defPos[2]+1.0);
1000 return 1;
1001 }
1002 SetPlayerArmedWeapon(playerid, 0);
1003
1004 if(Player[playerid][BeingSpeced] == true)
1005 {
1006 foreach(new i : PlayerSpectators[playerid])
1007 {
1008 TogglePlayerSpectating(i, 1);
1009 PlayerSpectateVehicle(i, GetPlayerVehicleID(playerid));
1010 }
1011 }
1012
1013 if(Player[playerid][Playing] == true && Player[playerid][WasInCP] == true)
1014 {
1015 if(IsPlayerInRangeOfPoint(playerid, 2.0, BCPSpawn[Current][0], BCPSpawn[Current][1], BCPSpawn[Current][2]))
1016 {
1017 OnPlayerLeaveCheckpoint(playerid);
1018 }
1019 }
1020
1021 }
1022 case PLAYER_STATE_ONFOOT:
1023 {
1024 if(oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER)
1025 {
1026 if(Player[playerid][BeingSpeced] == true)
1027 {
1028 foreach(new i : PlayerSpectators[playerid])
1029 {
1030 TogglePlayerSpectating(i, 1);
1031 PlayerSpectatePlayer(i, playerid);
1032 }
1033 }
1034 if(Current != -1 && Player[playerid][Playing] == true && Player[playerid][Team] == ATTACKER)
1035 {
1036 if(IsPlayerInRangeOfPoint(playerid, 2.0, BCPSpawn[Current][0], BCPSpawn[Current][1], BCPSpawn[Current][2]))
1037 {
1038 OnPlayerEnterCheckpoint(playerid);
1039 }
1040 }
1041 }
1042 }
1043 }
1044
1045 if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
1046 {
1047 if(VehicleHealthTextdraw)
1048 {
1049 PlayerTextDrawSetString(playerid,VInfo[playerid],"_");
1050 PlayerTextDrawShow(playerid,VInfo[playerid]);
1051 }
1052
1053 Iter_Add(PlayersInVehicles,playerid);
1054 }
1055 if(oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER)
1056 {
1057 if(VehicleHealthTextdraw)
1058 {
1059 PlayerTextDrawHide(playerid,VInfo[playerid]);
1060 }
1061
1062 Iter_Remove(PlayersInVehicles,playerid);
1063 }
1064 return 1;
1065}
1066
1067public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
1068{
1069 // Update interior for whoever is spectating this player as well
1070 foreach(new i : PlayerSpectators[playerid])
1071 {
1072 SetPlayerInterior(i, newinteriorid);
1073 }
1074 return 1;
1075}
1076
1077public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
1078{
1079 Player[playerid][LastEnterVehicleAttempt] = GetTickCount() + 3000;
1080 return 1;
1081}
1082
1083public OnPlayerExitVehicle(playerid, vehicleid)
1084{
1085 Player[playerid][LastEnterVehicleAttempt] = GetTickCount() + 3000;
1086 return 1;
1087}
1088
1089public OnVehicleMod(playerid, vehicleid, componentid)
1090{
1091 if(!IsVehicleComponentLegal(GetVehicleModel(vehicleid), componentid))
1092 {
1093 return 0;
1094 }
1095 return 1;
1096}
1097
1098public OnPlayerEnterCheckpoint(playerid)
1099{
1100 if(GetPlayerVehicleID(playerid) == 0 && Player[playerid][Playing] == true && (Player[playerid][Team] == ATTACKER || Player[playerid][Team] == DEFENDER))
1101 {
1102 switch(GameType)
1103 {
1104 case BASE:
1105 {
1106 switch(Player[playerid][Team])
1107 {
1108 case ATTACKER:
1109 {
1110 new Float:attPos[3];
1111 GetPlayerPos(playerid, attPos[0], attPos[1], attPos[2]);
1112 if(attPos[2] <= (BCPSpawn[Current][2] - 1.4))
1113 return 1;
1114
1115 PlayersInCP ++;
1116 Player[playerid][WasInCP] = true;
1117
1118 new iString[256];
1119 format(iString, sizeof iString, "~r~~h~~h~Players In CP");
1120 foreach(new i : Player)
1121 {
1122 if(Player[i][WasInCP] == true)
1123 {
1124 format(iString, sizeof(iString), "%s~n~~r~~h~- %s%s", iString, MAIN_TEXT_COLOUR, Player[i][Name]);
1125 }
1126 }
1127 TextDrawSetString(EN_CheckPoint, iString);
1128 TextDrawColor(timerCircleTD, 0xFF616133);
1129 GangZoneFlashForAll(CPZone, GANGZONE_FLASH);
1130 foreach(new i : Player)
1131 {
1132 if(!Player[i][Spawned])
1133 continue;
1134
1135 TextDrawShowForPlayer(i, EN_CheckPoint);
1136
1137 if(Player[i][RoundTDStyle] != 1)
1138 continue;
1139
1140 TextDrawShowForPlayer(i, timerCircleTD);
1141 }
1142
1143 }
1144 case DEFENDER:
1145 {
1146 new Float:defPos[3];
1147 GetPlayerPos(playerid, defPos[0], defPos[1], defPos[2]);
1148 if(defPos[2] >= (BCPSpawn[Current][2] - 1.4))
1149 {
1150 #if defined _league_included
1151 if(LeagueMode)
1152 {
1153 if(CurrentCPTime <= 10 && CurrentCPTime > 4)
1154 {
1155 AddPlayerLeaguePoints(playerid, 50, "saving CP in rather dangerous time");
1156 }
1157 else if(CurrentCPTime <= 4)
1158 {
1159 AddPlayerLeaguePoints(playerid, 100, "saving CP in a very critical time");
1160 }
1161 }
1162 #endif
1163 CurrentCPTime = ConfigCPTime + 1;
1164 }
1165 else if(GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_USEJETPACK)
1166 {
1167 if(CurrentCPTime < ConfigCPTime)
1168 SendClientMessageToAll(-1, sprintf(""COL_PRIM"CP touch by {FFFFFF}%s "COL_PRIM"is denied due to abusing jetpack.", Player[playerid][Name]));
1169 }
1170 else
1171 if(CurrentCPTime < ConfigCPTime)
1172 SendClientMessageToAll(-1, sprintf(""COL_PRIM"CP touch by {FFFFFF}%s "COL_PRIM"is denied. This might be considered as cheating or bug abusing.", Player[playerid][Name]));
1173 }
1174 }
1175 }
1176 case ARENA:
1177 {
1178 if(!ArenaStarted || !CPInArena)
1179 return 1;
1180
1181 switch(TeamCapturingCP)
1182 {
1183 case NON: // no one is taking CP
1184 {
1185 TeamCapturingCP = Player[playerid][Team];
1186 new Float:attPos[3];
1187 GetPlayerPos(playerid, attPos[0], attPos[1], attPos[2]);
1188 if(attPos[2] <= (ACPSpawn[Current][2] - 1.4))
1189 return 1;
1190
1191 PlayersInCP ++;
1192 Player[playerid][WasInCP] = true;
1193
1194 new iString[256];
1195 format(iString, sizeof iString, "%sPlayers In CP", TDC[Player[playerid][Team]]);
1196 foreach(new i : Player)
1197 {
1198 if(Player[i][WasInCP] == true && Player[playerid][Team] == Player[i][Team])
1199 {
1200 format(iString, sizeof(iString), "%s~n~%s- %s%s", iString, TDC[Player[i][Team]], MAIN_TEXT_COLOUR, Player[i][Name]);
1201 }
1202 }
1203 TextDrawSetString(EN_CheckPoint, iString);
1204 switch(Player[playerid][Team])
1205 {
1206 case ATTACKER:
1207 TextDrawColor(timerCircleTD, 0xFF616133);
1208 case DEFENDER:
1209 TextDrawColor(timerCircleTD, 0x9698FF33);
1210 }
1211 foreach(new i : Player)
1212 {
1213 if(!Player[i][Spawned])
1214 continue;
1215
1216 TextDrawShowForPlayer(i, EN_CheckPoint);
1217
1218 if(Player[i][RoundTDStyle] != 1)
1219 continue;
1220
1221 TextDrawShowForPlayer(i, timerCircleTD);
1222 }
1223 }
1224 default: // cp is being taken by some team
1225 {
1226 if(TeamCapturingCP == Player[playerid][Team])
1227 {
1228 new Float:attPos[3];
1229 GetPlayerPos(playerid, attPos[0], attPos[1], attPos[2]);
1230 if(attPos[2] <= (ACPSpawn[Current][2] - 1.4))
1231 return 1;
1232
1233 PlayersInCP ++;
1234 Player[playerid][WasInCP] = true;
1235
1236 new iString[256];
1237 format(iString, sizeof iString, "%sPlayers In CP", TDC[Player[playerid][Team]]);
1238 foreach(new i : Player)
1239 {
1240 if(Player[i][WasInCP] == true && Player[playerid][Team] == Player[i][Team])
1241 {
1242 format(iString, sizeof(iString), "%s~n~%s- %s%s", iString, TDC[Player[i][Team]], MAIN_TEXT_COLOUR, Player[i][Name]);
1243 }
1244 }
1245 TextDrawSetString(EN_CheckPoint, iString);
1246 foreach(new i : Player)
1247 {
1248 if(!Player[i][Spawned])
1249 continue;
1250
1251 TextDrawShowForPlayer(i, EN_CheckPoint);
1252 }
1253 }
1254 else
1255 {
1256 new Float:defPos[3];
1257 GetPlayerPos(playerid, defPos[0], defPos[1], defPos[2]);
1258 if(defPos[2] >= (ACPSpawn[Current][2] - 1.4))
1259 {
1260 #if defined _league_included
1261 if(LeagueMode)
1262 {
1263 if(CurrentCPTime <= 10 && CurrentCPTime > 4)
1264 {
1265 AddPlayerLeaguePoints(playerid, 100, "saving CP in rather dangerous time");
1266 }
1267 else if(CurrentCPTime <= 4)
1268 {
1269 AddPlayerLeaguePoints(playerid, 200, "saving CP in a very critical time");
1270 }
1271 }
1272 #endif
1273 CurrentCPTime = ConfigCPTime + 1;
1274 }
1275 else if(GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_USEJETPACK)
1276 {
1277 if(CurrentCPTime < ConfigCPTime)
1278 SendClientMessageToAll(-1, sprintf(""COL_PRIM"CP touch by {FFFFFF}%s "COL_PRIM"is denied due to abusing jetpack.", Player[playerid][Name]));
1279 }
1280 else
1281 if(CurrentCPTime < ConfigCPTime)
1282 SendClientMessageToAll(-1, sprintf(""COL_PRIM"CP touch by {FFFFFF}%s "COL_PRIM"is denied. This might be considered as cheating or bug abusing.", Player[playerid][Name]));
1283 }
1284 }
1285 }
1286 }
1287 }
1288 }
1289 return 1;
1290}
1291
1292public OnPlayerLeaveCheckpoint(playerid)
1293{
1294 switch(GameType)
1295 {
1296 case BASE:
1297 {
1298 if(Player[playerid][Team] == ATTACKER && Player[playerid][WasInCP] == true)
1299 {
1300 PlayersInCP --;
1301 Player[playerid][WasInCP] = false;
1302 if(PlayersInCP <= 0)
1303 {
1304 PlayersInCP = 0;
1305 CurrentCPTime = ConfigCPTime + 1;
1306 TextDrawHideForAll(EN_CheckPoint);
1307 TextDrawHideForAll(CheckpointWarningBox);
1308 TextDrawColor(timerCircleTD, 0x00000033);
1309 GangZoneStopFlashForAll(CPZone);
1310 foreach(new i : Player)
1311 {
1312 if(!Player[i][Spawned])
1313 continue;
1314
1315 if(Player[i][RoundTDStyle] != 1)
1316 continue;
1317
1318 TextDrawShowForPlayer(i, timerCircleTD);
1319 }
1320 }
1321 else
1322 {
1323 new cpstr[256];
1324 format(cpstr, sizeof cpstr, "~r~~h~~h~Players In CP");
1325 new ct = 0;
1326 foreach(new i : PlayersInRound)
1327 {
1328 if(Player[i][WasInCP] == true)
1329 {
1330 ct ++;
1331 format(cpstr, sizeof(cpstr), "%s~n~~r~~h~- %s%s", cpstr, MAIN_TEXT_COLOUR, Player[i][Name]);
1332 }
1333 }
1334 if(ct == 0) // if it stays 0 and PlayersInCP says it's more than 0 then something must be wrong
1335 {
1336 if(RecountPlayersOnCP() == 0)
1337 goto thatWasWrong;
1338 }
1339 TextDrawSetString(EN_CheckPoint, cpstr);
1340
1341 thatWasWrong:
1342 }
1343 }
1344 }
1345 case ARENA:
1346 {
1347 if(Player[playerid][Team] == TeamCapturingCP && Player[playerid][WasInCP] == true)
1348 {
1349 PlayersInCP --;
1350 Player[playerid][WasInCP] = false;
1351 if(PlayersInCP <= 0)
1352 {
1353 TeamCapturingCP = NON;
1354 PlayersInCP = 0;
1355 CurrentCPTime = ConfigCPTime + 1;
1356 TextDrawHideForAll(EN_CheckPoint);
1357 TextDrawColor(timerCircleTD, 0x00000033);
1358 foreach(new i : Player)
1359 {
1360 if(!Player[i][Spawned])
1361 continue;
1362
1363 if(Player[i][RoundTDStyle] != 1)
1364 continue;
1365
1366 TextDrawShowForPlayer(i, timerCircleTD);
1367 }
1368 }
1369 else
1370 {
1371 new cpstr[256];
1372 format(cpstr, sizeof cpstr, "%sPlayers In CP", TDC[Player[playerid][Team]]);
1373 new ct = 0;
1374 foreach(new i : PlayersInRound)
1375 {
1376 if(Player[i][WasInCP] == true)
1377 {
1378 ct ++;
1379 format(cpstr, sizeof(cpstr), "%s~n~%s- %s%s", cpstr, TDC[Player[i][Team]], MAIN_TEXT_COLOUR, Player[i][Name]);
1380 }
1381 }
1382 if(ct == 0) // if it stays 0 and PlayersInCP says it's more than 0 then something must be wrong
1383 {
1384 if(RecountPlayersOnCP() == 0)
1385 goto thatWasWrong;
1386 }
1387 TextDrawSetString(EN_CheckPoint, cpstr);
1388
1389 thatWasWrong:
1390 }
1391 }
1392 }
1393 }
1394 return 1;
1395}
1396
1397public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
1398{
1399 if(Player[playerid][Level] >= 1 && Player[playerid][Playing] == false && Player[playerid][InDM] == false && Player[playerid][InDuel] == false && Player[playerid][Spectating] == false)
1400 {
1401 SetPlayerPosFindZ(playerid, fX, fY, fZ);
1402 }
1403 return 1;
1404}
1405
1406public OnRconLoginAttempt(ip[], password[], success)
1407{
1408 new Str[128], iName[MAX_PLAYER_NAME], playerid, IP[16];
1409 foreach(new i : Player)
1410 {
1411 GetPlayerIp(i, IP, sizeof(IP));
1412 if(!strcmp(IP, ip))
1413 {
1414 GetPlayerName(i, iName, sizeof(iName));
1415 playerid = i;
1416 }
1417 }
1418
1419 if(!success)
1420 {
1421 format(Str, sizeof(Str), "{FFFFFF}%s "COL_PRIM"has failed to log into rcon.", iName);
1422 SendClientMessageToAll(-1, Str);
1423
1424 Player[playerid][RconTry]++;
1425
1426 if(Player[playerid][RconTry] >= 2){
1427 format(Str, sizeof(Str), "{FFFFFF}%s "COL_PRIM"has been kicked for several fail attempts to log into rcon", iName);
1428 SendClientMessageToAll(-1, Str);
1429 SetTimerEx("OnPlayerKicked", 500, false, "i", playerid);
1430 return 1;
1431 }
1432 else SendClientMessage(playerid, -1, "Wrong password one more time will get you kicked.");
1433 }
1434 else
1435 {
1436 format(Str, sizeof(Str), "UPDATE Players SET Level = %d WHERE Name = '%q' AND Level != %d", Player[playerid][Level], Player[playerid][Name], Player[playerid][Level]);
1437 db_free_result(db_query(sqliteconnection, Str));
1438 if(Player[playerid][Level] != 5)
1439 {
1440 if(Player[playerid][Level] == 0)
1441 {
1442 // Previous level was 0. This means it's a new admin. Guide them.
1443 SendClientMessage(playerid, -1, ""COL_PRIM"Looks like you're a new admin. Type {FFFFFF}/acmds "COL_PRIM" to see a list of admin commands!");
1444 }
1445 Player[playerid][Level] = 5;
1446 UpdatePlayerAdminGroup(playerid);
1447 format(Str, sizeof(Str), "UPDATE Players SET Level = %d WHERE Name = '%q'", Player[playerid][Level], Player[playerid][Name]);
1448 db_free_result(db_query(sqliteconnection, Str));
1449
1450 format(Str, sizeof(Str), "{FFFFFF}%s "COL_PRIM"has successfully logged into rcon and got level 5.", iName);
1451 }
1452 else
1453 format(Str, sizeof(Str), "{FFFFFF}%s "COL_PRIM"has successfully logged into rcon.", iName);
1454 foreach(new j : Player)
1455 {
1456 if(Player[j][Level] > 4)
1457 SendClientMessage(j, -1, Str);
1458 }
1459 }
1460 return 1;
1461}
1462
1463public OnPlayerUpdate(playerid)
1464{
1465 // Player is sending updates, hence they're not paused
1466 Player[playerid][PauseCount] = 0;
1467
1468 // Free camera check
1469 if(noclipdata[playerid][cameramode] == CAMERA_MODE_FLY)
1470 {
1471 ProcessFreeCameraMovement(playerid);
1472 return 0;
1473 }
1474 return 1;
1475}
1476
1477public OnPlayerStreamIn(playerid, forplayerid)
1478{
1479 if(Player[playerid][Playing] == true)
1480 {
1481 if(Player[forplayerid][Team] != Player[playerid][Team])
1482 {
1483 SetPlayerMarkerForPlayer(forplayerid, playerid, GetPlayerColor(playerid) & 0xFFFFFF00);
1484 }
1485 else
1486 {
1487 SetPlayerMarkerForPlayer(forplayerid, playerid, GetPlayerCorrectMarkerCol(playerid, forplayerid) | 0x00000055);
1488 }
1489 }
1490 else if(Player[playerid][InDuel] == true && Player[forplayerid][InDuel] == true)
1491 {
1492 SetPlayerMarkerForPlayer(forplayerid, playerid, GetPlayerColor(playerid) & 0xFFFFFF00);
1493 }
1494 else if(Player[playerid][Playing] == false && Player[forplayerid][Playing] == false)
1495 {
1496 SetPlayerMarkerForPlayer(forplayerid, playerid, GetPlayerCorrectMarkerCol(playerid, forplayerid) | 0x00000055);
1497 }
1498 return 1;
1499}
1500
1501public OnPlayerStreamOut(playerid, forplayerid)
1502{
1503 if(Player[playerid][Playing] == true)
1504 {
1505 if(Player[forplayerid][Team] != Player[playerid][Team])
1506 {
1507 SetPlayerMarkerForPlayer(forplayerid, playerid, GetPlayerColor(playerid) & 0xFFFFFF00);
1508 }
1509 else
1510 {
1511 SetPlayerMarkerForPlayer(forplayerid, playerid, GetPlayerCorrectMarkerCol(playerid, forplayerid) | 0x00000055);
1512 }
1513 }
1514 else if(Player[playerid][InDuel] == true && Player[forplayerid][InDuel] == true)
1515 {
1516 SetPlayerMarkerForPlayer(forplayerid, playerid, GetPlayerColor(playerid) & 0xFFFFFF00);
1517 }
1518 else if(Player[playerid][Playing] == false && Player[forplayerid][Playing] == false)
1519 {
1520 SetPlayerMarkerForPlayer(forplayerid, playerid, GetPlayerCorrectMarkerCol(playerid, forplayerid) | 0x00000055);
1521 }
1522 return 1;
1523}
1524
1525HandlePlayerDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
1526{
1527 // Fall protection, gunmenu protection..etc
1528 if(!IsLegalHit(playerid, issuerid, amount, weaponid))
1529 {
1530 return 1;
1531 }
1532
1533 // Detect explosion damage, cancel it and set grenade damage
1534 if(weaponid == 51)
1535 {
1536 if(issuerid == INVALID_PLAYER_ID)
1537 {
1538 /* Protection against explosion */
1539 SetFakeHealthArmour(playerid);
1540 return 1;
1541 }
1542 else
1543 {
1544 weaponid = WEAPON_GRENADE;
1545 }
1546 }
1547
1548 // Handling Grenades
1549 if(weaponid == WEAPON_GRENADE)
1550 {
1551 if(amount > 60.0)
1552 {
1553 amount = GRENADE_HIGH_DAMAGE;
1554 }
1555 else if(amount >= 30.0)
1556 {
1557 amount = GRENADE_MEDIUM_DAMAGE;
1558 }
1559 else if(amount < 30.0)
1560 {
1561 amount = GRENADE_LOW_DAMAGE;
1562 }
1563 }
1564
1565 // Detect headshots
1566 if(bodypart == 9)
1567 {
1568 HandleHeadshot(playerid, issuerid, weaponid);
1569 }
1570
1571 // Show target player info for the shooter (HP, PL, Ping and many other things)
1572 ShowTargetInfo(issuerid, playerid);
1573
1574 // <start> Health and armour handling
1575 if(weaponid == -1)
1576 weaponid = Player[playerid][HitWith];
1577
1578 Player[playerid][HitBy] = issuerid; // This is used in custom OnPlayerDeath to get the last player who caused damage on 'playerid'
1579 Player[playerid][HitWith] = weaponid; // This is used in custom OnPlayerDeath to get the last weapon a player got hit with before death
1580
1581 new rounded_amount = GetActualDamage(amount, playerid); // Fix damage if it's unreal (in other words, if damage is greater than player's health)
1582
1583 // If it's a collision (fell or something)
1584 if(weaponid == 54)
1585 {
1586 // We deal with health only leaving armour as it is.
1587 SetHP(playerid, Player[playerid][pHealth] - rounded_amount);
1588 }
1589 else if(Player[playerid][pArmour] > 0)
1590 {
1591 // Still got armour and it's not a collision damager
1592
1593 new diff = (Player[playerid][pArmour] - rounded_amount);
1594 if(diff < 0)
1595 {
1596 SetAP(playerid, 0);
1597 SetHP(playerid, Player[playerid][pHealth] + diff);
1598 }
1599 else if(diff == 0)
1600 SetAP(playerid, 0);
1601 else
1602 UpdatePlayerArmourVariables(playerid, diff);
1603 }
1604 else // It's not a collision and the player got no armour
1605 SetHP(playerid, Player[playerid][pHealth] - rounded_amount);
1606 // <end> Health and armour handling
1607
1608 if(issuerid != INVALID_PLAYER_ID) // If the damager is a HUMAN
1609 {
1610 PlayerPlaySound(issuerid, Player[issuerid][HitSound], 0.0, 0.0, 0.0);
1611 PlayerPlaySound(playerid, Player[playerid][GetHitSound], 0.0, 0.0, 0.0);
1612
1613 HandleVisualDamage(playerid, issuerid, float(rounded_amount), weaponid);
1614
1615 if(Player[issuerid][Playing] == true && Player[playerid][Playing] == true)
1616 {
1617 #if defined _league_included
1618 if(LeagueMode)
1619 {
1620 UpdateLeaguePlayerDamage(issuerid, rounded_amount, weaponid);
1621 AddPlayerLeaguePoints(issuerid, rounded_amount);
1622 AddPlayerLeaguePoints(playerid, -(rounded_amount));
1623 }
1624 #endif
1625 Player[issuerid][shotsHit] ++;
1626 Player[issuerid][RoundDamage] += rounded_amount;
1627 Player[issuerid][TotalDamage] += rounded_amount;
1628 UpdateRoundKillDmgTDmg(issuerid);
1629 }
1630 }
1631 else // If damage is caused by something else (not a player)
1632 {
1633 if(GetPlayerState(playerid) != PLAYER_STATE_WASTED && Player[playerid][Spawned])
1634 {
1635 PlayerPlaySound(playerid, Player[playerid][GetHitSound], 0, 0, 0);
1636 ShowCollisionDamageTextDraw(playerid, float(rounded_amount), weaponid);
1637 }
1638 }
1639 // If there's a round running
1640 if(Current != -1)
1641 {
1642 // Update team HP bars
1643 UpdatePlayerTeamBar(playerid);
1644 UpdatePlayerTeamBar(issuerid);
1645
1646 // Update teammates information textdraw
1647 UpdateTeamCornerInfo();
1648
1649 // Show team lost hp textdraws
1650 if(Player[playerid][Playing] == true)
1651 {
1652 switch(Player[playerid][Team])
1653 {
1654 case ATTACKER:
1655 {
1656 new str[16];
1657 format(str, sizeof(str), "~r~~h~%s", Player[playerid][NameWithoutTag]);
1658 TextDrawSetString(AttHpLose, str);
1659
1660 TempDamage[ATTACKER] += rounded_amount;
1661 format(str, sizeof(str), "~r~-%d", TempDamage[ATTACKER]);
1662 TextDrawSetString(TeamHpLose[0], str);
1663
1664 ModernTextDrawFlash(ATTACKER);
1665
1666 KillTimer(AttHpTimer);
1667 AttHpTimer = SetTimer("HideHpTextForAtt", 2500, false);
1668 }
1669 case DEFENDER:
1670 {
1671 new str[16];
1672 format(str, sizeof(str), "~b~~h~%s", Player[playerid][NameWithoutTag]);
1673 TextDrawSetString(DefHpLose, str);
1674
1675 TempDamage[DEFENDER] += rounded_amount;
1676 format(str,sizeof(str), "~b~-%d", TempDamage[DEFENDER]);
1677 TextDrawSetString(TeamHpLose[1], str);
1678
1679 ModernTextDrawFlash(DEFENDER);
1680
1681 KillTimer(DefHpTimer);
1682 DefHpTimer = SetTimer("HideHpTextForDef", 2500, false);
1683 }
1684 }
1685 }
1686 }
1687 return 1;
1688}
1689
1690public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart)
1691{
1692 if(lagcompmode != 0)
1693 HandlePlayerDamage(damagedid, playerid, amount, weaponid, bodypart);
1694 return 1;
1695}
1696
1697public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
1698{
1699 if(lagcompmode == 0)
1700 HandlePlayerDamage(playerid, issuerid, amount, weaponid, bodypart);
1701 return 1;
1702}
1703
1704public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
1705{
1706 if(Player[playerid][OnGunmenu] && type == SELECT_OBJECT_PLAYER_OBJECT)
1707 {
1708 new gunmenuIndex = -1;
1709 for(new i = 0; i != MAX_GUNMENU_GUNS; i ++)
1710 {
1711 if(GunmenuData[i][GunPlayerObject][playerid] == objectid)
1712 {
1713 gunmenuIndex = i;
1714 break;
1715 }
1716 }
1717 if(gunmenuIndex != -1)
1718 {
1719 if(GunmenuData[gunmenuIndex][GunMovingRoute][playerid] == GUN_MOVING_ROUTE_TOPLAYER)
1720 {
1721 // object is already moving to player, so we cancel this
1722 return 1;
1723 }
1724 }
1725 OnPlayerSelectGunmenuObject(playerid, objectid, modelid);
1726 return 1;
1727 }
1728 return 1;
1729}
1730
1731public OnPlayerObjectMoved(playerid, objectid)
1732{
1733 if(Player[playerid][OnGunmenu] && Iter_Contains(PlayerGunObjects[playerid], objectid))
1734 {
1735 new gunmenuIndex = -1;
1736 for(new i = 0; i != MAX_GUNMENU_GUNS; i ++)
1737 {
1738 if(GunmenuData[i][GunPlayerObject][playerid] == objectid)
1739 {
1740 gunmenuIndex = i;
1741 break;
1742 }
1743 }
1744 if(gunmenuIndex != -1)
1745 {
1746 switch(GunmenuData[gunmenuIndex][GunMovingRoute][playerid])
1747 {
1748 case GUN_MOVING_ROUTE_UP: // was moving up
1749 {
1750 // move it down
1751 new Float:x, Float:y, Float:z;
1752 GetPlayerObjectPos(playerid, objectid, x, y, z);
1753 MovePlayerObject(playerid, objectid, x, y, z - GUNMENU_OBJECT_Z_CHANGES, GUNMENU_OBJECT_Z_MOVE_SPEED, -25.0, -25.0, -45.0);
1754 GunmenuData[gunmenuIndex][GunMovingRoute][playerid] = GUN_MOVING_ROUTE_DOWN;
1755 }
1756 case GUN_MOVING_ROUTE_DOWN: // was moving down
1757 {
1758 // move it up
1759 new Float:x, Float:y, Float:z;
1760 GetPlayerObjectPos(playerid, objectid, x, y, z);
1761 MovePlayerObject(playerid, objectid, x, y, z + GUNMENU_OBJECT_Z_CHANGES, GUNMENU_OBJECT_Z_MOVE_SPEED, 25.0, 25.0, 45.0);
1762 GunmenuData[gunmenuIndex][GunMovingRoute][playerid] = GUN_MOVING_ROUTE_UP;
1763 }
1764 case GUN_MOVING_ROUTE_TOPLAYER: // was moving towards player
1765 {
1766 // successful selection
1767 OnGunObjectMovedToPlayer(playerid, objectid, gunmenuIndex);
1768 }
1769 }
1770 }
1771 }
1772 return 1;
1773}
1774
1775public OnPlayerModelSelection(playerid, response, listid, modelid)
1776{
1777 if(listid == teamskinlist)
1778 {
1779 if(response && ChangingSkinOfTeam[playerid] != -1)
1780 {
1781 new iString[128];
1782 switch(ChangingSkinOfTeam[playerid])
1783 {
1784 case ATTACKER:
1785 {
1786 Skin[ATTACKER] = modelid;
1787
1788 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'ATTACKER Skin'", Skin[ATTACKER]);
1789 db_free_result(db_query(sqliteconnection, iString));
1790
1791 }
1792 case DEFENDER:
1793 {
1794 Skin[DEFENDER] = modelid;
1795
1796 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'Defender Skin'", Skin[DEFENDER]);
1797 db_free_result(db_query(sqliteconnection, iString));
1798
1799 }
1800 case REFEREE:
1801 {
1802 Skin[REFEREE] = modelid;
1803
1804 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'Referee Skin'", Skin[REFEREE]);
1805 db_free_result(db_query(sqliteconnection, iString));
1806 }
1807 }
1808
1809 foreach(new i : Player)
1810 {
1811 if(Player[i][Team] == ChangingSkinOfTeam[playerid])
1812 {
1813 SetPlayerSkin(i, modelid);
1814 }
1815 }
1816
1817 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has changed {FFFFFF}%s "COL_PRIM"skin to: {FFFFFF}%d", Player[playerid][Name], TeamName[ChangingSkinOfTeam[playerid]], modelid);
1818 SendClientMessageToAll(-1, iString);
1819 ChangingSkinOfTeam[playerid] = -1;
1820 }
1821 else
1822 {
1823 ChangingSkinOfTeam[playerid] = -1;
1824 SendClientMessage(playerid, -1, "Canceled team skin selection");
1825 }
1826 }
1827 else if(listid == playerskinlist)
1828 {
1829 if(response && !Player[playerid][Playing] && !Player[playerid][Spectating])
1830 {
1831 SetPlayerSkin(playerid, modelid);
1832 }
1833 }
1834 return 1;
1835}
1836
1837
1838
1839new const g_szGlitchNames [CAC_GLITCH__ALL][] = {"Quick reload", "Fast fire", "Fast move", "C-Bug", "Fast sprint", "Quick stand"};
1840YCMD:glitch(playerid, params[], help)
1841{
1842 if(help)
1843 {
1844 SendCommandHelpMessage(playerid, "toggle GTA:SA glitch");
1845 return 1;
1846 }
1847
1848 new string[512] = "Glitch\tStatus\n";
1849 for(new i = 0; i != CAC_GLITCH__ALL; ++i)
1850 {
1851 format(string, sizeof(string), "%s{FFFFFF}%s\t%s\n", string, g_szGlitchNames[i], (CAC_GetGlitchStatus(i) != 0) ? ("{00BC00}Allowed") : ("{EE5555}Blocked"));
1852 }
1853 ShowPlayerDialog(playerid, DIALOG_GLITCHSTATUS, DIALOG_STYLE_TABLIST_HEADERS, "Toggle glitch status", string, "Toggle", "Exit");
1854 return 1;
1855}
1856
1857new const g_szGameOptionNames [CAC_GAMEOPTION__ALL][] = {"Vehicle blips", "Manual reloading", "Drive on water", "Fireproof", "Sprint", "Infinite sprint", "Infinite oxygen", "Infinite ammo", "Night vision", "Thermal vision"};
1858YCMD:gameoption(playerid, params[], help)
1859{
1860 if(help)
1861 {
1862 SendCommandHelpMessage(playerid, "toggle game options");
1863 return 1;
1864 }
1865
1866 new string[1024] = "Game option\tStatus\n";
1867 for(new i = 0; i != CAC_GAMEOPTION__ALL; ++i)
1868 {
1869 if(i != CAC_GAMEOPTION__SPRINT)
1870 {
1871 format(string, sizeof(string), "%s{FFFFFF}%s\t%s\n", string, g_szGameOptionNames[i], (CAC_GetGameOptionStatus(i) != 0) ? ("{00BC00}Activated") : ("{EE5555}Deactivated"));
1872 }
1873 else
1874 {
1875 new status[32];
1876 switch(CAC_GetGameOptionStatus(i))
1877 {
1878 case CAC_GAMEOPTION_STATUS__SPRINT_DEFAULT:
1879 strcat(status, "{00BC00}Default");
1880 case CAC_GAMEOPTION_STATUS__SPRINT_ALLSURFACES:
1881 strcat(status, "{00BC00}All surfaces");
1882 case CAC_GAMEOPTION_STATUS__SPRINT_DISABLED:
1883 strcat(status, "{EE5555}Disabled");
1884 }
1885 format(string, sizeof(string), "%s{FFFFFF}%s\t%s\n", string, g_szGameOptionNames[i], status);
1886 }
1887 }
1888 ShowPlayerDialog(playerid, DIALOG_GAMEOPTIONSTATUS, DIALOG_STYLE_TABLIST_HEADERS, "Toggle game option status", string, "Toggle", "Exit");
1889 return 1;
1890}
1891
1892public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
1893{
1894 if(dialogid == DIALOG_GLITCHSTATUS)
1895 {
1896 if(response)
1897 {
1898 new newstatus = !CAC_GetGlitchStatus(listitem);
1899
1900 CAC_SetGlitchStatus(listitem, newstatus);
1901 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"has set \"%s\" glitch as %s"COL_PRIM"!", Player[playerid][Name], g_szGlitchNames[listitem], (newstatus != 0) ? ("{00BC00}permitted") : ("{EE5555}forbidden")));
1902 }
1903 return 1;
1904 }
1905 if(dialogid == DIALOG_GAMEOPTIONSTATUS)
1906 {
1907 if(response)
1908 {
1909 new newstatus = CAC_GetGameOptionStatus(listitem)+1;
1910 new newstatusname[32];
1911
1912 if(listitem != CAC_GAMEOPTION__SPRINT)
1913 {
1914 newstatus %= 2;
1915 if(newstatus == 0)
1916 strcat(newstatusname, "{EE5555}deactivated");
1917 else
1918 strcat(newstatusname, "{00BC00}activated");
1919 }
1920 else
1921 {
1922 newstatus %= 3;
1923 switch(newstatus)
1924 {
1925 case CAC_GAMEOPTION_STATUS__SPRINT_DEFAULT:
1926 strcat(newstatusname, "{00BC00}Default");
1927 case CAC_GAMEOPTION_STATUS__SPRINT_ALLSURFACES:
1928 strcat(newstatusname, "{00BC00}All surfaces");
1929 case CAC_GAMEOPTION_STATUS__SPRINT_DISABLED:
1930 strcat(newstatusname, "{EE5555}Disabled");
1931 }
1932 }
1933 CAC_SetGameOptionStatus(listitem, newstatus);
1934 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"has set \"%s\" game option as %s"COL_PRIM"!", Player[playerid][Name], g_szGameOptionNames[listitem], newstatusname));
1935 }
1936 return 1;
1937 }
1938 #if defined _league_included
1939 if(dialogid == DIALOG_LEAGUE_SHOP)
1940 {
1941 if(response)
1942 {
1943 PlayerSelectShopItem(playerid, listitem);
1944 }
1945 return 1;
1946 }
1947 if(dialogid == DIALOG_LEAGUE_STATS_SUB)
1948 {
1949 if(!response) // "Back" button
1950 {
1951 ShowLeagueStatsDialog(playerid);
1952 }
1953 return 1;
1954 }
1955 if(dialogid == DIALOG_LEAGUE_STATS)
1956 {
1957 if(response)
1958 {
1959 ShowLeagueStatistics(playerid, listitem);
1960 }
1961 return 1;
1962 }
1963 #endif
1964 if(dialogid == DIALOG_GUNMENU_MODIFY_MAIN)
1965 {
1966 if(response)
1967 {
1968 Player[playerid][GunmenuModdingIndex] = listitem;
1969 ShowPlayerDialog(playerid, DIALOG_GUNMENU_MODIFY_SUB, DIALOG_STYLE_LIST, sprintf("Modifying: %s", WeaponNames[GunmenuData[listitem][GunID]]), "Weapon\nLimit\nAmmo", "Select", "Back");
1970 }
1971 return 1;
1972 }
1973 if(dialogid == DIALOG_GUNMENU_MODIFY_SUB)
1974 {
1975 if(response)
1976 {
1977 new idx = Player[playerid][GunmenuModdingIndex];
1978 switch(listitem)
1979 {
1980 case 0:
1981 {
1982 Player[playerid][GunmenuModdingType] = GUNMENU_MOD_TYPE_WEAPON;
1983 ShowPlayerDialog(playerid, DIALOG_GUNMENU_MODIFY_SET, DIALOG_STYLE_INPUT, "Changing weapon...", sprintf("Current weapon: %s\n\nType new weapon name below to change!", WeaponNames[GunmenuData[idx][GunID]]), "Set", "Cancel");
1984 }
1985 case 1:
1986 {
1987 Player[playerid][GunmenuModdingType] = GUNMENU_MOD_TYPE_LIMIT;
1988 ShowPlayerDialog(playerid, DIALOG_GUNMENU_MODIFY_SET, DIALOG_STYLE_INPUT, "Changing limit...", sprintf("Current limit of %s: %d\n\nType new limit value below to change!", WeaponNames[GunmenuData[idx][GunID]], GunmenuData[idx][GunLimit]), "Set", "Cancel");
1989 }
1990 case 2:
1991 {
1992 Player[playerid][GunmenuModdingType] = GUNMENU_MOD_TYPE_AMMO;
1993 ShowPlayerDialog(playerid, DIALOG_GUNMENU_MODIFY_SET, DIALOG_STYLE_INPUT, "Changing ammo...", sprintf("Current ammo of %s: %d\n\nType new limit value below to change!", WeaponNames[GunmenuData[idx][GunID]], GunmenuData[idx][GunAmmo]), "Set", "Cancel");
1994 }
1995 }
1996 }
1997 else
1998 {
1999 CallLocalFunction("OnPlayerCommandText", "ds", playerid, "/gunmenumod");
2000 }
2001 return 1;
2002 }
2003 if(dialogid == DIALOG_GUNMENU_MODIFY_SET)
2004 {
2005 if(response)
2006 {
2007 new idx = Player[playerid][GunmenuModdingIndex];
2008 switch(Player[playerid][GunmenuModdingType])
2009 {
2010 case GUNMENU_MOD_TYPE_WEAPON:
2011 {
2012 new weaponID = GetWeaponID(inputtext);
2013 if(!IsValidWeapon(weaponID))
2014 {
2015 SendErrorMessage(playerid, "Invalid weapon", MSGBOX_TYPE_BOTTOM);
2016 ShowPlayerDialog(playerid, DIALOG_GUNMENU_MODIFY_SET, DIALOG_STYLE_INPUT, "Changing weapon...", sprintf("Current weapon: %s\n\nType new weapon name below to change!", WeaponNames[GunmenuData[idx][GunID]]), "Set", "Cancel");
2017 return 1;
2018 }
2019 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"has changed gunmenu index: {FFFFFF}%d "COL_PRIM"from [%s] to [%s]", Player[playerid][Name], idx, WeaponNames[GunmenuData[idx][GunID]], WeaponNames[weaponID]));
2020 db_free_result(db_query(sqliteconnection, sprintf("UPDATE `Gunmenu` SET `Weapon`=%d WHERE `Weapon`=%d", weaponID, GunmenuData[idx][GunID])));
2021 GunmenuData[idx][GunID] = weaponID;
2022 }
2023 case GUNMENU_MOD_TYPE_LIMIT:
2024 {
2025 new limit = strval(inputtext);
2026 if(limit < 0)
2027 {
2028 SendErrorMessage(playerid, "Selection limit cannot be less than 0", MSGBOX_TYPE_BOTTOM);
2029 ShowPlayerDialog(playerid, DIALOG_GUNMENU_MODIFY_SET, DIALOG_STYLE_INPUT, "Changing limit...", sprintf("Current limit of %s: %d\n\nType new limit value below to change!", WeaponNames[GunmenuData[idx][GunID]], GunmenuData[idx][GunLimit]), "Set", "Cancel");
2030 return 1;
2031 }
2032 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"has changed {FFFFFF}%s "COL_PRIM"limit to {FFFFFF}%d", Player[playerid][Name], WeaponNames[GunmenuData[idx][GunID]], limit));
2033 db_free_result(db_query(sqliteconnection, sprintf("UPDATE `Gunmenu` SET `Limit`=%d WHERE `Weapon`=%d", limit, GunmenuData[idx][GunID])));
2034 GunmenuData[idx][GunLimit] = limit;
2035 }
2036 case GUNMENU_MOD_TYPE_AMMO:
2037 {
2038 new ammo = strval(inputtext);
2039 if(ammo < 1 || ammo > 9999)
2040 {
2041 SendErrorMessage(playerid, "Weapon ammo must be equal to or between 1 and 9999", MSGBOX_TYPE_BOTTOM);
2042 ShowPlayerDialog(playerid, DIALOG_GUNMENU_MODIFY_SET, DIALOG_STYLE_INPUT, "Changing ammo...", sprintf("Current ammo of %s: %d\n\nType new ammo value below to change!", WeaponNames[GunmenuData[idx][GunID]], GunmenuData[idx][GunAmmo]), "Set", "Cancel");
2043 return 1;
2044 }
2045 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"has changed {FFFFFF}%s "COL_PRIM"ammo to {FFFFFF}%d", Player[playerid][Name], WeaponNames[GunmenuData[idx][GunID]], ammo));
2046 db_free_result(db_query(sqliteconnection, sprintf("UPDATE `Gunmenu` SET `Ammo`=%d WHERE `Weapon`=%d", ammo, GunmenuData[idx][GunID])));
2047 GunmenuData[idx][GunAmmo] = ammo;
2048 }
2049 }
2050 }
2051 return 1;
2052 }
2053 if(dialogid == DIALOG_GUNMENU)
2054 {
2055 OnGunmenuDialogResponse(playerid, response, listitem);
2056 return 1;
2057 }
2058 if(dialogid == DIALOG_GUNMENU_MELEE)
2059 {
2060 if(response)
2061 {
2062 new
2063 weap = MeleeWeaponsArray_ID[listitem],
2064 ammo = MeleeWeaponsArray_AMMO[listitem];
2065
2066 if(DoesPlayerHaveWeapon(playerid, weap))
2067 {
2068 RemovePlayerWeapon(playerid, weap);
2069 }
2070 else
2071 {
2072 GivePlayerWeapon(playerid, weap, ammo);
2073 }
2074 SetTimerEx("ShowPlayerMeleeWeaponsMenu", GetPlayerPing(playerid) + 200, false, "i", playerid);
2075 }
2076 return 1;
2077 }
2078 if(dialogid == DIALOG_WEAPONBIND_MAIN)
2079 {
2080 if(response)
2081 {
2082 if(listitem == 0) // Toggle
2083 {
2084 Player[playerid][WeaponBinding] = !Player[playerid][WeaponBinding];
2085 new str[80];
2086 format(str, sizeof(str), "UPDATE Players SET WeaponBinding = %d WHERE Name = '%q'", (Player[playerid][WeaponBinding] == true) ? (1) : (0), Player[playerid][Name]);
2087 db_free_result(db_query(sqliteconnection, str));
2088 return 1;
2089 }
2090 new index = listitem - 1;
2091 WeaponBindData[playerid][ModifyingWeaponBindIndex] = index;
2092 new str[140];
2093 format(str, sizeof str, "Key: %s+%s\nCurrent weapon: %s\n\nType weapon name or ID below to code this key bind for it", WEAPON_BIND_PRIMARY_KEY_TEXT_ALT, WeaponBindKeyText_ALT[index], WeaponNames[WeaponBindData[playerid][BindKeyWeapon][index]]);
2094 ShowPlayerDialog(playerid, DIALOG_WEAPONBIND_MODIFY, DIALOG_STYLE_INPUT, "Coding weapon key bind", str, "Code it", "Cancel");
2095 }
2096 return 1;
2097 }
2098 if(dialogid == DIALOG_WEAPONBIND_MODIFY)
2099 {
2100 if(response)
2101 {
2102 if(isnull(inputtext))
2103 return 1;
2104
2105 new weaponid;
2106 if(IsNumeric(inputtext))
2107 weaponid = strval(inputtext);
2108 else
2109 weaponid = GetWeaponID(inputtext);
2110
2111 if(weaponid == 0 || IsValidWeapon(weaponid))
2112 {
2113 new index = WeaponBindData[playerid][ModifyingWeaponBindIndex];
2114 WeaponBindData[playerid][BindKeyWeapon][index] = weaponid;
2115 new str[80];
2116 format(str, sizeof(str), "UPDATE Players SET WeaponBind%d = %d WHERE Name = '%q'", index, weaponid, Player[playerid][Name]);
2117 db_free_result(db_query(sqliteconnection, str));
2118 ShowPlayerWeaponBindTextDraw(playerid, 5000);
2119 }
2120 }
2121 return 1;
2122 }
2123 if(dialogid == DIALOG_REPLACE_FIRST)
2124 {
2125 if(response)
2126 {
2127 new ToAddID = -1;
2128 foreach(new i : Player)
2129 {
2130 if(!strcmp(Player[i][Name], inputtext, false, strlen(inputtext)))
2131 {
2132 ToAddID ++;
2133 REPLACE_ToAddID[playerid] = i;
2134 break;
2135 }
2136 }
2137 if(ToAddID > -1)
2138 {
2139 new str[2048];
2140 foreach(new i : Player)
2141 {
2142 if(Player[i][Playing] != true)
2143 continue;
2144
2145 format(str, sizeof str, "%s%s\n", str, Player[i][Name]);
2146 }
2147 for(new i = 0; i < SAVE_SLOTS; i ++)
2148 {
2149 if(strlen(SaveVariables[i][pName]) > 2 && SaveVariables[i][RoundID] == Current && SaveVariables[i][ToBeAdded] == true)
2150 {
2151 format(str, sizeof str, "%s%s\n", str, SaveVariables[i][pName]);
2152 }
2153 }
2154 ShowPlayerDialog(playerid, DIALOG_REPLACE_SECOND, DIALOG_STYLE_LIST, ""COL_PRIM"Player to replace", str, "Process", "Cancel");
2155 }
2156 else
2157 SendErrorMessage(playerid, "Player not found.");
2158 }
2159 return 1;
2160 }
2161
2162 if(dialogid == DIALOG_REPLACE_SECOND)
2163 {
2164 if(response)
2165 {
2166 new ToReplaceID = -1;
2167 foreach(new i : Player)
2168 {
2169 if(!strcmp(Player[i][Name], inputtext, false, strlen(inputtext)))
2170 {
2171 ToReplaceID = i;
2172 break;
2173 }
2174 }
2175 if(ToReplaceID != -1)
2176 {
2177 new ToAddID = REPLACE_ToAddID[playerid];
2178 if(!IsPlayerConnected(ToAddID))
2179 {
2180 return SendErrorMessage(playerid, "Player is not connected anymore.");
2181 }
2182
2183 if(Player[ToAddID][InDM] == true)
2184 {
2185 Player[ToAddID][InDM] = false;
2186 Player[ToAddID][DMReadd] = 0;
2187 }
2188
2189 if(Player[ToAddID][InDuel] == true)
2190 return SendErrorMessage(playerid,"That player is in a duel."); //duel
2191
2192 if(Player[ToAddID][LastVehicle] != -1)
2193 {
2194 DestroyVehicle(Player[ToAddID][LastVehicle]);
2195 Player[ToAddID][LastVehicle] = -1;
2196 }
2197
2198 if(Player[ToAddID][Spectating] == true)
2199 StopSpectate(ToAddID);
2200
2201 SetTimerEx("OnPlayerReplace", 500, false, "iii", ToAddID, ToReplaceID, playerid);
2202 }
2203 else
2204 {
2205 for(new i = 0; i < SAVE_SLOTS; i ++)
2206 {
2207 if(strlen(SaveVariables[i][pName]) > 2 && !strcmp(SaveVariables[i][pName], inputtext, false, strlen(inputtext)) && SaveVariables[i][RoundID] == Current)
2208 {
2209 ToReplaceID = i;
2210 break;
2211 }
2212 }
2213 if(ToReplaceID > -1)
2214 {
2215 new ToAddID = REPLACE_ToAddID[playerid];
2216 if(!IsPlayerConnected(ToAddID))
2217 {
2218 return SendErrorMessage(playerid, "Player is not connected anymore.");
2219 }
2220
2221 if(Player[ToAddID][InDM] == true)
2222 {
2223 Player[ToAddID][InDM] = false;
2224 Player[ToAddID][DMReadd] = 0;
2225 }
2226
2227 if(Player[ToAddID][InDuel] == true)
2228 return SendErrorMessage(playerid,"That player is in a duel."); //duel
2229
2230 if(Player[ToAddID][LastVehicle] != -1)
2231 {
2232 DestroyVehicle(Player[ToAddID][LastVehicle]);
2233 Player[ToAddID][LastVehicle] = -1;
2234 }
2235
2236 if(Player[ToAddID][Spectating] == true)
2237 StopSpectate(ToAddID);
2238 SetTimerEx("OnPlayerInGameReplace", 500, false, "iii", ToAddID, ToReplaceID, playerid);
2239 }
2240 else
2241 SendErrorMessage(playerid, "Player not found.");
2242 }
2243 }
2244 return 1;
2245 }
2246 if(dialogid == DIALOG_THEME_CHANGE1)
2247 {
2248 if(response)
2249 {
2250 ThemeChange_listitem{playerid} = listitem;
2251 ShowPlayerDialog(playerid, DIALOG_THEME_CHANGE2, DIALOG_STYLE_MSGBOX, "Caution: server needs restart", "The server needs to be restarted now for the changes to be\ncompletely applied. Restart now or cancel everything?", "Restart", "Cancel");
2252 }
2253 return 1;
2254 }
2255 if(dialogid == DIALOG_THEME_CHANGE2)
2256 {
2257 if(response)
2258 {
2259 ChangeTheme(playerid, ThemeChange_listitem{playerid});
2260 }
2261 return 1;
2262 }
2263 if(dialogid == PLAYERCLICK_DIALOG)
2264 {
2265 if(response)
2266 {
2267 if(!IsPlayerConnected(LastClickedPlayer[playerid]))
2268 return SendErrorMessage(playerid, "That player is not connected anymore!");
2269
2270 switch(listitem)
2271 {
2272 case 0:
2273 {
2274 new statsSTR[4][300], namee[60], CID, Country[128], techInfo[200];
2275 CID = LastClickedPlayer[playerid];
2276
2277 format(namee, sizeof(namee), "{FF3333}Player {FFFFFF}%s {FF3333}Stats", Player[CID][Name]);
2278 GetPlayerCountry(CID, Country, sizeof(Country));
2279
2280 new TD = Player[CID][TotalDeaths];
2281 new RD = Player[CID][RoundDeaths];
2282 new MC = Player[playerid][ChatChannel];
2283 new YC = Player[CID][ChatChannel];
2284
2285 if(IsPlayerAdmin(playerid))
2286 {
2287 new str[35];
2288
2289 // Get player IP
2290 GetPlayerIp(CID, str, sizeof(str));
2291 format(techInfo,sizeof techInfo,""COL_PRIM"- {FFFFFF}IP: %s\n",str);
2292
2293 // Get player hardware ID
2294 if(CAC_GetStatus(CID))
2295 {
2296 new major, minor, patch;
2297 CAC_GetClientVersion(CID, major, minor, patch);
2298 format(techInfo,sizeof techInfo,"%s"COL_PRIM"- {FFFFFF}SAMPCAC version: v%d.%02d.%d\n",techInfo, major, minor, patch);
2299
2300 CAC_GetHardwareID(CID, str, sizeof str);
2301 format(techInfo,sizeof techInfo,"%s"COL_PRIM"- {FFFFFF}Hardware ID: %s\n",techInfo,str);
2302 }
2303 }
2304
2305 format(statsSTR[0], sizeof(statsSTR[]), ""COL_PRIM"- {FFFFFF}Country: %s\n\n"COL_PRIM"- {FFFFFF}Round Kills: \t\t%d\t\t"COL_PRIM"- {FFFFFF}Total Kills: \t\t%d\t\t"COL_PRIM"- {FFFFFF}FPS: \t\t\t%d\n"COL_PRIM"- {FFFFFF}Round Deaths: \t%.0f\t\t"COL_PRIM"- {FFFFFF}Total Deaths: \t%d\t\t"COL_PRIM"- {FFFFFF}Ping: \t\t\t%d\n",Country,Player[CID][RoundKills],Player[CID][TotalKills], Player[CID][FPS], RD, TD, GetPlayerPing(CID));
2306 format(statsSTR[1], sizeof(statsSTR[]), ""COL_PRIM"- {FFFFFF}Round Damage: \t%d\t\t"COL_PRIM"- {FFFFFF}Total Damage: \t%d\t\t"COL_PRIM"- {FFFFFF}Packet-Loss: \t%.1f\n\n"COL_PRIM"- {FFFFFF}Player Weather: \t%d\t\t"COL_PRIM"- {FFFFFF}Chat Channel: \t%d\t\t"COL_PRIM"- {FFFFFF}In Round: \t\t%s\n",Player[CID][RoundDamage],Player[CID][TotalDamage], NetStats_PacketLossPercent(CID), Player[CID][Weather], (MC == YC ? YC : -1), (Player[CID][Playing] == true ? ("Yes") : ("No")));
2307 format(statsSTR[2], sizeof(statsSTR[]), ""COL_PRIM"- {FFFFFF}Player Time: \t\t%d\t\t"COL_PRIM"- {FFFFFF}DM ID: \t\t%d\t\t"COL_PRIM"- {FFFFFF}Hit Sound: \t\t%d\n"COL_PRIM"- {FFFFFF}Player NetCheck: \t%s\t"COL_PRIM"- {FFFFFF}Player Level: \t%d\t\t"COL_PRIM"- {FFFFFF}Get Hit Sound: \t%d\n", Player[CID][Time], (Player[CID][DMReadd] > 0 ? Player[CID][DMReadd] : -1), Player[CID][HitSound], (Player[CID][NetCheck] == 1 ? ("Enabled") : ("Disabled")), Player[CID][Level], Player[CID][GetHitSound]);
2308 format(statsSTR[3], sizeof(statsSTR[]), ""COL_PRIM"- {FFFFFF}Duels Won: \t\t%d\t\t"COL_PRIM"- {FFFFFF}Duels Lost: \t\t%d", Player[CID][DuelsWon], Player[CID][DuelsLost]);
2309 new TotalStr[1400];
2310 format(TotalStr, sizeof(TotalStr), "%s%s%s%s%s", techInfo, statsSTR[0], statsSTR[1], statsSTR[2], statsSTR[3]);
2311
2312 ShowPlayerDialog(playerid, DIALOG_CLICK_STATS, DIALOG_STYLE_MSGBOX, namee, TotalStr, "Close", "");
2313 }
2314 case 1:
2315 {
2316 CallLocalFunction("OnPlayerCommandText", "ds", playerid, sprintf("/aka %d", LastClickedPlayer[playerid]));
2317 }
2318 case 2:
2319 {
2320 CallLocalFunction("OnPlayerCommandText", "ds", playerid, sprintf("/spec %d", LastClickedPlayer[playerid]));
2321 }
2322 case 3:
2323 {
2324 CallLocalFunction("OnPlayerCommandText", "ds", playerid, sprintf("/add %d", LastClickedPlayer[playerid]));
2325 }
2326 case 4:
2327 {
2328 CallLocalFunction("OnPlayerCommandText", "ds", playerid, sprintf("/remove %d", LastClickedPlayer[playerid]));
2329 }
2330 case 5:
2331 {
2332 CallLocalFunction("OnPlayerCommandText", "ds", playerid, sprintf("/readd %d", LastClickedPlayer[playerid]));
2333 }
2334 case 6:
2335 {
2336 CallLocalFunction("OnPlayerCommandText", "ds", playerid, sprintf("/givemenu %d", LastClickedPlayer[playerid]));
2337 }
2338 case 7:
2339 {
2340 CallLocalFunction("OnPlayerCommandText", "ds", playerid, sprintf("/goto %d", LastClickedPlayer[playerid]));
2341 }
2342 case 8:
2343 {
2344 CallLocalFunction("OnPlayerCommandText", "ds", playerid, sprintf("/get %d", LastClickedPlayer[playerid]));
2345 }
2346 case 9:
2347 {
2348 CallLocalFunction("OnPlayerCommandText", "ds", playerid, sprintf("/slap %d", LastClickedPlayer[playerid]));
2349 }
2350 case 10:
2351 {
2352 CallLocalFunction("OnPlayerCommandText", "ds", playerid, sprintf("/mute %d No Reason Specified", LastClickedPlayer[playerid]));
2353 }
2354 case 11:
2355 {
2356 CallLocalFunction("OnPlayerCommandText", "ds", playerid, sprintf("/unmute %d", LastClickedPlayer[playerid]));
2357 }
2358 case 12:
2359 {
2360 CallLocalFunction("OnPlayerCommandText", "ds", playerid, sprintf("/kick %d No Reason Specified", LastClickedPlayer[playerid]));
2361 }
2362 case 13:
2363 {
2364 CallLocalFunction("OnPlayerCommandText", "ds", playerid, sprintf("/ban %d No Reason Specified", LastClickedPlayer[playerid]));
2365 }
2366 }
2367 }
2368 return 1;
2369 }
2370 if(dialogid == DIALOG_REGISTER) {
2371 if(response) {
2372 if(isnull(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"{FFFFFF}Registration Dialog","{FFFFFF}Type your password below to register:","Register","Leave");
2373
2374 if(strfind(inputtext, "%", true) != -1)
2375 {
2376 ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"{FFFFFF}Registration Dialog","{FFFFFF}Type your password below to register:","Register","Leave");
2377 return SendErrorMessage(playerid, sprintf("This character '%s' is disallowed in user passwords.", "%%"));
2378 }
2379
2380 new HashPass[140];
2381 format(HashPass, sizeof(HashPass), "%d", udb_hash(inputtext));
2382
2383 new IP[16];
2384 GetPlayerIp(playerid, IP, sizeof(IP));
2385 new day, month, year;
2386 getdate(year, month, day);
2387 new query[240];
2388 format(query, sizeof(query), "INSERT INTO Players (Name, Password, IP, LastSeen_Day, LastSeen_Month, LastSeen_Year) VALUES('%q', '%q', '%s', %d, %d, %d)", Player[playerid][Name], HashPass, IP, day, month, year);
2389 db_free_result(db_query(sqliteconnection, query));
2390
2391 SendClientMessage(playerid, -1, sprintf("{009933}Server account: {FFFFFF}registered your account with the password: %s", inputtext));
2392
2393 new teamid = ShouldPlayerBeReadded(playerid);
2394 if(teamid != -1)
2395 {
2396 SetTimerEx("SpawnConnectedPlayer", 250, false, "ii", playerid, teamid);
2397 }
2398 else
2399 {
2400 ShowIntroTextDraws(playerid);
2401 ShowPlayerClassSelection(playerid);
2402 }
2403
2404 Player[playerid][Level] = 0;
2405 Player[playerid][Weather] = MainWeather;
2406 Player[playerid][Time] = MainTime;
2407 Player[playerid][Logged] = true;
2408 Player[playerid][ChatChannel] = -1;
2409 Player[playerid][NetCheck] = 1;
2410 Player[playerid][DuelsWon] = 0;
2411 Player[playerid][DuelsLost] = 0;
2412 }
2413 else
2414 {
2415 new iString[128];
2416 format(iString, sizeof(iString),"{FFFFFF}%s "COL_PRIM"has been kicked from the server for not registering.", Player[playerid][Name]);
2417 SendClientMessageToAll(-1, iString);
2418
2419 SetTimerEx("OnPlayerKicked", 500, false, "i", playerid);
2420 }
2421 return 1;
2422 }
2423 #if defined _league_included
2424 if(dialogid == DIALOG_LEAGUE_REGISTER)
2425 {
2426 if(response)
2427 {
2428 if(isnull(inputtext))
2429 return ShowPlayerLeagueRegisterDialog(playerid);
2430
2431 if(strfind(inputtext, "%", true) != -1)
2432 {
2433 ShowPlayerLeagueRegisterDialog(playerid);
2434 return SendErrorMessage(playerid, sprintf("This character '%s' is disallowed in user passwords.", "%%"));
2435 }
2436 if(strlen(inputtext) < 8)
2437 {
2438 ShowPlayerLeagueRegisterDialog(playerid);
2439 return SendErrorMessage(playerid, "Password must be atleast 8 characters long!");
2440 }
2441 if(strfind(inputtext, " ", true) != -1)
2442 {
2443 ShowPlayerLeagueRegisterDialog(playerid);
2444 return SendErrorMessage(playerid, "Password must not contain spaces!");
2445 }
2446 RegisterPlayerInLeague(playerid, inputtext);
2447 }
2448 else
2449 {
2450 new iString[128];
2451 format(iString, sizeof(iString),"{FFFFFF}%s "COL_PRIM"has NOT registered a league account.", Player[playerid][Name]);
2452 SendClientMessageToAll(-1, iString);
2453
2454 Player[playerid][MustLeaguePass] = false;
2455 Player[playerid][MustLeagueRegister] = false;
2456 Player[playerid][LeagueLogged] = false;
2457
2458 OnPlayerRequestClass(playerid, 0);
2459 InitLeaguePlayer(playerid);
2460 }
2461 return 1;
2462 }
2463 if(dialogid == DIALOG_LEAGUE_LOGIN)
2464 {
2465 if(response)
2466 {
2467 if(isnull(inputtext))
2468 return ShowPlayerLeagueLoginDialog(playerid);
2469
2470 if(strfind(inputtext, "%", true) != -1)
2471 {
2472 ShowPlayerLeagueLoginDialog(playerid);
2473 return SendErrorMessage(playerid, sprintf("This character '%s' is disallowed in user passwords.", "%%"));
2474 }
2475 CheckPlayerLeagueAccount(playerid, inputtext);
2476 }
2477 else
2478 {
2479 new iString[128];
2480 format(iString, sizeof(iString),"{FFFFFF}%s "COL_PRIM"has NOT logged into their league account.", Player[playerid][Name]);
2481 SendClientMessageToAll(-1, iString);
2482
2483 Player[playerid][MustLeaguePass] = false;
2484 Player[playerid][MustLeagueRegister] = false;
2485 Player[playerid][LeagueLogged] = false;
2486
2487 OnPlayerRequestClass(playerid, 0);
2488 InitLeaguePlayer(playerid);
2489 }
2490 return 1;
2491 }
2492 #endif
2493 if(dialogid == DIALOG_LOGIN)
2494 {
2495 if(response)
2496 {
2497 if(isnull(inputtext))
2498 return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"{FFFFFF}Login Dialog","{FFFFFF}Type your password below to log in:","Login","Leave");
2499
2500 if(strfind(inputtext, "%", true) != -1)
2501 {
2502 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"{FFFFFF}Login Dialog","{FFFFFF}Type your password below to log in:","Login","Leave");
2503 return SendErrorMessage(playerid, sprintf("This character '%s' is disallowed in user passwords.", "%%"));
2504 }
2505
2506 new HashPass[140];
2507 format(HashPass, sizeof(HashPass), "%d", udb_hash(inputtext));
2508
2509 new Query[256];
2510 format(Query, sizeof(Query), "SELECT * FROM `Players` WHERE `Name` = '%q' AND `Password` = '%q'", Player[playerid][Name], HashPass);
2511 new DBResult:res = db_query(sqliteconnection, Query);
2512
2513 if(db_num_rows(res))
2514 {
2515 LoginPlayer(playerid, res);
2516 new teamid = ShouldPlayerBeReadded(playerid);
2517 if(teamid != -1)
2518 {
2519 SetTimerEx("SpawnConnectedPlayer", 250, false, "ii", playerid, teamid);
2520 }
2521 else
2522 {
2523 ShowIntroTextDraws(playerid);
2524 ShowPlayerClassSelection(playerid);
2525 }
2526 }
2527 else
2528 {
2529 SendErrorMessage(playerid,"Wrong Password. Please try again.");
2530 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"{FFFFFF}Login Dialog","{FFFFFF}Type your password below to log in:","Login","Leave");
2531 }
2532 db_free_result(res);
2533 }
2534 else
2535 {
2536 new iString[128];
2537 format(iString, sizeof(iString),"{FFFFFF}%s "COL_PRIM"has been kicked from the server for not logging in.", Player[playerid][Name]);
2538 SendClientMessageToAll(-1, iString);
2539
2540 SetTimerEx("OnPlayerKicked", 500, false, "i", playerid);
2541 }
2542 return 1;
2543 }
2544
2545 if(dialogid == DIALOG_SERVER_PASS) {
2546 if(response) {
2547 if(isnull(inputtext)) return 1;
2548 if(strlen(inputtext) > MAX_SERVER_PASS_LENGH) {
2549 SendErrorMessage(playerid,"Server password is too long.");
2550 ShowPlayerDialog(playerid, DIALOG_SERVER_PASS, DIALOG_STYLE_INPUT,""COL_PRIM"Server Password",""COL_PRIM"Enter server password below:", "Ok","Close");
2551 return 1;
2552 }
2553 format(ServerPass, sizeof(ServerPass), "password %s", inputtext);
2554 SendRconCommand(ServerPass);
2555
2556 ServerLocked = true;
2557 PermLocked = false;
2558
2559 new iString[144];
2560 format(iString, sizeof(iString), "%sServer Pass: ~r~~h~%s", MAIN_TEXT_COLOUR, inputtext);
2561 TextDrawSetString(LockServerTD, iString);
2562
2563 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has locked the server. Password: {FFFFFF}%s",Player[playerid][Name], inputtext);
2564 SendClientMessageToAll(-1, iString);
2565 }
2566 return 1;
2567 }
2568
2569 if(dialogid == DIALOG_CURRENT_TOTAL)
2570 {
2571 if(isnull(inputtext)) return 1;
2572 if(!IsNumeric(inputtext)) {
2573 SendErrorMessage(playerid,"You can only use numeric input.");
2574 ShowPlayerDialog(playerid, DIALOG_CURRENT_TOTAL, DIALOG_STYLE_INPUT,""COL_PRIM"Rounds Dialog",""COL_PRIM"Enter current round or total rounds to be played:","Current","Total");
2575 return 1;
2576 }
2577
2578 new Value = strval(inputtext);
2579
2580 if(Value < 0 || Value > 100) {
2581 SendErrorMessage(playerid,"Current or total rounds can only be between 0 and 100.");
2582 ShowPlayerDialog(playerid, DIALOG_CURRENT_TOTAL, DIALOG_STYLE_INPUT,""COL_PRIM"Rounds Dialog",""COL_PRIM"Enter current round or total rounds to be played:","Current","Total");
2583 return 1;
2584 }
2585
2586 new iString[144];
2587
2588 if(response) {
2589 CurrentRound = Value;
2590 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has changed the current round to: {FFFFFF}%d", Player[playerid][Name], CurrentRound);
2591 SendClientMessageToAll(-1, iString);
2592 } else {
2593 TotalRounds = Value;
2594 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has changed the total rounds to: {FFFFFF}%d", Player[playerid][Name], TotalRounds);
2595 SendClientMessageToAll(-1, iString);
2596 }
2597 UpdateRoundsPlayedTextDraw();
2598 return 1;
2599 }
2600
2601 if(dialogid == DIALOG_TEAM_SCORE)
2602 {
2603 if(response) {
2604 switch(listitem) {
2605 case 0: {
2606 ShowPlayerDialog(playerid, DIALOG_ATT_NAME, DIALOG_STYLE_INPUT,""COL_PRIM"ATTACKER Team Name",""COL_PRIM"Enter {FFFFFF}ATTACKER "COL_PRIM"Team Name Below:","Next","Close");
2607 } case 1: {
2608 new iString[128];
2609 format(iString, sizeof(iString), ""COL_PRIM"Enter {FFFFFF}%s "COL_PRIM"Team Score Below:", TeamName[ATTACKER]);
2610 ShowPlayerDialog(playerid, DIALOG_ATT_SCORE, DIALOG_STYLE_INPUT,""COL_PRIM"ATTACKER Team Score",iString,"Next","Close");
2611 } case 2: {
2612 TeamScore[ATTACKER] = 0;
2613 TeamScore[DEFENDER] = 0;
2614 CurrentRound = 0;
2615
2616 UpdateTeamScoreTextDraw();
2617 UpdateRoundsPlayedTextDraw();
2618 UpdateTeamNameTextDraw();
2619
2620 UpdateTeamNamesTextdraw();
2621
2622 ClearPlayerVariables();
2623
2624 foreach(new i : Player)
2625 {
2626 Player[i][TotalKills] = 0;
2627 Player[i][TotalDeaths] = 0;
2628 Player[i][TotalDamage] = 0;
2629 Player[i][RoundPlayed] = 0;
2630 Player[i][TotalBulletsFired] = 0;
2631 Player[i][TotalshotsHit] = 0;
2632 }
2633
2634 new iString[64];
2635 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has reset the scores.", Player[playerid][Name]);
2636 SendClientMessageToAll(-1, iString);
2637 }
2638 }
2639 }
2640 return 1;
2641 }
2642
2643 if(dialogid == DIALOG_WAR_RESET)
2644 {
2645 if(response)
2646 {
2647 TeamScore[ATTACKER] = 0;
2648 TeamScore[DEFENDER] = 0;
2649 CurrentRound = 0;
2650
2651 new DBResult:res = db_query(sqliteconnection, "SELECT * FROM Configs WHERE Option = 'Total Rounds'");
2652
2653 new iString[144];
2654
2655 db_get_field_assoc(res, "Value", iString, sizeof(iString));
2656 TotalRounds = strval(iString);
2657 db_free_result(res);
2658
2659 TeamName[ATTACKER] = "Alpha";
2660 TeamName[ATTACKER_SUB] = "Alpha Sub";
2661 TeamName[DEFENDER] = "Beta";
2662 TeamName[DEFENDER_SUB] = "Beta Sub";
2663
2664 UpdateTeamScoreTextDraw();
2665 UpdateRoundsPlayedTextDraw();
2666 UpdateTeamNameTextDraw();
2667
2668
2669 format(iString, sizeof iString, "%sWar Mode: ~r~OFF", MAIN_TEXT_COLOUR);
2670 TextDrawSetString(WarModeText, iString);
2671
2672 foreach(new i : Player) {
2673 Player[i][TotalKills] = 0;
2674 Player[i][TotalDeaths] = 0;
2675 Player[i][TotalDamage] = 0;
2676 Player[i][RoundPlayed] = 0;
2677 Player[i][TotalBulletsFired] = 0;
2678 Player[i][TotalshotsHit] = 0;
2679 }
2680
2681 ClearPlayerVariables();
2682
2683 HideMatchScoreBoard();
2684
2685 WarMode = false;
2686 #if defined _league_included
2687 UpdateOnlineMatchesList(false);
2688 CancelLeagueMode();
2689 #endif
2690
2691 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has disabled the Match-Mode.", Player[playerid][Name]);
2692 SendClientMessageToAll(-1, iString);
2693 }
2694 return 1;
2695 }
2696
2697 if(dialogid == DIALOG_ATT_NAME) {
2698 if(response) {
2699 if(isnull(inputtext)) {
2700 ShowPlayerDialog(playerid, DIALOG_DEF_NAME, DIALOG_STYLE_INPUT,""COL_PRIM"Defender Team Name",""COL_PRIM"Enter {FFFFFF}Defender "COL_PRIM"Team Name Below:","Ok","Close");
2701 return 1;
2702 }
2703 if(strlen(inputtext) > 6) {
2704 SendErrorMessage(playerid,"Team name is too long.");
2705 ShowPlayerDialog(playerid, DIALOG_ATT_NAME, DIALOG_STYLE_INPUT,""COL_PRIM"ATTACKER Team Name",""COL_PRIM"Enter {FFFFFF}ATTACKER "COL_PRIM"Team Name Below:","Next","Close");
2706 return 1;
2707 }
2708
2709 if(strfind(inputtext, "~") != -1) {
2710 return SendErrorMessage(playerid,"~ not allowed.");
2711 }
2712
2713 format(TeamName[ATTACKER], 24, inputtext);
2714 format(TeamName[ATTACKER_SUB], 24, "%s Sub", TeamName[ATTACKER]);
2715
2716 UpdateTeamScoreTextDraw();
2717 UpdateRoundsPlayedTextDraw();
2718 UpdateTeamNameTextDraw();
2719
2720 UpdateTeamNamesTextdraw();
2721
2722 new iString[144];
2723 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has set ATTACKER team name to: {FFFFFF}%s", Player[playerid][Name], TeamName[ATTACKER]);
2724 SendClientMessageToAll(-1, iString);
2725
2726 ShowPlayerDialog(playerid, DIALOG_DEF_NAME, DIALOG_STYLE_INPUT,""COL_PRIM"Defender Team Name",""COL_PRIM"Enter {FFFFFF}Defender "COL_PRIM"Team Name Below:","Ok","Close");
2727 }
2728 return 1;
2729 }
2730
2731 if(dialogid == DIALOG_DEF_NAME)
2732 {
2733 if(response)
2734 {
2735 if(isnull(inputtext)) return 1;
2736 if(strlen(inputtext) > 6) {
2737 SendErrorMessage(playerid,"Team name is too long.");
2738 ShowPlayerDialog(playerid, DIALOG_DEF_NAME, DIALOG_STYLE_INPUT,""COL_PRIM"Defender Team Name",""COL_PRIM"Enter {FFFFFF}Defender "COL_PRIM"Team Name Below:","Ok","Close");
2739 return 1;
2740 }
2741
2742 if(strfind(inputtext, "~") != -1) {
2743 return SendErrorMessage(playerid,"~ not allowed.");
2744 }
2745
2746 format(TeamName[DEFENDER], 24, inputtext);
2747 format(TeamName[DEFENDER_SUB], 24, "%s Sub", TeamName[DEFENDER]);
2748
2749 UpdateTeamScoreTextDraw();
2750 UpdateRoundsPlayedTextDraw();
2751 UpdateTeamNameTextDraw();
2752
2753 UpdateTeamNamesTextdraw();
2754
2755 new iString[144];
2756 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has set defender team name to: {FFFFFF}%s", Player[playerid][Name], TeamName[DEFENDER]);
2757 SendClientMessageToAll(-1, iString);
2758
2759 WarMode = true;
2760 #if defined _league_included
2761 UpdateOnlineMatchesList(true);
2762 #endif
2763 format(iString, sizeof iString, "%sWar Mode: ~r~ON", MAIN_TEXT_COLOUR);
2764 TextDrawSetString(WarModeText, iString);
2765
2766 ShowMatchScoreBoard();
2767 }
2768 return 1;
2769 }
2770
2771 if(dialogid == DIALOG_ATT_SCORE)
2772 {
2773 if(response)
2774 {
2775 new iString[128];
2776 if(isnull(inputtext))
2777 {
2778 format(iString, sizeof(iString), ""COL_PRIM"Enter {FFFFFF}%s "COL_PRIM"Team Score Below:", TeamName[DEFENDER]);
2779 ShowPlayerDialog(playerid, DIALOG_DEF_SCORE, DIALOG_STYLE_INPUT,""COL_PRIM"Defender Team Score",iString,"Ok","Close");
2780 return 1;
2781 }
2782 if(!IsNumeric(inputtext))
2783 {
2784 SendErrorMessage(playerid,"Score can only be numerical.");
2785 format(iString, sizeof(iString), ""COL_PRIM"Enter {FF3333}%s "COL_PRIM"Team Score Below:", TeamName[ATTACKER]);
2786 ShowPlayerDialog(playerid, DIALOG_ATT_SCORE, DIALOG_STYLE_INPUT,""COL_PRIM"ATTACKER Team Score",iString,"Next","Close");
2787 return 1;
2788 }
2789 new Score = strval(inputtext);
2790
2791 if(Score < 0 || Score > 100)
2792 {
2793 SendErrorMessage(playerid,"Score can only be between 0 and 100.");
2794 format(iString, sizeof(iString), ""COL_PRIM"Enter {FF3333}%s "COL_PRIM"Team Score Below:", TeamName[ATTACKER]);
2795 ShowPlayerDialog(playerid, DIALOG_ATT_SCORE, DIALOG_STYLE_INPUT,""COL_PRIM"ATTACKER Team Score",iString,"Next","Close");
2796 return 1;
2797 }
2798
2799 if((Score + TeamScore[DEFENDER]) >= TotalRounds)
2800 {
2801 SendErrorMessage(playerid,"ATTACKER plus defender score is bigger than or equal to total rounds.");
2802 format(iString, sizeof(iString), ""COL_PRIM"Enter {FFFFFF}%s "COL_PRIM"Team Score Below:", TeamName[ATTACKER]);
2803 ShowPlayerDialog(playerid, DIALOG_ATT_SCORE, DIALOG_STYLE_INPUT,""COL_PRIM"ATTACKER Team Score",iString,"Next","Close");
2804 return 1;
2805 }
2806
2807 TeamScore[ATTACKER] = Score;
2808 CurrentRound = TeamScore[ATTACKER] + TeamScore[DEFENDER];
2809
2810
2811 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has set ATTACKER team score to: {FFFFFF}%d", Player[playerid][Name], TeamScore[ATTACKER]);
2812 SendClientMessageToAll(-1, iString);
2813
2814 UpdateTeamScoreTextDraw();
2815 UpdateRoundsPlayedTextDraw();
2816 UpdateTeamNameTextDraw();
2817
2818 format(iString, sizeof(iString), ""COL_PRIM"Enter {FFFFFF}%s "COL_PRIM"Team Score Below:", TeamName[DEFENDER]);
2819 ShowPlayerDialog(playerid, DIALOG_DEF_SCORE, DIALOG_STYLE_INPUT,""COL_PRIM"Defender Team Score",iString,"Ok","Close");
2820 }
2821 return 1;
2822 }
2823
2824 if(dialogid == DIALOG_DEF_SCORE)
2825 {
2826 if(response)
2827 {
2828 if(isnull(inputtext))
2829 return 1;
2830
2831 new iString[128];
2832 if(!IsNumeric(inputtext))
2833 {
2834 SendErrorMessage(playerid,"Score can only be numerical.");
2835 format(iString, sizeof(iString), ""COL_PRIM"Enter {FFFFFF}%s "COL_PRIM"Team Score Below:", TeamName[DEFENDER]);
2836 ShowPlayerDialog(playerid, DIALOG_DEF_SCORE, DIALOG_STYLE_INPUT,""COL_PRIM"Defender Team Score",iString,"Ok","Close");
2837 return 1;
2838 }
2839
2840 new Score = strval(inputtext);
2841
2842 if(Score < 0 || Score > 100)
2843 {
2844 SendErrorMessage(playerid,"Score can only be between 0 and 100.");
2845 format(iString, sizeof(iString), ""COL_PRIM"Enter {FFFFFF}%s "COL_PRIM"Team Score Below:", TeamName[DEFENDER]);
2846 ShowPlayerDialog(playerid, DIALOG_DEF_SCORE, DIALOG_STYLE_INPUT,""COL_PRIM"Defender Team Score",iString,"Ok","Close");
2847 return 1;
2848 }
2849
2850 if((TeamScore[ATTACKER] + Score) >= TotalRounds)
2851 {
2852 SendErrorMessage(playerid,"ATTACKER plus defender score is bigger than or equal to total rounds.");
2853 format(iString, sizeof(iString), ""COL_PRIM"Enter {FFFFFF}%s "COL_PRIM"Team Score Below:", TeamName[DEFENDER]);
2854 ShowPlayerDialog(playerid, DIALOG_DEF_SCORE, DIALOG_STYLE_INPUT,""COL_PRIM"Defender Team Score",iString,"Ok","Close");
2855 return 1;
2856 }
2857 TeamScore[DEFENDER] = Score;
2858 CurrentRound = TeamScore[ATTACKER] + TeamScore[DEFENDER];
2859
2860 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has set defender team score to: {FFFFFF}%d", Player[playerid][Name], TeamScore[DEFENDER]);
2861 SendClientMessageToAll(-1, iString);
2862
2863 UpdateTeamScoreTextDraw();
2864 UpdateRoundsPlayedTextDraw();
2865 UpdateTeamNameTextDraw();
2866 }
2867 return 1;
2868 }
2869
2870 if(dialogid == DIALOG_CONFIG)
2871 {
2872 if(response)
2873 {
2874 switch(listitem)
2875 {
2876 case 0: {
2877 ShowPlayerDialog(playerid, DIALOG_ATT_NAME, DIALOG_STYLE_INPUT,""COL_PRIM"ATTACKER Team Name",""COL_PRIM"Enter {FFFFFF}ATTACKER "COL_PRIM"Team Name Below:","Next","Close");
2878 }
2879 case 1: {
2880 new iString[128];
2881 format(iString, sizeof(iString), "%sATTACKER Team\n%sDefender Team\n%sReferee Team", TextColor[ATTACKER], TextColor[DEFENDER], TextColor[REFEREE]);
2882 ShowPlayerDialog(playerid, DIALOG_CONFIG_SET_TEAM_SKIN, DIALOG_STYLE_LIST, ""COL_PRIM"Select team", iString, "OK", "Back");
2883 }
2884 case 2: {
2885 ShowPlayerDialog(playerid, DIALOG_CONFIG_SET_AAD, DIALOG_STYLE_LIST, ""COL_PRIM"A/D Config", ""COL_PRIM"Health\n"COL_PRIM"Armour\n"COL_PRIM"Round Time\n"COL_PRIM"CP Time", "OK", "Back");
2886 }
2887 case 3: {
2888 SendRconCommand("gmx");
2889 }
2890 case 4: {
2891 ShowPlayerDialog(playerid, DIALOG_CONFIG_SET_MAX_PING, DIALOG_STYLE_INPUT, ""COL_PRIM"Set max Ping", "Set the max ping:", "OK", "Back");
2892 }
2893 case 5: {
2894 ShowPlayerDialog(playerid, DIALOG_CONFIG_SET_MAX_PACKET, DIALOG_STYLE_INPUT, ""COL_PRIM"Set max Packetloss", "Set the max packetloss:", "OK", "Back");
2895 }
2896 case 6: {
2897 ShowPlayerDialog(playerid, DIALOG_CONFIG_SET_MIN_FPS, DIALOG_STYLE_INPUT, ""COL_PRIM"Set Minimum FPS", "Set the minimum FPS:", "OK", "Back");
2898 }
2899 case 7: {
2900 new string[90];
2901
2902 if(strlen(GroupAccessPassword[0]) > 0)
2903 {
2904 format(string, sizeof string, "{FF6666}%s", TeamName[ATTACKER]);
2905 }
2906 else
2907 {
2908 format(string, sizeof string, "{66FF66}%s", TeamName[ATTACKER]);
2909 }
2910
2911 if(strlen(GroupAccessPassword[1]) > 0)
2912 {
2913 format(string, sizeof string, "%s\n{FF6666}%s", string, TeamName[DEFENDER]);
2914 }
2915 else
2916 {
2917 format(string, sizeof string, "%s\n{66FF66}%s", string, TeamName[DEFENDER]);
2918 }
2919
2920 if(strlen(GroupAccessPassword[2]) > 0)
2921 {
2922 format(string, sizeof string, "%s\n{FF6666}Referee", string);
2923 }
2924 else
2925 {
2926 format(string, sizeof string, "%s\n{66FF66}Referee", string);
2927 }
2928
2929 if(strlen(GroupAccessPassword[3]) > 0)
2930 {
2931 format(string, sizeof string, "%s\n{FF6666}%s Sub", string, TeamName[ATTACKER]);
2932 }
2933 else
2934 {
2935 format(string, sizeof string, "%s\n{66FF66}%s Sub", string, TeamName[ATTACKER]);
2936 }
2937
2938 if(strlen(GroupAccessPassword[4]) > 0)
2939 {
2940 format(string, sizeof string, "%s\n{FF6666}%s Sub", string, TeamName[DEFENDER]);
2941 }
2942 else
2943 {
2944 format(string, sizeof string, "%s\n{66FF66}%s Sub", string, TeamName[DEFENDER]);
2945 }
2946 ShowPlayerDialog(playerid, DIALOG_CONFIG_SET_GA, DIALOG_STYLE_LIST, ""COL_PRIM"Config Settings", string, "OK", "Cancel");
2947 return 1;
2948 }
2949 case 8: {
2950 if(!ServerLocked) {
2951 ShowPlayerDialog(playerid, DIALOG_SERVER_PASS, DIALOG_STYLE_INPUT,""COL_PRIM"Server Password",""COL_PRIM"Enter server password below:", "Ok","Close");
2952 } else {
2953 SendRconCommand("password 0");
2954 ServerLocked = false;
2955 PermLocked = false;
2956 }
2957 }
2958 case 9: {
2959 new iString[144];
2960 if(AntiSpam == false) {
2961 AntiSpam = true;
2962 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"anti-spam.", Player[playerid][Name]);
2963 SendClientMessageToAll(-1, iString);
2964 } else {
2965 AntiSpam = false;
2966 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"anti-spam.", Player[playerid][Name]);
2967 SendClientMessageToAll(-1, iString);
2968 }
2969 ShowConfigDialog(playerid);
2970 }
2971 case 10: {
2972 new iString[144];
2973 if(AutoBal == false) {
2974 AutoBal = true;
2975 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"auto-balance in non war mode.", Player[playerid][Name]);
2976 SendClientMessageToAll(-1, iString);
2977 } else {
2978 AutoBal = false;
2979 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"auto-balance in non war mode.", Player[playerid][Name]);
2980 SendClientMessageToAll(-1, iString);
2981 }
2982 ShowConfigDialog(playerid);
2983 }
2984 case 11: {
2985 new iString[144];
2986 if(AutoPause == false) {
2987 AutoPause = true;
2988 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"Auto-Pause on player disconnect in war mode.", Player[playerid][Name]);
2989 SendClientMessageToAll(-1, iString);
2990 } else {
2991 AutoPause = false;
2992 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"Auto-Pause on player disconnect in war mode.", Player[playerid][Name]);
2993 SendClientMessageToAll(-1, iString);
2994 }
2995 ShowConfigDialog(playerid);
2996 }
2997 case 12: {
2998 new iString[144];
2999 if(LobbyGuns == true) {
3000 LobbyGuns = false;
3001 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"guns in lobby.", Player[playerid][Name]);
3002 SendClientMessageToAll(-1, iString);
3003 } else {
3004 LobbyGuns = true;
3005 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"guns in lobby.", Player[playerid][Name]);
3006 SendClientMessageToAll(-1, iString);
3007 }
3008 ShowConfigDialog(playerid);
3009 }
3010 case 13:
3011 {
3012 new iString[144];
3013 if(DefendersSeeVehiclesBlips == false)
3014 {
3015 DefendersSeeVehiclesBlips = true;
3016 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"defenders see vehicle blips{FFFFFF} option.", Player[playerid][Name]);
3017 SendClientMessageToAll(-1, iString);
3018 }
3019 else
3020 {
3021 DefendersSeeVehiclesBlips = false;
3022 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"defenders see vehicle blips{FFFFFF} option.", Player[playerid][Name]);
3023 SendClientMessageToAll(-1, iString);
3024 }
3025 }
3026 case 14:
3027 {
3028 #if defined _league_included
3029 new iString[144];
3030 switch(LeagueAllowed)
3031 {
3032 case false:
3033 {
3034 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"league system{FFFFFF} on this server.", Player[playerid][Name]);
3035 SendClientMessageToAll(-1, iString);
3036 SendClientMessageToAll(-1, ""COL_PRIM"Notice: {FFFFFF}the system works automatically, so you need not run any special commands. Just switch match-mode on!");
3037 LeagueAllowed = true;
3038 CheckLeagueMatchValidity(1000);
3039 }
3040 case true:
3041 {
3042 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"league system{FFFFFF} on this server.", Player[playerid][Name]);
3043 SendClientMessageToAll(-1, iString);
3044 LeagueAllowed = false;
3045 CancelLeagueMode();
3046 }
3047 }
3048 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'LeagueAllowed'", (LeagueAllowed == false ? 0 : 1));
3049 db_free_result(db_query(sqliteconnection, iString));
3050 #else
3051 SendErrorMessage(playerid, "This version is not supported and cannot run league features.");
3052 #endif
3053 }
3054 case 15:
3055 {
3056 if(Current != -1) return SendErrorMessage(playerid, "Can't use this while a round is in progress.");
3057 new iString[144];
3058 switch(CPInArena)
3059 {
3060 case false:
3061 {
3062 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"Checkpoint in arena{FFFFFF} option.", Player[playerid][Name]);
3063 SendClientMessageToAll(-1, iString);
3064 CPInArena = true;
3065 }
3066 case true:
3067 {
3068 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"Checkpoint in arena{FFFFFF} option.", Player[playerid][Name]);
3069 SendClientMessageToAll(-1, iString);
3070 CPInArena = false;
3071 }
3072 }
3073 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'CPInArena'", (CPInArena == false ? 0 : 1));
3074 db_free_result(db_query(sqliteconnection, iString));
3075 ShowConfigDialog(playerid);
3076 }
3077 case 16:
3078 {
3079 new iString[144];
3080 switch(AntiMacros)
3081 {
3082 case false:
3083 {
3084 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"Anti-macros{FFFFFF} system.", Player[playerid][Name]);
3085 SendClientMessageToAll(-1, iString);
3086 AntiMacros = true;
3087 }
3088 case true:
3089 {
3090 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"Anti-macros{FFFFFF} system.", Player[playerid][Name]);
3091 SendClientMessageToAll(-1, iString);
3092 AntiMacros = false;
3093 }
3094 }
3095 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'AntiMacros'", (AntiMacros == false ? 0 : 1));
3096 db_free_result(db_query(sqliteconnection, iString));
3097 ShowConfigDialog(playerid);
3098 }
3099 case 17:
3100 {
3101 new iString[144];
3102 switch(DeadBodies)
3103 {
3104 case false:
3105 {
3106 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"Dead bodies{FFFFFF} option.", Player[playerid][Name]);
3107 SendClientMessageToAll(-1, iString);
3108 DeadBodies = true;
3109 }
3110 case true:
3111 {
3112 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"Dead bodies{FFFFFF} option.", Player[playerid][Name]);
3113 SendClientMessageToAll(-1, iString);
3114 DeleteAllDeadBodies();
3115 DeadBodies = false;
3116 }
3117 }
3118 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'DeadBodies'", (DeadBodies == false ? 0 : 1));
3119 db_free_result(db_query(sqliteconnection, iString));
3120 ShowConfigDialog(playerid);
3121 }
3122 case 18:
3123 {
3124 new iString[144];
3125 switch(DeathCamera)
3126 {
3127 case false:
3128 {
3129 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"Death camera{FFFFFF} system.", Player[playerid][Name]);
3130 SendClientMessageToAll(-1, iString);
3131 DeathCamera = true;
3132 }
3133 case true:
3134 {
3135 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"Death camera{FFFFFF} system.", Player[playerid][Name]);
3136 SendClientMessageToAll(-1, iString);
3137 DeathCamera = false;
3138 }
3139 }
3140 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'DeathCamera'", (DeathCamera == false ? 0 : 1));
3141 db_free_result(db_query(sqliteconnection, iString));
3142 ShowConfigDialog(playerid);
3143 }
3144 case 19:
3145 {
3146 if(Current != -1) return SendErrorMessage(playerid, "Can't do this while a round is in progress.");
3147 new iString[144];
3148 switch(ShowHPBars)
3149 {
3150 case false:
3151 {
3152 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"HP Bars{FFFFFF} system.", Player[playerid][Name]);
3153 SendClientMessageToAll(-1, iString);
3154 ShowHPBars = true;
3155 }
3156 case true:
3157 {
3158 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"HP Bars{FFFFFF} system.", Player[playerid][Name]);
3159 SendClientMessageToAll(-1, iString);
3160 ShowHPBars = false;
3161 }
3162 }
3163 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'ShowHPBars'", (ShowHPBars == false ? 0 : 1));
3164 db_free_result(db_query(sqliteconnection, iString));
3165 ShowConfigDialog(playerid);
3166 }
3167 case 20:
3168 {
3169 new iString[144];
3170 switch(LeagueShop)
3171 {
3172 case false:
3173 {
3174 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"League Shop{FFFFFF} system.", Player[playerid][Name]);
3175 SendClientMessageToAll(-1, iString);
3176 LeagueShop = true;
3177 }
3178 case true:
3179 {
3180 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"League Shop{FFFFFF} system.", Player[playerid][Name]);
3181 SendClientMessageToAll(-1, iString);
3182 LeagueShop = false;
3183 }
3184 }
3185 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'LeagueShop'", (LeagueShop == false ? 0 : 1));
3186 db_free_result(db_query(sqliteconnection, iString));
3187 ShowConfigDialog(playerid);
3188 }
3189 case 21:
3190 {
3191 new iString[144];
3192 switch(GunmenuRestrictions)
3193 {
3194 case false:
3195 {
3196 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"Gunmenu selection restriction.", Player[playerid][Name]);
3197 SendClientMessageToAll(-1, iString);
3198 GunmenuRestrictions = true;
3199 }
3200 case true:
3201 {
3202 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"Gunmenu selection restriction.", Player[playerid][Name]);
3203 SendClientMessageToAll(-1, iString);
3204 GunmenuRestrictions = false;
3205 }
3206 }
3207 ShowConfigDialog(playerid);
3208 }
3209 case 22:
3210 {
3211 new iString[144];
3212 switch(MeleeAllowed)
3213 {
3214 case false:
3215 {
3216 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"melee weapons menu{FFFFFF} option.", Player[playerid][Name]);
3217 SendClientMessageToAll(-1, iString);
3218 MeleeAllowed = true;
3219 }
3220 case true:
3221 {
3222 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"melee weapons menu{FFFFFF} option.", Player[playerid][Name]);
3223 SendClientMessageToAll(-1, iString);
3224 MeleeAllowed = false;
3225 }
3226 }
3227 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'MeleeAllowed'", (MeleeAllowed == false ? 0 : 1));
3228 db_free_result(db_query(sqliteconnection, iString));
3229 ShowConfigDialog(playerid);
3230 }
3231 case 23:
3232 {
3233 new iString[144];
3234 switch(AutoRoundStarter)
3235 {
3236 case false:
3237 {
3238 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"auto round start{FFFFFF} option.", Player[playerid][Name]);
3239 SendClientMessageToAll(-1, iString);
3240 AutoRoundStarter = true;
3241 if(Current == -1 && AllowStartBase != false)
3242 {
3243 SetRoundAutoStart(0);
3244 }
3245 }
3246 case true:
3247 {
3248 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"auto round start{FFFFFF} option.", Player[playerid][Name]);
3249 SendClientMessageToAll(-1, iString);
3250 AutoRoundStarter = false;
3251 }
3252 }
3253 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'AutoRoundStarter'", (AutoRoundStarter == false ? 0 : 1));
3254 db_free_result(db_query(sqliteconnection, iString));
3255 ShowConfigDialog(playerid);
3256 }
3257 case 24:
3258 {
3259 new iString[144];
3260 switch(RandomDeathMessages)
3261 {
3262 case false:
3263 {
3264 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"Random Death Messages{FFFFFF}.", Player[playerid][Name]);
3265 SendClientMessageToAll(-1, iString);
3266 RandomDeathMessages = true;
3267 }
3268 case true:
3269 {
3270 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"Random Death Messages{FFFFFF}.", Player[playerid][Name]);
3271 SendClientMessageToAll(-1, iString);
3272 RandomDeathMessages = false;
3273 }
3274 }
3275 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'RDeathMsg'", (RandomDeathMessages == false ? 0 : 1));
3276 db_free_result(db_query(sqliteconnection, iString));
3277 ShowConfigDialog(playerid);
3278 }
3279 case 25:
3280 {
3281 new iString[144];
3282 switch(SightseeingInClassSelection)
3283 {
3284 case false:
3285 {
3286 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"Sightseeing In Class Selection{FFFFFF}.", Player[playerid][Name]);
3287 SendClientMessageToAll(-1, iString);
3288 SightseeingInClassSelection = true;
3289 }
3290 case true:
3291 {
3292 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"Sightseeing In Class Selection{FFFFFF}.", Player[playerid][Name]);
3293 SendClientMessageToAll(-1, iString);
3294 SightseeingInClassSelection = false;
3295 }
3296 }
3297 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'SightseeingInCS'", (SightseeingInClassSelection == false ? 0 : 1));
3298 db_free_result(db_query(sqliteconnection, iString));
3299 ShowConfigDialog(playerid);
3300 }
3301 case 26:
3302 {
3303 new iString[144];
3304 switch(VehicleHealthTextdraw)
3305 {
3306 case false:
3307 {
3308 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"Vehicle Health Information{FFFFFF}.", Player[playerid][Name]);
3309 SendClientMessageToAll(-1, iString);
3310 VehicleHealthTextdraw = true;
3311
3312 foreach(new i : Player)
3313 {
3314 if(IsPlayerInAnyVehicle(i))
3315 {
3316 PlayerTextDrawSetString(i,VInfo[i],"_");
3317 PlayerTextDrawShow(i,VInfo[i]);
3318 }
3319 }
3320 }
3321 case true:
3322 {
3323 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"Vehicle Health Information{FFFFFF}.", Player[playerid][Name]);
3324 SendClientMessageToAll(-1, iString);
3325 VehicleHealthTextdraw = false;
3326
3327 foreach(new i : Player)
3328 {
3329 if(IsPlayerInAnyVehicle(i))
3330 PlayerTextDrawHide(i,VInfo[i]);
3331 }
3332 }
3333 }
3334 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'VehicleHealthTD'", (VehicleHealthTextdraw == false ? 0 : 1));
3335 db_free_result(db_query(sqliteconnection, iString));
3336 ShowConfigDialog(playerid);
3337 }
3338 case 27:
3339 {
3340 new iString[144];
3341 switch(SyncAbuse)
3342 {
3343 case false:
3344 {
3345 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"Sync Abuse{FFFFFF}.", Player[playerid][Name]);
3346 SendClientMessageToAll(-1, iString);
3347 SyncAbuse = true;
3348 }
3349 case true:
3350 {
3351 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"Sync Abuse{FFFFFF}.", Player[playerid][Name]);
3352 SendClientMessageToAll(-1, iString);
3353 SyncAbuse = false;
3354 }
3355 }
3356 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'SyncAbuse'", (SyncAbuse == false ? 0 : 1));
3357 db_free_result(db_query(sqliteconnection, iString));
3358 ShowConfigDialog(playerid);
3359 }
3360 case 28:
3361 {
3362 new iString[144];
3363 switch(ScreenFlashing)
3364 {
3365 case false:
3366 {
3367 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"Screen Flashing{FFFFFF}.", Player[playerid][Name]);
3368 SendClientMessageToAll(-1, iString);
3369 ScreenFlashing = true;
3370 }
3371 case true:
3372 {
3373 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"Screen Flashing{FFFFFF}.", Player[playerid][Name]);
3374 SendClientMessageToAll(-1, iString);
3375 ScreenFlashing = false;
3376 }
3377 }
3378 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'ScreenFlash'", (ScreenFlashing == false ? 0 : 1));
3379 db_free_result(db_query(sqliteconnection, iString));
3380 ShowConfigDialog(playerid);
3381 }
3382 case 29:
3383 {
3384 new iString[144];
3385 switch(DefendersWithVehicles)
3386 {
3387 case false:
3388 {
3389 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}allowed "COL_PRIM"defenders to use vehicles{FFFFFF}.", Player[playerid][Name]);
3390 SendClientMessageToAll(-1, iString);
3391 DefendersWithVehicles = true;
3392 }
3393 case true:
3394 {
3395 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disallowed "COL_PRIM"defenders to use vehicles{FFFFFF}.", Player[playerid][Name]);
3396 SendClientMessageToAll(-1, iString);
3397 DefendersWithVehicles = false;
3398 }
3399 }
3400 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'DefVehicles'", (DefendersWithVehicles == false ? 0 : 1));
3401 db_free_result(db_query(sqliteconnection, iString));
3402 ShowConfigDialog(playerid);
3403 }
3404 }
3405 }
3406 return 1;
3407 }
3408
3409
3410 if(dialogid == DIALOG_CONFIG_SET_GA) {
3411 if(!response) return ShowConfigDialog(playerid);
3412 switch(listitem)
3413 {
3414 case 0: { ShowPlayerDialog(playerid, DIALOG_CONFIG_SET_GA_ALPHA, DIALOG_STYLE_INPUT, ""COL_PRIM"ALPHA PASSWORD", ""COL_PRIM"Set the password or leave empty to clear:", "OK", "Cancel"); }
3415 case 1: { ShowPlayerDialog(playerid, DIALOG_CONFIG_SET_GA_BETA, DIALOG_STYLE_INPUT, ""COL_PRIM"BETA PASSWORD", ""COL_PRIM"Set the password or leave empty to clear:", "OK", "Cancel"); }
3416 case 2: { ShowPlayerDialog(playerid, DIALOG_CONFIG_SET_GA_REF, DIALOG_STYLE_INPUT, ""COL_PRIM"REFEREE PASSWORD", ""COL_PRIM"Set the password or leave empty to clear:", "OK", "Cancel"); }
3417 case 3: { ShowPlayerDialog(playerid, DIALOG_CONFIG_SET_GA_ASUB, DIALOG_STYLE_INPUT, ""COL_PRIM"ALPHA SUB PASSWORD", ""COL_PRIM"Set the password or leave empty to clear:", "OK", "Cancel"); }
3418 case 4: { ShowPlayerDialog(playerid, DIALOG_CONFIG_SET_GA_BSUB, DIALOG_STYLE_INPUT, ""COL_PRIM"BETA SUB PASSWORD", ""COL_PRIM"Set the password or leave empty to clear:", "OK", "Cancel"); }
3419 }
3420 return 1;
3421 }
3422
3423 if(dialogid == DIALOG_CONFIG_SET_GA_ALPHA)
3424 {
3425 if(!response) return ShowConfigDialog(playerid);
3426 if(strlen(inputtext) > MAX_GROUP_ACCESS_PASSWORD_LENGTH)
3427 {
3428 SendErrorMessage(playerid, "The password you entered is quite long. Try again with a shorter one!", MSGBOX_TYPE_BOTTOM);
3429 return ShowConfigDialog(playerid);
3430 }
3431 format(GroupAccessPassword[0], MAX_GROUP_ACCESS_PASSWORD_LENGTH, "%s", inputtext);
3432 new str[128];
3433 format(str, sizeof(str), "%s "COL_PRIM"has changed the alpha group access", Player[playerid][Name]);
3434 SendClientMessageToAll(-1, str);
3435 return ShowConfigDialog(playerid);
3436 }
3437
3438 if(dialogid == DIALOG_CONFIG_SET_GA_BETA)
3439 {
3440 if(!response) return ShowConfigDialog(playerid);
3441 if(strlen(inputtext) > MAX_GROUP_ACCESS_PASSWORD_LENGTH)
3442 {
3443 SendErrorMessage(playerid, "The password you entered is quite long. Try again with a shorter one!", MSGBOX_TYPE_BOTTOM);
3444 return ShowConfigDialog(playerid);
3445 }
3446 format(GroupAccessPassword[1], MAX_GROUP_ACCESS_PASSWORD_LENGTH, "%s", inputtext);
3447 new str[128];
3448 format(str, sizeof(str), "%s "COL_PRIM"has changed the beta group access", Player[playerid][Name]);
3449 SendClientMessageToAll(-1, str);
3450 return ShowConfigDialog(playerid);
3451 }
3452
3453 if(dialogid == DIALOG_CONFIG_SET_GA_REF && response)
3454 {
3455 if(!response) return ShowConfigDialog(playerid);
3456 if(strlen(inputtext) > MAX_GROUP_ACCESS_PASSWORD_LENGTH)
3457 {
3458 SendErrorMessage(playerid, "The password you entered is quite long. Try again with a shorter one!", MSGBOX_TYPE_BOTTOM);
3459 return ShowConfigDialog(playerid);
3460 }
3461 format(GroupAccessPassword[2], MAX_GROUP_ACCESS_PASSWORD_LENGTH, "%s", inputtext);
3462 new str[128];
3463 format(str, sizeof(str), "%s "COL_PRIM"has changed the referee group access", Player[playerid][Name]);
3464 SendClientMessageToAll(-1, str);
3465 return ShowConfigDialog(playerid);
3466 }
3467
3468 if(dialogid == DIALOG_CONFIG_SET_GA_ASUB)
3469 {
3470 if(!response) return ShowConfigDialog(playerid);
3471 if(strlen(inputtext) > MAX_GROUP_ACCESS_PASSWORD_LENGTH)
3472 {
3473 SendErrorMessage(playerid, "The password you entered is quite long. Try again with a shorter one!", MSGBOX_TYPE_BOTTOM);
3474 return ShowConfigDialog(playerid);
3475 }
3476 format(GroupAccessPassword[3], MAX_GROUP_ACCESS_PASSWORD_LENGTH, "%s", inputtext);
3477 new str[128];
3478 format(str, sizeof(str), "%s "COL_PRIM"has changed the alpha sub group access", Player[playerid][Name]);
3479 SendClientMessageToAll(-1, str);
3480 return ShowConfigDialog(playerid);
3481 }
3482
3483 if(dialogid == DIALOG_CONFIG_SET_GA_BSUB)
3484 {
3485 if(!response) return ShowConfigDialog(playerid);
3486 if(strlen(inputtext) > MAX_GROUP_ACCESS_PASSWORD_LENGTH)
3487 {
3488 SendErrorMessage(playerid, "The password you entered is quite long. Try again with a shorter one!", MSGBOX_TYPE_BOTTOM);
3489 return ShowConfigDialog(playerid);
3490 }
3491 format(GroupAccessPassword[4], MAX_GROUP_ACCESS_PASSWORD_LENGTH, "%s", inputtext);
3492 new str[128];
3493 format(str, sizeof(str), "%s "COL_PRIM"has changed the beta sub group access", Player[playerid][Name]);
3494 SendClientMessageToAll(-1, str);
3495 return ShowConfigDialog(playerid);
3496 }
3497
3498 if(dialogid == DIALOG_GROUPACCESS)
3499 {
3500 if(!response)
3501 {
3502 if(!Player[playerid][Spawned])
3503 {
3504 ShowIntroTextDraws(playerid);
3505 ShowPlayerClassSelection(playerid);
3506 }
3507 return 1;
3508 }
3509 new groupID = Player[playerid][RequestedClass];
3510
3511 if(strcmp(inputtext,GroupAccessPassword[groupID])!=0 || strlen(inputtext) == 0)
3512 {
3513 return ShowPlayerDialog(playerid, DIALOG_GROUPACCESS, DIALOG_STYLE_INPUT, "Authorization required", "Wrong password.\n\nPlease enter the group password:", "Submit", "Cancel");
3514 }
3515 if(Player[playerid][Spawned])
3516 {
3517 switch(Player[playerid][RequestedClass])
3518 {
3519 case 0:
3520 {
3521 SetPlayerColor(playerid, ATTACKER_NOT_PLAYING);
3522 Player[playerid][Team] = ATTACKER;
3523 }
3524 case 1:
3525 {
3526 SetPlayerColor(playerid, DEFENDER_NOT_PLAYING);
3527 Player[playerid][Team] = DEFENDER;
3528 }
3529 case 2:
3530 {
3531 SetPlayerColor(playerid, REFEREE_COLOR);
3532 Player[playerid][Team] = REFEREE;
3533 }
3534 case 3:
3535 {
3536 SetPlayerColor(playerid, ATTACKER_SUB_COLOR);
3537 Player[playerid][Team] = ATTACKER_SUB;
3538 }
3539
3540 case 4:
3541 {
3542 SetPlayerColor(playerid, DEFENDER_SUB_COLOR);
3543 Player[playerid][Team] = DEFENDER_SUB;
3544 }
3545 }
3546 SwitchTeamFix(playerid);
3547 }
3548 else
3549 {
3550 RequestedGroupPass[playerid][groupID] = "";
3551 SpawnConnectedPlayer(playerid, groupID + 1);
3552 }
3553 return 1;
3554 }
3555
3556 if(dialogid == DIALOG_CONFIG_SET_TEAM_SKIN) {
3557 if(response)
3558 {
3559 switch(listitem)
3560 {
3561 case 0: { CallLocalFunction("OnPlayerCommandText", "ds", playerid, "/teamskin 0"); }
3562 case 1: { CallLocalFunction("OnPlayerCommandText", "ds", playerid, "/teamskin 1"); }
3563 case 2: { CallLocalFunction("OnPlayerCommandText", "ds", playerid, "/teamskin 2"); }
3564 }
3565 }
3566 else
3567 {
3568 ShowConfigDialog(playerid);
3569 }
3570 return 1;
3571 }
3572
3573 if(dialogid == DIALOG_CONFIG_SET_AAD) {
3574 if(response)
3575 {
3576 switch(listitem) {
3577 case 0: { // set round health
3578 ShowPlayerDialog(playerid, DIALOG_CONFIG_SET_ROUND_HEALTH, DIALOG_STYLE_INPUT, ""COL_PRIM"Round Health", ""COL_PRIM"Set round health:", "OK", "");
3579 }
3580 case 1: { // set round armour
3581 ShowPlayerDialog(playerid, DIALOG_CONFIG_SET_ROUND_ARMOUR, DIALOG_STYLE_INPUT, ""COL_PRIM"Round Armour", ""COL_PRIM"Set round armour:", "OK", "");
3582 }
3583 case 2: { // Round time
3584 ShowPlayerDialog(playerid, DIALOG_CONFIG_SET_ROUND_TIME, DIALOG_STYLE_INPUT, ""COL_PRIM"Round Time", ""COL_PRIM"Set round time:", "OK", "Cancel");
3585 }
3586 case 3: { // CP time
3587 ShowPlayerDialog(playerid, DIALOG_CONFIG_SET_CP_TIME, DIALOG_STYLE_INPUT, ""COL_PRIM"CP Time", ""COL_PRIM"Set CP time:", "OK", "Cancel");
3588 }
3589 }
3590 } else {
3591 ShowConfigDialog(playerid);
3592 }
3593 return 1;
3594 }
3595
3596 if(dialogid == DIALOG_CONFIG_SET_ROUND_HEALTH) {
3597 new hp = strval(inputtext);
3598 if(hp <= 0 || hp > 100) {
3599 SendErrorMessage(playerid,"Health value can be between 0 and 100 maximum.");
3600 ShowPlayerDialog(playerid, DIALOG_CONFIG_SET_ROUND_HEALTH, DIALOG_STYLE_INPUT, ""COL_PRIM"Round Health", ""COL_PRIM"Set round health:", "OK", "");
3601 return 1;
3602 }
3603
3604 RoundHP = hp;
3605
3606 new str[128];
3607 format(str, sizeof(str), "%s "COL_PRIM"has changed the round health to: {FFFFFF}%d", Player[playerid][Name], RoundHP);
3608 SendClientMessageToAll(-1, str);
3609
3610 format(str, sizeof(str), "UPDATE `Configs` SET `Value` = '%d,%d' WHERE `Option` = 'RoundHPAR'", RoundHP, RoundAR);
3611 db_free_result(db_query(sqliteconnection, str));
3612
3613 ShowConfigDialog(playerid);
3614 return 1;
3615
3616 }
3617
3618 if(dialogid == DIALOG_CONFIG_SET_ROUND_ARMOUR) {
3619 new hp = strval(inputtext);
3620 if(hp <= 0 || hp > 100) {
3621 SendErrorMessage(playerid,"Armour value can be between 0 and 100 maximum.");
3622 ShowPlayerDialog(playerid, DIALOG_CONFIG_SET_ROUND_ARMOUR, DIALOG_STYLE_INPUT, ""COL_PRIM"Round Armour", ""COL_PRIM"Set round armour:", "OK", "");
3623 return 1;
3624 }
3625
3626 RoundAR = hp;
3627
3628 new str[128];
3629 format(str, sizeof(str), "%s "COL_PRIM"has changed the round armour to: {FFFFFF}%d", Player[playerid][Name], RoundAR);
3630 SendClientMessageToAll(-1, str);
3631
3632 format(str, sizeof(str), "UPDATE `Configs` SET `Value` = '%d,%d' WHERE `Option` = 'RoundHPAR'", RoundHP, RoundAR);
3633 db_free_result(db_query(sqliteconnection, str));
3634
3635 ShowConfigDialog(playerid);
3636 return 1;
3637 }
3638
3639 if(dialogid == DIALOG_CONFIG_SET_ROUND_TIME) {
3640 if(response) {
3641 CallLocalFunction("OnPlayerCommandText", "ds", playerid, sprintf("/roundtime %s", inputtext));
3642 ShowConfigDialog(playerid);
3643 } else {
3644 ShowConfigDialog(playerid);
3645 }
3646 return 1;
3647 }
3648
3649 if(dialogid == DIALOG_CONFIG_SET_CP_TIME) {
3650 if(response) {
3651 CallLocalFunction("OnPlayerCommandText", "ds", playerid, sprintf("/cptime %s", inputtext));
3652 ShowConfigDialog(playerid);
3653 } else {
3654 ShowConfigDialog(playerid);
3655 }
3656 return 1;
3657 }
3658
3659 if(dialogid == DIALOG_CONFIG_SET_MAX_PING) {
3660 if(response) {
3661 CallLocalFunction("OnPlayerCommandText", "ds", playerid, sprintf("/maxping %s", inputtext));
3662 ShowConfigDialog(playerid);
3663 } else {
3664 ShowConfigDialog(playerid);
3665 }
3666 return 1;
3667 }
3668
3669 if(dialogid == DIALOG_CONFIG_SET_MAX_PACKET) {
3670 if(response) {
3671 CallLocalFunction("OnPlayerCommandText", "ds", playerid, sprintf("/maxpacket %s", inputtext));
3672 ShowConfigDialog(playerid);
3673 } else {
3674 ShowConfigDialog(playerid);
3675 }
3676 return 1;
3677 }
3678
3679 if(dialogid == DIALOG_CONFIG_SET_MIN_FPS)
3680 {
3681 if(response)
3682 {
3683 CallLocalFunction("OnPlayerCommandText", "ds", playerid, sprintf("/minfps %s", inputtext));
3684 ShowConfigDialog(playerid);
3685 }
3686 else
3687 {
3688 ShowConfigDialog(playerid);
3689 }
3690 return 1;
3691 }
3692
3693 if(dialogid == DIALOG_SWITCH_TEAM)
3694 {
3695 if(response)
3696 {
3697 new groupID = listitem;
3698 if(strlen(GroupAccessPassword[groupID]) > 0 && (strcmp(RequestedGroupPass[playerid][groupID], GroupAccessPassword[groupID]) != 0 || isnull(RequestedGroupPass[playerid][groupID])))
3699 {
3700 Player[playerid][RequestedClass] = listitem;
3701 ShowPlayerDialog(playerid, DIALOG_GROUPACCESS, DIALOG_STYLE_INPUT, "Authorization required", "Please enter the group password:", "Submit", "Cancel");
3702 return 1;
3703 }
3704 switch(listitem)
3705 {
3706 case 0:
3707 {
3708 SetPlayerColor(playerid, ATTACKER_NOT_PLAYING);
3709 Player[playerid][Team] = ATTACKER;
3710 }
3711 case 1:
3712 {
3713 SetPlayerColor(playerid, DEFENDER_NOT_PLAYING);
3714 Player[playerid][Team] = DEFENDER;
3715 }
3716 case 2:
3717 {
3718 SetPlayerColor(playerid, REFEREE_COLOR);
3719 Player[playerid][Team] = REFEREE;
3720 }
3721 case 3:
3722 {
3723 SetPlayerColor(playerid, ATTACKER_SUB_COLOR);
3724 Player[playerid][Team] = ATTACKER_SUB;
3725 }
3726
3727 case 4:
3728 {
3729 SetPlayerColor(playerid, DEFENDER_SUB_COLOR);
3730 Player[playerid][Team] = DEFENDER_SUB;
3731 }
3732 }
3733 SwitchTeamFix(playerid);
3734 }
3735 return 1;
3736 }
3737 if(dialogid == DIALOG_TEAM_SELECTION)
3738 {
3739 if(response)
3740 {
3741 if(listitem > 0) // Not auto-assign
3742 {
3743 new groupID = listitem - 1;
3744 if(strlen(GroupAccessPassword[groupID]) > 0 && (strcmp(RequestedGroupPass[playerid][groupID], GroupAccessPassword[groupID]) != 0 || isnull(RequestedGroupPass[playerid][groupID])))
3745 {
3746 Player[playerid][RequestedClass] = listitem;
3747 ShowPlayerDialog(playerid, DIALOG_GROUPACCESS, DIALOG_STYLE_INPUT, "Authorization required", "Please enter the group password:", "Submit", "Cancel");
3748 return 1;
3749 }
3750 }
3751 SpawnConnectedPlayer(playerid, listitem);
3752 }
3753 else
3754 {
3755 ShowIntroTextDraws(playerid);
3756 ShowPlayerClassSelection(playerid);
3757 }
3758 return 1;
3759 }
3760 if(dialogid == DIALOG_STYLE)
3761 {
3762 if(!response)return 1;
3763
3764 HideRoundStats(playerid);
3765
3766 Player[playerid][RoundTDStyle] = listitem;
3767 db_free_result(db_query(sqliteconnection, sprintf("UPDATE `Players` SET `RoundTDStyle`=%d WHERE `Name`='%q'", Player[playerid][RoundTDStyle], Player[playerid][Name])));
3768
3769 switch(Player[playerid][RoundTDStyle])
3770 {
3771 case 0:SendClientMessage(playerid,-1,"You have switched round textdraws style to: Modern");
3772 case 1:SendClientMessage(playerid,-1,"You have switched round textdraws style to: Bulletproof");
3773 case 2:SendClientMessage(playerid,-1,"You have switched round textdraws style to: Simple");
3774 }
3775
3776 if(Current != -1)
3777 ShowRoundStats(playerid);
3778 return 1;
3779 }
3780
3781 #if defined _league_included
3782 // League login dialog lock - so that players can't escape the league clan login check
3783 if(Player[playerid][MustLeaguePass] == true)
3784 {
3785 ShowPlayerLeagueLoginDialog(playerid);
3786 return 1;
3787 }
3788 #endif
3789 return 0;
3790}
3791
3792public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
3793{
3794 return 1;
3795}
3796
3797public OnPlayerClickTextDraw(playerid, Text:clickedid)
3798{
3799 if(clickedid == Text:INVALID_TEXT_DRAW)
3800 {
3801 if(PlayerOnInterface{playerid} == true)
3802 {
3803 DisableMatchInterface(playerid);
3804 return 1;
3805 }
3806 return 1;
3807 }
3808 if(clickedid == LeagueToggleTD)
3809 {
3810 if(LeagueAllowed)
3811 {
3812 if(!WarMode)
3813 SendUsageMessage(playerid, "League is enabled on this server. All you need to do now is start a match (quicker: /war)!");
3814 else
3815 SendUsageMessage(playerid, "League is enabled and so is match mode. Start a round with /start or /random!");
3816 }
3817 else
3818 SendErrorMessage(playerid, "League is disabled. You can enable it from server config dialog (/config).");
3819 return 1;
3820 }
3821
3822 if(clickedid == WarModeText) {
3823 if(Current != -1) return SendErrorMessage(playerid,"Can't use this option while round is on.");
3824
3825 if(WarMode == false) {
3826
3827 MatchRoundsStarted = 0;
3828 for( new i = 0; i < 101; i++ )
3829 {
3830 MatchRoundsRecord[ i ][ round__ID ] = -1;
3831 MatchRoundsRecord[ i ][ round__type ] = -1;
3832 MatchRoundsRecord[ i ][ round__completed ] = false;
3833 }
3834
3835 foreach(new i : Player) {
3836 Player[i][TotalKills] = 0;
3837 Player[i][TotalDeaths] = 0;
3838 Player[i][TotalDamage] = 0;
3839 Player[i][RoundPlayed] = 0;
3840 Player[i][TotalBulletsFired] = 0;
3841 Player[i][TotalshotsHit] = 0;
3842 }
3843 ShowPlayerDialog(playerid, DIALOG_ATT_NAME, DIALOG_STYLE_INPUT,""COL_PRIM"ATTACKER Team Name",""COL_PRIM"Enter {FFFFFF}ATTACKER "COL_PRIM"Team Name Below:","Next","Close");
3844 } else {
3845 ShowPlayerDialog(playerid, DIALOG_WAR_RESET, DIALOG_STYLE_MSGBOX,""COL_PRIM"War Dialog",""COL_PRIM"Are you sure you want to turn War Mode off?","Yes","No");
3846 }
3847
3848 return 1;
3849 }
3850
3851 if(clickedid == LockServerTD) {
3852 if(ServerLocked == false) {
3853 ShowPlayerDialog(playerid, DIALOG_SERVER_PASS, DIALOG_STYLE_INPUT,""COL_PRIM"Server Password",""COL_PRIM"Enter server password below:", "Ok","Close");
3854 } else {
3855 SendRconCommand("password 0");
3856
3857 new iString[64];
3858 format(iString, sizeof iString, "%sServer: ~r~Unlocked", MAIN_TEXT_COLOUR);
3859 TextDrawSetString(LockServerTD, iString);
3860
3861 ServerLocked = false;
3862 PermLocked = false;
3863
3864 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has unlocked the server.", Player[playerid][Name]);
3865 SendClientMessageToAll(-1, iString);
3866 }
3867 return 1;
3868 }
3869
3870 if(clickedid == CloseText)
3871 {
3872 DisableMatchInterface(playerid);
3873 return 1;
3874 }
3875 return 0;
3876}
3877
3878//------------------------------------------------------------------------------
3879// Commands
3880//------------------------------------------------------------------------------
3881
3882/*
3883 List of enum:
3884 // The majority of these are even - odd numbers return "1" not "0".
3885 COMMAND_ZERO_RET = 0 , // The command returned 0.
3886 COMMAND_OK = 1 , // Called corectly.
3887 COMMAND_UNDEFINED = 2 , // Command doesn't exist.
3888 COMMAND_DENIED = 3 , // Can't use the command.
3889 COMMAND_HIDDEN = 4 , // Can't use the command don't let them know it exists.
3890 COMMAND_NO_PLAYER = 6 , // Used by a player who shouldn't exist.
3891 COMMAND_DISABLED = 7 , // All commands are disabled for this player.
3892 COMMAND_BAD_PREFIX = 8 , // Used "/" instead of "#", or something similar.
3893 COMMAND_INVALID_INPUT = 10, // Didn't type "/something".
3894*/
3895
3896public e_COMMAND_ERRORS:OnPlayerCommandReceived(playerid, cmdtext[], e_COMMAND_ERRORS:success)
3897{
3898 switch(success)
3899 {
3900 case COMMAND_UNDEFINED:
3901 {
3902 //MessageBox(playerid, MSGBOX_TYPE_MIDDLE, "~y~~h~Unknown Command", sprintf("~r~~h~%s ~w~is an unknown command. Check /cmds, /acmds or /cmdhelp for more info!", cmdtext), 3000);
3903 SendErrorMessage(playerid, sprintf("Unknown command: %s. Check /cmds, /acmds or /cmdhelp for more info!", cmdtext));
3904 return COMMAND_DENIED;
3905 }
3906 case COMMAND_DENIED:
3907 {
3908 SendErrorMessage(playerid, "Your level is not high enough to use this command!");
3909 return COMMAND_DENIED;
3910 }
3911 }
3912 // Skip spam check on shortcut commands
3913 if(strfind(cmdtext, "/rb", true) != -1 || strfind(cmdtext, "/ra", true) != -1 || strfind(cmdtext, "/cmdhelp", true) != -1)
3914 goto skipSpamCheck;
3915 if(AntiSpam == true && GetTickCount() < Player[playerid][lastChat])
3916 {
3917 SendErrorMessage(playerid,"Please wait.");
3918 return COMMAND_DENIED;
3919 }
3920 Player[playerid][lastChat] = GetTickCount() + 1000;
3921 skipSpamCheck:
3922
3923 // A round is starting...
3924 if(AllowStartBase == false)
3925 return COMMAND_DENIED;
3926
3927 // AFK players are not supposed to use any command
3928 if(Player[playerid][IsAFK] == true)
3929 {
3930 if(strfind(cmdtext, "/back", true) == 0)
3931 return COMMAND_OK;
3932 else
3933 {
3934 SendErrorMessage(playerid,"Can't use any command during AFK mode. Type /back");
3935 return COMMAND_DENIED;
3936 }
3937 }
3938 // Normal players should not use any command while in duel
3939 if(Player[playerid][InDuel] == true)
3940 {
3941 if(strcmp(cmdtext, "/rq", true) == 0)
3942 return COMMAND_OK;
3943 else if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid))
3944 {
3945 SendErrorMessage(playerid, "Can't use any command in duel. Type /rq to quit duel.");
3946 return COMMAND_DENIED;
3947 }
3948 }
3949 // Players need to spawn first in order to use commands
3950 if(Player[playerid][Team] == NON)
3951 {
3952 SendErrorMessage(playerid,"You need to spawn to be able to use commands.");
3953 return COMMAND_DENIED;
3954 }
3955 return COMMAND_OK;
3956}
3957
3958public e_COMMAND_ERRORS:OnPlayerCommandPerformed(playerid, cmdtext[], e_COMMAND_ERRORS:success)
3959{
3960 return COMMAND_OK;
3961}
3962
3963YCMD:cmdhelp(playerid, params[], help)
3964{
3965 if(help)
3966 {
3967 SendCommandHelpMessage(playerid, "display help about commands");
3968 return 1;
3969 }
3970 if(isnull(params)) return SendUsageMessage(playerid, "/cmdhelp [Command name]");
3971 Command_ReProcess(playerid, params, true);
3972 return 1;
3973}
3974
3975YCMD:checkversion(playerid, params[])
3976{
3977 if(!VersionCheckerStatus)
3978 return SendErrorMessage(playerid, "Connection error. Try again later maybe!");
3979
3980 ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "Version Checker",
3981 sprintf(""COL_PRIM"Server version: {FFFFFF}%.2f "COL_PRIM"| Newest version: {FFFFFF}%.2f", GM_VERSION, LatestVersion), "Okay", "");
3982 return 1;
3983}
3984
3985forward ShowPlayerChangelog(index, response_code, data[]);
3986public ShowPlayerChangelog(index, response_code, data[])
3987{
3988 if(response_code == 200)
3989 {
3990 SendClientMessage(index, -1, sprintf(""COL_PRIM"See more at {FFFFFF}%s", GM_WEBSITE));
3991 ShowPlayerDialog(index, 1300, DIALOG_STYLE_MSGBOX, "Gamemode changelog", data, "Close", "");
3992 }
3993 else
3994 {
3995 SendErrorMessage(index, sprintf("Connection error. Response code: %d", response_code));
3996 }
3997 return 1;
3998}
3999
4000YCMD:changelog(playerid, params[], help)
4001{
4002 ShowPlayerDialog(playerid,53123,DIALOG_STYLE_MSGBOX,"Changelog","\n Discord Commands for admins\n Cbug Dialog and bug fixes \n Groups bugs fixed","Okay","");
4003
4004 return 1;
4005}
4006
4007YCMD:credits(playerid,params[])
4008{
4009 ShowPlayerDialog(playerid,53123,DIALOG_STYLE_MSGBOX,"Credits","\n SeanJacinto - Scripting \n SAMPCAC - Gamemode \n Shaun - Debugging","Okay","");
4010 return 1;
4011}
4012
4013
4014#if !defined _league_included
4015YCMD:changename(playerid,params[], help)
4016{
4017 if(help)
4018 {
4019 SendCommandHelpMessage(playerid, "change your user account name.");
4020 return 1;
4021 }
4022 if(Player[playerid][Logged] == false)
4023 return SendErrorMessage(playerid,"You must be logged in.");
4024 if(Player[playerid][Mute])
4025 return SendErrorMessage(playerid, "Cannot use this command when you're muted.");
4026 if(isnull(params))
4027 return SendUsageMessage(playerid,"/changename [New Name]");
4028 if(strlen(params) <= 1)
4029 return SendErrorMessage(playerid,"Name cannot be that short!");
4030
4031 switch(SetPlayerName(playerid,params))
4032 {
4033 case 1:
4034 {
4035 //success
4036 new iString[128],
4037 DBResult: result
4038 ;
4039
4040 format( iString, sizeof(iString), "SELECT * FROM `Players` WHERE `Name` = '%s'", DB_Escape(params) );
4041 result = db_query(sqliteconnection, iString);
4042
4043 if(db_num_rows(result) > 0)
4044 {
4045 db_free_result(result);
4046 //name in Use in DB.
4047 SetPlayerName( playerid, Player[playerid][Name] );
4048 return SendErrorMessage(playerid,"Name already registered!");
4049 }
4050 else
4051 {
4052 db_free_result(result);
4053 //name changed successfully!!
4054
4055 format(iString, sizeof(iString),"{FFFFFF}%s "COL_PRIM"has changed name to {FFFFFF}%s",Player[playerid][Name],params);
4056 SendClientMessageToAll(-1,iString);
4057
4058 format(iString, sizeof(iString), "UPDATE `Players` SET `Name` = '%s' WHERE `Name` = '%s'", DB_Escape(params), DB_Escape(Player[playerid][Name]) );
4059 db_free_result(db_query(sqliteconnection, iString));
4060
4061 format( Player[playerid][Name], MAX_PLAYER_NAME, "%s", params );
4062
4063 new NewName[MAX_PLAYER_NAME];
4064 NewName = RemoveClanTagFromName(playerid);
4065
4066 if(strlen(NewName) != 0)
4067 Player[playerid][NameWithoutTag] = NewName;
4068 else
4069 Player[playerid][NameWithoutTag] = Player[playerid][Name];
4070 return 1;
4071 }
4072 }
4073 case 0: return SendErrorMessage(playerid,"You're already using that name.");
4074 case -1: return SendErrorMessage(playerid,"Either Name is too long, already in use or has invalid characters.");
4075 }
4076 return 1;
4077}
4078#endif
4079
4080YCMD:help(playerid, params[], help)
4081{
4082 if(help)
4083 {
4084 SendCommandHelpMessage(playerid, "display some guidelines");
4085 return 1;
4086 }
4087 new str[440];
4088 strcat(str, ""COL_PRIM"Project on GitHub: {FFFFFF}https://github.com/beijind/SAMPAttackDefend/");
4089 strcat(str, "\n\n\n{FFFFFF}To see server settings: {888888}/settings");
4090 strcat(str, "\n{FFFFFF}For admin commands: {888888}/acmds");
4091 strcat(str, "\n{FFFFFF}For public commands: {888888}/cmds");
4092 strcat(str, "\n{FFFFFF}If you need help with a specific command: {888888}/cmdhelp");
4093 strcat(str, "\n{FFFFFF}Match help: {888888}/matchtips");
4094 strcat(str, "\n{FFFFFF}To stay updated always: {888888}/updates and /checkversion");
4095 strcat(str, "\n{FFFFFF}League help: {888888}/leaguecmds");
4096 ShowPlayerDialog(playerid,1300,DIALOG_STYLE_MSGBOX,sprintf("%s gamemode "COL_PRIM"help+tips", GM_NAME),str,"OK","");
4097 return 1;
4098}
4099
4100YCMD:matchtips(playerid, params[], help)
4101{
4102 if(help)
4103 {
4104 SendCommandHelpMessage(playerid, "display some guidelines about match mode");
4105 return 1;
4106 }
4107 new str[1561];
4108 strcat(str, "\n"COL_PRIM"# {FFFFFF}To enable Match-Mode, press 'Y' in lobby or 'H' (shortcut to /match) in round and most textdraws will be clickable.");
4109 strcat(str, "\nOr use /war if you're in a hurry! Moreover, you can click on match textdraws to set team names, score and etc.");
4110 strcat(str, "\n"COL_PRIM"# {FFFFFF}Useful match cmds: /teamname, /teamskin, /tr, /cr, /resetscores, /setscore, /roundtime, /cptime, /allvs, /rr");
4111 strcat(str, "\n"COL_PRIM"# {FFFFFF}To re-select your weapons in a round, type /gunmenu.");
4112 strcat(str, "\n"COL_PRIM"# {FFFFFF}Type /melee to get melee weapons menu while in a round.");
4113 strcat(str, "\n"COL_PRIM"# {FFFFFF}Want to differentiate your team-mates on radar? Use /playermarkers");
4114 strcat(str, "\n"COL_PRIM"# {FFFFFF}Use /weaponbinds to code your own weapon key binds.");
4115 strcat(str, "\n"COL_PRIM"# {FFFFFF}To change your fight style, you can use the /fightstyle command.");
4116 strcat(str, "\n"COL_PRIM"# {FFFFFF}You can remove a gun by holding it and typing /remgun.");
4117 strcat(str, "\n"COL_PRIM"# {FFFFFF}Round can be paused by pressing 'Y' (for admins only).");
4118 strcat(str, "\n"COL_PRIM"# {FFFFFF}You can request for backup from your team by pressing 'N' in round.");
4119 strcat(str, "\n"COL_PRIM"# {FFFFFF}You can ask for pausing the round by pressing 'Y' in round.");
4120 strcat(str, "\n"COL_PRIM"# {FFFFFF}To lead your team press 'H'.");
4121 strcat(str, "\n"COL_PRIM"# {FFFFFF}If you're lagging, you can request netcheck with /netcheckme.");
4122 strcat(str, "\n"COL_PRIM"# {FFFFFF}To diss whom you kill, use /deathdiss command.");
4123 strcat(str, "\n"COL_PRIM"# {FFFFFF}You can change your gunmenu style with /gunmenustyle.");
4124 strcat(str, "\n"COL_PRIM"# {FFFFFF}Type /shop to start shopping and make use of your league points.");
4125 strcat(str, "\n"COL_PRIM"# {FFFFFF}Type /sound to change the sound when you hit someone or get hit.");
4126 strcat(str, "\n"COL_PRIM"# {FFFFFF}Getting distracted by some textdraws? Try /hud");
4127 ShowPlayerDialog(playerid,1300,DIALOG_STYLE_MSGBOX,""COL_PRIM"Match help & tips",str,"OK","");
4128 return 1;
4129}
4130
4131YCMD:cmds(playerid, params[], help)
4132{
4133 if(help)
4134 {
4135 SendCommandHelpMessage(playerid, "display server commands");
4136 return 1;
4137 }
4138 new str[1500], cmdsInLine = 0;
4139 strcat(str,
4140 "Use ! for team chat\nPress N to request for backup in a round\nPress H to lead your team\nUse # for league clan chat\nUse @ for admin chat\nIf you need help with a command, use /cmdhelp\n\n");
4141 foreach(new i : Command())
4142 {
4143 if(GetCommandLevel(i) == 0)
4144 {
4145 if(cmdsInLine == 6)
4146 {
4147 cmdsInLine = 0;
4148 format(str, sizeof str, "%s\n/%s, ", str, Command_GetName(i));
4149 }
4150 else
4151 {
4152 format(str, sizeof str, "%s/%s, ", str, Command_GetName(i));
4153 }
4154 cmdsInLine ++;
4155 }
4156 }
4157 ShowPlayerDialog(playerid,1300,DIALOG_STYLE_MSGBOX,""COL_PRIM"Player Commands", str, "OK","");
4158 return 1;
4159}
4160
4161YCMD:acmds(playerid, params[], help)
4162{
4163 if(help)
4164 {
4165 SendCommandHelpMessage(playerid, "display admin commands");
4166 return 1;
4167 }
4168 new str[1500], cmdsInLine;
4169 strcat(str, "Use @ for admin chat\nIf you need help with a command, use /cmdhelp");
4170 new level = Player[playerid][Level];
4171 for(new i = 0; i < MAX_ADMIN_LEVELS; i ++)
4172 {
4173 if(level > i)
4174 {
4175 format(str, sizeof str, "%s\n\nLevel %d:\n", str, i + 1);
4176 cmdsInLine = 0;
4177 foreach(new j : Command())
4178 {
4179 if(GetCommandLevel(j) == i + 1)
4180 {
4181 if(cmdsInLine == 6)
4182 {
4183 cmdsInLine = 0;
4184 format(str, sizeof str, "%s\n/%s, ", str, Command_GetName(j));
4185 }
4186 else
4187 {
4188 format(str, sizeof str, "%s/%s, ", str, Command_GetName(j));
4189 }
4190 cmdsInLine ++;
4191 }
4192 }
4193 }
4194 }
4195 ShowPlayerDialog(playerid,1300,DIALOG_STYLE_MSGBOX,""COL_PRIM"Admin Commands", str, "OK","");
4196 return 1;
4197}
4198
4199YCMD:setcmdlevel(playerid, params[], help)
4200{
4201 if(help)
4202 {
4203 SendCommandHelpMessage(playerid, "set the level of a command");
4204 return 1;
4205 }
4206 if(isnull(params)) return SendUsageMessage(playerid,"/setcmdlevel [Command name without /] [New level]");
4207
4208 new cmd[MAX_COMMAND_NAME], level;
4209 if(sscanf(params, "sd", cmd, level)) return SendUsageMessage(playerid,"/setcmdlevel [Command name without /] [New level]");
4210 if(level >= MAX_ADMIN_LEVELS || level < 0) return SendErrorMessage(playerid,"Invalid level!");
4211 if(SetCommandLevel(cmd, level, true) != 1) return SendErrorMessage(playerid,"Invalid command!");
4212 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"has permitted command {FFFFFF}/%s "COL_PRIM"for only level {FFFFFF}%d"COL_PRIM" and higher.", Player[playerid][Name], cmd, level));
4213 return 1;
4214}
4215
4216YCMD:clearadmcmd(playerid, params[], help)
4217{
4218 if(help)
4219 {
4220 SendCommandHelpMessage(playerid, "clear the admin command log file that is in scriptfiles folder");
4221 return 1;
4222 }
4223 ClearAdminCommandLog();
4224 SendClientMessage(playerid, -1, "Admin command log has been successfully cleared!");
4225 return 1;
4226}
4227
4228YCMD:clearallaka(playerid, params[], help)
4229{
4230 if(help)
4231 {
4232 SendCommandHelpMessage(playerid, "clear all players aka logs from database");
4233 return 1;
4234 }
4235 db_free_result(db_query(sqliteconnection, "DELETE FROM `AKAs`"));
4236 SendClientMessage(playerid, -1, "AKA logs have been successfully cleared!");
4237 return 1;
4238}
4239
4240YCMD:acgetinfo(playerid, params[], help)
4241{
4242 new targetid = strval(params);
4243
4244 // Also checks if the player is connected.
4245 if(CAC_GetStatus(targetid))
4246 {
4247 new str[128];
4248 new version[50];
4249 new major, minor, patch;
4250 CAC_GetClientVersion(targetid, major, minor, patch);
4251 GetPlayerVersion(targetid, version, sizeof(version));
4252 new name[MAX_PLAYER_NAME];
4253 GetPlayerName(targetid, name, sizeof(name));
4254 format(str, sizeof(str), "Target ID: %s (%d), SA-MP version: %s", name, targetid, version);
4255 SendClientMessage(playerid, -1, str);
4256 format(str, sizeof(str), "CAC_GetStatus: %d", CAC_GetStatus(targetid));
4257 SendClientMessage(playerid, -1, str);
4258 format(str, sizeof(str), "CAC_GetClientVersion: v%d.%02d.%d", major, minor, patch);
4259 SendClientMessage(playerid, -1, str);
4260
4261 new hwid[CAC__MAX_HARDWARE_ID];
4262 CAC_GetHardwareID(targetid, hwid, sizeof(hwid));
4263 format(str, sizeof(str), "HardwareID: %s", hwid);
4264 SendClientMessage(playerid, -1, str);
4265 }
4266 else
4267 {
4268 SendErrorMessage(playerid, "This player is not running SAMPCAC.");
4269 return 1;
4270 }
4271 return 1;
4272}
4273
4274YCMD:style(playerid, params[], help)
4275{
4276 if(help)
4277 {
4278 SendCommandHelpMessage(playerid, "an option to switch the style of round textdraws on your screen");
4279 return 1;
4280 }
4281 ShowPlayerDialog(playerid, DIALOG_STYLE, DIALOG_STYLE_LIST, "Select round textdraws style", "Modern\nBulletproof\nSimple (Good For FPS)", "Select", "Back");
4282 return 1;
4283}
4284
4285YCMD:playermarkers(playerid, params[], help)
4286{
4287 if(help)
4288 {
4289 SendCommandHelpMessage(playerid, "an option to switch the color of the player markers on your radar");
4290 return 1;
4291 }
4292 Player[playerid][PlayerMarkers] = !Player[playerid][PlayerMarkers];
4293 foreach(new i : Player)
4294 {
4295 OnPlayerStreamIn(i, playerid);
4296 }
4297 switch(Player[playerid][PlayerMarkers])
4298 {
4299 case false:
4300 {
4301 SendClientMessage(playerid, -1, "Changed player markers setting: you will now see marker color based on team color.");
4302 }
4303 case true:
4304 {
4305 SendClientMessage(playerid, -1, "Changed player markers setting: each player has a unique marker color on radar now.");
4306 }
4307 }
4308 db_free_result(db_query(sqliteconnection, sprintf("UPDATE `Players` SET `PlayerMarkers` = '%d' WHERE `Name` = '%q'", (Player[playerid][PlayerMarkers] == true) ? (1) : (0), Player[playerid][Name])));
4309 return 1;
4310}
4311
4312YCMD:voteadd(playerid, params[], help)
4313{
4314 if(help)
4315 {
4316 SendCommandHelpMessage(playerid, "start a voting (add player to round)");
4317 return 1;
4318 }
4319 new pID;
4320 if(sscanf(params, "i", pID))
4321 return SendUsageMessage(playerid,"/voteadd [Player ID]");
4322
4323 PlayerVoteAdd(playerid, pID);
4324 return 1;
4325}
4326
4327YCMD:votereadd(playerid, params[], help)
4328{
4329 if(help)
4330 {
4331 SendCommandHelpMessage(playerid, "start a voting (re-add player to round)");
4332 return 1;
4333 }
4334 new pID;
4335 if(sscanf(params, "i", pID))
4336 return SendUsageMessage(playerid,"/votereadd [Player ID]");
4337
4338 PlayerVoteReadd(playerid, pID);
4339 return 1;
4340}
4341
4342YCMD:voterem(playerid, params[], help)
4343{
4344 if(help)
4345 {
4346 SendCommandHelpMessage(playerid, "start a voting (remove a player from round)");
4347 return 1;
4348 }
4349 new pID;
4350 if(sscanf(params, "i", pID))
4351 return SendUsageMessage(playerid,"/voterem [Player ID]");
4352
4353 PlayerVoteRem(playerid, pID);
4354 return 1;
4355}
4356
4357YCMD:votekick(playerid, params[], help)
4358{
4359 if(help)
4360 {
4361 SendCommandHelpMessage(playerid, "start a voting (kick a player from the server)");
4362 return 1;
4363 }
4364 new pID;
4365 if(sscanf(params, "i", pID))
4366 return SendUsageMessage(playerid,"/votekick [Player ID]");
4367
4368 PlayerVoteKick(playerid, pID);
4369 return 1;
4370}
4371
4372YCMD:votenetcheck(playerid, params[], help)
4373{
4374 if(help)
4375 {
4376 SendCommandHelpMessage(playerid, "start a voting (toggle netcheck on a player)");
4377 return 1;
4378 }
4379 new pID;
4380 if(sscanf(params, "i", pID))
4381 return SendUsageMessage(playerid,"/votenetcheck [Player ID]");
4382
4383 PlayerVoteNetCheck(playerid, pID);
4384 return 1;
4385}
4386
4387YCMD:votepause(playerid, params[], help)
4388{
4389 if(help)
4390 {
4391 SendCommandHelpMessage(playerid, "start a voting (pause round)");
4392 return 1;
4393 }
4394 PlayerVotePause(playerid);
4395 return 1;
4396}
4397
4398YCMD:voteunpause(playerid, params[], help)
4399{
4400 if(help)
4401 {
4402 SendCommandHelpMessage(playerid, "start a voting (pause round)");
4403 return 1;
4404 }
4405 PlayerVoteUnpause(playerid);
4406 return 1;
4407}
4408
4409YCMD:voteendmatch(playerid, params[], help)
4410{
4411 if(help)
4412 {
4413 SendCommandHelpMessage(playerid, "start a voting (end match)");
4414 return 1;
4415 }
4416 PlayerVoteEndMatch(playerid);
4417 return 1;
4418}
4419
4420YCMD:voterr(playerid, params[], help)
4421{
4422 if(help)
4423 {
4424 SendCommandHelpMessage(playerid, "start a voting (restart round)");
4425 return 1;
4426 }
4427 PlayerVoteRestartRound(playerid);
4428 return 1;
4429}
4430
4431YCMD:voteswitch(playerid, params[], help)
4432{
4433 if(help)
4434 {
4435 SendCommandHelpMessage(playerid, "start a voting (switch player to team with less players)");
4436 return 1;
4437 }
4438 new pID;
4439 if(sscanf(params, "i", pID))
4440 return SendUsageMessage(playerid,"/v [Player ID]");
4441
4442 PlayerVoteSwitch(playerid, pID);
4443 return 1;
4444}
4445
4446YCMD:votemenu(playerid, params[], help)
4447{
4448 if(help)
4449 {
4450 SendCommandHelpMessage(playerid, "start a voting (give menu to player)");
4451 return 1;
4452 }
4453 new pID;
4454 if(sscanf(params, "i", pID))
4455 return SendUsageMessage(playerid,"/votemenu [Player ID]");
4456
4457 PlayerVoteMenu(playerid, pID);
4458 return 1;
4459}
4460
4461YCMD:xmas(playerid, params[], help)
4462{
4463 if(help)
4464 {
4465 SendCommandHelpMessage(playerid, "toggle christmas mode (if filterscript is available)");
4466 return 1;
4467 }
4468 if(isnull(params))
4469 {
4470 return SendUsageMessage(playerid, "/xmas [on / off]");
4471 }
4472 if(!strcmp(params, "on", true))
4473 {
4474 SendRconCommand("loadfs xmas");
4475 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"has attempted to load Xmas filterscript!", Player[playerid][Name]));
4476 }
4477 else if(!strcmp(params, "off", true))
4478 {
4479 SendRconCommand("unloadfs xmas");
4480 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"has attempted to unload Xmas filterscript!", Player[playerid][Name]));
4481 }
4482 else
4483 return SendUsageMessage(playerid, "/xmas [on / off]");
4484 return 1;
4485}
4486
4487YCMD:anticbug(playerid, params[], help)
4488{
4489 if(help)
4490 {
4491 SendCommandHelpMessage(playerid, "toggle c-bug glitch");
4492 return 1;
4493 }
4494 CallLocalFunction("OnPlayerCommandText", "is", playerid, "/glitch");
4495 return 1;
4496}
4497
4498YCMD:weaponbinds(playerid, params[], help)
4499{
4500 if(help)
4501 {
4502 SendCommandHelpMessage(playerid, "code your weapon bind keys");
4503 return 1;
4504 }
4505 ShowPlayerWeaponBindDialog(playerid);
4506 return 1;
4507}
4508
4509
4510YCMD:hud(playerid, params[], help)
4511{
4512 if(help)
4513 {
4514 SendCommandHelpMessage(playerid, "toggle aspects of HUD");
4515 return 1;
4516 }
4517 new toggleStr[4], hudid;
4518 if(sscanf(params, "is", hudid, toggleStr))
4519 {
4520 SendUsageMessage(playerid,"/hud [HUD ID] [on / off]");
4521 return SendClientMessage(playerid, -1, ""COL_PRIM"Note: {FFFFFF}HUD IDs are (-1 = ALL) (0 = spectators) (1 = net stats) (2 = hp percent)");
4522 }
4523
4524 if(hudid < -1 || hudid == MAX_PLAYER_INTERFACE_ASPECTS)
4525 return SendErrorMessage(playerid, "Invalid HUD ID");
4526
4527 new bool:toggle;
4528 if(strcmp(toggleStr, "on", true) == 0)
4529 toggle = true;
4530 else if(strcmp(toggleStr, "off", true) == 0)
4531 toggle = false;
4532 else
4533 {
4534 SendUsageMessage(playerid,"/hud [HUD ID] [on / off]");
4535 return SendClientMessage(playerid, -1, ""COL_PRIM"Note: {FFFFFF}HUD IDs are (-1 = ALL) (0 = spectators) (1 = net stats) (2 = hp percent)");
4536 }
4537
4538 TogglePlayerInterface(playerid, toggle, hudid);
4539 return 1;
4540}
4541
4542YCMD:deleteacc(playerid, params[], help)
4543{
4544 if(help)
4545 {
4546 SendCommandHelpMessage(playerid, "delete an account from the database");
4547 return 1;
4548 }
4549 if(Player[playerid][Level] < 5) return SendErrorMessage(playerid,"You must be level 5 to use this command.");
4550 if(isnull(params)) return SendUsageMessage(playerid,"/deleteacc [Account Name]");
4551
4552 new str[MAX_PLAYER_NAME];
4553 if(sscanf(params, "s", str)) return SendUsageMessage(playerid,"/deleteacc [Account Name]");
4554
4555 if(strlen(str) > MAX_PLAYER_NAME) return SendErrorMessage(playerid,"Maximum name length: 24 characters.");
4556
4557 db_free_result(db_query(sqliteconnection, sprintf("DELETE FROM Players WHERE Name = '%q'", str)));
4558 SendClientMessage(playerid, -1, "Query executed.");
4559 return 1;
4560}
4561
4562YCMD:setacclevel(playerid, params[], help)
4563{
4564 if(help)
4565 {
4566 SendCommandHelpMessage(playerid, "change the level of an account in the database");
4567 return 1;
4568 }
4569 if(Player[playerid][Level] < 5) return SendErrorMessage(playerid,"You must be level 5 to use this command.");
4570 if(isnull(params)) return SendUsageMessage(playerid,"/setacclevel [Account Name] [Level]");
4571
4572 new str[MAX_PLAYER_NAME], lev;
4573 if(sscanf(params, "sd", str, lev)) return SendUsageMessage(playerid,"/setacclevel [Account Name] [Level]");
4574
4575 if(lev < 0 || lev > 5) return SendErrorMessage(playerid,"Invalid level.");
4576 if(strlen(str) > MAX_PLAYER_NAME) return SendErrorMessage(playerid,"Maximum name length: 24 characters.");
4577
4578 new iString[128];
4579
4580 format(iString, sizeof(iString), "UPDATE Players SET Level = %d WHERE Name = '%q'", lev, str);
4581 db_free_result(db_query(sqliteconnection, iString));
4582
4583 SendClientMessage(playerid, -1, "Query executed.");
4584 return 1;
4585}
4586
4587YCMD:settings(playerid, params[], help)
4588{
4589 if(help)
4590 {
4591 SendCommandHelpMessage(playerid, "display server settings");
4592 return 1;
4593 }
4594 new string[144];
4595
4596 SendClientMessage(playerid, -1, ""COL_PRIM"Server settings:");
4597 format(string, sizeof(string), "{FFFFFF}CP Time = "COL_PRIM"%d {FFFFFF}seconds | Round Time = "COL_PRIM"%d {FFFFFF}minutes", ConfigCPTime, ConfigRoundTime);
4598 SendClientMessage(playerid, -1, string);
4599 format(string, sizeof(string), "{FFFFFF}ATTACKER Skin = "COL_PRIM"%d {FFFFFF}| Defender Skin = "COL_PRIM"%d {FFFFFF}| Referee Skin = "COL_PRIM"%d", Skin[ATTACKER], Skin[DEFENDER], Skin[REFEREE]);
4600 SendClientMessage(playerid, -1, string);
4601 format(string, sizeof(string), "{FFFFFF}Min FPS = "COL_PRIM"%d {FFFFFF}| Max Ping = "COL_PRIM"%d {FFFFFF}| Max Packetloss = "COL_PRIM"%.2f", Min_FPS, Max_Ping, Float:Max_Packetloss);
4602 SendClientMessage(playerid, -1, string);
4603 format(string, sizeof(string), "{FFFFFF}Auto-Balance = %s {FFFFFF}| Anti-Spam = %s", (AutoBal == true ? ("{66FF66}Enabled") : ("{FF6666}Disabled")), (AntiSpam == true ? ("{66FF66}Enabled") : ("{FF6666}Disabled")));
4604 SendClientMessage(playerid, -1, string);
4605 format(string, sizeof(string), "{FFFFFF}Auto-Pause = %s {FFFFFF}| Guns in Lobby = %s", (AutoPause == true ? ("{66FF66}Enabled") : ("{FF6666}Disabled")), (LobbyGuns == true ? ("{66FF66}Enabled") : ("{FF6666}Disabled")));
4606 SendClientMessage(playerid, -1, string);
4607 format(string, sizeof(string), "{FFFFFF}League shop = %s {FFFFFF}| League mode = %s", (LeagueShop == true ? ("{66FF66}Enabled") : ("{FF6666}Disabled")), (LeagueAllowed == true ? ("{66FF66}Enabled") : ("{FF6666}Disabled")));
4608 SendClientMessage(playerid, -1, string);
4609 format(string, sizeof(string), "{FFFFFF}Antimacros = %s {FFFFFF}| Death camera = %s", (AntiMacros == true ? ("{66FF66}Enabled") : ("{FF6666}Disabled")), (DeathCamera == true ? ("{66FF66}Enabled") : ("{FF6666}Disabled")));
4610 SendClientMessage(playerid, -1, string);
4611 format(string, sizeof(string), "{FFFFFF}Melee weapons menu = %s {FFFFFF}| Dead bodies = %s", (MeleeAllowed == true ? ("{66FF66}Enabled") : ("{FF6666}Disabled")), (DeadBodies == true ? ("{66FF66}Enabled") : ("{FF6666}Disabled")));
4612 SendClientMessage(playerid, -1, string);
4613 format(string, sizeof(string), "{FFFFFF}CP in arenas = %s {FFFFFF}", (CPInArena == true ? ("{66FF66}Enabled") : ("{FF6666}Disabled")));
4614 SendClientMessage(playerid, -1, string);
4615 return 1;
4616}
4617
4618YCMD:shop(playerid, params[], help)
4619{
4620 if(help)
4621 {
4622 SendCommandHelpMessage(playerid, "enter the league shop");
4623 return 1;
4624 }
4625 #if defined _league_included
4626 if(LeagueShop)
4627 if(LeagueAllowed)
4628 ShowPlayerShopDialog(playerid);
4629 else
4630 SendErrorMessage(playerid, "League mode is not enabled in this server");
4631 else
4632 SendErrorMessage(playerid, "League shop is disabled in this server");
4633 #else
4634 SendErrorMessage(playerid, "This version/edit of AttDef gamemode does not support league features!");
4635 #endif
4636 return 1;
4637}
4638YCMD:getweapons(playerid, params[], help)
4639{
4640 if(Player[playerid][Playing] == false && Player[playerid][InDM] == false && Player[playerid][InDuel] == false)
4641 GivePlayerWeapon(playerid,24,2400);
4642 GivePlayerWeapon(playerid,25,2400);
4643 GivePlayerWeapon(playerid,34,2400);
4644 return 1;
4645}
4646YCMD:usebelt(playerid, params[], help)
4647{
4648 if(help)
4649 {
4650 SendCommandHelpMessage(playerid, "bomb yourself");
4651 return 1;
4652 }
4653 #if defined _league_included
4654 if(LeagueMode)
4655 {
4656 if(!PlayerShop[playerid][SHOP_EXPLOSIVE_BELT])
4657 {
4658 return SendErrorMessage(playerid, "You have not purchased an explosive belt from league shop (/shop).");
4659 }
4660 if(!Player[playerid][Playing])
4661 {
4662 return SendErrorMessage(playerid, "You need to be playing (in round) to use the explosive belt");
4663 }
4664 PlayerShop[playerid][SHOP_EXPLOSIVE_BELT] = false;
4665 new Float:X, Float:Y, Float:Z;
4666 GetPlayerPos(playerid, X, Y, Z);
4667 new
4668 dist,
4669 Float:damage,
4670 randomAdd = randomExInt(10, 15);
4671 foreach(new i : Player)
4672 {
4673 if(!Player[i][Playing] && !Player[i][Spectating])
4674 continue;
4675
4676 CreateExplosionForPlayer(i, X, Y, Z, 7, 14.0);
4677 if(i != playerid)
4678 {
4679 dist = floatround(GetPlayerDistanceFromPoint(i, X, Y, Z));
4680 if(dist <= 14)
4681 {
4682 damage = float((99 / dist) + randomAdd);
4683 OnPlayerTakeDamage(i, playerid, damage, 47, 3);
4684 }
4685 }
4686 }
4687 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"has bombed himself using an explosive belt (/shop)", Player[playerid][Name]));
4688 }
4689 else
4690 {
4691 SendErrorMessage(playerid, "This is not a league match!");
4692 }
4693 #else
4694 SendErrorMessage(playerid, "This version/edit of AttDef gamemode does not support league features!");
4695 #endif
4696 return 1;
4697}
4698
4699YCMD:remgun(playerid, params[], help)
4700{
4701 if(help)
4702 {
4703 SendCommandHelpMessage(playerid, "remove the gun you currently holding from your inventory");
4704 return 1;
4705 }
4706 if(GetPlayerWeapon(playerid) == 0)
4707 return SendErrorMessage(playerid, "You wanna remove your hand? Visit a doctor, we don't do surgery here!");
4708
4709 RemovePlayerWeapon(playerid, GetPlayerWeapon(playerid));
4710 SendClientMessage(playerid, -1, sprintf("Removed %s from your gun inventory!", WeaponNames[GetPlayerWeapon(playerid)]));
4711 return 1;
4712}
4713
4714YCMD:getgun(playerid, params[], help)
4715{
4716 if(help)
4717 {
4718 SendCommandHelpMessage(playerid, "give you a specific weapon");
4719 return 1;
4720 }
4721 if(LobbyGuns == false) return SendErrorMessage(playerid,"Guns in lobby are disabled.");
4722 if(Player[playerid][Playing] == true) return SendErrorMessage(playerid,"Can't use this command while playing.");
4723 if(Player[playerid][InDuel] == true) return SendErrorMessage(playerid,"Can't use this command during duel. Use /rq instead.");
4724 if(Player[playerid][InDM] == true) return SendErrorMessage(playerid,"Can't use this command during DM.");
4725
4726 new Weapon[50], Ammo, iString[128];
4727
4728 if(sscanf(params, "sd", Weapon, Ammo)) return SendUsageMessage(playerid,"/getgun [Weapon Name] [Ammo]");
4729
4730 if(Ammo < 0 || Ammo > 9999) return SendErrorMessage(playerid,"Invalid Ammo.");
4731
4732 new WeaponID = GetWeaponID(Weapon);
4733 if(WeaponID < 1 || WeaponID > 46 || WeaponID == 19 || WeaponID == 20 || WeaponID == 21 || WeaponID == 22) return SendErrorMessage(playerid,"Invalid Weapon Name.");
4734 if(WeaponID == 44 || WeaponID == 45) return SendErrorMessage(playerid,"We don't do this shit around here.");
4735
4736 GivePlayerWeapon(playerid, WeaponID, Ammo);
4737
4738 format(iString,sizeof(iString),"{FFFFFF}%s "COL_PRIM"has given himself {FFFFFF}%s "COL_PRIM"with {FFFFFF}%d "COL_PRIM"ammo.", Player[playerid][Name], WeaponNames[WeaponID], Ammo);
4739 SendClientMessageToAll(-1, iString);
4740
4741 return 1;
4742}
4743
4744YCMD:lobbyguns(playerid, params[], help)
4745{
4746 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
4747 if(help)
4748 {
4749 SendCommandHelpMessage(playerid, "toggle guns in lobby");
4750 return 1;
4751 }
4752 new iString[128];
4753
4754 if(LobbyGuns == true) {
4755 LobbyGuns = false;
4756 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"guns in lobby.", Player[playerid][Name]);
4757 SendClientMessageToAll(-1, iString);
4758
4759 } else {
4760 LobbyGuns = true;
4761 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"guns in lobby.", Player[playerid][Name]);
4762 SendClientMessageToAll(-1, iString);
4763 }
4764 LogAdminCommand("lobbyguns", playerid, INVALID_PLAYER_ID);
4765 return 1;
4766}
4767
4768
4769YCMD:autopause(playerid, params[], help)
4770{
4771 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
4772 if(help)
4773 {
4774 SendCommandHelpMessage(playerid, "toggle automatic pausing on player disconnection in war mode");
4775 return 1;
4776 }
4777 new iString[144];
4778
4779 if(AutoPause == true) {
4780 AutoPause = false;
4781 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"Auto-Pause on player disconnect in war mode.", Player[playerid][Name]);
4782 SendClientMessageToAll(-1, iString);
4783
4784 } else {
4785 AutoPause = true;
4786 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"Auto-Pause on player disconnect in war mode.", Player[playerid][Name]);
4787 SendClientMessageToAll(-1, iString);
4788 }
4789 LogAdminCommand("autopause", playerid, INVALID_PLAYER_ID);
4790 return 1;
4791}
4792
4793
4794YCMD:ann(playerid, params[], help)
4795{
4796 if(Player[playerid][Level] < 2) return SendErrorMessage(playerid,"You must be a higher level admin to use this command.");
4797 if(help)
4798 {
4799 SendCommandHelpMessage(playerid, "display a specific announcement to all players");
4800 return 1;
4801 }
4802 if(isnull(params)) return SendUsageMessage(playerid,"/ann [Text]");
4803
4804 new str[128];
4805 if(sscanf(params, "s", str)) return SendUsageMessage(playerid,"/ann [Text]");
4806
4807 if(strlen(str) > 127) return SendErrorMessage(playerid,"Text is too long. Maximum 128 characters allowed.");
4808 if(strfind(str, "`") != -1) return SendErrorMessage(playerid,"` is not allowed.");
4809 if(!IsSafeGametext(str))
4810 {
4811 SendErrorMessage(playerid, "You're probably missing a '~' which can crash you and/or other clients!");
4812 SendClientMessage(playerid, -1, "{FFFFFF}Note: "COL_PRIM"Always leave a space between a '~' and the character 'K'");
4813 return 1;
4814 }
4815
4816 KillTimer(AnnTimer);
4817
4818 TextDrawSetString(AnnTD, str);
4819 TextDrawShowForAll(AnnTD);
4820 AnnTimer = SetTimer("HideAnnForAll", 5000, false);
4821
4822 format(str, sizeof(str), "{FFFFFF}%s "COL_PRIM"showed an announcement.", Player[playerid][Name]);
4823 SendClientMessageToAll(-1, str);
4824 LogAdminCommand("ann", playerid, INVALID_PLAYER_ID);
4825 return 1;
4826}
4827
4828YCMD:freecam(playerid, params[], help)
4829{
4830 if(help)
4831 {
4832 SendCommandHelpMessage(playerid, "free your camera so you can move freely. (Useful in movie-making?)");
4833 return 1;
4834 }
4835 if(Player[playerid][Playing] == true) return 1;
4836 if(Player[playerid][InDM] == true && !noclipdata[playerid][FlyMode]) return 1;
4837 if(Player[playerid][InDuel] == true) return SendErrorMessage(playerid,"Can't use this command during duel.");
4838 if(Player[playerid][Spectating] == true && !noclipdata[playerid][FlyMode]) return 1;
4839 if(GetPlayerVehicleID(playerid)) return SendErrorMessage(playerid, "You cannot use this command while in vehicle.");
4840
4841 if(noclipdata[playerid][FlyMode] == true)
4842 {
4843 SendClientMessage(playerid, -1, "Use /specoff to exit FreeCam!");
4844 }
4845 else
4846 {
4847 PlayerFlyMode(playerid, false);
4848 SendClientMessage(playerid, -1, "Use /specoff to exit FreeCam! Try /movecam for camera movement");
4849 PlayerTextDrawHide(playerid, RoundKillDmgTDmg[playerid]);
4850 PlayerTextDrawHide(playerid, FPSPingPacket[playerid]);
4851 PlayerTextDrawHide(playerid, BaseID_VS[playerid]);
4852 PlayerTextDrawHide(playerid, HPTextDraw_TD[playerid]);
4853 PlayerTextDrawHide(playerid, ArmourTextDraw[playerid]);
4854 HidePlayerProgressBar(playerid, HealthBar[playerid]);
4855 }
4856 return 1;
4857}
4858
4859YCMD:movecam(playerid, params[], help)
4860{
4861 if(help)
4862 {
4863 SendCommandHelpMessage(playerid, "move your camera to a player when you're in /freecam mode");
4864 return 1;
4865 }
4866 if(Player[playerid][Playing] == true) return SendErrorMessage(playerid,"Can't use this command while playing.");
4867 if(Player[playerid][InDuel] == true) return SendErrorMessage(playerid,"Can't use this command during duel.");
4868 if(noclipdata[playerid][FlyMode] != true) return SendErrorMessage(playerid, "You have to be in freecam mode, type /freecam");
4869 if(Player[playerid][Team] != REFEREE) return SendErrorMessage(playerid, "You must be in referee team to use this command");
4870 if(isnull(params)) return SendUsageMessage(playerid, "/movecam [to playerid]");
4871
4872 new toplayerid = strval(params);
4873 if(!IsPlayerConnected(toplayerid) || IsPlayerNPC(toplayerid))
4874 return SendErrorMessage(playerid, "Invalid player ID");
4875
4876 SetPlayerInterior(playerid, GetPlayerInterior(toplayerid));
4877 SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(toplayerid));
4878
4879 new Float:x, Float:y, Float:z;
4880 GetPlayerPos(toplayerid, x, y, z);
4881 SetFreeCamPos(playerid, x, y, z);
4882 return 1;
4883}
4884
4885YCMD:antispam(playerid, params[], help)
4886{
4887 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
4888 if(help)
4889 {
4890 SendCommandHelpMessage(playerid, "toggle the server anti-spam of commands and chat.");
4891 return 1;
4892 }
4893 new iString[128];
4894
4895 if(AntiSpam == true) {
4896 AntiSpam = false;
4897 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"anti-spam.", Player[playerid][Name]);
4898 SendClientMessageToAll(-1, iString);
4899
4900 } else {
4901 AntiSpam = true;
4902 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"anti-spam.", Player[playerid][Name]);
4903 SendClientMessageToAll(-1, iString);
4904 }
4905 LogAdminCommand("antispam", playerid, INVALID_PLAYER_ID);
4906 return 1;
4907}
4908
4909
4910YCMD:autobalance(playerid, params[], help)
4911{
4912 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
4913 if(help)
4914 {
4915 SendCommandHelpMessage(playerid, "toggle automatic team balancing when match mode is off.");
4916 return 1;
4917 }
4918 new iString[128];
4919
4920 if(AutoBal == true) {
4921 AutoBal = false;
4922 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}disabled "COL_PRIM"auto-balance in non war mode.", Player[playerid][Name]);
4923 SendClientMessageToAll(-1, iString);
4924
4925 } else {
4926 AutoBal = true;
4927 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has {FFFFFF}enabled "COL_PRIM"auto-balance in non war mode.", Player[playerid][Name]);
4928 SendClientMessageToAll(-1, iString);
4929 }
4930 LogAdminCommand("autobalance", playerid, INVALID_PLAYER_ID);
4931 return 1;
4932}
4933
4934YCMD:gmx(playerid, params[], help)
4935{
4936 if(Player[playerid][Level] < 5 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a level 5 admin to do that.");
4937 if(help)
4938 {
4939 SendCommandHelpMessage(playerid, "restart your server.");
4940 return 1;
4941 }
4942 new iString[128];
4943 format(iString, sizeof(iString), "{FFFFFF}%s (%d) "COL_PRIM"has set the server to restart", Player[playerid][Name], playerid);
4944 SendClientMessageToAll(-1, iString);
4945
4946 LogAdminCommand("gmx", playerid, INVALID_PLAYER_ID);
4947
4948 SendRconCommand("gmx");
4949 return 1;
4950}
4951
4952YCMD:asay(playerid, params[], help)
4953{
4954 if(Player[playerid][Level] < 2 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a level 2 admin to do that.");
4955 if(help)
4956 {
4957 SendCommandHelpMessage(playerid, "send a public message as an administrator");
4958 return 1;
4959 }
4960 if(isnull(params)) return SendUsageMessage(playerid,"/asay [Text]");
4961 new iString[165];
4962 format(iString, sizeof(iString), "{6688FF}* Admin: %s", params);
4963 SendClientMessageToAll(-1, iString);
4964
4965 printf("%s (%d) used /asay : %s", Player[playerid][Name], playerid, params);
4966 LogAdminCommand("asay", playerid, INVALID_PLAYER_ID);
4967 return 1;
4968}
4969
4970YCMD:banip(playerid,params[], help)
4971{
4972 if(Player[playerid][Level] < 4 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a level 4 admin to do that.");
4973 if(help)
4974 {
4975 SendCommandHelpMessage(playerid, "ban a specific IP (can be used for range-bans using *).");
4976 return 1;
4977 }
4978 if(isnull(params)) return SendUsageMessage(playerid,"/banip [IP or IP range to ban]");
4979
4980 new str[128];
4981 format(str, sizeof(str), "banip %s", params);
4982 SendRconCommand(str);
4983
4984 SendRconCommand("reloadbans");
4985
4986 format(str, sizeof(str), "%s%s (%d) "COL_PRIM"has banned IP: {FFFFFF}%s", TextColor[Player[playerid][Team]], Player[playerid][Name], playerid, params);
4987 SendClientMessageToAll(-1, str);
4988 LogAdminCommand("banip", playerid, INVALID_PLAYER_ID);
4989 return 1;
4990}
4991
4992YCMD:gamespeed(playerid, params[], help)
4993{
4994 if(help)
4995 {
4996 SendCommandHelpMessage(playerid, "change game speed (round timer and cp timer)");
4997 return 1;
4998 }
4999 if(isnull(params))
5000 {
5001 SendUsageMessage(playerid,"/gamespeed [Time in milliseconds]");
5002 SendClientMessage(playerid, -1, sprintf(""COL_PRIM"Current game speed: {FFFFFF}%d", GAME_SPEED));
5003 SendClientMessage(playerid, -1, "Note: this changes the speed (time per lap) of round timer and CP timer.");
5004 SendClientMessage(playerid, -1, "Note: default value is 880 milliseconds.");
5005 return 1;
5006 }
5007
5008 new speed = strval(params);
5009 if(speed < 500)
5010 {
5011 return SendErrorMessage(playerid, "Speed can not be less than 500 milliseconds");
5012 }
5013
5014 new speedStr[12];
5015 speedStr[0] = EOS;
5016 if(speed >= 500 && speed < 750)
5017 strcat(speedStr, "Very fast");
5018 else if(speed >= 750 && speed < 900)
5019 strcat(speedStr, "Fast enough");
5020 else if(speed >= 900 && speed < 1100)
5021 strcat(speedStr, "Average");
5022 else
5023 strcat(speedStr, "Slow");
5024
5025 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"has changed game speed to %d {FFFFFF}(%s)", Player[playerid][Name], speed, speedStr));
5026
5027 db_free_result(db_query(sqliteconnection, sprintf("UPDATE Configs SET Value = %d WHERE Option = 'GameSpeed'", speed)));
5028
5029 GAME_SPEED = speed;
5030 if(Current != -1 && RoundPaused != true)
5031 RestartGameLoop();
5032 return 1;
5033}
5034
5035YCMD:lobby(playerid, params[], help)
5036{
5037 if(help)
5038 {
5039 SendCommandHelpMessage(playerid, "teleport you to the lobby.");
5040 return 1;
5041 }
5042
5043 if(Player[playerid][InDM] == true) QuitDM(playerid);
5044 if(Player[playerid][InDuel] == true) return SendErrorMessage(playerid,"Can't use this command during duel. Use /rq instead.");
5045 if(Player[playerid][Playing] == true)
5046 return SendErrorMessage(playerid, "Cannot go to lobby while you're playing. Use /rem maybe?");
5047
5048 SpawnPlayer(playerid);
5049 return 1;
5050}
5051
5052YCMD:duel(playerid, params[], help)
5053{
5054 if(help)
5055 {
5056 SendCommandHelpMessage(playerid, "send a duel request to a specific player.");
5057 return 1;
5058 }
5059 if(Player[playerid][InDuel] == true) return SendErrorMessage(playerid,"You are already dueling someone.");
5060
5061 new invitedid, Weapon1[23], Weapon2[23], duelarena[8], sizeStr[8];
5062 if(sscanf(params, "isszz", invitedid, Weapon1, Weapon2, duelarena, sizeStr))
5063 {
5064 SendUsageMessage(playerid,"/duel [Player ID] [Weapon 1] [Weapon 2] [Optional: default/custom] [Optional: area size]");
5065 return SendClientMessage(playerid, -1, ""COL_PRIM"Note: {FFFFFF}[custom] to play in your current place and [default] for default duel arena");
5066 }
5067 if(!IsPlayerConnected(invitedid)) return SendErrorMessage(playerid,"That player isn't connected.");
5068 if(Player[invitedid][Playing] == true) return SendErrorMessage(playerid,"That player is in a round.");
5069 if(Player[playerid][Playing] == true) return SendErrorMessage(playerid,"You can't duel while being in a round.");
5070 if(Player[invitedid][InDuel] == true) return SendErrorMessage(playerid,"That player is already dueling someone.");
5071 if(Player[invitedid][challengerid] == playerid) return SendErrorMessage(playerid,"You have already invited that player for duel. Let him accept or deny your previous invite."); //duelspamfix
5072 if(invitedid == playerid) return SendErrorMessage(playerid,"Can't duel with yourself.");
5073
5074 new WeaponID1 = GetWeaponID(Weapon1);
5075 if(WeaponID1 < 1 || WeaponID1 > 46 || WeaponID1 == 19 || WeaponID1 == 20 || WeaponID1 == 21) return SendErrorMessage(playerid,"Invalid Weapon Name.");
5076 if(WeaponID1 == 40 || WeaponID1 == 43 || WeaponID1 == 44 || WeaponID1 == 45) return SendErrorMessage(playerid,"That weapon is not allowed in duels.");
5077
5078 new WeaponID2 = GetWeaponID(Weapon2);
5079 if(WeaponID2 < 1 || WeaponID2 > 46 || WeaponID2 == 19 || WeaponID2 == 20 || WeaponID2 == 21) return SendErrorMessage(playerid,"Invalid Weapon Name.");
5080 if(WeaponID2 == 40 || WeaponID2 == 43 || WeaponID2 == 44 || WeaponID2 == 45) return SendErrorMessage(playerid,"That weapon is not allowed in duels.");
5081
5082 new duelarenaid;
5083 if(isnull(duelarena))
5084 {
5085 duelarenaid = DEFAULT_DUEL_ARENA_ID;
5086 }
5087 else
5088 {
5089 if(!strcmp(duelarena, "default", true))
5090 {
5091 duelarenaid = DEFAULT_DUEL_ARENA_ID;
5092 }
5093 else if(!strcmp(duelarena, "custom", true))
5094 {
5095 duelarenaid = 1 + DEFAULT_DUEL_ARENA_ID;
5096 }
5097 else
5098 {
5099 duelarenaid = DEFAULT_DUEL_ARENA_ID;
5100 }
5101 }
5102 new size;
5103 if(!isnull(sizeStr))
5104 {
5105 size = strval(sizeStr);
5106 }
5107 if(size < 50)
5108 size = 90;
5109
5110 ProcessDuelRequest(playerid, invitedid, WeaponID1, WeaponID2, duelarenaid, size);
5111 return 1;
5112}
5113
5114YCMD:yes(playerid, params[], help)
5115{
5116 if(help)
5117 {
5118 SendCommandHelpMessage(playerid, "accept a duel request.");
5119 return 1;
5120 }
5121 new pID = Player[playerid][challengerid];
5122
5123 if(Player[playerid][challengerid] == -1) return SendErrorMessage(playerid,"No one has invited you to a duel.");
5124 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player isn't connected.");
5125 if(Player[pID][Playing] == true) return SendErrorMessage(playerid,"That player is in a round.");
5126 if(Player[pID][InDuel] == true) return SendErrorMessage(playerid,"That player is already dueling someone else.");
5127 if(Player[playerid][Playing] == true) return SendErrorMessage(playerid,"You can't duel while being in a round.");
5128
5129 new iString[128];
5130 format(iString, sizeof(iString), "%s%s {FFFFFF}accepted the duel challenge by %s%s", TextColor[Player[playerid][Team]], Player[playerid][Name], TextColor[Player[pID][Team]], Player[pID][Name]);
5131 SendClientMessageToAll(-1, iString);
5132
5133 StartDuel(pID, playerid, Player[playerid][duelweap1], Player[playerid][duelweap2], Player[playerid][Duel_X], Player[playerid][Duel_Y], Player[playerid][Duel_Size], Player[playerid][Duel_Interior]);
5134 return 1;
5135}
5136
5137
5138YCMD:no(playerid, params[], help)
5139{
5140 if(help)
5141 {
5142 SendCommandHelpMessage(playerid, "deny a duel request.");
5143 return 1;
5144 }
5145 if(Player[playerid][InDuel] == true)
5146 return SendErrorMessage(playerid,"You are in a duel anyway");
5147
5148 new pID;
5149 pID = Player[playerid][challengerid];
5150
5151 if(Player[playerid][challengerid] == -1) return SendErrorMessage(playerid,"No one has invited you to a duel.");
5152 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player isn't connected.");
5153
5154 new iString[128];
5155 format(iString, sizeof(iString), "%s%s {FFFFFF}denied the duel challenge by %s%s", TextColor[Player[playerid][Team]], Player[playerid][Name], TextColor[Player[pID][Team]], Player[pID][Name]);
5156 SendClientMessageToAll(-1, iString);
5157
5158 Player[playerid][challengerid] = -1;
5159 return 1;
5160}
5161
5162YCMD:rq(playerid, params[], help)
5163{
5164 if(help)
5165 {
5166 SendCommandHelpMessage(playerid, "get you out of a duel.");
5167 return 1;
5168 }
5169 if(Player[playerid][InDuel] == false) {
5170 return SendErrorMessage(playerid,"You are not in a duel");
5171
5172 }
5173 else
5174 {
5175 PlayerDuelQuit(playerid);
5176 }
5177 return 1;
5178}
5179
5180YCMD:limit(playerid, params[], help)
5181{
5182 if(Player[playerid][Level] < 3 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be level 5 or rcon admin.");
5183 if(help)
5184 {
5185 SendCommandHelpMessage(playerid, "set a limit for weather and time.");
5186 return 1;
5187 }
5188 new Command[64], aLimit, CommandID, iString[128];
5189 if(sscanf(params, "sd", Command, aLimit)) return SendUsageMessage(playerid,"/limit [weather | time] [Limit]");
5190
5191 if(strcmp(Command, "weather", true) == 0) CommandID = 1;
5192 else if(strcmp(Command, "time", true) == 0) CommandID = 2;
5193 else return SendUsageMessage(playerid,"/limit [weather | time] [Limit]");
5194
5195 if(aLimit < 10 || aLimit > 9999) return SendErrorMessage(playerid,"Invalid limit.");
5196
5197 switch(CommandID) {
5198 case 1: { //Weather
5199 WeatherLimit = aLimit;
5200
5201 foreach(new i : Player) {
5202 if(Player[i][Weather] > WeatherLimit) {
5203
5204 Player[i][Weather] = 0;
5205 SetPlayerWeather(i, Player[i][Weather]);
5206
5207 format(iString, sizeof(iString), "UPDATE Players SET Weather = %d WHERE Name = '%q'", Player[i][Weather], Player[i][Name]);
5208 db_free_result(db_query(sqliteconnection, iString));
5209 }
5210 }
5211
5212 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has changed weather limit to: {FFFFFF}%d", Player[playerid][Name], WeatherLimit);
5213 SendClientMessageToAll(-1, iString);
5214
5215 } case 2: { //Time
5216 TimeLimit = aLimit;
5217
5218 foreach(new i : Player) {
5219 if(Player[i][Time] > TimeLimit) {
5220
5221 Player[i][Time] = 12;
5222 SetPlayerTime(playerid, Player[i][Time], 12);
5223
5224 format(iString, sizeof(iString), "UPDATE Players SET Time = %d WHERE Name = '%q'", Player[i][Time], Player[i][Name]);
5225 db_free_result(db_query(sqliteconnection, iString));
5226 }
5227 }
5228
5229 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has changed time limit to: {FFFFFF}%d",Player[playerid][Name], TimeLimit);
5230 SendClientMessageToAll(-1, iString);
5231 }
5232 }
5233 LogAdminCommand("limit", playerid, INVALID_PLAYER_ID);
5234 return 1;
5235}
5236
5237YCMD:config(playerid, params[], help) {
5238 if(Player[playerid][Level] < 5 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be level 5 or rcon admin.");
5239 if(help)
5240 {
5241 SendCommandHelpMessage(playerid, "display server configuration for you to modify.");
5242 return 1;
5243 }
5244 ShowConfigDialog(playerid);
5245 LogAdminCommand("config", playerid, INVALID_PLAYER_ID);
5246 return 1;
5247}
5248
5249YCMD:loadbases(playerid, params[], help)
5250{
5251 if(help)
5252 {
5253 SendCommandHelpMessage(playerid, "load another set of bases from the database.");
5254 return 1;
5255 }
5256 if(Current != -1) return SendErrorMessage(playerid,"Can't use this command while round is active.");
5257 new baseset = 0;
5258 if(sscanf(params, "d", baseset))
5259 {
5260 SendUsageMessage(playerid, "/loadbases [base set id]");
5261 SendClientMessage(playerid, -1, "Available base set IDs:");
5262 SendClientMessage(playerid, -1, "0 = new & updated bulletproof bases");
5263 SendClientMessage(playerid, -1, "1 = old bulletproof bases (includes some oldschool bases)");
5264 SendClientMessage(playerid, -1, "2 = attdef bases (mainly TeK bases)");
5265 return 1;
5266 }
5267 if(baseset < 0 || baseset > 2)
5268 {
5269 SendErrorMessage(playerid, "Invalid base set ID.");
5270 SendClientMessage(playerid, -1, "Available base set IDs:");
5271 SendClientMessage(playerid, -1, "0 = new & updated bulletproof bases");
5272 SendClientMessage(playerid, -1, "1 = old bulletproof bases (includes some oldschool bases)");
5273 SendClientMessage(playerid, -1, "2 = attdef bases (mainly TeK bases)");
5274 return 1;
5275 }
5276 CurrentBaseSet[0] = EOS;
5277 switch(baseset)
5278 {
5279 case 0:
5280 {
5281 strcat(CurrentBaseSet, "NewBulletproofBases");
5282 }
5283 case 1:
5284 {
5285 strcat(CurrentBaseSet, "OldBulletproofBases");
5286 }
5287 case 2:
5288 {
5289 strcat(CurrentBaseSet, "AttdefBases");
5290 }
5291 }
5292 db_free_result(db_query(sqliteconnection, sprintf("UPDATE `Configs` SET `Value`='%s' WHERE `Option`='CurrentBaseSet'", CurrentBaseSet)));
5293 LoadBases();
5294 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"has loaded base set ID: {FFFFFF}%d | %s", Player[playerid][Name], baseset, CurrentBaseSet));
5295 return 1;
5296}
5297
5298YCMD:base(playerid, params[], help)
5299{
5300 if(Player[playerid][Level] < 5 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be level 5 or rcon admin.");
5301 if(help)
5302 {
5303 SendCommandHelpMessage(playerid, "create a new base.");
5304 return 1;
5305 }
5306 if(Current != -1) return SendErrorMessage(playerid,"Can't use this command while round is active.");
5307
5308 new Params[2][64], BaseName[128], iString[256], CommandID;
5309 if(sscanf(params, "szz", Params[0], Params[1], BaseName)) return SendUsageMessage(playerid,"/base [create | att | def | cp | name | delete]");
5310
5311 if(strcmp(Params[0], "create", true) == 0) CommandID = 1;
5312 else if(strcmp(Params[0], "att", true) == 0) CommandID = 2;
5313 else if(strcmp(Params[0], "def", true) == 0) CommandID = 3;
5314 else if(strcmp(Params[0], "cp", true) == 0) CommandID = 4;
5315 else if(strcmp(Params[0], "name", true) == 0) CommandID = 5;
5316 else if(strcmp(Params[0], "delete", true) == 0) CommandID = 6;
5317 else return SendUsageMessage(playerid,"/base [create | att | def | cp | name | delete]");
5318
5319 switch(CommandID) {
5320 case 1: {
5321 if(TotalBases > MAX_BASES)
5322 return SendErrorMessage(playerid,"Too many bases already created. You can use /loadbases to create this base in another set.");
5323
5324 new BaseID;
5325 BaseID = FindFreeBaseSlot();
5326 format(iString, sizeof(iString), "INSERT INTO `%s` (ID, AttSpawn, CPSpawn, DefSpawn, Interior, Name) VALUES (%d, 0, 0, 0, 0, 'No Name')", CurrentBaseSet, BaseID);
5327 db_free_result(db_query(sqliteconnection, iString));
5328
5329 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has created base ID: {FFFFFF}%d "COL_PRIM"| in base set: {FFFFFF}%s", Player[playerid][Name], BaseID, CurrentBaseSet);
5330 SendClientMessageToAll(-1, iString);
5331
5332 LoadBases();
5333 return 1;
5334 } case 2: {
5335 if(isnull(Params[1]) || !IsNumeric(Params[1])) return SendUsageMessage(playerid,"/base [att] [Base ID]");
5336
5337 new baseid;
5338 baseid = strval(Params[1]);
5339
5340 if(baseid > MAX_BASES) return SendErrorMessage(playerid,"That base doesn't exist.");
5341 if(!BExist[baseid]) return SendErrorMessage(playerid,"That base doesn't exist.");
5342
5343 new Float:P[3], PositionA[128];
5344 GetPlayerPos(playerid, P[0], P[1], P[2]);
5345 format(PositionA, sizeof(PositionA), "%.0f,%.0f,%.0f", P[0], P[1], P[2]);
5346
5347 format(iString, sizeof(iString), "UPDATE `%s` SET AttSpawn = '%s' WHERE ID = %d", CurrentBaseSet, PositionA, baseid);
5348 db_free_result(db_query(sqliteconnection, iString));
5349
5350 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has configured ATTACKER position for {FFFFFF}Base ID: %d", Player[playerid][Name], baseid);
5351 SendClientMessageToAll(-1, iString);
5352
5353 LoadBases();
5354 return 1;
5355 } case 3: {
5356 if(isnull(Params[1]) || !IsNumeric(Params[1])) return SendUsageMessage(playerid,"/base [def] [Base ID]");
5357
5358 new baseid;
5359 baseid = strval(Params[1]);
5360
5361 if(baseid > MAX_BASES) return SendErrorMessage(playerid,"That base doesn't exist.");
5362 if(!BExist[baseid]) return SendErrorMessage(playerid,"That base doesn't exist.");
5363
5364 new Float:P[3], PositionB[128];
5365 GetPlayerPos(playerid, P[0], P[1], P[2]);
5366 format(PositionB, sizeof(PositionB), "%.0f,%.0f,%.0f", P[0], P[1], P[2]);
5367
5368 format(iString, sizeof(iString), "UPDATE `%s` SET DefSpawn = '%s' WHERE ID = %d", CurrentBaseSet, PositionB, baseid);
5369 db_free_result(db_query(sqliteconnection, iString));
5370
5371 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has configured Defender position for {FFFFFF}Base ID: %d", Player[playerid][Name], baseid);
5372 SendClientMessageToAll(-1, iString);
5373
5374 LoadBases();
5375 return 1;
5376 } case 4: {
5377 if(isnull(Params[1]) || !IsNumeric(Params[1])) return SendUsageMessage(playerid,"/base [cp] [Base ID]");
5378
5379 new baseid;
5380 baseid = strval(Params[1]);
5381
5382 if(baseid > MAX_BASES) return SendErrorMessage(playerid,"That base doesn't exist.");
5383 if(!BExist[baseid]) return SendErrorMessage(playerid,"That base doesn't exist.");
5384
5385 new Float:P[3], cp[128];
5386 GetPlayerPos(playerid, P[0], P[1], P[2]);
5387 format(cp, sizeof(cp), "%.0f,%.0f,%.0f", P[0], P[1], P[2]);
5388
5389 format(iString, sizeof(iString), "UPDATE `%s` SET CPSpawn = '%s', Interior = %d WHERE ID = %d", CurrentBaseSet, cp, GetPlayerInterior(playerid), baseid);
5390 db_free_result(db_query(sqliteconnection, iString));
5391
5392 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has configured CP/Interior position for {FFFFFF}Base ID: %d", Player[playerid][Name], baseid);
5393 SendClientMessageToAll(-1, iString);
5394
5395 LoadBases();
5396 return 1;
5397 } case 5: {
5398 if(isnull(Params[1]) || !IsNumeric(Params[1])) return SendUsageMessage(playerid,"/base [name] [Base ID] [Name]");
5399 if(isnull(BaseName)) return SendUsageMessage(playerid,"/base [name] [Base ID] [Name]");
5400
5401 new baseid;
5402 baseid = strval(Params[1]);
5403
5404 if(baseid > MAX_BASES) return SendErrorMessage(playerid,"That base doesn't exist.");
5405 if(!BExist[baseid]) return SendErrorMessage(playerid,"That base doesn't exist.");
5406
5407 format(iString, sizeof(iString), "UPDATE `%s` SET Name = '%s' WHERE ID = %d", CurrentBaseSet, BaseName, baseid);
5408 db_free_result(db_query(sqliteconnection, iString));
5409
5410 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has configured Name for {FFFFFF}Base ID: %d", Player[playerid][Name], baseid);
5411 SendClientMessageToAll(-1, iString);
5412
5413 LoadBases();
5414 return 1;
5415 } case 6: {
5416 if(isnull(Params[1]) || !IsNumeric(Params[1])) return SendUsageMessage(playerid,"/base [delete] [Base ID]");
5417
5418 new baseid;
5419 baseid = strval(Params[1]);
5420
5421 if(baseid > MAX_BASES) return SendErrorMessage(playerid,"That base doesn't exist.");
5422 if(!BExist[baseid]) return SendErrorMessage(playerid,"That base doesn't exist.");
5423
5424 format(iString, sizeof(iString), "DELETE FROM `%s` WHERE ID = %d", CurrentBaseSet, baseid);
5425 db_free_result(db_query(sqliteconnection, iString));
5426
5427 BExist[baseid] = false;
5428
5429 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has deleted {FFFFFF}Base ID: %d from base set: %s", Player[playerid][Name], baseid, CurrentBaseSet);
5430 SendClientMessageToAll(-1, iString);
5431
5432 LoadBases();
5433 return 1;
5434 }
5435 }
5436 return 1;
5437}
5438
5439YCMD:permlock(playerid, params[], help)
5440{
5441 if(Player[playerid][Level] < 5 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
5442 if(help)
5443 {
5444 SendCommandHelpMessage(playerid, "toggle server permanent lock status.");
5445 return 1;
5446 }
5447
5448 if(ServerLocked == false)
5449 {
5450 SendErrorMessage(playerid,"Server must be locked first. Use /lock !");
5451 }
5452 else
5453 {
5454 new iString[128];
5455 if(PermLocked == true)
5456 {
5457 PermLocked = false;
5458 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has disabled the server permanent lock!",Player[playerid][Name]);
5459 SendClientMessageToAll(-1, iString);
5460 }
5461 else
5462 {
5463 PermLocked = true;
5464 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has made the server lock permanent!",Player[playerid][Name]);
5465 SendClientMessageToAll(-1, iString);
5466 }
5467 }
5468 LogAdminCommand("permlock", playerid, INVALID_PLAYER_ID);
5469 return 1;
5470}
5471
5472YCMD:lock(playerid, params[], help)
5473{
5474 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
5475 if(help)
5476 {
5477 SendCommandHelpMessage(playerid, "lock the server.");
5478 return 1;
5479 }
5480 if(ServerLocked == false) {
5481
5482 if(isnull(params)) return SendUsageMessage(playerid,"/lock [Password]");
5483 if(strlen(params) > MAX_SERVER_PASS_LENGH) return SendErrorMessage(playerid,"Server password is too long.");
5484
5485 format(ServerPass, sizeof(ServerPass), "password %s", params);
5486 SendRconCommand(ServerPass);
5487
5488 ServerLocked = true;
5489 PermLocked = false;
5490
5491 new iString[144];
5492 format(iString, sizeof(iString), "%sServer Pass: ~r~%s", MAIN_TEXT_COLOUR, params);
5493 TextDrawSetString(LockServerTD, iString);
5494
5495 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has locked the server with password: {FFFFFF}%s",Player[playerid][Name], params);
5496 SendClientMessageToAll(-1, iString);
5497
5498 }
5499 else
5500 {
5501 CallLocalFunction("OnPlayerCommandText", "ds", playerid, "/unlock");
5502 }
5503 LogAdminCommand("lock", playerid, INVALID_PLAYER_ID);
5504 return 1;
5505}
5506
5507YCMD:unlock(playerid, params[], help)
5508{
5509 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
5510 if(help)
5511 {
5512 SendCommandHelpMessage(playerid, "unlock the server.");
5513 return 1;
5514 }
5515 if(ServerLocked == false) return SendErrorMessage(playerid,"Server is not locked.");
5516
5517 new iString[128];
5518 SendRconCommand("password 0");
5519 TextDrawSetString(LockServerTD, sprintf("%sServer: ~r~Unlocked", MAIN_TEXT_COLOUR));
5520
5521 ServerLocked = false;
5522 PermLocked = false;
5523
5524 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has unlocked the server.", Player[playerid][Name]);
5525 SendClientMessageToAll(-1, iString);
5526 LogAdminCommand("unlock", playerid, INVALID_PLAYER_ID);
5527 return 1;
5528}
5529
5530YCMD:resetscores(playerid, params[], help)
5531{
5532 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
5533 if(help)
5534 {
5535 SendCommandHelpMessage(playerid, "reset team scores.");
5536 return 1;
5537 }
5538
5539 TeamScore[ATTACKER] = 0;
5540 TeamScore[DEFENDER] = 0;
5541 CurrentRound = 0;
5542
5543 UpdateTeamScoreTextDraw();
5544 UpdateRoundsPlayedTextDraw();
5545 UpdateTeamNameTextDraw();
5546
5547 ClearPlayerVariables();
5548
5549 foreach(new i : Player) {
5550 Player[i][TotalKills] = 0;
5551 Player[i][TotalDeaths] = 0;
5552 Player[i][TotalDamage] = 0;
5553 Player[i][RoundPlayed] = 0;
5554 Player[i][TotalBulletsFired] = 0;
5555 Player[i][TotalshotsHit] = 0;
5556 }
5557 new iString[64];
5558 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has reset the scores.", Player[playerid][Name]);
5559 SendClientMessageToAll(-1, iString);
5560 return 1;
5561}
5562
5563YCMD:view(playerid, params[], help)
5564{
5565 if(help)
5566 {
5567 SendCommandHelpMessage(playerid, "put you in base/arena spectator mode.");
5568 return 1;
5569 }
5570 if(Current != -1) return SendErrorMessage(playerid,"Can't use while round is on.");
5571
5572 new Params[64], Round, CommandID, iString[256];
5573 if(sscanf(params, "sd", Params, Round)) return SendUsageMessage(playerid,"/view [base | arena] [Round ID]");
5574
5575 if(strcmp(Params, "base", true) == 0) CommandID = 1;
5576 else if(strcmp(Params, "arena", true) == 0) CommandID = 2;
5577 else return SendUsageMessage(playerid,"/view [base | arena] [Round ID]");
5578
5579 if(Player[playerid][InDM] == true) {
5580 Player[playerid][InDM] = false;
5581 Player[playerid][DMReadd] = 0;
5582 }
5583 if(Player[playerid][InDuel] == true) return SendErrorMessage(playerid,"Can't use this command during duel. Use /rq instead.");
5584
5585 if(Player[playerid][Spectating] == true) StopSpectate(playerid);
5586
5587 Player[playerid][SpectatingRound] = Round;
5588 switch (CommandID) {
5589 case 1: { //base
5590 if(Round > MAX_BASES) return SendErrorMessage(playerid,"That base does not exist.");
5591 if(!BExist[Round]) return SendErrorMessage(playerid,"That base does not exist.");
5592
5593 SetPlayerInterior(playerid, BInterior[Round]);
5594 SetPlayerCameraLookAt(playerid,BCPSpawn[Round][0],BCPSpawn[Round][1],BCPSpawn[Round][2]);
5595 SetPlayerCameraPos(playerid,BCPSpawn[Round][0]+100,BCPSpawn[Round][1],BCPSpawn[Round][2]+80);
5596 SetPlayerPos(playerid, BCPSpawn[Round][0], BCPSpawn[Round][1], BCPSpawn[Round][2]);
5597
5598 Player[playerid][SpectatingType] = BASE;
5599 format(iString, sizeof(iString), "%sBase ~n~%s%s (ID: ~r~~h~%d%s)", MAIN_TEXT_COLOUR, MAIN_TEXT_COLOUR, BName[Round], Round, MAIN_TEXT_COLOUR);
5600 PlayerTextDrawSetString(playerid, TD_RoundSpec[playerid], iString);
5601
5602 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"is spectating Base: {FFFFFF}%s (ID: %d)", Player[playerid][Name], BName[Round], Round);
5603 } case 2: { // Arena
5604 if(Round > MAX_ARENAS) return SendErrorMessage(playerid,"That arena does not exist.");
5605 if(!AExist[Round]) return SendErrorMessage(playerid,"That arena does not exist.");
5606
5607 SetPlayerCameraLookAt(playerid,ACPSpawn[Round][0],ACPSpawn[Round][1],ACPSpawn[Round][2]);
5608 SetPlayerCameraPos(playerid,ACPSpawn[Round][0]+100,ACPSpawn[Round][1],ACPSpawn[Round][2]+80);
5609 SetPlayerPos(playerid, ACPSpawn[Round][0], ACPSpawn[Round][1], ACPSpawn[Round][2]);
5610 SetPlayerInterior(playerid, AInterior[Round]);
5611
5612 Player[playerid][SpectatingType] = ARENA;
5613 format(iString, sizeof(iString), "%sArena ~n~%s%s (ID: ~r~~h~%d%s)", MAIN_TEXT_COLOUR, MAIN_TEXT_COLOUR, AName[Round], Round, MAIN_TEXT_COLOUR);
5614 PlayerTextDrawSetString(playerid, TD_RoundSpec[playerid], iString);
5615
5616 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"is spectating Arena: {FFFFFF}%s (ID: %d)", Player[playerid][Name], AName[Round], Round);
5617 }
5618
5619 }
5620 SendClientMessageToAll(-1, iString);
5621 SendClientMessage(playerid, -1, "Switch between rounds using LMB & RMB. Go normal mode using /specoff. Press Jump key to spawn in CP.");
5622 Player[playerid][Spectating] = true;
5623
5624 return 1;
5625}
5626
5627forward RemoveTempNetcheck(playerid);
5628public RemoveTempNetcheck(playerid)
5629{
5630 Player[playerid][TempNetcheck] = false;
5631 return 1;
5632}
5633
5634YCMD:netcheckme(playerid, params[], help)
5635{
5636 if(help)
5637 {
5638 SendCommandHelpMessage(playerid, "temporarily netcheck yourself until an admin does it for you");
5639 return 1;
5640 }
5641 if(Player[playerid][TempNetcheck] != false)
5642 {
5643 SendErrorMessage(playerid, "Netcheck is already temporarily disabled on you");
5644 return 1;
5645 }
5646 if(!Player[playerid][NetCheck])
5647 {
5648 SendErrorMessage(playerid, "You've already got netcheck disabled on you");
5649 return 1;
5650 }
5651 if(Player[playerid][CanNetcheck] == -1)
5652 {
5653 new tmp;
5654 gettime(tmp, Player[playerid][CanNetcheck], tmp);
5655 Player[playerid][TempNetcheck] = true;
5656 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s (%d) "COL_PRIM"requests permanent net-check.", Player[playerid][Name], playerid));
5657 SendClientMessage(playerid, -1, ""COL_PRIM"You've been temporarily netchecked for 15 seconds only.");
5658 SetTimerEx("RemoveTempNetcheck", 15000, false, "i", playerid);
5659 }
5660 else
5661 {
5662 new tmp, minute;
5663 gettime(tmp, minute, tmp);
5664 if((minute - Player[playerid][CanNetcheck]) > 20)
5665 {
5666 Player[playerid][TempNetcheck] = true;
5667 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s (%d) "COL_PRIM"requests permanent net-check.", Player[playerid][Name], playerid));
5668 SendClientMessage(playerid, -1, ""COL_PRIM"You've been temporarily netchecked for 15 seconds only.");
5669 Player[playerid][CanNetcheck] = minute;
5670 }
5671 else
5672 SendErrorMessage(playerid, "You must wait 20 minutes before you can netcheck yourself again");
5673 }
5674 return 1;
5675}
5676
5677YCMD:netcheck(playerid, params[], help)
5678{
5679 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
5680 if(help)
5681 {
5682 SendCommandHelpMessage(playerid, "toggle net status check on a specific player.");
5683 return 1;
5684 }
5685 if(isnull(params) || !IsNumeric(params)) return SendUsageMessage(playerid,"/netcheck [Player ID]");
5686
5687 new pID = strval(params);
5688 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player is not connected.");
5689
5690 new iString[130];
5691 if(Player[pID][NetCheck] == 1) {
5692 Player[pID][NetCheck] = 0;
5693 Player[pID][FPSCheck] = 0;
5694 Player[pID][PingCheck] = 0;
5695 Player[pID][PLCheck] = 0;
5696 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has disabled Net-Check on: {FFFFFF}%s", Player[playerid][Name], Player[pID][Name]);
5697 } else {
5698 Player[pID][NetCheck] = 1;
5699 Player[pID][FPSCheck] = 1;
5700 Player[pID][PingCheck] = 1;
5701 Player[pID][PLCheck] = 1;
5702 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has enabled Net-Check on: {FFFFFF}%s", Player[playerid][Name], Player[pID][Name]);
5703 }
5704 SendClientMessageToAll(-1, iString);
5705
5706 format(iString, sizeof(iString), "UPDATE Players SET NetCheck = %d WHERE Name = '%q'", Player[pID][NetCheck], Player[pID][Name]);
5707 db_free_result(db_query(sqliteconnection, iString));
5708
5709 LogAdminCommand("netcheck", playerid, pID);
5710 return 1;
5711}
5712
5713YCMD:fpscheck(playerid, params[], help)
5714{
5715 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
5716 if(help)
5717 {
5718 SendCommandHelpMessage(playerid, "toggle FPS status check on a specific player.");
5719 return 1;
5720 }
5721 if(isnull(params) || !IsNumeric(params)) return SendUsageMessage(playerid,"/fpscheck [Player ID]");
5722
5723 new pID = strval(params);
5724 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player is not connected.");
5725 if(Player[pID][NetCheck] == 0) return SendErrorMessage(playerid, "That player has netcheck disabled on him.");
5726
5727 new iString[128];
5728 if(Player[pID][FPSCheck] == 1) {
5729 Player[pID][FPSCheck] = 0;
5730 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has disabled FPS-Check on: {FFFFFF}%s", Player[playerid][Name], Player[pID][Name]);
5731 } else {
5732 Player[pID][FPSCheck] = 1;
5733 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has enabled FPS-Check on: {FFFFFF}%s", Player[playerid][Name], Player[pID][Name]);
5734 }
5735 SendClientMessageToAll(-1, iString);
5736 LogAdminCommand("fpscheck", playerid, pID);
5737 return 1;
5738}
5739
5740YCMD:pingcheck(playerid, params[], help)
5741{
5742 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
5743 if(help)
5744 {
5745 SendCommandHelpMessage(playerid, "toggle ping status check on a specific player.");
5746 return 1;
5747 }
5748 if(isnull(params) || !IsNumeric(params)) return SendUsageMessage(playerid,"/pingcheck [Player ID]");
5749
5750 new pID = strval(params);
5751 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player is not connected.");
5752 if(Player[pID][NetCheck] == 0) return SendErrorMessage(playerid, "That player has netcheck disabled on him.");
5753
5754 new iString[128];
5755 if(Player[pID][PingCheck] == 1) {
5756 Player[pID][PingCheck] = 0;
5757 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has disabled Ping-Check on: {FFFFFF}%s", Player[playerid][Name], Player[pID][Name]);
5758 } else {
5759 Player[pID][PingCheck] = 1;
5760 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has enabled Ping-Check on: {FFFFFF}%s", Player[playerid][Name], Player[pID][Name]);
5761 }
5762 SendClientMessageToAll(-1, iString);
5763 LogAdminCommand("pingcheck", playerid, pID);
5764 return 1;
5765}
5766
5767YCMD:plcheck(playerid, params[], help)
5768{
5769 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
5770 if(help)
5771 {
5772 SendCommandHelpMessage(playerid, "toggle packet-loss status check on a specific player.");
5773 return 1;
5774 }
5775 if(isnull(params) || !IsNumeric(params)) return SendUsageMessage(playerid,"/plcheck [Player ID]");
5776
5777 new pID = strval(params);
5778 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player is not connected.");
5779 if(Player[pID][NetCheck] == 0) return SendErrorMessage(playerid, "That player has netcheck disabled on him.");
5780
5781 new iString[128];
5782 if(Player[pID][PLCheck] == 1) {
5783 Player[pID][PLCheck] = 0;
5784 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has disabled PL-Check on: {FFFFFF}%s", Player[playerid][Name], Player[pID][Name]);
5785 } else {
5786 Player[pID][PLCheck] = 1;
5787 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has enabled PL-Check on: {FFFFFF}%s", Player[playerid][Name], Player[pID][Name]);
5788 }
5789 SendClientMessageToAll(-1, iString);
5790 LogAdminCommand("plcheck", playerid, pID);
5791 return 1;
5792}
5793
5794YCMD:leaguecmds(playerid, params[], help)
5795{
5796 if(help)
5797 {
5798 SendCommandHelpMessage(playerid, "display league commands.");
5799 return 1;
5800 }
5801 #if defined _league_included
5802 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"is viewing the commands of league {FFFFFF}(/leaguecmds)", Player[playerid][Name]));
5803 ShowPlayerDialog(playerid,
5804 1300,
5805 DIALOG_STYLE_TABLIST_HEADERS,
5806 "League commands",
5807 "Command\tInfo\n\
5808 /leaguestats\tTo show statistics of league\n\
5809 /createclan\tRegister a league clan\n\
5810 /joinclan\tJoin a league clan\n\
5811 /clanapps\tView clan join requests\n\
5812 /acceptclan\tAccept players in your league clan\n\
5813 /claninfo\tGet info about a league clan\n\
5814 /kickclan\tKick someone from your league clan (You can kick yourself)\n\
5815 /setcoleader\tSet someone as coleader for your clan (to remove coleader, use /setcoleader none)",
5816 "OK", "");
5817 #else
5818 SendErrorMessage(playerid, "This version is not supported and cannot run league features.");
5819 #endif
5820 return 1;
5821}
5822
5823YCMD:claninfo(playerid, params[], help)
5824{
5825 if(help)
5826 {
5827 SendCommandHelpMessage(playerid, "view clan info.");
5828 return 1;
5829 }
5830 #if defined _league_included
5831 if(isnull(params))
5832 return SendUsageMessage(playerid,"/claninfo [Clan Tag]");
5833
5834 if(strlen(params) > 6)
5835 return SendErrorMessage(playerid,"A clan tag must be very short");
5836
5837 if(strfind(params, " ", true) != -1 || strfind(params, "[", true) != -1 || strfind(params, "]", true) != -1)
5838 return SendErrorMessage(playerid,"Spaces and brackets [] are not allowed in a clan tag");
5839
5840 ClanInfo(playerid, params);
5841 #else
5842 SendErrorMessage(playerid, "This version is not supported and cannot run league features.");
5843 #endif
5844 return 1;
5845}
5846
5847YCMD:acceptclan(playerid, params[], help)
5848{
5849 if(help)
5850 {
5851 SendCommandHelpMessage(playerid, "accept someone in your clan.");
5852 return 1;
5853 }
5854 #if defined _league_included
5855 if(!IsPlayerInAnyClan(playerid))
5856 return SendErrorMessage(playerid, "You're not in a clan.");
5857 new NameToAccept[MAX_PLAYER_NAME];
5858 if(sscanf(params, "s", NameToAccept))
5859 return SendUsageMessage(playerid,"/acceptclan [Player Name]");
5860
5861 AcceptClan(playerid, NameToAccept);
5862 #else
5863 SendErrorMessage(playerid, "This version is not supported and cannot run league features.");
5864 #endif
5865 return 1;
5866}
5867
5868YCMD:setcoleader(playerid, params[], help)
5869{
5870 if(help)
5871 {
5872 SendCommandHelpMessage(playerid, "Set someone as coleader for your own clan.");
5873 return 1;
5874 }
5875 #if defined _league_included
5876 if(!IsPlayerInAnyClan(playerid))
5877 return SendErrorMessage(playerid, "You're not in a clan.");
5878 new NameToCo[MAX_PLAYER_NAME];
5879 if(sscanf(params, "s", NameToCo))
5880 return SendUsageMessage(playerid,"/setcoleader [Player Name] ");
5881
5882 SetCoLeader(playerid, NameToCo);
5883 #else
5884 SendErrorMessage(playerid, "This version is not supported and cannot run league features.");
5885 #endif
5886 return 1;
5887}
5888
5889YCMD:kickclan(playerid, params[], help)
5890{
5891 if(help)
5892 {
5893 SendCommandHelpMessage(playerid, "kick someone from your clan.");
5894 return 1;
5895 }
5896 #if defined _league_included
5897 if(!IsPlayerInAnyClan(playerid))
5898 return SendErrorMessage(playerid, "You're not in a clan.");
5899 new NameToKick[MAX_PLAYER_NAME];
5900 if(sscanf(params, "s", NameToKick))
5901 return SendUsageMessage(playerid,"/kickclan [Player Name]");
5902
5903 KickClan(playerid, NameToKick);
5904 #else
5905 SendErrorMessage(playerid, "This version is not supported and cannot run league features.");
5906 #endif
5907 return 1;
5908}
5909
5910YCMD:clanapps(playerid, params[], help)
5911{
5912 if(help)
5913 {
5914 SendCommandHelpMessage(playerid, "view clan join requests.");
5915 return 1;
5916 }
5917 #if defined _league_included
5918 if(!IsPlayerInAnyClan(playerid))
5919 return SendErrorMessage(playerid, "You're not in a clan.");
5920
5921 ViewClanApps(playerid);
5922 #else
5923 SendErrorMessage(playerid, "This version is not supported and cannot run league features.");
5924 #endif
5925 return 1;
5926}
5927
5928YCMD:joinclan(playerid, params[], help)
5929{
5930 if(help)
5931 {
5932 SendCommandHelpMessage(playerid, "join a league clan.");
5933 return 1;
5934 }
5935 #if defined _league_included
5936 if(IsPlayerInAnyClan(playerid))
5937 return SendErrorMessage(playerid, "You're already in a clan.");
5938
5939 if(isnull(params))
5940 return SendUsageMessage(playerid,"/createclan [Clan Tag]");
5941
5942 if(strlen(params) > 6)
5943 return SendErrorMessage(playerid,"A clan tag must be very short");
5944
5945 if(strfind(params, " ", true) != -1 || strfind(params, "[", true) != -1 || strfind(params, "]", true) != -1)
5946 return SendErrorMessage(playerid,"Spaces and brackets [] are not allowed in a clan tag");
5947
5948 JoinClan(playerid, params);
5949 #else
5950 SendErrorMessage(playerid, "This version is not supported and cannot run league features.");
5951 #endif
5952 return 1;
5953}
5954
5955YCMD:createclan(playerid, params[], help)
5956{
5957 if(help)
5958 {
5959 SendCommandHelpMessage(playerid, "register a league clan.");
5960 return 1;
5961 }
5962 #if defined _league_included
5963 if(IsPlayerInAnyClan(playerid))
5964 return SendErrorMessage(playerid, "You're already in a clan.");
5965
5966 if(isnull(params))
5967 return SendUsageMessage(playerid,"/createclan [Clan Tag]");
5968
5969 if(strlen(params) > 6)
5970 return SendErrorMessage(playerid,"A clan tag must be very short");
5971
5972 if(strfind(params, " ", true) != -1 || strfind(params, "[", true) != -1 || strfind(params, "]", true) != -1)
5973 return SendErrorMessage(playerid,"Spaces and brackets [] are not allowed in a clan tag");
5974
5975 CreateClan(playerid, params);
5976 #else
5977 SendErrorMessage(playerid, "This version is not supported and cannot run league features.");
5978 #endif
5979 return 1;
5980}
5981
5982YCMD:leaguestats(playerid, params[], help)
5983{
5984 if(help)
5985 {
5986 SendCommandHelpMessage(playerid, "display league mini scoreboard.");
5987 return 1;
5988 }
5989 #if defined _league_included
5990 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"is viewing the statistics of league {FFFFFF}(/leaguestats)", Player[playerid][Name]));
5991 ShowLeagueStatsDialog(playerid);
5992 #else
5993 SendErrorMessage(playerid, "This version is not supported and cannot run league features.");
5994 #endif
5995 return 1;
5996}
5997
5998YCMD:war(playerid, params[], help)
5999{
6000 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
6001 if(help)
6002 {
6003 SendCommandHelpMessage(playerid, "start a match quickly.");
6004 return 1;
6005 }
6006 if(Current != -1) return SendErrorMessage(playerid,"Can't use this command while round is on.");
6007
6008 new TeamAName[7], TeamBName[7];
6009 if(sscanf(params, "zz", TeamAName, TeamBName)) return SendUsageMessage(playerid,"/war ([Team A] [Team B]) (end)");
6010 if(strcmp(TeamAName, "end", true) == 0 && isnull(TeamBName) && WarMode == true)
6011 {
6012 SetTimer("WarEnded", 5000, 0);
6013 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"has set the match to end!", Player[playerid][Name]));
6014 SendClientMessageToAll(-1, ""COL_PRIM"Preparing End Match Results..");
6015 SendClientMessageToAll(-1, ""COL_PRIM"If you missed the results, type {FFFFFF}/showagain");
6016
6017 return 1;
6018 } else if(isnull(TeamBName)) return SendUsageMessage(playerid,"/war ([Team A] [Team B]) (end)");
6019
6020 if(WarMode == true) return SendErrorMessage(playerid,"War-mode is already on.");
6021 if(strlen(TeamAName) > 6 || strlen(TeamBName) > 6) return SendErrorMessage(playerid,"Team name is too long.");
6022 if(strfind(TeamAName, "~") != -1 || strfind(TeamBName, "~") != -1) return SendErrorMessage(playerid,"~ not allowed.");
6023
6024 format(TeamName[ATTACKER], 7, TeamAName);
6025 format(TeamName[ATTACKER_SUB], 11, "%s Sub", TeamName[ATTACKER]);
6026 format(TeamName[DEFENDER], 7, TeamBName);
6027 format(TeamName[DEFENDER_SUB], 11, "%s Sub", TeamName[DEFENDER]);
6028 UpdateTeamScoreTextDraw();
6029 UpdateRoundsPlayedTextDraw();
6030 UpdateTeamNameTextDraw();
6031 new iString[144];
6032 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has enabled the Match-Mode.", Player[playerid][Name]);
6033 SendClientMessageToAll(-1, iString);
6034 UpdateTeamNamesTextdraw();
6035
6036 MatchRoundsStarted = 0;
6037 for( new i = 0; i < 101; i++ )
6038 {
6039 MatchRoundsRecord[ i ][ round__ID ] = -1;
6040 MatchRoundsRecord[ i ][ round__type ] = -1;
6041 MatchRoundsRecord[ i ][ round__completed ] = false;
6042 }
6043
6044 WarMode = true;
6045 #if defined _league_included
6046 UpdateOnlineMatchesList(true);
6047 #endif
6048 RoundPaused = false;
6049 format(iString, sizeof iString, "%sWar Mode: ~r~ON", MAIN_TEXT_COLOUR);
6050 TextDrawSetString(WarModeText, iString);
6051
6052 new toTeam = ATTACKER, oppositeTeam = DEFENDER;
6053 new
6054 MyVehicle = -1,
6055 Seat;
6056
6057 foreach(new i : Player)
6058 {
6059 Player[i][TotalKills] = 0;
6060 Player[i][TotalDeaths] = 0;
6061 Player[i][TotalDamage] = 0;
6062 Player[i][RoundPlayed] = 0;
6063 Player[i][TotalBulletsFired] = 0;
6064 Player[i][TotalshotsHit] = 0;
6065
6066 if(Player[i][InDuel] == true || Player[i][IsAFK] || !Player[i][Spawned])
6067 continue;
6068
6069 MyVehicle = -1;
6070 switch(strfind(Player[i][Name], TeamName[ATTACKER], true))
6071 {
6072 case -1: // tag not found
6073 {
6074 if(Player[i][Team] != oppositeTeam)
6075 {
6076 if(IsPlayerInAnyVehicle(i))
6077 {
6078 MyVehicle = GetPlayerVehicleID(i);
6079 Seat = GetPlayerVehicleSeat(i);
6080 }
6081 Player[i][Team] = oppositeTeam;
6082 SwitchTeamFix(i, false, false);
6083 if(MyVehicle != -1)
6084 PutPlayerInVehicle(i, MyVehicle, Seat);
6085 }
6086 }
6087 default: // found tag
6088 {
6089 if(Player[i][Team] != toTeam)
6090 {
6091 if(IsPlayerInAnyVehicle(i))
6092 {
6093 MyVehicle = GetPlayerVehicleID(i);
6094 Seat = GetPlayerVehicleSeat(i);
6095 }
6096 Player[i][Team] = toTeam;
6097 SwitchTeamFix(i, false, false);
6098 if(MyVehicle != -1)
6099 PutPlayerInVehicle(i, MyVehicle, Seat);
6100 }
6101 }
6102 }
6103 }
6104 ShowMatchScoreBoard();
6105 return 1;
6106}
6107
6108
6109YCMD:teamname(playerid, params[], help)
6110{
6111 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
6112 if(help)
6113 {
6114 SendCommandHelpMessage(playerid, "change the name of a team.");
6115 return 1;
6116 }
6117 new TeamID, TeamNamee[24];
6118 if(sscanf(params, "ds", TeamID, TeamNamee)) return SendUsageMessage(playerid,"/teamname [Team ID] [Name] (0 = ATTACKER | 1 = Defender)");
6119
6120 if(TeamID < 0 || TeamID > 1) return SendErrorMessage(playerid,"Invalid Team ID.");
6121 if(strlen(TeamNamee) > 6) return SendErrorMessage(playerid,"Team name is too long.");
6122 if(strfind(TeamNamee, "~") != -1) return SendErrorMessage(playerid,"~ not allowed.");
6123
6124 new iString[144];
6125 switch(TeamID) {
6126 case 0: {
6127 format(TeamName[ATTACKER], 24, TeamNamee);
6128 format(TeamName[ATTACKER_SUB], 24, "%s Sub", TeamName[ATTACKER]);
6129 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has set ATTACKER team name to: {FFFFFF}%s", Player[playerid][Name], TeamName[ATTACKER]);
6130 SendClientMessageToAll(-1, iString);
6131 } case 1: {
6132 format(TeamName[DEFENDER], 24, TeamNamee);
6133 format(TeamName[DEFENDER_SUB], 24, "%s Sub", TeamName[DEFENDER]);
6134 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has set defender team name to: {FFFFFF}%s", Player[playerid][Name], TeamName[DEFENDER]);
6135 SendClientMessageToAll(-1, iString);
6136 }
6137 }
6138
6139 #if defined _league_included
6140 if(WarMode)
6141 UpdateOnlineMatchesList(true);
6142 #endif
6143
6144 UpdateTeamNamesTextdraw();
6145 UpdateTeamNameTextDraw();
6146 return 1;
6147}
6148
6149
6150YCMD:tr(playerid, params[], help)
6151{
6152 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
6153 if(help)
6154 {
6155 SendCommandHelpMessage(playerid, "set total rounds of the current match.");
6156 return 1;
6157 }
6158 if(isnull(params) || !IsNumeric(params)) return SendUsageMessage(playerid,"/tr [Total Rounds]");
6159
6160 new Value = strval(params);
6161 if(Value < CurrentRound || Value < 1 || Value > 100) return SendErrorMessage(playerid,"Invalid total rounds.");
6162
6163 TotalRounds = Value;
6164
6165 new iString[128];
6166 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has changed the total rounds to: {FFFFFF}%d", Player[playerid][Name], TotalRounds);
6167 SendClientMessageToAll(-1, iString);
6168
6169 UpdateRoundsPlayedTextDraw();
6170 return 1;
6171}
6172
6173YCMD:cr(playerid, params[], help)
6174{
6175 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
6176 if(help)
6177 {
6178 SendCommandHelpMessage(playerid, "set the current round of the current match.");
6179 return 1;
6180 }
6181 if(isnull(params) || !IsNumeric(params)) return SendUsageMessage(playerid,"/cr [Current Round]");
6182
6183 new Value = strval(params);
6184 if(Value > TotalRounds || Value < 0) return SendErrorMessage(playerid,"Invalid current round.");
6185
6186 CurrentRound = Value;
6187
6188 new iString[128];
6189 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has changed the current round to: {FFFFFF}%d", Player[playerid][Name], CurrentRound);
6190 SendClientMessageToAll(-1, iString);
6191
6192 UpdateRoundsPlayedTextDraw();
6193 return 1;
6194}
6195
6196YCMD:serverpassword(playerid, params[], help)
6197{
6198 if(help)
6199 {
6200 SendCommandHelpMessage(playerid, "display server password for everyone connected.");
6201 return 1;
6202 }
6203 if(ServerLocked)
6204 {
6205 new str[128];
6206 format(str, sizeof(str), ""COL_PRIM"Current Server Password: {FFFFFF}%s", ServerPass[9]);
6207 SendClientMessageToAll(-1, str);
6208 }
6209 return 1;
6210}
6211
6212YCMD:freeze(playerid, params[], help)
6213{
6214 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
6215 if(help)
6216 {
6217 SendCommandHelpMessage(playerid, "freeze a player.");
6218 return 1;
6219 }
6220 if(isnull(params) || !IsNumeric(params)) return SendUsageMessage(playerid,"/freeze [Player ID]");
6221
6222 new pID = strval(params);
6223 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player isnt connected.");
6224
6225 TogglePlayerControllable(pID, 0);
6226
6227 new iString[128];
6228 format(iString,sizeof(iString),"{FFFFFF}%s "COL_PRIM"has frozen {FFFFFF}%s", Player[playerid][Name], Player[pID][Name]);
6229 SendClientMessageToAll(-1, iString);
6230
6231 LogAdminCommand("freeze", playerid, pID);
6232 return 1;
6233}
6234
6235YCMD:giveweapon(playerid, params[], help)
6236{
6237 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
6238 if(help)
6239 {
6240 SendCommandHelpMessage(playerid, "give a weapon to a specific player.");
6241 return 1;
6242 }
6243 new pID, Weapon[50], Ammo, iString[180];
6244
6245 if(sscanf(params, "isd", pID, Weapon, Ammo)) return SendUsageMessage(playerid,"/giveweapon [Player ID] [Weapon Name] [Ammo]");
6246
6247 if(Ammo < 0 || Ammo > 9999) return SendErrorMessage(playerid,"Invalid Ammo.");
6248
6249 new WeaponID = GetWeaponID(Weapon);
6250 if(WeaponID < 1 || WeaponID > 46 || WeaponID == 19 || WeaponID == 20 || WeaponID == 21 || WeaponID == 22) return SendErrorMessage(playerid,"Invalid Weapon Name.");
6251 if(WeaponID == 44 || WeaponID == 45) return SendErrorMessage(playerid,"We don't do this shit around here.");
6252
6253 GivePlayerWeapon(pID, WeaponID, Ammo);
6254
6255 format(iString,sizeof(iString),"{FFFFFF}%s "COL_PRIM"has given {FFFFFF}%s "COL_PRIM"| Weapon: {FFFFFF}%s "COL_PRIM"- Ammo: {FFFFFF}%d", Player[playerid][Name], Player[pID][Name], WeaponNames[WeaponID], Ammo);
6256 SendClientMessageToAll(-1, iString);
6257 LogAdminCommand("giveweapon", playerid, pID);
6258 return 1;
6259}
6260
6261YCMD:giveallgun(playerid, params[], help)
6262{
6263 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
6264 if(help)
6265 {
6266 SendCommandHelpMessage(playerid, "give everyone a specific weapon.");
6267 return 1;
6268 }
6269 new iString[180], Ammo, Weapon[50];
6270 if(sscanf(params, "sd", Weapon, Ammo)) return SendUsageMessage(playerid,"/giveallgun [Weapon Name] [Ammo]");
6271
6272 if(Ammo < 0 || Ammo > 9999) return SendErrorMessage(playerid,"Invalid Ammo.");
6273
6274 new weapon = GetWeaponID(Weapon);
6275 if(weapon < 1 || weapon > 46 || weapon == 19 || weapon == 20 || weapon == 21 || weapon == 22) return SendErrorMessage(playerid,"Invalid weapon name.");
6276 if(weapon == 44 || weapon == 45) return SendErrorMessage(playerid,"We don't do this shit around here.");
6277
6278 foreach(new i : Player) {
6279 if(Player[i][InDM] == false && Player[i][InDuel] == false && Player[i][Spectating] == false) {
6280 GivePlayerWeapon(i, weapon, Ammo);
6281 }
6282 }
6283
6284 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has given everyone | Weapon: {FFFFFF}%s "COL_PRIM"- Ammo: {FFFFFF}%d",Player[playerid][Name] ,WeaponNames[weapon], Ammo);
6285 SendClientMessageToAll(-1, iString);
6286 LogAdminCommand("giveallgun", playerid, INVALID_PLAYER_ID);
6287 return 1;
6288}
6289
6290YCMD:unfreeze(playerid, params[], help)
6291{
6292 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
6293 if(help)
6294 {
6295 SendCommandHelpMessage(playerid, "unfreeze a player.");
6296 return 1;
6297 }
6298 if(isnull(params) || !IsNumeric(params)) return SendUsageMessage(playerid,"/unfreeze [Player ID]");
6299
6300 new pID = strval(params);
6301 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player isnt connected.");
6302
6303 TogglePlayerControllable(pID, 1);
6304
6305
6306 new iString[128];
6307 format(iString,sizeof(iString),"{FFFFFF}%s "COL_PRIM"has unfrozen {FFFFFF}%s", Player[playerid][Name], Player[pID][Name]);
6308 SendClientMessageToAll(-1, iString);
6309
6310 LogAdminCommand("unfreeze", playerid, pID);
6311 return 1;
6312}
6313
6314YCMD:roundtime(playerid,params[], help)
6315{
6316 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
6317 if(help)
6318 {
6319 SendCommandHelpMessage(playerid, "set the round time.");
6320 return 1;
6321 }
6322 if(Current != -1) return SendErrorMessage(playerid,"Can't use the command while round is on.");
6323 if(isnull(params) || !IsNumeric(params)) return SendUsageMessage(playerid,"/roundtime [Mints (1 - 30)]");
6324
6325 new rTime = strval(params);
6326 if(rTime < 1 || rTime > 30) return SendErrorMessage(playerid,"Round time can't be lower than 1 or higher than 30 mints.");
6327
6328 ConfigRoundTime = rTime;
6329
6330 new iString[128];
6331 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'Round Time'", rTime);
6332 db_free_result(db_query(sqliteconnection, iString));
6333
6334 format(iString,sizeof(iString),"{FFFFFF}%s "COL_PRIM"has changed the round time to: {FFFFFF}%d mints", Player[playerid][Name], rTime);
6335 SendClientMessageToAll(-1, iString);
6336 LogAdminCommand("roundtime", playerid, INVALID_PLAYER_ID);
6337 return 1;
6338}
6339
6340YCMD:cptime(playerid, params[], help)
6341{
6342 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
6343 if(help)
6344 {
6345 SendCommandHelpMessage(playerid, "set the time needed to capture a checkpoint.");
6346 return 1;
6347 }
6348 if(isnull(params) || !IsNumeric(params)) return SendUsageMessage(playerid,"/cptime [Seconds (1 - 60)]");
6349
6350 new cpTime = strval(params);
6351 if(cpTime < 1 || cpTime > 60) return SendErrorMessage(playerid,"CP time can't be lower than 1 or higher than 60 seconds.");
6352
6353 ConfigCPTime = cpTime;
6354 CurrentCPTime = ConfigCPTime + 1;
6355
6356 new iString[144];
6357 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'CP Time'", cpTime);
6358 db_free_result(db_query(sqliteconnection, iString));
6359
6360 format(iString,sizeof(iString),"{FFFFFF}%s "COL_PRIM"has changed the CP time to: {FFFFFF}%d seconds", Player[playerid][Name], cpTime);
6361 SendClientMessageToAll(-1, iString);
6362 LogAdminCommand("cptime", playerid, INVALID_PLAYER_ID);
6363 return 1;
6364}
6365
6366YCMD:lastplayed(playerid,params[], help)
6367{
6368 if(help)
6369 {
6370 SendCommandHelpMessage(playerid, "display the ID of the last played round.");
6371 return 1;
6372 }
6373 if(Current < 0)
6374 {
6375 SendErrorMessage(playerid, "Invalid round ID.");
6376 return 1;
6377 }
6378 SendClientMessageToAll(-1, sprintf(""COL_PRIM"Last Played: {FFFFFF}%d "COL_PRIM"| Requested by {FFFFFF}%s "COL_PRIM"| Type {FFFFFF}/start last "COL_PRIM"to start it!", ServerLastPlayed, Player[playerid][Name]));
6379 return 1;
6380}
6381
6382YCMD:rounds(playerid,params[], help)
6383{
6384 if(help)
6385 {
6386 SendCommandHelpMessage(playerid, "display a record of rounds of a match.");
6387 return 1;
6388 }
6389 new str1[1024];
6390 for( new id = 0; id < 101; id++ ) {
6391 if( MatchRoundsRecord[ id ][ round__ID ] != -1 ) {
6392 switch( MatchRoundsRecord[ id ][ round__type ] ) {
6393 /*base*/case 0: format( str1, sizeof(str1), "%s\n{FFFFFF}%d.%s%s [ID:%d]", str1, id, (MatchRoundsRecord[ id ][ round__completed ]) ? ("") : ("{FAF62D}"), BName[ MatchRoundsRecord[ id ][ round__ID ] ], MatchRoundsRecord[ id ][ round__ID ] );
6394 /*arena*/case 1: format( str1, sizeof(str1), "%s\n{B5B5B5}%d.%s%s [ID:%d]", str1, id, (MatchRoundsRecord[ id ][ round__completed ]) ? ("") : ("{FAF62D}"), AName[ MatchRoundsRecord[ id ][ round__ID ] ], MatchRoundsRecord[ id ][ round__ID ] );
6395 default: format( str1, sizeof(str1), "%s\nWadaffuq?", str1 );
6396 }
6397 }
6398 }
6399 ShowPlayerDialog( playerid, 1300, DIALOG_STYLE_MSGBOX, "Rounds played in current/last match", str1, "Close", "" );
6400 return 1;
6401}
6402
6403
6404YCMD:dance(playerid, params[], help)
6405{
6406 if(help)
6407 {
6408 SendCommandHelpMessage(playerid, "shake your fucking ass.");
6409 return 1;
6410 }
6411 if(Current != -1) return SendErrorMessage(playerid,"Can't use this command while in round.");
6412 if(isnull(params) || !IsNumeric(params)) return SendUsageMessage(playerid,"/dance [1-4]");
6413
6414 new dID = strval(params);
6415 if(dID < 1 || dID > 4) return SendErrorMessage(playerid,"Invalid dance ID.");
6416
6417 switch(dID) {
6418 case 1: SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DANCE1);
6419 case 2: SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DANCE2);
6420 case 3: SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DANCE3);
6421 case 4: SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DANCE4);
6422 }
6423 return 1;
6424}
6425
6426YCMD:piss(playerid, params[], help)
6427{
6428 if(help)
6429 {
6430 SendCommandHelpMessage(playerid, "piss.");
6431 return 1;
6432 }
6433 SetPlayerSpecialAction(playerid, 68);
6434 return 1;
6435}
6436
6437
6438YCMD:resetallguns(playerid, params[], help)
6439{
6440 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
6441 if(help)
6442 {
6443 SendCommandHelpMessage(playerid, "reset guns of all players.");
6444 return 1;
6445 }
6446 foreach(new i : Player) {
6447 if(Player[i][InDM] == false && Player[i][InDuel] == false && Player[i][Spectating] == false) {
6448 ResetPlayerWeapons(i);
6449 }
6450 }
6451
6452 new iString[64];
6453 format(iString,sizeof(iString),"{FFFFFF}%s "COL_PRIM"has reset everyone's weapons.", Player[playerid][Name]);
6454 SendClientMessageToAll(-1, iString);
6455 LogAdminCommand("resetallguns", playerid, INVALID_PLAYER_ID);
6456 return 1;
6457}
6458
6459YCMD:replace(playerid, params[], help)
6460{
6461 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
6462 if(help)
6463 {
6464 SendCommandHelpMessage(playerid, "replace players whether they're connected to the server or not.");
6465 return 1;
6466 }
6467 if(Current == -1) return SendErrorMessage(playerid,"Round is not active.");
6468
6469 new str[2048];
6470 foreach(new i : Player)
6471 {
6472 if(Player[i][InDuel] == true || Player[i][IsAFK] || !Player[i][Spawned])
6473 continue;
6474
6475 format(str, sizeof str, "%s%s\n", str, Player[i][Name]);
6476 }
6477 ShowPlayerDialog(playerid, DIALOG_REPLACE_FIRST, DIALOG_STYLE_LIST, ""COL_PRIM"Player to add", str, "Process", "Cancel");
6478 LogAdminCommand("replace", playerid, INVALID_PLAYER_ID);
6479 return 1;
6480}
6481
6482YCMD:cc(playerid, params[], help)
6483{
6484 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
6485 if(help)
6486 {
6487 SendCommandHelpMessage(playerid, "clear the chat.");
6488 return 1;
6489 }
6490 ClearChat();
6491
6492 new iString[128];
6493 format(iString,sizeof(iString),"{FFFFFF}%s "COL_PRIM"has cleared chat.", Player[playerid][Name]);
6494 SendClientMessageToAll(-1, iString);
6495 LogAdminCommand("cc", playerid, INVALID_PLAYER_ID);
6496 return 1;
6497}
6498
6499YCMD:vworld(playerid, params[], help)
6500{
6501 if(help)
6502 {
6503 SendCommandHelpMessage(playerid, "teleport you to a virtual world.");
6504 return 1;
6505 }
6506 if(Player[playerid][InDM] == false) return SendErrorMessage(playerid,"Can't use this command while you are not in a DM.");
6507 if(Player[playerid][InDuel] == true) return SendErrorMessage(playerid,"Can't use this command during duel.");
6508 if(Player[playerid][Playing] == true) return SendErrorMessage(playerid,"Can't use this command while playing.");
6509 if(Player[playerid][Spectating] == true) return 1;
6510
6511 if(isnull(params) || !IsNumeric(params)) return SendUsageMessage(playerid,"/vworld [World ID]");
6512
6513 new vID = strval(params);
6514 if(vID <= 5) return SendErrorMessage(playerid,"Pick a virtual world above 5.");
6515
6516 SetPlayerVirtualWorld(playerid, vID);
6517 return 1;
6518}
6519
6520
6521YCMD:skin(playerid,params[])
6522{
6523 new queryBuffer[98];
6524 new skinid, string[128];
6525
6526 if(sscanf(params, "d", skinid)) return SendClientMessage(playerid, -1, "{ffff00}=USAGE=: {ffffff}/skin <skinid>");
6527 if(skinid < 0 || skinid > 299) return SendClientMessage(playerid, 0xFF000000, "{ff0000}=ERROR=: {ffffff}Choose a skin between 0 to 299!");
6528 Player[playerid][pSkin] = skinid;
6529 format(queryBuffer, sizeof queryBuffer, "UPDATE 'ur players table' SET `skin` = '%d' WHERE `Username` = '%s'", skinid, Player[playerid][Name]);
6530 SetPlayerSkin(playerid, skinid);
6531 format(string, sizeof(string), "{ffff00}=INFO=: {ffffff}You have changed your skin to %d", skinid);
6532 db_free_result(db_query(sqliteconnection, queryBuffer));
6533 SendClientMessage(playerid, -1, string);
6534 return 1;
6535}
6536
6537YCMD:pchannel(playerid, params[], help)
6538{
6539 if(help)
6540 {
6541 SendCommandHelpMessage(playerid, "display players in a channel.");
6542 return 1;
6543 }
6544 if(Player[playerid][ChatChannel] != -1)
6545 {
6546 new iString[200];
6547
6548 foreach(new i : Player)
6549 {
6550 if(Player[i][ChatChannel] == Player[playerid][ChatChannel])
6551 {
6552 format(iString, sizeof(iString), "%s%s (%d)\n", iString, Player[i][Name], i);
6553 }
6554 }
6555
6556 ShowPlayerDialog(playerid,1300,DIALOG_STYLE_MSGBOX,""COL_PRIM"Players in current channel", iString, "Close","");
6557 }
6558 else
6559 {
6560 SendErrorMessage(playerid,"You are not in any channel. To join one, use /cchannel");
6561 }
6562
6563 return 1;
6564}
6565
6566YCMD:cchannel(playerid, params[], help)
6567{
6568 if(help)
6569 {
6570 SendCommandHelpMessage(playerid, "enable you to join a chat channel.");
6571 return 1;
6572 }
6573 if(isnull(params))
6574 {
6575 if(Player[playerid][ChatChannel] != -1)
6576 {
6577 new iString[128];
6578 format(iString, sizeof(iString), ""COL_PRIM"Current chat channel ID: {FFFFFF}%d"COL_PRIM". To join another one use /cchannel [Channel ID]", Player[playerid][ChatChannel]);
6579 SendClientMessage(playerid, -1, iString);
6580 }
6581 else
6582 {
6583 SendUsageMessage(playerid,"/cchannel [Channel ID]");
6584 }
6585 return 1;
6586 }
6587
6588 new Channel = strval(params);
6589 if(Channel < 0 || Channel > MAX_CHANNELS)
6590 return SendErrorMessage(playerid, sprintf("Invalid channel ID (Maximum chat channels: %d)", MAX_CHANNELS));
6591
6592 Player[playerid][ChatChannel] = Channel;
6593
6594 new str[144];
6595
6596 format(str, sizeof(str), "UPDATE Players SET ChatChannel = %d WHERE Name = '%q'", Channel, Player[playerid][Name]);
6597 db_free_result(db_query(sqliteconnection, str));
6598
6599 SendClientMessage(playerid, -1, ""COL_PRIM"You've joined the chat channel, to know who else is here, type {FFFFFF}/pchannel. "COL_PRIM"Use ^ symbol to chat!");
6600
6601 format(str, sizeof(str), "{FFFFFF}%s "COL_PRIM"has joined chat channel ID: {FFFFFF}%d.", Player[playerid][Name], Channel);
6602 foreach(new i : Player)
6603 {
6604 SendClientMessage(i, -1, str);
6605 }
6606 return 1;
6607}
6608
6609YCMD:togglechat(playerid, params[], help)
6610{
6611 if(help)
6612 {
6613 SendCommandHelpMessage(playerid, "enable or disable main chat.");
6614 return 1;
6615 }
6616
6617 if(ChatDisabled)
6618 {
6619 ChatDisabled = false;
6620 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"has enabled main chat!", Player[playerid][Name]));
6621 }
6622 else
6623 {
6624 ChatDisabled = true;
6625 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"has disabled main chat! (Press {FFFFFF}Y "COL_PRIM"to ask for round pause)", Player[playerid][Name]));
6626 }
6627 LogAdminCommand("togglechat", playerid, INVALID_PLAYER_ID);
6628 return 1;
6629}
6630
6631YCMD:muteall(playerid, params[], help)
6632{
6633 if(help)
6634 {
6635 SendCommandHelpMessage(playerid, "mute everyone.");
6636 return 1;
6637 }
6638 foreach(new i : Player)
6639 Player[i][Mute] = true;
6640
6641 new admName[MAX_PLAYER_NAME];
6642 GetPlayerName(playerid, admName, sizeof(admName));
6643 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"has muted everyone! (Press {FFFFFF}Y "COL_PRIM"to ask for round pause)", admName));
6644 LogAdminCommand("muteall", playerid, INVALID_PLAYER_ID);
6645 return 1;
6646}
6647
6648YCMD:unmuteall(playerid, params[], help)
6649{
6650 if(help)
6651 {
6652 SendCommandHelpMessage(playerid, "unmute everyone.");
6653 return 1;
6654 }
6655 foreach(new i : Player)
6656 Player[i][Mute] = false;
6657
6658 new admName[MAX_PLAYER_NAME];
6659 GetPlayerName(playerid, admName, sizeof(admName));
6660 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"has unmuted everyone!", admName));
6661 LogAdminCommand("unmuteall", playerid, INVALID_PLAYER_ID);
6662 return 1;
6663}
6664
6665YCMD:mute(playerid,params[], help)
6666{
6667 if(help)
6668 {
6669 SendCommandHelpMessage(playerid, "mute a specific player.");
6670 return 1;
6671 }
6672 new pID, Reason[128], iString[180];
6673 if(sscanf(params, "is", pID, Reason)) return SendUsageMessage(playerid,"/mute [Player ID] [Reason]");
6674 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player isnt connected.");
6675
6676 if(Player[pID][Mute] == true) return SendErrorMessage(playerid,"That player is already muted.");
6677 if(Player[playerid][Level] <= Player[pID][Level] && playerid != pID) return SendErrorMessage(playerid,"That player is higher admin level than you.");
6678
6679 Player[pID][Mute] = true;
6680
6681
6682 if(strlen(Reason)) format(iString, sizeof(iString),"{FFFFFF}%s "COL_PRIM"has muted {FFFFFF}%s "COL_PRIM"| Reason: {FFFFFF}%s",Player[playerid][Name],Player[pID][Name], Reason);
6683 else format(iString, sizeof(iString),"{FFFFFF}%s "COL_PRIM"has muted {FFFFFF}%s "COL_PRIM"| Reason: {FFFFFF}No reason given.",Player[playerid][Name],Player[pID][Name]);
6684 SendClientMessageToAll(-1,iString);
6685 LogAdminCommand("mute", playerid, pID);
6686 return 1;
6687}
6688
6689YCMD:unmute(playerid, params[], help)
6690{
6691 if(help)
6692 {
6693 SendCommandHelpMessage(playerid, "unmute a specific player.");
6694 return 1;
6695 }
6696 new pID = strval(params);
6697
6698 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player isnt connected.");
6699 if(Player[pID][Mute] == false) return SendErrorMessage(playerid,"That player is not muted.");
6700
6701 Player[pID][Mute] = false;
6702
6703 new iString[128];
6704 format(iString, sizeof(iString),"{FFFFFF}%s "COL_PRIM"has unmuted {FFFFFF}%s",Player[playerid][Name],Player[pID][Name]);
6705 SendClientMessageToAll(-1,iString);
6706 LogAdminCommand("unmute", playerid, pID);
6707 return 1;
6708}
6709
6710YCMD:slap(playerid,params[], help)
6711{
6712 if(Player[playerid][Level] < 2 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
6713 if(help)
6714 {
6715 SendCommandHelpMessage(playerid, "slap a player ass a few meters in the air.");
6716 return 1;
6717 }
6718 if(isnull(params)) return SendUsageMessage(playerid,"/slap [Player ID]");
6719
6720 new sid = strval(params);
6721 if(!IsPlayerConnected(sid)) return SendErrorMessage(playerid,"That player isnt connected.");
6722
6723 new Float:Pos[3];
6724 GetPlayerPos(sid,Pos[0],Pos[1],Pos[2]);
6725 SetPlayerPos(sid,Pos[0],Pos[1],Pos[2]+10);
6726
6727 PlayerPlaySound(playerid,1190,0.0,0.0,0.0);
6728 PlayerPlaySound(sid,1190,0.0,0.0,0.0);
6729
6730 new iString[128];
6731 format(iString, sizeof(iString),"{FFFFFF}%s "COL_PRIM"has slapped {FFFFFF}%s",Player[playerid][Name],Player[sid][Name]);
6732 SendClientMessageToAll(-1,iString);
6733 LogAdminCommand("slap", playerid, sid);
6734 return 1;
6735}
6736
6737
6738YCMD:explode(playerid,params[], help)
6739{
6740 if(Player[playerid][Level] < 2 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level to do that.");
6741 if(help)
6742 {
6743 SendCommandHelpMessage(playerid, "explode a specific player.");
6744 return 1;
6745 }
6746 if(isnull(params)) return SendUsageMessage(playerid,"/explode [Player ID]");
6747
6748 new eid = strval(params);
6749 if(!IsPlayerConnected(eid)) return SendErrorMessage(playerid,"That Player Isn't Connected.");
6750
6751 new Float:Pos[3];
6752 GetPlayerPos(eid, Pos[0], Pos[1], Pos[2]);
6753 CreateExplosion(Pos[0], Pos[1], Pos[2], 7, 6.0);
6754
6755 new iString[128];
6756 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has exploded {FFFFFF}%s",Player[playerid][Name],Player[eid][Name]);
6757 SendClientMessageToAll(-1, iString);
6758 LogAdminCommand("explode", playerid, eid);
6759 return 1;
6760}
6761
6762YCMD:getpara(playerid, params[], help)
6763{
6764 if(help)
6765 {
6766 SendCommandHelpMessage(playerid, "give you a parachute.");
6767 return 1;
6768 }
6769 GivePlayerWeapon(playerid, WEAPON_PARACHUTE, 1);
6770 SendClientMessage(playerid, -1, "{FFFFFF}Parachute given.");
6771 return 1;
6772}
6773
6774YCMD:para(playerid, params[], help)
6775{
6776 if(help)
6777 {
6778 SendCommandHelpMessage(playerid, "get rid of your parachute.");
6779 return 1;
6780 }
6781 RemovePlayerWeapon(playerid, 46);
6782 SendClientMessage(playerid, -1, "{FFFFFF}Parachute removed.");
6783 return 1;
6784}
6785
6786YCMD:fixcp(playerid, params[], help)
6787{
6788 if(help)
6789 {
6790 SendCommandHelpMessage(playerid, "re-load the checkpoint for you.");
6791 return 1;
6792 }
6793 if(RCArena == true) return SendErrorMessage(playerid, "There are no checkpoints in RC arenas!");
6794 if(GameType == ARENA && !CPInArena) return SendErrorMessage(playerid, "Checkpoint in arenas option is disabled in this server");
6795 if(Player[playerid][Playing])
6796 {
6797 SetTimerEx("SetCPForPlayer", 1000, false, "i", playerid);
6798 }
6799 return 1;
6800}
6801
6802
6803YCMD:pm(playerid,params[], help)
6804{
6805 if(help)
6806 {
6807 SendCommandHelpMessage(playerid, "send a private message to a specific player.");
6808 return 1;
6809 }
6810 if(Player[playerid][Mute] == true) return SendErrorMessage(playerid,"You are muted.");
6811
6812 new recieverid, message[144];
6813
6814 if(sscanf(params,"is",recieverid, message)) return SendUsageMessage(playerid,"/pm [Player ID] [Message]");
6815 if(!IsPlayerConnected(recieverid)) return SendErrorMessage(playerid,"Player not connected.");
6816
6817 if(Player[recieverid][blockedid] == playerid) return SendErrorMessage(playerid,"That player has blocked PMs from you.");
6818 if(Player[recieverid][blockedall] == true) return SendErrorMessage(playerid,"That player has blocked PMs from everyone.");
6819 if(Player[recieverid][Mute] == true && Player[playerid][Team] != Player[recieverid][Team]) return SendErrorMessage(playerid, "That player is currently muted and can not reply!");
6820 if(strlen(message) > 103) return SendErrorMessage(playerid, "This message is quite long (max: 103 characters).");
6821
6822 new str[144];
6823 format(str, sizeof(str), "PM from %s (%d): %s", Player[playerid][Name], playerid, message);
6824 SendClientMessage(recieverid, 0xFFF000FF, str);
6825
6826 SendClientMessage(recieverid, -1, ""COL_PRIM"Use {FFFFFF}/r [Message]"COL_PRIM" to reply quicker!");
6827 Player[recieverid][LastMsgr] = playerid;
6828
6829 format(str, sizeof(str),"PM to %s (%d): %s", Player[recieverid][Name], recieverid, message);
6830 SendClientMessage(playerid, 0xECDE00FF, str);
6831
6832 PlayerPlaySound(recieverid, 1054, 0, 0, 0);
6833 return 1;
6834}
6835
6836YCMD:r(playerid,params[], help)
6837{
6838 if(help)
6839 {
6840 SendCommandHelpMessage(playerid, "reply to someone's private message to you.");
6841 return 1;
6842 }
6843
6844 new replytoid = Player[playerid][LastMsgr];
6845 if(replytoid == -1) return SendErrorMessage(playerid,"You have not received any private messages since last login.");
6846 if(Player[playerid][Mute] == true && Player[playerid][Team] != Player[replytoid][Team]) return SendErrorMessage(playerid,"You are muted.");
6847 if(!IsPlayerConnected(replytoid)) return SendErrorMessage(playerid,"That player is not connected.");
6848 if(Player[replytoid][blockedid] == playerid) return SendErrorMessage(playerid,"That player has blocked PMs from you.");
6849 if(Player[replytoid][blockedall] == true) return SendErrorMessage(playerid,"That player has blocked PMs from everyone.");
6850
6851 if(isnull(params)) return SendUsageMessage(playerid,"/r [Message]");
6852 if(strlen(params) > 103) return SendErrorMessage(playerid, "This message is quite long (max: 103 characters).");
6853
6854 new str[144];
6855 format(str, sizeof(str), "PM from %s (%d): %s", Player[playerid][Name], playerid, params);
6856 SendClientMessage(replytoid, 0xFFF000FF, str);
6857
6858 format(str, sizeof(str),"PM to %s (%d): %s", Player[replytoid][Name], replytoid, params);
6859 SendClientMessage(playerid, 0xECDE00FF, str);
6860
6861 Player[replytoid][LastMsgr] = playerid;
6862
6863 PlayerPlaySound(replytoid,1054,0,0,0);
6864 return 1;
6865}
6866
6867YCMD:blockpm(playerid, params[], help)
6868{
6869 if(help)
6870 {
6871 SendCommandHelpMessage(playerid, "block private messages from a specific player.");
6872 return 1;
6873 }
6874 if(isnull(params)) return SendUsageMessage(playerid,"/blockpm [Player ID]");
6875
6876 new pID = strval(params);
6877 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player isn't connected.");
6878
6879 Player[playerid][blockedid] = pID;
6880
6881 new String[128];
6882 format(String,sizeof(String),""COL_PRIM"You have blocked PMs from {FFFFFF}%s", Player[pID][Name]);
6883 SendClientMessage(playerid,-1,String);
6884
6885 return 1;
6886}
6887
6888YCMD:blockpmall(playerid, params[], help)
6889{
6890 if(help)
6891 {
6892 SendCommandHelpMessage(playerid, "block private messages from everyone.");
6893 return 1;
6894 }
6895 switch(Player[playerid][blockedall])
6896 {
6897 case false:
6898 {
6899 Player[playerid][blockedall] = true;
6900 SendClientMessage(playerid,-1,""COL_PRIM"You have blocked PMs from everyone. To unblock type /blockpmall one more time!");
6901 }
6902 case true:
6903 {
6904 Player[playerid][blockedall] = false;
6905 SendClientMessage(playerid,-1,""COL_PRIM"PMs enabled!");
6906 }
6907 }
6908 return 1;
6909}
6910
6911YCMD:admins(playerid, params[], help)
6912{
6913 if(help)
6914 {
6915 SendCommandHelpMessage(playerid, "display online admins.");
6916 return 1;
6917 }
6918 new iString[356] = '\0';
6919
6920 foreach(new i : Player) {
6921 if(Player[i][Level] > 0) {
6922 format(iString, sizeof(iString), "%s{FFFFFF}%s ({FF3333}%d{FFFFFF})\n", iString, Player[i][Name], Player[i][Level]);
6923 }
6924 }
6925
6926 format(iString, sizeof(iString), "%s\n\n"COL_PRIM"Rcon Admins\n", iString);
6927
6928 foreach(new i : Player) {
6929 if(IsPlayerAdmin(i)) {
6930 format(iString, sizeof(iString), "%s{FFFFFF}%s\n", iString, Player[i][Name]);
6931 }
6932 }
6933
6934 if(strlen(iString) < 2) ShowPlayerDialog(playerid,1300,DIALOG_STYLE_MSGBOX,"{FFFFFF}Admins Online", "No Admins online.","Ok","");
6935 else ShowPlayerDialog(playerid,1300,DIALOG_STYLE_MSGBOX,"{FFFFFF}Admins Online", iString,"Ok","");
6936
6937 return 1;
6938}
6939
6940YCMD:connstats( playerid, params[], help)
6941{
6942 if(Player[playerid][Level] < 3 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher level admin to do that.");
6943 if(help)
6944 {
6945 SendCommandHelpMessage(playerid, "fetch connection statistics of a player.");
6946 return 1;
6947 }
6948 new pID = INVALID_PLAYER_ID;
6949
6950 if( sscanf(params, "d", pID) ) return SendUsageMessage(playerid,"/connStats <playerid>");
6951 if( !IsPlayerConnected(pID) ) return SendErrorMessage(playerid,"** Invalid PlayerID! ");
6952
6953 new szString[80];
6954 format(szString, sizeof(szString), "(%d)%s's current connection status: %i.", pID, Player[pID][Name], NetStats_ConnectionStatus(pID) );
6955 SendClientMessage(playerid, -1, szString);
6956 return 1;
6957}
6958
6959YCMD:serverstats(playerid, params[], help)
6960{
6961 if(help)
6962 {
6963 SendCommandHelpMessage(playerid, "fetch server network statistics.");
6964 return 1;
6965 }
6966 new stats[450];
6967 GetNetworkStats(stats, sizeof(stats)); // get the servers networkstats
6968 ShowPlayerDialog(playerid, 1300, DIALOG_STYLE_MSGBOX, "Server Network Stats", stats, "Close", "");
6969 return 1;
6970}
6971
6972YCMD:maxpacket(playerid, params[], help)
6973{
6974 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
6975 if(help)
6976 {
6977 SendCommandHelpMessage(playerid, "set maximum packet-loss limit.");
6978 return 1;
6979 }
6980 if(isnull(params)) return SendUsageMessage(playerid,"/maxpacket [Maximum Packetloss]");
6981
6982 new Float:iPacket = floatstr(params);
6983 if(iPacket <= 0 || iPacket > 10) return SendErrorMessage(playerid,"Packetloss value can be between 0 and 10 maximum.");
6984
6985 Max_Packetloss = iPacket;
6986
6987 new iString[144];
6988 format(iString, sizeof(iString), "UPDATE Configs SET Value = %.2f WHERE Option = 'Maximum Packetloss'", iPacket);
6989 db_free_result(db_query(sqliteconnection, iString));
6990
6991 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has changed maximum packet-loss to: {FFFFFF}%.2f", Player[playerid][Name], iPacket);
6992 SendClientMessageToAll(-1, iString);
6993 LogAdminCommand("maxpacket", playerid, INVALID_PLAYER_ID);
6994 return 1;
6995}
6996
6997YCMD:maxping(playerid, params[], help)
6998{
6999 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
7000 if(help)
7001 {
7002 SendCommandHelpMessage(playerid, "set maximum ping limit.");
7003 return 1;
7004 }
7005 if(isnull(params) || !IsNumeric(params)) return SendUsageMessage(playerid,"/maxping [Maximum Ping]");
7006
7007 new iPacket = strval(params);
7008 if(iPacket <= 0 || iPacket > 500) return SendErrorMessage(playerid,"Ping limit can be between 0 and 500 maximum.");
7009
7010 Max_Ping = iPacket;
7011
7012 new iString[128];
7013 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'Maximum Ping'", Max_Ping);
7014 db_free_result(db_query(sqliteconnection, iString));
7015
7016 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has changed maximum ping limit to: {FFFFFF}%d", Player[playerid][Name], iPacket);
7017 SendClientMessageToAll(-1, iString);
7018 LogAdminCommand("maxping", playerid, INVALID_PLAYER_ID);
7019 return 1;
7020}
7021
7022YCMD:minfps(playerid, params[], help)
7023{
7024 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
7025 if(help)
7026 {
7027 SendCommandHelpMessage(playerid, "set minimum FPS limit.");
7028 return 1;
7029 }
7030 if(isnull(params) || !IsNumeric(params)) return SendUsageMessage(playerid,"/minfps [Minimum FPS]");
7031
7032 new iPacket = strval(params);
7033 if(iPacket < 20 || iPacket > 90) return SendErrorMessage(playerid,"FPS limit can be between 20 and 90 maximum.");
7034
7035 Min_FPS = iPacket;
7036
7037 new iString[128];
7038 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'Minimum FPS'", Min_FPS);
7039 db_free_result(db_query(sqliteconnection, iString));
7040
7041 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has changed minimum FPS limit to: {FFFFFF}%d", Player[playerid][Name], iPacket);
7042 SendClientMessageToAll(-1, iString);
7043 LogAdminCommand("minfps", playerid, INVALID_PLAYER_ID);
7044 return 1;
7045}
7046
7047YCMD:allvs(playerid,params[], help)
7048{
7049 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
7050 if(help)
7051 {
7052 SendCommandHelpMessage(playerid, "set everyone versus a specific team.");
7053 return 1;
7054 }
7055 if(Current != -1) return SendErrorMessage(playerid,"Can't use while round is active.");
7056 if(isnull(params)) return SendUsageMessage(playerid,"/allvs [Team ID | 0 = ATTACKER, 1 = Defender] [Tag/Name]");
7057
7058 new toTeam, TempTeamName[6];
7059 sscanf(params, "is", toTeam, TempTeamName);
7060 if(toTeam < 0 || toTeam > 1)
7061 return SendErrorMessage(playerid,"Available teams: 0 for ATTACKER and 1 for defender");
7062
7063 switch(toTeam)
7064 {
7065 case 0:
7066 toTeam = ATTACKER;
7067 case 1:
7068 toTeam = DEFENDER;
7069 }
7070
7071 new oppositeTeam;
7072 switch(toTeam)
7073 {
7074 case ATTACKER:
7075 oppositeTeam = DEFENDER;
7076 case DEFENDER:
7077 oppositeTeam = ATTACKER;
7078 }
7079 new
7080 ct[2],
7081 MyVehicle = -1,
7082 Seat;
7083
7084 ct[0] = 0;
7085 ct[1] = 0;
7086 foreach(new i : Player)
7087 {
7088 if(Player[i][InDuel] == true || Player[i][IsAFK] || !Player[i][Spawned])
7089 continue;
7090
7091 if(Player[i][Team] != ATTACKER && Player[i][Team] != DEFENDER)
7092 continue;
7093
7094 MyVehicle = -1;
7095 switch(strfind(Player[i][Name], TempTeamName, true))
7096 {
7097 case -1: // tag not found
7098 {
7099 if(Player[i][Team] != oppositeTeam)
7100 {
7101 if(IsPlayerInAnyVehicle(i))
7102 {
7103 MyVehicle = GetPlayerVehicleID(i);
7104 Seat = GetPlayerVehicleSeat(i);
7105 }
7106 Player[i][Team] = oppositeTeam;
7107 SwitchTeamFix(i, false, false);
7108 ct[0] ++;
7109 if(MyVehicle != -1)
7110 PutPlayerInVehicle(i, MyVehicle, Seat);
7111 }
7112 }
7113 default: // found tag
7114 {
7115 if(Player[i][Team] != toTeam)
7116 {
7117 if(IsPlayerInAnyVehicle(i))
7118 {
7119 MyVehicle = GetPlayerVehicleID(i);
7120 Seat = GetPlayerVehicleSeat(i);
7121 }
7122 Player[i][Team] = toTeam;
7123 SwitchTeamFix(i, false, false);
7124 ct[1] ++;
7125 if(MyVehicle != -1)
7126 PutPlayerInVehicle(i, MyVehicle, Seat);
7127 }
7128 }
7129 }
7130 }
7131 MessageBox(playerid, MSGBOX_TYPE_MIDDLE, "~b~~h~~h~all-vs result", sprintf("%d players were swapped to the team you specified whilst %d were swapped to the opposite team", ct[1], ct[0]), 4000);
7132
7133 new str[128];
7134 format(str, sizeof(str),"{FFFFFF}%s "COL_PRIM"has changed the teams to {FFFFFF}\"%s\" vs all.", Player[playerid][Name], TempTeamName);
7135 SendClientMessageToAll(-1, str);
7136 return 1;
7137}
7138
7139
7140YCMD:move(playerid, params[], help)
7141{
7142 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
7143 if(help)
7144 {
7145 SendCommandHelpMessage(playerid, "teleport a player to another player.");
7146 return 1;
7147 }
7148 new pID[2];
7149 if(sscanf(params, "dd", pID[0], pID[1])) return SendUsageMessage(playerid,"/move [PlayerToMove ID] [PlayerToMoveTo ID]");
7150 if(!IsPlayerConnected(pID[0]) || !IsPlayerConnected(pID[1])) return SendErrorMessage(playerid,"One of the player IDs you used is not connected.");
7151
7152 new Float:Pos[3];
7153 GetPlayerPos(pID[1], Pos[0], Pos[1], Pos[2]);
7154
7155 SetPlayerInterior(pID[0], GetPlayerInterior(pID[1]));
7156 SetPlayerVirtualWorld(pID[0], GetPlayerVirtualWorld(pID[1]));
7157
7158 if(GetPlayerState(pID[0]) == 2) {
7159 SetVehiclePos(GetPlayerVehicleID(pID[0]), Pos[0]+3, Pos[1], Pos[2]);
7160 LinkVehicleToInterior(GetPlayerVehicleID(pID[0]),GetPlayerInterior(pID[1]));
7161 SetVehicleVirtualWorld(GetPlayerVehicleID(pID[0]),GetPlayerVirtualWorld(pID[1]));
7162 }
7163 else SetPlayerPos(pID[0], Pos[0]+2, Pos[1], Pos[2]);
7164
7165 new iString[144];
7166 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has moved {FFFFFF}%s "COL_PRIM"to {FFFFFF}%s", Player[playerid][Name], Player[pID[0]][Name], Player[pID[1]][Name]);
7167 SendClientMessageToAll( -1, iString);
7168 LogAdminCommand("move", playerid, pID[0]);
7169 return 1;
7170}
7171
7172YCMD:jetpack(playerid,params[], help)
7173{
7174 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
7175 if(help)
7176 {
7177 SendCommandHelpMessage(playerid, "spawn a jetpack.");
7178 return 1;
7179 }
7180 if(Player[playerid][Playing] == true)
7181 {
7182 #if !defined _league_included
7183 return SendErrorMessage(playerid,"Can't use this command in round.");
7184 #else
7185 if(LeagueMode)
7186 {
7187 if(!PlayerShop[playerid][SHOP_JETPACK])
7188 {
7189 return SendErrorMessage(playerid, "You have not purchased a jetpack from league shop (/shop)!");
7190 }
7191 else
7192 {
7193 PlayerShop[playerid][SHOP_JETPACK] = false;
7194 SetPlayerSpecialAction(playerid, 2);
7195 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"has spawned a jetpack from league shop (/shop)", Player[playerid][Name]));
7196 return 1;
7197 }
7198 }
7199 else
7200 {
7201 return SendErrorMessage(playerid,"Can't use this command in round.");
7202 }
7203 #endif
7204 }
7205
7206 new pID = strval(params);
7207 if(isnull(params)) pID = playerid;
7208
7209 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player isn't connected.");
7210
7211 new iString[128];
7212 format(iString,sizeof(iString),"{FFFFFF}%s "COL_PRIM"gave a jetpack to {FFFFFF}%s", Player[playerid][Name], Player[pID][Name]);
7213 SendClientMessageToAll(-1, iString);
7214
7215 SetPlayerSpecialAction(pID, 2);
7216 return 1;
7217}
7218
7219YCMD:deathdiss(playerid, params[], help)
7220{
7221 if(help)
7222 {
7223 SendCommandHelpMessage(playerid, "set a disrespect message to be shown for players whom you kill.");
7224 return 1;
7225 }
7226 if(isnull(params)) return SendUsageMessage(playerid,"/deathdiss [Disrespect Message]");
7227 if(strlen(params) <= 3) return SendErrorMessage(playerid,"Too short!");
7228 if(strlen(params) >= 32) return SendErrorMessage(playerid,"Too long!");
7229
7230 DeathMessageStr[playerid][0] = EOS;
7231 strcat(DeathMessageStr[playerid], params, 32);
7232
7233 new iString[128];
7234 format(iString, sizeof(iString), "UPDATE `Players` SET `DeathMessage` = '%q' WHERE `Name` = '%q'", params, Player[playerid][Name]);
7235 db_free_result(db_query(sqliteconnection, iString));
7236 Player[playerid][HasDeathQuote] = true;
7237 SendClientMessage(playerid, -1, "Death diss message has been changed successfully!");
7238 return 1;
7239}
7240
7241YCMD:fightstyle(playerid, params[], help)
7242{
7243 if(help)
7244 {
7245 SendCommandHelpMessage(playerid, "change your fighting style.");
7246 return 1;
7247 }
7248 if(isnull(params) || !IsNumeric(params))
7249 {
7250 SendUsageMessage(playerid,"/fightstyle [FightStyle ID]");
7251 SendClientMessage(playerid, -1, "0 Normal | 1 Boxing | 2 KungFu | 3 Knee-head | 4 Grab-kick | 5 Elbow-kick");
7252 return 1;
7253 }
7254 new fsID = strval(params);
7255 if(fsID < 0 || fsID > 5) return SendErrorMessage(playerid,"Invalid FightStyle ID (From 0 to 5 are valid)");
7256
7257 Player[playerid][FightStyle] = FightStyleIDs[fsID];
7258 SetPlayerFightingStyle(playerid, Player[playerid][FightStyle]);
7259 new iString[128];
7260 format(iString, sizeof(iString), "UPDATE `Players` SET `FightStyle` = '%d' WHERE `Name` = '%q'", Player[playerid][FightStyle], Player[playerid][Name]);
7261 db_free_result(db_query(sqliteconnection, iString));
7262 SendClientMessage(playerid, -1, sprintf(""COL_PRIM"FightStyle changed to: {FFFFFF}%s", FightStyleNames[fsID]));
7263 return 1;
7264}
7265
7266YCMD:reloaddb(playerid, params[], help)
7267{
7268 if(Player[playerid][Level] < 3 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
7269 if(help)
7270 {
7271 SendCommandHelpMessage(playerid, "re-load the server database. This might have dangerous results.");
7272 return 1;
7273 }
7274 if(DatabaseSetToReload == true)
7275 return SendErrorMessage(playerid, "Database is already set to reload.");
7276 SetDatabaseToReload(playerid);
7277 return 1;
7278}
7279
7280forward FakePacketRenovationEnd(playerid, Float:fakepacket, bool:message);
7281public FakePacketRenovationEnd(playerid, Float:fakepacket, bool:message)
7282{
7283 if(!Player[playerid][FakePacketRenovation] || !IsPlayerConnected(playerid))
7284 return 0;
7285
7286 Player[playerid][FakePacketRenovation] = false;
7287 if(message)
7288 {
7289 new Float:currPacket = NetStats_PacketLossPercent(playerid);
7290 if(currPacket >= fakepacket)
7291 {
7292 new str[144];
7293 format(str, sizeof str, ""COL_PRIM"Fake PL renovation on {FFFFFF}%s "COL_PRIM"has failed - Old: {FFFFFF}%.2f "COL_PRIM" | Current: {FFFFFF}%.2f", Player[playerid][Name], fakepacket, currPacket);
7294 SendClientMessageToAll(-1, str);
7295 }
7296 else
7297 {
7298 new str[144];
7299 format(str, sizeof str, ""COL_PRIM"Fake PL renovation on {FFFFFF}%s "COL_PRIM"has ended - Old: {FFFFFF}%.2f "COL_PRIM" | Current: {FFFFFF}%.2f", Player[playerid][Name], fakepacket, currPacket);
7300 SendClientMessageToAll(-1, str);
7301 }
7302 }
7303 return 1;
7304}
7305
7306YCMD:fakepacket(playerid, params[], help)
7307{
7308 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
7309 if(help)
7310 {
7311 SendCommandHelpMessage(playerid, "disable packet-loss status check on a player for a specific time.");
7312 return 1;
7313 }
7314 new pID, interv;
7315 if(sscanf(params, "id", pID, interv)) return SendUsageMessage(playerid,"/fakepacket [Player ID] [Time in minutes]");
7316 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player isn't connected.");
7317 if(interv <= 0 || interv > 5) return SendErrorMessage(playerid,"Invalid (Min: 1 | Max: 5).");
7318 if(Player[pID][FakePacketRenovation]) return SendErrorMessage(playerid,"Player is already on fake packetloss renovation.");
7319 if(NetStats_PacketLossPercent(pID) == 0.0) return SendErrorMessage(playerid, "That player has 0.0% packet-loss");
7320
7321 SetTimerEx("FakePacketRenovationEnd", interv * 60 * 1000, false, "ifb", pID, NetStats_PacketLossPercent(pID), true);
7322 Player[pID][FakePacketRenovation] = true;
7323
7324 new str[144];
7325 format(str, sizeof str, "{FFFFFF}%s "COL_PRIM"has started fake packetloss renovation on {FFFFFF}%s "COL_PRIM" - Interval: {FFFFFF}%d min(s).",Player[playerid][Name], Player[pID][Name], interv);
7326 SendClientMessageToAll(-1, str);
7327
7328 LogAdminCommand("fakepacket", playerid, pID);
7329 return 1;
7330}
7331
7332YCMD:alladmins(playerid, params[], help)
7333{
7334 if(help)
7335 {
7336 SendCommandHelpMessage(playerid, "display a list of all server admins (offline and online).");
7337 return 1;
7338 }
7339 new DBResult:res = db_query(sqliteconnection, "SELECT * FROM Players WHERE LEVEL < 6 AND LEVEL > 0 ORDER BY Level DESC");
7340 if(db_num_rows(res))
7341 {
7342 new holdStr[MAX_PLAYER_NAME];
7343 new bigStr[1024];
7344 new namesInLine = 0;
7345
7346 do
7347 {
7348 if(namesInLine == 8)
7349 {
7350 namesInLine = 0;
7351 db_get_field_assoc(res, "Name", holdStr, sizeof(holdStr));
7352 format(bigStr, sizeof bigStr, "%s\n%s", bigStr, holdStr);
7353 db_get_field_assoc(res, "Level", holdStr, sizeof(holdStr));
7354 format(bigStr, sizeof bigStr, "%s [%d], ", bigStr, strval(holdStr));
7355 }
7356 else
7357 {
7358 db_get_field_assoc(res, "Name", holdStr, sizeof(holdStr));
7359 format(bigStr, sizeof bigStr, "%s%s", bigStr, holdStr);
7360 db_get_field_assoc(res, "Level", holdStr, sizeof(holdStr));
7361 format(bigStr, sizeof bigStr, "%s [%d], ", bigStr, strval(holdStr));
7362 }
7363 namesInLine ++;
7364 }
7365 while(db_next_row(res));
7366 db_free_result(res);
7367 ShowPlayerDialog(playerid, 1300, DIALOG_STYLE_MSGBOX, "All Server Admins", bigStr, "Okay", "");
7368 }
7369 else
7370 {
7371 ShowPlayerDialog(playerid, 1300, DIALOG_STYLE_MSGBOX, "All Server Admins", "No admins found...", "Okay", "");
7372 }
7373 return 1;
7374}
7375
7376/* Changes Occurance of COL_PRIM to value contained in ColScheme */
7377YCMD:chatcolor(playerid,params[], help)
7378{
7379/* SendErrorMessage(playerid, "This command is not available in this version of gamemode.");
7380 if(help)
7381 {
7382 SendCommandHelpMessage(playerid, "change the server main color (of messages and dialogs).");
7383 return 1;
7384 }
7385 new col[7];
7386
7387 if( !isnull(params) && !strcmp(params,"01A2F8",true) )
7388 {
7389 params[0] = '\0';
7390 strcat(params,"01A2F7",7);
7391 }
7392 if( strlen(params) != 6 || sscanf(params,"h",col) )
7393 {
7394 SendErrorMessage(playerid,"Please Enter a Valid Hex color code.");
7395 new bigString[512];
7396 new colorList[] = // enter as much colors here
7397 {
7398 0x01BA2F8FF, 0x0044FFFF, 0xF36164FF
7399 };
7400 strcat( bigString, "\t\tSyntax: /ChatColor ColorCode || E.g: /ChatColor 0044FF\t\t\t\n{EBEBEB}Some Examples:\n",sizeof(bigString) );
7401
7402 for(new i = 0, tmpint = 0; i < sizeof(colorList); i++)
7403 {
7404 tmpint = colorList[i] >> 8 & 0x00FFFFFF;
7405 format( bigString, sizeof(bigString), "%s{%06x}%06x ", bigString, tmpint, tmpint );
7406 if( i == 9 ) strcat( bigString, "\n", sizeof(bigString) );
7407 }
7408
7409 strcat( bigString, "\n\nHex Code need to have 6 Digits and can contain only number from 0 - 9 and letters A - F", sizeof(bigString) );
7410 strcat( bigString, "\n\t{01A2F8}You can get some color codes from websites like: Www.ColorPicker.Com \n\t\t{37B6FA}Notice: In-Game Colors might appear different from website.\n", sizeof(bigString) );
7411
7412 ShowPlayerDialog(playerid,1300,DIALOG_STYLE_MSGBOX, "Hints for the command.", bigString, "Close", "" );
7413 return 1;
7414 }
7415 if(Player[playerid][Level] < 5 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be level 4 or rcon admin.");
7416
7417 format(ColScheme,10,"{%06x}", col);
7418 new iString[128];
7419 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has changed {FFFFFF}Chat Color to "COL_PRIM"%06x", Player[playerid][Name], col );
7420 SendClientMessageToAll(-1, iString);
7421
7422 format(iString, sizeof(iString), "UPDATE `Configs` SET `Value` = '%06x' WHERE `Option` = 'ChatColor'", col);
7423 db_free_result(db_query(sqliteconnection, iString));*/
7424 return 1;
7425}
7426
7427
7428YCMD:themes(playerid, params[], help)
7429{
7430 if(Player[playerid][Level] < 5 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be level 5 or rcon admin.");
7431 if(help)
7432 {
7433 SendCommandHelpMessage(playerid, "change the theme color of your server.");
7434 return 1;
7435 }
7436 new str[512];
7437 strcat(str, "White (Background) & Black (Text)\n");
7438 strcat(str, "Black (Background) & White (Text)\n");
7439 strcat(str, "White (Background) & Red (Text)\n");
7440 strcat(str, "Black (Background) & Red (Text)\n");
7441 strcat(str, "White (Background) & Blue (Text)\n");
7442 strcat(str, "Black (Background) & Blue (Text)\n");
7443 strcat(str, "White (Background) & Green (Text)\n");
7444 strcat(str, "Black (Background) & Green (Text)\n");
7445 strcat(str, "White (Background) & Purple (Text)\n");
7446 strcat(str, "Black (Background) & Purple (Text)");
7447
7448 ShowPlayerDialog(playerid, DIALOG_THEME_CHANGE1, DIALOG_STYLE_LIST, "{0044FF} Theme colour menu", str, "Select", "Cancel");
7449 return 1;
7450}
7451
7452YCMD:defaultskins(playerid, params[], help)
7453{
7454 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
7455 if(help)
7456 {
7457 SendCommandHelpMessage(playerid, "reset team skins to default.");
7458 return 1;
7459 }
7460 new iString[128];
7461
7462 Skin[ATTACKER] = 230;
7463 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'ATTACKER Skin'", 230);
7464 db_free_result(db_query(sqliteconnection, iString));
7465
7466 Skin[DEFENDER] = 53;
7467 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'Defender Skin'", 53);
7468 db_free_result(db_query(sqliteconnection, iString));
7469
7470 Skin[REFEREE] = 102;
7471 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'Referee Skin'", 102);
7472 db_free_result(db_query(sqliteconnection, iString));
7473
7474
7475 foreach(new i : Player) {
7476 if(Player[i][Team] == ATTACKER) {
7477 SetPlayerSkin(i, Skin[ATTACKER]);
7478 }
7479 if(Player[i][Team] == DEFENDER) {
7480 SetPlayerSkin(i, Skin[DEFENDER]);
7481 }
7482 if(Player[i][Team] == REFEREE) {
7483 SetPlayerSkin(i, Skin[REFEREE]);
7484 }
7485 }
7486
7487 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has changed {FFFFFF}skins "COL_PRIM"to default.", Player[playerid][Name] );
7488 SendClientMessageToAll(-1, iString);
7489 LogAdminCommand("defaultskins", playerid, INVALID_PLAYER_ID);
7490 return 1;
7491}
7492
7493YCMD:teamskin(playerid, params[], help)
7494{
7495 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
7496 if(help)
7497 {
7498 SendCommandHelpMessage(playerid, "change the skin of a team.");
7499 return 1;
7500 }
7501 if(ChangingSkinOfTeam[playerid] != -1) return SendErrorMessage(playerid,"You're already changing team skins.");
7502 //if(isnull(params)) return SendUsageMessage(playerid,"/teamskin [Team ID: 0 ATTACKER | 1 Defender | 2 Referee] [optional: skin id]");
7503 new teamid, skin[8];
7504 if(sscanf(params, "iz", teamid, skin)) return SendUsageMessage(playerid,"/teamskin [Team ID: 0 ATTACKER | 1 Defender | 2 Referee] [optional: skin id]");
7505 if(teamid < 0 || teamid > 2) return SendErrorMessage(playerid,"Invalid team ID.");
7506
7507 ChangingSkinOfTeam[playerid] = teamid + 1;
7508 if(isnull(skin))
7509 {
7510 switch(ChangingSkinOfTeam[playerid])
7511 {
7512 case ATTACKER:
7513 {
7514 ShowModelSelectionMenu(playerid, teamskinlist, "Select ATTACKER Team Skin", 0xFA1E1EBB, 0xFFA8A899, 0xFCCACAAA);
7515 }
7516 case DEFENDER:
7517 {
7518 ShowModelSelectionMenu(playerid, teamskinlist, "Select Defender Team Skin", 0x323FF0BB, 0x9097F599, 0xDCDEF7AA);
7519 }
7520 case REFEREE:
7521 {
7522 ShowModelSelectionMenu(playerid, teamskinlist, "Select Referee Team Skin", 0xDCF72ABB, 0xEAF79299, 0xEBF2BBAA);
7523 }
7524 default:
7525 ShowModelSelectionMenu(playerid, teamskinlist, "Select Team Skin");
7526 }
7527 }
7528 else
7529 {
7530 new skinid = strval(skin);
7531 if(!IsValidSkin(skinid))
7532 return SendErrorMessage(playerid, "Invalid skin id");
7533
7534 new iString[128];
7535 switch(ChangingSkinOfTeam[playerid])
7536 {
7537 case ATTACKER:
7538 {
7539 Skin[ATTACKER] = skinid;
7540
7541 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'ATTACKER Skin'", Skin[ATTACKER]);
7542 db_free_result(db_query(sqliteconnection, iString));
7543
7544 }
7545 case DEFENDER:
7546 {
7547 Skin[DEFENDER] = skinid;
7548
7549 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'Defender Skin'", Skin[DEFENDER]);
7550 db_free_result(db_query(sqliteconnection, iString));
7551
7552 }
7553 case REFEREE:
7554 {
7555 Skin[REFEREE] = skinid;
7556
7557 format(iString, sizeof(iString), "UPDATE Configs SET Value = %d WHERE Option = 'Referee Skin'", Skin[REFEREE]);
7558 db_free_result(db_query(sqliteconnection, iString));
7559 }
7560 }
7561
7562 foreach(new i : Player)
7563 {
7564 if(Player[i][Team] == ChangingSkinOfTeam[playerid])
7565 {
7566 SetPlayerSkin(i, skinid);
7567 }
7568 }
7569
7570 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has changed {FFFFFF}%s "COL_PRIM"skin to: {FFFFFF}%d", Player[playerid][Name], TeamName[ChangingSkinOfTeam[playerid]], skinid);
7571 SendClientMessageToAll(-1, iString);
7572 ChangingSkinOfTeam[playerid] = -1;
7573 }
7574 LogAdminCommand("teamskin", playerid, INVALID_PLAYER_ID);
7575 return 1;
7576}
7577
7578YCMD:setteam(playerid, params[], help)
7579{
7580 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
7581 if(help)
7582 {
7583 SendCommandHelpMessage(playerid, "set the team of a player.");
7584 return 1;
7585 }
7586 new Params[2];
7587 if(sscanf(params, "dd", Params[0], Params[1])) return SendUsageMessage(playerid,"/setteam [Player ID] [Team ID | 0 Att | 1 Def | 2 Ref | 3 Att_Sub | 4 Def_Sub]");
7588
7589 if(Params[1] < 0 || Params[1] > 4) return SendErrorMessage(playerid,"Invalid team ID.");
7590 if(!IsPlayerConnected(Params[0])) return SendErrorMessage(playerid,"That player isn't connected.");
7591 if(Player[Params[0]][Playing] == true) return SendErrorMessage(playerid,"That player is playing.");
7592 if(Player[Params[0]][Spectating] == true) StopSpectate(Params[0]);
7593
7594 new MyVehicle = -1;
7595 new Seat;
7596
7597 if(IsPlayerInAnyVehicle(Params[0])) {
7598 MyVehicle = GetPlayerVehicleID(Params[0]);
7599 Seat = GetPlayerVehicleSeat(Params[0]);
7600 }
7601
7602 Player[Params[0]][Team] = Params[1]+1;
7603 SetPlayerSkin(Params[0], Skin[Params[1]+1]);
7604 ColorFix(Params[0]);
7605
7606 if(Current != -1)
7607 {
7608 ShowTeamBarsForPlayer(Params[0]);
7609 ShowTeamCornerInfo(Params[0]);
7610 }
7611
7612 if(MyVehicle != -1) {
7613 PutPlayerInVehicle(Params[0], MyVehicle, Seat);
7614 }
7615 SwitchTeamFix(Params[0], false, true);
7616
7617 UpdateRoundKillDmgTDmg(Params[0]);
7618 new iString[150];
7619 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has switched {FFFFFF}%s "COL_PRIM"to: {FFFFFF}%s", Player[playerid][Name], Player[Params[0]][Name], TeamName[Params[1]+1]);
7620 SendClientMessageToAll(-1, iString);
7621 return 1;
7622}
7623
7624YCMD:setscore(playerid, params[], help)
7625{
7626 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
7627 if(help)
7628 {
7629 SendCommandHelpMessage(playerid, "set the score of a team.");
7630 return 1;
7631 }
7632 if(!WarMode) return SendErrorMessage(playerid, "Warmode is not enabled.");
7633
7634 new TeamID, Score;
7635 if(sscanf(params, "dd", TeamID, Score)) return SendUsageMessage(playerid,"/setscore [Team ID (0 Att | 1 Def)] [Score]");
7636
7637 if(TeamID < 0 || TeamID > 1) return SendErrorMessage(playerid,"Invalid team ID.");
7638 if(Score < 0 || Score > 100) return SendErrorMessage(playerid,"Score can only be between 0 and 100.");
7639
7640 new iString[128];
7641 if(TeamID == 0) {
7642 if((Score + TeamScore[DEFENDER]) >= TotalRounds) return SendErrorMessage(playerid,"ATTACKER plus defender score is bigger than or equal to the total rounds.");
7643 TeamScore[ATTACKER] = Score;
7644 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has set ATTACKER team score to: {FFFFFF}%d", Player[playerid][Name], TeamScore[ATTACKER]);
7645 } else {
7646 if((Score + TeamScore[ATTACKER]) >= TotalRounds) return SendErrorMessage(playerid,"ATTACKER plus defender score is bigger than or equal to the total rounds.");
7647 TeamScore[DEFENDER] = Score;
7648 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has set defender team score to: {FFFFFF}%d", Player[playerid][Name], TeamScore[DEFENDER]);
7649 }
7650 SendClientMessageToAll(-1, iString);
7651
7652 CurrentRound = TeamScore[ATTACKER] + TeamScore[DEFENDER];
7653
7654 UpdateTeamScoreTextDraw();
7655
7656 LogAdminCommand("setscore", playerid, INVALID_PLAYER_ID);
7657 return 1;
7658}
7659
7660YCMD:changepass(playerid, params[], help)
7661{
7662 if(help)
7663 {
7664 SendCommandHelpMessage(playerid, "change your user account password (not league account password).");
7665 return 1;
7666 }
7667 if(Player[playerid][Logged] == false) return SendErrorMessage(playerid,"You must be logged in.");
7668 if(isnull(params)) return SendUsageMessage(playerid,"/changepass [New Password]");
7669 if(strlen(params) < 3) return SendErrorMessage(playerid,"Password too short (Minimum 3 characters).");
7670
7671 new HashPass[140];
7672 format(HashPass, sizeof(HashPass), "%d", udb_hash(params));
7673
7674 new iString[356];
7675 format(iString, sizeof(iString), "UPDATE Players SET Password = '%q' WHERE Name = '%q'", HashPass, Player[playerid][Name]);
7676 db_free_result(db_query(sqliteconnection, iString));
7677
7678 format(HashPass, sizeof(HashPass), "Your password is changed to: %s", params);
7679 SendClientMessage(playerid, -1, HashPass);
7680 return 1;
7681}
7682
7683YCMD:heal(playerid, params[], help)
7684{
7685 if(help)
7686 {
7687 SendCommandHelpMessage(playerid, "restore your health and armour.");
7688 return 1;
7689 }
7690 if(Player[playerid][Playing] == true) return SendErrorMessage(playerid,"Can't heal while playing.");
7691 if(Player[playerid][InDuel] == true) return SendErrorMessage(playerid,"Can't use this command during duel.");
7692
7693 SetHP(playerid, 100);
7694 SetAP(playerid, 100);
7695 return 1;
7696}
7697
7698
7699YCMD:rr(playerid, params[], help)
7700{
7701 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
7702 if(help)
7703 {
7704 SendCommandHelpMessage(playerid, "restart a round.");
7705 return 1;
7706 }
7707 if(Current == -1) return SendErrorMessage(playerid,"Round is not active.");
7708 if(AllowStartBase == false) return SendErrorMessage(playerid,"Please wait.");
7709
7710 AllowStartBase = false;
7711 if(RoundPaused == true)
7712 TextDrawHideForAll(PauseTD);
7713 RoundPaused = false;
7714 RoundUnpausing = false;
7715
7716 GangZoneDestroy(CPZone);
7717 GangZoneDestroy(ArenaZone);
7718
7719 ResetBackupRequests();
7720
7721 new iString[128];
7722 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has set the round to restart. Round restarting...", Player[playerid][Name]);
7723 SendClientMessageToAll(-1, iString);
7724
7725 ResetGunmenuSelections();
7726
7727 if(GameType == BASE) {
7728 BaseStarted = false;
7729 SetTimerEx("OnBaseStart", 4000, false, "i", Current);
7730 } else if(GameType == ARENA) {
7731 ArenaStarted = false;
7732 SetTimerEx("OnArenaStart", 4000, false, "i", Current);
7733 }
7734
7735 foreach(new i : Player)
7736 {
7737 if(Player[i][OnGunmenu])
7738 HidePlayerGunmenu(i);
7739 if(CanPlay(i))
7740 {
7741 if(Player[i][Spectating] == true) StopSpectate(i);
7742 Player[i][WasInCP] = false;
7743
7744 Player[i][WasInBase] = false;
7745 Player[i][WasInTeam] = NON;
7746 Player[i][WeaponPicked] = 0;
7747 Player[i][TimesSpawned] = 0;
7748
7749 HideDialogs(i);
7750 DisablePlayerCheckpoint(i);
7751 RemovePlayerMapIcon(i, 59);
7752
7753 PlayerTextDrawHide(i, AreaCheckTD[i]);
7754 PlayerTextDrawHide(i, AreaCheckBG[i]);
7755 TogglePlayerControllable(i, 0);
7756 Player[i][ToAddInRound] = true;
7757 }
7758 }
7759
7760 foreach(new i:Player)
7761 {
7762 HideRoundStats(i);
7763 }
7764 TextDrawHideForAll(EN_CheckPoint);
7765 TextDrawHideForAll(CheckpointWarningBox);
7766 return 1;
7767}
7768
7769YCMD:aka(playerid, params[], help) {
7770
7771 if(help)
7772 {
7773 SendCommandHelpMessage(playerid, "fetch AKA data of a player.");
7774 return 1;
7775 }
7776 new pID;
7777 if(sscanf(params, "u", pID)) {
7778 pID = playerid;
7779 }
7780 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player is not connected.");
7781
7782 new AKAString[256];
7783 GetPlayerAKA(pID, AKAString, sizeof AKAString);
7784
7785 new title[39];
7786 format(title, sizeof(title), ""COL_PRIM"%s's AKA", Player[pID][Name]);
7787 ShowPlayerDialog(playerid, 1300, DIALOG_STYLE_MSGBOX, title, AKAString, "Close", "");
7788 return 1;
7789}
7790
7791
7792YCMD:afk(playerid, params[], help)
7793{
7794 if(help)
7795 {
7796 SendCommandHelpMessage(playerid, "switch to AFK mode.");
7797 return 1;
7798 }
7799 if(Player[playerid][Playing] == true) return SendErrorMessage(playerid, "You cannot switch to AFK mode while playing");
7800 if(Player[playerid][Spectating] == true) StopSpectate(playerid);
7801 if(Player[playerid][InDM] == true) QuitDM(playerid);
7802 if(Player[playerid][InDuel] == true) return SendErrorMessage(playerid,"Can't use this command during duel. Use /rq first");
7803
7804 Player[playerid][Team] = NON;
7805 SetPlayerColor(playerid, 0xAAAAAAAA);
7806 TogglePlayerControllable(playerid, 0);
7807 Player[playerid][IsAFK] = true;
7808
7809 new iString[64];
7810 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has set himself to AFK mode.", Player[playerid][Name]);
7811 SendClientMessageToAll(-1, iString);
7812 return 1;
7813}
7814
7815YCMD:setafk(playerid, params[], help)
7816{
7817 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
7818 if(help)
7819 {
7820 SendCommandHelpMessage(playerid, "force someone to go into AFK mode.");
7821 return 1;
7822 }
7823 if(isnull(params) || !IsNumeric(params)) return SendUsageMessage(playerid,"/setafk [Player ID]");
7824
7825 new pID = strval(params);
7826 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player is not connected.");
7827 if(Player[pID][Playing] == true) return SendErrorMessage(playerid, "You cannot switch this player to AFK mode as he's playing");
7828 if(Player[pID][Spectating] == true) StopSpectate(pID);
7829 if(Player[pID][InDM] == true) QuitDM(pID);
7830 if(Player[pID][InDuel] == true) return SendErrorMessage(playerid,"That player is in a duel");
7831
7832 Player[pID][Team] = NON;
7833 SetPlayerColor(pID, 0xAAAAAAAA);
7834 TogglePlayerControllable(pID, 0);
7835 Player[pID][IsAFK] = true;
7836
7837 new iString[128];
7838 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has set {FFFFFF}%s "COL_PRIM"to AFK mode.", Player[playerid][Name], Player[pID][Name]);
7839 SendClientMessageToAll(-1, iString);
7840 LogAdminCommand("setafk", playerid, pID);
7841 return 1;
7842}
7843
7844YCMD:back(playerid, params[], help)
7845{
7846 if(help)
7847 {
7848 SendCommandHelpMessage(playerid, "get you out of AFK mode.");
7849 return 1;
7850 }
7851 if(Player[playerid][IsAFK] != true)
7852 return SendErrorMessage(playerid,"You are not AFK?");
7853 Player[playerid][Team] = REFEREE;
7854 TogglePlayerControllable(playerid, 1);
7855 Player[playerid][IsAFK] = false;
7856 SetHP(playerid, 100);
7857 new iString[128];
7858 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"is back from AFK mode.", Player[playerid][Name]);
7859 SendClientMessageToAll(-1, iString);
7860 format(iString, sizeof(iString), "%s%s\n%s%s\n%sReferee\n%s%s Sub\n%s%s Sub", TextColor[ATTACKER], TeamName[ATTACKER], TextColor[DEFENDER], TeamName[DEFENDER], TextColor[REFEREE], TextColor[ATTACKER_SUB], TeamName[ATTACKER], TextColor[DEFENDER_SUB], TeamName[DEFENDER]);
7861 ShowPlayerDialog(playerid, DIALOG_SWITCH_TEAM, DIALOG_STYLE_LIST, "{FFFFFF}Team Selection",iString, "Select", "");
7862 return 1;
7863}
7864
7865YCMD:swap(playerid, params[], help)
7866{
7867 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
7868 if(help)
7869 {
7870 SendCommandHelpMessage(playerid, "swap the teams.");
7871 return 1;
7872 }
7873 if(Current != -1) return SendErrorMessage(playerid,"Can't swap while round is active.");
7874
7875 SwapTeams();
7876
7877 new iString[64];
7878 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has swapped the teams.", Player[playerid][Name]);
7879 SendClientMessageToAll(-1, iString);
7880
7881 return 1;
7882}
7883
7884YCMD:balance(playerid, params[], help)
7885{
7886 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
7887 if(help)
7888 {
7889 SendCommandHelpMessage(playerid, "balance the teams.");
7890 return 1;
7891 }
7892 if(Current != -1) return SendErrorMessage(playerid,"Can't balance when round is active.");
7893
7894 BalanceTeams();
7895
7896 new iString[64];
7897 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has balanced the teams.", Player[playerid][Name]);
7898 SendClientMessageToAll(-1, iString);
7899 return 1;
7900}
7901
7902YCMD:switch(playerid, params[], help)
7903{
7904 if(help)
7905 {
7906 SendCommandHelpMessage(playerid, "change your team.");
7907 return 1;
7908 }
7909 if(Player[playerid][Playing] == true) return SendErrorMessage(playerid,"Can't switch while playing.");
7910 if(Player[playerid][Spectating] == true) StopSpectate(playerid);
7911
7912 new iString[128];
7913 format(iString, sizeof(iString), "%s%s\n%s%s\n%sReferee\n%s%s Sub\n%s%s Sub", TextColor[ATTACKER], TeamName[ATTACKER], TextColor[DEFENDER], TeamName[DEFENDER], TextColor[REFEREE], TextColor[ATTACKER_SUB], TeamName[ATTACKER], TextColor[DEFENDER_SUB], TeamName[DEFENDER]);
7914 ShowPlayerDialog(playerid, DIALOG_SWITCH_TEAM, DIALOG_STYLE_LIST, "{FFFFFF}Team Selection",iString, "Select", "Exit");
7915 return 1;
7916}
7917
7918
7919YCMD:mainspawn(playerid, params[], help)
7920{
7921 if(Player[playerid][Level] < 4 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
7922 if(help)
7923 {
7924 SendCommandHelpMessage(playerid, "change server main spawn position.");
7925 return 1;
7926 }
7927 GetPlayerPos(playerid, MainSpawn[0], MainSpawn[1], MainSpawn[2]);
7928 GetPlayerFacingAngle(playerid, MainSpawn[3]);
7929 MainInterior = GetPlayerInterior(playerid);
7930
7931 new iString[128], query[256];
7932 format(iString, sizeof(iString), "%.0f,%.0f,%.0f,%.0f,%d", MainSpawn[0], MainSpawn[1], MainSpawn[2], MainSpawn[3], MainInterior);
7933 format(query, sizeof(query), "UPDATE Configs SET Value = '%s' WHERE Option = 'Main Spawn'", iString);
7934 db_free_result(db_query(sqliteconnection, query));
7935
7936 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has changed the main spawn location.", Player[playerid][Name]);
7937 SendClientMessageToAll(-1, iString);
7938 LogAdminCommand("mainspawn", playerid, INVALID_PLAYER_ID);
7939 return 1;
7940}
7941
7942YCMD:givemenu(playerid, params[], help)
7943{
7944 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
7945 if(help)
7946 {
7947 SendCommandHelpMessage(playerid, "show weapon menu to a specific player.");
7948 return 1;
7949 }
7950 if(Current == -1) return SendErrorMessage(playerid,"Round is not active.");
7951 if(isnull(params) || !IsNumeric(params)) return SendUsageMessage(playerid,"/givemenu [Player ID]");
7952
7953 new pID = strval(params);
7954 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player isn't connected.");
7955 if(Player[pID][Playing] == false) return SendErrorMessage(playerid,"That player isn't playing.");
7956
7957 new iString[128];
7958 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has showed {FFFFFF}%s "COL_PRIM"weapon menu.", Player[playerid][Name], Player[pID][Name]);
7959 SendClientMessageToAll(-1, iString);
7960 ShowPlayerGunmenu(pID, 0);
7961 return 1;
7962}
7963
7964YCMD:reset(playerid, params[], help)
7965{
7966 if(help)
7967 {
7968 SendCommandHelpMessage(playerid, "reset gunmenu selections.");
7969 return 1;
7970 }
7971 if(Player[playerid][OnGunmenu])
7972 {
7973 if(Player[playerid][GunmenuStyle] == GUNMENU_STYLE_OBJECT)
7974 {
7975 ResetPlayerGunmenu(playerid, true);
7976 }
7977 else
7978 {
7979 SendErrorMessage(playerid, "This command is available only in gunmenu objects style.");
7980 }
7981 }
7982 else
7983 SendErrorMessage(playerid, "You're not selecting weapons from gunmenu");
7984 return 1;
7985}
7986
7987YCMD:gunmenumod(playerid, params[], help)
7988{
7989 if(help)
7990 {
7991 SendCommandHelpMessage(playerid, "put you in gunmenu modification mode.");
7992 return 1;
7993 }
7994 ShowPlayerGunmenuModification(playerid);
7995 return 1;
7996}
7997
7998YCMD:spas(playerid, params[], help)
7999{
8000 if(help)
8001 {
8002 SendCommandHelpMessage(playerid, "toggle spas selection in gunmenu.");
8003 }
8004 // Find the index of Spas in gunmenu
8005 new idx = -1;
8006 for(new i = 0; i < MAX_GUNMENU_GUNS; i ++)
8007 {
8008 if(GunmenuData[i][GunID] == WEAPON_SHOTGSPA)
8009 {
8010 idx = i;
8011 break;
8012 }
8013 }
8014 if(idx == -1)
8015 {
8016 SendErrorMessage(playerid, "Spas doesn't exist in the gunmenu.");
8017 return 1;
8018 }
8019 if(GunmenuData[idx][GunLimit] > 0)
8020 {
8021 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"has changed {FFFFFF}Spas "COL_PRIM"limit to {FFFFFF}0", Player[playerid][Name]));
8022 db_free_result(db_query(sqliteconnection, sprintf("UPDATE `Gunmenu` SET `Limit`=0 WHERE `Weapon`=%d", GunmenuData[idx][GunID])));
8023 GunmenuData[idx][GunLimit] = 0;
8024 // If there's a round in progress
8025 if(Current != -1)
8026 {
8027 // Loop through all players who are in round
8028 foreach(new i : PlayersInRound)
8029 {
8030 // The following code checks if this player (i) has this gun (spas)
8031 if(GunmenuData[idx][HasGun][i])
8032 {
8033 // Show them gunmenu
8034 ShowPlayerGunmenu(i, 0);
8035 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"was automatically shown the gunmenu because they had Spas.", Player[i][Name]));
8036 }
8037 }
8038 }
8039 }
8040 else
8041 {
8042 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"has changed {FFFFFF}Spas "COL_PRIM"limit to {FFFFFF}1", Player[playerid][Name]));
8043 db_free_result(db_query(sqliteconnection, sprintf("UPDATE `Gunmenu` SET `Limit`=1 WHERE `Weapon`=%d", GunmenuData[idx][GunID])));
8044 GunmenuData[idx][GunLimit] = 1;
8045 }
8046 return 1;
8047}
8048
8049YCMD:melee(playerid, params[], help)
8050{
8051 if(help)
8052 {
8053 SendCommandHelpMessage(playerid, "display the melee weapon menu.");
8054 return 1;
8055 }
8056 if(!MeleeAllowed) return SendErrorMessage(playerid,"Melee weapons menu is disabled.");
8057 if(Current == -1) return SendErrorMessage(playerid,"Round is not active.");
8058 if(Player[playerid][Playing] == false) return SendErrorMessage(playerid,"You are not playing.");
8059 if(RCArena == true) return SendErrorMessage(playerid, "You cannot get gunmenu in RC arenas");
8060 if(ElapsedTime <= 30 && Player[playerid][Team] != REFEREE)
8061 {
8062 new iString[128];
8063 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has displayed melee weapons menu (/melee).", Player[playerid][Name]);
8064 SendClientMessageToAll(-1, iString);
8065 ShowPlayerMeleeWeaponsMenu(playerid);
8066 }
8067 else
8068 {
8069 SendErrorMessage(playerid,"Too late to show yourself melee weapons menu.");
8070 }
8071 return 1;
8072}
8073
8074YCMD:gunmenu(playerid, params[], help)
8075{
8076 if(help)
8077 {
8078 SendCommandHelpMessage(playerid, "display the weapon menu.");
8079 return 1;
8080 }
8081 if(Current == -1) return SendErrorMessage(playerid,"Round is not active.");
8082 if(Player[playerid][Playing] == false) return SendErrorMessage(playerid,"You are not playing.");
8083 if(RCArena == true) return SendErrorMessage(playerid, "You cannot get gunmenu in RC arenas");
8084 if(ElapsedTime <= 30 && Player[playerid][Team] != REFEREE)
8085 {
8086 new iString[128];
8087 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has displayed gunmenu (/gunmenu).", Player[playerid][Name]);
8088 SendClientMessageToAll(-1, iString);
8089 ShowPlayerGunmenu(playerid, 0);
8090 }
8091 else
8092 {
8093 SendErrorMessage(playerid,"Too late to show yourself weapon menu.");
8094 }
8095 return 1;
8096}
8097
8098YCMD:gunmenustyle(playerid, params[], help)
8099{
8100 if(help)
8101 {
8102 SendCommandHelpMessage(playerid, "change your gunmenu style.");
8103 return 1;
8104 }
8105 if(Player[playerid][OnGunmenu])
8106 return SendErrorMessage(playerid,"You cannot change style while selecting from gunmenu.");
8107
8108 new styleStr[7];
8109 if(sscanf(params, "s", styleStr))
8110 {
8111 return SendUsageMessage(playerid,"/gunmenustyle [dialog / object]");
8112 }
8113
8114 new style;
8115 if(strcmp(styleStr, "dialog", true) == 0)
8116 style = GUNMENU_STYLE_DIALOG;
8117 else if(strcmp(styleStr, "object", true) == 0)
8118 style = GUNMENU_STYLE_OBJECT;
8119 else
8120 return SendUsageMessage(playerid,"/gunmenustyle [dialog / object]");
8121
8122 Player[playerid][GunmenuStyle] = style;
8123 db_free_result(db_query(sqliteconnection, sprintf("UPDATE Players SET GunmenuStyle = %d WHERE Name = '%q'", style, Player[playerid][Name])));
8124 SendClientMessage(playerid, -1, sprintf("Changed gunmenu style to: %s", styleStr));
8125 return 1;
8126}
8127
8128YCMD:addall(playerid, params[], help)
8129{
8130 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
8131 if(help)
8132 {
8133 SendCommandHelpMessage(playerid, "add everyone to the round.");
8134 return 1;
8135 }
8136 if(Current == -1)
8137 return SendErrorMessage(playerid,"Round is not active.");
8138
8139 new bool:addDead = strcmp(params, "dead", true) == 0 ? true : false;
8140 new ct = 0;
8141 switch(WarMode)
8142 {
8143 case true:
8144 {
8145 foreach(new i : Player)
8146 {
8147 if(addDead && Player[i][WasInBase])
8148 continue;
8149
8150 if(Player[i][Playing] == false && Player[i][InDuel] == false && (Player[i][Team] == ATTACKER || Player[i][Team] == DEFENDER))
8151 {
8152 switch(GameType)
8153 {
8154 case BASE:
8155 {
8156 AddPlayerToBase(i);
8157 }
8158 case ARENA:
8159 {
8160 AddPlayerToArena(i);
8161 }
8162 }
8163 ct ++;
8164 }
8165 }
8166 }
8167 case false:
8168 {
8169 foreach(new i : Player)
8170 {
8171 if(addDead && Player[i][WasInBase])
8172 continue;
8173
8174 if(Player[i][Playing] == false && Player[i][InDuel] == false && (Player[i][Team] == ATTACKER || Player[i][Team] == DEFENDER))
8175 {
8176 Player[i][Team] = GetTeamWithLessPlayers();
8177 SwitchTeamFix(i, false, false);
8178 switch(GameType)
8179 {
8180 case BASE:
8181 {
8182 AddPlayerToBase(i);
8183 }
8184 case ARENA:
8185 {
8186 AddPlayerToArena(i);
8187 }
8188 }
8189 ct ++;
8190 }
8191 }
8192 }
8193 }
8194 if(ct == 0)
8195 {
8196 switch(addDead)
8197 {
8198 case true:
8199 {
8200 SendErrorMessage(playerid, "Found no players which could be added to the round!");
8201 }
8202 case false:
8203 {
8204 SendErrorMessage(playerid, "No players to add! Did you want to add dead players? Use /addall dead");
8205 }
8206 }
8207 }
8208 else
8209 {
8210 if(!addDead)
8211 {
8212 SendUsageMessage(playerid, "to also add players who died, you can type /addall dead");
8213 }
8214 new iString[64];
8215 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has added everyone to the round.", Player[playerid][Name]);
8216 SendClientMessageToAll(-1, iString);
8217 }
8218 return 1;
8219}
8220
8221YCMD:add(playerid, params[], help)
8222{
8223 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
8224 if(help)
8225 {
8226 SendCommandHelpMessage(playerid, "add a specific player to the round.");
8227 return 1;
8228 }
8229 if(isnull(params) || !IsNumeric(params)) return SendUsageMessage(playerid,"/add [Player ID]");
8230 if(Current == -1) return SendErrorMessage(playerid,"Round is not active.");
8231
8232 new pID = strval(params);
8233 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player is not connected.");
8234 if(Player[pID][Playing] == true) return SendErrorMessage(playerid,"That player is already playing.");
8235 if(Player[pID][InDuel] == true) return SendErrorMessage(playerid,"That player is in a duel.");
8236 if(Player[pID][Team] == ATTACKER || Player[pID][Team] == DEFENDER || Player[pID][Team] == REFEREE) {
8237 if(Player[pID][Spectating] == true) StopSpectate(pID); //no more need to ask players to do /specoff in order to add them
8238 if(GameType == BASE) AddPlayerToBase(pID);
8239 else if(GameType == ARENA) AddPlayerToArena(pID);
8240
8241 new iString[128];
8242 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has added {FFFFFF}%s "COL_PRIM"to the round.", Player[playerid][Name], Player[pID][Name]);
8243 SendClientMessageToAll(-1, iString);
8244
8245 } else {
8246 SendErrorMessage(playerid,"That player must be part of one of the following teams: ATTACKER, Defender or Referee.");
8247 }
8248 LogAdminCommand("add", playerid, pID);
8249 return 1;
8250}
8251
8252YCMD:addme(playerid, params[], help)
8253{
8254 if(help)
8255 {
8256 SendCommandHelpMessage(playerid, "add yourself to the round.");
8257 return 1;
8258 }
8259 if(Player[playerid][Team] != ATTACKER && Player[playerid][Team] != DEFENDER) return SendErrorMessage(playerid, "You must be either in ATTACKER or defender team");
8260 if(WarMode == true) return SendErrorMessage(playerid, "Cannot do this when match mode is enabled.");
8261 if(Player[playerid][Playing] == true) return SendErrorMessage(playerid,"You're already playing.");
8262 if(Player[playerid][InDuel] == true) return SendErrorMessage(playerid,"You cannot use this command while in a duel.");
8263 if(ElapsedTime > 60) return SendErrorMessage(playerid, "It's late. You cannot add yourself now.");
8264
8265 Player[playerid][Team] = GetTeamWithLessPlayers();
8266 SwitchTeamFix(playerid, false, false);
8267
8268 if(Player[playerid][Spectating] == true) StopSpectate(playerid);
8269 if(GameType == BASE) AddPlayerToBase(playerid);
8270 else if(GameType == ARENA) AddPlayerToArena(playerid);
8271
8272 new iString[144];
8273 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has added himself to the round {FFFFFF}(/addme).", Player[playerid][Name]);
8274 SendClientMessageToAll(-1, iString);
8275 return 1;
8276}
8277
8278YCMD:readd(playerid, params[], help)
8279{
8280 if(help)
8281 {
8282 SendCommandHelpMessage(playerid, "re-add a player to the round.");
8283 return 1;
8284 }
8285 if(Current == -1) return SendErrorMessage(playerid,"Round is not active.");
8286
8287 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
8288 if(isnull(params)) return SendUsageMessage(playerid,"/readd [Player ID]");
8289 if(!IsNumeric(params)) return SendUsageMessage(playerid,"/readd [Player ID]");
8290
8291 new pID = strval(params);
8292 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player is not connected.");
8293 if(Player[pID][Team] == ATTACKER || Player[pID][Team] == DEFENDER || Player[pID][Team] == REFEREE)
8294 {
8295 if(Player[pID][Playing] == true)
8296 {
8297 Player[pID][TotalKills] = Player[pID][TotalKills] - Player[pID][RoundKills];
8298 Player[pID][TotalDeaths] = Player[pID][TotalDeaths] - Player[pID][RoundDeaths];
8299 Player[pID][TotalDamage] = Player[pID][TotalDamage] - Player[pID][RoundDamage];
8300 }
8301
8302 DeletePlayerTeamBar(pID);
8303
8304 if(GameType == BASE)
8305 AddPlayerToBase(pID);
8306 else if(GameType == ARENA)
8307 AddPlayerToArena(pID);
8308
8309 new iString[128];
8310 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has re-added {FFFFFF}%s "COL_PRIM"to the round.", Player[playerid][Name], Player[pID][Name]);
8311 SendClientMessageToAll(-1, iString);
8312 LogAdminCommand("readd", playerid, pID);
8313 }
8314 else
8315 {
8316 SendErrorMessage(playerid,"That player must be part of one of the following teams: ATTACKER, Defender or Referee.");
8317 }
8318 return 1;
8319}
8320
8321YCMD:rem(playerid, params[], help)
8322{
8323 if(help)
8324 {
8325 SendCommandHelpMessage(playerid, "remove yourself from the round.");
8326 return 1;
8327 }
8328 if(Player[playerid][Playing] == false) return SendErrorMessage(playerid,"You are not playing.");
8329 if(ElapsedTime > 60) return SendErrorMessage(playerid,"Too late to remove yourself.");
8330
8331 new iString[128], HP[2];
8332 GetHP(playerid, HP[0]);
8333 GetAP(playerid, HP[1]);
8334
8335 format(iString, sizeof(iString), "{FFFFFF}%s (%d) "COL_PRIM"removed himself from round. {FFFFFF}(HP %d | AP %d)", Player[playerid][Name], playerid, HP[0], HP[1]);
8336 SendClientMessageToAll(-1, iString);
8337
8338 RemovePlayerFromRound(playerid);
8339 return 1;
8340}
8341
8342
8343YCMD:remove(playerid, params[], help)
8344{
8345 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
8346 if(help)
8347 {
8348 SendCommandHelpMessage(playerid, "remove a specific player from the round.");
8349 return 1;
8350 }
8351 if(isnull(params) || !IsNumeric(params)) return SendUsageMessage(playerid,"/remove [Player ID]");
8352
8353 new pID = strval(params);
8354
8355 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player isn't connected.");
8356 if(Player[pID][Playing] == false) return SendErrorMessage(playerid,"That player is not playing.");
8357
8358 new iString[128], HP[2];
8359 GetHP(pID, HP[0]);
8360 GetAP(pID, HP[1]);
8361
8362
8363 format(iString, sizeof(iString), "{FFFFFF}%s (%d) "COL_PRIM"removed {FFFFFF}%s (%d) "COL_PRIM"from round. {FFFFFF}(HP %d | AP %d)", Player[playerid][Name], playerid, Player[pID][Name], pID, HP[0], HP[1]);
8364 SendClientMessageToAll(-1, iString);
8365
8366 RemovePlayerFromRound(pID);
8367 LogAdminCommand("remove", playerid, pID);
8368 return 1;
8369}
8370
8371
8372YCMD:end(playerid, params[], help)
8373{
8374 if(Player[playerid][Level] < 3 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
8375 if(help)
8376 {
8377 SendCommandHelpMessage(playerid, "kill the currently active round.");
8378 return 1;
8379 }
8380 if(AllowStartBase == false) return SendErrorMessage(playerid,"Please Wait.");
8381 if(Current == -1) return SendErrorMessage(playerid,"Round is not active.");
8382
8383 Current = -1;
8384 #if defined _league_included
8385 UpdateOnlineMatchesList(WarMode);
8386 #endif
8387 if(RoundPaused == true)
8388 TextDrawHideForAll(PauseTD);
8389
8390 GangZoneDestroy(CPZone);
8391 GangZoneDestroy(ArenaZone);
8392
8393 RoundPaused = false;
8394 TeamCapturingCP = NON;
8395 PlayersInCP = 0;
8396
8397 PlayersAlive[ATTACKER] = 0;
8398 PlayersAlive[DEFENDER] = 0;
8399
8400 PlayersDead[ATTACKER] = 0;
8401 PlayersDead[DEFENDER] = 0;
8402
8403 RoundUnpausing = false;
8404
8405 foreach(new i : Player) {
8406
8407 if(Player[i][InDuel] == true || Player[i][IsAFK] || !Player[i][Spawned])
8408 continue;
8409
8410 Player[i][Playing] = false;
8411 Player[i][WasInCP] = false;
8412 if(Player[i][Spectating] == true)
8413 StopSpectate(i);
8414 Player[i][WasInBase] = false;
8415 Player[i][WasInTeam] = NON;
8416 Player[i][WeaponPicked] = 0;
8417 Player[i][TimesSpawned] = 0;
8418
8419 TogglePlayerControllable(i, 0);
8420 RemovePlayerMapIcon(i, 59);
8421
8422 SpawnInLobby(i);
8423
8424 DisablePlayerCheckpoint(i);
8425 SetPlayerScore(i, 0);
8426 HideDialogs(i);
8427
8428 PlayerTextDrawHide(i, AreaCheckTD[i]);
8429 PlayerTextDrawHide(i, AreaCheckBG[i]);
8430 }
8431
8432 foreach(new i:Player)
8433 {
8434 HideRoundStats(i);
8435 }
8436 TextDrawHideForAll(EN_CheckPoint);
8437 TextDrawHideForAll(CheckpointWarningBox);
8438
8439 ResetGunmenuSelections();
8440 ResetBackupRequests();
8441
8442 BaseStarted = false;
8443 ArenaStarted = false;
8444
8445 SendRconCommand("mapname Lobby");
8446 FixGamemodeText();
8447
8448 new iString[64];
8449 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has ended the round.", Player[playerid][Name]);
8450 SendClientMessageToAll(-1, iString);
8451
8452 DeleteAllTeamBars();
8453 HideTeamCornerInfoForAll();
8454
8455 DeleteAllDeadBodies();
8456 GangZoneDestroy(CPZone);
8457 GangZoneDestroy(ArenaZone);
8458 ResetTeamLeaders();
8459 Iter_Clear(PlayersInRound);
8460
8461 if(AutoRoundStarter)
8462 SetRoundAutoStart(20);
8463
8464 LogAdminCommand("end", playerid, INVALID_PLAYER_ID);
8465 return 1;
8466}
8467
8468
8469YCMD:ban(playerid, params[], help)
8470{
8471 if(Player[playerid][Level] < 3 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
8472 if(help)
8473 {
8474 SendCommandHelpMessage(playerid, "ban a specific player from the server.");
8475 return 1;
8476 }
8477 if(AllowStartBase == false) return SendErrorMessage(playerid,"Can't ban now. Please wait.");
8478
8479 new pID, Reason[128], iString[256];
8480 if(sscanf(params, "ds", pID, Reason)) return SendUsageMessage(playerid,"/ban [Player ID] [Reason]");
8481
8482 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player isn't connected.");
8483
8484 if(Player[pID][Level] >= Player[playerid][Level])
8485 return SendErrorMessage(playerid, "Cannot ban someone of the same admin level as you or higher.");
8486
8487 if(strlen(Reason) > 128) return SendErrorMessage(playerid,"Reason is too big.");
8488
8489 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has banned {FFFFFF}%s "COL_PRIM"| Reason: {FFFFFF}%s", Player[playerid][Name], Player[pID][Name], /*IP,*/ Reason);
8490 SendClientMessageToAll(-1, iString);
8491 SendDC("585440303687925781","%s "COL_PRIM"has banned }%s "COL_PRIM"| Reason: %s", Player[playerid][Name], Player[pID][Name], /*IP,*/ Reason);
8492
8493 format(iString, sizeof(iString), "%s - %s", Player[playerid][Name], Reason);
8494 BanEx(pID, iString);
8495
8496 LogAdminCommand("ban", playerid, pID);
8497 return 1;
8498}
8499
8500
8501
8502
8503YCMD:unbanip(playerid,params[], help)
8504{
8505 if(Player[playerid][Level] < 3 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
8506 if(help)
8507 {
8508 SendCommandHelpMessage(playerid, "unban a specific IP or a range.");
8509 return 1;
8510 }
8511 if(isnull(params)) return SendUsageMessage(playerid,"/unbanip [IP]");
8512
8513 new iString[128];
8514 format(iString, sizeof(iString), "unbanip %s", params);
8515 SendRconCommand(iString);
8516 SendRconCommand("reloadbans");
8517
8518 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has unbanned IP: {FFFFFF}%s",Player[playerid][Name], params);
8519 SendClientMessageToAll(-1, iString);
8520 LogAdminCommand("unbanip", playerid, INVALID_PLAYER_ID);
8521 return 1;
8522}
8523
8524YCMD:kick(playerid, params[], help)
8525{
8526 if(Player[playerid][Level] < 3 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
8527 if(help)
8528 {
8529 SendCommandHelpMessage(playerid, "kick a specific player from the server.");
8530 return 1;
8531 }
8532 if(AllowStartBase == false) return SendErrorMessage(playerid,"Can't kick now. Please wait.");
8533
8534 new Params[2][128], iString[180];
8535 sscanf(params, "ss", Params[0], Params[1]);
8536 if(isnull(Params[0]) || !IsNumeric(Params[0])) return SendUsageMessage(playerid,"/kick [Player ID] [Reason]");
8537 new pID = strval(Params[0]);
8538
8539 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player isn't connected.");
8540
8541 if(Player[pID][Level] >= Player[playerid][Level])
8542 return SendErrorMessage(playerid, "Cannot kick someone of the same admin level as you or higher.");
8543
8544 new bool:GiveReason;
8545 if(isnull(Params[1])) GiveReason = false;
8546 else GiveReason = true;
8547
8548 if(GiveReason == false) {
8549 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has kicked {FFFFFF}%s "COL_PRIM"| Reason: {FFFFFF}No Reason Given", Player[playerid][Name], Player[pID][Name]);
8550 SendClientMessageToAll(-1, iString);
8551 SendDC("585440303687925781","%s "COL_PRIM"has kicked %s "COL_PRIM"| Reason: No Reason Given", Player[playerid][Name], Player[pID][Name]);
8552 } else {
8553 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has kicked {FFFFFF}%s "COL_PRIM"| Reason: {FFFFFF}%s", Player[playerid][Name], Player[pID][Name], Params[1]);
8554 SendClientMessageToAll(-1, iString);
8555 SendDC("585440303687925781","%s "COL_PRIM"has kicked %s "COL_PRIM"| Reason: %s", Player[playerid][Name], Player[pID][Name], Params[1]);
8556 }
8557
8558 SetTimerEx("OnPlayerKicked", 500, false, "i", pID);
8559 LogAdminCommand("kick", playerid, pID);
8560 return 1;
8561}
8562
8563
8564YCMD:healall(playerid, params[], help)
8565{
8566 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
8567 if(help)
8568 {
8569 SendCommandHelpMessage(playerid, "restore everyone's health.");
8570 return 1;
8571 }
8572 if(Current == -1) return SendErrorMessage(playerid,"There is no active round.");
8573
8574 foreach(new i : Player) {
8575 if(Player[i][Playing] == true) {
8576 SetHP(i, RoundHP);
8577 }
8578 }
8579
8580 new iString[64];
8581 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has healed everyone.", Player[playerid][Name]);
8582 SendClientMessageToAll(-1, iString);
8583
8584 return 1;
8585}
8586
8587YCMD:armourall(playerid, params[], help)
8588{
8589 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
8590 if(help)
8591 {
8592 SendCommandHelpMessage(playerid, "restore everyone's armour.");
8593 return 1;
8594 }
8595 if(Current == -1) return SendErrorMessage(playerid,"There is no active round.");
8596
8597 foreach(new i : Player) {
8598 if(Player[i][Playing] == true) {
8599 SetAP(i, 100);
8600 }
8601 }
8602 new iString[64];
8603 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has armoured everyone.", Player[playerid][Name]);
8604 SendClientMessageToAll(-1, iString);
8605 return 1;
8606}
8607
8608YCMD:sethp(playerid, params[], help)
8609{
8610 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
8611 if(help)
8612 {
8613 SendCommandHelpMessage(playerid, "set a player health to a specific value.");
8614 return 1;
8615 }
8616 new pID, Amount;
8617 if(sscanf(params, "id", pID, Amount)) return SendUsageMessage(playerid,"/sethp [Player ID] [Amount]");
8618 if(Amount < 0 || Amount > 100) return SendErrorMessage(playerid,"Invalid amount.");
8619 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player isn't connected.");
8620
8621 SetHP(pID, Amount);
8622
8623
8624 new iString[128];
8625 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has set {FFFFFF}%s's "COL_PRIM"HP to: {FFFFFF}%d", Player[playerid][Name], Player[pID][Name], Amount);
8626 SendClientMessageToAll(-1, iString);
8627 LogAdminCommand("sethp", playerid, pID);
8628 return 1;
8629}
8630
8631YCMD:setarmour(playerid, params[], help)
8632{
8633 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
8634 if(help)
8635 {
8636 SendCommandHelpMessage(playerid, "set a player armour to a specific value.");
8637 return 1;
8638 }
8639 new pID, Amount;
8640 if(sscanf(params, "id", pID, Amount)) return SendUsageMessage(playerid,"/setarmour [Player ID] [Amount]");
8641 if(Amount < 0 || Amount > 100) return SendErrorMessage(playerid,"Invalid amount.");
8642 if(!IsPlayerConnected(pID)) return SendErrorMessage(playerid,"That player isn't connected.");
8643
8644 SetAP(pID, Amount);
8645
8646 new iString[128];
8647 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has set {FFFFFF}%s's "COL_PRIM"Armour to: {FFFFFF}%d", Player[playerid][Name], Player[pID][Name], Amount);
8648 SendClientMessageToAll(-1, iString);
8649 LogAdminCommand("setarmour", playerid, pID);
8650 return 1;
8651}
8652
8653YCMD:pauselimit(playerid, params[], help)
8654{
8655 if(help)
8656 {
8657 SendCommandHelpMessage(playerid, "change pause limit and toggle auto unpause.");
8658 return 1;
8659 }
8660 new maxpauses, pauseduration;
8661 if(sscanf(params, "ii", maxpauses, pauseduration))
8662 {
8663 return SendUsageMessage(playerid, "/pauselimit [max pauses per round] [pause duration in minutes] []");
8664 }
8665 return 1;
8666}
8667
8668YCMD:pause(playerid, params[], help)
8669{
8670 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
8671 if(help)
8672 {
8673 SendCommandHelpMessage(playerid, "pause the currently active round.");
8674 return 1;
8675 }
8676 if(Current == -1) return SendErrorMessage(playerid,"There is no active round.");
8677
8678 new iString[144];
8679 if(RoundPaused == false)
8680 {
8681 if(RoundUnpausing == true)
8682 return SendErrorMessage(playerid,"Round is unpausing, please wait.");
8683
8684 PausePressed = GetTickCount();
8685
8686 PauseRound();
8687
8688 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has paused the current round.", Player[playerid][Name]);
8689 SendClientMessageToAll(-1, iString);
8690 }
8691 else
8692 {
8693 if((GetTickCount() - PausePressed) < 3000)
8694 return SendErrorMessage(playerid,"Please Wait.");
8695 if(RoundUnpausing == true)
8696 return 1;
8697
8698
8699 PauseCountdown = 4;
8700 UnpauseRound();
8701
8702 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has unpaused the current round.", Player[playerid][Name]);
8703 SendClientMessageToAll(-1, iString);
8704 }
8705
8706 return 1;
8707}
8708
8709YCMD:unpause(playerid, params[], help)
8710{
8711 if(help)
8712 {
8713 SendCommandHelpMessage(playerid, "resume the currently active round.");
8714 return 1;
8715 }
8716 if(RoundUnpausing == true) return SendErrorMessage(playerid,"Round is already unpausing.");
8717 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
8718 if(RoundPaused == false) return SendErrorMessage(playerid,"Round is not paused.");
8719
8720 PauseCountdown = 4;
8721 UnpauseRound();
8722
8723 new iString[144];
8724 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has unpaused the current round.", Player[playerid][Name]);
8725 SendClientMessageToAll(-1, iString);
8726 return 1;
8727}
8728
8729YCMD:showagain(playerid, params[], help)
8730{
8731 if(help)
8732 {
8733 SendCommandHelpMessage(playerid, "display round or match results.");
8734 return 1;
8735 }
8736 ShowEndRoundTextDraw(playerid);
8737 return 1;
8738}
8739
8740YCMD:match(playerid, params[], help)
8741{
8742 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You Need To Be An Admin.");
8743 if(help)
8744 {
8745 SendCommandHelpMessage(playerid, "toggle match mode.");
8746 return 1;
8747 }
8748 EnableMatchInterface(playerid);
8749 return 1;
8750}
8751
8752YCMD:goto(playerid,params[], help)
8753{
8754 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You Need To Be An Admin.");
8755 if(help)
8756 {
8757 SendCommandHelpMessage(playerid, "teleport you to a player.");
8758 return 1;
8759 }
8760 if(isnull(params)) return SendUsageMessage(playerid,"/goto [Player ID]");
8761 new gid = strval(params);
8762
8763 if(!IsPlayerConnected(gid) || gid == INVALID_PLAYER_ID) return SendErrorMessage(playerid,"Player isn't connected.");
8764 if(gid == playerid) return SendErrorMessage(playerid,"Can't go to yourself.");
8765 new Float:x, Float:y, Float:z;
8766 GetPlayerPos(gid,x,y,z);
8767 SetPlayerInterior(playerid,GetPlayerInterior(gid));
8768 SetPlayerVirtualWorld(playerid,GetPlayerVirtualWorld(gid));
8769
8770 if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
8771 SetVehiclePos(GetPlayerVehicleID(playerid),x+2,y,z);
8772 LinkVehicleToInterior(GetPlayerVehicleID(playerid),GetPlayerInterior(gid));
8773 SetVehicleVirtualWorld(GetPlayerVehicleID(playerid),GetPlayerVirtualWorld(gid));
8774 }
8775 else SetPlayerPos(playerid,x+1,y,z);
8776
8777 new tstr[128];
8778 format(tstr,180,"{FFFFFF}%s "COL_PRIM"has teleported to {FFFFFF}%s",Player[playerid][Name],Player[gid][Name]);
8779 SendClientMessageToAll(-1,tstr);
8780 LogAdminCommand("goto", playerid, gid);
8781 return 1;
8782}
8783
8784YCMD:get(playerid,params[], help)
8785{
8786 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You Need To Be An Admin.");
8787 if(help)
8788 {
8789 SendCommandHelpMessage(playerid, "teleport a player to you.");
8790 return 1;
8791 }
8792 if(isnull(params)) return SendUsageMessage(playerid,"/get [Player ID]");
8793 new gid = strval(params);
8794
8795 if(!IsPlayerConnected(gid) || gid == INVALID_PLAYER_ID) return SendErrorMessage(playerid,"Player isn't connected.");
8796 if(gid == playerid) return SendErrorMessage(playerid,"Can't get yourself.");
8797
8798 new Float:x, Float:y, Float:z;
8799 GetPlayerPos(playerid,x,y,z);
8800
8801 if(GetPlayerState(gid) == PLAYER_STATE_DRIVER) {
8802 SetVehiclePos(GetPlayerVehicleID(gid),x+2,y,z);
8803 LinkVehicleToInterior(GetPlayerVehicleID(gid),GetPlayerInterior(playerid));
8804 SetVehicleVirtualWorld(GetPlayerVehicleID(gid),GetPlayerVirtualWorld(playerid));
8805 }
8806 else SetPlayerPos(gid,x+1,y,z);
8807
8808 SetPlayerInterior(gid,GetPlayerInterior(playerid));
8809 SetPlayerVirtualWorld(gid,GetPlayerVirtualWorld(playerid));
8810
8811 new iString[128];
8812 format(iString, sizeof(iString),"{FFFFFF}%s "COL_PRIM"has teleported {FFFFFF}%s "COL_PRIM"to himself.",Player[playerid][Name],Player[gid][Name]);
8813 SendClientMessageToAll(-1, iString);
8814 LogAdminCommand("get", playerid, gid);
8815 return 1;
8816}
8817
8818
8819YCMD:spec(playerid, params[], help)
8820{
8821 if(help)
8822 {
8823 SendCommandHelpMessage(playerid, "enable you to spectate someone.");
8824 return 1;
8825 }
8826 if(isnull(params)) return SendUsageMessage(playerid,"/spec [Player ID]");
8827 new specid = strval(params);
8828 if(!IsPlayerConnected(specid)) return SendErrorMessage(playerid,"That player isn't connected.");
8829 if(specid == playerid) return SendErrorMessage(playerid,"Can't spectate yourself.");
8830 if(Player[playerid][Playing] == true) return SendErrorMessage(playerid,"Can't spectate while you are playing.");
8831 if(Player[specid][Spectating] == true) return SendErrorMessage(playerid,"That player is spectating someone else.");
8832 if(GetPlayerState(specid) != 1 && GetPlayerState(specid) != 2 && GetPlayerState(specid) != 3) return SendErrorMessage(playerid,"That player is not spawned.");
8833 if(Current != -1 && Player[playerid][Team] != REFEREE && !IsTeamTheSame(Player[specid][Team], Player[playerid][Team])) return SendErrorMessage(playerid,"You can only spectate your own team.");
8834 if(Iter_Count(PlayerSpectators[specid]) == MAX_PLAYER_SPECTATORS)
8835
8836 if(Player[playerid][InDM] == true) {
8837 Player[playerid][InDM] = false;
8838 Player[playerid][DMReadd] = 0;
8839 }
8840
8841 SpectatePlayer(playerid, specid);
8842 return 1;
8843}
8844
8845YCMD:specoff(playerid, params[], help)
8846{
8847 if(help)
8848 {
8849 SendCommandHelpMessage(playerid, "turn off spectate mode.");
8850 return 1;
8851 }
8852 if(Player[playerid][Spectating] == true || noclipdata[playerid][FlyMode] == true)
8853 {
8854 StopSpectate(playerid);
8855 return 1;
8856 }
8857 else
8858 {
8859 SendClientMessage(playerid,-1,"{FFFFFF}Error: "COL_PRIM"You are not spectating anyone.");
8860 }
8861 return 1;
8862}
8863
8864YCMD:vc(playerid, params[], help)
8865{
8866 if(help)
8867 {
8868 SendCommandHelpMessage(playerid, "change your vehicle paint.");
8869 return 1;
8870 }
8871 new color1, color2;
8872 if(sscanf(params, "ii", color1, color2))
8873 {
8874 return SendUsageMessage(playerid, "/vc [colour1] [colour2]");
8875 }
8876 if(!GetPlayerVehicleID(playerid))
8877 {
8878 return SendErrorMessage(playerid, "You are not in any vehicle!");
8879 }
8880 if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)
8881 {
8882 return SendErrorMessage(playerid, "You have to be the driver!");
8883 }
8884 ChangeVehicleColor(GetPlayerVehicleID(playerid), color1, color2);
8885 return 1;
8886}
8887
8888YCMD:vr(playerid, params[], help)
8889{
8890 if(help)
8891 {
8892 SendCommandHelpMessage(playerid, "repair your vehicle.");
8893 return 1;
8894 }
8895 if(!IsPlayerInAnyVehicle(playerid))
8896 return SendErrorMessage(playerid, "You aren't in any vehicle");
8897
8898 new Float:Pos[3];
8899 GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
8900
8901 if(Player[playerid][Playing] == true)
8902 {
8903 if(Pos[0] > BAttackerSpawn[Current][0] + 150 || Pos[0] < BAttackerSpawn[Current][0] - 150 || Pos[1] > BAttackerSpawn[Current][1] + 150 || Pos[1] < BAttackerSpawn[Current][1] - 150)
8904
8905 {
8906 return SendErrorMessage(playerid,"You are too far from ATTACKER spawn."); //If ATTACKER is too far away from his spawn.
8907 }
8908 }
8909 RepairVehicle(GetPlayerVehicleID(playerid));
8910 SendClientMessage(playerid, -1, "Vehicle repaired.");
8911 return 1;
8912}
8913
8914
8915
8916YCMD:acar(playerid, params[], help)
8917{
8918 if(Player[playerid][Level] < 4 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher level admin to do that.");
8919 if(help)
8920 {
8921 SendCommandHelpMessage(playerid, "spawn a car as an administrator (including blocked vehicles).");
8922 return 1;
8923 }
8924 if(Player[playerid][Playing] == true) return SendErrorMessage(playerid,"Can't use this command in rounds");
8925 if(isnull(params)) return SendUsageMessage(playerid,"/acar [Vehicle Name]");
8926 if(Player[playerid][Spectating] == true) return 1;
8927 if(Player[playerid][InDuel] == true) return SendErrorMessage(playerid,"Can't use this command during duel.");
8928 if(Player[playerid][Playing] == true && Player[playerid][TimesSpawned] >= 3) return SendErrorMessage(playerid,"You have spawned the maximum number of vehicles.");
8929 if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendErrorMessage(playerid,"Can't spawn a vehicle while you are not the driver.");
8930
8931 new veh;
8932
8933 if(IsNumeric(params))
8934 veh = strval(params);
8935 else
8936 veh = GetVehicleModelID(params);
8937 if(veh < 400 || veh > 611) return SendErrorMessage(playerid,"Invalid Vehicle Name."); //In samp there is no vehile with ID below 400 or above 611
8938
8939 if(Player[playerid][Playing] == false) {
8940 if(IsPlayerInAnyVehicle(playerid)) {
8941 RemovePlayerFromVehicle(playerid);
8942 DestroyVehicle(GetPlayerVehicleID(playerid));
8943 Player[playerid][LastVehicle] = -1;
8944 }
8945
8946 if(Player[playerid][LastVehicle] != -1) {
8947 DestroyVehicle(Player[playerid][LastVehicle]);
8948 Player[playerid][LastVehicle] = -1;
8949 }
8950 }
8951
8952 new Float:Pos[4];
8953 GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
8954 GetPlayerFacingAngle(playerid, Pos[3]);
8955
8956 if(IsPlayerInAnyVehicle(playerid)) {
8957 DestroyVehicle(GetPlayerVehicleID(playerid)); //If you are already in a vehicle and use /car, it will destroy that vehicle first and spawn the new one.
8958 }
8959
8960 new MyVehicle = CreateVehicle(veh, Pos[0], Pos[1], Pos[2], Pos[3], -1, -1, -1); //Creates the specific vehicle u were looking for (veh).
8961
8962 new plate[MAX_PLAYER_NAME];
8963 format(plate, sizeof(plate), "%s", Player[playerid][NameWithoutTag]);
8964 SetVehicleNumberPlate(MyVehicle, plate);
8965 SetVehicleToRespawn(MyVehicle);
8966
8967 LinkVehicleToInterior(MyVehicle, GetPlayerInterior(playerid)); //Links vehicle interior to the current player interior.
8968 SetVehicleVirtualWorld(MyVehicle, GetPlayerVirtualWorld(playerid)); //Sets vehicle virtual world the the current virtual world of the player.
8969 PutPlayerInVehicle(playerid, MyVehicle, 0); //Puts player in the driver seat.
8970
8971 if(Player[playerid][Playing] == false) Player[playerid][LastVehicle] = GetPlayerVehicleID(playerid);
8972 else Player[playerid][TimesSpawned] ++;
8973
8974 switch(veh)
8975 {
8976 case 560: // Sultan mods (most spawned car)
8977 {
8978 for(new i = 1026; i <= 1033; i++)
8979 {
8980 AddVehicleComponent(MyVehicle, i);
8981 }
8982 AddVehicleComponent(MyVehicle, 1138);
8983 AddVehicleComponent(MyVehicle, 1141);
8984 }
8985 case 565: // Flash mods
8986 {
8987 for(new i = 1045; i <= 1054; i++)
8988 {
8989 AddVehicleComponent(MyVehicle, i);
8990 }
8991 }
8992 case 535: // Slamvan
8993 {
8994 for(new i = 1110; i <= 1122; i++)
8995 {
8996 AddVehicleComponent(MyVehicle, i);
8997 }
8998 }
8999 }
9000 AddVehicleComponent(MyVehicle, 1025); // Offroad wheels
9001 AddVehicleComponent(MyVehicle, 1087); // Hydraulics
9002
9003 new iString[128];
9004 format(iString, sizeof(iString), "%s%s{FFFFFF} has spawned a(n) %s%s {FFFFFF}as admin",TextColor[Player[playerid][Team]], Player[playerid][Name], TextColor[Player[playerid][Team]], aVehicleNames[veh-400]);
9005 SendClientMessageToAll(-1, iString);
9006 LogAdminCommand("acar", playerid, INVALID_PLAYER_ID);
9007 return 1;
9008}
9009
9010
9011YCMD:v(playerid, params[], help)
9012{
9013 if(help)
9014 {
9015 SendCommandHelpMessage(playerid, "spawn a vehicle.");
9016 return 1;
9017 }
9018 if(isnull(params)) return SendUsageMessage(playerid,"/v [Vehicle name or ID]");
9019 if(Player[playerid][Spectating] == true) return 1;
9020 if(RoundPaused == true && Player[playerid][Playing] == true) return 1;
9021 if(Player[playerid][InDM] == true) return SendErrorMessage(playerid,"You can't spawn vehicle in DM.");
9022 if(Player[playerid][InDuel] == true) return SendErrorMessage(playerid,"Can't use this command during duel.");
9023 if(Player[playerid][Playing] == true && Player[playerid][TimesSpawned] >= 2) return SendErrorMessage(playerid,"You have spawned the maximum number of vehicles.");
9024 if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendErrorMessage(playerid,"Can't spawn a vehicle while you are not the driver.");
9025
9026 new veh;
9027
9028 if(IsNumeric(params))
9029 veh = strval(params);
9030 else
9031 veh = GetVehicleModelID(params);
9032
9033 if(veh < 400 || veh > 611) return SendErrorMessage(playerid,"Invalid Vehicle Name."); //In samp there is no vehile with ID below 400 or above 611
9034
9035 //Block some vehiles that u don't like e.g. Tank, hunter. It wil be annoying in lobby. To search for more vehicle IDs try samp wiki.
9036 if(veh == 407 || veh == 425 || veh == 430 || veh == 432 || veh == 435 || veh == 441 || veh == 447 || veh == 449) return SendErrorMessage(playerid,"This vehicle is blocked.");
9037 if(veh == 450 || veh == 464 || veh == 465 || veh == 476 || veh == 501 || veh == 512 || veh == 520 || veh == 537) return SendErrorMessage(playerid,"This vehicle is blocked.");
9038 if(veh == 538 || veh == 564 || veh == 569 || veh == 570 || veh == 577 || veh == 584 || veh == 590 || veh == 591) return SendErrorMessage(playerid,"This vehicle is blocked.");
9039 if(veh == 592 || veh == 594 || veh == 601 || veh == 606 || veh == 607 || veh == 608 || veh == 610 || veh == 611) return SendErrorMessage(playerid,"This vehicle is blocked.");
9040
9041// Allowed vehicles: 472=Coastguard 544=Firetruck LA 553=Nevada 595=Launch
9042
9043 new Float:Pos[4];
9044 GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
9045 GetPlayerFacingAngle(playerid, Pos[3]);
9046
9047 if(Player[playerid][Playing] == true) {
9048 if(Player[playerid][Team] == DEFENDER || Player[playerid][Team] == REFEREE) return SendErrorMessage(playerid,"Only ATTACKERs can spawn vehicle.");
9049 if(BInterior[Current] != 0) return SendErrorMessage(playerid,"You can't spawn vehicle in interior base.");
9050
9051 if(Player[playerid][Team] == ATTACKER && (Pos[0] > BAttackerSpawn[Current][0] + 100 || Pos[0] < BAttackerSpawn[Current][0] - 100 || Pos[1] > BAttackerSpawn[Current][1] + 100 || Pos[1] < BAttackerSpawn[Current][1] - 100)) {
9052 return SendErrorMessage(playerid,"You are too far from ATTACKER spawn."); //If ATTACKER is too far away from his spawn.
9053 }
9054 }
9055
9056 if(IsPlayerInAnyVehicle(playerid)) {
9057 Player[playerid][LastVehicle] = -1;
9058 DestroyVehicle(GetPlayerVehicleID(playerid)); //If you are already in a vehicle and use /car, it will destroy that vehicle first and spawn the new one.
9059 }
9060
9061 if(Player[playerid][Playing] == false) {
9062 if(Player[playerid][LastVehicle] != -1) {
9063
9064 new bool:InVehicle = false;
9065 foreach(new i : Player) {
9066 if(i != playerid && IsPlayerInVehicle(i, Player[playerid][LastVehicle])) {
9067 InVehicle = true;
9068 }
9069 }
9070
9071 if(InVehicle == false) {
9072 DestroyVehicle(Player[playerid][LastVehicle]);
9073 }
9074
9075 Player[playerid][LastVehicle] = -1;
9076 }
9077 }
9078 new MyVehicle = CreateVehicle(veh, Pos[0], Pos[1], Pos[2], Pos[3], -1, -1, -1); //Creates the specific vehicle u were looking for (veh).
9079 new plate[MAX_PLAYER_NAME];
9080 format(plate, sizeof(plate), "%s", Player[playerid][NameWithoutTag]);
9081 SetVehicleNumberPlate(MyVehicle, plate);
9082 LinkVehicleToInterior(MyVehicle, GetPlayerInterior(playerid)); //Links vehicle interior to the current player interior.
9083 SetVehicleVirtualWorld(MyVehicle, GetPlayerVirtualWorld(playerid)); //Sets vehicle virtual world the the current virtual world of the player.
9084 PutPlayerInVehicle(playerid, MyVehicle, 0); //Puts player in the driver seat.
9085
9086 if(Player[playerid][Playing] == false) Player[playerid][LastVehicle] = GetPlayerVehicleID(playerid);
9087 else Player[playerid][TimesSpawned] ++;
9088
9089
9090 switch(veh)
9091 {
9092 case 560: // Sultan mods (most spawned car)
9093 {
9094 for(new i = 1026; i <= 1033; i++)
9095 {
9096 AddVehicleComponent(MyVehicle, i);
9097 }
9098 AddVehicleComponent(MyVehicle, 1138);
9099 AddVehicleComponent(MyVehicle, 1141);
9100 }
9101 case 565: // Flash mods
9102 {
9103 for(new i = 1045; i <= 1054; i++)
9104 {
9105 AddVehicleComponent(MyVehicle, i);
9106 }
9107 }
9108 case 535: // Slamvan
9109 {
9110 for(new i = 1110; i <= 1122; i++)
9111 {
9112 AddVehicleComponent(MyVehicle, i);
9113 }
9114 }
9115 }
9116 AddVehicleComponent(MyVehicle, 1025); // Offroad wheels
9117 AddVehicleComponent(MyVehicle, 1087); // Hydraulics
9118
9119 if(Player[playerid][Playing] == true) {
9120 new iString[84];
9121 format(iString, sizeof(iString), "%s%s{FFFFFF} has spawned a(n) %s%s",TextColor[Player[playerid][Team]], Player[playerid][Name], TextColor[Player[playerid][Team]], aVehicleNames[veh-400]);
9122
9123 foreach(new i : Player)
9124 {
9125 if(IsTeamTheSame(Player[i][Team], Player[playerid][Team]))
9126 SendClientMessage(i, -1, iString);
9127 }
9128 }
9129 return 1;
9130}
9131
9132YCMD:ra(playerid,params[], help)
9133{
9134 if(help)
9135 {
9136 SendCommandHelpMessage(playerid, "start a random arena.");
9137 return 1;
9138 }
9139 CallLocalFunction("OnPlayerCommandText", "ds", playerid, "/random arena");
9140 return 1;
9141}
9142
9143YCMD:rb(playerid,params[], help)
9144{
9145 if(help)
9146 {
9147 SendCommandHelpMessage(playerid, "start a random base.");
9148 return 1;
9149 }
9150 CallLocalFunction("OnPlayerCommandText", "ds", playerid, "/random base");
9151 return 1;
9152}
9153
9154YCMD:random(playerid, params[], help)
9155{
9156 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
9157 if(help)
9158 {
9159 SendCommandHelpMessage(playerid, "start a random round.");
9160 return 1;
9161 }
9162 if(Current != -1) return SendErrorMessage(playerid,"A round is in progress, please wait for it to end.");
9163 if(AllowStartBase == false) return SendErrorMessage(playerid,"Please wait.");
9164
9165 if(isnull(params) || IsNumeric(params))
9166 return SendUsageMessage(playerid,"/random [base | arena]");
9167
9168 if(strcmp(params, "base", true) == 0)
9169 {
9170 new BaseID = DetermineRandomRound(2, false, BASE);
9171
9172 AllowStartBase = false; // Make sure other player or you yourself is not able to start base on top of another base.
9173 SetTimerEx("OnBaseStart", 4000, false, "i", BaseID);
9174
9175 new iString[144];
9176 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has randomly started Base: {FFFFFF}%s (ID: %d)", Player[playerid][Name], BName[BaseID], BaseID);
9177 SendClientMessageToAll(-1, iString);
9178 }
9179 else if(strcmp(params, "arena", true) == 0)
9180 {
9181 new ArenaID = DetermineRandomRound(2, false, ARENA);
9182
9183 AllowStartBase = false; // Make sure other player or you yourself is not able to start base on top of another base.
9184 SetTimerEx("OnArenaStart", 4000, false, "i", ArenaID);
9185
9186 new iString[144];
9187 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has randomly started Arena: {FFFFFF}%s (ID: %d)", Player[playerid][Name], AName[ArenaID], ArenaID);
9188 SendClientMessageToAll(-1, iString);
9189 }
9190 else
9191 return SendUsageMessage(playerid,"/random [base | arena]");
9192
9193 foreach(new i : Player) {
9194 if(CanPlay(i)) {
9195 TogglePlayerControllable(i, 0); // Pause all the players.
9196 Player[i][ToAddInRound] = true;
9197 }
9198 }
9199 return 1;
9200}
9201
9202YCMD:randomint(playerid, params[], help)
9203{
9204 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
9205 if(help)
9206 {
9207 SendCommandHelpMessage(playerid, "start a random round in an interior.");
9208 return 1;
9209 }
9210 if(Current != -1) return SendErrorMessage(playerid,"A round is in progress, please wait for it to end.");
9211 if(AllowStartBase == false) return SendErrorMessage(playerid,"Please wait.");
9212
9213 if(isnull(params) || IsNumeric(params))
9214 return SendUsageMessage(playerid,"/randomint [base | arena]");
9215
9216 if(strcmp(params, "base", true) == 0)
9217 {
9218 new BaseID = DetermineRandomRound(1, false, BASE);
9219
9220 AllowStartBase = false; // Make sure other player or you yourself is not able to start base on top of another base.
9221 SetTimerEx("OnBaseStart", 4000, false, "i", BaseID);
9222
9223 new iString[144];
9224 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has randomly started interior Base: {FFFFFF}%s (ID: %d)", Player[playerid][Name], BName[BaseID], BaseID);
9225 SendClientMessageToAll(-1, iString);
9226
9227 GameType = BASE;
9228 }
9229 else if(strcmp(params, "arena", true) == 0)
9230 {
9231 new ArenaID = DetermineRandomRound(1, false, ARENA);
9232
9233 AllowStartBase = false; // Make sure other player or you yourself is not able to start base on top of another base.
9234 SetTimerEx("OnArenaStart", 4000, false, "i", ArenaID);
9235
9236 new iString[144];
9237 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has randomly started interior Arena: {FFFFFF}%s (ID: %d)", Player[playerid][Name], AName[ArenaID], ArenaID);
9238 SendClientMessageToAll(-1, iString);
9239 }
9240 else
9241 return SendUsageMessage(playerid,"/randomint [base | arena]");
9242
9243 foreach(new i : Player) {
9244 if(CanPlay(i)) {
9245 TogglePlayerControllable(i, 0); // Pause all the players.
9246 Player[i][ToAddInRound] = true;
9247 }
9248 }
9249 return 1;
9250}
9251
9252YCMD:start(playerid, params[], help)
9253{
9254 if(Player[playerid][Level] < 1 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be a higher admin level.");
9255 if(help)
9256 {
9257 SendCommandHelpMessage(playerid, "start a round.");
9258 return 1;
9259 }
9260 if(Current != -1) return SendErrorMessage(playerid,"A round is in progress, please wait for it to end.");
9261 if(AllowStartBase == false) return SendErrorMessage(playerid,"Please wait.");
9262
9263 new Params[2][64], CommandID;
9264 sscanf(params, "ss", Params[0], Params[1]);
9265
9266 if(isnull(Params[0]) || IsNumeric(Params[0])) return
9267 SendUsageMessage(playerid,"/start [base | arena | rc | last] [ID]");
9268
9269 if(!strcmp(Params[0], "rc", true))
9270 {
9271 AllowStartBase = false; // Make sure other player or you yourself is not able to start base on top of another base.
9272 SetTimer("OnRCStart", 2000, false);
9273
9274 new iString[144];
9275 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has started RC Battlefield round (Interior: 72)", Player[playerid][Name]);
9276 SendClientMessageToAll(-1, iString);
9277 }
9278 else if(!strcmp(Params[0], "last", true))
9279 {
9280 if(ServerLastPlayed > -1 && ServerLastPlayedType > -1)
9281 {
9282 if(ServerLastPlayedType == 1)
9283 {
9284 new BaseID = ServerLastPlayed;
9285
9286 if(BaseID > MAX_BASES) return SendErrorMessage(playerid,"The last played base does not exist.");
9287 if(!BExist[BaseID]) return SendErrorMessage(playerid,"The last played base does not exist.");
9288
9289 AllowStartBase = false; // Make sure other player or you yourself is not able to start base on top of another base.
9290 SetTimerEx("OnBaseStart", 2000, false, "i", BaseID);
9291
9292 new iString[144];
9293 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has started the last played Base: {FFFFFF}%s (ID: %d)", Player[playerid][Name], BName[BaseID], BaseID);
9294 SendClientMessageToAll(-1, iString);
9295
9296 GameType = BASE;
9297 goto skipped;
9298
9299 }
9300 else if(ServerLastPlayedType == 0)
9301 {
9302
9303 new ArenaID = ServerLastPlayed;
9304
9305 if(ArenaID > MAX_ARENAS) return SendErrorMessage(playerid,"The last played arena does not exist.");
9306 if(!AExist[ArenaID]) return SendErrorMessage(playerid,"The last played arena does not exist.");
9307
9308 GameType = ARENA;
9309
9310 AllowStartBase = false; // Make sure other player or you yourself is not able to start base on top of another base.
9311 SetTimerEx("OnArenaStart", 2000, false, "i", ArenaID);
9312
9313 new iString[144];
9314 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has started the last played Arena: {FFFFFF}%s (ID: %d)", Player[playerid][Name], AName[ArenaID], ArenaID);
9315 SendClientMessageToAll(-1, iString);
9316 goto skipped;
9317 }
9318 }
9319 else
9320 return SendErrorMessage(playerid, "No bases/arenas have been played lately!");
9321 }
9322 else if(strcmp(Params[0], "base", true) == 0) CommandID = 1;
9323 else if(strcmp(Params[0], "arena", true) == 0) CommandID = 2;
9324 else return
9325 SendUsageMessage(playerid,"/start [base | arena | rc | last] [ID]");
9326
9327 if(!IsNumeric(Params[1])) return SendErrorMessage(playerid,"Base/Arena ID can only be numerical.");
9328
9329 if(CommandID == 1) {
9330 new BaseID = strval(Params[1]);
9331
9332 if(BaseID > MAX_BASES) return SendErrorMessage(playerid,"That base does not exist.");
9333 if(!BExist[BaseID]) return SendErrorMessage(playerid,"That base does not exist.");
9334
9335 AllowStartBase = false; // Make sure other player or you yourself is not able to start base on top of another base.
9336 SetTimerEx("OnBaseStart", 2000, false, "i", BaseID);
9337
9338 new iString[144];
9339 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has started Base: {FFFFFF}%s (ID: %d)", Player[playerid][Name], BName[BaseID], BaseID);
9340 SendClientMessageToAll(-1, iString);
9341
9342 } else if(CommandID == 2) {
9343
9344 new ArenaID = strval(Params[1]);
9345
9346 if(ArenaID > MAX_ARENAS) return SendErrorMessage(playerid,"That arena does not exist.");
9347 if(!AExist[ArenaID]) return SendErrorMessage(playerid,"That arena does not exist.");
9348 if(ArenaID == 80){
9349 SetPlayerPos(playerid,1374.0868,5.7015,1008.1563);
9350 }
9351
9352 AllowStartBase = false; // Make sure other player or you yourself is not able to start base on top of another base.
9353 SetTimerEx("OnArenaStart", 2000, false, "i", ArenaID);
9354
9355 new iString[144];
9356 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has started Arena: {FFFFFF}%s (ID: %d)", Player[playerid][Name], AName[ArenaID], ArenaID);
9357 SendClientMessageToAll(-1, iString);
9358 }
9359 skipped:
9360
9361 foreach(new i : Player) {
9362 if(CanPlay(i)) {
9363 TogglePlayerControllable(i, 0); // Pause all the players.
9364 Player[i][ToAddInRound] = true;
9365 }
9366 }
9367
9368 return 1;
9369}
9370
9371YCMD:sync(playerid, params[], help)
9372{
9373 if(help)
9374 {
9375 SendCommandHelpMessage(playerid, "re-sync you (restore stamina and other stuff).");
9376 return 1;
9377 }
9378 SyncPlayer(playerid);
9379 return 1;
9380}
9381
9382YCMD:setlevel(playerid, params[], help)
9383{
9384 if(Player[playerid][Level] < 5 && !IsPlayerAdmin(playerid)) return SendErrorMessage(playerid,"You need to be level 5 or rcon admin.");
9385 if(help)
9386 {
9387 SendCommandHelpMessage(playerid, "change the level of a player.");
9388 return 1;
9389 }
9390 new GiveID, LEVEL;
9391 if(sscanf(params, "id", GiveID, LEVEL)) return SendUsageMessage(playerid,"/setlevel [Player ID] [Level]");
9392
9393 if(!IsPlayerConnected(GiveID)) return SendErrorMessage(playerid,"That player is not connected.");
9394 if(Player[GiveID][Logged] == false) return SendErrorMessage(playerid,"That player is not logged in.");
9395 if(LEVEL < 0 || LEVEL > 5) return SendErrorMessage(playerid,"Invalid level.");
9396 if(Player[GiveID][Level] == LEVEL) return SendErrorMessage(playerid,"That player is already this level.");
9397
9398 if(Player[GiveID][Level] == 0)
9399 {
9400 // Previous level was 0. This means it's a new admin. Guide them.
9401 SendClientMessage(GiveID, -1, ""COL_PRIM"Looks like you're a new admin. Type {FFFFFF}/acmds "COL_PRIM" to see a list of admin commands!");
9402 }
9403
9404 new iString[128];
9405
9406 format(iString, sizeof(iString), "UPDATE Players SET Level = %d WHERE Name = '%q' AND Level != %d", LEVEL, Player[GiveID][Name], LEVEL);
9407 db_free_result(db_query(sqliteconnection, iString));
9408
9409 Player[GiveID][Level] = LEVEL;
9410 UpdatePlayerAdminGroup(GiveID);
9411
9412 format(iString,sizeof(iString),"{FFFFFF}\"%s\" "COL_PRIM"has set {FFFFFF}\"%s\"'s "COL_PRIM"level to: {FFFFFF}%d", Player[playerid][Name], Player[GiveID][Name], LEVEL);
9413 SendClientMessageToAll(-1, iString);
9414 LogAdminCommand("setlevel", playerid, GiveID);
9415 return 1;
9416}
9417
9418YCMD:weather(playerid,params[], help)
9419{
9420 if(help)
9421 {
9422 SendCommandHelpMessage(playerid, "change your weather.");
9423 return 1;
9424 }
9425 if(isnull(params)) return SendUsageMessage(playerid,"/weather [ID]");
9426 if(!IsNumeric(params)) return SendErrorMessage(playerid,"You need to put a number for weather id.");
9427
9428 new myweather;
9429 myweather = strval(params);
9430 if(myweather < 0 || myweather > WeatherLimit) return SendErrorMessage(playerid,"Invalid weather ID.");
9431
9432 SetPlayerWeather(playerid, myweather);
9433 Player[playerid][Weather] = myweather;
9434
9435 new iString[128];
9436
9437
9438 format(iString, sizeof(iString), "UPDATE Players SET Weather = %d WHERE Name = '%q'", myweather, Player[playerid][Name]);
9439 db_free_result(db_query(sqliteconnection, iString));
9440
9441 format(iString, sizeof(iString), "{FFFFFF}Weather changed to: %d", myweather);
9442 SendClientMessage(playerid, -1, iString);
9443
9444 return 1;
9445}
9446
9447YCMD:testsound(playerid, params[], help)
9448{
9449 if(help)
9450 {
9451 SendCommandHelpMessage(playerid, "test a sound ID.");
9452 return 1;
9453 }
9454 if(isnull(params) || !IsNumeric(params)) return SendUsageMessage(playerid,"/testsound [Sound ID]");
9455
9456 new Val = strval(params);
9457 if(!IsValidSound(Val)) return SendErrorMessage(playerid,"This sound ID is not valid. Type 'samp sound id' on Google for more.");
9458
9459 PlayerPlaySound(playerid, Val, 0, 0, 0);
9460 return 1;
9461}
9462
9463YCMD:sound(playerid, params[], help)
9464{
9465 if(help)
9466 {
9467 SendCommandHelpMessage(playerid, "change your sound hit ID.");
9468 return 1;
9469 }
9470 new Option[16], Value[64], CommandID;
9471 if(sscanf(params, "sz",Option, Value))
9472 {
9473 SendUsageMessage(playerid,"/sound [hit | gethit] [Sound ID | default]");
9474 SendClientMessage(playerid, -1, "Use /testsound to test a sound ID before using it. Type 'samp sound id' on Google for more.");
9475 return 1;
9476 }
9477
9478 if(strcmp(Option, "hit", true) == 0) CommandID = 1;
9479 else if(strcmp(Option, "gethit", true) == 0) CommandID = 2;
9480 else
9481 {
9482 SendUsageMessage(playerid,"/sound [hit | gethit] [Sound ID | default]");
9483 SendClientMessage(playerid, -1, "Use /testsound to test a sound ID before using it. Type 'samp sound id' on Google for more.");
9484 return 1;
9485 }
9486
9487 new iString[128];
9488 switch(CommandID)
9489 {
9490 case 1:
9491 {
9492 if(isnull(Value)) return SendUsageMessage(playerid,"/sound [hit] [Sound ID | default]");
9493 if(!IsNumeric(Value))
9494 {
9495 if(strcmp(Value, "default", true) == 0)
9496 {
9497 Player[playerid][HitSound] = 17802;
9498 }
9499 else
9500 {
9501 SendUsageMessage(playerid,"/sound [hit | gethit] [Sound ID | default]");
9502 SendClientMessage(playerid, -1, "Use /testsound to test a sound ID before using it. Type 'samp sound id' on Google for more.");
9503 return 1;
9504 }
9505 }
9506 else
9507 {
9508 new Val = strval(Value);
9509 if(!IsValidSound(Val)) return SendErrorMessage(playerid,"This sound ID is not valid. Type 'samp sound id' on Google for more.");
9510
9511 Player[playerid][HitSound] = Val;
9512 }
9513 format(iString, sizeof(iString), "UPDATE Players SET HitSound = %d WHERE Name = '%q'", Player[playerid][HitSound], Player[playerid][Name]);
9514 db_free_result(db_query(sqliteconnection, iString));
9515
9516 PlayerPlaySound(playerid, Player[playerid][HitSound], 0, 0, 0);
9517 }
9518 case 2:
9519 {
9520 if(isnull(Value))
9521 {
9522 SendUsageMessage(playerid,"/sound [hit | gethit] [Sound ID | default]");
9523 SendClientMessage(playerid, -1, "Use /testsound to test a sound ID before using it. Type 'samp sound id' on Google for more.");
9524 return 1;
9525 }
9526 if(!IsNumeric(Value))
9527 {
9528 if(strcmp(Value, "default", true) == 0)
9529 {
9530 Player[playerid][GetHitSound] = 1131;
9531 }
9532 else
9533 {
9534 SendUsageMessage(playerid,"/sound [hit | gethit] [Sound ID | default]");
9535 SendClientMessage(playerid, -1, "Use /testsound to test a sound ID before using it. Type 'samp sound id' on Google for more.");
9536 return 1;
9537 }
9538 }
9539 else
9540 {
9541 new Val = strval(Value);
9542 if(!IsValidSound(Val)) return SendErrorMessage(playerid,"This sound ID is not valid. Type 'samp sound id' on Google for more.");
9543
9544 Player[playerid][GetHitSound] = Val;
9545 }
9546 format(iString, sizeof(iString), "UPDATE Players SET GetHitSound = %d WHERE Name = '%q'", Player[playerid][GetHitSound], Player[playerid][Name]);
9547 db_free_result(db_query(sqliteconnection, iString));
9548
9549 PlayerPlaySound(playerid, Player[playerid][GetHitSound], 0, 0, 0);
9550 }
9551 }
9552
9553
9554 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has changed his {FFFFFF}%s "COL_PRIM"to {FFFFFF}ID: %d", Player[playerid][Name], (CommandID == 1 ? ("Hit Sound") : ("Get Hit Sound")), (CommandID == 1 ? Player[playerid][HitSound] : Player[playerid][GetHitSound]));
9555 SendClientMessageToAll(-1, iString);
9556 return 1;
9557}
9558
9559YCMD:time(playerid, params[], help)
9560{
9561 if(help)
9562 {
9563 SendCommandHelpMessage(playerid, "change your day time.");
9564 return 1;
9565 }
9566 if(isnull(params)) return SendUsageMessage(playerid,"/time [Hour]");
9567 if(!IsNumeric(params)) return SendErrorMessage(playerid,"You need to put a number for weather id.");
9568 if(Player[playerid][Logged] == false) return SendErrorMessage(playerid,"You need to log in.");
9569
9570 new mytime;
9571 mytime = strval(params);
9572 if(mytime < 0 || mytime > TimeLimit) return SendErrorMessage(playerid,"Invalid time.");
9573
9574 SetPlayerTime(playerid, mytime, 0);
9575 Player[playerid][Time] = mytime;
9576
9577 new iString[128];
9578
9579 format(iString, sizeof(iString), "UPDATE Players SET Time = %d WHERE Name = '%q'", mytime, Player[playerid][Name]);
9580 db_free_result(db_query(sqliteconnection, iString));
9581
9582 format(iString, sizeof(iString), "{FFFFFF}Time changed to: %d", mytime);
9583 SendClientMessage(playerid, -1, iString);
9584 return 1;
9585}
9586
9587YCMD:dm(playerid, params[], help)
9588{
9589 new skinnumber;
9590
9591 if(help)
9592 {
9593 SendCommandHelpMessage(playerid, "teleport you to a deathmatch arena.");
9594 return 1;
9595 }
9596 if(isnull(params)) return SendUsageMessage(playerid,"/dm [DM ID]");
9597 if(!IsNumeric(params)) return SendErrorMessage(playerid,"DM id can only be numeric.");
9598 if(Player[playerid][Playing] == true) return 1;
9599
9600 new DMID = strval(params);
9601
9602 // Here I also added '=' after '>' so that if the DMID was Bigger than or Equal to MAX_DMS then you get that error message.
9603 // Without this '=' (equal sign) if you type /dm 15 it will say the command is unkown which is a script error.
9604 if(DMID >= MAX_DMS) return SendErrorMessage(playerid,"Invalid DM id."); // If you don't use this line and later on you use 'crashdetect' plugin for ur gamemode, it will give you an error.
9605 if(DMID == 14){
9606 SetPlayerVirtualWorld(playerid,71);
9607 }
9608 if(DMID == 15) {
9609 SetPlayerVirtualWorld(playerid,72);
9610 GivePlayerWeapon(playerid,34,999);
9611 }
9612 if(DMID == 7) {
9613 SetPlayerVirtualWorld(playerid,1);
9614 }
9615 if(DMID == 1) {
9616 SetPlayerVirtualWorld(playerid,1);
9617 }
9618 if(DMID == 2) {
9619 SetPlayerVirtualWorld(playerid,1);
9620 }
9621 if(DMID == 3) {
9622 SetPlayerVirtualWorld(playerid,1);
9623 }
9624 if(DMID == 4) {
9625 SetPlayerVirtualWorld(playerid,1);
9626 }
9627 if(DMID == 5) {
9628 SetPlayerVirtualWorld(playerid,1);
9629 }
9630 if(DMID == 6) {
9631 SetPlayerVirtualWorld(playerid,1);
9632 }
9633 if(DMID == 8) {
9634 SetPlayerVirtualWorld(playerid,1);
9635 }
9636 if(DMID == 9) {
9637 SetPlayerVirtualWorld(playerid,1);
9638 }
9639 if(DMID == 10) {
9640 SetPlayerVirtualWorld(playerid,1);
9641 }
9642 if(DMID == 11) {
9643 SetPlayerVirtualWorld(playerid,1);
9644 }
9645 if(DMID == 12) {
9646 SetPlayerVirtualWorld(playerid,1);
9647 }
9648 if(DMID == 13) {
9649 SetPlayerVirtualWorld(playerid,1);
9650 }
9651
9652 if(DMExist[DMID] == false) return SendErrorMessage(playerid,"This DM does not exist.");
9653
9654 if(Player[playerid][Spectating] == true) StopSpectate(playerid);
9655
9656 ResetPlayerWeapons(playerid); // Reset all player weapons
9657 SetHP(playerid, 100);
9658 SetAP(playerid, 100);
9659
9660 Player[playerid][InDM] = true; // Keep a record of what is the player current status.
9661 Player[playerid][DMReadd] = DMID;
9662 Player[playerid][VWorld] = 1;
9663
9664 // format for SetPlayerSpawn(Playerid, Team, Skin, X, Y, X, Angle, Weapon 1, Weapon 1 Ammo, Weapon 2, Weapon 2 Ammo, Weapon 3, Weapon 3 Ammo)
9665 // I suggest you use SetPlayerSpawn most of the time instead of 'SetPlayerPos' And 'SetPlayerSkin' because using 'SetPlayerSkin' and 'SpawnPlayer' at the same time will crash the player in random even if the player has 100% orginal GTA.
9666 SetSpawnInfo(playerid, playerid, Skin[Player[playerid][Team]], DMSpawn[DMID][0]+random(2), DMSpawn[DMID][1]+random(2), DMSpawn[DMID][2], DMSpawn[DMID][3], DMWeapons[DMID][0], 9999, DMWeapons[DMID][1], 9999, DMWeapons[DMID][2], 9999);
9667 Player[playerid][IgnoreSpawn] = true; //Make sure you ignore OnPlayerSpawn, else you will just spawn in lobby (because u are about to use SpawnPlayer).
9668
9669 SpawnPlayer(playerid); //Spawns players, in this case we have SetSpawnInfo (but still you need to make sure OnPlayerSpawn is ignored);
9670 SetPlayerInterior(playerid, DMInterior[DMID]);
9671 SetPlayerTeam(playerid, playerid);
9672 skinnumber =GetPlayerSkin(playerid);
9673 SetPlayerSkin(playerid, skinnumber);
9674 new iString[140];
9675
9676 if(DMWeapons[DMID][1] == 0 && DMWeapons[DMID][2] == 0) format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has entered DM %d {FFFFFF}(%s).", Player[playerid][Name], DMID, WeaponNames[DMWeapons[DMID][0]]); // If the second and third weapons are punch or no weapons then it'll show you just one weapon instead of saying (Deagle - Punch - Punch)
9677 else if(DMWeapons[DMID][2] == 0) format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has entered DM %d {FFFFFF}(%s - %s).", Player[playerid][Name], DMID, WeaponNames[DMWeapons[DMID][0]], WeaponNames[DMWeapons[DMID][1]]); //If only the third weapons is punch then it'll show two weapons e.g. (Deagle - Shotgun) instead of (Deagle - Shotgun - Punch)
9678 else format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has entered DM %d {FFFFFF}(%s - %s - %s).", Player[playerid][Name], DMID, WeaponNames[DMWeapons[DMID][0]], WeaponNames[DMWeapons[DMID][1]], WeaponNames[DMWeapons[DMID][2]] ); //If all the weapons are known then it'll show u all three weapons e.g. (Deagle - Shotgun - Sniper)
9679
9680 SendClientMessageToAll(-1, iString); // Send the formatted message to everyone.
9681
9682 if(Player[playerid][BeingSpeced] == true)
9683 {
9684 foreach(new i : Player)
9685 {
9686 if(Player[i][Spectating] == true && Player[i][IsSpectatingID] == playerid) {
9687 StopSpectate(i);
9688 }
9689 }
9690 }
9691 return 1;
9692}
9693
9694YCMD:leavedm(playerid, params[], help)
9695{
9696 if(help)
9697 {
9698 SendCommandHelpMessage(playerid, "get you out of a deathmatch arena.");
9699 return 1;
9700 }
9701 QuitDM(playerid);
9702 return 1;
9703
9704}
9705
9706YCMD:int(playerid,params[], help)
9707{
9708 if(help)
9709 {
9710 SendCommandHelpMessage(playerid, "teleport you to an interior.");
9711 return 1;
9712 }
9713 if(Player[playerid][Playing] == true) return SendClientMessage(playerid, -1, "{FFFFFF}Error: "COL_PRIM"Can't use while round is active.");
9714 if(Player[playerid][InDuel] == true) return SendErrorMessage(playerid,"Can't use this command during duel.");
9715 if(isnull(params) || !IsNumeric(params)) return SendClientMessage(playerid, -1, "{FFFFFF}USAGE: "COL_PRIM"/int [1-147]");
9716
9717 new id = strval(params);
9718 if(id <= 0 || id > 147) return SendClientMessage(playerid,-1 ,"{FFFFFF}USAGE: "COL_PRIM"/int [1-147]");
9719
9720 if(Player[playerid][Spectating] == true) StopSpectate(playerid);
9721 if(Player[playerid][InDM] == true) QuitDM(playerid);
9722 if(Player[playerid][Spectating] == true) StopSpectate(playerid);
9723
9724 if(IsPlayerInAnyVehicle(playerid)) {
9725 new vehicleid = GetPlayerVehicleID(playerid);
9726 foreach(new i : Player) {
9727 if(vehicleid == GetPlayerVehicleID(i)) {
9728 SetPlayerInterior(i, Interiors[id][int_interior]);
9729 }
9730 }
9731 SetVehiclePos(GetPlayerVehicleID(playerid), Interiors[id][int_x], Interiors[id][int_y], Interiors[id][int_z]);
9732 SetVehicleZAngle(GetPlayerVehicleID(playerid), 0.0);
9733 LinkVehicleToInterior(GetPlayerVehicleID(playerid), Interiors[id][int_interior]);
9734 SetCameraBehindPlayer(playerid);
9735 } else {
9736 SetPlayerPos(playerid,Interiors[id][int_x], Interiors[id][int_y], Interiors[id][int_z]);
9737 SetPlayerFacingAngle(playerid, Interiors[id][int_a]);
9738 SetPlayerInterior(playerid, Interiors[id][int_interior]);
9739 SetCameraBehindPlayer(playerid);
9740 }
9741
9742 new iString[144];
9743 format(iString,sizeof(iString),"{FFFFFF}%s "COL_PRIM"has entered Interior ID: {FFFFFF}%d",Player[playerid][Name],id);
9744 SendClientMessageToAll(-1,iString);
9745 return 1;
9746}
9747
9748// End of commands!
9749
9750public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
9751{
9752 // - High priority key functions
9753 if(newkeys == 160 && GetPlayerVehicleID(playerid) == 0)
9754 {
9755 switch(GetWeaponSlot(GetPlayerWeapon(playerid)))
9756 {
9757 case 0, 1, 8, 11:
9758 {
9759 SyncPlayer(playerid);
9760 return 1;
9761 }
9762 }
9763 }
9764 if(AntiMacros == true && CheckPlayerSprintMacro(playerid, newkeys, oldkeys) == true)
9765 return 1;
9766
9767 if(PRESSED(4)) // key fire
9768 {
9769 if(Player[playerid][TextDrawOnScreen] && (LastMatchEndTime+2)-gettime() <= 0)
9770 {
9771 HideEndRoundTextDraw(playerid);
9772 return 1;
9773 }
9774 if(Player[playerid][InDeathCamera])
9775 {
9776 OnPlayerDeathCameraEnd(playerid);
9777 return 1;
9778 }
9779 }
9780 if(Player[playerid][Spectating] == true && noclipdata[playerid][FlyMode] == false && Player[playerid][SpectatingRound] == -1)
9781 {
9782 if(newkeys == 4)
9783 {
9784 if(Current != -1)
9785 {
9786 SpectateNextTeamPlayer(playerid);
9787 }
9788 else
9789 {
9790 SpectateNextPlayer(playerid);
9791 }
9792 }
9793 else if(newkeys == 128)
9794 {
9795 if(Current != -1)
9796 {
9797 SpectatePreviousTeamPlayer(playerid);
9798 }
9799 else
9800 {
9801 SpectatePreviousPlayer(playerid);
9802 }
9803 }
9804 return 1;
9805 }
9806 if(Current != -1)
9807 {
9808 if(Player[playerid][Playing] == true)
9809 {
9810 if(PRESSED(131072) && AllowStartBase == true)
9811 {
9812 if(PlayerRequestBackup(playerid))
9813 return 1;
9814 }
9815 // Lead team
9816 if(PRESSED(262144) && AllowStartBase == true)
9817 {
9818 if(GetPlayerVehicleID(playerid))
9819 return 1;
9820
9821 if((GetTickCount() - Player[playerid][LastAskLeader]) < 5000)
9822 {
9823 SendErrorMessage(playerid,"Please wait.");
9824 return 0;
9825 }
9826 new team = Player[playerid][Team];
9827 if(TeamHasLeader[team] != true)
9828 {
9829 PlayerLeadTeam(playerid, false, true);
9830 }
9831 else
9832 {
9833 if(TeamLeader[team] == playerid) // off
9834 {
9835 PlayerNoLeadTeam(playerid);
9836 }
9837 else
9838 SendErrorMessage(playerid, "Your team already has a leader!");
9839 }
9840 Player[playerid][LastAskLeader] = GetTickCount();
9841 return 1;
9842 }
9843 }
9844
9845 // Pause/unpause or ask for pause/unpause
9846 if(PRESSED(65536))
9847 {
9848 if(Player[playerid][Level] > 0)
9849 {
9850 if(!Player[playerid][Spectating] && Player[playerid][Playing] == false)return 1;
9851
9852 switch(RoundPaused)
9853 {
9854 case true:
9855 {
9856 new iString[144];
9857 if((GetTickCount() - PausePressed) < 3000)
9858 return SendErrorMessage(playerid,"Please Wait.");
9859 if(RoundUnpausing == true) return 1;
9860
9861 PauseCountdown = 4;
9862 UnpauseRound();
9863
9864 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has unpaused the current round.", Player[playerid][Name]);
9865 SendClientMessageToAll(-1, iString);
9866 return 1;
9867 }
9868 case false:
9869 {
9870 new iString[144];
9871 if(RoundUnpausing == true) return SendErrorMessage(playerid,"Round is unpausing, please wait.");
9872
9873 PausePressed = GetTickCount();
9874
9875 PauseRound();
9876
9877 format(iString, sizeof(iString), "{FFFFFF}%s "COL_PRIM"has paused the current round.", Player[playerid][Name]);
9878 SendClientMessageToAll(-1, iString);
9879 return 1;
9880 }
9881 }
9882 }
9883 else
9884 {
9885 if(Player[playerid][Playing] == false)return 1;
9886
9887 switch(RoundPaused)
9888 {
9889 case true:
9890 {
9891 if((GetTickCount() - Player[playerid][lastChat]) < 10000)
9892 {
9893 SendErrorMessage(playerid,"Please wait.");
9894 return 0;
9895 }
9896 foreach(new i : Player)
9897 PlayerPlaySound(i, 1133, 0.0, 0.0, 0.0);
9898 Player[playerid][lastChat] = GetTickCount();
9899 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"is asking for an unpause!", Player[playerid][Name]));
9900 return 1;
9901 }
9902 case false:
9903 {
9904 if((GetTickCount() - Player[playerid][lastChat]) < 10000)
9905 {
9906 SendErrorMessage(playerid,"Please wait.");
9907 return 0;
9908 }
9909 foreach(new i : Player)
9910 PlayerPlaySound(i, 1133, 0.0, 0.0, 0.0);
9911 Player[playerid][lastChat] = GetTickCount();
9912 SendClientMessageToAll(-1, sprintf("{FFFFFF}%s "COL_PRIM"is asking for a pause!", Player[playerid][Name]));
9913 return 1;
9914 }
9915 }
9916 }
9917 }
9918 }
9919
9920 // - Low priority key functions
9921
9922 if(CheckKeysForWeaponBind(playerid, newkeys, oldkeys) == 1)
9923 return 1;
9924
9925 if(GetPlayerVehicleID(playerid) && PRESSED(KEY_FIRE) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
9926 AddVehicleComponent(GetPlayerVehicleID(playerid), 1010);
9927 return 1;
9928 }
9929
9930 if(Player[playerid][SpectatingRound] != -1)
9931 {
9932 new iString[128];
9933 switch(Player[playerid][SpectatingType]) {
9934 case BASE: {
9935 if(newkeys == 4) {
9936 new searching;
9937 for(new i = Player[playerid][SpectatingRound]+1; i <= MAX_BASES; i++) {
9938 if(searching > 1) {
9939 break;
9940 }
9941 if(i == MAX_BASES) {
9942 i = 1;
9943 searching++;
9944 }
9945 if(BExist[i] == true) {
9946 Player[playerid][SpectatingRound] = i;
9947 SetPlayerInterior(playerid, BInterior[i]);
9948 SetPlayerCameraLookAt(playerid,BCPSpawn[i][0],BCPSpawn[i][1],BCPSpawn[i][2]);
9949 SetPlayerCameraPos(playerid,BCPSpawn[i][0]+100,BCPSpawn[i][1],BCPSpawn[i][2]+80);
9950 SetPlayerPos(playerid, BCPSpawn[i][0], BCPSpawn[i][1], BCPSpawn[i][2]);
9951 format(iString, sizeof(iString), "%sBase ~n~%s%s (ID: ~r~~h~%d%s)", MAIN_TEXT_COLOUR, MAIN_TEXT_COLOUR, BName[i], i, MAIN_TEXT_COLOUR);
9952 PlayerTextDrawSetString(playerid, TD_RoundSpec[playerid], iString);
9953 break;
9954 }
9955 }
9956 } else if(newkeys == 128) {
9957 new searching;
9958 for(new i = Player[playerid][SpectatingRound]-1; i >= 0; i--)
9959 {
9960 if(searching > 1) {
9961 break;
9962 }
9963 if(i == 0) {
9964 i = MAX_BASES - 1;
9965 searching++;
9966 }
9967
9968 if(BExist[i] == true) {
9969 Player[playerid][SpectatingRound] = i;
9970 SetPlayerInterior(playerid, BInterior[i]);
9971 SetPlayerCameraLookAt(playerid,BCPSpawn[i][0],BCPSpawn[i][1],BCPSpawn[i][2]);
9972 SetPlayerCameraPos(playerid,BCPSpawn[i][0]+100,BCPSpawn[i][1],BCPSpawn[i][2]+80);
9973 SetPlayerPos(playerid, BCPSpawn[i][0], BCPSpawn[i][1], BCPSpawn[i][2]);
9974
9975 format(iString, sizeof(iString), "%sBase ~n~%s%s (ID: ~r~~h~%d%s)", MAIN_TEXT_COLOUR, MAIN_TEXT_COLOUR, BName[i], i, MAIN_TEXT_COLOUR);
9976 PlayerTextDrawSetString(playerid, TD_RoundSpec[playerid], iString);
9977 break;
9978 }
9979 }
9980 }
9981 } case ARENA: {
9982 if(newkeys == 4) {
9983 new searching;
9984 for(new i = Player[playerid][SpectatingRound]+1; i <= MAX_ARENAS; i++) {
9985 if(searching > 1) {
9986 break;
9987 }
9988 if(i == MAX_ARENAS) {
9989 i = 0;
9990 searching++;
9991 }
9992 if(AExist[i] == true) {
9993 Player[playerid][SpectatingRound] = i;
9994 SetPlayerCameraLookAt(playerid,ACPSpawn[Player[playerid][SpectatingRound]][0],ACPSpawn[Player[playerid][SpectatingRound]][1],ACPSpawn[Player[playerid][SpectatingRound]][2]);
9995 SetPlayerCameraPos(playerid,ACPSpawn[Player[playerid][SpectatingRound]][0]+100,ACPSpawn[Player[playerid][SpectatingRound]][1],ACPSpawn[Player[playerid][SpectatingRound]][2]+80);
9996 SetPlayerPos(playerid, ACPSpawn[Player[playerid][SpectatingRound]][0], ACPSpawn[Player[playerid][SpectatingRound]][1], ACPSpawn[Player[playerid][SpectatingRound]][2]);
9997 SetPlayerInterior(playerid, AInterior[Player[playerid][SpectatingRound]]);
9998
9999 format(iString, sizeof(iString), "%sArena ~n~%s%s (ID: ~r~~h~%d%s)", MAIN_TEXT_COLOUR, MAIN_TEXT_COLOUR, AName[Player[playerid][SpectatingRound]], Player[playerid][SpectatingRound], MAIN_TEXT_COLOUR);
10000 PlayerTextDrawSetString(playerid, TD_RoundSpec[playerid], iString);
10001 break;
10002 }
10003 }
10004 } else if(newkeys == 128) {
10005 new searching;
10006 for(new i = Player[playerid][SpectatingRound]-1; i >= 0; i--) {
10007 if(searching > 1) {
10008 break;
10009 }
10010 if(i == 0) {
10011 i = MAX_ARENAS - 1;
10012 searching++;
10013 }
10014
10015 if(AExist[i] == true) {
10016 Player[playerid][SpectatingRound] = i;
10017 SetPlayerCameraLookAt(playerid,ACPSpawn[Player[playerid][SpectatingRound]][0],ACPSpawn[Player[playerid][SpectatingRound]][1],ACPSpawn[Player[playerid][SpectatingRound]][2]);
10018 SetPlayerCameraPos(playerid,ACPSpawn[Player[playerid][SpectatingRound]][0]+100,ACPSpawn[Player[playerid][SpectatingRound]][1],ACPSpawn[Player[playerid][SpectatingRound]][2]+80);
10019 SetPlayerPos(playerid, ACPSpawn[Player[playerid][SpectatingRound]][0], ACPSpawn[Player[playerid][SpectatingRound]][1], ACPSpawn[Player[playerid][SpectatingRound]][2]);
10020 SetPlayerInterior(playerid, AInterior[Player[playerid][SpectatingRound]]);
10021
10022 format(iString, sizeof(iString), "%sArena ~n~%s%s (ID: ~r~~h~%d%s)", MAIN_TEXT_COLOUR, MAIN_TEXT_COLOUR, AName[Player[playerid][SpectatingRound]], Player[playerid][SpectatingRound], MAIN_TEXT_COLOUR);
10023 PlayerTextDrawSetString(playerid, TD_RoundSpec[playerid], iString);
10024 break;
10025 }
10026 }
10027 }
10028
10029 }
10030 }
10031 if(newkeys == 32)
10032 {
10033 switch(Player[playerid][SpectatingType])
10034 {
10035 case BASE: format(iString, sizeof(iString), ""COL_PRIM"Spectating Base: {FFFFFF}%s (ID: %d)", BName[Player[playerid][SpectatingRound]], Player[playerid][SpectatingRound]);
10036 case ARENA: format(iString, sizeof(iString), ""COL_PRIM"Spectating Arena: {FFFFFF}%s (ID: %d)", AName[Player[playerid][SpectatingRound]], Player[playerid][SpectatingRound]);
10037 }
10038 SendClientMessage(playerid, -1, iString);
10039 SetCameraBehindPlayer(playerid);
10040 Player[playerid][SpectatingRound] = -1;
10041 PlayerTextDrawSetString(playerid, TD_RoundSpec[playerid], "_");
10042 Player[playerid][Spectating] = false;
10043 }
10044 return 1;
10045 }
10046 if(Current == -1)
10047 {
10048 if(PRESSED(KEY_YES) && Player[playerid][Level] > 1 && GetPlayerVehicleID(playerid) == 0)
10049 {
10050 EnableMatchInterface(playerid);
10051 return 1;
10052 }
10053 else if(PRESSED(131072) && GetPlayerVehicleID(playerid) == 0)
10054 {
10055 ShowEndRoundTextDraw(playerid);
10056 return 1;
10057 }
10058 }
10059 return 1;
10060}
10061
10062// OnScriptUpdate - interval: 1000 ms
10063forward OnScriptUpdate();
10064public OnScriptUpdate()
10065{
10066 CheckVisualDamageTextDraws(); // This basically hides damage textdraws and damage bubbles that should be hidden
10067
10068 foreach(new i : Player)
10069 {
10070 // AFK Variable Update
10071 Player[i][PauseCount] ++;
10072
10073 // Get & update player FPS
10074 GetPlayerFPS(i);
10075
10076 // Show target info
10077 ShowTargetInfo(i, GetPlayerTargetPlayer(i));
10078
10079 // Update net info textdraws
10080 if(PlayerInterface[i][INTERFACE_NET])
10081 {
10082 PlayerTextDrawSetString(i, FPSPingPacket[i], sprintf("%sFPS ~r~%d %sPing ~r~%d %sPacketLoss ~r~%.1f%%", MAIN_TEXT_COLOUR, Player[i][FPS], MAIN_TEXT_COLOUR, GetPlayerPing(i), MAIN_TEXT_COLOUR, NetStats_PacketLossPercent(i)));
10083 Update3DTextLabelText(Player[i][InfoLabel], -1, sprintf("%sPL: {FFFFFF}%.1f%%\n%sPing: {FFFFFF}%d\n%sFPS: {FFFFFF}%d", TextColor[Player[i][Team]], NetStats_PacketLossPercent(i), TextColor[Player[i][Team]], GetPlayerPing(i), TextColor[Player[i][Team]], Player[i][FPS]));
10084 }
10085 }
10086
10087 // Update Vehicle Information
10088 if(VehicleHealthTextdraw)
10089 {
10090 foreach(new i : PlayersInVehicles)
10091 {
10092 new vID,Float:vHealth;
10093 vID = GetPlayerVehicleID(i);
10094 GetVehicleHealth(vID, vHealth);
10095 PlayerTextDrawSetString(i,VInfo[i],sprintf("~w~%s~n~~w~Health ~r~%.0f",aVehicleNames[GetVehicleModel(vID)-400],vHealth));
10096 }
10097 }
10098 return 1;
10099}
10100
10101public OnPlayerClickPlayer(playerid, clickedplayerid, source)
10102{
10103 ShowPlayerDialog(playerid, PLAYERCLICK_DIALOG, DIALOG_STYLE_LIST, sprintf("Clicked ID: %d", clickedplayerid), "Getinfo\nAKA\nSpec\nAdd\nRemove\nReadd\nGunmenu\nGo\nGet\nSlap\nMute\nUnmute\nKick\nBan", "Select", "Cancel");
10104 LastClickedPlayer[playerid] = clickedplayerid;
10105 return 1;
10106}