Jump to content
  • 0

pomoc Ukládání


Paulee

Dotaz

Zdravím,

Tak jsem tu zase s dalším problémem :d. Udělal jsem si ukládání bez žádných ini souborů atd. Snažil jsem na to převést své staré ukládání s DOF2. Vše to píše bez erroru, ale prostě se to neuloží. Je tam furt toto

Nahoře mám toto:

 

enum pData
{
	AdminLevel
};
new PlayerData[MAX_PLAYERS][pData];
new level,           //Toto je jen k /setlvl
    admina[MAX_PLAYER_NAME],
    nicka[MAX_PLAYER_NAME],
    stringa[128],
    ID;  //Až sem

 

 

OnPlayerConnect:

 

public OnPlayerConnect(playerid)
{
	new string[50], HracMeno[MAX_PLAYER_NAME], str[140];
	GetPlayerName(playerid, HracMeno, MAX_PLAYER_NAME);
	format(string,sizeof(string),"Players/%s.txt", HracMeno);
	
 	new File:soubor = fopen(string, io_read);
	if(!fexist(string))
	{
		if(soubor)
		{
		format(str, sizeof(str), "AdminLevel", PlayerData[playerid][AdminLevel]);
		fwrite(soubor, str);
		}
		fclose(soubor);
	}
	return (true);
}

 

 

OnPlayerDisconnect:

 

public OnPlayerDisconnect(playerid, reason)
{
	new string[50], HracMeno[MAX_PLAYER_NAME], str[140];
	GetPlayerName(playerid, HracMeno, MAX_PLAYER_NAME);
	format(string,sizeof(string),"Players/%s.txt", HracMeno);
	new File:soubor = fopen(string, io_write);
	if(soubor)
	{
		format(str, sizeof(str), "AdminLevel", PlayerData[playerid][AdminLevel]);
		fwrite(soubor, str);
	}
	fclose(soubor);
	return (true);
}

 

 

Příkaz na admin level:

 

CMD:setlvl(playerid, params[]) {

    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Nejsi na RCON!");
    if(sscanf(params, "ii", ID, level)) return SendClientMessage(playerid, -1, "Použití: /setlvl [ID] [LVL]");
    if(level > 5) return SendClientMessage(playerid,0xFF0000FF,"Rozmezi lvlu je 0 - 5!");
    GetPlayerName(playerid, admina, MAX_PLAYER_NAME);
    GetPlayerName(ID, nicka, MAX_PLAYER_NAME);
    PlayerData[ID][AdminLevel] = level;
    format(stringa, 128, "Administrátor %s dal hráči %s admin level %d", admina, nicka, level);
    SendClientMessageToAll(-1, stringa);
    return (true);
}

 

 

Nevíte co stím?  :d Budu rád za každý příspěvek :d

 

Link to comment
Share on other sites

8 odpovědí na tuto otázku

Recommended Posts

  • 0

Zdravíčko,

určitě si změň toto (nejdříve soubor otevřeš, ale až pak teprv kontroluješ, zda vůbec existuje ---> pokud neexistuje, server spadne. Ani ho v tomto případě nikde nevytváříš --> io_write, io_readwrite.

new File:soubor = fopen(string, io_read);
	if(!fexist(string))
	{
		if(soubor)
		{
		format(str, sizeof(str), "AdminLevel", PlayerData[playerid][AdminLevel]);
		fwrite(soubor, str);
		}
		fclose(soubor);
	}

Dá se říct, že toto není ani snad vyvíjeno pro ukládání dat hráče. Je to celkem nepraktické viz. zde. Proto zřejmě vznikly file systémy jako DOF2 (dof2 mi pro tebe připadá jako nejlepší volba), y_ini, ...

Ale když už to chceš vědět tak:

format(str, sizeof(str), "AdminLevel =%d", PlayerData[playerid][AdminLevel]);

Jestli jsi se již zkoul návod od ATomase, vidíš, že hledá entry (respektive další uloženou informaci) ty bys ještě musel hledat "=" Jelikož používáš "AdminLevel =". :d

 

Další dodatek mám k tomuto:

new level,           //Toto je jen k /setlvl
    admina[MAX_PLAYER_NAME],
    nicka[MAX_PLAYER_NAME],
    stringa[128],
    ID;  //Až sem

Proč vytváříš proměnné mimo příkaz, když je mezitím nikde nevyužiješ. Něco jiného Máš toto"new PlayerData[MAX_PLAYERS][pData]" - u toho se předpokládá, že je potřebuješ mít uložené v RAM stále (jelikož jich využíváš v příkazech a třeba i při tom ukládání). Aby jsi mě správně pochopil, ty založíš proměnné, v RAM se ti pro ně vyhradí místo a budou tam dokud nevypneš server. Pokud tyto proměnné vytvoříš až v příkazu v RAM se vytvoří až po zadání příkazu a po jeho skončení se z RAM paměti zase odeberou. ;) Ještě k tomu všemu je ani nikde nevynulováváš, takže pokud někde použiješ tuto proměnnou, bez toho abys ji přepsal, mohlo by tě třeba čekat překvapení. :d

Edited by GaRGoyLeS
Link to comment
Share on other sites

  • 0

Zdravíčko,

určitě si změň toto (nejdříve soubor otevřeš, ale až pak teprv kontroluješ, zda vůbec existuje ---> pokud neexistuje, server spadne. Ani ho v tomto případě nikde nevytváříš --> io_write, io_readwrite.

new File:soubor = fopen(string, io_read);
	if(!fexist(string))
	{
		if(soubor)
		{
		format(str, sizeof(str), "AdminLevel", PlayerData[playerid][AdminLevel]);
		fwrite(soubor, str);
		}
		fclose(soubor);
	}

Dá se říct, že toto není ani snad vyvíjeno pro ukládání dat hráče. Je to celkem nepraktické viz. zde. Proto zřejmě vznikly file systémy jako DOF2 (dof2 mi pro tebe připadá jako nejlepší volba), y_ini, ...

Ale když už to chceš vědět tak:

format(str, sizeof(str), "AdminLevel =%d", PlayerData[playerid][AdminLevel]);

Jestli jsi se již zkoul návod od ATomase, vidíš, že hledá entry (respektive další uloženou informaci) ty bys ještě musel hledat "=" Jelikož používáš "AdminLevel =". :d

 

Další dodatek mám k tomuto:

new level,           //Toto je jen k /setlvl
    admina[MAX_PLAYER_NAME],
    nicka[MAX_PLAYER_NAME],
    stringa[128],
    ID;  //Až sem

Proč vytváříš proměnné mimo příkaz, když je mezitím nikde nevyužiješ. Něco jiného Máš toto"new PlayerData[MAX_PLAYERS][pData]" - u toho se předpokládá, že je potřebuješ mít uložené v RAM stále (jelikož jich využíváš v příkazech a třeba i při tom ukládání). Aby jsi mě správně pochopil, ty založíš proměnné, v RAM se ti pro ně vyhradí místo a budou tam dokud nevypneš server. Pokud tyto proměnné vytvoříš až v příkazu v RAM se vytvoří až po zadání příkazu a po jeho skončení se z RAM paměti zase odeberou. ;) Ještě k tomu všemu je ani nikde nevynulováváš, takže pokud někde použiješ tuto proměnnou, bez toho abys ji přepsal, mohlo by tě třeba čekat překvapení. :d

