Jump to content

[Tutorial] Strings & Variables


Kwarde

Recommended Posts

Hoi!

Welkom bij de tutorial over strings.



VARIABLES

We beginnen met de variables

Maak een variable op deze manier aan:

new var_name;

Je kan var_name zelf veranderen , bijvoorbeeld:

new playersonline;

Dat is nog heel simpel! Je kan ook nog eens meteen een variable toevoegen!

Doe dit door '= {getal};' erachter te zetten. Bijvoorbeeld:

new playersonline = 0;

Dit is de makkelijkste manier om variables aan te maken!

Nu de iets 'mooiere' manier, vooral handig voor account informatie!

Meestal zie je dit:

new geld[MAX_PLAYERS];
new adminlevel[MAX_PLAYERS];

Dan check je de admin bijv. zo: ' if(adminlevel[playerid] >= 2) '

Dit staat niet mooi en komt onprofessioneel over (vind ik)

Daarom is ENUM wel handig! Kijk maar naar het voorbeeld:

enum var_naam()
{
	geld,
	adminlevel
};

Ziezo, nu heb je deze twee in één 'string' gezet, maar ze werken nog niet!

Je moet de variable ook zelf maken! Dit doe je weer met 'new var_naam'

Let er wel op dat de naam achter enum niet hetzelfde is als de nieuwe variable die je gaat aanmaken!

En zorg er ook voor dat de enum IN de variable komt! Doe dit zo:

enum var_naam()
{
geld,
adminlevel
};
new andere_var_naam[MAX_PLAYERS][var_naam];

Hetgene achter enum moet dus ook tussen de haakjes ( [ & ] ) komen!

Nu check je een admin level zo:

if(andere_var_naam[playerid][adminlevel] >= 2)

Simpel, is het niet?

STRINGS

Dit is ook heel makkelijk, als je het maar snapt ;)

Weet je nog dat ik de 'new playersonline;' had aangemaakt?

Ik zal aan de hand van deze van deze variable uitleggen hoe je de BASIS string maakt.

Je kan met de 'normale' manier, zonder verschillende functie's gewoon 'tellen'.

Als een speler bijv. een speler online komt tel je één nummer aan de variable toe.

Ik zal een voorbeeld geven:

public OnPlayerDisconnect(playerid)
{ 
playersonline ++;
return 1;
}

De '++' staat dus eigenlijk voor '+1' !

Hetzelfde geldt voor '--', alleen dan is het dus '-1'

Maar wat nou als je er bijv. 15 bij op wilt tellen, of aftrekken?

Dit doe je met '+=' !

Een voorbeeld:

new var = 0;
new var += 15;
new var -= 10;

Je begint met string 0, oftewel 'niks'

Dan telt hij er 15 bij op, met '+= 15'

En daarnaa telt hij er tien vanaf! met '-= 10'

Dus nu heeft de variable 'var' de waarde 5

Je kan met de normale manier dus alleen tellen, of geld, adminlevel etc. aangeven

Maar voor een gebruikerssysteem MET WACHTWOORD heb je iets anders nodig!

Want dit werkt niet:

new wachtwoord[MAX_PLAYERS];
...(code)
wachtwoord[playerid] = "test1234";

Dan krijg je de volgende error:

error 010: invalid function or declaration

Dit is natuurlijk niet de bedoeling :puh:

Hiervoor gebruik je strins.

Deze ziet er zo uit:

strins(var, string, start, einde);

Var = Hetgene waar de string wordt ingezet

String = Hetgene wat je IN de variable zet

Start = Waar de string begint

einde = oftewel, maximum lengte

Ik zal een voorbeeld script geven, aan de hand van een DIALOG venster

new wachtwoord[MAX_PLAYERS]; //Ik gebruik even geen ENUM 

public OnPlayerConnect(playerid)
{
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Wachtwoord", "Vul een wachtwoord in", "OK", "Annuleer");
return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 1) //Als dialog ID '1' is
{
	if(response) //Druk je wel op OK en niet op Annuleer?
	{
	strins(wachtwoord[playerid], inputtext, 0, 64); //Je wachtwoord mag dus niet langer dan 64 tekens zijn. Ik heb hier nu geen beveiliging op gezet!
	}
	else //Als je op Annuleer klikt
	{
	//Doe IETS! zoals kick, of laat dialog opnieuw zien
	} 
}
return 1;
}

Hopelijk snap je dit een beetje ;)

Zo niet, zeg het hier even, dan probeer ik het uit te leggen.

STRING VERWIJDEREN

Dit is HEEL simpel.

Het kan op 2 manieren:

1e manier:

var_naam = 0;

Dit zet de var_naam naar 0, als je een nieuwe variable aanmaakt en je zet bijv niet neer: new iets = 1; (de ' = 1 ') is de standaardwaarde 0!

2e manier:

STRDEL

Deze is IETS lastiger, maar wel 'mooier'

Gebruik hem zo:

strdel(var_naam, begin, eind);

var_naam = De string die je wilt verwijderen

begin = Het begin dat je wilt verwijderen

eind = Het einde dat je wilt verwijderen

Over het 'begin' en 'eind':

VOORBEELD:

Je hebt een wachtwoord opgeslagen in wachtwoord[playerid], met string: test1234

Je gebruikt STRDEL en hij begint bij 2, en eindigd op 5

Dan is je wachtwoord nu: est123

Als je het HELE wachtwoord wilt verwijderen kan je het beste dit doen:

strdel(wachtwoord[playerid], 0, strlen(wachtwoord[playerid]);

strlen telt de lengte van iets, en je telt hier het aantal cijfers en letter van het wachtwoord, en hij eindigd bij de laatste.

Dus wordt ALLES verwijderd

Ik hoop dat dit iets een beetje uitlegt!

Groeten,

Kwarde

Link to comment
Delen op andere websites

Goede tutorial, alleen kloppen de strings niet.

Een string is eigenlijk gewoon een variable waar een zin in opgeslagen wordt. Dus kan je bijvoorbeeld:

new String[128] = "Hallo, ik ben een string.";

gebruiken.

new Wachtwoord[MAX_PLAYERS];

wordt eigenlijk gebruikt als een integer. Dus hierin kan je geen string in opslaan voor alle spelers, zoals jij waarschijnlijk wel bedoelde. Om dit te doen moet je van deze array een string maken. Dat doe je op deze manier:

new Wachtwoord[MAX_PLAYERS][128];

Nu kan je in deze variable voor iedereen een string opslaan.

Ik ben nooit zo goed in uitleggen, dus ik hoop dat een andere scripter die het beter kan uitleggen het van mij overnemen. :puh:

Link to comment
Delen op andere websites

uitleg

Daar dacht ik eerst ook aan. Maar ik heb het getest en ik kreeg geen errors.

Ik heb overigens nog nooit met string insert gewerkt, dus ik weet eigenlijk niet waarvoor je dat nu juist gebruikt.

Ik gebruik zelf altijd format als ik een string aan een andere string wil toewijzen.

Link to comment
Delen op andere websites

Hij zou als het goed is niet moeten werken. De compiler vervangt 'MAX_PLAYERS' door 500. Hierdoor is de variable 'Wachtwoord' nu een string van 500 cellen lang. Als het goed is, zou je dan als je

Wachtwoord[playerid]

doet, je alleen de karakter zou krijgen die op die positie staat.

Of, wat ook mogelijk is, is dat het wachtwoord gecodeerd wordt, en zo een integer wordt. Dan zou het wel kunnen namelijk.

Link to comment
Delen op andere websites

Hoe zorg je ervoor dat als een String langer is dan 126 karakters hij door gaat op de volgende regel?

Dat gaat (vlgns mij) niet :puh:

Het gaat automatisch, maximum, lengt 128

Het kan wel, ik heb het gezien op verschillende servers.

Maar ik weet niet hoe.

Als ik bijv. /advertentie <een tekst van 500 tekens>

dat ik dan meerdere lijnen met tekst krijg.

Link to comment
Delen op andere websites

Dat kan niet, want de maximum lengte van een chatbericht is 128 cellen (tekens). Bij 64 tekens wordt het bericht namelijk al afgekapt.

Textdraws zijn een ander verhaal, daar kan je volgens mij zoveel tekst in steken als je wil.

Link to comment
Delen op andere websites

Dat kan niet, want de maximum lengte van een chatbericht is 128 cellen (tekens). Bij 64 tekens wordt het bericht namelijk al afgekapt.

Textdraws zijn een ander verhaal, daar kan je volgens mij zoveel tekst in steken als je wil.

Wat ik bedoel is dat als je bij een cmd zoals /advert <tekst> een tekst van bijv. 250 tekens hebt dat je dan dit krijgt.

ADVERTENTIE: TekstTekstTekstTekstTekstTekstTekstTekst...

ADVERTENTIE: Overige Tekst

Dat het bericht wordt afgekapt en op de volgende regel weer verder gaat.

Link to comment
Delen op andere websites

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