Kwarde Geplaatst: 5 juni 2010 Rapport Geplaatst: 5 juni 2010 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 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 Reageren
Wanted Geplaatst: 5 juni 2010 Rapport Geplaatst: 5 juni 2010 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. Reageren
Kwarde Geplaatst: 5 juni 2010 Auteur Rapport Geplaatst: 5 juni 2010 Ik dacht al dat ik iets was vergeten.... Maar toch bedankt Gvm Reageren
Megadreams Geplaatst: 5 juni 2010 Rapport Geplaatst: 5 juni 2010 Mooie tutorial, maar alleen is [MAX_PLAYERS] nu eigenlijk vervangen door PVars die veel beter zijn voor je geheugen verbruik. Reageren
Big Boss Geplaatst: 5 juni 2010 Rapport Geplaatst: 5 juni 2010 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. Reageren
Wanted Geplaatst: 6 juni 2010 Rapport Geplaatst: 6 juni 2010 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. Reageren
Wu-Zi-Mu Geplaatst: 12 juni 2010 Rapport Geplaatst: 12 juni 2010 (bewerkt) Hoe zorg je ervoor dat als een String langer is dan 126 karakters hij door gaat op de volgende regel? Bewerkt: 12 juni 2010 door Wu-Zi-Mu Reageren
Kwarde Geplaatst: 12 juni 2010 Auteur Rapport Geplaatst: 12 juni 2010 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 Het gaat automatisch, maximum, lengt 128 Reageren
Wu-Zi-Mu Geplaatst: 12 juni 2010 Rapport Geplaatst: 12 juni 2010 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 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. Reageren
Big Boss Geplaatst: 12 juni 2010 Rapport Geplaatst: 12 juni 2010 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. Reageren
Wu-Zi-Mu Geplaatst: 12 juni 2010 Rapport Geplaatst: 12 juni 2010 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. Reageren
Wanted Geplaatst: 13 juni 2010 Rapport Geplaatst: 13 juni 2010 Er passen maximaal 128 tekens in het vakje waar je de tekst kan invoeren. Reageren
Big Boss Geplaatst: 13 juni 2010 Rapport Geplaatst: 13 juni 2010 Daar had ik nog niet eens aan gedacht, maar het kan dus sowieso niet. Zowel Input als Output kan maximum 128 cellen zijn. [table=header]Server Property|Limit Text I/O|128 cells (512 bytes)[/table] http://wiki.sa-mp.com/wiki/Limits Reageren
Wanted Geplaatst: 13 juni 2010 Rapport Geplaatst: 13 juni 2010 Dat probeer ik nou juist te zeggen in een makkelijk begrijpbare manier. Reageren
Wu-Zi-Mu Geplaatst: 13 juni 2010 Rapport Geplaatst: 13 juni 2010 Ik weet niet of jullie Argonath RPG kennen. Maar die heeft het wel. Reageren
Recommended Posts
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.