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: hegdavid95 - 2011. November 18. - 18:19:17

Cím: Magától megálló timer, OnPlayerConnect nem fut le
Írta: hegdavid95 - 2011. November 18. - 18:19:17
Szasztok!
Van két elég érdekes problémám.
1.
Az egyik timer aminek foylamatosan ismétlödnie kell mindaddig mig a szerver fut van hogy egy hosszabb müködés után cska ugy magátol leáll.
OnGamemodeInit nél inditom el ismétlés be van kapcsolva másodpercenként kellene lefutnia.
Ez pár órán söt akár napokon keresztül is megy, de van hogy egyszerüen megáll. Gyanakodtam KillTimerekre hogy van egy ami akkor is Kikapcsol egy timert ha az már kivan kapcsolva és helyette ezt kapcsolja ki, de ez nem valószinû mert már többször átnyálaztam a módot ilyen hiba nem léphet fel.
[pawn]KillTimer(RendorGateCloseTimer);RendorGateCloseTimer = 0;//egy példa hogyan is kapcoslok ki egy timert[/pawn]
Fontos megemlitenem hogy ezt a timert inditom el legeslegelõször, tehát ennek van a legkisebb ID je
2.
szintén hosszabb mûködés után van hogy az OnPlayerConnect függvény egyszerüen mintha kikapcsolódna vagy nem hivodna meg soha itt van hátha ki tudtok szedni belõle valamit:
[pawn]public OnPlayerConnect(playerid)
{
format(query,sizeof(query),\"DELETE FROM `Ban` WHERE `UnbanDate` <= %d\",gettime()+7200);
mysql_query(query);
TogglePlayerSpectating(playerid,0);
SetPVarInt(playerid,\"SpectatingPlayerid\",-1);
SetPVarInt(playerid,\"MinigameGameSpawned\",-1);
SetPVarInt(playerid,\"HouseID\",-1);
    GetPlayerIp(playerid,IP,sizeof(IP));
    GetPlayerName(playerid,name,sizeof(name));
format(query,sizeof(query),\"SELECT * FROM `Ban` WHERE `IP` = \'%s\' OR `Name` = \'%s\'\",IP,name);
mysql_query(query);
mysql_store_result();
if(mysql_num_rows() != 0) // Ha a sor nem üres
{
   mysql_fetch_row(Line);
   mysql_free_result();
   new RegID,reason[100],bandate[50],admin[24],unbantime;
   new year,month,day, hour,minute,second;
   sscanf(Line,\"p<|>ds[24]s[100]s[50]s[24]s[16]d\",RegID,name,reason,bandate,admin,IP,unbantime);
   SendClientMessagef(playerid,COLOR_GREEN,\"==========================================================\");
   SendClientMessagef(playerid,COLOR_GREEN,\"Banolva vagy a szerverrõl.\");
   SendClientMessagef(playerid,COLOR_GREEN,\"RegID: %d\",RegID);
   if(unbantime != 99999999999999999999)
   {
   date(unbantime, day, month, year, hour, minute, second);
   SendClientMessagef(playerid,COLOR_GREEN,\"Unban dátum: %d/%d/%d %d:%d\",year,month,day,hour,minute);
   }
   else
   {
   SendClientMessagef(playerid,COLOR_GREEN,\"Unban dátum: nincs\");
   }
   SendClientMessagef(playerid,COLOR_GREEN,\"Admin neve: %s\",admin);
   SendClientMessagef(playerid,COLOR_GREEN,\"Indok: %s\",reason);
   date(gettime()+7200, day, month, year, hour, minute, second);
   SendClientMessagef(playerid,COLOR_GREEN,\"Dátum: %d/%d/%d %d:%d\",year,month,day,hour,minute);
   SendClientMessagef(playerid,COLOR_GREEN,\"==========================================================\");
   Kick(playerid);
   return 1;
}
else
{
   mysql_free_result();
}
if(!GetPVarInt(playerid,\"Requesting\"))
{
PlayAudioStreamForPlayer(playerid, \"http://www.youtube-mp3.org/get?video_id=uQfQOKuTq54&&h=6472e42a125900c82b9b4a5db81330ce\");
SetPVarInt(playerid,\"Requesting\",1);
}
    GetPlayerName(playerid,name,sizeof(name));
if(!fexist(\"adatbazis/logs/aka.log\"))
{
dini_Create(\"adatbazis/logs/aka.log\");
}
if(fexist(\"adatbazis/logs/aka.log\"))
{
   GetPlayerIp(playerid, IP, sizeof(IP));
   if(!strlen(dini_Get(\"adatbazis/logs/aka.log\", IP)))
   {
      dini_Set(\"adatbazis/logs/aka.log\", IP, name);
   }
    else
   {
       if(strfind(dini_Get(\"adatbazis/logs/aka.log\", IP), name, true) == -1 )
      {
         new i_str[800];
         if(strlen(dini_Get(\"adatbazis/logs/aka.log\", IP))+30 < sizeof(i_str))
         {
          format(i_str, strlen(dini_Get(\"adatbazis/logs/aka.log\", IP))+30, \"%s %s\", dini_Get(\"adatbazis/logs/aka.log\", IP), name);
          dini_Set(\"adatbazis/logs/aka.log\", IP, i_str);
          }
      }
   }
    }
    Streamer_UpdateEx(playerid,-3364.463623,-2926.443359,87.995620);
    ToltodoCsik[playerid] = CreateProgressBar(279.00, 395.00, 86.50, 10.19, 65433, 105.0);
    ToltodoCsik[playerid] = CreateProgressBar(279.00, 395.00, 86.50, 10.19, 65433, 105.0);
    TextDrawShowForPlayer(playerid,logo);
    TextDrawShowForPlayer(playerid,vonal1);
    TextDrawShowForPlayer(playerid,vonal2);
    SetPVarInt(playerid,\"Clock\",1);
if(!IsPlayerNPC(playerid))
{
   SetPVarInt(playerid, \"LoggedIn\", 0);
   SetPVarInt(playerid, \"RegID\", -1);
   SetPlayerColor(playerid,PlayerColors[random(sizeof (PlayerColors))]);
   new MyRegID;
   // Autologin
   format(query, sizeof(query), \"SELECT * FROM `players` WHERE `Name` = \'%s\' AND `Ip` = \'%s\'\", Name(playerid), IP);
   mysql_query(query);
   mysql_store_result();
       if(mysql_num_rows() != 0) // Ha a sor nem üres
   {
      mysql_fetch_row(Line);
      mysql_free_result();
      sscanf(Line, \"p<|>d{s[24]s[16]s[30]s[24]s[24]d}\", MyRegID);
      SetPVarInt(playerid, \"RegID\", MyRegID);
      LoginPlayer(playerid, Line);
      if(GetPVarInt(playerid,\"Level\") >= 1) SetPVarInt(playerid,\"readcmds\",1);
      SendClientMessage(playerid, COLOR_GREEN, \"Automatikusan bejelentkeztél.\");
   }
   else // Ha üres, akkor itt lesz free_result mer az elõzõ részünk akkor nem fut le és nem lesz neki ott free_result
   {
      mysql_free_result();
   }
    if(!GetPVarInt(playerid, \"LoggedIn\")) // Ha nincs bejelentkezve, ez a lekérés ide nagyon fontos mert minden gobnyomásnál felmutatná a skiválasztóban.
    {
      format(query, sizeof(query), \"SELECT * FROM `players` WHERE `Name` = \'%s\'\", Name(playerid)); // Kiválasztjuk, a játékos nevét
      mysql_query(query);
      mysql_store_result();
      if(mysql_num_rows() != 0) // Ha a sorok száma nem 0 ( nem üres )
      {
         LoginDialog(playerid); // Akkor login
      }
      else // Ellentétben
      {
         RegisterDialog(playerid); // Register
      }
      mysql_free_result();
   }
}
format(str,sizeof(str),\"*** %s%s {\"HEXCOLOR_GREEN\"}csatlakozott! ***\",GetPlayerColorInHex(playerid),name);
foreach(Player,i)
{
    if(i != playerid)
    SendClientMessage(i,COLOR_GREEN,str);
}
SetPlayerVirtualWorld(playerid,2);OnPlayerWorldChange(playerid);
SetPlayerPos(playerid,-2681.8884,1344.3270,16.9978);
Streamer_UpdateEx(playerid,-2681.8884,1344.3270,16.9978);
SetPlayerFacingAngle(playerid,269.9227);
SetPlayerCameraPos(playerid,-2678.412597, 1344.407226, 17.2698);
SetPlayerCameraLookAt(playerid,-2700.1948,1343.8145,20.3360);
ApplyAnimation(playerid,\"DANCING\",\"DNCE_M_A\",4.0,1,0,0,0,-1);
SetPlayerTime(playerid,24,0);
SendDeathMessage(0xFFFF,playerid,200);
CreatePlayerTextdraw(playerid);
return 1;
}[/pawn]
ennyi lenne ha bármelyiknél van ötlete valakinek az irja le lécci elõre is köszi
Cím: Magától megálló timer, OnPlayerConnect nem fut le
Írta: staubka - 2011. November 19. - 07:47:21
Ez elég érdekes...
Hát ötletem nincs hogy mibaja, de próbáld meg egy külön FS-be rakni. Lehet a GM-be túl sok a timer v vmi túlterheli és leállítja az egyiket vagy ilyesmi, fogalmam sincs. Az onplayerconnect-et is FS-be, ha megoldható. Ha nem, akkor megprbálhatod a timer ismétlõdési idejét kisebbre venni... Pl. most 1 mp-nként fut le akkor ezentúl 30mp-nként fusson. Érted nem? Vagy... egy kérdés:  Csak egy bizonyos timert kapcsol ki, vagy véletlenszerûen bármelyiket? Haaz elsõ akk próbáld az idõt és/vagy FS-be rakni, ha az utóbbi akkor talán túlterhelés miatt leáll.. Bár akk meg a szeró fagyna ki ha terhelve lenne... Fogalmam sincs :( próbáld a fent leírtakat hátha vmelyik bejön.
Cím: Magától megálló timer, OnPlayerConnect nem fut le
Írta: hegdavid95 - 2011. November 19. - 22:09:37
mindig ugyanaz kapcsolodik ki az amelyiket a szerver legeslegelöször elindit
Cím: Magától megálló timer, OnPlayerConnect nem fut le
Írta: Zsolesszka - 2011. November 19. - 23:42:30
Nézd meg akkor milyen index értékkel tér vissza a legelsõ timer mert lehet az is nullától kezdõdik mint sok minden más.
Ezért mikor leállítod a timert/eket lehet -1 értéket kell adni a timer változójának.
[pawn]KillTimer(RendorGateCloseTimer);RendorGateCloseTimer = -1; // egy példa hogyan is kapcsolok ki egy timert
[/pawn]
Cím: Magától megálló timer, OnPlayerConnect nem fut le
Írta: hegdavid95 - 2011. November 20. - 08:36:16
megnéztem 1-el tér vissza
Cím: Magától megálló timer, OnPlayerConnect nem fut le
Írta: Zsolesszka - 2011. November 20. - 10:46:59
Ha rövid határidõn belül történik ez a dolog akkor próbáld ki ezt a plugint.
Minden meghívott native funkciót elment a server_log.txt fájlba. Ez alapján talán megtalálod mikor kerülhet leállításra a timer-ed.
Ne használd ha túl sokan vagytok a szerveren csak hiba keresésre való. (rövid idõ alatt képes pár gigás server_log.txt fájlt készíteni amit lehet meg se tudsz nyitni, és eléggé leterheli a gépet)
Cím: Magától megálló timer, OnPlayerConnect nem fut le
Írta: hegdavid95 - 2011. November 23. - 15:57:32
értem köszi... amugy az a  baj hogy ez több nap után van általában
Cím: Magától megálló timer, OnPlayerConnect nem fut le
Írta: Benceee - 2011. November 24. - 17:52:07
Akkor \"több nap\" után újraindítod a szervert, és meg van oldva.