GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: Tomee - 2011. december 27. - 14:06:30

Cím: Lagg
Írta: Tomee - 2011. december 27. - 14:06:30
Hello!
Mi okozhatja egy mód laggját? Vagyis, hogy mitõl laggolhat be a szeró, hogy a chatboxban is 5mp múlva jelenik meg a szöveg meg hasonlók?
Cím: Lagg
Írta: Sheet - 2011. december 27. - 14:07:12
Ping, mysql, timerek
Cím: Lagg
Írta: Tomee - 2011. december 27. - 14:56:15
Ping az nem nagyon van csak néha amikor felmegy valakinek 200fölé de pár napja akkor sem volt ilyen.
Mysql az nincs
Timer meg 15 van. Az nagyon sok?
Más nem okozhatja? Esetleg object?
Néha még újra is indul a szerver.
Cím: Lagg
Írta: Sheet - 2011. december 27. - 14:59:04
15 timer az kevés :D
Object okozhatja, valamint ha valami parancsal túlterheled a gépet, akkor amiatt is lehet.
Cím: Lagg
Írta: Tomee - 2011. december 27. - 15:00:49
Szóval ha van egy parancs, amit használnak az túlterheli a dolgokat, és onastól kezdõdik a lagg?
Cím: Lagg
Írta: Game94 - 2011. december 27. - 15:05:51
Nincs esetleg sok változó a módban ?
Nincsenek olyan sorok amik fölöslegesen futnak le ?
Nincs olyan ciklus, ami többször fut le mint kéne? (pl. lefuttatod egy 500 slotos szerveren mind az 500 sloton, miközben 10 player van fent)
Milyen FS-eket használsz ?
Cím: Lagg
Írta: Tomee - 2011. december 27. - 15:19:44
FSek jelenleg nincsenek.
Változó az van bõven. Lehet, hogy hülyeség, de nem lehet az gond, hogy a bool változóból sok van?
Nem tudom, hogy mik futnak fölöslegesen.
Cím: Lagg
Írta: Game94 - 2011. december 27. - 15:28:38
Ha nagyon sok változód van az okozhat gondokat, de a bool változó elvileg nem okozhat gondot.
Cím: Lagg
Írta: Tomee - 2011. december 27. - 15:41:08
Idézetet írta: Game94 date=1324994751\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"14764\" data-ipsquote-contentclass=\"forums_Topic
Nincs olyan ciklus, ami többször fut le mint kéne? (pl. lefuttatod egy 500 slotos szerveren mind az 500 sloton, miközben 10 player van fent)
 
És egy ilyet, hogy lehet kiküszöbölni? Vagyis egyáltalán, hogy találjam meg ha van olyan?
==
Azt hiszem megtaláltam a probléma okozóját. Sõt 95%-ban biztos vagyok benne.
A problémát az autórendszerben találtam meg. És azon belül a autó nyitása és zárása.
\"/v lock\" parancs.
Mivel ez úgy lett megoldva, hogy amikor használjuk a parancsot az összes szerveren lévõ jármûvet átnézi és kiválasztja, hogy melyik van a közelemben.
És még azon belül, ha az a jármû ami a közelemben van egy megvett jármû akkor az még lekérdezi, hogy az autó az én nevemen van.e elmentve és ha igen akkor nyitva van vagy zárva.
 
else if(strcmp(x_nr,\"lock\",true) == 0)
{
    if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
            {
       for(new i; i != MAX_VEHICLES; i++)
       {
           new dist = CheckPlayerDistanceToVehicle(3.5, playerid, i);
           if(dist)
           {
               kocsi = i;
               counter++;
           }
       }
       switch(counter)
       {
           case 0: { SendClientMessage(playerid, -1, \"*Nincs jármû a közeledben.\"); }
           case 1:
           {
              if(strcmp(jatekosneve, CarInfo[kocsi][cOwner], true) == 0)
              {
                  if(CarInfo[kocsi][cLock] == 1)
                   {
                  SendClientMessage(playerid,-1\"*Kinyitottad a jármûvet\");
                  CarInfo[kocsi][cLock] = 0;
                  GetVehicleParamsEx(kocsi,engine,lights,alarm,doors,bonnet,boot,objective);
                  SetVehicleParamsEx(kocsi,engine,lights,alarm,VEHICLE_PARAMS_OFF,bonnet,boot,objective);
                  JarmuvekMentese(kocsi);
               } else if(CarInfo[kocsi][cLock] == 0) {
                  SendClientMessage(playerid,-1\"*Bezártad a jármûvet\");
                  CarInfo[kocsi][cLock] = 1;
                  GetVehicleParamsEx(kocsi,engine,lights,alarm,doors,bonnet,boot,objective);
                  SetVehicleParamsEx(kocsi,engine,lights,alarm,VEHICLE_PARAMS_ON,bonnet,boot,objective);
                  JarmuvekMentese(kocsi);
               }
               return 1;
              } else { SendClientMessage(playerid,-1, \"*Ez nem a te jármûved.\"); }
          }
      }
   }
}

 
Legalábbis ez az én tippem, hogy ez a gond. De lehet más oka is. Pár dolgot próbálgattam még rajta, de ugyan úgy belaggolt a játék. Kérdésem, hogy meglehet-e oldani ezt a fajta módszert egyszerûbben? Mert ha nem akkor megtudom csinálni lebutítva hogy ne így kuksolja végig a kocsikat meg minden. De azt meg nem nagyon akarom. De ha muszáj akkor megteszem
Cím: Lagg
Írta: Game94 - 2011. december 27. - 16:56:34
Nem, szerintem nem ezzel lesz a gond.
Amirõl én beszéltem azt így lehet kiküszöbölni:
[pawn]for(new i = 0; i < MAX_PLAYERS; i++)
         {
            if(IsPlayerConnected(i))
            {
               //valami történjen
            }
         }[/pawn]
Ezt azért jó így használni, mert ha az adott játékos nincs csatlakozva akkor nem futnak le fölöslegesen a sorok.
Néhány ciklusnál még nem is olyan fontos, de egy komolyabb módban már okozhat problémát.
Cím: Lagg
Írta: mauladam - 2011. december 27. - 19:09:21
Vagy foreach include, mert ez egybõl kihagyja az üres playerslotokat.