Jujuv icon

[SA:MP | FS | DROPED] jAdmin

Jujuv | PRO | 03/21/12 01:59:35 PM UTC | 0 ⭐ | 263 👁️ | Never ⏰ | []
Pawn |

14.62 KB

|

None

|

0 👍

/

0 👎

#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

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