Отключается общий таймер
#1

Здравствуйте, такая вот проблема в последнее время у некоторых игроков отключается общий таймер, или он отключается у всех кто в дальнейшем входит после определенного момента, я не до конца понял но при онлайне у некоторых продолжает работать, а у некоторых нет, вот код

PHP код:
forward TimeUpdate();
public 
TimeUpdate()
{
//
   
new daysmonthsyears;
   
gettime(SData[hour],SData[minet],SData[second]);
   
getdate(yearsmonthsdays);
   if(
SData[minet] == && SData[second] == 1SetWorldTime(SData[hour]);
   new 
tmp2[200];
   new 
stime1[3];
   new 
stime2[3];
   if(
SData[hour]  > formatex(stime1,"%d",SData[hour]);  else formatex(stime1,"0%d",SData[hour]);
   if(
SData[minet]  > 9formatex(stime2,"%d",SData[minet]); else formatex(stime2,"0%d",SData[minet]);
   
formatex(tmp2,"sa %d-%d-%d %s:%s msk",yearsmonthsdays,stime1,stime2);
   
TextDrawSetString(SData[Stimedraw],tmp2);
// текстдрав времени дня года месяца обновляется
   
foreach(i// цикл
   
{
        if(
PData[i][spawned]) // только для заспавненых игроков
        
{
         new 
string[128],string_T1[256];
        
format(string_T1sizeof(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) > 4SetPlayerChatBubble(i,string,COLOR_BLUE,50,2000);
        }
        if(
IsApplyAnimation(i"FALL_fall")){ // выдача парашюта
        
new Float:xxx[3]; GetPlayerPos(iFloat:xxx[0], Float:xxx[1], Float:xxx[2]);
        if(
xxx[2] >= 100 && GetPlayerWeapon(i) != 46 && full[i] == && tdmfull[i] == && PlayerInDuel[i] == 0GivePlayerWeapon(i,46,1);
        }
           new 
Colors[11] = { 0x00ff00990x5E5A80FF0x157DECFF 0x9E7BFFFF 0x659EC7FF 0xF778A1FF 0x43C6DBFF 0xC9BE62FF 0xFBB117FF0xC11B17FF0xFBBBB9FF };
        
TextDrawHideForPlayer(i,SData[Site]); // смена цвета текстдрава сайта
        
TextDrawColor(SData[Site], Colors[random(sizeof(Colors))]);
        
TextDrawShowForPlayer(i,SData[Site]);
         if(
PlayerInfo[i][God] == trueSetPlayerHealth(i,100000); // бессмертие игрока
        
if(PlayerInfo[i][GodCar] == true && IsPlayerInAnyVehicle(i)) SetVehicleHealth(GetPlayerVehicleID(i),10000); // бессмертие автомобиля
// ниже фикс бага в спектре
        
if(GetPlayerState(i) == PLAYER_STATE_SPECTATING && saveplaneid[i] != 0PlayerSpectateVehicle(isaveplaneid[i]);
        if(
GetPlayerState(i) == PLAYER_STATE_SPECTATING && saveplaneid[i] == && specbug[i] == 0specbug[i]++;
        else if(
GetPlayerState(i) == PLAYER_STATE_SPECTATING && saveplaneid[i] == && specbug[i] == 6Respawn(i);
        
#if defined ANTI_MINIGUN // античит на оружие
        
if(GetPlayerWeapon(i) == 38 && PlayerInfo[i][Level] == && PlayerInfo[i][pVip] == && PlayerInDuel[i] == && full[i] == 0Kick(i);
        
#endif
        
}
        if(
ServerInfo[MaxPing] != 0// проверка на пинг
        
{
        
PingPos++; if(PingPos PING_MAX_EXCEEDSPingPos 0;
        
PlayerInfo[i][pPing][PingPos] = GetPlayerPing(i);
        if(
GetPlayerPing(i) > ServerInfo[MaxPing])
            {
                if(
PlayerInfo[i][PingCount] == 0PlayerInfo[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 
SumAveragexstring[128];
                    while (
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), AverageServerInfo[MaxPing] );
                      
SendClientMessageToAll(COLOR_RED,string);
                    
SaveToFile("KickLog",string);
                    
Kick(i);
                }
            }
            else if(
GetPlayerPing(i) < && ServerInfo[AntiBot] == 1)
            {
                
PlayerInfo[i][BotPing]++;
                if(
PlayerInfo[i][BotPing] >= 3BotCheck(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=0j<sizeof(zones);j++) {
        if(
IsPlayerInZone(i,j) && player_zone[i] == -1) {
        if(
player_zone_before == -1GameTextForPlayer(i,zones[j][zone_name],1500,1);
        else  if(
strcmp(zones[j][zone_name],zones[player_zone_before][zone_name],true) != 0GameTextForPlayer(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] == -1player_zone[i] = player_zone_before;
        }}}
        }
    }
    
AllBallonsUpdate();
    return 
1;

Вызов в OnGameModeInit
PHP код:
       TimeUpdate();
    
SetTimer("TimeUpdate",1000true); 
Ранее подобных проблем вроде как не наблюдалось, вот после того как добавил этот участок
PHP код:
         new string[128],string_T1[256];
        
format(string_T1sizeof(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); 
вот код foreach
PHP код:
#define foreach(%1) \
    
for(new %GetMaxPlayers(); %!= -1; %1--) if (IsPlayerConnected(%1)) 
И это точно отключается именно таймер, а не лагает текстдрав
Всего в моде используются 3 общий таймера, остальные два на 35 и 50 минут
В чем может быть проблема ?

Вот заметил по моему таймер перестает работать у некоторых при входе новых игроков и может выйти с аута то есть опять начать работать при выходе какого нибудь игрока из игры
Reply
#2

Рекомендую использовать y_timers

https://sampforum.blast.hk/showthread.php?tid=182948
Reply
#3

Day_Jons это оптимизиация, но не решение проблемы
Reply
#4

Вам вряд ли кто-то поможет разобрать такой код. Для начала табулируйте его и приведите в понятный вид. Никто не хочет тратить свое время на то, на что вы поленились.
Reply
#5

Quote:
Originally Posted by stabker
Посмотреть сообщение
Вам вряд ли кто-то поможет разобрать такой код. Для начала табулируйте его и приведите в понятный вид. Никто не хочет тратить свое время на то, на что вы поленились.
Ну мне как бы все понятно D, сейчас напишу что за что отвечает, но по сути проблема в одном участке который я вынес, простой индикатор пинга fps килов и тд, и происходит при входе в игру и выходе игроков из игры
Reply
#6

Гдето происходит ошибка в коде в следствии чего не обрабатываются данные после определенного id
Reply
#7

TextDrawSetString(LVL[i],string_T1);
LVL[i] - какой размер имеет?
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)