SA-MP Forums Archive
Таймер не срабатывает первый раз - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Таймер не срабатывает первый раз (/showthread.php?tid=613117)

Pages: 1 2


Таймер не срабатывает первый раз - FaGo - 24.07.2016

запускаю
PHP Code:
TogglePlayerControllable(playeridfalse); 
SetTimerEx("UnfreezeSpawn"2000false"i"playerid); 
PHP Code:
publicsUnfreezeSpawn(playerid

    
SCM(playeridCOLOR_WHITE"загрузка завершена."); 
    
TogglePlayerControllable(playeridtrue); 
    return 
true

с первого раза не работает.

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

Надеюсь на вашу помощь


Re: Таймер не срабатывает первый раз - Diman777 - 24.07.2016

Вроде всё норм.
Покажи что идёт до
PHP Code:
TogglePlayerControllable(playeridfalse);  
SetTimerEx("UnfreezeSpawn"2000false"i"playerid); 
И кстати в паблике return true нафиг не надо.


Re: Таймер не срабатывает первый раз - FaGo - 24.07.2016

Quote:
Originally Posted by Diman777
View Post
Вроде всё норм.
Покажи что идёт до
PHP Code:
TogglePlayerControllable(playeridfalse);  
SetTimerEx("UnfreezeSpawn"2000false"i"playerid); 
И кстати в паблике return true нафиг не надо.
Спасибо за совет.

Вот весь код
PHP Code:
   else if(pickupid == starspawn[0])
    {
        
TogglePlayerControllable(playeridfalse);
        
SCM(playeridCOLOR_WHITE"Загрузка...");
        
SetTimerEx("UnfreezeSpawn"2000false"i"playerid);
        
SetPos(playerid2011.4722,-1279.5135,23.9951,355.699400);
    } 



Re: Таймер не срабатывает первый раз - Diman777 - 24.07.2016

В сравнении скорей всего твоя проблема. Для 1-ого игрока (с твоих слов) - это условие ложно, т.е. внутри код уже не сработает.
PHP Code:
else if (pickupid == starspawn[0]) 
Чтобы удостовериться в этом - проведи дебаг, и посмотри чему равно pickupid и starspawn[0] в тот момент.


Re: Таймер не срабатывает первый раз - FaGo - 24.07.2016

Quote:
Originally Posted by Diman777
View Post
В сравнении скорей всего твоя проблема. Для 1-ого игрока (с твоих слов) - это условие ложно, т.е. внутри код уже не сработает.
PHP Code:
else if (pickupid == starspawn[0]) 
Чтобы удостовериться в этом - проведи дебаг, и посмотри чему равно pickupid и starspawn[0] в тот момент.
PHP Code:
else if(pickupid == starspawn[0]) 
    { 
        
TogglePlayerControllable(playeridfalse); 
        
SCM(playeridCOLOR_WHITE"Загрузка..."); 
        
SetTimerEx("UnfreezeSpawn"2000false"i"playerid); 
        
SetPos(playerid2011.4722,-1279.5135,23.9951,355.699400); 
    } 
данный код полностью срабатывает а дальше не вызывается для первого игрока паблик UnfreezeSpawn


Re: Таймер не срабатывает первый раз - Diman777 - 24.07.2016

А сделай вот так, и потом напиши какие цифры напечатало:
PHP Code:
else if (pickupid == starspawn[0])
{
    
TogglePlayerControllable(playeridfalse);
    print(
"1");
    
SCM(playeridCOLOR_WHITE"Загрузка...");
    print(
"2");
    
SetTimerEx("UnfreezeSpawn"2000false"i"playerid);
    print(
"3");
    
SetPos(playerid2011.4722,-1279.5135,23.9951,355.699400);
    print(
"4");

Хотя может что-то с идом таймера не то.


Re: Таймер не срабатывает первый раз - FaGo - 24.07.2016

Все цифры,даже

PHP Code:
ApplyAnimation(playerid,"INT_SHOP""shop_loop"4.111100); 
не работает на первом игроке,включается анимация а потом сразу у персонажа начинает тупо руки дергатся, с кодом все нормально,боюсь таймер по-моему виноват.


Re: Таймер не срабатывает первый раз - FaGo - 24.07.2016

и плюс это не из-за заморозки,проверял


Re: Таймер не срабатывает первый раз - FaGo - 25.07.2016

Ладно,думаю данный баг тяжело исправить,оставлю его,первый зайдет - > перезайдет и все будет работать,все равно спасибо за помощь.


Re: Таймер не срабатывает первый раз - FaGo - 26.07.2016

Ахтунг! таймер запускает функцию через 15-20 минут ))


