Таймер не срабатывает первый раз -
FaGo - 24.07.2016
запускаю
PHP Code:
TogglePlayerControllable(playerid, false);
SetTimerEx("UnfreezeSpawn", 2000, false, "i", playerid);
PHP Code:
publics: UnfreezeSpawn(playerid)
{
SCM(playerid, COLOR_WHITE, "загрузка завершена.");
TogglePlayerControllable(playerid, true);
return true;
}
с первого раза не работает.
К примеру на сервер заходит первый игрок и у него не работает именно первый таймер,а дальше когда конектятся другие у них то все как часы работают
Надеюсь на вашу помощь
Re: Таймер не срабатывает первый раз -
Diman777 - 24.07.2016
Вроде всё норм.
Покажи что идёт до
PHP Code:
TogglePlayerControllable(playerid, false);
SetTimerEx("UnfreezeSpawn", 2000, false, "i", playerid);
И кстати в паблике
return true нафиг не надо.
Re: Таймер не срабатывает первый раз -
FaGo - 24.07.2016
Quote:
Originally Posted by Diman777
Вроде всё норм.
Покажи что идёт до
PHP Code:
TogglePlayerControllable(playerid, false);
SetTimerEx("UnfreezeSpawn", 2000, false, "i", playerid);
И кстати в паблике return true нафиг не надо.
|
Спасибо за совет.
Вот весь код
PHP Code:
else if(pickupid == starspawn[0])
{
TogglePlayerControllable(playerid, false);
SCM(playerid, COLOR_WHITE, "Загрузка...");
SetTimerEx("UnfreezeSpawn", 2000, false, "i", playerid);
SetPos(playerid, 2011.4722,-1279.5135,23.9951,355.6994, 0, 0);
}
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
В сравнении скорей всего твоя проблема. Для 1-ого игрока (с твоих слов) - это условие ложно, т.е. внутри код уже не сработает.
PHP Code:
else if (pickupid == starspawn[0])
Чтобы удостовериться в этом - проведи дебаг, и посмотри чему равно pickupid и starspawn[0] в тот момент.
|
PHP Code:
else if(pickupid == starspawn[0])
{
TogglePlayerControllable(playerid, false);
SCM(playerid, COLOR_WHITE, "Загрузка...");
SetTimerEx("UnfreezeSpawn", 2000, false, "i", playerid);
SetPos(playerid, 2011.4722,-1279.5135,23.9951,355.6994, 0, 0);
}
данный код полностью срабатывает а дальше не вызывается для первого игрока паблик UnfreezeSpawn
Re: Таймер не срабатывает первый раз -
Diman777 - 24.07.2016
А сделай вот так, и потом напиши какие цифры напечатало:
PHP Code:
else if (pickupid == starspawn[0])
{
TogglePlayerControllable(playerid, false);
print("1");
SCM(playerid, COLOR_WHITE, "Загрузка...");
print("2");
SetTimerEx("UnfreezeSpawn", 2000, false, "i", playerid);
print("3");
SetPos(playerid, 2011.4722,-1279.5135,23.9951,355.6994, 0, 0);
print("4");
}
Хотя может что-то с
идом таймера не то.
Re: Таймер не срабатывает первый раз -
FaGo - 24.07.2016
Все цифры,даже
PHP Code:
ApplyAnimation(playerid,"INT_SHOP", "shop_loop", 4.1, 1, 1, 1, 0, 0);
не работает на первом игроке,включается анимация а потом сразу у персонажа начинает тупо руки дергатся, с кодом все нормально,боюсь таймер по-моему виноват.
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(playerid, false);
SCM(playerid, COLOR_WHITE, "Загрузка...");
freeze_timer_id[playerid] = SetTimerEx("UnfreezeSpawn", 2000, false, "i", playerid);
SetPos(playerid, 2011.4722,-1279.5135,23.9951,355.6994, 0, 0);
}
publics:UnfreezeSpawn(playerid)
{
SCM(playerid, COLOR_WHITE, "загрузка завершена.");
TogglePlayerControllable(playerid, true);
KillTimer(freeze_timer_id[playerid]);
}
public OnPlayerDisconnect(playerid, reason)
{
KillTimer(freeze_timer_id[playerid]);
return 1;
}
Re: Таймер не срабатывает первый раз -
OKStyle - 27.07.2016
Quote:
Originally Posted by Diman777
И кстати в паблике return true нафиг не надо.
|
Надо, функция должна возвращать какое-либо значение.
Re: Таймер не срабатывает первый раз -
VVWVV - 27.07.2016
Quote:
Originally Posted by OKStyle
Надо, функция должна возвращать какое-либо значение.
|
В данном паблике оператор можно не использовать, ведь при компиляции инструкция retn будет автоматически генерироваться (return 0).
Code:
zero.pri ; Нуль
retn
Re: Таймер не срабатывает первый раз -
OKStyle - 27.07.2016
Ога, а потом будут вопросы на форуме про рассинхронизацию и неверные результаты выполнения функций.
Re: Таймер не срабатывает первый раз -
Diman777 - 27.07.2016
Quote:
Originally Posted by OKStyle
про рассинхронизацию и неверные результаты выполнения функций.
|
Это имеет значение в самповских колбеках (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
Вся структура программирования построена на возвратах
|
Ну всё равно можно и без них обойтись (если нет надобности в этом). Даже в
C++ есть спецификатор типа
void, который предназначен для того, чтобы дать понять ф-ии, что она ничего не возвращает.
Пример на C++:
PHP Code:
void FuncPrintMsg()
{
print("Hello world!");
}
Пример на Pawn:
PHP Code:
// return обязателен
bool:IsPlayerRcon(playerid)
{
return rcon{playerid} ? true : false;
}
// return явно не обязателен
SpecMsg(playerid, bool: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
но и прерывает её в нужный момент
|
да ладно, первый раз слышу
Re: Таймер не срабатывает первый раз -
FaGo - 29.07.2016
Черт возьми,исправил данную ошибку,теперь все работает как часы,то-есть дырка была в том что когда игрок заходил в игру у него срабатывал таймер с анимкой,который перебивал всё. Можете закрыть тему,спасибо за советы.