Jujuv icon

[SA:MP | GM] Base-GM

Jujuv | PRO | 04/24/12 08:12:22 PM UTC | 0 ⭐ | 896 👁️ | Never ⏰ | []
Pawn |

20.81 KB

|

None

|

0 👍

/

0 👎

//-----------------------------Inclusion des librairies-------------------------//
#include <a_samp>
#include <dudb>
#include <a_http>
 
//-------------------Directive de preprocesseur particuliéres------------------//
#pragma unused ret_memcpy
 
//---------------------------------Enumérations--------------------------------//
enum
{
    DIALOG_REGISTER,
    DIALOG_LOGIN,
    DIALOG_REGISTER_SECUR,
    DIALOG_AUTO_LOGIN,
    DIALOG_ADMIN_MENU,
    DIALOG_PM_INPUT,
    DIALOG_PM_SENT,
    DIALOG_PM_FAILED,
    DIALOG_VOTE_KICK_CONFIRM,
    DIALOG_VOTE_KICK_SENT,
    DIALOG_VOTE_KICK_FAILED,
    DIALOG_PLAYER_MENU,
    DIALOG_ADMIN_SET,
    DIALOG_BAN_CONFIRM,
    DIALOG_DEL_ACCOUNT_CONFIRM,
    DIALOG_DEL_ACCOUNT_DONE,
    DIALOG_UNBAN_INPUT,
    DIALOG_UNBAN_DONE,
    DIALOG_CFG_MENU,
    DIALOG_CFG_VOTE_KICK_DELAY,
    DIALOG_CFG_VOTE_KICK_NEEDED,
    DIALOG_CFG_DEFAULT_MONEY,
    DIALOG_CFG_MIN_PASS_LEN,
    DIALOG_GLOBAL_OP_DONE_MSG,
}
enum
{
    MEMBER,
    MODO,
    ADMIN
}
 
//-----------------------------Definitions de macros---------------------------//
#define COLOR_YELLOW 0xFFD200FF
#define COLOR_RED 0xFF1E00FF
 
#define CFGFILE "global.cfg"
#define GM_NAME "Simple Base 0.4"
#define playerClickedID GetPVarInt(playerid, "playerClickedID")
#define OP_DONE_MSG ShowPlayerDialog(playerid, DIALOG_GLOBAL_OP_DONE_MSG, DIALOG_STYLE_MSGBOX, "Operation réussie", "Opération réussie !", "Ok", "");//La fénéantise incarnée
 
//-----------------------------Prototype de fonctions publiques-----------------//
forward AbortVoteKick(votedPlayerID);
 
//-----------------------------Definitions de variables globales---------------//
new gAdminsConnected = 0;
new gMaxPlayers = 0;
new gDefaultMoney;
new gVoteKickDelay;
new gNeededVotesToKick;
new gMinPassLen;
 
//------------------------------------Let's go---------------------------------//
 
 
main()
{
    print("\n--------------------------------------");
    print(" (^o^) Simple base-mode by Jujuv (^o^)");
    print("--------------------------------------\n");
    return 1;
}
 
public OnGameModeInit()
{
    SetGameModeText(GM_NAME);
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    
    if(!dini_Exists(CFGFILE))
    {
        dini_Create(CFGFILE);
        dini_IntSet(CFGFILE, "StartingMoney", 500);
        dini_IntSet(CFGFILE, "VoteKickDelay", 60);
        dini_IntSet(CFGFILE, "NeededVotesToKick", 50);
        dini_IntSet(CFGFILE, "MinPassLen", 6);
        print("Fichier de configuration global par défaut, crée");
    }
    else
    {
        gDefaultMoney = dini_Int(CFGFILE, "StartingMoney");
        gVoteKickDelay = dini_Int(CFGFILE, "VoteKickDelay");
        gNeededVotesToKick = dini_Int(CFGFILE, "NeededViotesToKick");
        gMinPassLen = dini_Int(CFGFILE, "MinPassLen");
        print("Configuration chargé");
    }
    return 1;
}
 
public OnPlayerConnect(playerid)
{
    if(gMaxPlayers < playerid)
        gMaxPlayers = playerid;
    
    SetPVarInt(playerid, "logued", 0);//Cette PVar est un booleen indiquant si le joueur esr logué ou non
    new pName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pName, sizeof(pName));
    if(udb_Exists(pName))//S'il existe dèja un compte ascosié à ce pseudonyme
    {
        if(udb_UserInt(pName, "Banned"))
        {
            SendClientMessage(playerid, COLOR_YELLOW, "Ce nom d'utilisateur est banni");
            Kick(playerid);
        }
        
        else
        {
            new pIp[MAX_STRING];
            GetPlayerIp(playerid, pIp, sizeof(pIp));
            
            if(AreStringsEquals(udb_User(pName, "Last_IP"), udb_User(pName, "Registered_IP")) && AreStringsEquals(pIp, udb_User(pName, "Last_IP")))//Si la derniére IP connue du joueur est egale à celle avec laquelle il s'est inscrit et si celle-ci est egale à son IP actuelle
            {
                SetPVarInt(playerid, "logued", 1);
                ShowPlayerDialog(playerid, DIALOG_AUTO_LOGIN, DIALOG_STYLE_MSGBOX, "Login", "Vous avez été connécté automatiquement à votre compte", "Ok", "");
            }
            else
                ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Veuillez entrer votre mot de passe afin de vous connecter", "Ok", "");//On demande au joueur de se loguer en entrant son mot de passe
        }
        
    }
    else//Sinon (le joueur n'a donc pas de compte)
    ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Enregistrement", "Veuillez entrer un mot de passe afin de vous enregistrer", "Ok", "");//On demande au joueur de saisir un mot de passe pour s'inscrire
    
    return 1;
}
 
public OnPlayerDisconnect(playerid, reason)
{
    if(IsAdmin(playerid)) { gAdminsConnected--; }
    if(GetPVarInt(playerid, "VoteCount") > 0) { ResetVoteKick(); }
    
    if(playerid == gMaxPlayers)
    {
        for(new i = gMaxPlayers-1; i >= 0; i--)//TY Mini'.J'ai juste CC et changé le nom d'la var
        {
            if(IsPlayerConnected(i))
            {gMaxPlayers = i; break;}
        }
    }
}
 
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case DIALOG_LOGIN:
        {
            if(response)//Si le joueur a cliqué sur le bouton de gauche ("ok")
            {
                new pName[MAX_PLAYER_NAME];
                GetPlayerName(playerid, pName, sizeof(pName));
                
                if(udb_CheckLogin(pName, inputtext))//Si le mot de passe est correct
                OnPlayerLogin(playerid);
                else//Sinon (le mot de passe est incorrect)
                ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Mot de passe incorrect", "Veuillez entrer votre mot de passe afin de vous connecter", "Ok", "Annuler");//On demande au joueur de rentrer son mot de passe à nouveau
            }
            else
                Kick(playerid);//Sinon (il a cliqué sur le bouton de droite: "Annuler")
        }
        case DIALOG_REGISTER:
        {
            SetPVarString(playerid, "passCheck", inputtext);//On stocke le mot de passe dans une PVar temporaire
            
            if(strlen(inputtext) >= gMinPassLen)//Si le mot de passe est assez long
            ShowPlayerDialog(playerid, DIALOG_REGISTER_SECUR, DIALOG_STYLE_PASSWORD, "Securité", "Veuillez retaper votre mot de passe à l'identique (sécurité)", "Ok", "");//On demande au joueur de retaper le même mot de passe
            else//Sinon on demande au joueur d'en choisir un autre
            ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Mot de passe trop court", "Veuillez entrer un mot de passe afin de vous enregistrer", "Ok", "");
        }
        case DIALOG_REGISTER_SECUR:
        {
            new pwd[MAX_STRING];
            GetPVarString(playerid, "passCheck", pwd, sizeof(pwd));//On récupére le mot de passe stocké précédament
            
            if(AreStringsEquals(inputtext, pwd))//Si le mot de passe rentré la 1er fois est bien le même que celui rentré la seconde
            {
                new pName[MAX_PLAYER_NAME];
                GetPlayerName(playerid, pName, sizeof(pName));
                
                udb_Create(pName, inputtext);//On créer son compte
                DeletePVar(playerid, "passCheck");//On supprime la PVar qui stockais temporairement la 1er saisie de son mot de passe
                SetPVarInt(playerid, "logued", 1);
                OnPlayerRegister(playerid);
                OnPlayerLogin(playerid);
            }
            else//Sinon (le mot de passe ne corespond pas au 1er entré)
            ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,  "Mot de passe incorrect", "Le mot de passe entrer ne coresspond pas à celui entrer précédaient\n Veuiller taper deux fois le même mot de passe", "Ok", "");//Retour à la case départ!
        }
        case DIALOG_PM_INPUT:
        {
            if(response)
            {
                if(!strlen(inputtext)) { ShowPlayerDialog(playerid, DIALOG_PM_FAILED, DIALOG_STYLE_MSGBOX, "Echc de l'envoie", "Echec de l'envoie du message (message vide)", "Ok", ""); }
                else if(!IsPlayerConnected(playerClickedID)) {ShowPlayerDialog(playerid, DIALOG_PM_FAILED, DIALOG_STYLE_MSGBOX, "Echc de l'envoie", "Echec de l'envoie du message (joueur non connécté ou ID invalide)", "Ok", "");}
                else
                {
                    new pName[MAX_PLAYER_NAME], receiverName[MAX_PLAYER_NAME], msgFormated[MAX_STRING];
                    GetPlayerName(playerid, pName, sizeof(pName));
                    GetPlayerName(playerClickedID, receiverName, sizeof(receiverName));
                    
                    format(msgFormated, sizeof(msgFormated), "[Message Privé]%s: %s", pName, inputtext);
                    SendClientMessage(playerClickedID, COLOR_YELLOW, msgFormated);
                    format(msgFormated, sizeof(msgFormated), "[Surveillance] MP de %s à %s: %s", pName, receiverName, inputtext);
                    SendMessageToAdmins(msgFormated);
                    ShowPlayerDialog(playerid, DIALOG_PM_SENT, DIALOG_STYLE_MSGBOX, "Message envoyé", "Message envoyé", "Ok", "");
                }
            }
        }
        case DIALOG_PLAYER_MENU:
        {
            switch(listitem)
            {
                case 0:
                {
                    ShowPlayerDialog(playerid, DIALOG_PM_INPUT, DIALOG_STYLE_INPUT, "Message Privé", "Entrez le texte de votre message:", "Envoyer", "Annuler");
                }
                case 1:
                {
                    ShowPlayerDialog(playerid, DIALOG_VOTE_KICK_CONFIRM, DIALOG_STYLE_MSGBOX, "Confirmation", "Etes vous certain de vouloir faire cela ?", "Oui", "Non");
                }
            }
            
        }
        case DIALOG_VOTE_KICK_CONFIRM:
        {
            if(response)
            {
                OnPlayerVoteKick(playerid);
            }
        }
        case DIALOG_ADMIN_MENU:
        {
            switch(listitem)
            {
                case 0://Mettre Admin
                {
                    if(GetAdminRank(playerid) >= ADMIN && GetAdminRank(playerClickedID) < ADMIN )
                    {
                        ShowPlayerDialog(playerid, DIALOG_ADMIN_SET, DIALOG_STYLE_LIST, "Choisisez:", "Membre\r\nModerateur\r\nAdministrateur\r\n", "Valider", "Annuler");
                    }
                }
                case 1://Expulser
                {
                    if(GetAdminRank(playerClickedID) == MEMBER)
                    {
                        new msg[MAX_STRING], pName[MAX_PLAYER_NAME];
                        GetPlayerName(playerClickedID, pName, sizeof(pName));
                        format(msg, sizeof(msg), "[Administration]%s a été éxpulsé du serveur par un moderateur ou un administrateur", pName);
                        SendClientMessageToAll(COLOR_YELLOW, msg);
                        Kick(playerid);
                    }
                }
                case 2://Bannir
                {
                    if(GetAdminRank(playerClickedID) == MEMBER)
                    {
                        ShowPlayerDialog(playerid, DIALOG_BAN_CONFIRM, DIALOG_STYLE_MSGBOX, "Confirmation", "Etes vous certains de vouloir bannir ce joueur ?", "Oui", "Non");
                    }
                }
                case 3://Supprimer le compte utilisateur
                {
                    ShowPlayerDialog(playerid, DIALOG_DEL_ACCOUNT_CONFIRM, DIALOG_STYLE_MSGBOX, "Confirmation", "Etes vous certains de vouloir supprimer ce compte utilisateur ?", "Oui", "Non");
                }
                case 4:
                {
                    new Float:x, Float:y, Float:z;
                    GetPlayerPos(playerClickedID, x, y, z);
                    SetPlayerPosFindZ(playerid, x+random(20), y+random(20), z);
                }
                case 5:
                {
                    if(IsPlayerLoguedIn(playerClickedID))
                    {
                        if(playerid == playerClickedID)
                        {
                            TogglePlayerSpectating(playerid, 0);
                        }
                        else
                        {
                            TogglePlayerSpectating(playerid, 1);
                            PlayerSpectatePlayer(playerid, playerClickedID);
                        }
                    }
                }
            }
        }
        case DIALOG_ADMIN_SET:
        {
            switch(listitem)
            {
                case 0://membre
                {
                    SetAdminRank(playerClickedID, MEMBER);
                }
                case 1://modo
                {
                    SetAdminRank(playerClickedID, MODO);
                }
                case 2://admin
                {
                    SetAdminRank(playerClickedID, ADMIN);
                }
            }
        }
        case DIALOG_BAN_CONFIRM:
        {
            if(response)
            {
                new pName[MAX_PLAYER_NAME], msg[MAX_STRING];
                GetPlayerName(playerClickedID, pName, sizeof(pName));
                format(msg, sizeof(msg), "[Administration]%s a été banni(e) du serveur", pName);
                udb_UserSetInt(pName, "Banned", 1);
                Kick(playerClickedID);
            }
        }
        case DIALOG_DEL_ACCOUNT_CONFIRM:
        {
            if(response && !IsAdmin(playerClickedID))
            {
                new pName[MAX_PLAYER_NAME];
                GetPlayerName(playerClickedID, pName, sizeof(pName));
                if(IsPlayerConnected(playerClickedID)) { Kick(playerClickedID); }
                udb_Remove(pName);
                ShowPlayerDialog(playerid, DIALOG_DEL_ACCOUNT_DONE, DIALOG_STYLE_MSGBOX, "Tache éfféctué", "Compte supprimé avec succés", "Ok", "");
            }
        }
        case DIALOG_UNBAN_INPUT:
        {
            if(response)
            {
                if(udb_Exists(inputtext))
                {
                    if(udb_UserInt(inputtext, "Banned"))
                    {
                        udb_UserSetInt(inputtext, "Banned", 0);
                        ShowPlayerDialog(playerid, DIALOG_UNBAN_DONE, DIALOG_STYLE_MSGBOX, "Debanissement" ,"Joueur débanni avec succés", "Ok", "");
                    }
                    else{ SendClientMessage(playerid, COLOR_YELLOW, "[Erreur] Ce compte n'est pas banni"); }
                }
                else{ SendClientMessage(playerid, COLOR_RED, "[Erreur] Ce compte n'est pas enregistré"); }
            }
        }
        case DIALOG_CFG_MENU:
        {
            switch(listitem)
            {
                case 0://voteKickDelay
                {
                    ShowPlayerDialog(playerid, DIALOG_CFG_VOTE_KICK_DELAY, DIALOG_STYLE_INPUT, "Configuration", "Entrer une valeur (en secondes):", "Valider", "Annuler");
                }
                case 1://VotesKickNeeded
                {
                    ShowPlayerDialog(playerid, DIALOG_CFG_VOTE_KICK_NEEDED, DIALOG_STYLE_INPUT, "Configuration", "Enttrez une valeur (int):", "Valider", "Annuler");
                }
                case 2://MinPassLen
                {
                    ShowPlayerDialog(playerid, DIALOG_CFG_MIN_PASS_LEN, DIALOG_STYLE_INPUT, "Configuration", "Entrez une valeur (int):", "Valider", "Annuler");
                }
                case 3://DefaultMoney
                {
                    ShowPlayerDialog(playerid, DIALOG_CFG_DEFAULT_MONEY, DIALOG_STYLE_INPUT, "Configuration", "Entrez une valeur (int):", "Valider", "Annuler");
                }
            }
        }
        case DIALOG_CFG_VOTE_KICK_DELAY:
        {
            if(response)
            {
                if(strval(inputtext) >= 10)
                {
                    dini_IntSet(CFGFILE, "VoteKickDelay", strval(inputtext));
                    gVoteKickDelay = strval(inputtext);
                    OP_DONE_MSG
                }
            }
        }
        case DIALOG_CFG_VOTE_KICK_NEEDED:
        {
            if(response)
            {
                if(strval(inputtext) >= 10)
                {
                    dini_IntSet(CFGFILE, "VoteKickNeeded", strval(inputtext));
                    gNeededVotesToKick = strval(inputtext);
                    OP_DONE_MSG
                }
            }
        }
        case DIALOG_CFG_MIN_PASS_LEN:
        {
            if(response)
            {
                if(strval(inputtext) >= 5)
                {
                    dini_IntSet(CFGFILE, "MinPassLen", strval(inputtext));
                    gMinPassLen = strval(inputtext);
                    OP_DONE_MSG
                }
            }
        }
        case DIALOG_CFG_DEFAULT_MONEY:
        {
            if(response)
            {
                if(strval(inputtext) >= 0)
                {
                    dini_IntSet(CFGFILE, "StartingMoney", strval(inputtext));
                    gDefaultMoney = strval(inputtext);
                    OP_DONE_MSG
                }
            }
        }
    }//Ceci ferme le "switch" principale, faite y bien attention.
    return 1;
}
 
 
public OnPlayerUpdate(playerid)
{
    if(GetPVarInt(playerid, "voteCount") == gNeededVotesToKick)
    {
        new msg[MAX_STRING], pName[MAX_PLAYER_NAME];
        GetPlayerName(playerid, pName, sizeof(pName));
        Kick(playerid);
        format(msg, sizeof(msg), "%s a été éxpulsé du serveur aprés un vote", pName);
        SendClientMessageToAll(COLOR_YELLOW, msg);
    }
}
 
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
    SetPVarInt(playerid, "clickedplayerID", clickedplayerid);
    
    if(IsAdmin(playerid))
    {
        ShowPlayerDialog(playerid, DIALOG_ADMIN_MENU, DIALOG_STYLE_LIST, "Menu d'Administration", "Mettre Admin\r\nExpulser\r\nBannir\r\nSupprimer le compte\r\nSe TP au joueur\r\nObserver le joueur (Spec)\r\n", "Ok", "Annuler");
    }
    else if(!gAdminsConnected)
    {
        ShowPlayerDialog(playerid, DIALOG_PLAYER_MENU, DIALOG_STYLE_LIST, "Que voulez-vous faire ?", "Envoyer un MP\r\nVoter pour l'expulsion", "Ok", "");
    }
    else
    {
        ShowPlayerDialog(playerid, DIALOG_PM_INPUT, DIALOG_STYLE_INPUT, "Message Privé", "Entrez le texte de votre message:", "Envoyer", "Annuler");
    }
    
}
 
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(AreStringsEquals("/deban", cmdtext))
    {
        if(GetAdminRank(playerid) == ADMIN)
        {
            ShowPlayerDialog(playerid,  DIALOG_UNBAN_INPUT, DIALOG_STYLE_INPUT, "Debanissement",  "Veuillez renseigner le pseudonyme du joueur à debannir:", "Debannir", "Annuler");
        }
        else { SendClientMessage(playerid, COLOR_RED, "[Erreur]Cette commande est résérvé aux administrateurs"); }
    }
    else if(AreStringsEquals("/tp", cmdtext))
    {
        if(IsAdmin(playerid)) { SetPVarInt(playerid, "tpenabled", 1); }
    }
    else if(AreStringsEquals("/cfg", cmdtext))
    {
        if(GetAdminRank(playerid) >= ADMIN) { ShowPlayerDialog(playerid, DIALOG_CFG_MENU, DIALOG_STYLE_LIST, "Configuration:", "VoteKick Delay\r\nVotesKick Neededr\nMin Password Lenght\r\nDefault Money\r\n", "Ok", ""); }
    }
    
    else
    {
        SendClientMessage(playerid, COLOR_RED, "[Erreur]Commande innexistante");
    }
    return 1;
}
stock IsPlayerLoguedIn(playerid)//Cette fonction permet de verifier facilement si un joueurs est logué ou non
{
    /*
    NB: Il est recommandé d'utiliser directement la PVar pour savoir si
    le joueur est logué ou non à partir d'un autre fichier.
    */
    
    if(GetPVarInt(playerid, "logued") && IsPlayerConnected(playerid))
    {
        return true;
    }
    else{ return false;}
}
 
stock AreStringsEquals(string1[], string2[])
{
    
    /*
    NB: la fonction strcmp() retournant egalement 0 si une des deux chaines de carractére est vide, il est important de verigier qu'aucune des deux ne soit vide
    */
    if(!strcmp(string1, string2) && strlen(string1) > 1 && strlen(string2) > 1)//Si les deux chaines de carractéres sont struictements identiques
    {
        return true;//on retourne vrais
    }
    else { return false;}//sinon, on retourne faux
    
}
 
stock SafeGivePlayerMoney(playerid, ammount)
{
    if(IsPlayerLoguedIn(playerid))
    {
        new pName[MAX_PLAYER_NAME];
        GetPlayerName(playerid, pName, sizeof(pName));
        udb_UserSetInt(pName, "Money", udb_UserInt(pName, "Money")+ammount);
        
        SetPlayerMoney(playerid, udb_UserInt(pName, "Money"));
        return udb_UserInt(pName, "Money");
    }
    else{ return false;}
}
 
stock IsAdmin(playerid)
{
    if(GetAdminRank(playerid) > MEMBER)
    {
        return true;
    }
    else{ return false;}
}
 
stock OnPlayerLogin(playerid)
{
    new pName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pName, sizeof(pName));
    
    new pIp[MAX_STRING];
    GetPlayerIp(playerid, pIp, sizeof(pIp));//On récupére l'adresse IP du joueur
    
    SetPVarInt(playerid, "logued", 1);//Le joueur est connécté
    SetPVarInt(playerid, "Admin", udb_UserInt(pName, "Admin"));
    SetPVarInt(playerid, "VoteCount", 0);
    SetPVarInt(playerid, "Voted", 0);
    
    if(IsAdmin(playerid))
    { gAdminsConnected++; SetPVarInt(playerid, "tpenabled", 0);}
    
    if(!AreStringsEquals(udb_User(pName, "Last_IP"),pIp))//Si son adresse IP est différente de la dérniére
    {
        udb_UserSet(pName, "Last_IP", pIp);//On conserve son adresse IP
    }
}
 
stock OnPlayerRegister(playerid)//Attention: Cette "callback" n'est appelé que si l'inscription a réussie
{
    new pName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pName, sizeof(pName));
    
    new pIp[MAX_STRING];
    GetPlayerIp(playerid, pIp, sizeof(pIp));//On récupére l'adresse IP du joueur
    udb_UserSet(pName, "Registered_IP", pIp);//On stocke son adresse IP d'enregistrement
    udb_UserSet(pName, "Last_IP", pIp);//Comme il viens de s'enregistrer, c'est à la fois son IP d'enregistrement et sa dérniére IP connue
    udb_UserSetInt(pName, "Money", gDefaultMoney);//On donne au joueur la somme d'argent de depart
    udb_UserSetInt(pName,"Admin", MEMBER);
    udb_UserSetInt(pName, "Banned", 0);
}
 
stock OnPlayerVoteKick(playerid)
{
    if(!GetPVarInt(playerid, "Voted") && IsPlayerLoguedIn(playerid))//Si le joueur n'a pas dèja voyé et qu'il est bien logué
    {
        SetPVarInt(playerid, "Voted", 1);//Cette PVar est un booleen indiquant si le joueur est en trains de participer à un "votekick"
        SetPVarInt(playerClickedID, "voteCount", GetPVarInt(playerClickedID, "voteCount")+1);//Cette PVar recensse le nombre de votes positives pour l'expulsion du joueur
        SetTimerEx("AbortVoteKick", gVoteKickDelay*1000, false, "i", playerClickedID);
        ShowPlayerDialog(playerid,  DIALOG_VOTE_KICK_SENT, DIALOG_STYLE_MSGBOX, "Vote envoyé",  "Votre vote a bien été pris en compte", "Ok", "");
    }
    else { ShowPlayerDialog(playerid, DIALOG_VOTE_KICK_FAILED, DIALOG_STYLE_MSGBOX, "Erreur", "Vous ne pouvez voter que pour un joueur à la fois", "Ok", ""); }
}
 
stock ResetVoteKick()//Cette fonction effectue une R-à-Z des "votekick"
{
    new i;
    for(i = 0; i <= gMaxPlayers;i++)
    {
        if(GetPVarInt(i, "Voted"))
        { SetPVarInt(i, "Voted", 0); }
    }
}
 
public AbortVoteKick(votedPlayerID)//Cette fonction permet d'annuler un "votekick"
{
    SetPVarInt(votedPlayerID, "VoteCount", 0);
    ResetVoteKick();
}
 
stock SetAdminRank(playerid, aRank)//Comme l'indique son nom, cette fonction permet de definire le rang "Admin" d'un joueur
{
    new pName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pName, sizeof(pName));
    udb_UserSetInt(pName, "Admin", aRank);
    SetPVarInt(playerid, "Admin", aRank);
}
 
stock GetAdminRank(playerid)//Cette fonction permet de récupérer le rang "Admin" d'un joueur
{
    if(IsPlayerLoguedIn(playerid))
    {
        new pName[MAX_PLAYER_NAME];
        GetPlayerName(playerid, pName, sizeof(pName));
        
        
        
        if(udb_UserInt(pName, "Admin") != GetPVarInt(playerid, "Admin"))//Au cas où il y aurais un probléme
        { SetPVarInt(playerid, "Admin", udb_UserInt(pName, "Admin")); }
        return GetPVarInt(playerid, "Admin");
    }
    else{ return -1; }
    
}
 
stock OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
{
    if(IsAdmin(playerid) && GetPVarInt(playerid, "tpenabled"))
    {
        SetPlayerPosFindZ(playerid, fX, fY, fZ);
    }
    
}
 
stock SendMessageToAdmins(msg[])
{
    new i;
    for(i = 0; i <= gMaxPlayers; i++)
    {
        if(IsAdmin(i))
        { SendClientMessage(i, COLOR_YELLOW, msg); }
    }
}

Comments

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

    0 B

    |

    👍

    /

    👎