Проблема с таймерами.
#1

Вообщем такая проблема , работает например мод.
И есть у меня таймер спеедометра , но вот он работает , как новую машину создаю перестает работать , подскажите, почему могуть таймеры останавливать свою работу?.

PHP код:
CALLBACKUpdateSpeed()
{
    for(new 
playerid=0;playerid<MAX_PLAYERS;playerid++)
    {
        if(
GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
        {
            if(
IsPlayerInAnyVehicle(playerid))
            {
                new 
vehicle GetPlayerVehicleID(playerid);
                new 
string23[20];
                
format(string23,sizeof(string23),"Fuel:~g~~h~%d"Gas[vehicle]);
                
PlayerTextDrawSetString(playerid,Speedo[1][playerid],string23);
                new 
string1[64];
                
format(string1,sizeof(string1),"Speed: ~b~~h~%d ~w~KM/.",GetVehicleSpeed(vehicle));
                
PlayerTextDrawSetString(playerid,Speedo[0][playerid],string1);
                new 
stra[12];
                if(
VehicleInfo[vehicle][pEngineStatus] == 0)format(stra,sizeof(stra),"~r~E",SpeedOnly(vehicle));
                else 
format(stra,sizeof(stra),"~b~E",SpeedOnly(vehicle));
                
PlayerTextDrawSetString(playerid,Speedo[5][playerid],stra);
                new 
stra1[12];
                if(
VehicleInfo[vehicle][pLightsStatus] == 0format(stra1,sizeof(stra1),"~r~L",SpeedOnly(vehicle));
                else 
format(stra1,sizeof(stra1),"~b~L",SpeedOnly(vehicle));
                
PlayerTextDrawSetString(playerid,Speedo[6][playerid],stra1);
                new 
stra2[12];
                if(
CarInfo[vehicle][cLock] == 0)format(stra2,sizeof(stra2),"~r~D",SpeedOnly(vehicle));
                else 
format(stra2,sizeof(stra2),"~g~D",SpeedOnly(vehicle));
                
PlayerTextDrawSetString(playerid,Speedo[7][playerid],stra2);
            }
        }
    }
    return 
true;

Бывает другие паблики по таймеру не срабатывают , в чем проблема может быть?
Reply
#2

Какой-то таймер может быть убит. Выход за пределы массива может давать сбой. Навскидку сказать трудно.
И наверно ты код с каких-то модов вырезаешь, что не есть хорошо => получаешь, то что получаешь.
Reply
#3

Слушай а как можно исправить или найти этот убитый таймер?
Reply
#4

pawn Код:
CALLBACK: UpdateSpeed()
{
    for(new i = GetPlayerPoolSize(); i != -1; i--)
    {
        if(!IsPlayerConnected(i) || IsPlayerNPC(i) || GetPlayerState(i) != PLAYER_STATE_DRIVER) continue;
        new vehicleid = GetPlayerVehicleID(i), string_big[65];
        format(string_big, sizeof(string_big), "Fuel:~g~~h~%d", Gas[vehicleid]);
                PlayerTextDrawSetString(i, Speedo[1][i], string_big);
                format(string_big, sizeof(string_big), "Speed: ~b~~h~%d ~w~KM/.", GetVehicleSpeed(vehicleid));
                PlayerTextDrawSetString(i, Speedo[0][i], string_big);
        if(!VehicleInfo[vehicleid][pEngineStatus]) format(string_big, sizeof(string_big), "~r~E", SpeedOnly(vehicleid));
                else format(string_big, sizeof(string_big), "~b~E", SpeedOnly(vehicleid));
                PlayerTextDrawSetString(i, Speedo[5][i], string_big);
        if(!VehicleInfo[vehicleid][pLightsStatus]) format(string_big, sizeof(string_big), "~r~L", SpeedOnly(vehicleid));
                else format(string_big, sizeof(string_big),"~b~L", SpeedOnly(vehicleid));
                PlayerTextDrawSetString(i, Speedo[6][i], string_big);
        if(!CarInfo[vehicleid][cLock]) format(string_big, sizeof(string_big), "~r~D", SpeedOnly(vehicleid));
                else format(string_big, sizeof(string_big), "~g~D", SpeedOnly(vehicleid));
                PlayerTextDrawSetString(i, Speedo[7][i], string_big);
    }
    return 1;
}
А теперь? И вообще такие вещи лучше делать персональными таймерами.
Reply
#5

Проверки на состояние достаточно, ведь если игрок не подключён, то GetPlayerState вернёт ид состояния 0 (проверено).
Reply
#6

Данная проверка от шага к шагу уменьшает итерацию для получения состояния.
Reply
#7

OKStyle , ты сейчас мог бы выполнить заказ? исправить. А то у меня таймеры убиваються и не все паблики работают коректно , нужна помощь грамотного скриптера.
Reply
#8

И кстати лучше обновлять текстдравы только тогда - когда текст реально изменился, а по таймеру каждый раз юзать PlayerTextDrawSetString - это не есть норма.
Reply
#9

У меня версия клиента 0.3е и данная функция там не работает.
Reply
#10

Quote:
Originally Posted by Diman777
Посмотреть сообщение
И кстати лучше обновлять текстдравы только тогда - когда текст реально изменился, а по таймеру каждый раз юзать PlayerTextDrawSetString - это не есть норма.
Так это же спидометр , кстате еще вопрос вы бы не могли за определеную плату посмотреть что не так? что в моде вызывает сбой всех пабликов.
Reply


Forum Jump:


Users browsing this thread: