#define FILTERSCRIPT #include #include #include #define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1 #define RED 0xFF000066 #define YELLOW 0xFFFF0066 #define BLUE 0x0000FF66 #define GREEN 0x00FF0066 #define ADMIN_RANK 2 #define MODO_RANK 1 forward ban(playerid, reason[250]); /* Les notations de variables: pVar : "p" pour "player" (abreviation) aVar : "a" pour "administrator" (abreiviation) gVar: "g" pour globale mais ça c'est classique. /!\ Toutes les variables globales ont pas le préfixe "g" ici (à faire ?) /!\Dans le FS Gangs le préfixe "g" peux aussi signifier "gang"! (à ré-organisé ?) */ new pConnected; new aConnected;// /!\ Un adminastrateur est aussi un joueur ;) public OnFilterScriptInit() { print("\n--------------------------------------"); print("Admin System by Jujuv"); print("--------------------------------------\n"); } public OnPlayerConnect(playerid) { pConnected++;//Idée copié du GM de SK (TY Coboll, minimicro, Moathib, ..) if(IsAdmin(playerid)) { aConnected++;//Ca va, je te fais pas un dessin ?! } } public OnPlayerDisconnect(playerid, reason) { pConnected--;//C'est vrais que c'est tout con comme idée, fallais juste y penser. if(IsAdmin(playerid)) { aConnected--;//Obvious } } public OnPlayerCommandText(playerid, cmdtext[]) { //On utilise DCMD pour les commandes avec arguments dcmd(setadmin, 8, cmdtext); dcmd(kick, 4, cmdtext); dcmd(ban, 3, cmdtext); dcmd(tpa, 3, cmdtext); dcmd(unban, 5, cmdtext); dcmd(warn, 4, cmdtext); dcmd(arme, 4, cmdtext); dcmd(mute, 4, cmdtext); //On utilise de simples conditions avec la fonction strcmp pour les commandes sans arguments. if(!strcmp(cmdtext, "/god", true, 4)) { if(IsAdmin(playerid) >= ADMIN_RANK) { if(GetPVarInt(playerid, "god")) { SetPVarInt(playerid, "god", 0); SetPlayerHealth(playerid, 100); SendClientMessage(playerid, RED, "> Mode \"God\" désactivé."); } else { SetPVarInt(playerid, "god", 1); SetPlayerHealth(playerid, 9999999);//Je me demande si cette valeur risque pas d'apporter des bogues ?! SendClientMessage(playerid, GREEN, "> Mode \"God\" activé."); } } else { SendClientMessage(playerid, RED, "> Erreur. Commande résérvée aux administrateurs."); } return 1; } if(!strcmp(cmdtext, "/tp", true, 3)) { if(IsAdmin(playerid) >= ADMIN_RANK) { if( GetPVarInt(playerid, "tpenabled")) { SetPVarInt(playerid, "tpenabled", 0); SendClientMessage(playerid, RED, "> Téléportation par clic sur la carte désactivée."); } else { SetPVarInt(playerid, "tpenabled", 1); SendClientMessage(playerid, GREEN, "> Téléportation par clic sur la carte activée."); } } } return 0; } dcmd_setadmin(playerid, params[]) { new id, rank; sscanf(params, "ri", id, rank); if(IsAdmin(playerid) >= ADMIN_RANK) { if(!strlen(params)) { SendClientMessage(playerid, RED, "> Erreur. Usage : /setadmin [PlayerID][Niveau admin (0-2)]."); } else if(IsPlayerConnected(id) && id != playerid && GetPVarInt(id, "admin") < GetPVarInt(playerid, "admin")) { new pName[MAX_PLAYER_NAME], string[246]; SetPVarInt(id, "admin", rank); dini_IntSet(userfile(playerid), "admin", rank); GetPlayerName(id, pName, sizeof(pName)); format(string, sizeof(string), "> %s est désormais administrateur rang %d.", pName, rank); SendClientMessageToAll(GREEN, string); } else { SendClientMessage(playerid, RED, "> Erreur. Joueur non connecté ou ID invalide."); } } else { SendClientMessage(playerid, RED, "> Erreur. Cette commande est réservée aux administrateurs."); } return 1; } dcmd_kick(playerid, params[]) { new kickedid, reason[256]; sscanf(params, "us[256]", kickedid, reason); if(IsAdmin(playerid) >= MODO_RANK) { if(!strlen(params)) { SendClientMessage(playerid, RED, "> Erreur. Usage : /kick [PlayerID] [Raison]."); } else if(IsPlayerConnected(kickedid) && (!GetPVarInt(kickedid, "admin"))) { new string[246], pName[MAX_PLAYER_NAME], aName[MAX_PLAYER_NAME]; GetPlayerName(playerid, aName, sizeof(aName)); GetPlayerName(kickedid, pName, sizeof(pName)); format(string, sizeof(string), "> L'administrateur %s a expulsé %s du serveur (Raison : %s).", aName, pName, reason); SendClientMessageToAll(RED, string); Kick(kickedid); } else { SendClientMessage(playerid, RED, "> Erreur. Joueur non connecté ou ID invalide."); } } else { SendClientMessage(playerid, RED, "> Erreur. Cette commande est réservée aux modérateurs."); } return 1; } dcmd_ban(playerid, params[]) { new bannedid, reason[250]; sscanf(params, "us[250]", bannedid, reason); if(IsAdmin(playerid) >= ADMIN_RANK) { if(!strlen(params)) { SendClientMessage(playerid, RED, "> Erreur. Usage : /ban [PlayerID] [Raison]."); } else if(IsPlayerConnected(bannedid) && IsAdmin(bannedid) == 0) { new string[256], pName[MAX_PLAYER_NAME], aName[MAX_PLAYER_NAME]; GetPlayerName(playerid, aName, sizeof(aName)); GetPlayerName(bannedid, pName, sizeof(pName)); format(string, sizeof(string), "> L'administrateur %s a banni %s du serveur (Raison : %s)", aName, pName, reason); SendClientMessageToAll(RED, string); ban(playerid, reason); } else { SendClientMessage(playerid, RED, "> Erreur. Joueur non connecté ou ID invalide."); } } else { SendClientMessage(playerid, RED, "> Erreur. Cette commande est réservée aux administrateurs."); } return 1; } dcmd_tpa(playerid, params[]) { /* Note: Penser à rediger des commentaires explicite au possible pour cette "partie" */ if(IsAdmin(playerid) >= ADMIN_RANK) { new id1, id2; sscanf(params, "rr", id1, id2); if(!strlen(params)) { SendClientMessage(playerid, RED, "> Erreur. Usage : /tpa [Player1ID] [Player2ID]."); SendClientMessage(playerid, RED, "> Le premier joueur sera alors téléporté au deuxième."); } else if(IsPlayerConnected(id1) && IsPlayerConnected(id2) && id1 != id2) { new Float:x, Float:y, Float:z; new string[128]; new aName[MAX_PLAYER_NAME], pName[MAX_PLAYER_NAME], p2Name[MAX_PLAYER_NAME]; GetPlayerName(playerid, aName, sizeof(aName)); GetPlayerName(id1, pName, sizeof(pName)); GetPlayerName(id2, p2Name, sizeof(p2Name)); GetPlayerPos(id2, Float:x, Float:y, Float:z); if(IsPlayerInAnyVehicle(id1)) { SetVehicleToRespawn(GetPlayerVehicleID(playerid)); } SetPlayerPos(id1, Float:x, Float:y, Float:z); if(playerid != id1 && playerid != id2) { format(string, sizeof(string), "> L'administrateur %s a téléporté %s à vous.", aName, pName); SendClientMessage(id2, GREEN, string); format(string, sizeof(string), "> L'administrateur %s vous à téléporté à %s.", aName, p2Name); SendClientMessage(id1, GREEN, string); } else if(id1 == playerid) { format(string, sizeof(string), "> L'administrateur %s s'est téléporté à vous.", aName); SendClientMessage(id2, GREEN, string); format(string, sizeof(string), "> Vous avez été téléporté à %s.", p2Name); SendClientMessage(id1, GREEN, string); } else { format(string, sizeof(string), "> L'administrateur %s vous a téléporté à lui.", aName); SendClientMessage(id1, GREEN, string); format(string, sizeof(string), "> Vous avez téléporté %s à vous.", pName); SendClientMessage(id2, GREEN, string); } } else { SendClientMessage(playerid, RED, "> Erreur. ID Invalide.");} } else { SendClientMessage(playerid, RED, "> Erreur. Cette commande est réservée aux administrateurs."); } } dcmd_unban(playerid, params[]) { if(IsAdmin(playerid) >= ADMIN_RANK) { if(!strlen(params)) { SendClientMessage(playerid, RED, "> Erreur. Usage : /unban [Nom]."); } else { new userFile[MAX_PLAYER_NAME+14], pName[MAX_PLAYER_NAME]; sscanf(params, "s[24]", pName); format(userFile, sizeof(userFile), "\\Users\\%s.ini", pName); if(dini_Exists(userFile)) { if(dini_Int(userFile, "banned")) { dini_IntSet(userFile, "banned", 0); new string[256]; if(dini_Int(userFile, "Warns"))//Si le joueur a été banni par avertisements il est norml de lui retirer ceux-ci lors de son débanissement { dini_IntSet(userFile, "Warns", 0); } format(string, sizeof(string), "> %s a été débanni du serveur.", pName); SendClientMessageToAll(GREEN, string); } else { SendClientMessage(playerid, RED, "> Erreur. Ce joueur n'est pas banni.");} } else { SendClientMessage(playerid, RED, "> Erreur. Ce joueur n'est pas enregistré");} } } else { SendClientMessage(playerid, RED, "> Erreur. Cette commande est résérvée aux administrateurs."); } return 0; } dcmd_warn(playerid, params[]) { if(!strlen(params)) { SendClientMessage(playerid, RED, "Erreur. Usage : /warn [PlayerID][Raison]."); } else if(IsAdmin(playerid) >= MODO_RANK) { new warnedId, pName[MAX_PLAYER_NAME], file[sizeof(pName)+14], aName[MAX_PLAYER_NAME], string[256], reason[250]; sscanf(params, "rs[256]", warnedId, reason); if(IsPlayerConnected(warnedId) && (!IsAdmin(warnedId))) { GetPlayerName(playerid, aName, sizeof(aName)); GetPlayerName(warnedId, pName, sizeof(pName)); dini_IntSet(userfile(playerid), "Warns", dini_Int(userfile(playerid), "Warns")); format(string, sizeof(string), "> L'administrateur %s a donné un avertisement à %s (%d/3) pour le motif suivant: %s", aName, pName,dini_Int(file, "Warns") ,reason); SendClientMessageToAll(RED, string); if(dini_Int(file, "Warns") > ADMIN_RANK) { dini_IntSet(userfile(playerid), "banned", 1); GetPlayerName(playerid, aName, sizeof(aName)); GetPlayerName(warnedId, pName, sizeof(pName)); format(reason, sizeof(reason), "%s (3 Avertisement)", reason); format(string, sizeof(string), "> L'administrateur %s a banni %s du serveur (Raison : %s).", aName, pName, reason); SendClientMessageToAll(RED, string); ban(warnedId, reason); } } else{SendClientMessage(playerid, RED, "> Erreur .Joueur non connecté ou ID Invalide.");} } else { SendClientMessage(playerid, RED, "> Erreur. Cette commande est résérvée aux modérateurs"); } } dcmd_arme(playerid, params[]) { if(IsAdmin(playerid) >= ADMIN_RANK) { new weaponId; sscanf(params, "i", weaponId); if(weaponId > 0 && weaponId < 47) { GivePlayerWeapon(playerid, weaponId, 99999999999);//Si tu manque de munition.... (valeur dangereuse ?) } else{SendClientMessage(playerid, RED, "> Erreur. ID Arme invalide.");} } else{SendClientMessage(playerid, RED, "> Erreur. Cette commande est réservée aux administrateurs.");} } dcmd_mute(playerid, params[]) { if(IsAdmin(playerid) >= MODO_RANK) { new mutedId; sscanf(params, "r", mutedId); if(IsPlayerConnected(mutedId) && (!IsAdmin(mutedId))) { if(GetPVarInt(mutedId, "muted")) { SetPVarInt(mutedId, "muted", 0); dini_IntSet(userfile(mutedId), "muted", 0); SendClientMessage(playerid, GREEN, "> Joueur dé-muté avec succès."); SendClientMessage(mutedId, GREEN, "> Vous avez été dé-muté."); } else { SetPVarInt(mutedId, "muted", 1); dini_IntSet(userfile(mutedId), "muted", 1); SendClientMessage(playerid, GREEN, "> Joueur muté avec succès"); SendClientMessage(mutedId, RED, "> Vous avez été muté."); } } } else{ SendClientMessage(playerid, RED, "> Commande réservée aux modérateurs.");} } public OnPlayerText(playerid, text[]) { if(GetPVarInt(playerid, "muted")) { SendClientMessage(playerid, RED, "Vous ête mutez"); return 0; } //Part by hunterfalcon if(text[0] == ':') { new name[24], string[128]; GetPlayerName(playerid, name, 24); format(string, sizeof(string), "[Admin]%s: %s", name, text[1]); printf("%s", string); if(IsAdmin(playerid) >= 1) { for(new i = 0; i < pConnected; i++) { if(IsAdmin(i) >= MODO_RANK) { SendClientMessage(i, BLUE, string); } } return 0; } } if(text[0] == '>') { new string[128]; format(string, sizeof(string), "[Annonce]%s", text[1]); printf("%s", string); if(IsAdmin(playerid) >= MODO_RANK) { SendClientMessageToAll(YELLOW, string); } return 0; } //TY Hunter return 1; } IsAdmin(playerid)//Le dev' est un fénéant, c'est bien connue ;) { return GetPVarInt(playerid, "admin"); } userfile(playerid)//La c'est plus de l'inteligence que de la fénéantise ... { new string[250], pName[MAX_PLAYER_NAME]; GetPlayerName(playerid, pName, sizeof(pName)); format(string, sizeof(string), "\\Users\\%s.ini", pName); return string; //A adapter a votre systeme d'enregistrement } public ban(playerid, reason[250])//Bah...on va pas retaper ces trois lignes à chaque fois qu'on veux bannire un joueur ... { dini_IntSet(userfile(playerid), "banned", 1); dini_Set(userfile(playerid), "banReason", reason); Kick(playerid); //A adapter a votre systeme d'enregistrement } public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid) { if(GetPVarInt(playerid, "god")) { SetPlayerHealth(playerid, 999999999); }//C'est plus un Dieu la... c'est presque Chuck (excusez moi maitre Noriss 8D) } public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ) { if(IsAdmin(playerid)>= ADMIN_RANK && GetPVarInt(playerid, "tpenabled")) { SetPlayerPosFindZ(playerid, fX, fY, fZ); } }