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.