· 6 years ago · Jun 10, 2019, 02:16 PM
1main() { }
2
3#pragma dynamic 65000
4//============================================//
5#include <a_samp>
6#include <streamer>
7#include <a_mysql>
8#include <foreach>
9#include <easyDialog>
10#include <zcmd>
11#include <mSelection>
12#include <sscanf2>
13
14new skinList = mS_INVALID_LISTID;//This Mean's its ignoring the Invalid Skins
15
16//============================================//
17#define MYSQL_HOST "localhost" // Change this to your MySQL Remote IP or "localhost".
18#define MYSQL_USER "root" // Change this to your MySQL Database username.
19#define MYSQL_PASS "" // Change this to your MySQL Database password.
20#define MYSQL_DATABASE "pcastor" // Change this to your MySQL Database name.
21//============================================//
22#define COLOR_OOC 0xE0FFFFAA
23#define COLOR_TBLUE 0xA4BBFFFF //0x2668FFFF
24#define COLOR_FADE3 0xAAAAAAAA
25
26#define COLOR_VERTFONCE (0x54A63FFF)
27#define COLOR_CLIENT (0xAAC4E5FF)
28#define COLOR_WHITE (0xFFFFFFFF)
29#define COLOR_RED (0xFF0000FF)
30#define COLOR_CYAN (0x33CCFFFF)
31#define COLOR_LIGHTRED (0xFF6E0000)
32#define COLOR_LIGHTGREEN (0x9ACD32FF)
33#define COLOR_YELLOW (0xA5BD44FF) // A5BD44
34#define COLOR_GREY (0xAFAFAFFF)
35#define COLOR_HOSPITAL (0xFF8282FF)
36#define COLOR_PURPLE (0xC3A4DBFF)
37#define COLOR_LIGHTYELLOW (0xF5DEB3FF)
38#define COLOR_DARKBLUE (0x1394BFFF)
39#define COLOR_ORANGE (0xFFA500FF)
40#define COLOR_LIME (0x00FF00FF)
41#define COLOR_GREEN (0x33CC33FF)
42#define COLOR_BLUE (0x2641FEFF)
43#define COLOR_FACTION (0xBDF38BFF)
44#define COLOR_RADIO (0x8D8DFFFF)
45#define COLOR_LIGHTBLUE (0x007FFFFF)
46#define COLOR_SERVER (0xFFFF90FF) // 6688FF
47#define COLOR_DEPARTMENT (0xF0CC00FF)
48#define COLOR_ADMINCHAT (0xFF6500FF) //(0x33EE33FF) //0x00BFFFFF
49#define COLOR_ADMINGROUP (0x76DEA7FF)
50#define COLOR_DEFAULT (0xA9C4E4FF)
51
52#define COLOR_INFO (0x33CCFFFF)
53#define COLOR_ERROR (0xDE3838FF)
54#define COLOR_USAGE (0x8CAA63FF)
55#define COLOR_ADMIN (0xFC7777FF)
56//============================================//
57#define DIALOG_REGISTER (0)
58#define DIALOG_LOGIN (1)
59#define CARTE_DIALOG (999)
60
61#define Support (1)
62#define Modérateur (2)
63#define Administrateur (3)
64#define Leading (4)
65#define Fondateur (5)
66
67
68new MySQL: Database, Corrupt_Check[MAX_PLAYERS];
69//==============================================================================
70new g_ServerLocked;
71//==============================================================================
72
73enum ENUM_PLAYER_DATA
74{
75 ID,
76 Name[25],
77
78 Password[65],
79 Salt[11],
80
81 pDisableAdmin,
82 pAdminDuty,
83 Admin,
84 PasswordFails,
85 Cash,
86 Skin,
87
88 Cache: Player_Cache,
89 bool:LoggedIn
90}
91new pInfo[MAX_PLAYERS][ENUM_PLAYER_DATA];
92
93stock GetGuideRank(playerid)
94{
95 new rank[64];
96 switch(pInfo[playerid][Admin])
97 {
98 case 0: rank = "Joueur";
99 case 1: rank = "Support Communautaire";
100 case 2: rank = "Modérateur";
101 case 3: rank = "Administrateur";
102 case 4: rank = "Leading";
103 case 5: rank = "Fondateur";
104 }
105 return rank;
106}
107
108
109public OnGameModeInit()
110{
111 skinList = LoadModelSelectionMenu("skins.txt");
112 EnableStuntBonusForAll(0); // Désactive les sauts unique
113 DisableInteriorEnterExits(); // Désactive les points jaune
114 SetGameModeText("ViceCity");
115
116 CreateObject(19166, 1993.5836,-1761.9480,13.5391, 0.0, 0.0, 0.0, 20.0);
117
118
119 new MySQLOpt: option_id = mysql_init_options();
120 mysql_set_option(option_id, AUTO_RECONNECT, true);
121
122 Database = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DATABASE, option_id);
123
124 if(Database == MYSQL_INVALID_HANDLE || mysql_errno(Database) != 0)
125 {
126 print("MYSQL : OFF");
127
128 SendRconCommand("exit");
129 return 1;
130 }
131
132 print("MYSQL : ON");
133
134 mysql_tquery(Database, "CREATE TABLE IF NOT EXISTS `PLAYERS` (`ID` int(11) NOT NULL AUTO_INCREMENT,`USERNAME` varchar(24) NOT NULL,`PASSWORD` char(65) NOT NULL,`SALT` char(11) NOT NULL, `CASH` mediumint(7) NOT NULL DEFAULT '0',PRIMARY KEY (`ID`), UNIQUE KEY `USERNAME` (`USERNAME`))");
135
136 return 1;
137}
138
139public OnGameModeExit()
140{
141 foreach(new i: Player)
142 {
143 if(IsPlayerConnected(i))
144 {
145 OnPlayerDisconnect(i, 1);
146 }
147 }
148
149 mysql_close(Database);
150 return 1;
151}
152
153public OnPlayerEnterCheckpoint(playerid)
154{
155 DisablePlayerCheckpoint(playerid);
156 return 1;
157}
158
159public OnPlayerConnect(playerid)
160{
161 // RemoveBuildingForPlayer(playerid, -1,0.0,0.0,0.0,6000);//
162
163
164 new DB_Query[115];
165 pInfo[playerid][PasswordFails] = 0;
166 pInfo[playerid][Skin] = 235;
167
168 GetPlayerName(playerid, pInfo[playerid][Name], MAX_PLAYER_NAME); // Getting the player's name.
169 Corrupt_Check[playerid]++;
170
171
172 mysql_format(Database, DB_Query, sizeof(DB_Query), "SELECT * FROM `PLAYERS` WHERE `USERNAME` = '%e' LIMIT 1", pInfo[playerid][Name]);
173 mysql_tquery(Database, DB_Query, "OnPlayerDataCheck", "ii", playerid, Corrupt_Check[playerid]);
174
175 return 1;
176}
177
178new bool:ClickedOnMap[MAX_PLAYERS] = false;
179public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
180{
181 SetPlayerPos(playerid, fX, fY, 550);
182 ClickedOnMap[playerid] = true;
183
184 return 1;
185}
186public OnPlayerUpdate(playerid)
187{
188 if(ClickedOnMap[playerid] == true)
189 {
190 new Float:p[3];
191 GetPlayerPos(playerid,p[0],p[1],p[2]);
192 SetPlayerPosFindZ(playerid,p[0],p[1],p[2]);
193 TogglePlayerControllable(playerid, true);
194 ClickedOnMap[playerid] = false;
195 }
196 return 1;
197}
198
199public OnPlayerModelSelection(playerid, response, listid, modelid)
200{
201 if(listid == skinList)
202 {
203 if(response)
204 {
205 SendClientMessage(playerid, 0xFF0000FF, "Skin Changed");
206 SetPlayerSkin(playerid, modelid);
207 }
208 else SendClientMessage(playerid, 0xFF0000FF, "Canceled skin selection");
209 return 1;
210 }
211return 1;
212}
213
214public OnPlayerDisconnect(playerid, reason)
215{
216 ClickedOnMap[playerid] = false;
217
218 if(cache_is_valid(pInfo[playerid][Player_Cache]))
219 {
220 cache_delete(pInfo[playerid][Player_Cache]);
221 pInfo[playerid][Player_Cache] = MYSQL_INVALID_CACHE;
222 }
223
224 pInfo[playerid][LoggedIn] = false;
225 print("OnPlayerDisconnect has been called.");
226 return 1;
227}
228
229public OnPlayerCommandPerformed(playerid, cmdtext[], success)
230{
231 if(!success) return SendClientMessage(playerid, COLOR_ADMIN,"Commande inconnue, tappez /aide pour voir la liste des commandes.");
232 return 1;
233}
234
235
236public OnPlayerRequestSpawn(playerid)
237{
238 if(pInfo[playerid][LoggedIn] == false) return 0;
239 return 1;
240}
241
242public OnPlayerText(playerid, text[])
243{
244 new
245 message[128];
246 format(message, sizeof(message), "%s dit: %s", GetName(playerid), text);
247 ProxDetector(20.0, playerid, message, -1);
248 return 0;
249}
250
251stock strreplace(string[], find, replace)
252{
253 for(new i=0; string[i]; i++)
254 {
255 if(string[i] == find)
256 {
257 string[i] = replace;
258 }
259 }
260}
261
262stock GetName(playerid)
263{
264 new
265 name[24];
266 GetPlayerName(playerid, name, sizeof(name));
267 strreplace(name, '_', ' ');
268 return name;
269}
270
271stock PlayerName(playerid){
272 new pname[24];
273 GetPlayerName( playerid, pname,24 );
274 return pname;
275}
276
277
278stock ProxDetector(Float:radi, playerid, string[],color)
279{
280 new Float:x,Float:y,Float:z;
281 GetPlayerPos(playerid,x,y,z);
282 foreach(Player,i)
283 {
284 if(IsPlayerInRangeOfPoint(i,radi,x,y,z))
285 {
286 SendClientMessage(i,color,string);
287 }
288 }
289}
290
291
292
293public OnPlayerRequestClass(playerid, classid)
294{
295 SetTimerEx("SkipOnPlayerRequestClass", 100, false, "i", playerid);
296 return 1;
297}
298
299forward SkipOnPlayerRequestClass(playerid);
300public SkipOnPlayerRequestClass(playerid)
301{
302 SpawnPlayer(playerid);
303 TogglePlayerSpectating(playerid, 0);
304 return 1;
305}
306
307public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
308{
309 if(dialogid == CARTE_DIALOG)
310 {
311 if(response)
312 {
313 switch(listitem)
314 {
315 case 0: SetPlayerCheckpoint(playerid, 1523.4817,-1681.0198,13.2347);
316 case 1: SetPlayerCheckpoint(playerid, 1523.4817,-1681.0198,13.2347);
317 case 2: SetPlayerCheckpoint(playerid, 1480.9865,-1771.6118,18.7958);
318 }
319 }
320 }
321
322
323 switch (dialogid)
324 {
325 case DIALOG_LOGIN:
326 {
327 if(!response) return Kick(playerid);
328
329 new Salted_Key[65];
330 SHA256_PassHash(inputtext, pInfo[playerid][Salt], Salted_Key, 65);
331
332 if(strcmp(Salted_Key, pInfo[playerid][Password]) == 0)
333 {
334 cache_set_active(pInfo[playerid][Player_Cache]);
335
336 cache_get_value_int(0, "ID", pInfo[playerid][ID]);
337
338 cache_get_value_int(0, "ADMIN", pInfo[playerid][Admin]);
339 cache_get_value_int(0, "pAdminDuty", pInfo[playerid][pAdminDuty]);
340 cache_get_value_int(0, "CASH", pInfo[playerid][Cash]);
341 cache_get_value_int(0, "SKIN", pInfo[playerid][Skin]);
342
343
344 ResetPlayerMoney(playerid);
345 pInfo[playerid][pAdminDuty] = 0;
346 GivePlayerMoney(playerid, pInfo[playerid][Cash]);
347
348 cache_delete(pInfo[playerid][Player_Cache]);
349 pInfo[playerid][Player_Cache] = MYSQL_INVALID_CACHE;
350
351 pInfo[playerid][LoggedIn] = true;
352 }
353 else
354 {
355 new String[150];
356
357 pInfo[playerid][PasswordFails] += 1;
358 printf("%s n'a pas réussi à se connecter. (%d)", pInfo[playerid][Name], pInfo[playerid][PasswordFails]);
359
360 if (pInfo[playerid][PasswordFails] >= 3)
361 {
362 format(String, sizeof(String), "%s a été exclu du serveur par l'administrateur automatique, raison : {FF0000}(%d/3) erreurs. ", pInfo[playerid][Name], pInfo[playerid][PasswordFails]);
363 SendClientMessageToAll(0x969696FF, String);
364 Kick(playerid);
365 }
366 else
367 {
368 format(String, sizeof(String), "Mauvais mot de passe, il vous reste %d sur 3 essais.", pInfo[playerid][PasswordFails]);
369 SendClientMessage(playerid, 0xFF0000FF, String);
370
371 format(String, sizeof(String), "Bon retour %s.\n\n{0099FF}Ce compte est déjâ enregistré.\n\
372 {0099FF}Veuillez saisir votre mot de passe ci-dessous pour continuer.\n\n", pInfo[playerid][Name]);
373 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login System", String, "Login", "Leave");
374 }
375 }
376 }
377 case DIALOG_REGISTER:
378 {
379 if(!response) return Kick(playerid);
380
381 if(strlen(inputtext) <= 5 || strlen(inputtext) > 60)
382 {
383
384 SendClientMessage(playerid, -1, "La longueur du mot de passe invalide doit être comprise entre 5 et 60.");
385
386 new String[150];
387
388 format(String, sizeof(String), "Bienvenue %s.\n\nCe compte n'est pas enregistré.\n\
389 Veuillez saisir votre mot de passe ci-dessous pour continuer.\n\n", pInfo[playerid][Name]);
390 ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registration System", String, "Register", "Leave");
391 }
392 else
393 {
394
395
396 for (new i = 0; i < 10; i++)
397 {
398 pInfo[playerid][Salt][i] = random(79) + 47;
399 }
400
401 pInfo[playerid][Salt][10] = 0;
402 SHA256_PassHash(inputtext, pInfo[playerid][Salt], pInfo[playerid][Password], 65);
403
404 new DB_Query[225];
405
406 mysql_format(Database, DB_Query, sizeof(DB_Query), "INSERT INTO `PLAYERS` (`USERNAME`, `PASSWORD`, `SALT`, `SCORE`, `KILLS`, `CASH`, `DEATHS`)\
407 VALUES ('%e', '%s', '%e', '20', '0', '0', '0')", pInfo[playerid][Name], pInfo[playerid][Password], pInfo[playerid][Salt]);
408 mysql_tquery(Database, DB_Query, "OnPlayerRegister", "d", playerid);
409 }
410 }
411 }
412 return 1;
413}
414
415forward public OnPlayerDataCheck(playerid, corrupt_check);
416public OnPlayerDataCheck(playerid, corrupt_check)
417{
418 if (corrupt_check != Corrupt_Check[playerid]) return Kick(playerid);
419
420 new String[150];
421
422 if(cache_num_rows() > 0)
423 {
424
425 cache_get_value(0, "PASSWORD", pInfo[playerid][Password], 65);
426 cache_get_value(0, "SALT", pInfo[playerid][Salt], 11);
427
428 pInfo[playerid][Player_Cache] = cache_save();
429
430 format(String, sizeof(String), "Bon retour %s.\n\nCe compte est déjâ enregistré.\n\
431 Veuillez saisir votre mot de passe ci-dessous pour continuer.\n\n", pInfo[playerid][Name]);
432 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "MYROLEPLAY.FR", String, "Login", "Leave");
433 }
434 else
435 {
436 format(String, sizeof(String), "Bienvenue %s.\n\nCe compte n'est pas enregistré.\n\
437 Veuillez saisir votre mot de passe ci-dessous pour continuer.\n\n", pInfo[playerid][Name]);
438 ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "MYROLEPLAY.FR", String, "Register", "Leave");
439 }
440 return 1;
441}
442
443forward public OnPlayerRegister(playerid);
444public OnPlayerRegister(playerid)
445{
446 pInfo[playerid][LoggedIn] = true;
447 return 1;
448}
449//==============================================================================
450
451public OnPlayerSpawn(playerid)
452{
453 SendClientMessageEx(playerid, -1, "Bienvenue, %s sur Vice City Roleplay ! Tu peux désormais commencer ton aventure... ", PlayerName(playerid) );
454
455 new string[100];
456 format(string, sizeof(string), "[Serveur] : Vous êtes connecté en tant que %s.", GetGuideRank(playerid));
457 SendClientMessage(playerid, COLOR_ADMIN, string);
458
459 SetPlayerPos(playerid, 1993.5836,-1761.9480,13.5391);
460 SetPlayerSkin(playerid, pInfo[playerid][Skin]);
461 SetPlayerHealth(playerid, 50);
462
463 SetPlayerWeather(playerid, 1);
464 SetPlayerTime(playerid, 18, 30);
465
466
467 SetPlayerSkillLevel(playerid, WEAPONSKILL_PISTOL, 1); //colt
468 SetPlayerSkillLevel(playerid, WEAPONSKILL_MICRO_UZI, 1); //micro uzi tec9
469 SetPlayerSkillLevel(playerid, WEAPONSKILL_SAWNOFF_SHOTGUN, 1); //canon scié
470
471 SetPlayerSkillLevel(playerid, WEAPONSKILL_AK47, 9999);
472 SetPlayerSkillLevel(playerid, WEAPONSKILL_M4, 9999);
473 return 1;
474 }
475
476stock SendClientMessageEx(playerid, color, const str[], {Float,_}:...)
477{
478 static
479 args,
480 start,
481 end,
482 string[144]
483 ;
484 #emit LOAD.S.pri 8
485 #emit STOR.pri args
486
487 if (args > 12)
488 {
489 #emit ADDR.pri str
490 #emit STOR.pri start
491
492 for (end = start + (args - 12); end > start; end -= 4)
493 {
494 #emit LREF.pri end
495 #emit PUSH.pri
496 }
497 #emit PUSH.S str
498 #emit PUSH.C 144
499 #emit PUSH.C string
500 #emit PUSH.C args
501 #emit SYSREQ.C format
502
503 SendClientMessage(playerid, color, string);
504
505 #emit LCTRL 5
506 #emit SCTRL 4
507 #emit RETN
508 }
509 return SendClientMessage(playerid, color, str);
510}
511
512stock SendNearbyMessage(playerid, Float:radius, color, const str[], {Float,_}:...)
513{
514 static
515 args,
516 start,
517 end,
518 string[144]
519 ;
520 #emit LOAD.S.pri 8
521 #emit STOR.pri args
522
523 if (args > 16)
524 {
525 #emit ADDR.pri str
526 #emit STOR.pri start
527
528 for (end = start + (args - 16); end > start; end -= 4)
529 {
530 #emit LREF.pri end
531 #emit PUSH.pri
532 }
533 #emit PUSH.S str
534 #emit PUSH.C 144
535 #emit PUSH.C string
536
537 #emit LOAD.S.pri 8
538 #emit CONST.alt 4
539 #emit SUB
540 #emit PUSH.pri
541
542 #emit SYSREQ.C format
543 #emit LCTRL 5
544 #emit SCTRL 4
545
546 foreach (new i : Player)
547 {
548 if (IsPlayerNearPlayer(i, playerid, radius)) {
549 SendClientMessage(i, color, string);
550 NearWatchedPlayer(i, string);
551 }
552 }
553 return 1;
554 }
555 foreach (new i : Player)
556 {
557 if (IsPlayerNearPlayer(i, playerid, radius)) {
558 SendClientMessage(i, color, str);
559 }
560 }
561 return 1;
562}
563
564stock SendError(playerid,msg[])
565{
566 if((IsPlayerConnected(playerid)) && (strlen(msg)>0))
567 {
568 SendClientMessage(playerid, COLOR_ERROR,msg);
569 }
570 return 1;
571}
572
573
574
575
576
577Dialog:ServerPanel(playerid, response, listitem, inputtext[])
578{
579 if (pInfo[playerid][Admin] < Fondateur)
580 return 0;
581
582 if (response)
583 {
584 switch (listitem)
585 {
586 case 0:
587 {
588 if (g_ServerLocked)
589 {
590 g_ServerLocked = false;
591
592 SendRconCommand("password 0");
593 SendClientMessage(playerid, -1, "Le status du serveur vient d'être changé.");
594 }
595 else Dialog_Show(playerid, LockServer, DIALOG_STYLE_INPUT, "Verrouiller le serveur", "{de3838}Entrez le mot de passe du serveur:", "Vérouiller", "Retour");
596 }
597 case 1:
598 Dialog_Show(playerid, SetHostname, DIALOG_STYLE_INPUT, "Modifier le nom d'hôte", "{de3838}Entrez le nom d'hôte:", "Valider", "Retour");
599 }
600 }
601 return 1;
602}
603
604Dialog:LockServer(playerid, response, listitem, inputtext[])
605{
606 if (pInfo[playerid][Admin] < 6)
607 return 0;
608
609 if (response)
610 {
611 if (isnull(inputtext) || !strcmp(inputtext, "0"))
612 return Dialog_Show(playerid, LockServer, DIALOG_STYLE_INPUT, "Vérouiller le serveur", "Entrez le mot de passe du serveur:", "Vérouiller", "Retour");
613
614 if (strlen(inputtext) > 32)
615 return Dialog_Show(playerid, LockServer, DIALOG_STYLE_INPUT, "Vérouiller le serveur", "Erreur: Le mot de passe ne doit pas faire plus de 32 caractères.\n\nEntrez le mot de passe du serveur:", "Vérouiller", "Retour");
616
617 static
618 str[48];
619
620 format(str, sizeof(str), "password %s", inputtext);
621 g_ServerLocked = true;
622
623 SendRconCommand(str);
624 }
625 else cmd_panel(playerid, "\1");
626 return 1;
627}
628
629Dialog:SetHostname(playerid, response, listitem, inputtext[])
630{
631 if (pInfo[playerid][Admin] < Fondateur)
632 return 0;
633
634 if (response)
635 {
636 if (isnull(inputtext))
637 return Dialog_Show(playerid, SetHostname, DIALOG_STYLE_INPUT, "Modifier le nom d'hôte", "Entrez le nom d'hôte:", "Valider", "Retour");
638
639 static
640 str[128];
641
642 format(str, sizeof(str), "hostname %s", inputtext);
643
644 SendRconCommand(str);
645 }
646 else cmd_panel(playerid, "\1");
647 return 1;
648}
649
650
651
652CMD:panel(playerid, params[])
653{
654 if (pInfo[playerid][Admin] < Fondateur)
655 return SendError(playerid, "Vous n'avez pas la permission d'utiliser cette commande.");
656
657 if (g_ServerLocked)
658 Dialog_Show(playerid, ServerPanel, DIALOG_STYLE_LIST, "Panneau de Configuration", "Dévérouiller le serveur\nModifier le nom d'hôte", "Valider", "Annuler");
659
660 else Dialog_Show(playerid, ServerPanel, DIALOG_STYLE_LIST, "Panneau de configuration", "Vérouiller le serveur\nModifier le nom d'hôte", "Valider", "Annuler");
661 return 1;
662}
663
664CMD:select(playerid, params[])
665{
666 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFFFFFFF,"This command is only for RCON Admins.");
667 SelectObject(playerid);
668 return 1;
669}
670
671CMD:jour(playerid, params[])
672 {
673 SetPlayerWeather(playerid, 61);
674 SetPlayerTime(playerid, 7, 00);
675 return 1;
676 }
677
678CMD:nuit(playerid, params[])
679 {
680 SetPlayerWeather(playerid, 1);
681 SetPlayerTime(playerid, 00, 00);
682 return 1;
683 }
684
685CMD:time(playerid, params[])
686{
687 static
688 string[128],
689 month[12],
690 date[6];
691
692 getdate(date[2], date[1], date[0]);
693 gettime(date[3], date[4], date[5]);
694
695 switch (date[1]) {
696 case 1: month = "Janvier";
697 case 2: month = "Fevrier";
698 case 3: month = "Mars";
699 case 4: month = "Avril";
700 case 5: month = "Mai";
701 case 6: month = "Juin";
702 case 7: month = "Juillet";
703 case 8: month = "Aout";
704 case 9: month = "Septembre";
705 case 10: month = "Octobre";
706 case 11: month = "Novembre";
707 case 12: month = "Decembre";
708 }
709 format(string, sizeof(string), "~y~%02d %s %d~n~~w~%02d:%02d", date[0], month, date[2], date[3], date[4]);
710 GameTextForPlayer(playerid, string, 6000, 1);
711 return 1;
712}
713
714
715CMD:b(playerid, params[])
716 {
717 new sendername[MAX_PLAYER_NAME];
718 new string[128];
719 GetPlayerName(playerid, sendername, sizeof(sendername));
720 if(isnull(params)) return SendClientMessage(playerid, COLOR_USAGE, "/b <Message>");
721 format(string, sizeof(string), "(( %s : %s )) ", sendername, params);
722 ProxDetector(20.0, playerid, string, COLOR_OOC);
723 return 1;
724}
725
726
727CMD:me(playerid, params[])
728{
729 new
730 string[128],
731 action[100];
732 if(sscanf(params, "s[100]", action))
733 {
734 SendClientMessage(playerid, COLOR_USAGE, "/me <Action>");
735 return 1;
736 }
737 else
738 {
739 format(string, sizeof(string), "* %s %s", GetName(playerid), action);
740 ProxDetector(20.0, playerid, string, COLOR_PURPLE);
741 }
742 return 1;
743}
744
745CMD:do(playerid, params[])
746{
747 new string[128], action[100];
748 if(sscanf(params, "s[100]", action))
749 {
750 SendClientMessage(playerid, COLOR_USAGE, "/do <Message>");
751 return 1;
752 }
753 else
754 {
755 format(string, sizeof(string), "* %s (( %s ))", action, GetName(playerid));
756 ProxDetector(20.0, playerid, string, COLOR_PURPLE);
757 }
758 return 1;
759}
760
761CMD:crier(playerid, params[])
762{
763 new string[128], shout[100];
764 if(sscanf(params, "s[100]", shout))
765 {
766 SendClientMessage(playerid, COLOR_USAGE, "/(c)rier <Message>");
767 return 1;
768 }
769 else
770 {
771 format(string, sizeof(string), "%s crie: %s",GetName(playerid),shout);
772 ProxDetector(35.0, playerid, string, -1);
773 }
774 return 1;
775}
776
777CMD:c(playerid, params[])
778 return cmd_crier(playerid, params);
779
780COMMAND:ame(playerid, params[])
781 {
782 new string[128],msg[128],pname[MAX_PLAYER_NAME];
783 GetPlayerName(playerid,pname,sizeof(pname));
784 if(sscanf(params,"s[128]",msg)) return SendClientMessage(playerid,COLOR_USAGE, "/ame <Texte>");
785 format(string,sizeof(string),"[AME] %s %s",pname,msg);
786 ProxDetector(20.0, playerid, string,COLOR_PURPLE);
787 SetPlayerChatBubble(playerid, string, COLOR_PURPLE, 100.0, 10000);
788 return 1;
789 }
790
791
792
793CMD:stats(playerid, params[])
794{
795 new string[100];
796
797
798 format(string, sizeof(string), "Votre grade est : %s", GetGuideRank(playerid));
799 SendClientMessage(playerid, -1, string);
800
801 return 1;
802}
803
804
805CMD:freeze(playerid, params[])
806{
807 new userid;
808
809 if(pInfo[playerid][Admin] < Modérateur)
810 return SendClientMessage(playerid, COLOR_ERROR, "Vous n'avez pas la permission d'utiliser cette commande.");
811
812 if (sscanf(params, "u", userid))
813 return SendClientMessage(playerid, COLOR_USAGE, "/freeze <PlayerID/PlayerName>");
814
815 if (userid == INVALID_PLAYER_ID)
816 return SendClientMessage(playerid, COLOR_ERROR, "Ce joueur n'est pas connecté ou est inexistant.");
817
818 TogglePlayerControllable(userid, 0);
819 return SendClientMessage(playerid, -1, "Vous avez été freeze par un membre de l'équipe.");
820 return true;
821}
822
823CMD:unfreeze(playerid, params[])
824{
825 new userid;
826
827 if(pInfo[playerid][Admin] < Modérateur)
828 return SendClientMessage(playerid, COLOR_ERROR, "Vous n'avez pas la permission d'utiliser cette commande.");
829
830 if (sscanf(params, "u", userid))
831 return SendClientMessage(playerid, COLOR_USAGE, "/freeze <PlayerID/PlayerName>");
832
833 if (userid == INVALID_PLAYER_ID)
834 return SendClientMessage(playerid, COLOR_ERROR, "Ce joueur n'est pas connecté ou est inexistant.");
835
836 TogglePlayerControllable(userid, 1);
837 SendClientMessage(userid, -1, "Vous venez d'être unfreeze par un membre de l'équipe.");
838
839 return 1;
840}
841
842
843CMD:kick(playerid, params[])
844{
845 new userid, reason;
846 if(pInfo[playerid][Admin] < Modérateur)
847 return SendClientMessage(playerid, COLOR_ERROR, "Vous n'avez pas la permission d'utiliser cette commande.");
848
849 if (pInfo[userid][Admin] > pInfo[playerid][Admin])
850 return SendClientMessageEx(playerid, COLOR_ERROR, "[Serveur] Il n'est pas possible de kick un joueur plus gradé que soit.");
851
852
853 if (sscanf(params, "u", userid))
854 return SendClientMessage(playerid, COLOR_USAGE, "/kick [PlayerID] [Raison]");
855
856 if (userid == INVALID_PLAYER_ID)
857 return SendClientMessage(playerid, COLOR_ERROR, "Ce joueur n'est pas connecté ou est inexistant.");
858 Kick(userid);
859 return 1;
860}
861
862
863
864CMD:report(playerid, params[])
865{
866 new string[128];
867 if(!isnull(params))
868 {
869 SendClientMessage(playerid, COLOR_YELLOW, "Your report was sent to the Admin Teams:");
870 format(string, sizeof(string), "%s", params); // Proof to the reporter, that the command worked.
871 SendClientMessage(playerid, COLOR_YELLOW, string);
872 for(new i=0; i<MAX_PLAYERS; i++)
873 {
874 if(pInfo[playerid][Admin] < Fondateur)
875 {
876 format(string, sizeof(string), "Report from %s[%d]: %s", GetName(playerid), playerid, params);
877 SendClientMessage(i, COLOR_ORANGE, string); // Send's the format to the online Rcon'ly Logged in Admins.
878 }
879 }
880 }
881 else
882 {
883 SendClientMessage(playerid, COLOR_WHITE, "USAGE: /Report [Text]"); // Show's the player the Usage.
884 }
885 return 1;
886}
887
888stock SendAdminAlert(color, const str[], {Float,_}:...)
889{
890 static
891 args,
892 start,
893 end,
894 string[144]
895 ;
896 #emit LOAD.S.pri 8
897 #emit STOR.pri args
898
899 if (args > 8)
900 {
901 #emit ADDR.pri str
902 #emit STOR.pri start
903
904 for (end = start + (args - 8); end > start; end -= 4)
905 {
906 #emit LREF.pri end
907 #emit PUSH.pri
908 }
909 #emit PUSH.S str
910 #emit PUSH.C 144
911 #emit PUSH.C string
912
913 #emit LOAD.S.pri 8
914 #emit ADD.C 4
915 #emit PUSH.pri
916
917 #emit SYSREQ.C format
918 #emit LCTRL 5
919 #emit SCTRL 4
920
921 foreach (new i : Player)
922 {
923 if (pInfo[i][Admin] >= 1 && pInfo[i][pDisableAdmin] != 1) {
924 SendClientMessage(i, color, string);
925 }
926 }
927 return 1;
928 }
929 foreach (new i : Player)
930 {
931 if (pInfo[i][Admin] >= 1 && pInfo[i][pDisableAdmin] != 1) {
932 SendClientMessage(i, color, str);
933 }
934 }
935 return 1;
936}
937
938CMD:aduty(playerid, params[])
939{
940 if (pInfo[playerid][Admin] < Fondateur)
941 return SendClientMessageEx(playerid, COLOR_ERROR, "Vous n'avez pas la permission d'utiliser cette commande.");
942
943 if (!pInfo[playerid][pAdminDuty])
944 {
945 SetPlayerColor(playerid, 0xB3050500);
946
947 pInfo[playerid][pAdminDuty] = 1;
948 SendAdminAlert(COLOR_ADMINCHAT, "L'administrateur %s est désormais en service.", GetName(playerid));
949 }
950 else
951 {
952 SetPlayerColor(playerid, COLOR_WHITE);
953
954 pInfo[playerid][pAdminDuty] = 0;
955 SendAdminAlert(COLOR_ADMINCHAT, "L'administrateur %s n'est plus en service.", GetName(playerid));
956 }
957 return 1;
958}
959
960
961CMD:admins(playerid, params[])
962{
963 new count = 400;
964 foreach (new i : Player)
965
966 {
967 if (pInfo[i][pAdminDuty])
968 SendClientMessageEx(playerid, COLOR_WHITE, "[%s] %s | {33CC33}DutyON", GetGuideRank(i), GetName(i));
969
970 else
971 SendClientMessageEx(playerid, COLOR_WHITE, "[%s] %s | DutyOFF", GetGuideRank(i), GetName(i));
972 }
973
974 return 1;
975}
976
977COMMAND:skin(playerid, params[]) // or CMD:mycommand(playerid, params[])
978 {
979 ShowModelSelectionMenu(playerid, skinList, "Select Skin");
980 return 1;
981 }
982
983
984
985CMD:carte(playerid, params[])
986{
987 if(!IsPlayerInRangeOfPoint(playerid, 3.0, 1993.5836,-1761.9480,13.5391)) return SendClientMessage(playerid, COLOR_ERROR, "Vous n'êtes pas à proximité d'une carte.");
988 {
989 ShowPlayerDialog(playerid, CARTE_DIALOG, DIALOG_STYLE_LIST, "Vice City Map", "VCPD\nVCFD\nAmmunation", "OK", "Retour");
990
991 }
992
993 return 1;
994}