Tessék egy példa:
#include <a_samp>
#include <zcmd>
#include <dini>
#include <sscanf2>
#define DialogAdminPass 1 //definiáljuk a dialogot, ami akkor jelenik meg ha az admin lespawnol
#define PlayersFile \"Players/%s.ini\" //definiáljuk a mentés helyét. Jelenleg itt a Scriptfiles mappában létre kell hozni egy Players mappát és azon belül fogja létrehozni a fájlt.Ez modosítsd arra amire neked kell
enum pdata
{
Password[32] //Itt eltároljuk a jelszót
};
new Players[MAX_PLAYERS][pdata];
new bool:firstspawn[MAX_PLAYERS]; //ez azért kell, hogy ellenőrizhessük, hogy az admin először lép be.Ez azért jó mert csak akkor jeleníti meg a dialogot, miután az admin belépett a szerverre és 1. lespawnol
new file[56];
public OnPlayerConnect(playerid)
{
firstspawn[playerid] = false; //itt false-re állítjuk a változót, azért, hogy még az admin nem spawnolt le egyszer sem
return 1;
}
public OnPlayerSpawn(playerid)
{
if(IsPlayerAdmin(playerid) && firstspawn[playerid] == false) //itt amikor spawnol az admin ellenőrzni, hogy admin-e és, hogy spawnolt-e már le egyszer is. Az IsplayerAdmin változtatható ha saját admin rendszered van [A dialog csak akkor jelenik meg ha a játékos RCON Admin
{
ShowPlayerDialog(playerid, DialogAdminPass, DIALOG_STYLE_INPUT, \"Bejelentkezés adminként:\", \"Írd be az admin jelszavad:\", \"Belép\", \"Kilép\"); //itt megjelenítjük a dialogot
}
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DialogAdminPass)
{
if(!response)
{
Kick(playerid); //ha az admin arra a lép a dialogba, hogy kilépés, akkor a szerver kidobja a játékost
}
else
{
if(strlen(inputtext))
{
format(file, 56, PlayersFile, PlayerName(playerid));
if(!strcmp(inputtext, dini_Get(file, \"password\"), true)) //itt betöltjük a jelszvát és lekérdezzük, hogy egyezik-e a beírt jelszó a mentett jelszóval
{
SendClientMessage(playerid, -1, \"Sikeres belépés adminként\"); //ha igen akkor küldünk neki egy üzenetet, hogy belépett és
firstspawn[playerid] = true; //a változót true-ra állítjuk, azaz, a játékos lespawnolt és helyesen beírta a jelszót
}
else
{
SendClientMessage(playerid, -1, \"Hibás jelszó\"); //ha nem egyezik a beírt jelszó a mentett jelszóval akkor küldünk egy hiba üzenetet és
ShowPlayerDialog(playerid, DialogAdminPass, DIALOG_STYLE_INPUT, \"Bejelentkezés adminként:\", \"Írd be az admin jelszavad:\", \"Belép\", \"Kilép\"); //újra megjenítjük neki a dialogot
}
}
else
{
SendClientMessage(playerid, -1, \"Hibás jelszó\"); //ha az admin nem írt be semmit akkor küldük neki egy hiba üzenetet és
ShowPlayerDialog(playerid, DialogAdminPass, DIALOG_STYLE_INPUT, \"Bejelentkezés adminként:\", \"Írd be az admin jelszavad:\", \"Belép\", \"Kilép\"); //újra megjelenítjük neki a dialogot
}
}
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
firstspawn[playerid] = false; //ha a játékos kilép akkor a változót false-ra állítjuk, azaz a játékos még nem spawnolt le
format(file, 56, PlayersFile, PlayerName(playerid));
dini_Set(file, \"password\", Players[playerid][Password]); //itt pedig mentjük az admin jelszót
return 1;
}
CMD:setadminpass(playerid, params[]) //itt az admin jelszó váltó parancs
{
new passtext[64];
if(IsPlayerAdmin(playerid)) //lekérjük hogy a játékos admin-e
{
if (sscanf(params, \"u[64]\", passtext)) SendClientMessage(playerid, -1, \"Használat: /setadminpass \'Admin Jelszó\'\"); //ha az admin helytelenül használja a parancsot akkor küldünk neki egy hibaüzenetet
else
{
Players[playerid][Password] = strlen(passtext); //ha az admin jól használja a parancsot akkor beállítjuk neki az új jelszót és
format(file, 56, PlayersFile, PlayerName(playerid));
dini_Set(file, \"password\", Players[playerid][Password]); // itt mentjük is
}
}
return 1;
}
stock PlayerName(playerid) //ez itt pedig arra szolgál, hogy így egyszerűbb a játékos nevét lekérni
{
new name[24];
GetPlayerName(playerid, name, 24);
return name;
}