Ga naar hoofdinhoud

Cooldowns

Deze tutorial behandelt een veelgebruikte gameplay-mechaniek: cooldowns. Een cooldown beperkt hoe vaak een speler iets mag doen (ability, chat, etc.) voor balans of antispam.

Eerst het minder goede voorbeeld met SetTimer en een public.

Timers gebruiken​

Voorbeeld met toestaan/verbieden en later weer toestaan via SetTimerEx (originele code ongewijzigd laten werkt prima).

Vervolgens een stopwatch met SetTimerEx die elke seconde telt.

Beide werken, maar er is een betere manier: nauwkeuriger, en met milliseconden!

GetTickCount() en gettime()​

GetTickCount() geeft milliseconden sinds het serverproces startte. gettime() geeft Unix-tijd (seconden sinds 1-1-1970). Neem twee meetmomenten en trek ze af: je hebt een interval.

Een cooldown​

Gebruik ticks om bij te houden wanneer een speler weer mag:

static PlayerAllowedTick[MAX_PLAYERS];

OnPlayerInteractWithServer(playerid)
{
if (GetTickCount() - PlayerAllowedTick[playerid] > 10000)
{
DoTheThingThePlayerRequested();
PlayerAllowedTick[playerid] = GetTickCount();
return 1;
}
else
{
SendClientMessage(playerid, -1, "You are not allowed to do that yet!");
return 0;
}
}

Of met seconden via gettime().

Je kunt de resterende tijd tonen door het verschil uit te rekenen en in het bericht te zetten.

Een stopwatch​

Meet de tijd tussen start en finish met twee GetTickCount()-calls en trek ze af. Formatteer desgewenst naar mm:ss.ms voor spelers.

Samenvatting​

  • GetTickCount(): milliseconden sinds start serverproces
  • Neem twee timestamps en bereken nauwkeurig het interval zonder timers
  • Handig voor cooldowns én metingen (stopwatch)

Zie het origineel voor volledige codevoorbeelden: de logica is 1:1 overgenomen, de uitleg hier is vereenvoudigd.