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
-
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
-
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.
-
mindig ugyanaz kapcsolodik ki az amelyiket a szerver legeslegelöször elindit
-
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]
-
megnéztem 1-el tér vissza
-
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)
-
értem köszi... amugy az a baj hogy ez több nap után van általában
-
Akkor \"több nap\" után újraindítod a szervert, és meg van oldva.