Jump to content
Geplaatst:
comment_996696

[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
  • Bezichtigingen 5.8k
  • Created
  • Laatste reactie

Top Posters In This Topic

Featured Replies

  • 6 maanden later...
Geplaatst:
comment_1758192

dat heeft totaal geen zin:S of wil je dat als je een auto verzet dat ze dan de volgende keer dat je je server restart dat ze dan nog op die plaats staan waar je ze heb gezet?

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

Recent actief 0

  • Er zijn hier geen geregistreerde gebruikers aanwezig.