Ok dík, a to jsem celkem tento způsob pochopil... :d No nic asi se vrátím k tomu DOF2 :(:d

Link to comment
Share on other sites

  • 0

DOF2 máš určitě lepší, rozhodně lépe se s ním pracuje. Pokud ovšem chceš můžeš zkusit i y_ini, ale doporučil bych ti určitě se ještě něco naučit z celé knihovny YSI, rozhodně tam je spousta věcí, co dokáže práci usnadnit. 

Link to comment
Share on other sites

  • 0

DOF2 máš určitě lepší, rozhodně lépe se s ním pracuje. Pokud ovšem chceš můžeš zkusit i y_ini, ale doporučil bych ti určitě se ještě něco naučit z celé knihovny YSI, rozhodně tam je spousta věcí, co dokáže práci usnadnit. 

YSI jéžiš hlavně to ne :d Už jsem koukal na pár YSI návodu jako y_timers a takový. Určitě ta knihovna je super, ale to by bylo asi na mě moc. To si radši pohraju s ukládáním a takovými blbostmi :d Já si hlavně chci zkusit, jaké to je si udělat +- celý mod se základními věcmi (Admin příkazy, Práce, ukládání) a takové věci :d No nic, Já si stím jdu zatím nějak pohrát. Kdybych něco nevěděl, určitě napíšu topic :d

Link to comment
Share on other sites

  • 0

GaRGoyLeS... jenže DOF2 dina a všechny systemy co ukládaj logicky fungují na inc file.. tudiž logicky file je taky dělané nato aby sis mohl zapisovat data hráče...

Dá se říct, že toto není ani snad vyvíjeno pro ukládání dat hráče. Je to celkem nepraktické viz. zde. Proto zřejmě vznikly file systémy jako DOF2 (dof2 mi pro tebe připadá jako nejlepší volba), y_ini, ...

ale když už by sis měl vybírat mezi nějaký ma includama tak přemýšlej nad DOF2 nebo y_ini... dini nikdy neber a nechci slyšet že je to easy to use... pokud ti příjde lehčí

dini_setint. a DOF2_SetInt ti příjde težší tak si dej facku... :d

Link to comment
Share on other sites

  • 0

GaRGoyLeS... jenže DOF2 dina a všechny systemy co ukládaj logicky fungují na inc file.. tudiž logicky file je taky dělané nato aby sis mohl zapisovat data hráče...

Dá se říct, že toto není ani snad vyvíjeno pro ukládání dat hráče. Je to celkem nepraktické viz. zde. Proto zřejmě vznikly file systémy jako DOF2 (dof2 mi pro tebe připadá jako nejlepší volba), y_ini, ...

ale když už by sis měl vybírat mezi nějaký ma includama tak přemýšlej nad DOF2 nebo y_ini... dini nikdy neber a nechci slyšet že je to easy to use... pokud ti příjde lehčí

dini_setint. a DOF2_SetInt ti příjde težší tak si dej facku... :d

dini asi ne :d Všude jsem četl, že je to strašně pomalé :d A rychlost je základ! :d

Link to comment
Share on other sites

  • 0

DOF2 máš určitě lepší, rozhodně lépe se s ním pracuje. Pokud ovšem chceš můžeš zkusit i y_ini, ale doporučil bych ti určitě se ještě něco naučit z celé knihovny YSI, rozhodně tam je spousta věcí, co dokáže práci usnadnit.

~> Je fajn, vědět, že existuje na světě ještě někdo, kdo uzná, že DOF2 je lepší, než nějaké podělané dini.

~> Jinak, každý ten include v knihovně má svoje systematické, logické zpracování a uskupení. Každý include se zabývá něčím jiným, a tak je uživatel nemusí nahrávat a ani se učit všechny či nějaké doporučené. Když chceš jen ukládání, tak si jen nahraješ y_ini a nemusíš vůbec koukat na jiné includy. Protože, každý ten include má ještě svojí vlastní složku se soubory zpracování a tak nejsou už propojené jako bylo dříve. No, ale pak samozřejmě je to trochu zbytečně nahrávat jen y_ini včetně hromady preprocesorů, které nevyužije...

 

 

YSI jéžiš hlavně to ne :d Už jsem koukal na pár YSI návodu jako y_timers a takový. Určitě ta knihovna je super, ale to by bylo asi na mě moc. To si radši pohraju s ukládáním a takovými blbostmi :d Já si hlavně chci zkusit, jaké to je si udělat +- celý mod se základními věcmi (Admin příkazy, Práce, ukládání) a takové věci :d No nic, Já si stím jdu zatím nějak pohrát. Kdybych něco nevěděl, určitě napíšu topic :d

~> Pokud máš problém i s podřadnějšími includy na ukládání typu dof2, tak rozhodně YSI ne. Ale, jakmile se na něj 2x, 3x podíváš a vyzkoušíš si ho, po případě se zeptáš, zjistíš, že zase tak extrémní rozdíly tam nejsou, například, když se bavíme o tom ukládání:

 

Existence souboru >> DINI: dini_Exists(); DOF2: DOF2_FileExists(); Y_INI: fexist(); (preprocesor -> INI_FileExists)

Vytváření souboru >> DINI: dini_Create(); DOF2: DOF2_CreateFile(); Y_INI: INI_Open();

Zavírání souboru >> DINI: chyba, žádný DOF2: DOF2_SaveFile(); Y_INI: INI_Close();

Vepisování čísla >> DINI: dini_IntSet(); DOF2: DOF2_SetInt(); Y_INI: INI_WriteInt();

Vepisování Floatu >> DINI: dini_FloatSet(); DOF2: DOF2_SetFloat(); Y_INI: INI_WriteFloat();

Vepisování boolenu >> DINI: dini_BoolSet(); DOF2: DOF2_SetBool(); Y_INI: INI_WriteBool();

Vepisování textu >> DINI: dini_Set(); DOF2: DOF2_SetString(); Y_INI: INI_WriteString();

Načítání čísla >> DINI: dini_Int(); DOF2: DOF2_GetInt(); Y_INI: INI_Int();

Načítání Floatu >> DINI: dini_Float(); DOF2: DOF2_GetFloat(); Y_INI: INI_Float();

Načítání boolenu >> DINI: dini_Bool(); DOF2: DOF2_GetBool(); Y_INI: INI_Bool();

Načítání textu >> DINI: dini_Get(); DOF2: DOF2_GetString(); Y_INI: INI_String();

Link to comment
Share on other sites

  • 0

~> Je fajn, vědět, že existuje na světě ještě někdo, kdo uzná, že DOF2 je lepší, než nějaké podělané dini.

~> Jinak, každý ten include v knihovně má svoje systematické, logické zpracování a uskupení. Každý include se zabývá něčím jiným, a tak je uživatel nemusí nahrávat a ani se učit všechny či nějaké doporučené. Když chceš jen ukládání, tak si jen nahraješ y_ini a nemusíš vůbec koukat na jiné includy. Protože, každý ten include má ještě svojí vlastní složku se soubory zpracování a tak nejsou už propojené jako bylo dříve. No, ale pak samozřejmě je to trochu zbytečně nahrávat jen y_ini včetně hromady preprocesorů, které nevyužije...

 

 

 

~> Pokud máš problém i s podřadnějšími includy na ukládání typu dof2, tak rozhodně YSI ne. Ale, jakmile se na něj 2x, 3x podíváš a vyzkoušíš si ho, po případě se zeptáš, zjistíš, že zase tak extrémní rozdíly tam nejsou, například, když se bavíme o tom ukládání:

 

Existence souboru >> DINI: dini_Exists(); DOF2: DOF2_FileExists(); Y_INI: fexist(); (preprocesor -> INI_FileExists)

Vytváření souboru >> DINI: dini_Create(); DOF2: DOF2_CreateFile(); Y_INI: INI_Open();

Zavírání souboru >> DINI: chyba, žádný DOF2: DOF2_SaveFile(); Y_INI: INI_Close();

Vepisování čísla >> DINI: dini_IntSet(); DOF2: DOF2_SetInt(); Y_INI: INI_WriteInt();

Vepisování Floatu >> DINI: dini_FloatSet(); DOF2: DOF2_SetFloat(); Y_INI: INI_WriteFloat();

Vepisování boolenu >> DINI: dini_BoolSet(); DOF2: DOF2_SetBool(); Y_INI: INI_WriteBool();

Vepisování textu >> DINI: dini_Set(); DOF2: DOF2_SetString(); Y_INI: INI_WriteString();

Načítání čísla >> DINI: dini_Int(); DOF2: DOF2_GetInt(); Y_INI: INI_Int();

Načítání Floatu >> DINI: dini_Float(); DOF2: DOF2_GetFloat(); Y_INI: INI_Float();

Načítání boolenu >> DINI: dini_Bool(); DOF2: DOF2_GetBool(); Y_INI: INI_Bool();

Načítání textu >> DINI: dini_Get(); DOF2: DOF2_GetString(); Y_INI: INI_String();

Díky, že ses to tu krásně shrnul :d Určitě dám přednost DOF2 :d

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...