Jump to content

[TUT]Random punten & geld verdienen met random code


David22

Recommended Posts

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 :D

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

Succes!

David.

Bewerkt: door David22
Link to comment
Delen op andere websites

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?

Link to comment
Delen op andere websites

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

Link to comment
Delen op andere websites

Zeer netjes! :tu:

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;
}

Link to comment
Delen op andere websites

  • 1 year later...

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?

Link to comment
Delen op andere websites

  • 2 maanden later...

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