Jump to content

[Mini Tutorial]Communiceren met files


Recommended Posts

Geplaatst: (bewerkt)

[Mini Tutorial]Communiceren met files

(Is toch niet zo 'mini' geworden als ik van te voren gedacht had

:7)

Zo, ik heb weer eventjes wat tijd uitgetrokken om een nieuwe tutje te maken. :puh:

Ditkeer zal ik (proberen) uit te leggen hoe je kan communiceren met bestanden.

Allereerst moet natuurlijk de maker van dini en dutils bedankt worden: 'Dracoblue'

Dini is een systeem dat het communiceren makkelijker maakt.

Er zijn 4 soorten 'waarden':

- Strings: Dit zijn zinnen/teksten (zoals namen van spelers)

- Integers: Dit zijn getallen zonder decimalen. (Bijvoorbeeld 1 of 2 of 56)

- Floats: Dit zijn getallen mét decimalen. (Bijvoorbeeld 4.22 of 8.1 of 694.124959)

- Bools: Deze kan maar 2 waarden hebben: '0' of '1' (True of False)

Strings:

Strings zijn teksten, dit kan bijvoorbeeld de naam van een speler zijn.

Om een string in een file te zetten gebruik je deze functie:

dini_Set(naam van file, key, waarde);

Voorbeeld:

new teststring[128];
format(teststring, 128, "Hallo dit is een string.");
dini_Set("Testfile.txt", "Tekst", teststring);

De uitkomst is dan in de file 'Testfile.txt':

Tekst=Hallo dit is een string.

Om een string UIT een file te halen gebruik je de functie:

dini_Get(naam van file, key);

Strings moeten altijd worden opgeslagen in array's:

Voorbeeld:

new Zinnetje[256];
Zinnetje =  dini_Get("Testfile.txt", "Tekst");

Let op: Als je de bovenstaande manier gebruikt, MOET de size van de nieuwe variabele minimaal '255' zijn!!

Anders krijg je een error ("array sizes do not match, or destination array is too small")

Als je de size echt kleiner wilt hebben, moet je 'format' gebruiken:

new Zinnetje[64];
format(Zinnetje, 64, "%s", dini_Get("Testfile.txt", "Tekst"));

Integers:

Integers zijn getallen zonder een decimaal erachter.

Voorbeelden van integers zijn: ID's van bijvoorbeeld wapens, spelers, voertuigen. Ook het geld van een speler is een integer.

Om integers op te slaan gebruik je de volgende functie:

dini_IntSet(Naam van file, key, waarde);

Voorbeeld:

new Geldbedrag;
Geldbedrag = GetPlayerMoney(playerid);
dini_IntSet("Testfile.txt", "Money", Geldbedrag);

Voorbeeld resultaat in 'Testfile.txt':

Money=43128

Om integers UIT een file te lezen, gebruik je:

dini_Int(Naam van file, key);

Voorbeeld:

New Geldbedrag;
Geldbedrag = dini_Int("Testfile.txt", "Money");
GivePlayerMoney(playerid, Geldbedrag);

Floats:

Floats zijn getallen met een cijfer achter de komma (in pawno een punt).

Voorbeelden van floats die gebruikt worden in sa:mp:

- Coordinaten

- Health (van spelers en voertuigen)

- Armour

Om een float op te slaan gebruik je deze functie:

dini_FloatSet(Naam van file, key, waarde);

Voorbeeld:

new Float:LastX, Float:LastY, Float:LastZ;
GetPlayerPos(playerid, LastX, LastY, LastZ);
dini_FloatSet("Testfile.txt", "X", LastX);
dini_FloatSet("Testfile.txt", "Y", LastY);
dini_FloatSet("Testfile.txt", "Z", LastZ);

Voorbeeld resultaat in 'Testfile.txt':

X=452.9612

Y=3499.9153

Z=55.1272

Om floats uit een file te halen gebruik je:

dini_Bool(Naam van file, key);

Voorbeeld:

new Float:NewX, Float:NewY, Float:NewZ;
NewX = dini_Float("Testfile.txt", "X");
NewY = dini_Float("Testfile.txt", "Y");
NewZ = dini_Float("Testfile.txt", "Z");
SetPlayerPos(playerid, NewX, NewY, NewZ);

Bools (Booleaans):

