Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /****************************************************
- Présentation :
- - 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,
- ça affichera "Inconnu 1234" (1234 étant le numéro d'inconnu du joueur, qui n'est pas sauvegardé je le rappelle).
- Fonctionnalités :
- - Système de logs en MySQL ou en fichier (à définir via #define _USE_MYSQL_ juste en dessous de #define FILTERSCRIPT)
- - Utilisation des dernières nouveautés en matière d'includes/plugins
- - Performances maximales via l'utilisation de zcmd, sscanf et des char-arrays
- - 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)
- - Possibilité d'intéragir entre le FS et le GM via les fonctions "remote" définies plus bas
- Commandes :
- /acheter : Donne la possibilité au joueur d'utiliser l'inconnu
- /nomoff, /inconnuon : Active l'inconnu.
- /nomon, /inconnuoff : Enlever l'inconnu. Remet le nametag et remet le nom du joueur.
- /kick [Joueur/Numéro d'inconnu] : Kick le joueur (Par nom, playerid ou numéro d'inconnu)
- /inconnuliste : Affiche la liste des inconnus
- /dinc [Numéro de l'inconnu] : Affiche le pseudo d'un inconnu à partir de son numéro.
- La commande de kick est un exemple pour vous montrer comment réaliser des actions sur les numéros d'inconnu.
- 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
- 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
- retournerait si elle était appelée normalement, vu qu'elle est appelée normalement).
- Fonctions "remote" :
- • GetPlayerIncNbr(playerid) : retourne le numéro d'inconnu du joueur spécifié (-1 si pas connecté)
- • GetIncNbrByName(name) : retourne le numéro d'inconnu lié au nom spécifié (-1 si le nom n'est pas utilisé sur le serveur)
- • SetPlayerIncNbr(playerid, new_inc) : change le numéro d'inconnu du joueur spécifié à "new_inc"
- • HavePlayerInconnu(playerid) : retourne true/1 si le joueur possède l'inconnu et false/0 si il ne le possède pas
- • IsPlayerUsingInconnu(playerid) : retourne true/1 si le joueur utilise l'inconnu et false/0 si il ne l'utilise pas
- • SetPlayerUsingInconnu(playerid, toggle) : Change l'état d'inconnu du joueur à toggle (false = utilise pas, true = utilise)
- • SetPlayerHaveInconnu(playerid, toggle) : Change l'état de possession d'inconnu du joueur à toggle (false = l'a pas, true = l'a)
- Elles sont à appeler via CallRemoteFunction. Si vous voulez un raccourci, mettez cette ligne là dans votre GM/autre FS qui utiliserait ces fonctions :
- Crédits :
- S4T3K/Soufiane : Filterscript
- Tous les créateurs de ressources que j'utilise pour ce FS (Y_Less, Zeex, Maddinat0r/BlueG, Kalcor)
- \\\\\\\\\\\\\\\\\\\\
- Changelog :
- • 29/01/14 : Création du FS en version 1.0
- • 25/10/14 : Passage du FS en version 2.0 (merci à Papawy et va bien niquer ta race si tu lis ce message)
- *****************************************************/
- #define FILTERSCRIPT
- #define RETURN_ON_PLAYER_TEXT (0)
- //#define _USE_MYSQL_
- #include <a_samp>
- #include <sscanf2>
- #include <zcmd>
- #include <YSI\y_va>
- #include <YSI\y_iterate>
- #include <YSI\y_inline>
- #if defined _USE_MYSQL_
- #include <a_mysql> // R39-2 pour ma part
- #define MYSQL_HOST "localhost"
- #define MYSQL_DB "samp"
- #define MYSQL_USER "root"
- #define MYSQL_PASS "papawy_est_gay"
- #endif
- new
- bool:haveInc[MAX_PLAYERS char],
- incNbr[MAX_PLAYERS],
- bool:incON[MAX_PLAYERS char],
- pName[MAX_PLAYERS][2][21];
- forward KickPublic(playerid); public KickPublic(playerid) return Kick(playerid); // SA-MP wiki
- forward updateIncStatut(); public updateIncStatut()
- {
- foreach(new i : Player)
- {
- if(incON{i})
- {
- foreach(new j : Player)
- ShowPlayerNameTagForPlayer(j, i, 0);
- }
- }
- return 1;
- }
- new timer_update;
- public OnFilterScriptInit()
- {
- #if defined _USE_MYSQL_
- mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PASS);
- mysql_tquery(1, "DROP TABLE IF EXISTS `IncLog`");
- mysql_tquery(1, "CREATE TABLE `IncLog` ( \
- `entry_id` INT NOT NULL AUTO_INCREMENT, \
- `player_name` VARCHAR(21) NOT NULL, \
- `player_inc` INT NOT NULL, \
- `date` DATETIME NOT NULL, \
- `cmd` VARCHAR(8) NOT NULL, \
- Primary Key(`entry_id`))");
- #endif
- printf("s_inconnu V2 chargé !");
- timer_update = SetTimer("updateIncStatut", 500, true);
- return 1;
- }
- public OnFilterScriptExit()
- {
- #if defined _USE_MYSQL_
- mysql_close(1);
- #endif
- printf("s_inconnu V2 déchargé !");
- KillTimer(timer_update);
- timer_update = -1;
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- GetPlayerName(playerid, pName[playerid][0], 21);
- return 1;
- }
- public OnPlayerText(playerid, text[])
- {
- SCM(playerid, -1, "%s : %s", (incON{playerid} ? pName[playerid][1] : pName[playerid][0]), text);
- return RETURN_ON_PLAYER_TEXT;
- }
- CMD:acheter(playerid, params[])
- {
- if(haveInc{playerid})
- return SendClientMessage(playerid, -1, "Tu as déjà ton inconnu !");
- haveInc{playerid} = true;
- incNbr[playerid] = 1000 + random(8999);
- format(pName[playerid][1], 21, "Inconnu %d", incNbr[playerid]);
- return SCM(playerid, -1, "Tu as acheté un inconnu numéroté !\r\nTon numéro d'inconnu est [{33CCFF}%d{FFFFFF}].", incNbr[playerid]);
- }
- CMD:nomoff(playerid, params[])
- {
- if(!haveInc{playerid})
- return SendClientMessage(playerid, -1, "Tu n'as pas acheté d'inconnu ! Utilise /acheter pour l'acheter");
- if(incON{playerid})
- return SendClientMessage(playerid, -1, "Tu as déjà masqué ton nom !");
- incON{playerid} = true;
- new str[80], date_time[6];
- getdate(date_time[0], date_time[1], date_time[2]);
- gettime(date_time[3], date_time[4], date_time[5]);
- #define arr6{%1} %1[0], %1[1], %1[2], %1[3], %1[4], %1[5]
- #if defined _USE_MYSQL_
- format(str, 80, "'%s', '%d', '%d-%d-%d %d:%d:%d', 'nomoff'",
- pName[playerid][0], incNbr[playerid], arr6{date_time});
- #else
- format(str, 80, "'%s a activé l'inconnu le %d-%d-%d %d:%d:%d avec le numéro %d.",
- pName[playerid][0], arr6{date_time}, incNbr[playerid]);
- #endif
- LogInc(str);
- return SCM(playerid, -1, "Tu as activé l'inconnu. Ton identité est maintenant %s.", pName[playerid][1]);
- }
- CMD:inconnuon(playerid, params[])
- return cmd_nomoff(playerid, "");
- CMD:nomon(playerid, params[])
- {
- if(!incON{playerid})
- return SendClientMessage(playerid, -1, "{FF0000}[Erreur]{FFFFFF} Tu n'as pas masqué ton nom !");
- incON{playerid} = false;
- new str[80], date_time[6];
- getdate(date_time[0], date_time[1], date_time[2]);
- gettime(date_time[3], date_time[4], date_time[5]);
- #define arr6{%1} %1[0], %1[1], %1[2], %1[3], %1[4], %1[5]
- #if defined _USE_MYSQL_
- format(str, 80, "'%s', '%d', '%d-%d-%d %d:%d:%d', 'nomon'",
- pName[playerid][0], incNbr[playerid], arr6{date_time});
- #else
- format(str, 80, "'%s a désactivé l'inconnu le %d-%d-%d %d:%d:%d. Il utilisait le numéro %d.",
- pName[playerid][0], arr6{date_time}, incNbr[playerid]);
- #endif
- LogInc(str);
- return SCM(playerid, -1, "Tu as désactivé l'inconnu. Ton identité est maintenant %s.", pName[playerid][0]);
- }
- CMD:inconnuoff(playerid, params[])
- return cmd_nomon(playerid, "");
- CMD:inconnuliste(playerid, params[])
- {
- SendClientMessage(playerid, -1, "[Liste des joueurs connectés en ce moment et ayant activé l'inconnu]");
- foreach(new i : Player)
- {
- if(incON{i})
- SCM(playerid, -1, "Pseudo : %s. Numéro d'inconnu : %d.",
- pName[playerid][0], incNbr[playerid]);
- }
- return 1;
- }
- CMD:dinc(playerid, params[])
- {
- new cible;
- if(sscanf(params, "d", cible))
- return SendClientMessage(playerid, -1, "SYNTAXE : /dinc [Numéro de l'inconnu]");
- foreach(new i : Player)
- {
- if(incNbr[i] == cible)
- return SCM(playerid, -1, "Le numéro d'inconnu %d appartient à %s.",
- cible, pName[i][0]);
- }
- return SCM(playerid, -1, "Le numéro d'inconnu %d n'appartient à aucun joueur connecté en ce moment.",
- cible);
- }
- CMD:kick(playerid, params[])
- {
- new cible[21], raison[115];
- if(sscanf(params, "s[21]S(Aucune raison)[115]", cible, raison))
- return SendClientMessage(playerid, -1, "SYNTAXE : /kick [Joueur/Numéro d'inconnu] [Raison (optionnel)]");
- if(!IsNumeric(cible)) // Si on veut kick par nom
- {
- foreach(new i : Player)
- {
- static name[21];
- GetPlayerName(i, name, 21);
- if(!strcmp(cible, name, false, 21))
- return KickWithMessage(i, raison);
- }
- return SendClientMessage(playerid, -1, "Ce joueur n'est pas connecté !");
- }
- new cibleid = strval(cible);
- if(0 <= cibleid <= GetMaxPlayers()-1) // Si on veut kick par playerid
- return KickWithMessage(cibleid, raison);
- foreach(new i : Player) // Si on veut kick par numéro d'inconnu
- {
- if(cibleid == incNbr[i])
- return KickWithMessage(i, raison);
- }
- return SendClientMessage(playerid, -1, "Ce joueur n'est pas connecté !");
- }
- LogInc(const str[80])
- {
- #if defined _USE_MYSQL_
- static query[200];
- format(query, 100, "INSERT INTO `IncLog` (`player_name`, `player_inc`, `date`, `cmd`) VALUES (%s)", str);
- mysql_tquery(1, query);
- #else
- new File:hFile = fopen("inconnu.log", io_append);
- fwrite(hFile, str);
- fclose(hFile);
- #endif
- }
- KickWithMessage(playerid, message[])
- {
- SendClientMessage(playerid, -1, message);
- SetTimerEx("KickPublic", 1000, 0, "d", playerid);
- return 1;
- }
- SCM(playerid, col, msg[], {Float,_}:...)
- {
- if(numargs() == 3)
- return SendClientMessage(playerid, col, msg);
- new out[145];
- va_format(out, 145, msg, va_start<3>);
- return SendClientMessage(playerid, col, out);
- }
- IsNumeric(const str[])
- {
- for(new i = 0, l = strlen(str); i < l; ++i)
- {
- if(!('0' <= str[i] <= '9'))
- return 0;
- }
- return 1;
- }
- // Fonctions "remote"
- forward GetPlayerIncNbr(const playerid);
- forward GetIncNbrByName(const name[]);
- forward SetPlayerIncNbr(const playerid, const new_inc);
- forward HavePlayerInconnu(const playerid);
- forward IsPlayerUsingInconnu(const playerid);
- forward SetPlayerUsingInconnu(const playerid, const toggle);
- forward SetPlayerHaveInconnu(const playerid, const toggle);
- public GetPlayerIncNbr(const playerid)
- {
- if(!IsPlayerConnected(playerid))
- return -1;
- return incNbr[playerid];
- }
- public GetIncNbrByName(const name[])
- {
- foreach(new i : Player)
- {
- if(!strcmp(name, pName[i][0], false, 21))
- return incNbr[i];
- }
- return -1;
- }
- public SetPlayerIncNbr(const playerid, const new_inc)
- {
- if(!IsPlayerConnected(playerid))
- return 0;
- incNbr[playerid] = new_inc;
- return 1;
- }
- public HavePlayerInconnu(const playerid)
- {
- if(!IsPlayerConnected(playerid))
- return 0;
- return _:haveInc{playerid};
- }
- public IsPlayerUsingInconnu(const playerid)
- {
- if(!IsPlayerConnected(playerid))
- return 0;
- return _:incON{playerid};
- }
- public SetPlayerUsingInconnu(const playerid, const toggle)
- {
- if(!IsPlayerConnected(playerid))
- return 0;
- haveInc{playerid} = bool:toggle;
- return 1;
- }
- public SetPlayerHaveInconnu(const playerid, const toggle)
- {
- if(!IsPlayerConnected(playerid))
- return 0;
- haveInc{playerid} = bool:toggle;
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement