Jump to content

Search the Community

Showing results for tags 'dof2'.

  • 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 6 results

  1. 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ý.
  2. 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
  3. 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.
  4. 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
  5. 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
  6. 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...