Booleaans zijn variabelen die maar 2 waarden kunnen hebben: '0' of '1' (True of False)

Ik heb hier eerlijk gezegd nog nooit gebruik van gemaakt en weet niet zo goed waarvoor je dit zou kunnen gebruiken, maar ik doe toch maar een voorbeeldje:

Om booleaans in een file te zetten, gebruik je:

dini_BoolSet(Naam van file, key, waarde);

En om ze eruit te halen gebruik je:

dini_Bool(Naam van file, key);

Dit waren de methoden om een bepaalde waarde in en uit files te halen.

Nu zijn er nog 3 functies die belangrijk zijn:

dini_Create(naam van file);

Deze functie kan een nieuwe file aanmaken in de map 'scriptfiles'

Voorbeeld:

dini_Create("Testfile.txt");

Als je een file in een aparte sub-map wilt plaatsen gebruik je een slash:

dini_Create("Map1/Testfile.txt");

dini_Exists(naam van file);

Deze functie checkt of het opgegeven bestand wel of niet bestaat.

De functie 'returnt' '0' als de file niet bestaat, en '1' als de file wel bestaat.

Voorbeeld:

if(dini_Exists("Testfile.txt") == 0)
{
dini_Create("Testfile.txt");
}

dini_Remove(Naam van file);

Deze functie kan het opgegeven bestand verwijderen.

Voorbeeld (Compleet commando):

if(strcmp(cmdtext, "/removefile", true, 11)==0)
{
new FileName[64];
if(!strlen(cmdtext[12]))
{
	SendClientMessage(playerid, 0xFF0000AA, "Use: /removefile [naam van file]");
	return 1;
}
format(FileName, 64, "%s", cmdtext[12]);
if(dini_Exists(FileName) == 1)
{
	dini_Remove(FileName);
	SendClientMessage(playerid, 0xFF000AA, "File succesfully removed!");
}
else
{
	SendClientMessage(playerid, 0xFF0000AA, "This file does not exists!");
}
return 1;
}

Nou, dit waren de belangrijkste functies van Dini. Hiermee kan je heel veel expirimenteren!!

Voor meer voorbeelden kan je kijken in mijn tutorial over Accounts: Daarin worden ook deze functies gebruikt!

Ohja, je hebt natuurlijk wel de include-files 'dini.inc' en 'dutils.inc' nodig.

En je moet bovenaan je script hebben staan:

#include <dini>

Ik heb de files eventjes geüpload (voor het geval je ze nog niet had gedownload):

=>Klik<=

Er zit ook nog het bestand 'DUDB.inc' bij. Die kan je gebruiken om strings te coderen.

Dit word vaak gebruikt bij het maken van files die de naam van spelers moeten hebben.

(Want als files met tekens zoals ']' of '[' of '-' kunnen problemen geven.)

Zo zal de naam 'Sandra[NL]' worden veranderd naar: Sandra_05NL_06

Je gebruikt het zo:

new PName[MAX_PLAYER_NAME];
GetPlayerName(playerid, PName, sizeof(PName));\
dini_Create(udb_encode(PName));
dini_IntSet(udb_encode(PName), "Money", 10000);

Dit was het voor deze keer, als je nog vragen hebt, stel ze gerust.

Groetjes =>Sandra<=

Bewerkt: door =>Sandra<=
  • Reacties 33
  • Created
  • Laatste reactie

Top Posters In This Topic

  • Sandra

    7

  • Remcconen

    4

  • steve6972

    4

  • nick5556

    3

Geplaatst:

Mooi duidelijk uitgelegd, en super handig voor mij & voor mijn gamemode!

Bedankt, hier zal ik wat aan hebben.

_O_

Geplaatst: (bewerkt)

Mooi!, echt waar, dit is erg handig want ik denk dat de meeste mensen hiermee in de war raken

EDIT: een opmerking, er is niets uit gelegt over 'hash'

Bewerkt: door nick5556
Geplaatst: (bewerkt)

Hoi Sandra,..

ik vind die tutorials, van jou altijd wel interesant, en ik leer er ook van.

Ik ga deze tutorial ook uitprinten, en doorlezen.

Maar voor zover, ik het nu bekeken heb, zou ik niet weten, wat ik er allemaal mee kan doen.

