· 6 years ago · Jul 14, 2019, 09:00 AM
1#include <a_samp>
2#include <a_mysql>
3#include <sscanf2>
4#include <foreach>
5#include <streamer>
6#include <Pawn.CMD>
7#include <MapAndreas>
8
9#define MYSQL_HOST "remotemysql.com"
10#define MYSQL_USERNAME "dIb13lviwT"
11#define MYSQL_PASSWORD "AQWudT62iX"
12#define MYSQL_DATABASE "dIb13lviwT"
13
14
15#define TEAM_CHAT_KEY '!'
16
17#define SERVER_TAG "{4169E1}SUMMIT{FFFFFF}"
18
19#define INFO_TAG "{4169E1}[INFO]{FFFFFF}"
20#define ERROR_TAG "{FF0000}[ERROR]{FFFFFF}"
21#define SYNTAX_TAG "{4169E1}[SYNTAX]{FFFFFF}"
22
23#define REQUIRED_PLAYERS 1
24#define SKIN_DEFAULT 299
25
26#define WHITE 0xFFFFFFFF
27#define GREEN 0x32CD32FF
28#define BLUE 0x4169E1FF
29
30#define COLOR_WHITE "{FFFFFF}"
31
32#define COLOR_RED "{FF0000}"
33#define COLOR_GREEN "{32CD32}"
34#define COLOR_BLUE "{4169E1}"
35
36#define COLOR_PURPLE "{7B68EE}"
37
38#define PRESSED(%0) \
39 (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
40
41#define RELEASED(%0) \
42 (((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))
43
44main()
45{
46 print ("/////////////////////////////////");
47 print ("//// PROJECT : SUMMIT LOADED ////");
48 print ("/////////////////////////////////");
49}
50
51#define MODE_NONE -1
52#define MODE_LOBBY 0
53#define MODE_ROBBERY 1
54#define MODE_DOGFIGHT 2
55
56enum server_dialogs
57{
58 DIALOG_VOID,
59
60 DIALOG_REGISTERATION,
61 DIALOG_LOGIN,
62
63 DIALOG_ROBBERY_TEAMS
64};
65
66enum server_worlds
67{
68 VIRTUALWORLD_VOID,
69 VIRTUALWORLD_LOBBY,
70 VIRTUALWORLD_GAME
71};
72
73enum server_data
74{
75 server_mode,
76 bool: server_game
77};
78
79enum player_data
80{
81 password [26],
82
83 player_mode,
84 player_team,
85
86 spawned,
87
88 kills,
89 deaths,
90
91 score,
92
93 game_time,
94 game_kills,
95 game_damage,
96
97 bool: in_checkpoint,
98 bool: robbing,
99
100 PlayerText3D: sw_label,
101 PlayerText3D: robbing_guide,
102
103 spectating
104
105};
106
107new MySQL: mysql;
108
109new ServerInfo [server_data];
110new PlayerInfo [MAX_PLAYERS][player_data];
111
112new MainTimer;
113
114new CountDownTimer,
115 CountDownTime;
116
117
118new Text: Time_TD;
119
120new table_players_columns [5][] =
121{
122 {"`account_id` INT (16) NOT NULL PRIMARY KEY AUTO_INCREMENT"},
123 {"`name` VARCHAR (25)"},
124 {"`password` VARCHAR (25)"},
125 {"`kills` INT (24) DEFAULT 0"},
126 {"`deaths` INT (24) DEFAULT 0"}
127};
128
129#include <../../gamemodes/modes/robbery.pwn>
130
131forward CheckForPlayers ();
132public CheckForPlayers ()
133{
134 new players_ready;
135
136 foreach (new playerid : Player)
137 {
138 if (IsPlayerInLobby (playerid))
139 {
140 players_ready++;
141
142 if (players_ready >= REQUIRED_PLAYERS)
143 {
144 SendClientMessageToAll (WHITE, ""INFO_TAG" A game is starting soon, get yourselves ready! ");
145
146 KillTimer (MainTimer);
147
148 SelectRandomGame ();
149
150 }
151 }
152 }
153 return 1;
154}
155
156forward OnPlayerInit (playerid);
157public OnPlayerInit (playerid)
158{
159
160 if (cache_num_rows ())
161 {
162 SendClientMessage (playerid, WHITE, ""INFO_TAG" An account with this name is registered on this server. ");
163
164 cache_get_value_name (0, "password", PlayerInfo [playerid][password], 26);
165
166 ShowLoginDialog (playerid);
167 }
168 else ShowRegisterationDialog (playerid);
169
170 return 1;
171}
172
173forward OnPlayerLogin (playerid);
174public OnPlayerLogin (playerid)
175{
176
177 cache_get_value_name_int (0, "kills", PlayerInfo [playerid][kills]);
178 cache_get_value_name_int (0, "deaths", PlayerInfo [playerid][deaths]);
179
180 return 1;
181}
182
183forward DelayedKick (playerid);
184public DelayedKick (playerid)
185{
186 Kick (playerid);
187 return 1;
188}
189
190forward CountDown ();
191public CountDown ()
192{
193 CountDownTime--;
194
195 new time_string [12];
196 format (time_string, sizeof (time_string), "~g~%d", CountDownTime);
197
198 foreach (new i : Player)
199 {
200 if (PlayerInfo [i][player_mode] == ServerInfo [server_mode])
201 {
202 GameTextForPlayer (i, time_string, 1000, 4);
203 }
204 }
205
206 if (CountDownTime <= 0)
207 {
208 KillTimer (CountDownTimer);
209
210 OnCountDownEnd ();
211 }
212 return 1;
213}
214
215forward OnCountDownEnd ();
216public OnCountDownEnd ()
217{
218 ROBBERY_OnCountDownEnd ();
219 return 1;
220}
221
222forward OnGameEnd ();
223public OnGameEnd ()
224{
225 ServerInfo [server_game] = false;
226
227 foreach (new playerid : Player)
228 {
229 if (PlayerInfo [playerid][player_team] != TEAM_NONE)
230 {
231 PlayerInfo [playerid][player_team] = TEAM_NONE;
232 SetPlayerTeam (playerid, NO_TEAM);
233
234 PlayerInfo [playerid][game_time] = 0;
235 PlayerInfo [playerid][game_kills] = 0;
236 PlayerInfo [playerid][game_damage] = 0;
237
238 TogglePlayerControllable (playerid, true);
239 }
240 }
241
242 SendClientMessageToAll (WHITE, ""INFO_TAG" The current game has ended, a new game will be starting soon. ");
243 SetTimer ("ResetServerLoop", 15 * 1000, false);
244
245 return 1;
246}
247
248forward ResetServerLoop ();
249public ResetServerLoop ()
250{
251 MainTimer = SetTimer ("CheckForPlayers", 1000, true);
252 return 1;
253}
254
255public OnGameModeInit()
256{
257 SendRconCommand ("password loading_server");
258
259 SetGameModeText ("-");
260
261 mysql = mysql_connect (MYSQL_HOST, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_DATABASE);
262
263 mysql_log (ALL);
264
265 CreateMysqlTables ();
266
267 CreateTextDraws ();
268
269 SetGameModeText("MODE: Lobby");
270
271 DisableInteriorEnterExits ();
272
273 ServerInfo [server_mode] = MODE_LOBBY;
274
275 ServerInfo [server_game] = false;
276
277 printf ("\nTotal Robbery Houses: %d\n", GetTotalHouses ());
278
279 MainTimer = SetTimer ("CheckForPlayers", 10 * 1000, true);
280
281 SendRconCommand ("password 0");
282
283 return 1;
284}
285
286public OnGameModeExit()
287{
288 return 1;
289}
290
291public OnPlayerConnect(playerid)
292{
293
294 PlayerInfo [playerid][player_mode] = MODE_NONE;
295
296 PlayerInfo [playerid][spectating] = -1;
297
298 SetPlayerVirtualWorld (playerid, VIRTUALWORLD_VOID);
299
300 new string [124];
301 format (string, sizeof (string), ""COLOR_GREEN"CONNECTION: "COLOR_WHITE"%s (%d) has connected to the server. ", GetName (playerid), playerid);
302 SendClientMessageToAll (WHITE, string);
303
304 string [0] = '\0';
305
306 mysql_format (mysql, string, sizeof (string), "SELECT `password` FROM `players` WHERE `name` = '%s'", GetName (playerid));
307 mysql_tquery (mysql, string, "OnPlayerInit", "i", playerid);
308
309 return 1;
310}
311
312public OnPlayerDisconnect(playerid, reason)
313{
314 ROBBERY_OnPlayerDisconnect(playerid, reason);
315
316 ClearPlayerData (playerid);
317 return 1;
318}
319
320public OnPlayerRequestClass(playerid, classid)
321{
322 TogglePlayerSpectating (playerid, true);
323 return 1;
324}
325
326public OnPlayerSpawn(playerid)
327{
328 PlayerInfo [playerid][spawned] = 1;
329
330 if (PlayerInfo [playerid][player_mode] == MODE_NONE)
331 {
332 SendPlayerToTheLobby (playerid);
333
334 PlayerInfo [playerid][player_mode] = MODE_LOBBY;
335
336 switch (ServerInfo [server_mode])
337 {
338 case MODE_LOBBY: SendClientMessage (playerid, WHITE, ""INFO_TAG" A game will start shortly, waiting for more players to join. ");
339 default: SendClientMessage (playerid, WHITE, ""INFO_TAG" There is a game in progress, you can either wait for the game to end or (/spectate)");
340 }
341 }
342
343 if (PlayerInfo [playerid][player_mode] == MODE_ROBBERY)
344 {
345 SendPlayerToTheLobby (playerid);
346 }
347
348 return 1;
349}
350
351public OnPlayerDeath(playerid, killerid, reason)
352{
353 if (IsPlayerConnected (killerid)) { PlayerInfo [killerid][kills]++; }
354
355 PlayerInfo [playerid][deaths]++;
356
357 PlayerInfo [playerid][spawned] = 0;
358
359 ROBBERY_OnPlayerDeath(playerid, killerid, reason);
360 return 1;
361}
362
363public OnPlayerText(playerid, text[])
364{
365 if (ServerInfo [server_game] == true)
366 {
367 if (text [0] == TEAM_CHAT_KEY)
368 {
369 new string [500];
370 format (string, sizeof (string), "[TEAM] %s (%d): {FFFFFF}%s", GetName (playerid), playerid, text);
371
372 foreach (new i : Player)
373 {
374 if (PlayerInfo [i][player_team] == PlayerInfo [playerid][player_team])
375 {
376 SendClientMessage (i, GetPlayerColor (playerid), string);
377 }
378 }
379
380 return 1;
381 }
382 }
383 return 1;
384}
385
386public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart)
387{
388 ROBBERY_OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart);
389 return 1;
390}
391
392public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
393{
394
395 foreach (new i : Player)
396 {
397 if (PlayerInfo [i][spectating] == playerid)
398 {
399 PlayerSpectateVehicle (i, GetPlayerVehicleID (playerid));
400 }
401 }
402
403 return 1;
404}
405
406public OnPlayerExitVehicle(playerid, vehicleid)
407{
408 foreach (new i : Player)
409 {
410 if (PlayerInfo [i][spectating] == playerid)
411 {
412 PlayerSpectatePlayer (i, playerid);
413 }
414 }
415 return 1;
416}
417
418public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
419{
420 ROBBERY_OnDialogResponse (playerid, dialogid, response, listitem, inputtext);
421
422 switch (dialogid)
423 {
424 case DIALOG_REGISTERATION:
425 {
426 if (!response)
427 {
428 SendClientMessage (playerid, WHITE, ""INFO_TAG" You have skipped the registeration.");
429
430 new changed_name [MAX_PLAYER_NAME + 1], message [124];
431
432 format (changed_name, sizeof (changed_name), "guest_%d", playerid);
433
434 SetPlayerName (playerid, changed_name);
435 SetPlayerColor (playerid, WHITE);
436
437 format (message, sizeof (message), ""INFO_TAG" Your stats will not be saved, your name has been changed to: %s.", changed_name);
438 SendClientMessage (playerid, WHITE, message);
439 }
440 else
441 {
442 if ((isnull (inputtext)) || (strlen (inputtext) < 7)) return ShowRegisterationDialog (playerid);
443
444 new query [1024];
445
446 mysql_format (mysql, query, sizeof (query), "INSERT INTO `players` (`name`, `password`) VALUES ('%s', '%s')", GetName (playerid), inputtext);
447 mysql_query (mysql, query);
448
449 SendClientMessage (playerid, WHITE, ""INFO_TAG" You account has been successfully registered on this server. ");
450 }
451
452 TogglePlayerSpectating (playerid, false);
453 SpawnPlayer (playerid);
454 }
455 case DIALOG_LOGIN:
456 {
457 if (!response)
458 {
459 new changed_name [25], message [124];
460
461 format (changed_name, sizeof (changed_name), "guest_%d", playerid);
462 SetPlayerName (playerid, changed_name);
463
464 format (message, sizeof (message), ""INFO_TAG" Your stats will not be saved, your name has been changed to: %s.", changed_name);
465 SendClientMessage (playerid, WHITE, message);
466 }
467 else
468 {
469 if (!strcmp (PlayerInfo [playerid][password], inputtext))
470 {
471 new query [124];
472 mysql_format (mysql, query, sizeof (query), "SELECT * FROM `players` WHERE `name` = '%s'", GetName (playerid));
473 mysql_tquery (mysql, query, "OnPlayerLogin", "i", playerid);
474 }
475 else
476 {
477 SendClientMessage (playerid, WHITE, ""COLOR_RED"[ERROR] "COLOR_WHITE"You entered a wrong password. ");
478 ShowLoginDialog (playerid);
479 return 1;
480 }
481 }
482
483 TogglePlayerSpectating (playerid, false);
484 SpawnPlayer (playerid);
485 }
486 }
487 return 1;
488}
489
490public OnPlayerEnterCheckpoint(playerid)
491{
492 PlayerInfo [playerid][in_checkpoint] = true;
493
494 switch (ServerInfo [server_mode])
495 {
496 case MODE_ROBBERY: ROBBERY_OnPlayerEnterCheckpoint (playerid);
497 }
498 return 1;
499}
500
501public OnPlayerLeaveCheckpoint(playerid)
502{
503 PlayerInfo [playerid][in_checkpoint] = false;
504
505 switch (ServerInfo [server_mode])
506 {
507 case MODE_ROBBERY: ROBBERY_OnPlayerLeaveCheckpoint (playerid);
508 }
509 return 1;
510}
511
512public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
513{
514 ROBBERY_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
515 return 1;
516}
517
518CMD:skin(playerid, params [])
519{
520 new skin_id;
521 if (!sscanf (params, "i", skin_id))
522 {
523 SetPlayerSkin (playerid, skin_id);
524 }
525 return 1;
526}
527
528CMD:weapon(playerid, params [])
529{
530 new weapon_id, weapon_ammo;
531 if (!sscanf (params, "ii", weapon_id, weapon_ammo))
532 {
533 GivePlayerWeapon (playerid, weapon_id, weapon_ammo);
534 }
535 return 1;
536}
537
538CMD:tp(playerid, params [])
539{
540 new Float: x, Float: y, Float: z, interior_id;
541 if (!sscanf (params, "ifff", interior_id, x, y, z))
542 {
543 SetPlayerInterior (playerid, interior_id);
544 SetPlayerPos (playerid, x, y, z);
545 }
546 return 1;
547}
548
549
550stock CreateTextDraws ()
551{
552
553 Time_TD = TextDrawCreate(572.222351, 392.595306, "TIME LEFT: ");
554 TextDrawLetterSize(Time_TD, 0.400000, 1.600000);
555 TextDrawTextSize(Time_TD, 0.000000, 123.000000);
556 TextDrawAlignment(Time_TD, 2);
557 TextDrawColor(Time_TD, -1);
558 TextDrawUseBox(Time_TD, 1);
559 TextDrawBoxColor(Time_TD, 170);
560 TextDrawSetShadow(Time_TD, 0);
561 TextDrawSetOutline(Time_TD, 0);
562 TextDrawBackgroundColor(Time_TD, 255);
563 TextDrawFont(Time_TD, 2);
564 TextDrawSetProportional(Time_TD, 1);
565 TextDrawSetShadow(Time_TD, 0);
566 return 1;
567}
568
569stock SendPlayerToTheLobby (playerid)
570{
571 PlayerInfo [playerid][player_mode] = MODE_LOBBY;
572
573 SetPlayerInterior (playerid, 11);
574 SetPlayerVirtualWorld (playerid, VIRTUALWORLD_LOBBY);
575
576 SetPlayerPos (playerid, 501.980987, -69.150199, 998.757812);
577 SetPlayerFacingAngle (playerid, 180.0);
578
579 SetCameraBehindPlayer (playerid);
580
581 SetPlayerSkin (playerid, SKIN_DEFAULT);
582
583 SetPlayerArmour (playerid, 0.0);
584 SetPlayerHealth (playerid, 999999.9);
585
586 SetPlayerColor (playerid, WHITE);
587
588 ResetPlayerWeapons (playerid);
589
590 GameTextForPlayer (playerid, "~w~LOBBY", 1500, 1);
591
592 return 1;
593}
594
595stock GetName (playerid)
596{
597 new player_name [MAX_PLAYER_NAME + 1];
598 GetPlayerName (playerid, player_name, sizeof (player_name));
599 return player_name;
600}
601
602stock KickEx (playerid, kick_message [])
603{
604 SendClientMessage (playerid, WHITE, kick_message);
605 SetTimerEx ("DelayedKick", 500, false, "i", playerid);
606 return 1;
607}
608
609stock IsPlayerInLobby (playerid)
610{
611 if (PlayerInfo [playerid][player_mode] == MODE_LOBBY) return true;
612 else return false;
613}
614
615stock IsPlayerInAnyCheckpoint (playerid)
616{
617 if (PlayerInfo [playerid][in_checkpoint] == true) return true;
618 else return false;
619}
620
621stock randomEx(min, max)
622{
623 new r = random (max - min) + min;
624 return r;
625}
626
627stock GetPlayerPosEx (playerid, &Float: position_x, &Float: position_y, &Float: position_z, &Float: position_a)
628{
629 GetPlayerPos (playerid, position_x, position_y, position_z);
630 GetPlayerFacingAngle (playerid, position_a);
631 return 1;
632}
633
634stock SendMessageToTheTeam (team_id, team_message [])
635{
636 foreach (new playerid : Player)
637 {
638 if (PlayerInfo [playerid][player_team] == team_id)
639 {
640 SendClientMessage (playerid, WHITE, team_message);
641 }
642 }
643 return 1;
644}
645
646stock StartCountDownForPlayers (countdown_time)
647{
648 CountDownTime = (countdown_time + 1);
649 CountDownTimer = SetTimer ("CountDown", 1000, true);
650 return 1;
651}
652
653GetWeaponModel(weaponid)
654{
655 new model;
656 switch(weaponid)
657 {
658 case 1: model = 331; case 2: model = 333; case 3: model = 334;
659 case 4: model = 335; case 5: model = 336; case 6: model = 337;
660 case 7: model = 338; case 8: model = 339; case 9: model = 341;
661 case 10: model = 321; case 11: model = 322; case 12: model = 323;
662 case 13: model = 324; case 14: model = 325; case 15: model = 326;
663 case 16: model = 342; case 17: model = 343; case 18: model = 344;
664 case 22: model = 346; case 23: model = 347; case 24: model = 348;
665 case 25: model = 349; case 26: model = 350; case 27: model = 351;
666 case 28: model = 352; case 29: model = 353; case 30: model = 355;
667 case 31: model = 356; case 32: model = 372; case 33: model = 357;
668 case 34: model = 358; case 35: model = 359; case 36: model = 360;
669 case 37: model = 361; case 38: model = 362; case 39: model = 363;
670 case 41: model = 365; case 42: model = 366; case 46: model = 371;
671 }
672
673 if(model < 300) return -1;
674
675 return model;
676}
677
678stock SelectRandomGame ()
679{
680
681 new selected_game = MODE_ROBBERY;
682
683 switch (selected_game)
684 {
685 case MODE_ROBBERY: SetupRobberyMode ();
686 }
687
688 foreach (new playerid : Player)
689 {
690 PlayerInfo [playerid][game_kills] = 0;
691 }
692
693 return 1;
694}
695
696stock CheckRemainingPlayers (game_mode)
697{
698 switch (game_mode)
699 {
700 case MODE_ROBBERY:
701 {
702 new top_player = -1;
703
704 if (RobberyInfo [team_robbers] <= 0 && RobberyInfo [team_housemen] >= 1)
705 {
706 foreach (new i : Player)
707 {
708 if (PlayerInfo [i][player_team] == TEAM_HOUSEMEN)
709 {
710 if (top_player == -1) { top_player = i; }
711
712 if (PlayerInfo [i][game_kills] > PlayerInfo [top_player][game_kills])
713 {
714 top_player = i;
715 }
716 }
717 }
718
719 SendClientMessageToAll (WHITE, ""INFO_TAG" The '"COLOR_BLUE"HOUSEMEN"COLOR_WHITE"' have successfully eliminated all the robbers. ");
720
721 OnHouseMenWin (top_player);
722 }
723 else if (RobberyInfo [team_robbers] >= 1 && RobberyInfo [team_housemen] <= 0)
724 {
725 foreach (new i : Player)
726 {
727 if (PlayerInfo [i][player_team] == TEAM_HOUSEMEN)
728 {
729 if (top_player == -1) { top_player = i; }
730
731 if (PlayerInfo [i][game_kills] > PlayerInfo [top_player][game_kills])
732 {
733 top_player = i;
734 }
735 }
736 }
737
738 OnRobbersWin (top_player);
739 }
740 else if (RobberyInfo [team_robbers] <= 0 && RobberyInfo [team_housemen] <= 0)
741 {
742 foreach (new i : Player)
743 {
744 if (PlayerInfo [i][player_team] == TEAM_HOUSEMEN)
745 {
746 if (top_player == -1) { top_player = i; }
747
748 if (PlayerInfo [i][game_kills] > PlayerInfo [top_player][game_kills])
749 {
750 top_player = i;
751 }
752 }
753 }
754
755 SendClientMessageToAll (WHITE, ""INFO_TAG" The '"COLOR_BLUE"HOUSEMEN"COLOR_WHITE"' have successfully eliminated all the robbers. ");
756
757 OnHouseMenWin (top_player);
758 }
759 }
760 }
761
762 return 1;
763}
764
765stock SpectateRandomPlayer (playerid)
766{
767 foreach (new i : Player)
768 {
769 if (PlayerInfo [i][player_mode] == ServerInfo [server_mode])
770 {
771 if (PlayerInfo [i][spectating] == -1)
772 {
773 TogglePlayerSpectating (playerid, true);
774 PlayerSpectatePlayer (playerid, i);
775
776 PlayerInfo [playerid][spectating] = i;
777
778 break;
779 }
780 }
781 }
782 return 1;
783}
784
785stock ShowRegisterationDialog (playerid)
786{
787 ShowPlayerDialog (playerid, DIALOG_REGISTERATION, DIALOG_STYLE_INPUT, ""SERVER_TAG" - Registeration",
788 ""COLOR_WHITE"If you want to register an account on this server, enter a password below:\n\n\
789 "COLOR_GREEN"Password Requirements: "COLOR_WHITE"\n\
790 - Enter more than 7 characters.", "Register", "Cancel");
791 return 1;
792}
793
794stock ShowLoginDialog (playerid)
795{
796 ShowPlayerDialog (playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, ""SERVER_TAG" - Login", ""COLOR_WHITE"Enter the password to login this account: ", "Login", "Cancel");
797 return 1;
798}
799
800stock CreateMysqlTables ()
801{
802 new query [2000], part [124];
803
804 strcat (query, "CREATE TABLE IF NOT EXISTS `players` (");
805
806 for (new i = 0; i < sizeof (table_players_columns); i++)
807 {
808 format (part, sizeof (part), "%s%s ", table_players_columns [i], ((i == (sizeof (table_players_columns) - 1)) ? ("") : (",")));
809 mysql_format (mysql, query, sizeof (query), "%s%s", query, part);
810 }
811
812 mysql_format (mysql, query, sizeof (query), "%s)", query);
813
814 mysql_query (mysql, query);
815
816
817 return 1;
818}
819
820stock ClearPlayerData (playerid)
821{
822 static const empty_data [player_data];
823 PlayerInfo [playerid] = empty_data;
824 return 1;
825}