Jump to content

návod Práce s DOF2 - dini už nikdy víc! [**]


Scydo

Recommended Posts

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í:

 


public OnGameModeInit() {

	if (!DOF2_FileExists("soubor.txt")) {

		/* Vytvoří prázdný soubor.txt ve scriptfiles */
		DOF2_CreateFile("soubor.txt");
	}
	return 1;
}

Uložit soubor s názvem nicku hráče



public OnPlayerConnect(playerid) {

	new 
		Nick[MAX_PLAYER_NAME + 1];
	GetPlayerName(playerid, Nick, sizeof(Nick));

	/* Spojí nick hráče s textem .txt, takže ho nebudeme muset zbytečně formátovat. */
	strcat(Nick, ".txt");

	if (!DOF2_FileExists(Nick)) {

		/* Kdyby se připojil hráč SkiBig18, vytvořil by se soubor SkiBig18.txt */
		DOF2_CreateFile(Nick);
	}
	return 1;
}

Uložit soubor s názvem nicku hráče s nějakou složitější cestou



public OnPlayerSpawn(playerid) {

	new 
		Nick[MAX_PLAYER_NAME + 1],
		Soubor[50 + 1];
	GetPlayerName(playerid, Nick, sizeof(Nick));

	/* Formátujeme si cestu souboru, kde se má vytvořit */
	format(Soubor, sizeof(Soubor), "Ucty/Udaje/%s.txt", Nick);


	if (!DOF2_FileExists(Nick)) {

		/* Nyni by se vytvořil soubor ve scriptfiles/Ucty */
		DOF2_CreateFile(Nick);
	}	
	return 1;
}

 



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:
ltTD.png

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ý.

Edited by UareBugged
Návod overený
  • Líbí se mi to! (+1) 4
Link to comment
Share on other sites

Ahoj. 
No vyzerá to pekne spravené a ako čítam napísal si to hlavne z hnevu. Vyzerá to skvelo. No ako obaja vieme že presvedčovať niekoho o zmene silou mocou nemá význam. Tak tiež je jedno či používa Dini alebo Dof2 áno napísal som to len ma nezabi :d . Tak proste ak niekto ten pawn nevie a začne používať nadmierne stringy ako som videl v nejednom móde typu 1 000 a ukladá len 4 premenné proste nonsens. Jednoducho server ide zalagovať aj inak než len tím či používa DINI alebo Dof2. Je to istotne depresívne ale za to pravdivé.
Ale ako samotní ciel ktorý chceš dosiahnuť je chvályhodný. Len tak ďalej. Ehm a prepáč že si rypnem ale vďaka bohu že to nie je zas YSI.  :haha:  
 

  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

Zdravím,

Pěkne jsi to rozepsal. A já doufám, že začátečníci co budou chtít něco dělat se soubory si vyberou DOF2 a né dini. Sám používám DOF2 a nevím, jak to někomu může přijít těžší než dini :haha: Dobrá práce. :potlesk:

Edited by Paulee
Link to comment
Share on other sites

Pekné a využiteľné, ale povedzme si na rovinu že vo väčšine prípadov sa nejedná o nedostatok dobre napísaných / vysvetlených návodov.Skôr ide o lenivosť ľudí sa niečomu novému priučiť :d Je to furt ten istý kolotoč.Pomaly na všetko je už nejaký ten návod či už popísaný v slovenskom / českom jazyku, alebo v anglickom ( a to, že je to v EN by myslím na dnešnú dobu nemal byť problém ) a stále sa nachádzajú osoby, ktoré si radšej založia tému na podobných fórach a čakajú na vyriešenie pár dní dajme tomu ako by si radšej prečítali pár riadkov a vyriešili by tým možno aj viac problémov ktoré ešte len prídu.Napríklad.

Ale návod je to dobrý ako vždycky  :klidek:

 

A pre všetkých ľudí, ktorí ma majú v láske prikladám jedno video

https://www.youtube.com/watch?v=0F6nXRwziNg

Edited by b_KEY
Link to comment
Share on other sites

Pěkné no, akorát to je asi nějaký starší DOF2, nebo něco takového, protože DOF2_ExistFile tam neexistuje (Alespoň v tom pastebinu co si tam dal)

 

 

// Aha, existuje ale je to FileExists, ty to máš naopak

Edited by Daniels
Link to comment
Share on other sites

