David22 Geplaatst: 21 maart 2009 Rapport Geplaatst: 21 maart 2009 (bewerkt) Tutorial Random punten & geld verdienen met code Welkom! In deze tutorial ga ik je uitleggen hoe je een script kan maken, waarmee je om de vijf minuten in de chat de volgende boodschap kan plaatsen: PUNTEN VERDIENEN: Verdien nu [1 - 5]* punten en [100 - 400]* dollar door als eerste [ code ]* te typen! * = random Okay, voordat we beginnen hebben we eerst de nodige defines en variabelen nodig. Dit zijn: Define voor de kleur Variabele (integer) voor de code Variabele voor het aantal te verdienen punten Variabele voor het aantal te verdienen dollars Variabele (string) voor de code. Dit komt er dan als volgt uit te zien: #define YELLOW 0xFFA500AA new PuntenVerdienenCode; new AantalPuntenVerdienen; new AantalDollarsVerdienen; new PuntenVerdienenText[128]; Je zal je wel afvragen waarom we zowel een integer (getal) als een string (tekst) voor de code nodig hebben. Dit is omdat we eerst het getal random kiezen, en we deze later met strcmp (string compare) met de ingevoerde tekst vergelijken. Verder moeten we nog de functie hebben die om de vijf minuten wordt uitgevoerd, waarin ook de code en het aantal punten / dollar gegenereerd wordt. Omdat we deze met een timer instellen, moet deze public zijn, en dus ook geforward. Dit levert de volgende code op: forward PuntenVerdienen(); Nu gaan we de functie zelf maken. Zet de volgende code onderaan je script: public PuntenVerdienen() { return 1; } Nu gaan we deze functie invullen. We moeten eerste een variabele maken voor de te geven boodschap, dit doen we door de volgende code te plaatsen: new Bericht[128]; Nu gaan we de eerder gemaakte variabelen waarden geven. Dit doen we met de functie random. Dit geeft ons de volgende code: PuntenVerdienenCode = 111111+random(888888); //Random code van 6 cijfers** AantalPuntenVerdienen = random(5); //Random aantal punten AantalDollarsVerdienen = random(4); //Random aantal dollars ** = By BigBoss Maar, nu lopen we tegen een probleem aan. De functie random(4) geeft namelijk 0, 1, 2 of 3. Omdat het een beetje lullig zou zijn als er in eens in de chat het volgende zou staan: PUNTEN VERDIENEN: Verdien nu 0 punten en 0 dollar door als eerste 123456 te typen! Gelukkig is dit probleem gemakkelijk op te lossen door 1 bij de uitkomst van random op te tellen. Dat levert de volgende code op: AantalPuntenVerdienen += 1; AantalDollarsVerdienen += 1; Maar, het aantal te verdienen dollars moet een honderdtal worden. Gelukkig is dit ook simpel te regelen, wel op de volgende manier: AantalDollarsVerdienen *= 100; Nu we al deze gegevens op een rijtje hebben, moeten we nog een bericht in de chat plaatsen dat de gebruiker de code kan intypen. Daarvoor moeten we eerst het bericht een waarde geven, en vervolgens deze in de chat plaatsen. Dat gaat op de volgende manier: format(Bericht, sizeof(Bericht), "PUNTEN VERDIENEN: Verdien nu %d punten en %d dollar door als eerste %d te typen!", AantalPuntenVerdienen, AantalDollarsVerdienen, PuntenVerdienenCode); SendClientMessageToAll(YELLOW, Bericht); Nu moeten we in deze functie alleen nog maar de string aanmaken waarmee de ingetypte tekst vergeleken kan worden. Dit doen we ook met een format: format(PuntenVerdienenText, sizeof(PuntenVerdienenText), "%d", PuntenVerdienenCode); Nu zijn we klaar met de functie PuntenVerdienen(). Het enige wat we nu nog moeten doen, is het vergelijken van de ingetypte tekst met de code. Dit doen we bij de OnPlayerText(playerid, text[]) functie. We beginnen met het vergelijken met de ingetypte tekst (text) met de code (PuntenVerdienenText). Dit doen we als volgt: if(!strcmp(PuntenVerdienenText, text, true)) { Ook nu moeten we weer wat variabelen aanmaken: new Bericht[128]; new SpelerNaam[MAX_PLAYER_NAME]; new AantalPuntenTotaal; Hierna verzenden we een bericht naar alle spelers (GetPlayerName -> format -> SendClientMessageToAll) GetPlayerName(playerid, SpelerNaam, sizeof(SpelerNaam)); format(Bericht, sizeof(Bericht), "%s heeft %d punten en %d dollar verdient door %s als eerste te typen!", SpelerNaam, AantalPuntenVerdienen, AantalDollarsVerdienen, PuntenVerdienenText); SendClientMessageToAll(YELLOW, Bericht); Nu moeten we de speler de punten en dollars ook daadwerkelijk geven: AantalPuntenTotaal = GetPlayerScore(playerid) + AantalPuntenVerdienen; GivePlayerMoney(playerid, AantalDollarsVerdienen); SetPlayerScore(playerid, AantalPuntenTotaal); Om te voorkomen dat de tweede speler die de code intypt, ook het aantal punten krijgt, zetten we de code op een onmogelijk te raden getal: PuntenVerdienenText = "15963324879541616489168619841687613"; En om te voorkomen dat de ingetypte code in de chat verschijnt, voegen we nog een return-waarde toe: return 0; } Bijna klaar Nu moeten we alleen nog een paar dingen in OnGamemodeInit toevoegen. Ten eerste is dit het niet te raden getal, om te voorkomen dat de eerste vijf minuten de eerste persoon die niets intypt 0 punten en 0 dollar krijgt. PuntenVerdienenText = "15963324879541616489168619841687613"; Verder moeten we de timer ook nog instellen: SetTimer("PuntenVerdienen", 300000, true); KANTTEKENING: 300000 miliseconden = 300 seconden = 5 minuten ! Zo. Nu zijn we klaar. De volledige code komt er zo uit te zien. Zo. Dit is geen verschrikkelijk moeilijke tutorial, maar ik hoop wel dat jullie er wat aan hebben gehad Succes! David. Bewerkt: 21 maart 2009 door David22 Reageren
Remi-X Geplaatst: 21 maart 2009 Rapport Geplaatst: 21 maart 2009 Ziet er goed en duidelijk uit David, misschien dat ik het ga gebruiken voor de corporation week Alleen 1 ding: PUNTEN VERDIENEN: Verdien nu [1 - 5]* punten en [100 - 400]* dollar door als eerste [ code ]* te typen! Als je nou maar 1 punt gaat krijgen terwijl het getal 894236 is en daarbij 400 dollar, of 5 punten en 400 dollar bij 112233, of zo'n soortgelijk effect is dat een beetje raar. Is daar niks aan te doen? Dat de punten, dollars en codes met elkaar communiceren? Reageren
Big Boss Geplaatst: 21 maart 2009 Rapport Geplaatst: 21 maart 2009 Ik ben aan het lezen. Nice tut. Alleen dit klopt niet helemaal: PuntenVerdienenCode = random(999999); //Random code van 6 cijfers Dit geeft een getal tussen 0 en 999999. Het getal kan dus net zo goed 1 of 2 of zo zijn. Om het op te lossen kan je dit doen: PuntenVerdienenCode = 111111+random(888888); //Random code van 6 cijfers Reageren
David22 Geplaatst: 21 maart 2009 Auteur Rapport Geplaatst: 21 maart 2009 Bedankt voor de tip, ik heb het even toegevoegd aan de tutorial Reageren
Sandra Geplaatst: 22 maart 2009 Rapport Geplaatst: 22 maart 2009 Zeer netjes! Je hoeft trouwens niet per sé die 'PuntenVerdienenCode' te converteren naar een string. Je kan ook de ingevoerde text bij OnPlayerText converteren naar een integer met 'strval(text);'. Dus: public OnPlayerText(playerid, text[]) { new IngevoerdeText = strval(text); if(IngevoerdeText == PuntenVerdienenCode) { //de speler heeft goed aantal ingevoed //geef geld e.d. } return 1; } Reageren
jorD1 Geplaatst: 27 maart 2009 Rapport Geplaatst: 27 maart 2009 nice Tut ik heb hem in het engels gezet en van de punten exp gemaakt zodat hij leuker op mijn server kan werken. Reageren
Morph1 Geplaatst: 16 september 2010 Rapport Geplaatst: 16 september 2010 srry voor de bump maar ik wil deze heel graag gebruiken, bij dit stukje : if(!strcmp(PuntenVerdienenText, text, true)) krijg ik de error : C:\Users\Gebruiker\Desktop\samp server\gamemodes\TFD.pwn(2651) : error 017: undefined symbol "text" hoe komt dit, "text" zou hij tog gewoon moeten herkennen? Reageren
Remcconen Geplaatst: 18 september 2010 Rapport Geplaatst: 18 september 2010 Waar en hoe heb je "text" aangemaakt/gedefineerd? Reageren
Morph1 Geplaatst: 18 september 2010 Rapport Geplaatst: 18 september 2010 Waar en hoe heb je "text" aangemaakt/gedefineerd? nergens maar er staat in die tut ook niet dat je dat moet doen, en hoe moet je dat dan aanmaken? Reageren
Big Boss Geplaatst: 18 september 2010 Rapport Geplaatst: 18 september 2010 Weet je zeker dat je dat stukje onder OnPlayerText hebt geplaatst? Reageren
Morph1 Geplaatst: 18 september 2010 Rapport Geplaatst: 18 september 2010 Weet je zeker dat je dat stukje onder OnPlayerText hebt geplaatst? ow stomme fout, had hem onder OnPlayerCommandText XD thanks Reageren
MATHIJS Geplaatst: 27 november 2010 Rapport Geplaatst: 27 november 2010 Zo. Nu zijn we klaar. De volledige code komt er zo uit te zien. Daar zit een foutje in bij de timer. De timer staat daar op 10000 i.p.v 300000 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.