Szerző Téma: Magától megálló timer, OnPlayerConnect nem fut le  (Megtekintve 1206 alkalommal)

Magától megálló timer, OnPlayerConnect nem fut le
« Dátum: 2011. november 18. - 18:19:17 »
0 Show voters
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

Magától megálló timer, OnPlayerConnect nem fut le
« Válasz #1 Dátum: 2011. november 19. - 07:47:21 »
0 Show voters
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.

Magától megálló timer, OnPlayerConnect nem fut le
« Válasz #2 Dátum: 2011. november 19. - 22:09:37 »
0 Show voters
mindig ugyanaz kapcsolodik ki az amelyiket a szerver legeslegelöször elindit

Magától megálló timer, OnPlayerConnect nem fut le
« Válasz #3 Dátum: 2011. november 19. - 23:42:30 »
0 Show voters
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]

Magától megálló timer, OnPlayerConnect nem fut le
« Válasz #4 Dátum: 2011. november 20. - 08:36:16 »
0 Show voters
megnéztem 1-el tér vissza

Magától megálló timer, OnPlayerConnect nem fut le
« Válasz #5 Dátum: 2011. november 20. - 10:46:59 »
0 Show voters
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)

Magától megálló timer, OnPlayerConnect nem fut le
« Válasz #6 Dátum: 2011. november 23. - 15:57:32 »
0 Show voters
értem köszi... amugy az a  baj hogy ez több nap után van általában

Nem elérhető Benceee

  • 4785
    • Profil megtekintése
Magától megálló timer, OnPlayerConnect nem fut le
« Válasz #7 Dátum: 2011. november 24. - 17:52:07 »
0 Show voters
Akkor \"több nap\" után újraindítod a szervert, és meg van oldva.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal