Jump to content

Lagging scripts?


sean5874

Recommended Posts

Hallo,

Binnekort wil ik mijn server online gaan zetten, maar er is alleen een probleempje. De laatste tijd lagt mijn server nogal op mijn localhost, en ik heb gehoord dat sommige dingen dit kunnen veroorzaken, zoals dini, en dat MAX_PLAYERS geheugen verbruikt ofzo. Niemand wil natuurlijk op een laggy gamemode spelen. Wat kan ik eraan doen om me scripts snel te houden?

Greetz

sean5874

Link to comment
Delen op andere websites

#include <a_samp>
#undef MAX_PLAYERS
#define MAX_PLAYERS 50
#include <Dini>
// als je meer includes hebt hieronder

max players is nu 50, kan je verandere

Dat is een goede truc om loops korter te maken, en array's kleiner te maken. Ook ik raad dit aan. Daarnaast:

  • Heb je veel IfElse scripts? Vervang deze door de switch functie.
  • Heb je veel array's met een grootte van 256? Veel te groot. Bijna alles in SA:MP heeft toch niet groter dan 128 nodig.
  • Gebruik je vel malen de functie als GetPlayerName, of GetMaxPlayers? Vervang deze door variablen, zodat je deze slechts een enkele keer hoeft op te halen.
  • Over al dit zal ik vanmiddag wel even een topic maken, aangezien ik zeker weet dat jij niet de enige bent met een wat trage server. En dan kan je het topic altijd makkelijk terug vinden, en helpt het gelijk nog eens andere mensen ook. Als je dan eventjes hebt, begin ik er zometeen aan :)

Link to comment
Delen op andere websites

Meestal word lagg veroorzaakt door OnPlayerUpdate, ze hebben er zelf een sticky op het SA:MP forum voor gemaakt. (Klik)

Oftewel heb je te traag internet/CPU of te weinig RAM.

Wat ook nog zou kunnen is dat er veel spelers op je server zaten en waardoor zo het probleem ontstond, probeer dan eens server.cfg aan te passen.

En heb je continue lagg, of is het enkel tijdens het runnen van een scriptje?

Bewerkt: door GTAguillaume
Link to comment
Delen op andere websites

#include <a_samp>
#undef MAX_PLAYERS
#define MAX_PLAYERS 50
#include <Dini>
// als je meer includes hebt hieronder

max players is nu 50, kan je verandere

Maar dan werkt je scriptje maar voor de eerst helft 50 spelers.

En je kan evengoed het zo laten als die 50 het aantal maximum spelers in je server.

Mijn server staat bepland voor ongeveer 25 spelers, ik denk niet MAX_PLAYERS een probleem gaat worden. Bedankt allebei voor het reageren!

Dat is een goede truc om loops korter te maken, en array's kleiner te maken. Ook ik raad dit aan. Daarnaast:

Heb je veel IfElse scripts? Vervang deze door de switch functie.

Heb je veel array's met een grootte van 256? Veel te groot. Bijna alles in SA:MP heeft toch niet groter dan 128 nodig.

Gebruik je vel malen de functie als GetPlayerName, of GetMaxPlayers? Vervang deze door variablen, zodat je deze slechts een enkele keer hoeft op te halen.

Over al dit zal ik vanmiddag wel even een topic maken, aangezien ik zeker weet dat jij niet de enige bent met een wat trage server. En dan kan je het topic altijd makkelijk terug vinden, en helpt het gelijk nog eens andere mensen ook. Als je dan eventjes hebt, begin ik er zometeen aan

Ik vrees helaas dat ik mijn geval alledrie de vragen met ja beantwoord kunnen worden. Momenteel ben ik mijn arrays aan het verbeteren. Ik snap alleen nog niet zo veel van de switch-functie.

Bedankt voor je reactie!

EDIT:

Meestal word lagg veroorzaakt door OnPlayerUpdate, ze hebben er zelf een sticky op het SA:MP forum voor gemaakt. (Klik)

Oftewel heb je te traag internet/CPU of te weinig RAM.

Wat ook nog zou kunnen is dat er veel spelers op je server zaten en waardoor zo het probleem ontstond, probeer dan eens server.cfg aan te passen.

En heb je continue lagg, of is het enkel tijdens het runnen van een scriptje?

Momenteel staat mijn server nog niet online. De lag komt idd alleen voor tijdens het runnen van mijn eigen scripts, soms lijken sommige functies er ook door weg te vallen, zoals commands. Als ik daarna nog een keer connect, werkt alles weer uitstekend.

Bewerkt: door sean5874
Link to comment
Delen op andere websites

Ik snap alleen nog niet zo veel van de switch-functie.

Ik snapte die ook niet toen ik pas begon met scripten, maar het is in feite heel simpel.

Je hebt een variabele die een hele boel waarden kan aannemen. Met de switch functie wordt die waarde maar 1x geëvalueerd i.p.v. elke keer apart.

Stel: Als een speler in een bepaald voertuig zit moet er een special actie uitgevoerd worden.

public OnPlayerStateChange(playerid, newstate, oldstate)
{
   if(newsate == PLAYER_STATE_DRIVER)
   {
       new
           m = GetVehicleModel(GetPlayerVehicleID(playerid));

       switch(m) // kan je vergelijken met: if(m == ...)
       {
           case 596..599: { SendClientMessage(playerid, COLOR_WHITE, "Je ben in een politie auto gestapt!"); } // 596,597,598,599
           case 407, 544: { SendClientMessage(playerid, COLOR_WHITE, "Je ben in een brandweerwagen gestapt!"); }
           case 416: { SendClientMessage(playerid, COLOR_WHITE, "Je ben in een ambulance gestapt!"); }
           default: { SendClientMessage(playerid, COLOR_WHITE, "Je ben in een onbekende auto gestapt!"); }
       }
   }
   return 1;
}

Link to comment
Delen op andere websites

Big Boss maakte je een typfout in newstate ik heb dat even gewijzigd en wat meer uitleg (ajoewel jij die niet zozeer meer nodig zal hebben sean(...), maar andere misschien wel ;))

public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER)
{
   	new
       	m = GetVehicleModel(GetPlayerVehicleID(playerid));

   	switch(m) // kan je vergelijken met: if(m == ...)
   	{
       	case 596..599: { SendClientMessage(playerid, COLOR_WHITE, "Je ben in een politie auto gestapt!"); } // 596,597,598,599
       	case 407, 544: { SendClientMessage(playerid, COLOR_WHITE, "Je ben in een brandweerwagen gestapt!"); } // als m dus het voertuigmodel 407 of 544 is
       	case 416: { SendClientMessage(playerid, COLOR_WHITE, "Je ben in een ambulance gestapt!"); } // als m dus het voertuigmodel 416 is
       	default: { SendClientMessage(playerid, COLOR_WHITE, "Je ben in een onbekende auto gestapt!"); } // dit is het standaard dus als geen van bovenstaande cases wordt uitgevoerd.
   	}
}
return 1;
}

Link to comment
Delen op andere websites

Even nog een vraagje over de switch functie. Ik heb een wapenmenuutje, maar bij elke case moet worden gecheckt of de player een bepaald aantal geld heeft, en als dat negatief is moet de player een berichtje krijgen dat hij niet genoeg geld heeft. Normaal lukt dit wel, maar ik ken de switch functie nog maar net. Wie kan me helpen?

Link to comment
Delen op andere websites

switch(row)
{
   case 0:
   {
       if(GetPlayerMoney(playerid) < 500) return SendClientMessage(playerid, COLOR_RED, "Je hebt niet genoeg geld!");
       GivePlayerWeapon(playerid, ....);
   }
   case 1:
   {
       if(GetPlayerMoney(playerid) < 600) return SendClientMessage(playerid, COLOR_RED, "Je hebt niet genoeg geld!");
       GivePlayerWeapon(playerid, ....);
   }
   // etc, etc, etc
}

Link to comment
Delen op andere websites

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