Jump to content

Search the Community

Showing results for tags 'ukládání'.

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

  1. MULTISAVE V JEDNOM SOUBORU ***** Na tenhle návod mě přivedl Ewwe s jeho problémem ohledně ukládání domů a vozidel... Kdo neví o co jde, tak Ewwe se snažil ukládat ve 2 souborech domy a vozidla. Akorát problém nastal v tom, že se načítaly domy ale nikoliv vozidla. Existuje takový trik jak se vyhnout tomuhle celému složitému ukládání... stačí pak načítat jediný soubor bez nutnosti formátovat cestu, a to za pomocí iterate a tagů v y_ini. Jelikož tag je v souborech nic více než jen poznámka, jde toho šikovně využití a nemusíme se bát, že se nám budou blbě načítat údaje, když jich tam budeme mít moc(jak mi někdo tvrdil, že se mu to děje). A naštěstí i poznámka lze zjistit, takže jak jsem říkal, jde to velice široce využít. Ukážeme si, jak vytvořit ukládání do takové formy: A furt je to v jednom souboru. Nemusíme načítat extra hodnoty, nemusíme nějak složitě zjišťovat cestu, stačí jenom povolit načítání tagů a to je vše. Začneme deklarováním proměnných. Budeme je potřebovat, abychom věděli, do čeho načtené údaje dát: #include <YSI_Data\y_iterate> #include <YSI_Storage\y_ini> enum eHouseInfo { HouseName[MAX_HOUSE_NAME + 1], HouseName[MAX_PLAYER_NAME + 1], bool: HouseLock, HouseVeh0, HouseVeh1, HouseVeh2, Float: HouseXPos, Float: HouseYPos, Float: HouseZPos } new HouseInfo[MAX_HOUSES][eHouseInfo]; A následně i iterátor, do kterého budeme přidávat id domů, které se budou načítat: new Iterator: House<MAX_HOUSES>; Teď, nejlepší na přidávání domů je si udělat fci. Vyhnu se detailům jako textlabel, některé podmínky... To si tam může pak přidat každý individuálně: stock AddHouse(const sHouseName[MAX_HOUSE_NAME+1], const sHouseOwner[], Float:fhX, Float:fhY, Float:fhZ, bool:bLock, ...) { Jelikož používáme iterate, nemusíme zjišťovat počet vytvořených domů... můžeme to jednoduše rovnou přes to zjistit, a to počtem přiřazených hodnot: if (Iter_Count(House) == MAX_HOUSES) A tady přichází ta novinka. Nemusíme přidávat nějaké housecount, nemusíme zjišťovat jestli je volno... můžeme na to využít fci, která nám zjistí nejbližší volné "id domu". new House_ID = Iter_Free(House); A nyni stačí jen přiřadit hodnoty(nesmíme samozřejmě zapomenout přiřadit do iterátoru i samotné id) HouseInfo[House_ID][HouseName] = sHouseName; HouseInfo[House_ID][HouseName] = sHouseOwner; HouseInfo[House_ID][HouseLock] = bLock; HouseInfo[House_ID][HouseXPos] = fhX; HouseInfo[House_ID][HouseYPos] = fhY; HouseInfo[House_ID][HouseZPos] = fhZ; new INI: Soubor = INI_Open("Houses.txt"); INI_SetTag(Soubor, sprintf("House%i", House_ID)); INI_WriteString(Soubor, "HouseName", HouseInfo[House_ID][HouseName]); INI_WriteString(Soubor, "HouseOwner", HouseInfo[House_ID][HouseName]); INI_WriteBool(Soubor, "HouseX", HouseInfo[House_ID][HouseLock]); INI_WriteFloat(Soubor, "HouseX", HouseInfo[House_ID][HouseXPos]); INI_WriteFloat(Soubor, "HouseY", HouseInfo[House_ID][HouseYPos]); INI_WriteFloat(Soubor, "HouseZ", HouseInfo[House_ID][HouseZPos]); INI_Close(Soubor); Iter_Add(House, House_ID); return (true); } Takže ano, prakticky normální ukládání. A teď k načítání... to bude to zajímavější. Protože pracujeme s tagem a v tagu je jen slovo House a číslo, tak právě z toho musíme vytáhnout čistě jenom to číslo. Což pro zběhlejší to není takový problém, ale i pro ty další vám ukážu jak na to. Nejdříve si extrahujeme do stringu sString jen to dané číslo: forward NahratData(tag[], name[], value[]); /* Všimněte si argumentu tag[] */ public NahratData(tag[], name[], value[]) { new sString[14]; strmid(sString, tag, 5, strlen(tag)); Nadále to číslo konvertujeme jako číslo: new House_ID = strval(sString); To je všechno... a už jenom načteme: INI_String("HouseName", HouseInfo[House_ID][HouseName]); INI_String("HouseOwner", HouseInfo[House_ID][HouseName]); INI_Bool("HouseX", HouseInfo[House_ID][HouseLock]); INI_Float("HouseX", HouseInfo[House_ID][HouseXPos]); INI_Float("HouseY", HouseInfo[House_ID][HouseYPos]); Iter_Add(House, House_ID); /* UPOZORNĚNÍ! Fce nesmí být na konci. jelikož jeho spec. návratová hodnota může ukončit celé načítání! */ INI_Float("HouseZ", HouseInfo[House_ID][HouseZPos]); return (false); } A nakonec ten samotný soubor načteme. Jak jsem již říkal: cestu nějak nemusíme formátovat, a nepotřebujeme extra hodnoty, stačí jenom načíst, a povolit načítání tagů: public OnGameModeInit() { INI_ParseFile("Houses.txt", "NahratData", .bPassTag = true); return (true); } Doporučuji pak vyčistit po ukončení scriptu(gamemodu) iterátor: Iter_Clear(House); A aby to nebylo málo, tak za pomocí iterátorů můžeme i zjistit, zda to dané id u kterého stojí hráč patří k domům: if (Iter_Contain(House, House_ID)) return (true); ODKAZY Doporučuji používat sprintf. Velice užitečná věcička: http://forum.sa-mp.com/showpost 612 Kdyby někdo nepochopil, jak se s tím pracuje... tak jsem tuhle vychytávku používal hodně často, například u přidávání adminů do /admins pastebin.com/qZV5evSz PODĚKOVÁNÍ xhunterx za radu s tímto trikem.
  2. Zdravím chtěl bych se zeptat na pár informací ohledně stocku ukladaní vozidel..... Zkusím to popsat tak aby to bylo dobře k pochopení a zkusím popsat tak aby šlo vědet co přesně potřebuji Za gramatiku omlouvám se předem Takže co potřebuji ? Udělat ukladaní vozidel pomocí 3 stocku Ještě chci říct:Hledal jsem tutoriali a našel jsem,Ale uplně jsem to nepochopil. A možná to bylo tím že tam bylo příliš stocku a měl jsem vtom zmatek. Vím že asi lepším pawnerům ukladaní auta a ukladaní hračů muže přijít stejné ale já to prostě nepobírám jde oto že hráče zvládám ale když mám vytvořit složku z autem ve Scriptfilles je horší. Pro mě je to ale horší Zde popis něčeho co bych asi udělal ale mám vtom zmatek Dejme tomu že dělám přes YSI enum CInfo autoid, vehX, vehY, vehZ, Angle, Barva1, Barva2, Majitel, Respawn } new CarInfo[MAX_PLAYERS][CInfo]; Jak se dostanu do Stocku dostávám zmatek u autech Definace #define AUTA_PATH "Auta/%s.ini" Jak dojde na stocku u aut jsem zmaten a začínám vytvářet asi blbosti Toto mě už přijde jako blbost ( Nemyslím stock ale jak jsem to zepsal) stock CarPath(playerid) { new string[128],vehiclename[MAX_PLAYER_NAME]; GetPlayerName(playerid,playername,sizeof(vehiclename)); format(string,sizeof(string),AUTO_PATH,vehiclename); return string; } Tady vůbec Stock MojeAuto(autoid,vehX,vehY,vehZ,Angle,Barva1,Barva2,Majitel,Respawn) { CarInfo[vehicleid] a něco dál return 0; } Možná že bych tenhle Stock nahradil Pathem new Float: VehX[ MAX_PLAYERS ], (Tady jsem uvažoval o MAX_VEHICLES ale u těch aut fakt netuším) Float: VehY[ MAX_PLAYERS ], Float: VehZ[ MAX_PLAYERS ], Float: VehAngle[ MAX_PLAYERS ]; forward Auta_data(playerid,name[],value[]);public Auta_data(playerid,name[],value[]) { /////////////////////////////////////////// INI_Float( "VehX", VehX[ vehicleid ] ); INI_Float( "VehY", VehY[ vehicleid ] ); INI_Float( "VehZ", VehZ[ vehicleid ] ); INI_Float( "VehAngle", VehAngle[ vehicleid ] ); INI_Int("Barva1",CarInfo[vehicleid][Barva1]); INI_Int("Barva2",CarInfo[vehicleid][Barva2]); INI_Int("Majitel",CarInfo[vehicleid][Majitel); INI_Int("Respawn",CarInfo[vehicleid][Respawn]); return 1; } Stocky Uložení a Načtení auta vůbec nečekejte Prostě co potřebuji nějaký help v oblasti ukladaní pozic aut do ScriptFilles Počítám stím že dostanu 50 odkazů. Ale jak jsem již zminoval já hledal,Našel,Nepochopil,Všude spoustu stocku a zkouším to usnadnit Děkuji za Podporu,Help,Komentáře,Rady,Urážky,Ponížení,Strapnení Přeji Pěkný Večer PS:Ty Code jsem zepsal ted na pawnu takže chyby jsem podle pawna nijak neupravil a ty drobnosti bych opravil na pohodu tady mě jde čistě o Stocky Děkuji moc //Edit- Ještě pro Info : Potřebuji vytvořit stocky na ukladaní
  3. Zdravím vás. Potřebuji menší help Jde ohledně IP Adresy Potřebuji aby se ukládala do ScriptFiles. Důvod: Ohledně unbanu přes input/přikaz Co jsem zkoušel ? INFO:Dělám přes YSI Disconnect GetPlayerIp(playerid, PlayerInfo[playerid][IP], 1); A ještě INI_WriteInt(File,"IP",PlayerInfo[playerid][IP]); Konec protože chci aby se ukládala jen hráčova poslední IP Adresa a ted fakt nevím jak to mám udělat Aby se to ukládalo do ScriptFiles (Celá IP Ted mi to hází jen čísla 50,56 atd.....)(I tak je to špatně :DDDD) A do Kick/Ban (Ale toto je ted jen pro INFO) Nepotřebujem INI_WriteInt(File,"IP",PlayerInfo[id][iP]); INFO pro zbytek: Nebojte proměny mám
  4. 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
  5. Ahoj, mám registraci přes DOF2 #include <a_samp> #include "DOF2.pwn" #define dini_Exists DOF2_FileExists //DINI -> DOF2 #define dini_Remove DOF2_RemoveFile //DINI -> DOF2 #define dini_Create DOF2_CreateFile //DINI -> DOF2 #define dini_Set DOF2_SetString //DINI -> DOF2 #define dini_Get DOF2_GetString //DINI -> DOF2 #define dini_IntSet DOF2_SetInt //DINI -> DOF2 #define dini_Int DOF2_GetInt //DINI -> DOF2 #define dini_BoolSet DOF2_SetBool //DINI -> DOF2 #define dini_Bool DOF2_GetBool //DINI -> DOF2 #define dini_FloatSet DOF2_SetFloat //DINI -> DOF2 #define dini_Float DOF2_GetFloat //DINI -> DOF2 #define dini_Unset DOF2_Unset //DINI -> DOF2 #define dini_Isset DOF2_IsSetzatim //DINI -> DOF2 #define dini_Write DOF2_Exit //DINI -> DOF2 #define SPD ShowPlayerDialog //SHOWPLAYERDIALOG #define SCM SendClientMessage //SENDCLIENTMESSAGE #define cesta_ucet "Accounts/%s.txt" //UCTY -> CESTA #define DIALOG_LOGIN 1 #define DIALOG_REGISTER 2 public OnPlayerConnect(playerid) { new cesta[50]; format(cesta,50,cesta_ucet,jmeno(playerid)); if(fexist(cesta)) { SPD(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{FF0000}Příhlášení","Zadej prosím heslo, kterým jsi se registroval.","OK","Odpojit"); GameTextForPlayer(playerid,"~b~vitej na serveru, prosim prihlas se",2000,1); }else{ SPD(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"{FF0000}Registrace","Pro Ochranu účtu se prosím zaregistruj.\nDojdržuj pravidla {FF0000}(/rules, /pravidla).","OK","Odpojit"); GameTextForPlayer(playerid,"~b~vitej na serveru, prosim registruj se",2000,1); } return 1; } public OnPlayerDisconnect(playerid, reason) { if(GetPVarInt(playerid,"Prihlaseny") != 0) { dini_Write(); } return 1; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(response) { switch(dialogid) { case DIALOG_REGISTER: { if(GetPVarInt(playerid,"Prihlaseny") == 1) { GameTextForPlayer(playerid,"~r~jiz jsi prihlaseny",2000,1); return false; } if(strlen(inputtext) == 0) { SPD(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"{FF0000}Registrace","Pro Ochranu účtu se prosím zaregistruj.\nDojdržuj pravidla {FF0000}(/rules, /pravidla).","OK","Odpojit"); GameTextForPlayer(playerid,"~r~spatne heslo",2000,1); return false; } if(strlen(inputtext) < 3 && strlen(inputtext) > 20) { SPD(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"{FF0000}Registrace","Pro Ochranu účtu se prosím zaregistruj.\nDojdržuj pravidla {FF0000}(/rules, /pravidla).","OK","Odpojit"); GameTextForPlayer(playerid,"~r~spatny pocet znaku",2000,1); return false; } new filestr[128],IP[16]; format(filestr,sizeof(filestr),cesta_ucet,jmeno(playerid)); if(fexist(filestr)) return false; dini_Create(filestr); GetPlayerIp(playerid, IP, sizeof(IP)); dini_Set(filestr,"Heslo",inputtext); dini_Set(filestr,"IP",IP); dini_Write(); SetPVarInt(playerid,"Prihlaseny",1); } case DIALOG_LOGIN: { if(GetPVarInt(playerid,"Prihlaseny") == 1) { GameTextForPlayer(playerid,"~r~Uz jsi prihlaseny",2000,1); return false; } if(strlen(inputtext) == 0) { SPD(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{FF0000}Příhlášení","Zadej prosím heslo, kterým jsi se registroval.","OK","Odpojit"); GameTextForPlayer(playerid,"~r~spatne heslo",2000,1); return false; } if(strlen(inputtext) < 3 && strlen(inputtext) > 20) { SPD(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{FF0000}Příhlášení","Zadej prosím heslo, kterým jsi se registroval.","OK","Odpojit"); GameTextForPlayer(playerid,"~r~spatny pocet znaku",2000,1); return false; } new filestr[128],IP[16]; format(filestr,sizeof(filestr),cesta_ucet,jmeno(playerid)); if(!fexist(filestr)) return false; GetPlayerIp(playerid, IP, sizeof(IP)); /*new password[129]; WP_Hash(password, 129, inputtext);*/ if(strcmp(dini_Get(filestr,"Heslo"),inputtext)) { ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{FF0000}Příhlášení","Zadej prosím heslo, kterým jsi se registroval.","OK","Odpojit"); GameTextForPlayer(playerid,"~r~spatne heslo",2000,1); }else{ GameTextForPlayer(playerid,"~y~uspesne jsi se prihlasil",2000,1); SetPVarInt(playerid,"Prihlaseny",1); SetPlayerPos(playerid,2486.7761,-1646.3732,14.0703); SetPlayerCameraPos(playerid,2485.9756,-1653.6003,13.4642); SetPlayerCameraLookAt(playerid,2486.7761,-1646.3732,14.0703); SpawnPlayer(playerid); } } } }else{ switch(dialogid) { case DIALOG_REGISTER: { SendClientMessage(playerid,0xFA0000FF,"Odpojil jsi se ze serveru!"); GameTextForPlayer(playerid,"~r~odpojil jsi se",2000,1); Kick(playerid); } case DIALOG_LOGIN: { SendClientMessage(playerid,0xFA0000FF,"Odpojil jsi se ze serveru!"); GameTextForPlayer(playerid,"~r~odpojil jsi se",2000,1); Kick(playerid); } } } return 1; } A potřebuju do stejného souboru přidat i ukládání HP. Zkoušel jsem do OnPlayerDicnonnect -> dini_IntSet(cesta_ucet,"HP",GetPlayerHealth(playerid)); Ale hází to warning a nevim si rady co dál
×
×
  • Create New...