Balkan SA:MP

San Andreas Multiplayer - www.sa-mp.com => Tutorijali u vezi SA-MPa => Temu započeo: skritpe iz 2007 godine. ( ͡° ͜ʖ ͡°) poslato Avgust 01, 2020, 16:44:26 POSLE PODNE

Naslov: Mini Optimizacija #1
Poruka od: skritpe iz 2007 godine. ( ͡° ͜ʖ ͡°) poslato Avgust 01, 2020, 16:44:26 POSLE PODNE
Mini Optimizacija #1


Ⅰ) Šta je ovo?
Ovako, planiram da započnem sa pisanjem "mini tutorijala" koje Vam mogu pomoći da rešite sve vaše probleme (gori sam od TOP Shop-a mjkm)
Ovo će biti uglavnom kratke greške koje budem pronalazio u većini objavljenih skripta a i možda se zavuče nešto što ne budete znali...


Ⅱ) Tema tutoriala
U ovo tutorialu sam izdovjio jednu grešku koja većina vas novih ovde pravi a to je (primer):
[pawn]new nekiTajmer[MAX_PLAYERS];

forward OgromanTajmer();

public OnGameModeInit()
{
   SetTimer("OgromanTajmer", 1000, true);
}

public OnPlayerConnect(playerid)
{
   nekiTajmer[playerid] = 0;
}

public OgromanTajmer()
{
   foreach(new i : Player)
   {
      if(nekiTajmer > 0) {
         nekiTajmer --;
      }
   }
}

CMD:fixveh(playerid, params[])
{
   if(nekiTajmer[playerid] > 0) {
      return SendClientMessage(playerid, -1, "Ovu komandu možete koristiti svakih 30 minuta!");
   }
   if(!IsPlayerInAnyVehicle(playerid)) {
      return 1;
   }

   nekiTajmer[playerid] = 1800;
   RepairVehicle(GetPlayerVehicleID(playerid));

   SendClientMessage(playerid, -1, "Popravili ste svoje vozilo!");

   return COMMAND_OK; // YSI5
}[/pawn]
E sada, da se odmah razumemo, već sam pisao o ovome u jednim od prvih tutoriala koje sam otvorio na ovom forumu ali moram ponovo jer neki i dalje ovo ponavaljaju:
Vi u kodu gore pozivate tajmer svaku sekundu kako bi oduzeli vrednost varijabli za 1 po igraču, to znači da će se to izvršiti 1800 puta za 30 minuta (puta broj igrača kojem "teče" tajmer i da dodamo da se ovako loopuje kroz celu bazu igrača).
E sada, neki koriste ptask za ovo ali ne razumeju da je to samo wrapper koji je bukvalno isti kao SetTimerEx i da je efekat jednako loš.

Kako to možemo da uradimo?
[pawn]new nekiTajmer[MAX_PLAYERS];

CMD:fixveh(playerid, params[])
{
   // Ako je trenutno vreme koje gettime() vrati manje od onog vremena koje smo dodelili varijabli
   if(gettime() < nekiTajmer[playerid]) {
      return SendClientMessage(playerid, -1, "Ovu komandu možete koristiti svakih 30 minuta!");
   }
   if(!IsPlayerInAnyVehicle(playerid)) {
      return 1;
   }

   nekiTajmer[playerid] = gettime() + 1800; // Trenutno vreme (u sekundama) PLUS 1800 sekundi (30 minuta)
   RepairVehicle(GetPlayerVehicleID(playerid));

   SendClientMessage(playerid, -1, "Popravili ste svoje vozilo!");

   return COMMAND_OK; // YSI5
}

// Evo jos jedan primer ukoliko imate manje vrednoti za tajmer (ispod 1 minuta)
new antiChatSpam[MAX_PLAYERS];

public OnPlayerText(playerid, text[])
{
   // Ako je trenutno vreme koje tickcount() vrati manje od onog vremena koje smo dodelili varijabli
   if(tickcount() < antiChatSpam[playerid]) {
      SendClientMessage(playerid, -1, "Nemojte da spamujete chat!");
      return 0;
   }

   // 3 sekunde = 3000ms (razlika izmedju tickcount i gettime je ta da na tickcount dodajete milisekunde a na gettime sekunde)!
   antiChatSpam[playerid] = tickcount() + 3000;

   return 1;
}[/pawn]


Ⅲ) Šta smo uradili ovime?
Uradili smo to da smo totalno izbrisali tajmer koji se veoma brzo ponavlja za svakog konektovanog igrača i naučili smo za nove native - gettime i tickcount!
Da ponovim, znam da sam već otvarao sličan tutorijal ali nisam VS radio niti su ljudi videli jer očigledno nema Optimizacija u naslovu, pa neka ovo obeleži #1


31.
Naslov: Odg: Mini Optimizacija #1
Poruka od: inquisitiveemmett poslato Avgust 02, 2020, 00:18:12 PRE PODNE
beskorisno
salim se dobar dobar  ;D
Naslov: Odg: Mini Optimizacija #1
Poruka od: [][] Foxy 2k19 [][] poslato Avgust 02, 2020, 10:29:54 PRE PODNE
Nije loše, fino je, dobar tutorial :)
Naslov: Odg: Mini Optimizacija #1
Poruka od: skritpe iz 2007 godine. ( ͡° ͜ʖ ͡°) poslato Avgust 03, 2020, 16:44:06 POSLE PODNE
Citat: [][] Foxy 2k19 [][] poslato Avgust 02, 2020, 10:29:54 PRE PODNE
Nije loše, fino je, dobar tutorial :)
Hvala :)
Naslov: Odg: Mini Optimizacija #1
Poruka od: #leivyz poslato Oktobar 06, 2021, 23:39:45 POSLE PODNE
Simple, svidja mi se!
Naslov: Odg: Mini Optimizacija #1
Poruka od: ƓƦƛƁȤȤ poslato Oktobar 07, 2021, 09:46:30 PRE PODNE
najs