28.10.2013, 14:24
(
Последний раз редактировалось 14_KaPaT; 28.10.2013 в 15:10.
)
Здравствуйте, такая вот проблема в последнее время у некоторых игроков отключается общий таймер, или он отключается у всех кто в дальнейшем входит после определенного момента, я не до конца понял но при онлайне у некоторых продолжает работать, а у некоторых нет, вот код
Вызов в OnGameModeInit
Ранее подобных проблем вроде как не наблюдалось, вот после того как добавил этот участок
вот код foreach
И это точно отключается именно таймер, а не лагает текстдрав
Всего в моде используются 3 общий таймера, остальные два на 35 и 50 минут
В чем может быть проблема ?
Вот заметил по моему таймер перестает работать у некоторых при входе новых игроков и может выйти с аута то есть опять начать работать при выходе какого нибудь игрока из игры
PHP код:
forward TimeUpdate();
public TimeUpdate()
{
//
new days, months, years;
gettime(SData[hour],SData[minet],SData[second]);
getdate(years, months, days);
if(SData[minet] == 1 && SData[second] == 1) SetWorldTime(SData[hour]);
new tmp2[200];
new stime1[3];
new stime2[3];
if(SData[hour] > 9 ) formatex(stime1,"%d",SData[hour]); else formatex(stime1,"0%d",SData[hour]);
if(SData[minet] > 9) formatex(stime2,"%d",SData[minet]); else formatex(stime2,"0%d",SData[minet]);
formatex(tmp2,"sa %d-%d-%d %s:%s msk",years, months, days,stime1,stime2);
TextDrawSetString(SData[Stimedraw],tmp2);
// текстдрав времени дня года месяца обновляется
foreach(i) // цикл
{
if(PData[i][spawned]) // только для заспавненых игроков
{
new string[128],string_T1[256];
format(string_T1, sizeof(string_T1), "| ~g~~h~Ping: ~w~~h~%d/~r~%d ~g~~h~FPS: ~w~~h~%d ~g~~h~Score: ~w~~h~%d/~r~%d ~g~~h~Ratio: ~w~~h~%0.2f ~g~~h~PvPStat: ~w~~h~%d/~r~%d ~w~|", GetPlayerPing(i),ServerInfo[MaxPing],pFPS[i],GetPlayerScore(i),PlayerInfo[i][Deaths],Float:PlayerInfo[i][Kills]/Float:PlayerInfo[i][Deaths],PlayerInfo[i][pPvPWin],PlayerInfo[i][pPvPLose]);
TextDrawSetString(LVL[i],string_T1);
if(GetTimeAFK(i) > 1) // система паузы
{
new seconds = GetTimeAFK(i),minets = 0;
if(seconds >= 60)while(seconds > 59){seconds -= 60;minets += 1;}
if(GetTimeAFK(i) == 9){
new fkmessage[30];
format(fkmessage,sizeof(fkmessage),"AFK_%s", PlayerInfo[i][pName]);
SetPlayerName(i,fkmessage);
}
format(string,100,"AFK: [%d:%02d]",minets,seconds);
if(GetTimeAFK(i) > 4) SetPlayerChatBubble(i,string,COLOR_BLUE,50,2000);
}
if(IsApplyAnimation(i, "FALL_fall")){ // выдача парашюта
new Float:xxx[3]; GetPlayerPos(i, Float:xxx[0], Float:xxx[1], Float:xxx[2]);
if(xxx[2] >= 100 && GetPlayerWeapon(i) != 46 && full[i] == 0 && tdmfull[i] == 0 && PlayerInDuel[i] == 0) GivePlayerWeapon(i,46,1);
}
new Colors[11] = { 0x00ff0099, 0x5E5A80FF, 0x157DECFF , 0x9E7BFFFF , 0x659EC7FF , 0xF778A1FF , 0x43C6DBFF , 0xC9BE62FF , 0xFBB117FF, 0xC11B17FF, 0xFBBBB9FF };
TextDrawHideForPlayer(i,SData[Site]); // смена цвета текстдрава сайта
TextDrawColor(SData[Site], Colors[random(sizeof(Colors))]);
TextDrawShowForPlayer(i,SData[Site]);
if(PlayerInfo[i][God] == true) SetPlayerHealth(i,100000); // бессмертие игрока
if(PlayerInfo[i][GodCar] == true && IsPlayerInAnyVehicle(i)) SetVehicleHealth(GetPlayerVehicleID(i),10000); // бессмертие автомобиля
// ниже фикс бага в спектре
if(GetPlayerState(i) == PLAYER_STATE_SPECTATING && saveplaneid[i] != 0) PlayerSpectateVehicle(i, saveplaneid[i]);
if(GetPlayerState(i) == PLAYER_STATE_SPECTATING && saveplaneid[i] == 0 && specbug[i] == 0) specbug[i]++;
else if(GetPlayerState(i) == PLAYER_STATE_SPECTATING && saveplaneid[i] == 0 && specbug[i] == 6) Respawn(i);
#if defined ANTI_MINIGUN // античит на оружие
if(GetPlayerWeapon(i) == 38 && PlayerInfo[i][Level] == 0 && PlayerInfo[i][pVip] == 0 && PlayerInDuel[i] == 0 && full[i] == 0) Kick(i);
#endif
}
if(ServerInfo[MaxPing] != 0) // проверка на пинг
{
PingPos++; if(PingPos > PING_MAX_EXCEEDS) PingPos = 0;
PlayerInfo[i][pPing][PingPos] = GetPlayerPing(i);
if(GetPlayerPing(i) > ServerInfo[MaxPing])
{
if(PlayerInfo[i][PingCount] == 0) PlayerInfo[i][PingTime] = TimeStamp();
PlayerInfo[i][PingCount]++;
if(TimeStamp() - PlayerInfo[i][PingTime] > PING_TIMELIMIT)
{
PlayerInfo[i][PingTime] = TimeStamp();
PlayerInfo[i][PingCount] = 1;
}
else if(PlayerInfo[i][PingCount] >= PING_MAX_EXCEEDS)
{
new Sum, Average, x, string[128];
while (x < PING_MAX_EXCEEDS) {
Sum += PlayerInfo[i][pPing][x];
x++;
}
Average = (Sum / PING_MAX_EXCEEDS);
format(string,sizeof(string),"{00F200}*** {62FF62}%s êèêíóò. (Ïðè÷èíà: Âûñîêèé ïèíã (%d) | Ñðåäíåå ÷èñëî (%d) | Ìàêñèìàëüíîå ÷èñëî (%d))", PlayerName2(i), GetPlayerPing(i), Average, ServerInfo[MaxPing] );
SendClientMessageToAll(COLOR_RED,string);
SaveToFile("KickLog",string);
Kick(i);
}
}
else if(GetPlayerPing(i) < 1 && ServerInfo[AntiBot] == 1)
{
PlayerInfo[i][BotPing]++;
if(PlayerInfo[i][BotPing] >= 3) BotCheck(i);
}
else PlayerInfo[i][BotPing] = 0;
if(IsPlayerInAnyVehicle(i))
{
new line1[10],line2[10]; // зоннер
if(zoneupdates[i] == 1)
{
if(!IsPlayerInZone(i,player_zone[i]))
{
new player_zone_before;
player_zone_before = player_zone[i];
player_zone[i] = -1;
for(new j=0; j<sizeof(zones);j++) {
if(IsPlayerInZone(i,j) && player_zone[i] == -1) {
if(player_zone_before == -1) GameTextForPlayer(i,zones[j][zone_name],1500,1);
else if(strcmp(zones[j][zone_name],zones[player_zone_before][zone_name],true) != 0) GameTextForPlayer(i,zones[j][zone_name],1500,1);
player_zone[i] = j;
format(line1,10,"p%dzone",i);
format(line2,10,"%d",j);
}}
if(player_zone[i] == -1) player_zone[i] = player_zone_before;
}}}
}
}
AllBallonsUpdate();
return 1;
}
PHP код:
TimeUpdate();
SetTimer("TimeUpdate",1000, true);
PHP код:
new string[128],string_T1[256];
format(string_T1, sizeof(string_T1), "| ~g~~h~Ping: ~w~~h~%d/~r~%d ~g~~h~FPS: ~w~~h~%d ~g~~h~Score: ~w~~h~%d/~r~%d ~g~~h~Ratio: ~w~~h~%0.2f ~g~~h~PvPStat: ~w~~h~%d/~r~%d ~w~|", GetPlayerPing(i),ServerInfo[MaxPing],pFPS[i],GetPlayerScore(i),PlayerInfo[i][Deaths],Float:PlayerInfo[i][Kills]/Float:PlayerInfo[i][Deaths],PlayerInfo[i][pPvPWin],PlayerInfo[i][pPvPLose]);
TextDrawSetString(LVL[i],string_T1);
PHP код:
#define foreach(%1) \
for(new %1 = GetMaxPlayers(); %1 != -1; %1--) if (IsPlayerConnected(%1))
Всего в моде используются 3 общий таймера, остальные два на 35 и 50 минут
В чем может быть проблема ?
Вот заметил по моему таймер перестает работать у некоторых при входе новых игроков и может выйти с аута то есть опять начать работать при выходе какого нибудь игрока из игры