Advertisement
Guest User

gm

a guest
Jun 6th, 2014
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 63.44 KB | None | 0 0
  1. /*
  2.  
  3.  ________                                         .___      
  4.  /  _____/_____    _____   ____   _____   ____   __| _/____  
  5. /   \  ___\__  \  /     \_/ __ \ /     \ /  _ \ / __ |/ __ \
  6. \    \_\  \/ __ \|  Y Y  \  ___/|  Y Y  (  <_> ) /_/ \  ___/
  7.  \______  (____  /__|_|  /\___  >__|_|  /\____/\____ |\___  >          
  8.         \/     \/      \/     \/      \/            \/    \/            
  9.  
  10. __________       .__                .__                
  11. \______   \ ____ |  |   ____ ______ |  | _____  ___.__.
  12.  |       _//  _ \|  | _/ __ \\____ \|  | \__  \<   |  |
  13.  |    |   (  <_> )  |_\  ___/|  |_> >  |__/ __ \\___  |
  14.  |____|_  /\____/|____/\___  >   __/|____(____  / ____|
  15.         \/                 \/|__|             \/\/    
  16.  
  17.  
  18.  
  19. Changelog :
  20.  
  21. • 29 Mai 2014 : Ajout des premières commandes/fonctions/includes : base extrêmement tiny
  22. • 2/3 Juin 2014 : Ajout de l'anti-cheat (version bêta) :
  23.                 - Anti cheat vie
  24.                 - Anti cheat armure
  25.                 - Anti cheat armes
  26.                 - Anti cheat argent
  27.                 - Anti cheat tuning
  28.                 - Anti cheat block munition
  29. • 4 juin 2014 : Ajout de la commande /immun [Joueur] [Type] [Temps] : Autorise le(s) cheat(s) (Type) à un joueur pendant temps minute(s)
  30.                 Ajout d'un raccourci pour le chat admin (# [Message])
  31. • 5 juin 2014 : Réparation/correction de bugs
  32.                 Ajout du /cmds
  33.                 Ajout du /acmds
  34.                 Ajout de la sauvegarde des données joueur
  35.                 Ajout du système de comeback
  36.                 Ajout de la commande /question
  37.                 Ajout du /admins
  38.                 Ajout du message à la déconnexion
  39.  
  40.  
  41.  
  42.  
  43. TUTORIEL UTILE :
  44.  
  45. • Ajouter une commande : prendre exemple sur les commandes déjà existantes (CMD:nomdelacommande(playerid, params[]) { Instructions return 1; })
  46. • Ajouter un alias : créer sa commande basiquement, et ne mettre comme instruction que "return cmd_nom_de_la_commande_deja_existante(playerid, params);", par exemple :
  47.         CMD:quelque(playerid, params[])
  48.         {
  49.             return SCM(playerid, -1, "quelque"); // Affichera "quelque" dans le chat pour le joueur ayant tapé la commande
  50.         }
  51.         CMD:chose(playerid, params[]) { return cmd_quelque(playerid, params); } // Affichera "quelque" dans le chat pour le joueur ayant tapé la commande
  52. • Checker les paramètres : Voir le tutoriel de Y_Less sur sscanf
  53. • Me mettre en admin : se logguer en rcon et taper /adminlevel [VotreID/VotrePseudo] MAX_ADMINLEVEL (défaut : 9999)
  54.  
  55.  
  56.  
  57.  
  58. ___.   ._____.   .__  .__        __  .__                                      
  59. \_ |__ |__\_ |__ |  | |__| _____/  |_|  |__   ____  ________ __   ____   ______
  60.  | __ \|  || __ \|  | |  |/  _ \   __\  |  \_/ __ \/ ____/  |  \_/ __ \ /  ___/
  61.  | \_\ \  || \_\ \  |_|  (  <_> )  | |   Y  \  ___< <_|  |  |  /\  ___/ \___ \
  62.  |___  /__||___  /____/__|\____/|__| |___|  /\___  >__   |____/  \___  >____  >
  63.      \/        \/                         \/     \/   |__|           \/     \/
  64.  
  65. */
  66.  
  67. #include <a_samp> // SA-MP Team
  68. #include <a_mysql> // BlueG/Maddinator
  69. #include <streamer> // Incognito
  70. #include <callbacks> // Emmet_
  71. #include <hash> // Mellnik
  72. #include <s_sniper_fix> // S4T3K
  73. #include <s_string_ex> // S4T3K
  74. #include <YSI\y_va> // Y_Less
  75. #include <YSI\md5> // Y_Less
  76. #include <YSI\y_iterate> // Y_Less
  77. #include <YSI\y_colours> // Y_Less
  78. #include <sscanf2> // Y_Less
  79. #include <zcmd> // Zeex
  80. #include <crashdetect> // Zeex
  81.  
  82. /*
  83.  
  84. ________          _____.__       .__  __  .__                      
  85. \______ \   _____/ ____\__| ____ |__|/  |_|__| ____   ____   ______
  86.  |    |  \_/ __ \   __\|  |/    \|  \   __\  |/  _ \ /    \ /  ___/
  87.  |    `   \  ___/|  |  |  |   |  \  ||  | |  (  <_> )   |  \\___ \
  88. /_______  /\___  >__|  |__|___|  /__||__| |__|\____/|___|  /____  >
  89.         \/     \/              \/                        \/     \/
  90.  
  91. */
  92.  
  93. #if !defined isnull
  94.     #define (isnull(%0)) \
  95.                         ((!(%0[0])) || (((%0[0]) == ('\1' || '\0') && (!%1[1])))
  96. #endif
  97.  
  98. #define SCM SendClientMessageEx
  99. #define SCMToAll SendClientMessageToAllEx
  100. #define GameTextForPlayer GameTextForPlayerEx
  101. #define GetPlayerIP GetPlayerIp
  102.  
  103. // Anti-cheat
  104. #define SetPlayerHealth AC_SetPlayerHealth
  105. #define SetPlayerArmour AC_SetPlayerArmour
  106. #define GivePlayerWeapon AC_GivePlayerWeapon
  107. #define ResetPlayerWeapons AC_ResetPlayerWeapons
  108. #define GivePlayerMoney AC_GivePlayerMoney
  109. #define ResetPlayerMoney AC_ResetPlayerMoney
  110. #define AddVehicleComponent AC_AddVehicleComponent
  111.  
  112. #define CHEAT_RANGE 50 // Fréquence en ms d'immunité anti-cheat (plus bas possible pour de meilleurs résultats, mais ne pas trop baisser sur serveurs faibles performances)
  113.  
  114. #define CMD_SAVE "/vehsave"
  115.  
  116. #define SYNTAX 0x33CCFFFF
  117.  
  118. #define NORMAL_TEXT_1 0xE6E6E6E6
  119. #define NORMAL_TEXT_2 0xC8C8C8C8
  120. #define NORMAL_TEXT_3 0xAAAAAAAA
  121. #define NORMAL_TEXT_4 0x8C8C8C8C
  122. #define NORMAL_TEXT_5 0x6E6E6E6E
  123.  
  124. #define COULEUR_ME 0xB23AEEAA
  125. #define COULEUR_DO 0x9A32CDAA
  126.  
  127. #define COULEUR_AD_1 DEEP_PINK_4
  128. #define COULEUR_AD_2 CYAN_3
  129. #define COULEUR_AD_3 CYAN_4
  130. #define COULEUR_AD_4 SEA_GREEN_4
  131. #define COULEUR_AD_5 SALMON_4
  132. #define COULEUR_AD_6 CHOCOLATE_4
  133. #define COULEUR_AD_7 BROWN_4
  134. #define COULEUR_AD_8 RED_4
  135.  
  136. #define GRADE_AD_1 1
  137. #define GRADE_AD_2 2
  138. #define GRADE_AD_3 3
  139. #define GRADE_AD_4 4
  140. #define GRADE_AD_5 5
  141. #define GRADE_AD_6 6
  142. #define GRADE_AD_7 7
  143. #define GRADE_AD_8 8
  144.  
  145. #define SQL_HOST "mysql2.alwaysdata.com"
  146. #define SQL_USER "privé"
  147. #define SQL_DATA "privé"
  148. #define SQL_PASS "privé"
  149.  
  150. #define JAIL_X 0.0
  151. #define JAIL_Y 0.0
  152. #define JAIL_Z 0.0
  153. #define JAIL_VW 0
  154.  
  155. #define D_CREDITS 1
  156. #define DIALOG_ACOMMANDS 2
  157. #define DIALOG_PCOMMANDS 3
  158.  
  159. /*
  160.  
  161. ___________                         _____                                    
  162. \_   _____/ ____  __ __  _____     /  _  \___________________  ___.__. ______
  163.  |    __)_ /    \|  |  \/     \   /  /_\  \_  __ \_  __ \__  \<   |  |/  ___/
  164.  |        \   |  \  |  /  Y Y  \ /    |    \  | \/|  | \// __ \\___  |\___ \
  165. /_______  /___|  /____/|__|_|  / \____|__  /__|   |__|  (____  / ____/____  >
  166.         \/     \/            \/          \/                  \/\/         \/
  167.  
  168. */
  169.  
  170. enum pInfo
  171. {
  172.     pLevel,
  173.     pAdmin,
  174.     pPass[33],
  175.     pMail,
  176.     pHBan,
  177.     pJailTime,
  178.     Float:pJail[3],
  179.     pMutetime,
  180.     Float:pAFKd,
  181.     Float:pLast[3],
  182.     pNextq,
  183.     pImmun,
  184.     pImmunt,
  185.     bool:pMuted,
  186.     bool:pJailed,
  187.  
  188.  
  189.     // Anti-Cheat (rajouter des variables joueur au dessus si besoin pour éviter les confusions)
  190.     bool:cArgent,
  191.     bool:cVie,
  192.     bool:cArmure,
  193.     bool:cArmes,
  194.     bool:cTuning,
  195.     bool:cBlock,
  196.     Float:oVie,
  197.     Float:oArmure,
  198.     oArme[12],
  199.     oArgent,
  200. };
  201.  
  202. new
  203.     PlayerInfo[MAX_PLAYERS][pInfo];
  204.  
  205.  
  206. /*
  207.  
  208. ____   ____            .__      ___.   .__                
  209. \   \ /   /____ _______|__|____ \_ |__ |  |   ____   ______
  210.  \   Y   /\__  \\_  __ \  \__  \ | __ \|  | _/ __ \ /  ___/
  211.   \     /  / __ \|  | \/  |/ __ \| \_\ \  |_\  ___/ \___ \
  212.    \___/  (____  /__|  |__(____  /___  /____/\___  >____  >
  213.                \/              \/    \/          \/     \/
  214.         .__        ___.          .__                
  215.    ____ |  |   ____\_ |__ _____  |  |   ____   ______
  216.   / ___\|  |  /  _ \| __ \\__  \ |  | _/ __ \ /  ___/
  217.  / /_/  >  |_(  <_> ) \_\ \/ __ \|  |_\  ___/ \___ \
  218.  \___  /|____/\____/|___  (____  /____/\___  >____  >
  219. /_____/                 \/     \/          \/     \/
  220.  
  221. */
  222.  
  223. static MySQL, m_banid;
  224. new pid, raison[145], query[256], tsauv;
  225.  
  226. new InvalidWords[][] =
  227. {
  228.     "CMLV", "GTARP", "GTRP", "LMRP"
  229. };
  230.  
  231.  
  232. /*
  233.  
  234. _________        .__  .__ ___.                  __            
  235. \_   ___ \_____  |  | |  |\_ |__ _____    ____ |  | __  ______
  236. /    \  \/\__  \ |  | |  | | __ \\__  \ _/ ___\|  |/ / /  ___/
  237. \     \____/ __ \|  |_|  |_| \_\ \/ __ \\  \___|    <  \___ \
  238.  \______  (____  /____/____/___  (____  /\___  >__|_ \/____  >
  239.         \/     \/              \/     \/     \/     \/     \/
  240.         _____  _____.__       .__       .__  .__                
  241.   _____/ ____\/ ____\__| ____ |__| ____ |  | |  |   ____   ______
  242.  /  _ \   __\\   __\|  |/ ___\|  |/ __ \|  | |  | _/ __ \ /  ___/
  243. (  <_> )  |   |  |  |  \  \___|  \  ___/|  |_|  |_\  ___/ \___ \
  244.  \____/|__|   |__|  |__|\___  >__|\___  >____/____/\___  >____  >
  245.                             \/        \/               \/     \/
  246.  
  247. */
  248.  
  249. main()
  250. {
  251.     printf("[DATA] Loading...");
  252.     // Appeler les fonctions de chargement ici (fonctions SANS le paramètre playerid, il faut qu'elles soient globales comme le chargement des maisons, biz, véhicules...)
  253.     tsauv = SetTimer("SavePlayerData", 1000, true);
  254.     printf("Gamemode roleplay beta testing.");
  255.     return 1;
  256. }
  257.  
  258. public OnGameModeInit()
  259. {
  260.     printf("[SQL] Beginning of the connection to the renseigned database [Server : %s | User : %s | Database : %s | Password : %s]", SQL_HOST, SQL_USER, SQL_DATA, SQL_PASS);
  261.     MySQL = mysql_connect(SQL_HOST, SQL_USER, SQL_DATA, SQL_PASS);
  262.     if(mysql_errno() != 0)
  263.     {
  264.         printf("[SQL] Problème de connexion à la base de données MySQL, deuxième tentative... [Infos SQL : Hote : %s, User : %s, DB : %s, Pass : %s]", SQL_HOST, SQL_USER, SQL_DATA, SQL_PASS);
  265.         mysql_reconnect(MySQL);
  266.         if(mysql_errno() != 0)
  267.         {
  268.             mysql_close(MySQL);
  269.             return printf("[SQL] Deuxième connexion impossible, base de données SQL non chargée.");
  270.         }
  271.         else printf("[SQL] Deuxième connexion SQL réussie, début du chargement des données...");
  272.     }
  273.     else printf("[SQL] Connection to database successfuly done, starting data loading...");
  274.     AddPlayerClass(5,-1316.0753,2539.6685,87.7422,50.7371,0,0,0,0,0,0);
  275.     SetGameModeText("Roleplay beta");
  276.     SendRconCommand("mapname San Andreas");
  277.     SendRconCommand("weburl www.sa-mp.com");
  278.     return 1;
  279. }
  280.  
  281. public OnGameModeExit()
  282. {
  283.     KillTimer(tsauv);
  284.     printf("Dernière sauvegarde des données en cours...");
  285.     // Appeler les fonctions de sauvegarde ici
  286.     SavePlayerData();
  287.     printf("Dernière sauvegarde des données effectuée, fermeture de la connexion SQL...");
  288.     mysql_close(MySQL);
  289.     if(mysql_errno() != 0) printf("Connexion SQL arrêtée correctement, fermeture du serveur...");
  290.     else
  291.     {
  292.         printf("Problème de fermeture de la connexion SQL, deuxième essai imminent...");
  293.         mysql_close(MySQL);
  294.         if(mysql_errno() != 0) printf("Impossible de fermer la connexion SQL, des données ont pu être perdues ou non transférées.");
  295.         else printf("Deuxième tentative de fermeture SQL effectuée avec succès, fermeture du serveur...");
  296.     }
  297.     DisconnectAll();
  298.     return 1;
  299. }
  300.  
  301. public OnPlayerConnect(playerid)
  302. {
  303.     new ip[17], country[50];
  304.     #pragma unused country
  305.     GetPlayerIp(playerid, ip, sizeof(ip));
  306.     format(query, sizeof(query), "SELECT * FROM Banlist WHERE nom = '%s' OR ip = '%s'", GetName(playerid), ip);
  307.     mysql_tquery(MySQL, query, "OnBanInfoConnect", "i", playerid);
  308.     LoadPlayerData(playerid);
  309.     return 1;
  310. }
  311.  
  312. public OnPlayerDisconnect(playerid, reason)
  313. {
  314.     switch(reason)
  315.     {
  316.         case 0: return ProxDetectorEx(20.0, playerid, NORMAL_TEXT_1, NORMAL_TEXT_2, NORMAL_TEXT_3, NORMAL_TEXT_4, NORMAL_TEXT_5, "[Timeout] %s a quitté le serveur.", MakeRP(GetName(playerid))), ABroadCast(1, 0xFF0000FF, ""FIREBRICK_4"[Timeout]{FFFFFF} %s a quitté le serveur.", MakeRP(GetName(playerid)));
  317.         case 1: return ProxDetectorEx(20.0, playerid, NORMAL_TEXT_1, NORMAL_TEXT_2, NORMAL_TEXT_3, NORMAL_TEXT_4, NORMAL_TEXT_5, "[Déconnexion] %s a quitté le serveur.", MakeRP(GetName(playerid))), ABroadCast(1, 0xFF0000FF, ""FIREBRICK_4"[Déconnexion]{FFFFFF} %s a quitté le serveur.", MakeRP(GetName(playerid)));
  318.         case 2: return ProxDetectorEx(20.0, playerid, NORMAL_TEXT_1, NORMAL_TEXT_2, NORMAL_TEXT_3, NORMAL_TEXT_4, NORMAL_TEXT_5, "[Sanction] %s a quitté le serveur.", MakeRP(GetName(playerid))), ABroadCast(1, 0xFF0000FF, ""FIREBRICK_4"[Sanction]{FFFFFF} %s a quitté le serveur.", MakeRP(GetName(playerid)));
  319.     }
  320.     return 1;
  321. }
  322.  
  323. public OnPlayerUpdate(playerid)
  324. {
  325.     if(PlayerInfo[playerid][pJailTime] <= gettime())
  326.     {
  327.         if(PlayerInfo[playerid][pJailed]) UpdateTime(playerid);
  328.         else Unjail(playerid);
  329.     }
  330.    
  331.     if(PlayerInfo[playerid][pMutetime] <= gettime())
  332.     {
  333.         if(!PlayerInfo[playerid][pMuted]) Unmute(playerid);
  334.     }
  335.  
  336.     // Anti cheat
  337.  
  338.     new Float:vie, Float:armure, arme[2][12], argent;
  339.     GetPlayerHealth(playerid, vie);
  340.     GetPlayerArmour(playerid, armure);
  341.     argent = GetPlayerMoney(playerid);
  342.     for(new s = 0; s < 12; s++)
  343.     {
  344.         GetPlayerWeaponData(playerid, s, arme[0][s], arme[1][s]);
  345.         if(arme[0][s] != PlayerInfo[playerid][oArme][s] && !PlayerInfo[playerid][cArmes]) BanSQL(playerid, -2, "Cheat - D-GUN");
  346.         PlayerInfo[playerid][oArme][s] = arme[0][s];
  347.     }
  348.     if( (vie != PlayerInfo[playerid][oVie]) && !PlayerInfo[playerid][cVie]) BanSQL(playerid, -2, "Cheat - vie");
  349.     if( (armure != PlayerInfo[playerid][oArmure]) && !PlayerInfo[playerid][cArmure]) BanSQL(playerid, -2, "Cheat - Armure");
  350.     if( (argent != PlayerInfo[playerid][oArgent]) && !PlayerInfo[playerid][cArgent]) BanSQL(playerid, -2, "Cheat - Argent");
  351.  
  352.     PlayerInfo[playerid][oVie] = vie;
  353.     PlayerInfo[playerid][oArmure] = armure;
  354.     PlayerInfo[playerid][oArgent] = argent;
  355.     return 1;
  356. }
  357.  
  358. public OnPlayerText(playerid, text[])
  359. {
  360.     if((text[0] == '#') && (PlayerInfo[playerid][pAdmin] < 1))
  361.     {
  362.         new ttext[144];
  363.         strmid(ttext, text, 2, strlen(text));
  364.         return ABroadCast(1, -1, ""DEEP_SKY_BLUE_2"[Admin chat]"DEEP_SKY_BLUE_3"[%s - %s]"DEEP_SKY_BLUE_4" [%s]", GetName(playerid), GetARank(playerid), ttext);
  365.     }
  366.     if(!CheckValid(text)) ABroadCast(1, 0xFF0000FF, "[Invalide]"FIREBRICK" %s (%d) a prononcé un mot jugé invalide par l'anti-pub.", GetName(playerid), playerid);
  367.     ProxDetectorEx(20.0, playerid, NORMAL_TEXT_1, NORMAL_TEXT_2, NORMAL_TEXT_3, NORMAL_TEXT_4, NORMAL_TEXT_5, "%s : %s", MakeRP(GetName(playerid)), text);
  368.     return 1;
  369. }
  370.  
  371. public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
  372. {
  373.     new Float:health, Float:armour;
  374.     GetPlayerHealth(playerid, health);
  375.     GetPlayerArmour(playerid, armour);
  376.     if(armour >= amount) Enable_safe_armour(playerid);
  377.     else Enable_safe_health(playerid);
  378.     if(IsPlayerPaused(playerid)) PlayerInfo[playerid][pAFKd] = floatadd(PlayerInfo[playerid][pAFKd], amount);
  379.     return 1;
  380. }
  381.  
  382. public OnPlayerResume(playerid, time)
  383. {
  384.     new Float:health, Float:armour;
  385.     GetPlayerHealth(playerid, health);
  386.     GetPlayerArmour(playerid, armour);
  387.     if(PlayerInfo[playerid][pAFKd] <= armour) SetPlayerArmour(playerid, floatsub(armour, PlayerInfo[playerid][pAFKd]));
  388.     else SetPlayerHealth(playerid, floatsub(health, PlayerInfo[playerid][pAFKd]));
  389.     return 1;
  390. }
  391.  
  392. public OnPlayerRequestSpawn(playerid)
  393. {
  394.     SpawnPlayer(playerid);
  395.     return SCM(playerid, -1, ""DARK_ORANGE_3"[Aide]"DARK_ORANGE_4" Utilisez /cmds pour afficher la liste des commandes disponibles !");
  396. }
  397.  
  398. public OnVehicleMod(playerid, vehicleid, componentid)
  399. {
  400.     if(!PlayerInfo[playerid][cTuning] && GetPlayerInterior(playerid) == 0) BanSQL(playerid, -2, "Cheat - Tuning");
  401.     return 1;
  402. }
  403.  
  404. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  405. {
  406.     switch(dialogid)
  407.     {
  408.         case 1..3: return 1;
  409.     }
  410.     return 0;
  411. }
  412.  
  413.  
  414. /*
  415.   _____                     __  .__                      
  416. _/ ____\____   ____   _____/  |_|__| ____   ____   ______
  417. \   __\/  _ \ /    \_/ ___\   __\  |/  _ \ /    \ /  ___/
  418.  |  | (  <_> )   |  \  \___|  | |  (  <_> )   |  \\___ \
  419.  |__|  \____/|___|  /\___  >__| |__|\____/|___|  /____  >
  420.                   \/     \/                    \/     \/
  421.  
  422. */
  423.  
  424. stock BanSQL(playerid, adminid = -1, const reason[] = "", bool:temp = false, heures = 0)
  425. {
  426.     if(!IsPlayerConnected(playerid)) return SendNoCMessage(adminid, playerid);
  427.     new date[6], pIP[17], name[MAX_PLAYER_NAME];
  428.     if(adminid == -2) name = "Anti cheat";
  429.     else name = GetName(adminid);
  430.  
  431.     getdate(date[0], date[1], date[2]);
  432.     gettime(date[3], date[4], date[5]);
  433.     GetPlayerIp(playerid, pIP, 17);
  434.     if(temp) PlayerInfo[playerid][pHBan] = gettime() + heures*3600;
  435.     mysql_format(MySQL, query, sizeof(query), "INSERT INTO Banlist VALUES(NULL, '%s', '%s', '%e', '%s', '%d-%d-%d %d:%d:%d', %d', '%d')",
  436.     GetName(playerid), name, reason, pIP, date[0], date[1], date[2], date[3], date[4], date[5], temp, heures);
  437.     mysql_tquery(MySQL, query);
  438.     format(query, sizeof(query), "SELECT `pid` FROM Banlist WHERE `nom` = '%s' LIMIT 1", GetName(playerid));
  439.     mysql_tquery(MySQL, query, "OnBanInfoFound", "i", playerid);
  440.     new rank[30];
  441.     rank = GetARank(playerid);
  442.     toupper(rank[0]);
  443.     if(temp)
  444.     {
  445.         SCMToAll(0xFF0000FF, "[Admin]"FIREBRICK" Le joueur %s (%d) a été banni par un Administrateur pendant %d heures"RED_4" [%s].",
  446.         GetName(playerid), playerid, heures, reason);
  447.         ABroadCast(1, 0xFF0000FF, "[Ban]"FIREBRICK" Le joueur %s (%d) a été banni par %s"RED3"[%s]"FIREBRICK" pendant %d heures"RED_4" [%s].",
  448.         GetName(playerid), playerid, name, rank, heures, reason);
  449.         KickWithMessage(playerid, 0xFF0000FF, "[Ban]"FIREBRICK" Vous avez été banni pour %d heures du serveur [%s].\nSi vous pensez que c'est une erreur, prenez un screen de ce message et postez une demande de débanissement. [BAN pid : %d]",
  450.         heures, reason, m_banid);
  451.     }
  452.     else
  453.     {
  454.         SCMToAll(0xFF0000FF, "[Admin]"FIREBRICK" Le joueur %s (%d) a été banni de façon permanente par un Administrateur"RED_4" [%s].",
  455.         GetName(playerid), playerid, reason);
  456.         ABroadCast(1, 0xFF0000FF, "[Ban]"FIREBRICK" Le joueur %s (%d) a été banni par %s"RED3"[%s]"FIREBRICK" de façon permanente"RED_4" [%s].",
  457.         GetName(playerid), playerid, name, rank, reason);
  458.         KickWithMessage(playerid, 0xFF0000FF, "[Ban]"FIREBRICK" Vous avez été banni de façon permanente du serveur "RED_4"[%s].\nSi vous pensez que c'est une erreur, prenez un screen de ce message et postez une demande de débanissement."BROWN_4"[BAN pid : %d]",
  459.         heures, reason, m_banid);
  460.     }
  461.     return 1;
  462. }
  463.  
  464. stock KickSQL(playerid, adminid = -1, const reason[] = "")
  465. {
  466.     if(!IsPlayerConnected(playerid)) return SendNoCMessage(adminid, playerid);
  467.     new  date[6], adminName[MAX_PLAYER_NAME];
  468.     if(adminid == -2) adminName = "Anti cheat";
  469.     else adminName = "Anti cheat";
  470.  
  471.     getdate(date[0], date[1], date[2]);
  472.     gettime(date[3], date[4], date[5]);
  473.     mysql_format(MySQL, query, sizeof(query), "INSERT INTO Kicklog VALUES(NULL, '%s', '%s', '%e', '%d-%d-%d %d:%d:%d')",
  474.     GetName(playerid), adminName, reason, date[0], date[1], date[2], date[3], date[4], date[5]);
  475.     mysql_tquery(MySQL, query);
  476.     new rank[30];
  477.     rank = GetARank(playerid);
  478.     toupper(rank[0]);
  479.     SCMToAll(0xFF0000FF, "[Admin]"FIREBRICK" Le joueur %s (%d) a été kické du serveur par un Administrateur"RED_4" [%s].", GetName(playerid), playerid, reason);
  480.     SetTimerEx("kickPublic", 1, false, "i", playerid);
  481.     return ABroadCast(1, 0xFF0000FF, "[Kick]"FIREBRICK" Le joueur %s (%d) a été kické du serveur par %s [%s]"RED_4" [%s].", GetName(playerid), playerid, adminName, rank, reason);
  482. }
  483.  
  484. stock JailSQL(playerid, adminid, temps, const reason[])
  485. {
  486.     if(!IsPlayerConnected(playerid)) return SendNoCMessage(adminid, playerid);
  487.     new  date[6];
  488.     getdate(date[0], date[1], date[2]);
  489.     gettime(date[3], date[4], date[5]);
  490.     mysql_format(MySQL, query, sizeof(query), "INSERT INTO Jaillog VALUES(NULL, '%s', '%s', '%e', '%d', '%d-%d-%d %d:%d:%d')",
  491.     GetName(playerid), GetName(adminid), reason, temps, date[0], date[1], date[2], date[3], date[4], date[5]);
  492.     mysql_tquery(MySQL, query);
  493.     new rank[30];
  494.     rank = GetARank(playerid);
  495.     toupper(rank[0]);
  496.     PlayerInfo[playerid][pJailTime] = gettime() + temps*60;
  497.     PlayerInfo[playerid][pJailed] = true;
  498.     GetPlayerPos(playerid, PlayerInfo[playerid][pJail][0], PlayerInfo[playerid][pJail][1], PlayerInfo[playerid][pJail][2]);
  499.     SetPlayerPos(playerid, JAIL_X, JAIL_Y, JAIL_Z);
  500.     SetPlayerVirtualWorld(playerid, JAIL_VW);
  501.     SCMToAll(0xFF0000FF, "[Admin]"FIREBRICK" Le joueur %s (%d) a été emprisonné pour %d minutes par un Administrateur"RED_4" [%s].", GetName(playerid), playerid, temps, reason);
  502.     return ABroadCast(1, 0xFF0000FF, "[Jail]"FIREBRICK" Le joueur %s (%d) a été emprisonné pour %d minutes par %s [%s]"RED_4" [%s].", GetName(playerid), playerid, GetName(adminid), rank, reason);
  503. }
  504.  
  505. stock MuteSQL(playerid, adminid, temps, const reason[])
  506. {
  507.     if(!IsPlayerConnected(playerid)) return SendNoCMessage(adminid, playerid);
  508.     new  date[6];
  509.     getdate(date[0], date[1], date[2]);
  510.     gettime(date[3], date[4], date[5]);
  511.     mysql_format(MySQL, query, sizeof(query), "INSERT INTO Mutelog VALUES(NULL, '%s', '%s', '%e', '%d', '%d-%d-%d %d:%d:%d')",
  512.     GetName(playerid), GetName(adminid), reason, temps, date[0], date[1], date[2], date[3], date[4], date[5]);
  513.     mysql_tquery(MySQL, query);
  514.     new rank[30];
  515.     rank = GetARank(playerid);
  516.     toupper(rank[0]);
  517.     PlayerInfo[playerid][pMutetime] = gettime() + temps*60;
  518.     PlayerInfo[playerid][pMuted] = true;
  519.     SCMToAll(0xFF0000FF, "[Admin]"FIREBRICK" Le joueur %s (%d) a été mute pour %d minutes par un Administrateur"RED_4" [%s].", GetName(playerid), playerid, temps, reason);
  520.     return ABroadCast(1, 0xFF0000FF, "[Mute]"FIREBRICK" Le joueur %s (%d) a été mute pour %d minutes par %s [%s]"RED_4" [%s].", GetName(playerid), playerid, GetName(adminid), rank, reason);
  521. }
  522.  
  523. stock MakeAdminSQL(playerid, adminid, adminlevel)
  524. {
  525.     if(!IsPlayerConnected(playerid)) return SendNoCMessage(adminid, playerid);
  526.     new date[6];
  527.     getdate(date[0], date[1], date[2]);
  528.     gettime(date[3], date[4], date[5]);
  529.     mysql_format(MySQL, query, sizeof(query), "UPDATE Joueurs SET admin = '%d' WHERE nom = '%s'", adminlevel, GetName(playerid));
  530.     mysql_tquery(MySQL, query);
  531.     if(PlayerInfo[playerid][pAdmin] > adminlevel) SCM(playerid, -1, ""FIREBRICK"[Admin]"RED_3"Vous avez été promu membre du staff niveau %d par le head admin %s (%d) !", adminlevel, MakeRP(GetName(adminid)), adminid);
  532.     else SCM(playerid, -1, ""FIREBRICK"[Admin]"RED_3" Vous avez été downgrade au rang staff %d par le head admin %s (%d) !", adminlevel, MakeRP(GetName(adminid)), adminid);
  533.     PlayerInfo[playerid][pAdmin] = adminlevel;
  534.     return ABroadCast(2, -1, ""FIREBRICK"[Admin]"RED_3" Le rang staff de %s (%d) a été changé à %d par %s (%d).", MakeRP(GetName(playerid)), playerid, adminlevel, MakeRP(GetName(adminid)), adminid);
  535. }
  536.  
  537. stock KickWithMessage(playerid, const couleur, const reason[], va_args<>)
  538. {
  539.     new out[145];
  540.     va_format(out, sizeof(out), reason, va_start<3>);
  541.     SCM(playerid, couleur, out);
  542.     SetTimerEx("KickPublic", 1, false, "i", playerid);
  543.     return 1;
  544. }
  545.  
  546. stock SendClientMessageEx(playerid, colour, const fmat[],  va_args<>)
  547. {
  548.     new
  549.         str[145];
  550.     va_format(str, sizeof (str), fmat, va_start<3>);
  551.     return SendClientMessage(playerid, colour, str);
  552. }
  553.  
  554. stock SendClientMessageToAllEx(colour, const fmat[], va_args<>)
  555. {
  556.     new
  557.         str[145];
  558.     va_format(str, sizeof (str), fmat, va_start<2>);
  559.     return SendClientMessageToAll(colour, str);
  560. }
  561.  
  562. stock SendClientMessageToAllExept(exceptid, const couleur, const message[], va_args<>)
  563. {
  564.     if(!IsPlayerConnected(exceptid)) return 1;
  565.     new out[145];
  566.     va_format(out, sizeof(out), message, va_start<3>);
  567.     foreach(new p : Player)
  568.     {
  569.         if(p == exceptid) continue;
  570.         SCM(p, couleur, message);
  571.     }
  572.     return 1;
  573. }
  574.  
  575. stock GameTextForPlayerEx(playerid, const fmat[], time, style, va_args<>)
  576. {
  577.     new
  578.         str[145];
  579.     va_format(str, sizeof (str), fmat, va_start<4>);
  580.     return GameTextForPlayer(playerid, str, time, style);
  581. }
  582.  
  583. stock ABroadCast(level, const couleur, const string[], va_args<>)
  584. {
  585.     new out[145];
  586.     va_format(out, sizeof(out), string, va_start<3>);
  587.     foreach(new p : Player)
  588.     {
  589.         if(PlayerInfo[p][pAdmin] >= level) SCM(p, couleur, out);
  590.     }
  591.     return 1;
  592. }
  593.  
  594. stock SendNoAMessage(playerid)
  595. {
  596.     return SCM(playerid, 0xFF0000FF, "[Erreur]"FIREBRICK"Vous n'êtes pas autorisé à utiliser cette commande.");
  597. }
  598.  
  599. stock SendNoCMessage(playerid, ucid)
  600. {
  601.     return SCM(playerid, 0xFF0000FF, "[Erreur]{FFFFFF} Le joueur %d n'est pas connecté.", ucid);
  602. }
  603.  
  604. stock SendNoAdMessage(playerid)
  605. {
  606.     return SCM(playerid, 0xFF0000FF, "[Erreur]{FFFFFF} Vous ne pouvez pas sanctionner administrativement un membre du staff d'un rang plus haut que le vôtre !");
  607. }
  608.  
  609. stock GetName(playerid)
  610. {
  611.     new kfjqlkheizgfbsmlz[MAX_PLAYER_NAME];
  612.     GetPlayerName(playerid, kfjqlkheizgfbsmlz, sizeof(kfjqlkheizgfbsmlz));
  613.     return kfjqlkheizgfbsmlz;
  614. }
  615.  
  616. stock ProxDetector(Float:radi, playerid, const couleur, const message[], va_args<>)
  617. {
  618.     new out[145];
  619.     new Float:posi[3];
  620.     GetPlayerPos(playerid, posi[0], posi[1], posi[2]);
  621.     va_format(out, sizeof(out), message, va_start<4>);
  622.     foreach(new p : Player)
  623.     {
  624.         if(IsPlayerInRangeOfPoint(p, radi, posi[0], posi[1], posi[2]) && (GetPlayerVirtualWorld(playerid) == GetPlayerVirtualWorld(p))) SCM(p, couleur, out);
  625.     }
  626.     return 1;
  627. }
  628.  
  629. stock LoadPlayerData(playerid)
  630. {
  631.     mysql_format(MySQL, query, sizeof(query), "SELECT * FROM Joueurs WHERE nom = '%s'", GetName(playerid));
  632.     mysql_tquery(MySQL, query, "OnPlayerDataConnect", "i", playerid);
  633.     return 1;
  634. }
  635.  
  636. stock ProxDetectorEx(Float:radi, playerid, col1, col2, col3, col4, col5, const message[], va_args<>)
  637. {
  638.     new Float:posx, Float:posy, Float:posz;
  639.     new Float:oldposx, Float:oldposy, Float:oldposz;
  640.     new Float:tempposx, Float:tempposy, Float:tempposz;
  641.     new out[145];
  642.     va_format(out, sizeof(out), message, va_start<8>);
  643.     GetPlayerPos(playerid, oldposx, oldposy, oldposz);
  644.     foreach(new p : Player)
  645.     {
  646.         GetPlayerPos(p, posx, posy, posz);
  647.         tempposx = (oldposx -posx);
  648.         tempposy = (oldposy -posy);
  649.         tempposz = (oldposz -posz);
  650.         //printff("DEBUG: X:%f Y:%f Z:%f",posx,posy,posz);
  651.         if (((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16)))
  652.         {
  653.             SCM(p, col1, out);
  654.         }
  655.         else if (((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8)))
  656.         {
  657.             SCM(p, col2, out);
  658.         }
  659.         else if (((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4)))
  660.         {
  661.             SCM(p, col3, out);
  662.         }
  663.         else if (((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2)))
  664.         {
  665.             SCM(p, col4, out);
  666.         }
  667.         else if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
  668.         {
  669.             SCM(p, col5, out);
  670.         }
  671.     }
  672.     return 1;
  673. }
  674.  
  675. stock GetARank(playerid)
  676. {
  677.     new rank[30];
  678.     switch(PlayerInfo[playerid][pAdmin])
  679.     {
  680.         case GRADE_AD_1: rank = "joueur";
  681.         case GRADE_AD_1: rank = "modérateur";
  682.         case GRADE_AD_2..GRADE_AD_4: rank = "administrateur";
  683.         case GRADE_AD_5: rank = "administrateur général";
  684.         case GRADE_AD_6: rank = "super administrateur";
  685.         case GRADE_AD_7: rank = "administrateur suprême";
  686.         case GRADE_AD_8: rank = "head admin";
  687.     }
  688.     return rank;
  689. }
  690.  
  691. stock MakeRP(username[])
  692. {
  693.     if(cfind(username, '_')) cdel(username, '_');
  694.     return username;
  695. }
  696.  
  697. stock CheckValid(const text[])
  698. {
  699.     for(new t = 0; t < sizeof(InvalidWords); t++)
  700.     {
  701.         if(strfind(text, InvalidWords[t]) != -1) return false;
  702.     }
  703.     return true;
  704. }
  705.  
  706. stock DisconnectAll()
  707. {
  708.     foreach(new p : Player)
  709.     {
  710.         KickWithMessage(p, -1, "Vous avez été déconnecté suite à l'arrêt du serveur.");
  711.     }
  712.     return 1;
  713. }
  714.  
  715. stock SplitDateTime(datetime[], &annee, &mois, &jour, &heure, &minute, &seconde)
  716. {
  717.     new tmp[20];
  718.     strmid(tmp, datetime, 0, 4);
  719.     strdel(datetime, 0, 5);
  720.     annee = strval(tmp);
  721.    
  722.     strmid(tmp, datetime, 0, 2);
  723.     strdel(datetime, 0, 3);
  724.     mois = strval(tmp);
  725.    
  726.     strmid(tmp, datetime, 0, 2);
  727.     strdel(datetime, 0, 3);
  728.     jour = strval(tmp);
  729.    
  730.     strmid(tmp, datetime, 0, 2);
  731.     strdel(datetime, 0, 3);
  732.     heure = strval(tmp);
  733.    
  734.     strmid(tmp, datetime, 0, 2);
  735.     strdel(datetime, 0, 3);
  736.     minute = strval(tmp);
  737.    
  738.     strmid(tmp, datetime, 0, 2);
  739.     strdel(datetime, 0, 3);
  740.     seconde = strval(tmp);
  741. }
  742.  
  743. // SSCANF:vehicle - Y_Less | Modifié par S4T3K
  744.  
  745. stock GetVehicleModelIDFromName(const string[])
  746. {
  747.     if ('0' <= string[0] <= '9')
  748.     {
  749.         new
  750.             ret = strval(string);
  751.         if (400 <= ret <= 611)
  752.         {
  753.             return ret;
  754.         }
  755.     }
  756.     else if (!strcmp(string, "Landstalker")) return 400;
  757.     else if (!strcmp(string, "Bravura")) return 401;
  758.     else if (!strcmp(string, "Buffalo")) return 402;
  759.     else if (!strcmp(string, "Linerunner")) return 403;
  760.     else if (!strcmp(string, "Perenniel")) return 404;
  761.     else if (!strcmp(string, "Sentinel")) return 405;
  762.     else if (!strcmp(string, "Dumper")) return 406;
  763.     else if (!strcmp(string, "Firetruck")) return 407;
  764.     else if (!strcmp(string, "Trashmaster")) return 408;
  765.     else if (!strcmp(string, "Stretch")) return 409;
  766.     else if (!strcmp(string, "Manana")) return 410;
  767.     else if (!strcmp(string, "Infernus")) return 411;
  768.     else if (!strcmp(string, "Voodoo")) return 412;
  769.     else if (!strcmp(string, "Pony")) return 413;
  770.     else if (!strcmp(string, "Mule")) return 414;
  771.     else if (!strcmp(string, "Cheetah")) return 415;
  772.     else if (!strcmp(string, "Ambulance")) return 416;
  773.     else if (!strcmp(string, "Leviathan")) return 417;
  774.     else if (!strcmp(string, "Moonbeam")) return 418;
  775.     else if (!strcmp(string, "Esperanto")) return 419;
  776.     else if (!strcmp(string, "Taxi")) return 420;
  777.     else if (!strcmp(string, "Washington")) return 421;
  778.     else if (!strcmp(string, "Bobcat")) return 422;
  779.     else if (!strcmp(string, "Mr Whoopee")) return 423;
  780.     else if (!strcmp(string, "BF Injection")) return 424;
  781.     else if (!strcmp(string, "Hunter")) return 425;
  782.     else if (!strcmp(string, "Premier")) return 426;
  783.     else if (!strcmp(string, "Enforcer")) return 427;
  784.     else if (!strcmp(string, "Securicar")) return 428;
  785.     else if (!strcmp(string, "Banshee")) return 429;
  786.     else if (!strcmp(string, "Predator")) return 430;
  787.     else if (!strcmp(string, "Bus")) return 431;
  788.     else if (!strcmp(string, "Rhino")) return 432;
  789.     else if (!strcmp(string, "Barracks")) return 433;
  790.     else if (!strcmp(string, "Hotknife")) return 434;
  791.     else if (!strcmp(string, "Article Trailer")) return 435;
  792.     else if (!strcmp(string, "Previon")) return 436;
  793.     else if (!strcmp(string, "Coach")) return 437;
  794.     else if (!strcmp(string, "Cabbie")) return 438;
  795.     else if (!strcmp(string, "Stallion")) return 439;
  796.     else if (!strcmp(string, "Rumpo")) return 440;
  797.     else if (!strcmp(string, "RC Bandit")) return 441;
  798.     else if (!strcmp(string, "Romero")) return 442;
  799.     else if (!strcmp(string, "Packer")) return 443;
  800.     else if (!strcmp(string, "Monster")) return 444;
  801.     else if (!strcmp(string, "Admiral")) return 445;
  802.     else if (!strcmp(string, "Squallo")) return 446;
  803.     else if (!strcmp(string, "Seasparrow")) return 447;
  804.     else if (!strcmp(string, "Pizzaboy")) return 448;
  805.     else if (!strcmp(string, "Tram")) return 449;
  806.     else if (!strcmp(string, "Article Trailer 2")) return 450;
  807.     else if (!strcmp(string, "Turismo")) return 451;
  808.     else if (!strcmp(string, "Speeder")) return 452;
  809.     else if (!strcmp(string, "Reefer")) return 453;
  810.     else if (!strcmp(string, "Tropic")) return 454;
  811.     else if (!strcmp(string, "Flatbed")) return 455;
  812.     else if (!strcmp(string, "Yankee")) return 456;
  813.     else if (!strcmp(string, "Caddy")) return 457;
  814.     else if (!strcmp(string, "Solair")) return 458;
  815.     else if (!strcmp(string, "RC Van")) return 459;
  816.     else if (!strcmp(string, "Skimmer")) return 460;
  817.     else if (!strcmp(string, "PCJ-600")) return 461;
  818.     else if (!strcmp(string, "Faggio")) return 462;
  819.     else if (!strcmp(string, "Freeway")) return 463;
  820.     else if (!strcmp(string, "RC Baron")) return 464;
  821.     else if (!strcmp(string, "RC Raider")) return 465;
  822.     else if (!strcmp(string, "Glendale")) return 466;
  823.     else if (!strcmp(string, "Oceanic")) return 467;
  824.     else if (!strcmp(string, "Sanchez")) return 468;
  825.     else if (!strcmp(string, "Sparrow")) return 469;
  826.     else if (!strcmp(string, "Patriot")) return 470;
  827.     else if (!strcmp(string, "Quad")) return 471;
  828.     else if (!strcmp(string, "Coastguard")) return 472;
  829.     else if (!strcmp(string, "Dinghy")) return 473;
  830.     else if (!strcmp(string, "Hermes")) return 474;
  831.     else if (!strcmp(string, "Sabre")) return 475;
  832.     else if (!strcmp(string, "Rustler")) return 476;
  833.     else if (!strcmp(string, "ZR-350")) return 477;
  834.     else if (!strcmp(string, "Walton")) return 478;
  835.     else if (!strcmp(string, "Regina")) return 479;
  836.     else if (!strcmp(string, "Comet")) return 480;
  837.     else if (!strcmp(string, "BMX")) return 481;
  838.     else if (!strcmp(string, "Burrito")) return 482;
  839.     else if (!strcmp(string, "Camper")) return 483;
  840.     else if (!strcmp(string, "Marquis")) return 484;
  841.     else if (!strcmp(string, "Baggage")) return 485;
  842.     else if (!strcmp(string, "Dozer")) return 486;
  843.     else if (!strcmp(string, "Maverick")) return 487;
  844.     else if (!strcmp(string, "News Maverick")) return 488;
  845.     else if (!strcmp(string, "Rancher")) return 489;
  846.     else if (!strcmp(string, "FBI Rancher")) return 490;
  847.     else if (!strcmp(string, "Virgo")) return 491;
  848.     else if (!strcmp(string, "Greenwood")) return 492;
  849.     else if (!strcmp(string, "Jetmax")) return 493;
  850.     else if (!strcmp(string, "Hotring Racer")) return 494;
  851.     else if (!strcmp(string, "Sandking")) return 495;
  852.     else if (!strcmp(string, "Blista Compact")) return 496;
  853.     else if (!strcmp(string, "Police Maverick")) return 497;
  854.     else if (!strcmp(string, "Boxville")) return 498;
  855.     else if (!strcmp(string, "Benson")) return 499;
  856.     else if (!strcmp(string, "Mesa")) return 500;
  857.     else if (!strcmp(string, "RC Goblin")) return 501;
  858.     else if (!strcmp(string, "Hotring Racer")) return 502;
  859.     else if (!strcmp(string, "Hotring Racer")) return 503;
  860.     else if (!strcmp(string, "Bloodring Banger")) return 504;
  861.     else if (!strcmp(string, "Rancher")) return 505;
  862.     else if (!strcmp(string, "Super GT")) return 506;
  863.     else if (!strcmp(string, "Elegant")) return 507;
  864.     else if (!strcmp(string, "Journey")) return 508;
  865.     else if (!strcmp(string, "Bike")) return 509;
  866.     else if (!strcmp(string, "VTT")) return 510;
  867.     else if (!strcmp(string, "Beagle")) return 511;
  868.     else if (!strcmp(string, "Cropduster")) return 512;
  869.     else if (!strcmp(string, "Stuntplane")) return 513;
  870.     else if (!strcmp(string, "Tanker")) return 514;
  871.     else if (!strcmp(string, "Roadtrain")) return 515;
  872.     else if (!strcmp(string, "Nebula")) return 516;
  873.     else if (!strcmp(string, "Majestic")) return 517;
  874.     else if (!strcmp(string, "Buccaneer")) return 518;
  875.     else if (!strcmp(string, "Shamal")) return 519;
  876.     else if (!strcmp(string, "Hydra")) return 520;
  877.     else if (!strcmp(string, "FCR-900")) return 521;
  878.     else if (!strcmp(string, "NRG-500")) return 522;
  879.     else if (!strcmp(string, "HPV1000")) return 523;
  880.     else if (!strcmp(string, "Bétonnière")) return 524;
  881.     else if (!strcmp(string, "Towtruck")) return 525;
  882.     else if (!strcmp(string, "Fortune")) return 526;
  883.     else if (!strcmp(string, "Cadrona")) return 527;
  884.     else if (!strcmp(string, "FBI Truck")) return 528;
  885.     else if (!strcmp(string, "Willard")) return 529;
  886.     else if (!strcmp(string, "Forklift")) return 530;
  887.     else if (!strcmp(string, "Tractor")) return 531;
  888.     else if (!strcmp(string, "Combine Harvester")) return 532;
  889.     else if (!strcmp(string, "Feltzer")) return 533;
  890.     else if (!strcmp(string, "Remington")) return 534;
  891.     else if (!strcmp(string, "Slamvan")) return 535;
  892.     else if (!strcmp(string, "Blade")) return 536;
  893.     else if (!strcmp(string, "Freight (Train)")) return 537;
  894.     else if (!strcmp(string, "Brownstreak (Train)")) return 538;
  895.     else if (!strcmp(string, "Vortex")) return 539;
  896.     else if (!strcmp(string, "Vincent")) return 540;
  897.     else if (!strcmp(string, "Bullet")) return 541;
  898.     else if (!strcmp(string, "Clover")) return 542;
  899.     else if (!strcmp(string, "Sadler")) return 543;
  900.     else if (!strcmp(string, "Firetruck LA")) return 544;
  901.     else if (!strcmp(string, "Hustler")) return 545;
  902.     else if (!strcmp(string, "Intruder")) return 546;
  903.     else if (!strcmp(string, "Primo")) return 547;
  904.     else if (!strcmp(string, "Cargobob")) return 548;
  905.     else if (!strcmp(string, "Tampa")) return 549;
  906.     else if (!strcmp(string, "Sunrise")) return 550;
  907.     else if (!strcmp(string, "Merit")) return 551;
  908.     else if (!strcmp(string, "Utility Van")) return 552;
  909.     else if (!strcmp(string, "Nevada")) return 553;
  910.     else if (!strcmp(string, "Yosemite")) return 554;
  911.     else if (!strcmp(string, "Windsor")) return 555;
  912.     else if (!strcmp(string, "Monster \"A\"")) return 556;
  913.     else if (!strcmp(string, "Monster \"B\"")) return 557;
  914.     else if (!strcmp(string, "Uranus")) return 558;
  915.     else if (!strcmp(string, "Jester")) return 559;
  916.     else if (!strcmp(string, "Sultan")) return 560;
  917.     else if (!strcmp(string, "Stratum")) return 561;
  918.     else if (!strcmp(string, "Elegy")) return 562;
  919.     else if (!strcmp(string, "Raindance")) return 563;
  920.     else if (!strcmp(string, "RC Tiger")) return 564;
  921.     else if (!strcmp(string, "Flash")) return 565;
  922.     else if (!strcmp(string, "Tahoma")) return 566;
  923.     else if (!strcmp(string, "Savanna")) return 567;
  924.     else if (!strcmp(string, "Bandito")) return 568;
  925.     else if (!strcmp(string, "Freight Flat Trailer (Train)")) return 569;
  926.     else if (!strcmp(string, "Streak Trailer (Train)")) return 570;
  927.     else if (!strcmp(string, "Kart")) return 571;
  928.     else if (!strcmp(string, "Mower")) return 572;
  929.     else if (!strcmp(string, "Dune")) return 573;
  930.     else if (!strcmp(string, "Sweeper")) return 574;
  931.     else if (!strcmp(string, "Broadway")) return 575;
  932.     else if (!strcmp(string, "Tornado")) return 576;
  933.     else if (!strcmp(string, "AT400")) return 577;
  934.     else if (!strcmp(string, "DFT-30")) return 578;
  935.     else if (!strcmp(string, "Huntley")) return 579;
  936.     else if (!strcmp(string, "Stafford")) return 580;
  937.     else if (!strcmp(string, "BF-400")) return 581;
  938.     else if (!strcmp(string, "Newsvan")) return 582;
  939.     else if (!strcmp(string, "Tug")) return 583;
  940.     else if (!strcmp(string, "Petrol Trailer")) return 584;
  941.     else if (!strcmp(string, "Emperor")) return 585;
  942.     else if (!strcmp(string, "Wayfarer")) return 586;
  943.     else if (!strcmp(string, "Euros")) return 587;
  944.     else if (!strcmp(string, "Hotdog")) return 588;
  945.     else if (!strcmp(string, "Club")) return 589;
  946.     else if (!strcmp(string, "Freight Box Trailer (Train)")) return 590;
  947.     else if (!strcmp(string, "Article Trailer 3")) return 591;
  948.     else if (!strcmp(string, "Andromada")) return 592;
  949.     else if (!strcmp(string, "Dodo")) return 593;
  950.     else if (!strcmp(string, "RC Cam")) return 594;
  951.     else if (!strcmp(string, "Launch")) return 595;
  952.     else if (!strcmp(string, "LSPD")) return 596;
  953.     else if (!strcmp(string, "SFPD")) return 597;
  954.     else if (!strcmp(string, "LVPD")) return 598;
  955.     else if (!strcmp(string, "Police Ranger")) return 599;
  956.     else if (!strcmp(string, "Picador")) return 600;
  957.     else if (!strcmp(string, "SWAT")) return 601;
  958.     else if (!strcmp(string, "Alpha")) return 602;
  959.     else if (!strcmp(string, "Phoenix")) return 603;
  960.     else if (!strcmp(string, "Glendale Shit")) return 604;
  961.     else if (!strcmp(string, "Sadler Shit")) return 605;
  962.     else if (!strcmp(string, "Remorque à baggages \"A\"")) return 606;
  963.     else if (!strcmp(string, "Remorque à baggages \"B\"")) return 607;
  964.     else if (!strcmp(string, "Tug Stairs Trailer")) return 608;
  965.     else if (!strcmp(string, "Boxville")) return 609;
  966.     else if (!strcmp(string, "Farm Trailer")) return 610;
  967.     else if (!strcmp(string, "Utility Trailer")) return 611;
  968.     return -1;
  969. }
  970.  
  971. stock Unjail(playerid)
  972. {
  973.     PlayerInfo[playerid][pJailTime] = -1;
  974.     PlayerInfo[playerid][pJailed] = false;
  975.     SetPlayerPos(playerid, PlayerInfo[playerid][pJail][0], PlayerInfo[playerid][pJail][1], PlayerInfo[playerid][pJail][2]);
  976.     SetPlayerVirtualWorld(playerid, 0);
  977.     return SCM(playerid, 0xFF0000FF, "[Admin]"FIREBRICK" Tu as purgé ta peine de jail OOC. Ne reproduis plus d'actes NoRP/interdits si tu ne veux pas y retourner !");
  978. }
  979.  
  980. stock Unmute(playerid) { PlayerInfo[playerid][pMutetime] = -1; PlayerInfo[playerid][pMuted] = false; return 1; }
  981.  
  982. stock UpdateTime(playerid)
  983. {
  984.     GameTextForPlayer(playerid, "~p~Il te reste encore %d secondes de prison !", 500, 1, PlayerInfo[playerid][pJailTime]-gettime());
  985.     return 1;
  986. }
  987.  
  988.  
  989.  
  990.  
  991. forward OnBanInfoFound(playerid);
  992. forward OnBanInfoConnect(playerid);
  993. forward OnUnbanDone(playerid, type, const username[], const banid, const ip[]);
  994. forward KickPublic(playerid);
  995. forward SavePlayerData();
  996. forward OnPlayerDataConnect(playerid);
  997.  
  998. public OnBanInfoFound(playerid)
  999. {
  1000.     if(cache_num_rows() < 1) return 1;
  1001.     m_banid = cache_get_field_content_int(0, "pid", MySQL);
  1002.     return 1;
  1003. }
  1004.  
  1005. public OnBanInfoConnect(playerid)
  1006. {
  1007.     if(cache_num_rows() > 0)
  1008.     {
  1009.         new bool:temp, temp1, heures, banid, tdate[25], date[6];
  1010.         cache_get_field_content(0, "bdate", tdate);
  1011.         cache_get_field_content(0, "raison", raison);
  1012.         SplitDateTime(tdate, date[0], date[1], date[2], date[3], date[4], date[5]);
  1013.         banid = cache_get_field_content_int(0, "id", MySQL);
  1014.         temp1 = cache_get_field_content_int(0, "temporaire", MySQL);
  1015.         if(temp1 == 0) temp = false;
  1016.         else temp = true;
  1017.         heures = cache_get_field_content_int(0, "heures", MySQL);
  1018.         if(!temp) return KickWithMessage(playerid, 0xFF0000FF, "[Ban]"FIREBRICK" Vous êtes actuellement banni depuis le "RED_4"%d/%d/%d (%dh%d)"FIREBRICK" pour "RED_4"[%s]."RED_4"[Ban pid : %d]",
  1019.         date[2], date[1], date[0], date[3], date[4], raison, banid);
  1020.         else return KickWithMessage(playerid, 0xFF0000FF, "[Ban]"FIREBRICK" Vous êtes actuellement banni depuis le "RED_4"%d/%d/%d (%dh%d)"FIREBRICK" pour "RED_4"[%s]"FIREBRICK". Il vous reste encore "RED_4"%d"FIREBRICK" heures de banissement."RED_4"[Ban pid : %d]",
  1021.         date[2], date[1], date[0], date[3], date[4], raison, heures, banid);
  1022.     }
  1023.     return 1;
  1024. }
  1025.  
  1026. public OnUnbanDone(playerid, type, const username[], const banid, const ip[])
  1027. {
  1028.     switch(type)
  1029.     {
  1030.         case 1:
  1031.         {
  1032.             if(cache_affected_rows() > 0) return SCM(playerid, 0xFF0000FF, "[Unban]"FIREBRICK" Tu as débanni le compte %s. Le joueur peut dès à présent se reconnecter.", username);
  1033.             else return SCM(playerid, 0xFF0000FF, "[Unban]"FIREBRICK" Il y a eu un problème lors du déban du joueur. Veuillez réessayer. (Compte [%s] peut-être non banni)", username);
  1034.         }
  1035.         case 2:
  1036.         {
  1037.             if(cache_affected_rows() > 0) return SCM(playerid, 0xFF0000FF, "[Unban]"FIREBRICK" Tu as supprimé le ban ID %d. Le joueur affecté par ce banissement peut dès à présent se reconnecter.", banid);
  1038.             else return SCM(playerid, 0xFF0000FF, "[Unban]"FIREBRICK" Il y a eu un problème lors du déban du joueur. Veuillez réessayer. (Peut-être aucun ban correspondant à cet pid [%d])", banid);
  1039.         }
  1040.         case 3:
  1041.         {
  1042.             if(cache_affected_rows() > 0) return SCM(playerid, 0xFF0000FF, "[Unban]"FIREBRICK" Tu as débanni l'IP '%s'. Le(s) joueur(s) affecté(s) par ce banissement peut(vent) dès à présent se reconnecter !", ip);
  1043.             else return SCM(playerid, 0xFF0000FF, "[Unban]"FIREBRICK" Il y a eu un problème lors du déban du joueur. Veuillez réessayer. (IP [%s] peut-être non bannie)", ip);
  1044.         }
  1045.     }
  1046.     return 1;
  1047. }
  1048.  
  1049. public KickPublic(playerid) { Kick(playerid); return 1; }
  1050.  
  1051. public SavePlayerData()
  1052. {
  1053.     new Float:pos[3];
  1054.     foreach(new p : Player)
  1055.     {
  1056.         GetPlayerPos(p, pos[0], pos[1], pos[2]);
  1057.         mysql_format(MySQL, query, sizeof(query), "UPDATE Joueurs SET niveau = '%d', admin = '%d', email = '%s', hban = '%d', jailtime = '%d', jailx = '%f', jaily = '%f', jailz = '%f', mutetime = '%d', lastx = '%f', lasty = '%f', lastz = '%f', immun = '%d' WHERE nom = '%s'",
  1058.             PlayerInfo[p][pLevel], PlayerInfo[p][pAdmin], PlayerInfo[p][pHBan], PlayerInfo[p][pJailTime], PlayerInfo[p][pJail][0], PlayerInfo[p][pJail][1], PlayerInfo[p][pJail][2], PlayerInfo[p][pMutetime], pos[0], pos[1], pos[2], PlayerInfo[p][pImmun], GetName(p));
  1059.         mysql_tquery(MySQL, query);
  1060.     }
  1061.     return 1;
  1062. }
  1063.  
  1064. public OnPlayerDataConnect(playerid)
  1065. {
  1066.     if(cache_num_rows() > 0)
  1067.     {
  1068.         printf("num rows superior to 0");
  1069.         PlayerInfo[playerid][pLevel] = cache_get_field_content_int(0, "niveau", MySQL);
  1070.         PlayerInfo[playerid][pAdmin] = cache_get_field_content_int(0, "admin", MySQL);
  1071.         PlayerInfo[playerid][pHBan] = cache_get_field_content_int(0, "hban", MySQL);
  1072.         PlayerInfo[playerid][pJailTime] = cache_get_field_content_int(0, "jailtime", MySQL);
  1073.         PlayerInfo[playerid][pJail][0] = cache_get_field_content_float(0, "jailx", MySQL);
  1074.         PlayerInfo[playerid][pJail][1] = cache_get_field_content_float(0, "jaily", MySQL);
  1075.         PlayerInfo[playerid][pJail][2] = cache_get_field_content_float(0, "jailz", MySQL);
  1076.         PlayerInfo[playerid][pLast][0] = cache_get_field_content_float(0, "lastx", MySQL);
  1077.         PlayerInfo[playerid][pLast][1] = cache_get_field_content_float(0, "lasty", MySQL);
  1078.         PlayerInfo[playerid][pLast][2] = cache_get_field_content_float(0, "lastz", MySQL);
  1079.         PlayerInfo[playerid][pImmun] = cache_get_field_content_int(0, "immun", MySQL);
  1080.         PlayerInfo[playerid][pImmunt] = cache_get_field_content_int(0, "immuntype", MySQL);
  1081.         // Dialog de connexion etc etc
  1082.     }
  1083.     /*else
  1084.     {
  1085.         // Dialog d'enregistrement etc etc
  1086.     }*/
  1087.     return 1;
  1088. }
  1089.  
  1090.  
  1091.  
  1092.  
  1093. /*
  1094.    _____          __  .__           .__                   __  
  1095.   /  _  \   _____/  |_|__|     ____ |  |__   ____ _____ _/  |_
  1096.  /  /_\  \ /    \   __\  |   _/ ___\|  |  \_/ __ \\__  \\   __\
  1097. /    |    \   |  \  | |  |   \  \___|   Y  \  ___/ / __ \|  |  
  1098. \____|__  /___|  /__| |__|    \___  >___|  /\___  >____  /__|  
  1099.         \/     \/                 \/     \/     \/     \/      
  1100.  
  1101. */
  1102.  
  1103. public OnPlayerAntiReload(playerid, weaponid)
  1104. {
  1105.     if(PlayerInfo[playerid][pAdmin] < 1) return 1;
  1106.     BanSQL(playerid, -2, "Cheat - Anti reload");
  1107.     return 1;
  1108. }
  1109.  
  1110. public OnPlayerFall(playerid, Float:height, Float:damage) { Enable_safe_health(playerid); return 1; }
  1111.  
  1112. stock AC_SetPlayerHealth(playerid, Float:health) { Enable_safe_health(playerid); SetPlayerHealth(playerid, health); return 1; }
  1113. stock AC_SetPlayerArmour(playerid, Float:armour) { Enable_safe_armour(playerid); SetPlayerArmour(playerid, armour); return 1; }
  1114. stock AC_GivePlayerWeapon(playerid, weaponid, ammo) { Enable_safe_weapon(playerid); GivePlayerWeapon(playerid, weaponid, ammo); return 1; }
  1115. stock AC_ResetPlayerWeapons(playerid) { Enable_safe_weapon(playerid); ResetPlayerWeapons(playerid); return 1; }
  1116. stock AC_GivePlayerMoney(playerid, money) { Enable_safe_money(playerid); GivePlayerMoney(playerid,money); return 1; }
  1117. stock AC_ResetPlayerMoney(playerid) { Enable_safe_money(playerid); ResetPlayerMoney(playerid); return 1; }
  1118. stock AC_AddVehicleComponent(vehicleid, componentid)
  1119. {
  1120.     foreach(new p : Player)
  1121.     {
  1122.         if(IsPlayerInAnyVehicle(p))
  1123.         {
  1124.             if(GetPlayerVehicleID(p) == vehicleid) Enable_safe_tuning(p);
  1125.         }
  1126.     }
  1127.     AddVehicleComponent(vehicleid, componentid);
  1128.     return 1;
  1129. }
  1130.  
  1131. stock Enable_safe_health(playerid, temps=CHEAT_RANGE)
  1132. {
  1133.     PlayerInfo[playerid][cVie] = true;
  1134.     SetTimerEx("stopVie", temps, false, "i", playerid);
  1135.     return 1;
  1136. }
  1137.  
  1138. stock Enable_safe_armour(playerid, temps=CHEAT_RANGE)
  1139. {
  1140.     PlayerInfo[playerid][cArmure] = true;
  1141.     SetTimerEx("stopArmure", temps, false, "i", playerid);
  1142.     return 1;
  1143. }
  1144.  
  1145. stock Enable_safe_weapon(playerid, temps=CHEAT_RANGE)
  1146. {
  1147.     PlayerInfo[playerid][cArmes] = true;
  1148.     SetTimerEx("stopArmes", temps, false, "i", playerid);
  1149.     return 1;
  1150. }
  1151.  
  1152. stock Enable_safe_money(playerid, temps=CHEAT_RANGE)
  1153. {
  1154.     PlayerInfo[playerid][cArmes] = true;
  1155.     SetTimerEx("stopArgent", temps, false, "i", playerid);
  1156.     return 1;
  1157. }
  1158.  
  1159. stock Enable_safe_tuning(playerid, temps=CHEAT_RANGE)
  1160. {
  1161.     PlayerInfo[playerid][cTuning] = true;
  1162.     SetTimerEx("stopTuning", temps, false, "i", playerid);
  1163.     return 1;
  1164. }
  1165.  
  1166. forward stopVie(playerid);
  1167. forward stopArmure(playerid);
  1168. forward stopArmes(playerid);
  1169. forward stopArgent(playerid);
  1170. forward stopTuning(playerid);
  1171.  
  1172. public stopVie(playerid) { PlayerInfo[playerid][cVie] = false; return 1; }
  1173. public stopArmure(playerid) { PlayerInfo[playerid][cArmure] = false; return 1; }
  1174. public stopArmes(playerid) { PlayerInfo[playerid][cArmes] = false; return 1; }
  1175. public stopArgent(playerid) { PlayerInfo[playerid][cArgent] = false; return 1; }
  1176. public stopTuning(playerid) { PlayerInfo[playerid][cTuning] = false; return 1; }
  1177.  
  1178.  
  1179. /*
  1180.  
  1181. _________                                           .___            
  1182. \_   ___ \  ____   _____   _____ _____    ____    __| _/____   ______
  1183. /    \  \/ /  _ \ /     \ /     \\__  \  /    \  / __ |/ __ \ /  ___/
  1184. \     \___(  <_> )  Y Y  \  Y Y  \/ __ \|   |  \/ /_/ \  ___/ \___ \
  1185.  \______  /\____/|__|_|  /__|_|  (____  /___|  /\____ |\___  >____  >
  1186.         \/             \/      \/     \/     \/      \/    \/     \/
  1187.  
  1188. */
  1189.  
  1190. CMD:credits(playerid, params[])
  1191. {
  1192.     return ShowPlayerDialog(playerid, D_CREDITS, DIALOG_STYLE_MSGBOX, "Crédits", "{9ACD32}S4T3K/Soufiane{FFFFFF} : Gamemode\n{9ACD32}David Montana{FFFFFF} : Idées/Mapping\n{9ACD32}BlueG/Maddinat0r{FFFFFF} : MySQL plugin\n{9ACD32}ZeeX{FFFFFF} : ZCMD/Fix sur y_va\n{9ACD32}Y_Less{FFFFFF} : YSI/sscanf/Whirlpool\n{9ACD32}Slice{FFFFFF} : Mailer\n{9ACD32}Emmet_{FFFFFF} : Nouvelles callbacks\n{9ACD32}Incognito{FFFFFF} : Streamer\n{9ACD32}Mellnik{FFFFFF} : Hash plugin\n{9ACD32}Team SA-MP{FFFFFF} : SAMP\n", "OK", "");
  1193. }
  1194.  
  1195. CMD:cmds(playerid, params[])
  1196. {
  1197.     new out[145];
  1198.     format(out, sizeof(out), "{D15401}[Général]{FFFFFF} • /me, /do, /b, /credits, /question, /comeback, /admins");
  1199.     return ShowPlayerDialog(playerid, DIALOG_PCOMMANDS, DIALOG_STYLE_MSGBOX, "Commandes", out, "Ok", "");
  1200. }
  1201.  
  1202. CMD:acmds(playerid, params[])
  1203. {
  1204.     if(PlayerInfo[playerid][pAdmin] < 1) return SendNoAMessage(playerid);
  1205.     new out[512];
  1206.     strcat(out, ""COULEUR_AD_1"[Modérateur]{FFFFFF} /a (raccourci : #), /kick, /jail, /fban, /ban, /mute, /unmute, /unjail, /aduty, /spec\n\n\n");
  1207.     if(PlayerInfo[playerid][pAdmin] == GRADE_AD_1) return ShowPlayerDialog(playerid, DIALOG_ACOMMANDS, DIALOG_STYLE_MSGBOX, "Commandes admin", out, "Ok", "");
  1208.     else if(PlayerInfo[playerid][pAdmin] >= GRADE_AD_2) strcat(out, ""COULEUR_AD_2"[Administrateur niveau 2]{FFFFFF} • /unban /unbanip, /unbanid\n\n\n");
  1209.     else if(PlayerInfo[playerid][pAdmin] >= GRADE_AD_3) strcat(out, ""COULEUR_AD_3"[Administrateur niveau 3]{FFFFFF} [Rien pour le moment]\n\n\n");
  1210.     else if(PlayerInfo[playerid][pAdmin] >= GRADE_AD_4) strcat(out, ""COULEUR_AD_4"[Administrateur niveau 4]{FFFFFF} • /veh\n\n\n");
  1211.     else if(PlayerInfo[playerid][pAdmin] >= GRADE_AD_5) strcat(out, ""COULEUR_AD_5"[Administrateur Général]{FFFFFF} [Rien pour le moment]\n\n\n");
  1212.     else if(PlayerInfo[playerid][pAdmin] >= GRADE_AD_6) strcat(out, ""COULEUR_AD_6"[Super Administrateur]{FFFFFF} [Rien pour le moment]\n\n\n");
  1213.     else if(PlayerInfo[playerid][pAdmin] >= GRADE_AD_7) strcat(out, ""COULEUR_AD_7"[Administrateur suprême]{FFFFFF} [Rien pour le moment]\n\n\n");
  1214.     else if(PlayerInfo[playerid][pAdmin] >= GRADE_AD_8) strcat(out, ""COULEUR_AD_8"[Head administrator]{FFFFFF} • /makeadmin");
  1215.     return ShowPlayerDialog(playerid, DIALOG_ACOMMANDS, DIALOG_STYLE_MSGBOX, "Commandes admin", out, "Ok", "");
  1216. }
  1217.  
  1218. CMD:me(playerid, params[])
  1219. {
  1220.     if(isnull(params)) return SCM(playerid, SYNTAX, "[USAGE]{FFFFFF} /me [Action du personnage]");
  1221.     return ProxDetector(15.0, playerid, COULEUR_ME, "* %s %s", GetName(playerid), params);
  1222. }
  1223.  
  1224. CMD:action(playerid, params[]) { return cmd_me(playerid, params); }
  1225.  
  1226. CMD:do(playerid, params[])
  1227. {
  1228.     if(isnull(params)) return SCM(playerid, SYNTAX, "[USAGE]{FFFFFF} /do [Description]");
  1229.     return ProxDetector(15.0, playerid, COULEUR_DO, "* %s [%s]", params, GetName(playerid));
  1230. }
  1231.  
  1232. CMD:description(playerid, params[]) { return cmd_do(playerid, params); }
  1233. CMD:desc(playerid, params[]) { return cmd_do(playerid, params); }
  1234.  
  1235. CMD:xgoto(playerid, params[])
  1236. {
  1237.     new Float:pos[3];
  1238.     if(PlayerInfo[playerid][pAdmin] < 4) return 1;
  1239.     if(sscanf(params, "fff", pos[0], pos[1], pos[2])) return SCM(playerid, 0xFF0000FF, "[ADMIN]{FFFFFF} Mauvaise syntaxe");
  1240.     SetPlayerPos(playerid, pos[0], pos[1], pos[2]);
  1241.     return 1;
  1242. }
  1243.  
  1244. CMD:skill(playerid, params[])
  1245. {
  1246.     SetPlayerSkillLevel(playerid, WEAPONSKILL_PISTOL, 999);
  1247.     SetPlayerSkillLevel(playerid, WEAPONSKILL_PISTOL_SILENCED, 999);
  1248.     SetPlayerSkillLevel(playerid, WEAPONSKILL_DESERT_EAGLE, 999);
  1249.     SetPlayerSkillLevel(playerid, WEAPONSKILL_SHOTGUN, 999);
  1250.     SetPlayerSkillLevel(playerid, WEAPONSKILL_SAWNOFF_SHOTGUN, 999);
  1251.     SetPlayerSkillLevel(playerid, WEAPONSKILL_SPAS12_SHOTGUN, 999);
  1252.     SetPlayerSkillLevel(playerid, WEAPONSKILL_MICRO_UZI, 999);
  1253.     SetPlayerSkillLevel(playerid, WEAPONSKILL_MP5, 999);
  1254.     SetPlayerSkillLevel(playerid, WEAPONSKILL_M4, 999);
  1255.     SetPlayerSkillLevel(playerid, WEAPONSKILL_AK47, 999);
  1256.     SetPlayerSkillLevel(playerid, WEAPONSKILL_SNIPERRIFLE, 999);
  1257.     return 1;
  1258. }
  1259.  
  1260. CMD:armes(playerid, params[])
  1261. {
  1262.     new arme, muni;
  1263.     if(sscanf(params, "dD", arme, muni)) return SCM(playerid, 0xFF0000FF, "[ADMIN]{FFFFFF} Mauvaise syntaxe");
  1264.     if(muni == 0) muni = 99999;
  1265.     GivePlayerWeapon(playerid, arme, muni);
  1266.     return 1;
  1267. }
  1268.  
  1269. CMD:question(playerid, params[])
  1270. {
  1271.     if(isnull(params)) return SCM(playerid, SYNTAX, "[USAGE]{FFFFFF} /irc [Message au staff]");
  1272.     if(PlayerInfo[playerid][pNextq] > gettime()) return SCM(playerid, 0x9ACD32FF, "[Rapport]{FFFFFF} Veuillez patienter 30 secondes entre chaque rapport.");
  1273.     PlayerInfo[playerid][pNextq] = gettime() + 30;
  1274.     return ABroadCast(1, -1, ""SPRING_GREEN_4"[IRC]"OLIVE_DRAB_4"[%s] [%s]", MakeRP(GetName(playerid)), params), SCM(playerid, -1, ""SPRING_GREEN_4"[IRC]"OLIVE_DRAB_4"[%s]");
  1275. }
  1276.  
  1277. CMD:rapport(playerid, params[]) { return cmd_question(playerid, params); }
  1278. CMD:irc(playerid, params[]) { return cmd_question(playerid, params); }
  1279. CMD:report(playerid, params[]) { return cmd_question(playerid, params); }
  1280.  
  1281. CMD:b(playerid, params[])
  1282. {
  1283.     if(isnull(params)) return SCM(playerid, SYNTAX, "[USAGE]{FFFFFF} /b [Message OOC]");
  1284.     if(!CheckValid(params)) ABroadCast(1, 0xFF0000FF, "[Invalide]"FIREBRICK" %s (%d) a prononcé un mot jugé invalide par l'anti-pub.", GetName(playerid), playerid);
  1285.     return ProxDetectorEx(20.0, playerid, NORMAL_TEXT_1, NORMAL_TEXT_2, NORMAL_TEXT_3, NORMAL_TEXT_4, NORMAL_TEXT_5, "[HRP] [%s : %s]", MakeRP(GetName(playerid)), params);
  1286. }
  1287.  
  1288. CMD:oloc(playerid, params[]) { return cmd_b(playerid, params); }
  1289.  
  1290. CMD:ban(playerid, params[])
  1291. {
  1292.     if(sscanf(params, "us[145]", pid, raison)) return SCM(playerid, SYNTAX, "[USAGE]{FFFFFF} /ban [Joueur] [Raison]");
  1293.     if(PlayerInfo[playerid][pAdmin] < 1) return SendNoAMessage(playerid);
  1294.     if(PlayerInfo[pid][pAdmin] > PlayerInfo[playerid][pAdmin]) return SendNoAdMessage(playerid);
  1295.     BanSQL(pid, playerid, raison);
  1296.     return 1;
  1297. }
  1298.  
  1299. CMD:fban(playerid, params[])
  1300. {
  1301.     if(sscanf(params, "us[145]", pid, raison)) return SCM(playerid, SYNTAX, "[USAGE]{FFFFFF} /ban [Joueur] [Raison]");
  1302.     if(PlayerInfo[playerid][pAdmin] < 1) return SendNoAMessage(playerid);
  1303.     return SCMToAll(0xFF0000FF, "[Admin]"FIREBRICK" Le joueur %s (%d) a été banni de façon permanente par un Administrateur"RED_4" [%s].",
  1304.         GetName(playerid), playerid, raison);
  1305. }
  1306.  
  1307. CMD:hban(playerid, params[])
  1308. {
  1309.     new heures;
  1310.     if(sscanf(params, "uds[145]", pid, heures, raison)) return SCM(playerid, SYNTAX, "[USAGE]{FFFFFF} /banh [Joueur] [Heures] [Raison]");
  1311.     if(PlayerInfo[playerid][pAdmin] < 1) return SendNoAMessage(playerid);
  1312.     if(PlayerInfo[pid][pAdmin] > PlayerInfo[playerid][pAdmin]) return SendNoAdMessage(playerid);
  1313.     BanSQL(pid, playerid, raison, true, heures);
  1314.     return 1;
  1315. }
  1316.  
  1317. CMD:immun(playerid, params[])
  1318. {
  1319.     if(PlayerInfo[playerid][pAdmin] < 9999) return 0;
  1320.     new type[16], temps, id;
  1321.     if(sscanf(params, "us[16]d", id, type, temps)) return SCM(playerid, SYNTAX, "[USAGE]{FFFFFF} /immun [Joueur] [Type] [Temps (minutes)]\n\r{33CCFF}[Types]{FFFFFF} argent, vie, armure, tuning, armes, tous");
  1322.     temps *= 60;
  1323.     if(!strcmp(type, "argent", true))
  1324.     {
  1325.         PlayerInfo[id][pImmunt] = 1;
  1326.         PlayerInfo[id][pImmun] = gettime() + temps;
  1327.         return Enable_safe_money(playerid, temps*1000);
  1328.     }
  1329.     else if(!strcmp(type, "vie", true))
  1330.     {
  1331.         PlayerInfo[id][pImmunt] = 2;
  1332.         PlayerInfo[id][pImmun] = gettime() + temps;
  1333.         return Enable_safe_health(playerid, temps*1000);
  1334.     }
  1335.     else if(!strcmp(type, "armure", true))
  1336.     {
  1337.         PlayerInfo[id][pImmunt] = 3;
  1338.         PlayerInfo[id][pImmun] = gettime() + temps;
  1339.         return Enable_safe_armour(playerid, temps*1000);
  1340.     }
  1341.     else if(!strcmp(type, "tuning", true))
  1342.     {
  1343.         PlayerInfo[id][pImmunt] = 4;
  1344.         PlayerInfo[id][pImmun] = gettime() + temps;
  1345.         return Enable_safe_tuning(playerid, temps*1000);
  1346.     }
  1347.     else if(!strcmp(type, "armes", true))
  1348.     {
  1349.         PlayerInfo[id][pImmunt] = 5;
  1350.         PlayerInfo[id][pImmun] = gettime() + temps;
  1351.         return Enable_safe_weapon(playerid, temps*1000);
  1352.     }
  1353.     else if(!strcmp(type, "all", true) || !strcmp(type, "tous", true))
  1354.     {
  1355.         PlayerInfo[id][pImmunt] = 6;
  1356.         PlayerInfo[playerid][pImmun] = gettime() + temps;
  1357.         Enable_safe_money(playerid, temps*1000);
  1358.         Enable_safe_health(playerid, temps*1000);
  1359.         Enable_safe_armour(playerid, temps*1000);
  1360.         Enable_safe_tuning(playerid, temps*1000);
  1361.         return Enable_safe_weapon(playerid, temps*1000);
  1362.     }
  1363.     else return SCM(playerid, SYNTAX, "[USAGE]{FFFFFF} /immun [Joueur] [Type] [Temps (minutes)]\n\r{33CCFF}[Types]{FFFFFF} argent, vie, armure, tuning, armes, tous");
  1364. }
  1365.  
  1366. CMD:a(playerid, params[])
  1367. {
  1368.     if(isnull(params)) return SCM(playerid, SYNTAX, "[USAGE]{FFFFFF} /a(dmin) [Message]");
  1369.     if(PlayerInfo[playerid][pAdmin] < 1) return SendNoAMessage(playerid);
  1370.     return ABroadCast(1, -1, ""DEEP_SKY_BLUE_2"[Admin chat]"DEEP_SKY_BLUE_3"[%s - %s]"DEEP_SKY_BLUE_4" [%s]", GetName(playerid), GetARank(playerid), params);
  1371. }
  1372.  
  1373. CMD:admin(playerid, params[]) { return cmd_a(playerid, params); }
  1374.  
  1375. CMD:unban(playerid, params[])
  1376. {
  1377.     if(PlayerInfo[playerid][pAdmin] < 2) return SendNoAMessage(playerid);
  1378.     new nom[MAX_PLAYER_NAME+1];
  1379.     if(sscanf(params, "s[MAX_PLAYER_NAME+1]", nom)) return SCM(playerid, SYNTAX, "[USAGE]{FFFFFF} /unban [Nom du compte]");
  1380.     mysql_format(MySQL, query, sizeof(query), "DELETE FROM Banlist WHERE nom = '%e'", nom);
  1381.     mysql_tquery(MySQL, query, "OnUnbanDone", "iis", playerid, 1, nom);
  1382.     return 1;
  1383. }
  1384.  
  1385. CMD:unbanid(playerid, params[])
  1386. {
  1387.     if(PlayerInfo[playerid][pAdmin] < 2) return SendNoAMessage(playerid);
  1388.     new banid;
  1389.     if(sscanf(params, "d", banid)) return SCM(playerid, SYNTAX, "[USAGE]{FFFFFF} /unbanid [ID du ban]");
  1390.     format(query, sizeof(query), "DELETE FROM Banlist WHERE pid = '%d'", banid);
  1391.     mysql_tquery(MySQL, query, "OnUnbanDone", "iisi", playerid, 2, "", banid);
  1392.     return 1;
  1393. }
  1394.  
  1395. CMD:unbanip(playerid, params[])
  1396. {
  1397.     if(PlayerInfo[playerid][pAdmin] < 2) return SendNoAMessage(playerid);
  1398.     new ip[17];
  1399.     if(sscanf(params, "s[17]", ip)) return SCM(playerid, 0x33CFFFFF, "[USAGE]{FFFFFF} /unbanip [IP bannie]");
  1400.     mysql_format(MySQL, query, sizeof(query), "DELETE FROM Banlist WHERE ip = '%e'", ip);
  1401.     mysql_tquery(MySQL, query, "OnUnbanDone", "iisis", playerid, 2, "", -1, ip);
  1402.     return 1;
  1403. }
  1404.  
  1405. CMD:kick(playerid, params[])
  1406. {
  1407.     if(PlayerInfo[playerid][pAdmin] < 1) return SendNoAMessage(playerid);
  1408.     if(sscanf(params, "us[145]", pid, raison)) return SCM(playerid, SYNTAX, "[USAGE]{FFFFFF} /kick [Joueur] [Raison]");
  1409.     if(PlayerInfo[pid][pAdmin] > PlayerInfo[playerid][pAdmin]) return SendNoAdMessage(playerid);
  1410.     KickSQL(pid, playerid, raison);
  1411.     return 1;
  1412. }
  1413.  
  1414. CMD:jail(playerid, params[])
  1415. {
  1416.     if(PlayerInfo[playerid][pAdmin] < 1) return SendNoAMessage(playerid);
  1417.     new temps;
  1418.     if(sscanf(params, "uds[145]", pid, temps, raison)) return SCM(playerid, SYNTAX, "[USAGE]{FFFFFF} /jail [Joueur] [Temps (minutes)] [Raison]");
  1419.     if(PlayerInfo[pid][pAdmin] > PlayerInfo[playerid][pAdmin]) return SendNoAdMessage(playerid);
  1420.     JailSQL(pid, playerid, temps, raison);
  1421.     return 1;
  1422. }
  1423.  
  1424. CMD:unjail(playerid, params[])
  1425. {
  1426.     if(PlayerInfo[playerid][pAdmin] < 1) return SendNoAMessage(playerid);
  1427.     if(sscanf(params, "u", pid)) return SCM(playerid, SYNTAX, "[USAGE]{FFFFFF} /unjail [Joueur]");
  1428.     Unjail(pid);
  1429.     return 1;
  1430. }
  1431.  
  1432. CMD:mute(playerid, params[])
  1433. {
  1434.     if(PlayerInfo[playerid][pAdmin] < 1) return SendNoAMessage(playerid);
  1435.     new temps;
  1436.     if(sscanf(params, "uds[145]", pid, temps, raison)) return SCM(playerid, SYNTAX, "[USAGE]{FFFFFF} /mute [Joueur] [Temps (minutes)] [Raison]");
  1437.     if(PlayerInfo[pid][pAdmin] > PlayerInfo[playerid][pAdmin]) return SendNoAdMessage(playerid);
  1438.     MuteSQL(pid, playerid, temps, raison);
  1439.     return 1;
  1440. }
  1441.  
  1442. CMD:makeadmin(playerid, params[])
  1443. {
  1444.     if(!IsPlayerAdmin(playerid)) return 0;
  1445.     new id, alevel;
  1446.     if(sscanf(params, "ud", id, alevel)) return SCM(playerid, SYNTAX, "[USAGE]{FFFFFF} /makeadmin [Joueur] [Niveau]");
  1447.     if(PlayerInfo[playerid][pAdmin] <= alevel) return SendNoAMessage(playerid);
  1448.     MakeAdminSQL(id, playerid, alevel);
  1449.     return 1;
  1450. }
  1451.  
  1452. CMD:setadmin(playerid, params[]) { return cmd_makeadmin(playerid, params); }
  1453. CMD:adminlevel(playerid, params[]) { return cmd_makeadmin(playerid, params); }
  1454.  
  1455. CMD:unmute(playerid, params[])
  1456. {
  1457.     if(PlayerInfo[playerid][pAdmin] < 1) return SendNoAMessage(playerid);
  1458.     if(sscanf(params, "u", pid)) return SCM(playerid, SYNTAX, "[USAGE]{FFFFFF} /unmute [Joueur]");
  1459.     Unmute(pid);
  1460.     return 1;
  1461. }
  1462.  
  1463. CMD:demute(playerid, params[]) { return cmd_unmute(playerid, params); }
  1464.  
  1465. CMD:veh(playerid, params[])
  1466. {
  1467.     if(PlayerInfo[playerid][pAdmin] < 4) return SendNoAMessage(playerid);
  1468.     new vehname[41], vehid, col1, col2, respawn, Float:pos[4];
  1469.     col1 = 1, col2 = 1, respawn = 20;
  1470.     if(sscanf(params, "s[41]DDD", vehname, col1, col2, respawn)) return SCM(playerid, SYNTAX, "[USAGE]{FFFFFF} /veh [ModelID/Nom] [Couleur 1 (optionnel)] [Couleur 2 (optionnel)] [Temps de respawn (Optionnel)]");
  1471.     vehid = GetVehicleModelIDFromName(vehname);
  1472.     GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
  1473.     GetPlayerFacingAngle(playerid, pos[3]);
  1474.     new veh = CreateVehicle(vehid, floatadd(pos[0], 1.5), floatadd(pos[1], 1.5), floatadd(pos[2], 1.5), pos[3], col1, col2, respawn);
  1475.     PutPlayerInVehicle(playerid, veh, 0);
  1476.     return SCM(playerid, -1, ""RED"[Admin]"WHITE" Tu as créé un véhicule, cependant il est considéré comme temporaire ! Il faut utiliser %s pour le sauvegarder dans la base de données !" CMD_SAVE);
  1477. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement