Da se ne lažemo - ovo i nije baš fino.
Mogao si u jedan enum da staviš sve Timer IDove i onda samo switch timerid unutar tog tajmera i to je to...
Ali ako ipak hoćeš ovako po 9 mini tajmera, ovo je stvarno katastrofa:
Ovo (važi za sve ostale tajmere):
timer OverLordPricaTimer(playerid)
{
switch(OverLordTimer{playerid})
{
case 5:
{
TutorialMessage(playerid, "OverLord: Bravo-Six ovde OverLord, prijem!");
OverLordTimer{playerid}--;
defer OverLordPricaTimer(playerid);
return 1;
}
case 4:
{
TutorialMessage(playerid, "OverLord: Imam metu na vidiku, prijem!");
OverLordTimer{playerid}--;
TogglePlayerControllable(playerid, 0);
defer OverLordPricaTimer(playerid);
return 1;
}
case 3:
{
TutorialMessage(playerid, "OverLord: Trazim dozvolu za pucanje, prijem!");
OverLordTimer{playerid}--;
defer OverLordPricaTimer(playerid);
return 1;
}
case 2:
{
TutorialMessage(playerid, "Bravo-Six: OverLord ovde Bravo-Six, prijem!");
OverLordTimer{playerid}--;
defer OverLordPricaTimer(playerid);
return 1;
}
case 1:
{
TutorialMessage(playerid, "Bravo-Six: Odobravamo pucanje! Ne zaboravi da pokupis dokumenta, prijem!");
OverLordTimer{playerid}--;
defer OverLordPricaTimer(playerid);
return 1;
}
case 0:
{
TogglePlayerControllable(playerid, 1);
TutorialMessage(playerid, "Dobio si dozvolu za pucanje, upucaj metu!");
SetCameraBehindPlayer(playerid);
return 1;
}
}
return 1;
}
...je moglo i ovako:
timer OverLordPricaTimer(playerid, step)
{
switch(step)
{
case 1:
{
TutorialMessage(playerid, "OverLord: Imam metu na vidiku, prijem!");
TogglePlayerControllable(playerid, 0);
defer OverLordPricaTimer(playerid, step + 1);
}
case 2:
{
TutorialMessage(playerid, "OverLord: Trazim dozvolu za pucanje, prijem!");
defer OverLordPricaTimer(playerid, step + 1);
}
case 3:
{
TutorialMessage(playerid, "Bravo-Six: OverLord ovde Bravo-Six, prijem!");
defer OverLordPricaTimer(playerid, step + 1);
}
case 4:
{
TutorialMessage(playerid, "Bravo-Six: Odobravamo pucanje! Ne zaboravi da pokupis dokumenta, prijem!");
defer OverLordPricaTimer(playerid, step + 1);
}
case 5:
{
TogglePlayerControllable(playerid, 1);
TutorialMessage(playerid, "Dobio si dozvolu za pucanje, upucaj metu!");
SetCameraBehindPlayer(playerid);
}
default:
{
TutorialMessage(playerid, "OverLord: Bravo-Six ovde OverLord, prijem!");
defer OverLordPricaTimer(playerid, step + 1);
}
}
}
// Ovako koristis
defer OverLordPricaTimer(playerid);
btw mogao je i default case da bude case 0 a poslednji da bude default 😄
I za neke od ovih varijabli poput
UTutorialu si mogao da koristiš i PVar jer se koristi jako retko i onda nema potrebe da se pravi varijabla, ovo važi za sve varijable koje ćeš koristiti 2-3 puta 😄
Takodje ne moras posebnu varijablu za svaki delic tutoriala (npr
ProveraVojnik{playerid}) nego kreiras jednu varijablu ili PVar za ceo tutorijal i stavljas vrednosti iz enum-a
timer KadaJePaoTimer(playerid)
{
switch(KadaJePao{playerid})
{
case 4:
{
TutorialMessage(playerid, "OverLord: Bravo-Six...");
//TextDrawShowForPlayer(playerid, CrniTD);
//TextDrawBoxColor(CrniTD, 0xFFFFFF15);
KadaJePao{playerid}--;
defer KadaJePaoTimer(playerid);
return 1;
}
case 3:
{
TutorialMessage(playerid, "OverLord: Zaseda..");
//TextDrawBoxColor(CrniTD, 0xFFFFFF30);
KadaJePao{playerid}--;
defer KadaJePaoTimer(playerid);
return 1;
}
case 2:
{
TutorialMessage(playerid, "Bravo-Six: OverLorde ovde Bravo-Six, ponovi, prijem!");
//TextDrawBoxColor(CrniTD, 0xFFFFFF70);
KadaJePao{playerid}--;
defer KadaJePaoTimer(playerid);
return 1;
}
case 1:
{
TutorialMessage(playerid, "Bravo-Six: SVE RASPOLOZIVE JEDINICE NEKA KRENU I IZVUKU DOKUMENTA!");
//TextDrawBoxColor(CrniTD, 0xFFFFFFFF);
KadaJePao{playerid}--;
defer KadaJePaoTimer(playerid);
return 1;
}
case 0:
{
TextDrawShowForPlayer(playerid, CrniTD);
TextDrawShowForPlayer(playerid, TeksticTD);
OcistiChatIgracu(playerid);
TextDrawSetString(TeksticTD, "Nakon par dana..");
defer IdeUBolnicuTimer(playerid);
return 1;
}
}
return 1;
}
Isto i ovaj timer moze da se doda jedna varijabla, razlog je sledeci:
- Manje koristis memorije
- Apstraktna masina radi na taj nacin da koristi look-up table za svaku varijablu sto bi znacilo da on mora 5 puta da u ovom primeru pristupa istoj varijabli u globalnoj tabli umesto da kreiras lokalnu varijablu i da lagano pristupi njoj jer ne mora da pretarzuje celu tablu od npr 500 varijabli nego samo direkt pristupi ovoj.Nadam se da je bilo jasno 🙂