Mas v tom navodu chyby.

    public OnPlayerConnect(playerid) {
     
    	new 
    		Nick[MAX_PLAYER_NAME + 1],
    		Jmeno[MAX_PLAYER_NAME + 1];
    	GetPlayerName(playerid, Jmeno, sizeof(Jmeno));
    	GetPlayerName(playerid, Nick, sizeof(Nick));
    	strcat(Nick, ".txt");
     
    	if (!DOF2_ExistFile(Nick)) {
     
    		DOF2_CreateFile(Nick);
    		DOF2_SetString(Nick, "JmenoHrace", Jmeno);
    		/* Nyní se ve souboru uloží údaj: JmenoHrace = SkiBig18 */
    		DOF2_SaveFile();
    	}
    	return 1;
    }

K Nick uz nemuzes pripojit .txt protoze se to tam nevleze.

Cislo = DOF2_Get("soubor.txt", "Cislo");
 
	/* Přiřadí k proměnné DesCislo zjištěnou hodnotu ze souboru: */
	DesCislo = DOF2_Get("soubor.txt", "DesCislo");
 
	/* Přiřadí k proměnné String zjištěnou hodnotu ze souboru: */
	strcat(String, DOF2_Get("soubor.txt", "String"));
 
	/* Přiřadí k proměnné Boolean zjištěnou hodnotu ze souboru: */
	Boolean = DOF2_Get("soubor.txt", "Boolean");

Tohle urcte fungovat nebude.

 

Kdyz je to navdo na dve hvezdicky tak bys mohl zminit i moznost pouziti tagu to se v praxi pouziva.

 

ps U definice nakonci napis ze ji hrac musi nejprve vytvorit jinak mu konverze nebude fungovat.

Edited by pepcaarn
Link to comment
Share on other sites

Zdravím,

Pěkne jsi to rozepsal. A já doufám, že začátečníci co budou chtít něco dělat se soubory si vyberou DOF2 a né dini. Sám používám DOF2 a nevím, jak to někomu může přijít těžší než dini :haha: Dobrá práce. :potlesk:

~> Díky moc. Ale stejně mi to připadá takové od flákané. Asi udělám ještě nějakou ukázku použití.

~> Upřímně i mě by zajímalo, co je na tom tak hrozně těžké pochopit na přepsání dini na dof2 a Int/Bool/Float/String přehodit se Set.

 

Pekné a využiteľné, ale povedzme si na rovinu že vo väčšine prípadov sa nejedná o nedostatok dobre...(více)

~> Začátečníci berou návody spíše jako nějaký zákon. Tak to musí být a ne jinak.... ale už si neumí uvědomit, že je to návod, má to toho člověka naučit, a ukázat jednu z věcí, co s tím jde provádět, neříká co má přesně dělat a ne jinak(takhle pak vznikají ty ctrl c+v v módech)..

~> btw: Zajímavý pohled na celou věc. Ale pro příště už nikomu, kdo dělá registraci a login systém, nedoporučuj dini. Děkuji

 

Pěkné no, akorát to je asi nějaký starší DOF2, nebo něco takového, protože DOF2_ExistFile tam neexistuje

// Aha, existuje ale je to FileExists, ty to máš naopak

Opraveno(to víš, už mě mate to debi** dini :d)...

 

Mas v tom navodu chyby.

Díky za upozornění. Opraveno.

 

Kdyz je to navdo na dve hvezdicky tak bys mohl zminit i moznost pouziti tagu to se v praxi pouziva.

~> Já používam dof2 už přes několik let a zatím jsem neměl za nutné ty tagy použít, proto mi připadá, že to není tak extra žádané. Ani tady jsem neviděl ještě někoho je používat. Ale uvidíme. Uvážím to ještě.

 

A k tomu preprocesoru. Vlastně by bylo fajn, kdyby o tom začátečníci nevěděli, protože, jakmile zveřejní help, a budou tam pracovat s dof2 jako s dini, a nebudeme to vědět, tak v tom bude zmatek.

Edited by SkiBig18
Link to comment
Share on other sites

Jsem rád, že umíš upravit příspěvek a píšeš že to tak bylo  :facepalm:

:facepalm: Píšu snad někde, že nemáš pravdu? Že to tak nebylo? Tím obrázkem, co jsem poslal, jsem ti chtěl naznačit, že jsem už všechno opravdu opravil. Nemám za nutné tu z někoho dělat debila.

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...