Search the Community
Showing results for tags 'dof2'.
-
DOF2 UKLÁDÁNÍ A NAČÍTÁNÍ, UŽ NIKDY VÍC DINI ***** Nemůžu uvěřit, že i po tak dlouhé době si hodně začátečníků myslí, že se s dini furt nejjednodušeji pracuje, a nechtějí ani dof2, protože buď to podle nich nefunguje a nebo je to moc těžké... Ale to jsou jenom kecy. Ve skutečně rozdíl práce mezi dof2 a dini je asi tak 5%. Ukážu vám, jak na to. Instalace je jednoduchá. Stačí z odkazu http://pastebin.com/TQJGwYyZ zkopírovat obsah do textového souboru a uložit ho nejlépe jako dof2.inc(ta koncovka .inc je tam důležitá). #include <dof2> VYTVOŘIT SOUBOR DOF2_CreateFile(JménoSouboru[], Heslo[] = ""); Parametry: JménoSouboru[] - Jméno souboru, který má vytvořit ve scriptfiles. V případě, že jde o větší cestu, stačí přidávat lomítka. Heslo[] - Vepíše hash string(aka heslo) rovnou do souboru a nemusíme používat fci SetString. V případě, že to nechceme, můžeme ten argument jednoduše vynechat. Ukázka použití: EXISTENCE SOUBORU DOF2_FileExists(JménoSouboru[]); Ukázka použití: public OnGameModeInit() { if (DOF2_FileExists("soubor.txt")) { DOF2_CreateFile("soubor.txt"); } return true; } PŘEJMENOVAT SOUBOR DOF2_RenameFile(JménoSouboru[], NovéJmeno[]); Ukázka použití: DOF2_RenameFile("soubor.txt", "Soubornik.txt"); /* Nyní se soubor ve scriptfiles přejmenuje na Soubornik */ SMAZAT SOUBOR DOF2_RemoveFile(JménoSouboru[]); Ukázka použití: DOF2_RemoveFile("soubor.txt"); /* Zcela smaže soubor.txt ve scriptfiles */ ULOŽENÍ SOUBORU DOF2_SaveFile(); Ukázka použití: public OnGameModeInit() { if (!DOF2_FileExists("soubor.txt")) { DOF2_CreateFile("soubor.txt"); DOF2_SetInt("soubor.txt", "jenomcislo", 666); DOF2_SaveFile(); } return 1; } VEPSAT STRING/TEXT DO SOUBORU DOF2_SetString(JménoSouboru[], Klíč[], String[]); Parametry: Klíč[] - Jde o informaci, pod jakým klíčovým slovem, by se měla ta daná hodnota ukládat. Nejčastěji jde o jedno vystihující slovo. String[] - Údaje, které se vepíšou do souboru(v tomhle případě je hodnota řetězec). Ukázka použití: public OnPlayerConnect(playerid) { new Soubor[40 + 1], Jmeno[MAX_PLAYER_NAME + 1]; GetPlayerName(playerid, Jmeno, sizeof(Jmeno)); GetPlayerName(playerid, Soubor, sizeof(Soubor)); strcat(Soubor, ".txt"); if (!DOF2_FileExists(Soubor)) { DOF2_CreateFile(Soubor); DOF2_SetString(Soubor, "JmenoHrace", Jmeno); /* Nyní se ve souboru uloží údaj: JmenoHrace = SkiBig18 */ DOF2_SaveFile(); } return 1; } ZJISTIT STRING/TEXT ZE SOUBORU DOF2_GetString(JménoSouboru[], Klíč[]); Ukázka použití: new Text[MAX_PLAYER_NAME + 1]; strcat(Text, DOF2_GetString(Nick, "JmenoHrace")); print(Text); /* Vypiše: SkiBig18 */ return 1; } VEPSAT INTEGER/ČÍSLO DO SOUBORU DOF2_SetInt(JménoSouboru[], Klíč[], Číslo); Parametry: Číslo - Údaje, které se vepíšou do souboru(v tomhle případě je hodnota číslo). Ukázka použití: DOF2_SetInt(Nick, "Penize", GetPlayerMoney(playerid)); ZJISTIT INTEGER/ČÍSLO ZE SOUBORU DOF2_GetInt(JménoSouboru[], Klíč[]); Ukázka použití: GivePlayerMoney(playerid, DOF2_GetInt(Nick, "Penize")); VEPSAT BOOLEAN DO SOUBORU DOF2_SetBool(JménoSouboru[], Klíč[], bool:Boolean); Parametry: Boolen - Údaje, které se vepíšou do souboru(v tomhle případě je hodnota boolen). Ukázka použití: DOF2_SetBool(Nick, "IsVip", bIsVip[playerid]); ZJISTIT BOOLEAN ZE SOUBORU DOF2_GetBool(JménoSouboru[], Klíč[]); Ukázka použití: bIsVip[playerid] = DOF2_GetBool(Nick, "IsVip"); VEPSAT FLOAT DO SOUBORU DOF2_SetFloat(JménoSouboru[], Klíč[], Float:FloatHodnota); Parametry: FloatHodnota - Údaje, které se vepíšou do souboru(v tomhle případě jsou hodnoty desetinná čísla). Ukázka použití: new Float: Health; GetPlayerHealth(playerid, Health); DOF2_SetFloat(Nick, "Health", Health); ZJISTIT FLOAT ZE SOUBORU DOF2_GetFloat(JménoSouboru[], Klíč[]); Ukázka použití: SetPlayerHealth(playerid, DOF2_GetFloat(Nick, "Health")); UŽITEČNÉ FUNKCE DOF2 Nyní přichází fce, které dini neobsahuji, a které můžou být někomu užitečné. Jedna z nich je možnost si vytvořit jakousi zálohu i s časem: DOF2_MakeBackup(JménoSouboru[]); Ukázka použití: DOF2_MakeBackup("soubor.txt"); Za další obsahuje hashování textu, ale je to součásti fce, která spolupracuje s DOF2_CreateFile a to přesněji s parametrem Heslo[], které můžete spolu s vytvořením souboru také uložit: DOF2_CheckLogin(JménoSouboru[], Heslo[]); Ukázka použití: if (dialogid == dialog_Login) { if (!response) return 1; if (DOF2_CheckLogin(Nick, inputtext)) { /* Nahrát data */ }else { /* Zadal nesprávné heslo. */ } } Další tu je možnost přejmenovat samotný klíč v souboru, kam se ukládají údaje, kdyby se vám na něm něco nelíbilo: DOF2_RenameKey(JménoSouboru[], JménoKlíče[], NovéJméno[]); Ukázka použití: DOF2_SetInt(Nick, "Penize", GetPlayerMoney(playerid)); DOF2_RenameKey(Nick, "Penize", "Prachy"); DOF2_SaveFile(); UKÁZKA POUŽITÍ DOF2 /* Deklarujeme si 4 nejznámější datové typy: */ new Cislo = 101, Float: DesCislo = 103.3, String[10] = "Ahoj", bool: Boolean = true; public OnFilterScriptInit() { /* Zjistíme, jestli, že neexistuje, jestliže ne, vytvoří nový */ if (!DOF2_FileExists("soubor.txt")) DOF2_CreateFile("soubor.txt"); /* Vepíše integer do souboru: */ DOF2_SetInt("soubor.txt", "Cislo", Cislo); /* Vepíše float do souboru: */ DOF2_SetFloat("soubor.txt", "DesCislo", DesCislo); /* Vepíše string do souboru: */ DOF2_SetString("soubor.txt", "String", String); /* Vepíše boolean do souboru: */ DOF2_SetBool("soubor.txt", "Boolean", Boolean); /* Uloží (uzavře) soubor: */ DOF2_SaveFile(); /* A nyní si můžeme všechny údaje načíst: */ /* Přiřadí k proměnné Cislo zjištěnou hodnotu ze souboru: */ Cislo = DOF2_GetInt("soubor.txt", "Cislo"); /* Přiřadí k proměnné DesCislo zjištěnou hodnotu ze souboru: */ DesCislo = DOF2_GetFloat("soubor.txt", "DesCislo"); /* Přiřadí k proměnné String zjištěnou hodnotu ze souboru: */ strcat(String, DOF2_GetString("soubor.txt", "String")); /* Přiřadí k proměnné Boolean zjištěnou hodnotu ze souboru: */ Boolean = DOF2_GetBool("soubor.txt", "Boolean"); return 1; } A zde je screen, jak se nám uložily údaje do souboru: ROZDÍL PRÁCE MEZI DINI A DOF2 Jak jsem již psal, rozdíl v práci s ním je asi tak 5%. Jestliže mi nevěříte ani po tomto návodu, zde je odkaz na pastebin, kde jsem shrnul ukázky fcí asi 3 nejznáměnších používaných includů na ukládání a načítání: pastebin.com/8MW3kzbF A pokud to stále je málo, tak dokonce i samotný dof2 obsahuje preprocesor, který stačí jen přidat, a můžete pracovat úplně stejně jako s dini: #if defined DINI_CONVERT #define dini_Exists DOF2_FileExists #define dini_Remove DOF2_RemoveFile #define dini_Create DOF2_CreateFile #define dini_Set DOF2_SetString #define dini_Get DOF2_GetString #define dini_IntSet DOF2_SetInt #define dini_Int DOF2_GetInt #define dini_BoolSet DOF2_SetBool #define dini_Bool DOF2_GetBool #define dini_FloatSet DOF2_SetFloat #define dini_Float DOF2_GetFloat #define dini_Unset DOF2_Unset #define dini_Isset DOF2_IsSet #if !defined _dini_included #define _dini_included #endif #endif Ověřený návod Tento návod prešiel validáciou a preto je možné ho považovať za overený.
- 10 odpovědí
-
- 4
-
-
- dinismrdi
- dof2islife
- (a 4 další)
-
Ahoj Našiel som si už dávnejšie Rádio Systém (Dynamic) a nechcelo sa my stále uploadovať 8 txt súborov. Tak som chcel aby to Automaticky vytváralo, ale nejde to Prosím opravte mi kod. Ďakujem
-
Zdravím, dělám pár admin příkazů a potřebuju nějak uložit admin level přes dof2. Zkoušel jsem i hledal ale bohužel nic pořádného jsem nenašel. Potřebuju jen příklad, jak dát do OnPlayerConnected načtení admin levelu a vytvoření složky. Pak do OnPlayerDisconnected jenom uložení admin levelu do souboru se jménem. Doufám, že mi pomůžete Díky za přečtení, S pozdravem Petr.
-
Ahoj, dokončujem vehicle systém a všimol som si že keď kúpim auto a vyvolá sa mi public Buycar, tak server spadne, neviem prečo ale spadne. CAR SELECT DIALOG: if(response == 1) { if(listitem ==0) { if(pinfo[playerid][Cash] >= 35000) { wannaid[playerid] = 400; pinfo[playerid][Cash] =- 35000; GivePlayerMoney(playerid, -35000); format(msg, 128, "> Kúpil si si auto %s za %d$!", VehicleNames[wannaid[playerid] - 400], 35000); SCM(playerid, CBLUE, msg); SetTimerEx("BuyCar", 1, false, "i", playerid); } else return SCM(playerid, CRED, "> Na toto nemáš peniaze!"); } else if(listitem ==1) { if(pinfo[playerid][Cash] >= 13000) { wannaid[playerid] = 401; pinfo[playerid][Cash] =- 13000; GivePlayerMoney(playerid, -13000); format(msg, 128, "> Kúpil si si auto %s za %d$!", VehicleNames[wannaid[playerid] - 400], 13000); SCM(playerid, CBLUE, msg); SetTimerEx("BuyCar", 1, false, "i", playerid); } else return SCM(playerid, CRED, "> Na toto nemáš peniaze!"); } else if(listitem ==2) { if(pinfo[playerid][Cash] >= 9900) { wannaid[playerid] = 404; pinfo[playerid][Cash] =- 9900; GivePlayerMoney(playerid, -9900); format(msg, 128, "> Kúpil si si auto %s za %d$!", VehicleNames[wannaid[playerid] - 400], 9900); SCM(playerid, CBLUE, msg); SetTimerEx("BuyCar", 1, false, "i", playerid); } else return SCM(playerid, CRED, "> Na toto nemáš peniaze!"); } else if(listitem ==3) { if(pinfo[playerid][Cash] >= 120000) { wannaid[playerid] = 409; pinfo[playerid][Cash] =- 120000; GivePlayerMoney(playerid, -120000); format(msg, 128, "> Kúpil si si auto %s za %d$!", VehicleNames[wannaid[playerid] - 400], 120000); SCM(playerid, CBLUE, msg); SetTimerEx("BuyCar", 1, false, "i", playerid); } else return SCM(playerid, CRED, "> Na toto nemáš peniaze!"); } else if(listitem ==4) { if(pinfo[playerid][Cash] >= 230000) { wannaid[playerid] = 411; pinfo[playerid][Cash] =- 230000; GivePlayerMoney(playerid, -230000); format(msg, 128, "> Kúpil si si auto %s za %d$!", VehicleNames[wannaid[playerid] - 400], 230000); SCM(playerid, CBLUE, msg); SetTimerEx("BuyCar", 1, false, "i", playerid); } else return SCM(playerid, CRED, "> Na toto nemáš peniaze!"); } else if(listitem ==5) { if(pinfo[playerid][Cash] >= 34000) { wannaid[playerid] = 412; pinfo[playerid][Cash] =- 34000; GivePlayerMoney(playerid, -34000); format(msg, 128, "> Kúpil si si auto %s za %d$!", VehicleNames[wannaid[playerid] - 400], 34000); SCM(playerid, CBLUE, msg); SetTimerEx("BuyCar", 1, false, "i", playerid); } else return SCM(playerid, CRED, "> Na toto nemáš peniaze!"); } else if(listitem ==6) { if(pinfo[playerid][Cash] >= 200000) { wannaid[playerid] = 415; pinfo[playerid][Cash] =- 200000; GivePlayerMoney(playerid, -200000); format(msg, 128, "> Kúpil si si auto %s za %d$!", VehicleNames[wannaid[playerid] - 400], 200000); SCM(playerid, CBLUE, msg); SetTimerEx("BuyCar", 1, false, "i", playerid); } else return SCM(playerid, CRED, "> Na toto nemáš peniaze!"); } else if(listitem ==7) { if(pinfo[playerid][Cash] >= 47000) { wannaid[playerid] = 419; pinfo[playerid][Cash] =- 47000; GivePlayerMoney(playerid, -47000); format(msg, 128, "> Kúpil si si auto %s za %d$!", VehicleNames[wannaid[playerid] - 400], 47000); SCM(playerid, CBLUE, msg); SetTimerEx("BuyCar", 1, false, "i", playerid); } else return SCM(playerid, CRED, "> Na toto nemáš peniaze!"); } else if(listitem ==8) { if(pinfo[playerid][Cash] >= 31000) { wannaid[playerid] = 426; pinfo[playerid][Cash] =- 31000; GivePlayerMoney(playerid, -31000); format(msg, 128, "> Kúpil si si auto %s za %d$!", VehicleNames[wannaid[playerid] - 400], 31000); SCM(playerid, CBLUE, msg); SetTimerEx("BuyCar", 1, false, "i", playerid); } else return SCM(playerid, CRED, "> Na toto nemáš peniaze!"); } else if(listitem ==9) { if(pinfo[playerid][Cash] >= 24000) { wannaid[playerid] = 445; pinfo[playerid][Cash] =- 24000; GivePlayerMoney(playerid, -24000); format(msg, 128, "> Kúpil si si auto %s za %d$!", VehicleNames[wannaid[playerid] - 400], 24000); SCM(playerid, CBLUE, msg); SetTimerEx("BuyCar", 1, false, "i", playerid); } else return SCM(playerid, CRED, "> Na toto nemáš peniaze!"); } else if(listitem ==10) { if(pinfo[playerid][Cash] >= 10000) { wannaid[playerid] = 466; pinfo[playerid][Cash] =- 10000; GivePlayerMoney(playerid, -10000); format(msg, 128, "> Kúpil si si auto %s za %d$!", VehicleNames[wannaid[playerid] - 400], 10000); SCM(playerid, CBLUE, msg); SetTimerEx("BuyCar", 1, false, "i", playerid); } else return SCM(playerid, CRED, "> Na toto nemáš peniaze!"); } else if(listitem ==11) { if(pinfo[playerid][Cash] >= 15000) { wannaid[playerid] = 467; pinfo[playerid][Cash] =- 15000; GivePlayerMoney(playerid, -15000); format(msg, 128, "> Kúpil si si auto %s za %d$!", VehicleNames[wannaid[playerid] - 400], 15000); SCM(playerid, CBLUE, msg); SetTimerEx("BuyCar", 1, false, "i", playerid); } else return SCM(playerid, CRED, "> Na toto nemáš peniaze!"); } } PUBLIC BUYCAR: public BuyCar(playerid) { new num = 100; new str[12]; new file[256], cfile[50 + 1]; new name[24]; format(str, 12, "LOS %d", num); format(cfile, sizeof(cfile), CARS, str); while(DOF2_FileExists(cfile)) { num++; } GetPlayerName(playerid, name, 24); format(file, 256, ACCOUNT, name); new owner[28]; format(owner, 28, "%s", DOF2_GetString(file, "COwner1")); new v = CreateVehicle(wannaid[playerid], 2501.5076, -1518.5078, 23.7481, 180, 1, 1, -1); if(!isnull(owner)) { DOF2_SetString(file, "COwner2", str); DOF2_SaveFile(); pinfo[playerid][Cowner2] = v; } else { DOF2_SetString(file, "COwner1", str); DOF2_SaveFile(); pinfo[playerid][Cowner1] = v; } format(cinfo[v][Owner], 48, "%s", name); format(cinfo[v][SPZ], 12, "%s", str); cinfo[v][Fuel] = 100; DOF2_CreateFile(cfile); return 1; } Ďakujem
- 12 odpovědí
-
- server pada
- vehiclesystem
-
(a 1 další)
Tagged with:
-
Ahoj, vytvářím si mód ale ukládání zlobí jde o to že když se zabiju na serveru tak se mi do /acount (Info) napíše že jsem zemřel o 1 více ale až se odpojím tak nic. Popřípadě dokládám kód z OnPlayerDisconnect: public OnPlayerDisconnect(playerid, reason) { new str[144]; format(str,sizeof(str),"[Leave] Player %s disconnected from the game.",GetName(playerid)); SendClientMessageToAll(INFO,str); KillTimer(ElapsedTime[playerid]); DOF2_SetInt(AC,"Money",PlayerInfo[playerid][pMoney]); DOF2_SetInt(AC,"Kills",PlayerInfo[playerid][pKills]); DOF2_SetInt(AC,"Deaths",PlayerInfo[playerid][pDeaths]); DOF2_SetInt(AC,"Time",ElapsedTime[playerid]); DOF2_SetInt(AC,"Admin",PlayerInfo[playerid][pAdmin]); return 1; } Děkuji za každou radu jinak bych se chtěl ještě zeptat co je lepší jestli DOF2 nebo Dini
- 3 odpovědí
-
- ukladani
- paradoxgames.eu
-
(a 2 další)
Tagged with:
-
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.
- 9 odpovědí
-
- double-o-seven
- double-o-files
- (a 7 dalších)