Jump to content

Search the Community

Showing results for tags 'autologin'.

  • Search By Tags

    Oddělujte čárkami
  • Search By Author

Content Type


Fórum

  • Obecné
    • Všeobecné
    • Všechno možné
  • Programování
    • Poradna
    • Návody
    • Tvorba
    • Hledám programátora
  • Herní oblast
    • Poradna
    • Jak na to?
    • Herní kontext
    • Herní zážitky
    • Komunita
  • Grafika
    • Poradna
    • Návody
    • Tvorba
  • Ostatní
    • Hardware a software
    • Hledám/nabízím
    • Archiv
    • 3D Tisk

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Web


Facebook


Jabber


Skype


Steam


Twitter


Github


Pastebin

Found 1 result

  1. Ahoj, za pomoci uživatele Strike jsem dokončil svoji registraci přes DOF2 tak, aby byla plně funkční. Rozhodl jsem se, že když nikde není pořádně funkční TUT na Registraci s tímto systémem (ani na officialním fóru), tak že se s vámi o něm podělím Obsah: Registrace Ukládání základních statistik (peníze, adminlvl, zabití, úmrtí, IP) Ukládání pozice i s načítáním Autologin pomocí IP Na začátek si něco řekneme o tomto systému: DoF2(Double-o-Files) je vytvořen uživatelem oficiálního fóra Double-o-Seven (Němec) Jedná se o rychlejší a stabilnější verzi původního DoF 1) Potřebné funkce/podmínky DOF2_File(user[]) = Funkce, která definuje název souboru uživatele DOF2_CreateFile(file[],password[]="") = Fce, která vytvoří soubor (file), a uloží do tohoto souboru heslo (password) DOF2_CheckLogin(file[],password[]) = Podmínka, která zkontroluje heslo (password), v souboru (file) DOF2_FileExists(file[]) = Podmínka která zjistí zda soubor (file) existuje DOF2_SetFloat(file[],key[],Float:value) = Funkce která uloží do souboru (file) pod určitý klíč (key) určité desetiné číslo (float) DOF2_SetInt(file[],key[],value) = Funkce která uloží do souboru (file), pod určitý klíč (key), určitou celočíselnou hodnotu (value) DOF2_GetFloat(file[],key[]) = funkce která vyčte ze souboru (file) určitý klíč (key) ve tvaru desetiného čísla DOF2_GetInt(file[],key[]) = funkce která vyčte ze souboru (file) klíč (key) určitou celočíselnou hodnotu DOF2_SaveFile() = uloží soubor (musí být za celou sekcí nebo za samostatným nastavením (jakýkoliv Set...) 2) Předpříprava před psaním kódu a)Includujeme databáze příkazů: a_samp a dof2 b)Definujeme si určité barvy, které budeme chtít používat (V našem případě COLOR_CERVENA a COLOR_ZLUTA) c)Definujeme si hodnoty DIALOG_REGISTER a DIALOG_LOGIN d)Oddefinujeme si hodnotu MAX_PLAYER a definujeme novou, podle počtu slotů na serveru( #undef MAX_PLAYERS - #define MAX_PLAYERS 100) e)Definujeme si pozici pro ukládání souborů( #define USER_FILE_PATH "Users/%s.ini" - každopádně zanechejte %s, neboť to bude ve finále jméno hráče. Složku si upravte podle libosti ) 2) Samotný kód NEW-s: enum pInfo { pKills, pDeaths, pMoney, pAdmin, Float:x, Float:y, Float:z, } new PlayerInfo[MAX_PLAYERS][pInfo]; new pIP[MAX_PLAYERS][16]; OnFilterScriptInit SetTimer("ukladani", 60000, 0); V OnGameModeExit musí být: DOF2_Exit(); jinak by vám vyskakoval při compilaci error OnPlayerConnect: public OnPlayerConnect(playerid) { new name[20]; format(name, sizeof(name), "Hráč %s se úspěšně připojil na server!", GetPlayerName(playerid, name, sizeof(name))); //na serveru se vypíše zpráva o připojení hráče na server SendClientMessageToAll(COLOR_ZLUTA, name); printf("[sERVER]Hráč %s se připojil na server!" , GetPlayerName(playerid, name, sizeof(name)));//do konzole se vypíše zpráva o připojení hráče na serveru new file[64]; GetPlayerName(playerid,file,sizeof(file)); format(file,sizeof(file),DOF2_File(file)); if(DOF2_FileExists(file)) //podmínka, zda existuje soubor s hráčovým jménem { GetPlayerIp(playerid,pIP[playerid],16); //když existuje, zjistíme hráčovu IP if(strcmp(DOF2_GetString(file, "IP"),pIP[playerid],true) == 0)//Když se IP rovná IP v hráčově souboru { SendClientMessage(playerid, COLOR_CERVENA, "[AUTOLOGIN]Byl jsi úspěšně přihlášen.");//přihlásí to hráče a vypíše zprávu LoadData(playerid);//Načte hráčovy data } else//když se IP neshoduje { SendClientMessage(playerid, COLOR_CERVENA, "[AUTOLOGIN]Přihlášení se nezdařilo, přihlašte se pomocí hesla.");//přihlášení pomocí IP bude neúspěšné ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,"Prosím přihlašte se se!","{FFFFFF}Zde napište své {00FF22}heslo {FFFFFF}pro přihlášení ","Přihlásit","");//vyvolání dialogu pro manuální přihlášení } } else//když není soubor s hráčovým jménem { ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,"Vítejte, prosím registrujte se!","{FFFFFF}Zde napište své {00FF22}heslo {FFFFFF}pro registraci","Registrovat","");//vyvolá se dialog pro registraci hráče } return 1; } OnPlayerDisconnect: public OnPlayerDisconnect(playerid, reason) { new name[20]; format(name, sizeof(name), "Hráč %s se úspěšně připojil na server!", GetPlayerName(playerid, name, sizeof(name))); //na serveru se vypíše zpráva o odpojení hráče na server SendClientMessageToAll(COLOR_ZLUTA, name); printf("[sERVER]Hráč %s se odpojil ze serveru!" , GetPlayerName(playerid, name, sizeof(name))); //do konzole se vypíše zpráva o odpojení hráče na serveru SaveData(playerid);//Uložíme data hráče return 1; } OnPlayerSpawn: public OnPlayerSpawn(playerid) { if(PlayerInfo[playerid][x] == 0.0 && PlayerInfo[playerid][y] == 0.0)//když jsou v souboru uložené pozice X a Y rovny 0 (tutíž když není uložena pozice) { SetPlayerPos(playerid, -299.8857, 1015.5681, 19.5938);//hrač se spawne na této pozici } else//když jsou souřadnice jinné { SetPlayerPos(playerid, PlayerInfo[playerid][x], PlayerInfo[playerid][y], PlayerInfo[playerid][z]);//nastaví se pozice ze souboru } return 1; } OnPlayerDeath public OnPlayerDeath(playerid, killerid, reason) { PlayerInfo[killerid][pKills]++;//počet zabitých s každým dalším stoupne o 1 PlayerInfo[playerid][pDeaths]++;//počet úmrtí s každým dalším stoupne o 1 return 1; } OnDialogResponse public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { switch(dialogid) { case DIALOG_REGISTER: { if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,"Vítejte, prosím registrujte se!","{FFFFFF}Zde napište své {00FF22}heslo {FFFFFF}pro registraci","Registrovat","");//když hráč nezadá heslo, oběví se dialog pro zadání nového hesla if(response)//když hráč klikne na tlačítko { new file[64]; GetPlayerName(playerid,file,sizeof(file)); format(file,sizeof(file),DOF2_File(file)); DOF2_CreateFile(file, inputtext);//vytvoří se soubor s hráčovým jménem, a uloží se heslo z dialogu GetPlayerIp(playerid,pIP[playerid],16);//zjistíme hráčovu IP DOF2_SetString(file, "IP", pIP[playerid]);//uložíme hráčovu IP pod klíčem IP PlayerInfo[playerid][pKills] = DOF2_SetInt(file, "Kills", 0);//nastavíme počet zabitých (začátek = 0) PlayerInfo[playerid][pDeaths] = DOF2_SetInt(file, "Deaths", 0);//nastavíme počet úmrtí (začátek = 0) PlayerInfo[playerid][pMoney] = DOF2_SetInt(file, "Money", 1000);//nastavíme počáteční částku (v tomto případě 1000) DOF2_SetFloat(file, "LastX", 0);//nastavíme souřadnici na 0 (hráč ještě není spawnut) DOF2_SetFloat(file, "LastY", 0);//nastavíme souřadnici na 0 (hráč ještě není spawnut) DOF2_SetFloat(file, "LastZ", 0);//nastavíme souřadnici na 0 (hráč ještě není spawnut) DOF2_SaveFile();//uložíme soubor GivePlayerMoney(playerid, DOF2_GetInt(file, "Money"));//nastavíme hráči peníze dne registrace) } } case DIALOG_LOGIN: { if(response)//když hráč klikne na tlačítko { new file[64]; GetPlayerName(playerid,file,sizeof(file)); format(file,sizeof(file),DOF2_File(file)); if(DOF2_FileExists(file)) //zjistíme zda soubor s hráčovým jménem existuje { if(DOF2_CheckLogin(file,inputtext))//skontrolujeme zda heslo souhlasí { LoadData(playerid);//načteme data podle publicu LoadData SendClientMessage(playerid, COLOR_CERVENA, "[sERVER]Byl jsi přihlášen");//vypíšeme zprávu o přihlášení return 1; } else//když heslo nesouhlasí { ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,"Špatné heslo!","{F81414}Napsal jsi špatné heslo\n{FFFFFF}Napište své heslo zde pro přihlášení","Přihlásit","");//zobrazíme znovu přihlašovací dialog return 1; } } } } } return 1; } Vytvoříme si public LoadData: forward LoadData(playerid);//vytvoříme daný public public LoadData(playerid) { new file[64]; GetPlayerName(playerid,file,sizeof(file)); format(file,sizeof(file),DOF2_File(file)); PlayerInfo[playerid][pKills] = DOF2_GetInt(file,"Kills");//načteme počet zabitých PlayerInfo[playerid][pDeaths] = DOF2_GetInt(file,"Deaths");//načteme počet úmrtí PlayerInfo[playerid][pMoney] = DOF2_GetInt(file,"Money");//načteme vlastněnou částku PlayerInfo[playerid][pAdmin] = DOF2_GetInt(file,"AdminLevel");//načteme adminlevel GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);//nastavíme hráči vlastněnou částku return 1; } Vytvoříme si public SaveData: forward SaveData(playerid);//vytvoříme daný public public SaveData(playerid) { new file[64]; GetPlayerName(playerid,file,sizeof(file)); format(file,sizeof(file),DOF2_File(file)); GetPlayerMoney(playerid);//získáme vlastněnou hodnotu peněz DOF2_SetInt(file, "Kills",PlayerInfo[playerid][pKills]);//uložíme počet zabitých DOF2_SetInt(file, "Deaths",PlayerInfo[playerid][pDeaths]);//uložíme počet úmrtí DOF2_SetInt(file, "Money",GetPlayerMoney(playerid));//uložíme vlastněnou částku DOF2_SetInt(file, "AdminLevel",PlayerInfo[playerid][pAdmin]);//uložíme administrační level GetPlayerPos(playerid,PlayerInfo[playerid][x],PlayerInfo[playerid][y],PlayerInfo[playerid][z]);//získáme hráčovu momentální pozici DOF2_SetFloat(file, "LastX", PlayerInfo[playerid][x]);//uložíme pozici X DOF2_SetFloat(file, "LastY", PlayerInfo[playerid][y]);//uložíme pozici Y DOF2_SetFloat(file, "LastZ", PlayerInfo[playerid][z]);//uložíme pozici Z DOF2_SaveFile();//uložíme soubor return 1; } Vytvoříme si public pro automatické ukládáni dat, kvůli možnosti spadnutí serveru: forward ukladani();//vytvoříme daný public public ukladani() { for(new i; i<MAX_PLAYERS; i++)//vytvoříme cyklus pro projetí všech hráčů na serveru { if(IsPlayerConnected(i))//zjistíme, zda je dané ID připojeno (pokud ano, tak ho nemá cenu ukládat, že ano? ) { SaveData(i);//Uložíme data print("[AUTOSAVE]Účty byly úspěšně uloženy!");//vypíšeme zprávu o uložení } } } Snad vám tento tutoriál pomůže, a neposlouží jen k COPY & PASTE Děkuji za pročtení a uživateli Strike za rady a nápovědy když jsem měl problémy při tvorbě. Jakékoliv připomínky pište zde, ale prosím, aby jste k tomuto tutoriálu nepřipisovali vaše errory apod, v prípadě nouze kontaktujte třeba i mě v SZ a já se vám budu snažit pomoci tam.
×
×
  • Create New...