Re: Таймер не срабатывает первый раз - Diman777 - 26.07.2016

Попробуй записать ид таймера, т.е.
PHP Code:
new freeze_timer_id[MAX_PLAYERS];
else if (
pickupid == starspawn[0])
{
    
TogglePlayerControllable(playeridfalse);
    
SCM(playeridCOLOR_WHITE"Загрузка...");
    
freeze_timer_id[playerid] = SetTimerEx("UnfreezeSpawn"2000false"i"playerid);
    
SetPos(playerid2011.4722,-1279.5135,23.9951,355.699400);
}
publics:UnfreezeSpawn(playerid)
{
    
SCM(playeridCOLOR_WHITE"загрузка завершена.");
    
TogglePlayerControllable(playeridtrue);
    
KillTimer(freeze_timer_id[playerid]);
}
public 
OnPlayerDisconnect(playeridreason)
{
    
KillTimer(freeze_timer_id[playerid]);
    return 
1;




Re: Таймер не срабатывает первый раз - OKStyle - 27.07.2016

Quote:
Originally Posted by Diman777
View Post
И кстати в паблике return true нафиг не надо.
Надо, функция должна возвращать какое-либо значение.


Re: Таймер не срабатывает первый раз - VVWVV - 27.07.2016

Quote:
Originally Posted by OKStyle
View Post
Надо, функция должна возвращать какое-либо значение.
В данном паблике оператор можно не использовать, ведь при компиляции инструкция retn будет автоматически генерироваться (return 0).

Code:
zero.pri ; Нуль
retn



Re: Таймер не срабатывает первый раз - OKStyle - 27.07.2016

Ога, а потом будут вопросы на форуме про рассинхронизацию и неверные результаты выполнения функций.


Re: Таймер не срабатывает первый раз - Diman777 - 27.07.2016

Quote:
Originally Posted by OKStyle
View Post
про рассинхронизацию и неверные результаты выполнения функций.
Это имеет значение в самповских колбеках (OnPlayerText, OnPlayerUpdate), никто не спорит, но в своих созданных колбеках это не нужно (если не предусмотренно конечно).
Вот вырезка из ассемблерного кода, действительно видно, что там 1.
PHP Code:
proc    OnPlayerUpdate
...
const.
pri 1
retn 
Приведи реальные примеры раз на то пошло, вообще это будет не по теме, но всё же)


Re: Таймер не срабатывает первый раз - OKStyle - 27.07.2016

Вся структура программирования построена на возвратах, так что ересь нести не надо... Полезное значение или просто красота - каждый решает сам для себя. Говнокода тоже много.

pawn Code:
public OnPlayerUpdate(playerid)
{
<...>
if(!....) return SetTimerEx("UnfreezeSpawn", 2000, false, "i", playerid);
return 1;
}



Re: Таймер не срабатывает первый раз - Diman777 - 27.07.2016

Quote:
Originally Posted by OKStyle
View Post
Вся структура программирования построена на возвратах
Ну всё равно можно и без них обойтись (если нет надобности в этом). Даже в C++ есть спецификатор типа void, который предназначен для того, чтобы дать понять ф-ии, что она ничего не возвращает.
Пример на C++:
PHP Code:
void FuncPrintMsg()
{
    print(
"Hello world!");

Пример на Pawn:
PHP Code:
// return обязателен
bool:IsPlayerRcon(playerid)
{
    return 
rcon{playerid} ? true false;
}
// return явно не обязателен
SpecMsg(playeridbool:status)
{
    if (
status)
    {
        
SendClientMessage(playerid, -1"Вы вошли в спек");
    }
    else
    {
        
SendClientMessage(playerid, -1"Вы вышли из спека");
    }




Re: Таймер не срабатывает первый раз - OKStyle - 27.07.2016

Только ты не забывай, что ретурн не только указывает на выход из функции, но и прерывает её в нужный момент. Я вообще-то не планировал разводить дискуссию на тему необходимости ретурнов, это должно было быть очевидным))


Re: Таймер не срабатывает первый раз - Diman777 - 27.07.2016

Quote:
Originally Posted by OKStyle
View Post
но и прерывает её в нужный момент
да ладно, первый раз слышу


Re: Таймер не срабатывает первый раз - FaGo - 29.07.2016

Черт возьми,исправил данную ошибку,теперь все работает как часы,то-есть дырка была в том что когда игрок заходил в игру у него срабатывал таймер с анимкой,который перебивал всё. Можете закрыть тему,спасибо за советы.