Advertisement
S4T3K

Inconnu System - S4T3K

Jan 29th, 2014
369
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 12.07 KB | None | 0 0
  1. /****************************************************
  2.  
  3. Présentation :
  4.  
  5. - Petit filterscript qui vous permet d'avoir un numéro d'inconnu à la place du pseudo quand on l'active. Lorsque le joueur parlera dans le chat,
  6.     ça affichera "Inconnu 1234" (1234 étant le numéro d'inconnu du joueur, qui n'est pas sauvegardé je le rappelle).
  7.  
  8. Fonctionnalités :
  9.  
  10. - Système de logs en MySQL ou en fichier (à définir via #define _USE_MYSQL_ juste en dessous de #define FILTERSCRIPT)
  11. - Utilisation des dernières nouveautés en matière d'includes/plugins
  12. - Performances maximales via l'utilisation de zcmd, sscanf et des char-arrays
  13. - Rafraichissement de l'inconnu toutes les demi secondes (pour que les joueurs qui se connectent après que le joueur ait activé son inconnu ne puissent pas voir son nom)
  14. - Possibilité d'intéragir entre le FS et le GM via les fonctions "remote" définies plus bas
  15.  
  16. Commandes :
  17.  
  18. /acheter : Donne la possibilité au joueur d'utiliser l'inconnu
  19. /nomoff, /inconnuon : Active l'inconnu.
  20. /nomon, /inconnuoff : Enlever l'inconnu. Remet le nametag et remet le nom du joueur.
  21. /kick [Joueur/Numéro d'inconnu] : Kick le joueur (Par nom, playerid ou numéro d'inconnu)
  22. /inconnuliste : Affiche la liste des inconnus
  23. /dinc [Numéro de l'inconnu] : Affiche le pseudo d'un inconnu à partir de son numéro.
  24.  
  25. La commande de kick est un exemple pour vous montrer comment réaliser des actions sur les numéros d'inconnu.
  26. Toutefois, si vous ne voulez pas modifier le FS, je vous donne la possibilité d'utiliser depuis n'importe quelle autre AMX (GM ou FS) des fonctions
  27. sur les numéros d'inconnu, appelées fonctions "remote" et qui doivent être appelées via "CallRemoteFunction" (CallRemoteFunction retournera la valeur que la fonction
  28. retournerait si elle était appelée normalement, vu qu'elle est appelée normalement).
  29.  
  30. Fonctions "remote" :
  31.  
  32.     • GetPlayerIncNbr(playerid) : retourne le numéro d'inconnu du joueur spécifié (-1 si pas connecté)
  33.     • GetIncNbrByName(name) : retourne le numéro d'inconnu lié au nom spécifié (-1 si le nom n'est pas utilisé sur le serveur)
  34.     • SetPlayerIncNbr(playerid, new_inc) : change le numéro d'inconnu du joueur spécifié à "new_inc"
  35.     • HavePlayerInconnu(playerid) : retourne true/1 si le joueur possède l'inconnu et false/0 si il ne le possède pas
  36.     • IsPlayerUsingInconnu(playerid) : retourne true/1 si le joueur utilise l'inconnu et false/0 si il ne l'utilise pas
  37.     • SetPlayerUsingInconnu(playerid, toggle) : Change l'état d'inconnu du joueur à toggle (false = utilise pas, true = utilise)
  38.     • SetPlayerHaveInconnu(playerid, toggle) : Change l'état de possession d'inconnu du joueur à toggle (false = l'a pas, true = l'a)
  39.  
  40. Elles sont à appeler via CallRemoteFunction. Si vous voulez un raccourci, mettez cette ligne là dans votre GM/autre FS qui utiliserait ces fonctions :
  41.  
  42. Crédits :
  43.  
  44. S4T3K/Soufiane : Filterscript
  45. Tous les créateurs de ressources que j'utilise pour ce FS (Y_Less, Zeex, Maddinat0r/BlueG, Kalcor)
  46.  
  47.  
  48. \\\\\\\\\\\\\\\\\\\\
  49. Changelog :
  50.  
  51. • 29/01/14 : Création du FS en version 1.0
  52. • 25/10/14 : Passage du FS en version 2.0 (merci à Papawy et va bien niquer ta race si tu lis ce message)
  53.  
  54. *****************************************************/
  55.  
  56. #define FILTERSCRIPT
  57. #define RETURN_ON_PLAYER_TEXT (0)
  58. //#define _USE_MYSQL_
  59.  
  60.  
  61. #include <a_samp>
  62. #include <sscanf2>
  63. #include <zcmd>
  64. #include <YSI\y_va>
  65. #include <YSI\y_iterate>
  66. #include <YSI\y_inline>
  67.  
  68. #if defined _USE_MYSQL_
  69.  
  70.     #include <a_mysql> // R39-2 pour ma part
  71.  
  72.     #define MYSQL_HOST "localhost"
  73.     #define MYSQL_DB "samp"
  74.     #define MYSQL_USER "root"
  75.     #define MYSQL_PASS "papawy_est_gay"
  76.  
  77. #endif
  78.  
  79. new
  80.     bool:haveInc[MAX_PLAYERS char],
  81.     incNbr[MAX_PLAYERS],
  82.     bool:incON[MAX_PLAYERS char],
  83.     pName[MAX_PLAYERS][2][21];
  84.  
  85.  
  86. forward KickPublic(playerid); public KickPublic(playerid) return Kick(playerid);  // SA-MP wiki
  87.  
  88. forward updateIncStatut(); public updateIncStatut()
  89. {
  90.     foreach(new i : Player)
  91.     {
  92.         if(incON{i})
  93.         {
  94.             foreach(new j : Player)
  95.                 ShowPlayerNameTagForPlayer(j, i, 0);
  96.         }
  97.     }
  98.     return 1;
  99. }
  100.  
  101. new timer_update;
  102.  
  103. public OnFilterScriptInit()
  104. {
  105.     #if defined _USE_MYSQL_
  106.         mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PASS);
  107.         mysql_tquery(1, "DROP TABLE IF EXISTS `IncLog`");
  108.         mysql_tquery(1, "CREATE TABLE `IncLog` ( \
  109.            `entry_id` INT NOT NULL AUTO_INCREMENT, \
  110.            `player_name` VARCHAR(21) NOT NULL,  \
  111.            `player_inc` INT NOT NULL, \
  112.            `date` DATETIME NOT NULL, \
  113.            `cmd` VARCHAR(8) NOT NULL, \
  114.            Primary Key(`entry_id`))");
  115.     #endif
  116.     printf("s_inconnu V2 chargé !");
  117.     timer_update = SetTimer("updateIncStatut", 500, true);
  118.     return 1;
  119. }
  120.  
  121. public OnFilterScriptExit()
  122. {
  123.     #if defined _USE_MYSQL_
  124.         mysql_close(1);
  125.     #endif
  126.     printf("s_inconnu V2 déchargé !");
  127.     KillTimer(timer_update);
  128.     timer_update = -1;
  129.     return 1;
  130. }
  131.  
  132. public OnPlayerConnect(playerid)
  133. {
  134.     GetPlayerName(playerid, pName[playerid][0], 21);
  135.     return 1;
  136. }
  137.  
  138. public OnPlayerText(playerid, text[])
  139. {
  140.     SCM(playerid, -1, "%s : %s", (incON{playerid} ? pName[playerid][1] : pName[playerid][0]), text);
  141.     return RETURN_ON_PLAYER_TEXT;
  142. }
  143.  
  144. CMD:acheter(playerid, params[])
  145. {
  146.     if(haveInc{playerid})
  147.         return SendClientMessage(playerid, -1, "Tu as déjà ton inconnu !");
  148.  
  149.     haveInc{playerid} = true;
  150.     incNbr[playerid] = 1000 + random(8999);
  151.     format(pName[playerid][1], 21, "Inconnu %d", incNbr[playerid]);
  152.     return SCM(playerid, -1, "Tu as acheté un inconnu numéroté !\r\nTon numéro d'inconnu est [{33CCFF}%d{FFFFFF}].", incNbr[playerid]);
  153. }
  154.  
  155. CMD:nomoff(playerid, params[])
  156. {
  157.     if(!haveInc{playerid})
  158.         return SendClientMessage(playerid, -1, "Tu n'as pas acheté d'inconnu ! Utilise /acheter pour l'acheter");
  159.     if(incON{playerid})
  160.         return SendClientMessage(playerid, -1, "Tu as déjà masqué ton nom !");
  161.    
  162.     incON{playerid} = true;
  163.     new str[80], date_time[6];
  164.     getdate(date_time[0], date_time[1], date_time[2]);
  165.     gettime(date_time[3], date_time[4], date_time[5]);
  166.  
  167.     #define arr6{%1} %1[0], %1[1], %1[2], %1[3], %1[4], %1[5]
  168.  
  169.     #if defined _USE_MYSQL_
  170.         format(str, 80, "'%s', '%d', '%d-%d-%d %d:%d:%d', 'nomoff'",
  171.             pName[playerid][0], incNbr[playerid], arr6{date_time});
  172.     #else
  173.         format(str, 80, "'%s a activé l'inconnu le %d-%d-%d %d:%d:%d avec le numéro %d.",
  174.             pName[playerid][0], arr6{date_time}, incNbr[playerid]);
  175.     #endif
  176.  
  177.     LogInc(str);
  178.     return SCM(playerid, -1, "Tu as activé l'inconnu. Ton identité est maintenant %s.", pName[playerid][1]);
  179. }
  180.  
  181. CMD:inconnuon(playerid, params[])
  182.     return cmd_nomoff(playerid, "");
  183.  
  184. CMD:nomon(playerid, params[])
  185. {
  186.     if(!incON{playerid})
  187.         return SendClientMessage(playerid, -1, "{FF0000}[Erreur]{FFFFFF} Tu n'as pas masqué ton nom !");
  188.  
  189.     incON{playerid} = false;
  190.  
  191.     new str[80], date_time[6];
  192.     getdate(date_time[0], date_time[1], date_time[2]);
  193.     gettime(date_time[3], date_time[4], date_time[5]);
  194.  
  195.     #define arr6{%1} %1[0], %1[1], %1[2], %1[3], %1[4], %1[5]
  196.  
  197.     #if defined _USE_MYSQL_
  198.         format(str, 80, "'%s', '%d', '%d-%d-%d %d:%d:%d', 'nomon'",
  199.             pName[playerid][0], incNbr[playerid], arr6{date_time});
  200.     #else
  201.         format(str, 80, "'%s a désactivé l'inconnu le %d-%d-%d %d:%d:%d. Il utilisait le numéro %d.",
  202.             pName[playerid][0], arr6{date_time}, incNbr[playerid]);
  203.     #endif
  204.     LogInc(str);
  205.     return SCM(playerid, -1, "Tu as désactivé l'inconnu. Ton identité est maintenant %s.", pName[playerid][0]);
  206. }
  207.  
  208. CMD:inconnuoff(playerid, params[])
  209.     return cmd_nomon(playerid, "");
  210.  
  211. CMD:inconnuliste(playerid, params[])
  212. {
  213.     SendClientMessage(playerid, -1, "[Liste des joueurs connectés en ce moment et ayant activé l'inconnu]");
  214.  
  215.     foreach(new i : Player)
  216.     {
  217.         if(incON{i})
  218.             SCM(playerid, -1, "Pseudo : %s. Numéro d'inconnu : %d.",
  219.                 pName[playerid][0], incNbr[playerid]);
  220.     }
  221.  
  222.     return 1;
  223. }
  224.  
  225. CMD:dinc(playerid, params[])
  226. {
  227.     new cible;
  228.     if(sscanf(params, "d", cible))
  229.         return SendClientMessage(playerid, -1, "SYNTAXE : /dinc [Numéro de l'inconnu]");
  230.     foreach(new i : Player)
  231.     {
  232.         if(incNbr[i] == cible)
  233.             return SCM(playerid, -1, "Le numéro d'inconnu %d appartient à %s.",
  234.                 cible, pName[i][0]);
  235.     }
  236.     return SCM(playerid, -1, "Le numéro d'inconnu %d n'appartient à aucun joueur connecté en ce moment.",
  237.         cible);
  238. }
  239.  
  240. CMD:kick(playerid, params[])
  241. {
  242.     new cible[21], raison[115];
  243.     if(sscanf(params, "s[21]S(Aucune raison)[115]", cible, raison))
  244.         return SendClientMessage(playerid, -1, "SYNTAXE : /kick [Joueur/Numéro d'inconnu] [Raison (optionnel)]");
  245.  
  246.     if(!IsNumeric(cible)) // Si on veut kick par nom
  247.     {
  248.         foreach(new i : Player)
  249.         {
  250.             static name[21];
  251.             GetPlayerName(i, name, 21);
  252.             if(!strcmp(cible, name, false, 21))
  253.                 return KickWithMessage(i, raison);
  254.         }
  255.         return SendClientMessage(playerid, -1, "Ce joueur n'est pas connecté !");
  256.     }
  257.  
  258.     new cibleid = strval(cible);
  259.     if(0 <= cibleid <= GetMaxPlayers()-1) // Si on veut kick par playerid
  260.         return KickWithMessage(cibleid, raison);
  261.    
  262.     foreach(new i : Player) // Si on veut kick par numéro d'inconnu
  263.     {
  264.         if(cibleid == incNbr[i])
  265.             return KickWithMessage(i, raison);
  266.     }
  267.     return SendClientMessage(playerid, -1, "Ce joueur n'est pas connecté !");
  268. }
  269.  
  270. LogInc(const str[80])
  271. {
  272.     #if defined _USE_MYSQL_
  273.         static query[200];
  274.         format(query, 100, "INSERT INTO `IncLog` (`player_name`, `player_inc`, `date`, `cmd`) VALUES (%s)", str);
  275.         mysql_tquery(1, query);
  276.     #else
  277.         new File:hFile = fopen("inconnu.log", io_append);
  278.         fwrite(hFile, str);
  279.         fclose(hFile);
  280.     #endif
  281. }
  282.  
  283.  
  284. KickWithMessage(playerid, message[])
  285. {
  286.     SendClientMessage(playerid, -1, message);
  287.     SetTimerEx("KickPublic", 1000, 0, "d", playerid);
  288.     return 1;
  289. }
  290.  
  291. SCM(playerid, col, msg[], {Float,_}:...)
  292. {
  293.     if(numargs() == 3)
  294.         return SendClientMessage(playerid, col, msg);
  295.  
  296.     new out[145];
  297.     va_format(out, 145, msg, va_start<3>);
  298.     return SendClientMessage(playerid, col, out);
  299. }
  300.  
  301. IsNumeric(const str[])
  302. {
  303.     for(new i = 0, l = strlen(str); i < l; ++i)
  304.     {
  305.         if(!('0' <= str[i] <= '9'))
  306.             return 0;
  307.     }
  308.     return 1;
  309. }
  310.  
  311. // Fonctions "remote"
  312.  
  313. forward GetPlayerIncNbr(const playerid);
  314. forward GetIncNbrByName(const name[]);
  315. forward SetPlayerIncNbr(const playerid, const new_inc);
  316. forward HavePlayerInconnu(const playerid);
  317. forward IsPlayerUsingInconnu(const playerid);
  318. forward SetPlayerUsingInconnu(const playerid, const toggle);
  319. forward SetPlayerHaveInconnu(const playerid, const toggle);
  320.  
  321. public GetPlayerIncNbr(const playerid)
  322. {
  323.     if(!IsPlayerConnected(playerid))
  324.         return -1;
  325.  
  326.     return incNbr[playerid];
  327. }
  328.  
  329. public GetIncNbrByName(const name[])
  330. {
  331.     foreach(new i : Player)
  332.     {
  333.         if(!strcmp(name, pName[i][0], false, 21))
  334.             return incNbr[i];
  335.     }
  336.     return -1;
  337. }
  338.  
  339. public SetPlayerIncNbr(const playerid, const new_inc)
  340. {
  341.     if(!IsPlayerConnected(playerid))
  342.         return 0;
  343.     incNbr[playerid] = new_inc;
  344.     return 1;
  345. }
  346.  
  347. public HavePlayerInconnu(const playerid)
  348. {
  349.     if(!IsPlayerConnected(playerid))
  350.         return 0;
  351.     return _:haveInc{playerid};
  352. }
  353.  
  354. public IsPlayerUsingInconnu(const playerid)
  355. {
  356.     if(!IsPlayerConnected(playerid))
  357.         return 0;
  358.     return _:incON{playerid};
  359. }
  360.  
  361. public SetPlayerUsingInconnu(const playerid, const toggle)
  362. {
  363.     if(!IsPlayerConnected(playerid))
  364.         return 0;
  365.     haveInc{playerid} = bool:toggle;
  366.     return 1;
  367. }
  368.  
  369. public SetPlayerHaveInconnu(const playerid, const toggle)
  370. {
  371.     if(!IsPlayerConnected(playerid))
  372.         return 0;
  373.     haveInc{playerid} = bool:toggle;
  374.     return 1;
  375. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement