//-----------------------------Inclusion des librairies-------------------------// #include #include //-------------------Directive de preprocesseur particuliéres------------------// #pragma unused ret_memcpy //-----------------------------Definitions de consstantes-----------------------// #define DIALOG_REGISTER 1 #define DIALOG_LOGIN 2 #define DIALOG_REGISTER_SECUR 3 #define MIN_PASS_LEN 6//Taille minimum d'un mot de passe //-----------------------------Definitions de macros---------------------------// #define LOGIN_MSG "Veuillez entrer votre mot de passe afin de vous connecter" #define REGISTER_MSG "Veuillez entrer un mot de passe afin de vous enregistrer" #define REGISTER_SECUR_MSG "Veuillez retaper votre mot de passe à l'identique (sécurité)" #define REGISTER_SECUR_FAILED_MSG "Le mot de passe entrer ne coresspond pas à celui entrer précédaient\n Veuiller taper deux fois le même mot de passe" #define IS_CONNECTED "logued" //-----------------------------Prototype de fonctions publiques-----------------// forward IsPlayerLoguedIn(playerid); //------------------------------------Let's go---------------------------------// main() { print("\n--------------------------------------"); print(" (^o^) Simple registering system by Jujuv (^o^)"); print("--------------------------------------\n"); return 1; } public OnPlayerConnect(playerid) { SetPVarInt(playerid, IS_CONNECTED, 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 { ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", LOGIN_MSG, "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", REGISTER_MSG, "Ok", "");//On demande au joueur de saisir un mot de passe pour s'inscrire } return 1; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { new pName[MAX_PLAYER_NAME]; GetPlayerName(playerid, pName, sizeof(pName)); switch(dialogid) { case DIALOG_LOGIN: { if(response)//Si le joueur a cliqué sur le bouton de gauche ("ok") { if(udb_CheckLogin(pName, inputtext))//Si le mot de passe est correct { new pIp[MAX_STRING]; GetPlayerIp(playerid, pIp, sizeof(pIp));//On récupére l'adresse IP du joueur SetPVarInt(playerid, IS_CONNECTED, 1);//Le joueur est connécté if(strcmp(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 on adresse IP } } else//Sinon (le mot de passe est incorrect) { ShowPlayerDialog(playerid, DIALOG_STYLE_PASSWORD, DIALOG_LOGIN, "Mot de passe incorrect", LOGIN_MSG, "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) >= MIN_PASS_LEN)//Si le mot de passe est assez long { ShowPlayerDialog(playerid, DIALOG_STYLE_PASSWORD, DIALOG_REGISTER_SECUR, "Securité", REGISTER_SECUR_MSG, "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_STYLE_PASSWORD, DIALOG_REGISTER, "Mot de passe trop court", REGISTER_MSG, "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(!strcmp(inputtext, pwd) && strlen(pwd) && strlen(inputtext))//Si le mot de passe rentré la 1er fois est bien le même que celui rentré la seconde { new pIp[MAX_STRING]; GetPlayerIp(playerid, pIp, sizeof(pIp));//On récupére l'adresse IP du joueur udb_Create(pName, inputtext);//On créer son compte 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 DeletePVar(playerid, "passCheck");//On supprime la PVar qui stockais temporairement la 1er saisie de son mot de passe } else//Sinon (le mot de passe ne corespond pas au 1er entré) { ShowPlayerDialog(playerid, DIALOG_STYLE_PASSWORD, DIALOG_REGISTER, "Mot de passe incorrect", REGISTER_SECUR_FAILED_MSG, "Ok", "");//Retour à la case départ! } } } return 1; } public 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, IS_CONNECTED)) { return true; } else{ return false;} }