Kun je een paar voorbeelden geven, naast jou tutorial over Accounts,misschien kunnen mensen die er meer verstand van hebben,

dan een resultaat laten zien van èèn van jou voorbeelden, waardoor het allemaal nog duidelijker wordt.

Gr Steve

Bewerkt: door steve6972
Geplaatst: (bewerkt)

Je kan bijvoorbeeld ook een config-file maken (instellingen).

Je zou zelf handmatig een file kunnen aanmaken. Als voorbeeld nemen we de file: "Instellingen.cfg"

Die kan je zelf aanmaken en dan neem je bijvoorbeelds als inhoud:

WeerID=40

Tijd=13

GamemodeText=Steve's gamemode

En dan zet je in je gamemode (bijvoorbeeld bij OnGameModeInit() )

new Time, Weather, GameText[128];
Time = dini_Int("Instellingen.cfg", "Tijd");
Weather = dini_Int("Instellingen.cfg", "WeerID");
format(GameText, 128, "%s", dini_Get("Instellingen.cfg", "GamemodeText"));
SetWorldTime(Time);
SetWeather(Weather);
SetGamemodeText(GameText);

Deze code kan natuurlijk ook korter:

SetWorldTime(dini_Int("Instellingen.cfg", "Tijd"));
SetWeather(dini_Int("Instellingen.cfg", "WeerID"));
SetGamemodeText(dini_Get("Instellingen.cfg", "GamemodeText"));

Bewerkt: door =>Sandra<=
Geplaatst:

oke,..dus als ik het goed begrijp, en ik maak een, Instellingen.cfg bestand aan,

dan kan ik daar, als ik dat nodig vind, bepaalde waarde's veranderen, en die worden bij het opstarten van mijn server toegepast.

Ik hoef dan niets te doen aan mijn gamemode script, dat gaat dan automatisch.

Geplaatst:
oke,..dus als ik het goed begrijp, en ik maak een, Instellingen.cfg bestand aan,

dan kan ik daar, als ik dat nodig vind, bepaalde waarde's veranderen, en die worden bij het opstarten van mijn server toegepast.

Ik hoef dan niets te doen aan mijn gamemode script, dat gaat dan automatisch.

:tu:

Geplaatst:

Om een lang verhaal kort te maken: Super!!

Ik liep al een poosje met het idee om het allemaal te gaan bestuderen en ermee te gaan knutselen. Dus dit komt wel erg goed uit!

:dans::dans::dans:

groetjes,

Geplaatst:

Ik begrijp nu, het nut van gegevens, vanuit bestanden halen, die vervolgens het script gebruikt,

om er wat mee te doen.

Maar wat heeft het voor zin, om bevoorbeeld, zinnen/tekst/getallen enz, vanuit het script,

te plaatsen in een bestand. :?

Geplaatst:
Ik begrijp nu, het nut van gegevens, vanuit bestanden halen, die vervolgens het script gebruikt,

om er wat mee te doen.

Maar wat heeft het voor zin, om bevoorbeeld, zinnen/tekst/getallen enz, vanuit het script,

te plaatsen in een bestand. :?

Als jij bijv. een script maakt wat anderen kunnen downloaden, dan is het handig als je config.cfg hebt zodat niemand het script echt in moet gaan.

Geplaatst:
Ik begrijp nu, het nut van gegevens, vanuit bestanden halen, die vervolgens het script gebruikt,

om er wat mee te doen.

Maar wat heeft het voor zin, om bevoorbeeld, zinnen/tekst/getallen enz, vanuit het script,

te plaatsen in een bestand. :?

Als jij bijv. een script maakt wat anderen kunnen downloaden, dan is het handig als je config.cfg hebt zodat niemand het script echt in moet gaan.

oke, dat gedeelte snap ik.

Maar draai het verhaal eens om, wat is het nut van gegevens uit het script halen, en plaatsen in een bestand.

Geplaatst:

- Account systeem (in dit geval dan het uitloggen van een speler): zijn/haar gegevens moeten worden opgeslagen in een bestand.

- Als je bijvoorbeeld een race-systeem hebt, zou je bijvoorbeeld de highscores kunnen opslaan.

Gebruik je fantasie :puh: Er zijn oneindig veel mogelijkheden ;)

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.

×
×
  • Create New...