#define FILTERSCRIPT
#include <a_samp>
#include <sscanf2>
#include <dini>
#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);
}
}
Comments
0 B
|👍
/👎