Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Проблема с киллтаймер
ppc Дата: Суббота, 22.10.2016, 12:31:39 | Сообщение # 1
Сообщений: 85
Репутация: 0 [ +/- ]
У меня в коде таймер убивается в конце раунда
Код
new Handle:timer_pos[MAXPLAYERS+1];
...
public Action:Command_wcs_settimer(args)
{
    ...
    timer_pos[user] = CreateTimer(1.0, savepos, user, TIMER_REPEAT);
    return Plugin_Handled;
}
...

public OnClientDisconnect(client)
{
     if (timer_pos[client] != INVALID_HANDLE)
     {
  KillTimer(timer_pos[client]);
  timer_pos[client] = INVALID_HANDLE;
     }
}

public round_end(Handle:event, const String:name[], bool:dontBroadcast)
{
    for (new i = 1; i <= MaxClients; i++)
    {
         if (timer_pos[i] != INVALID_HANDLE)
         {  
               KillTimer(timer_pos[i]);
               timer_pos[i] = INVALID_HANDLE;
          }
    }
}

Выдает ошибку в логах:
Код
L 10/22/2016 - 00:07:06: [SM] Exception reported: Invalid timer handle bfe0029c (error 3)
L 10/22/2016 - 00:07:06: [SM] Blaming: WCS_ultimate_backtime.smx
L 10/22/2016 - 00:07:06: [SM] Call stack trace:
L 10/22/2016 - 00:07:06: [SM]   [0] KillTimer
L 10/22/2016 - 00:07:06: [SM]   [1] Line 41, D:\wcsource\csgo\addons\sourcemod\scripting\WCS_ultimate_backtime.sp::round_end

Кто знает что нужно исправить? Проверка вроде стоит так что я хз...


Сообщение отредактировал ppc - Суббота, 22.10.2016, 13:14:10
 
TEIN Дата: Суббота, 22.10.2016, 14:36:40 | Сообщение # 2
Сообщений: 563
Репутация: 78 [ +/- ]
скинь все строки, где фигурирует данный таймер

Добавлено (22.10.2016, 14:36:40)
---------------------------------------------
как минимум callback'а таймера нет

 
ppc Дата: Суббота, 22.10.2016, 15:02:25 | Сообщение # 3
Сообщений: 85
Репутация: 0 [ +/- ]
Цитата TEIN ()
скинь все строки, где фигурирует данный таймер

Код
public Action:savepos(Handle:timer, any:client)
{
    if (!IsClientInGame(client) || !IsPlayerAlive(client))
    {
           return Plugin_Stop;
    }
    GetClientAbsOrigin(client, g_pos[client][1]);
    g_health[client][1] = GetClientHealth(client);
    return Action:0;
}


Сообщение отредактировал ppc - Суббота, 22.10.2016, 15:03:15
 
TEIN Дата: Суббота, 22.10.2016, 15:08:02 | Сообщение # 4
Сообщений: 563
Репутация: 78 [ +/- ]
!IsPlayerAlive(client))
{
return Plugin_Stop;
}

игрок умирает, таймера нет, переменная не очищена => ошибка, добавь timer_pos[client] = INVALID_HANDLE; в условие. ну и проверять, в игре ли игрок, не нужно, ибо при выходе игрока ты убиваешь таймер

Добавлено (22.10.2016, 15:08:02)
---------------------------------------------
timer_pos[client] = INVALID_HANDLE;
return Plugin_Stop;

имею ввиду

 
ppc Дата: Суббота, 22.10.2016, 15:22:51 | Сообщение # 5
Сообщений: 85
Репутация: 0 [ +/- ]
Цитата TEIN ()
timer_pos[client] = INVALID_HANDLE;
return Plugin_Stop;

имею ввиду

Спасибо
 
  • Страница 1 из 1
  • 1
Поиск: