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=343210)



Проблема с таймерами. - PeM6o - 16.05.2012

Уважаемые форумчане, столкнулся с очень, по другому не назвать, печальной проблемой.
После создания и проверки таймера(откат ограбления) для команды /robbank, заметил, что он напрочь отказывается работать при времени, допустим, на 10 минут. Если ставлю таймер на 5 секунд, к примеру, то всё выполняется, если на 10 минут, не выполняется. Пытался использовать функции SetTimer и SetTimerEx. Эффект один и тот же.
Помогите советом, если кто-нибудь сталкивался с таким конечно. Буду очень признателен.



Re: Проблема с таймерами. - Stepashka - 16.05.2012

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


Re: Проблема с таймерами. - PeM6o - 16.05.2012

Дико извиняюсь, встаю на путь исправления.
Прошу:
Код:
	if(strcmp(cmd, "/robbank", true) == 0)
	{
	    new success = random(2);
		if(PlayerInfo[playerid][pRobTime] > 0)
		{
		    SendClientMessage(playerid, COLOR_GREY, "* Ты уже пытался ограбить банк, потерпи немного.");
		    return 1;
		}
	    if(IsPlayerInRangeOfPoint(playerid, 2, 2309.6060,-4.0211,26.7422))
	    {
	        if(PlayerInfo[playerid][pDuty] == 0)
			{
		        if(success == 1)
			   {
		            WantedLevel[playerid] += 5;
		            SetPlayerWantedLevel(playerid,WantedLevel[playerid]);
		            SetPlayerCriminal(playerid,255, "Ограбление банка");
		            PlayerInfo[playerid][pRobTime] = 1;
		            SetMoney(playerid, 3000 + random(12000));
			    SetTimer("UnsetBankRob",600000, 0);
			    ApplyAnimation(playerid, "SHOP", "ROB_Shifty", 4.0, 0, 0, 0, 0, 0); // Rob Lookout
			    }
			 else
			    {
		              SendClientMessage(playerid, COLOR_GREY, "* Вам не удалось ограбить банк.");
			      WantedLevel[playerid] += 5;
			      SetPlayerWantedLevel(playerid,WantedLevel[playerid]);
		              SetPlayerCriminal(playerid,255, "Попытка ограбления банка");
                              SetTimer("UnsetBankRob",600000, 0);
			      PlayerInfo[playerid][pRobTime] = 1;
			     }
			}
			else
			{
			    SendClientMessage(playerid, COLOR_GREY, "Вы на службе.");
			    return 1;
			}
		}
		else
		{
		    SendClientMessage(playerid, COLOR_GREY, "Вы не на нужном месте.");
		    return 1;
		}
		return 1;
	}
Код:
public UnsetBankRob(playerid)
{
 PlayerInfo[playerid][pRobTime] = 0;
 SendClientMessage(playerid, COLOR_GREY, "* Теперь вы опять можете грабить банк.");
 return 1;
}



Re: Проблема с таймерами. - Stepashka - 16.05.2012

pawn Код:
if (strcmp(cmd, "/robbank", true) == 0)
    {
        if (PlayerInfo[playerid][pRobTime] > 0)
        {
            SendClientMessage(playerid, COLOR_GREY, "* Ты уже пытался ограбить банк, потерпи немного.");
            return 1;
        }
        if (!IsPlayerInRangeOfPoint(playerid, 2, 2309.6060,-4.0211,26.7422))
        {
            SendClientMessage(playerid, COLOR_GREY, "Вы не на нужном месте.");
            return 1;
        }
        if (PlayerInfo[playerid][pDuty] != 0)
        {
            SendClientMessage(playerid, COLOR_GREY, "Вы на службе.");
            return 1;
        }
        if (random(100) > 49)
        {
            SetPlayerCriminal(playerid,255, "Ограбление банка");
            SetMoney(playerid, 3000 + random(12000));
            ApplyAnimation(playerid, "SHOP", "ROB_Shifty", 4.0, 0, 0, 0, 0, 0); // Rob Lookout
        }
        else
        {
            SendClientMessage(playerid, COLOR_GREY, "* Вам не удалось ограбить банк.");
            SetPlayerWantedLevel(playerid, WantedLevel[playerid]);
            SetPlayerCriminal(playerid,255, "Попытка ограбления банка");
        }
        WantedLevel[playerid] += 5;
        SetPlayerWantedLevel(playerid, WantedLevel[playerid]);
        SetTimerEx("UnsetBankRob", 600000, 0, "i", playerid);
        PlayerInfo[playerid][pRobTime] = 1;
        return 1;
    }
Так оптимальнее.
И надеюсь forward UnsetBankRob(playerid); в начале кода присутствует?


Re: Проблема с таймерами. - PeM6o - 16.05.2012

Благодарю за ответ, сейчас попробую.
Да, форвард этого паблика присутствует в начале кода.


Re: Проблема с таймерами. - PeM6o - 16.05.2012

Увы, не помогло. Если я умею считать, то 600000 миллисекунд = 10 минут.



Может есть другие предположения ? Эта проблема ещё наблюдалась на 0.3d, до перевода на 0.3e, просто не приходилось сводить ситуацию до таймера.


Re: Проблема с таймерами. - Ru-user - 16.05.2012

Используй unixTime вместо таймера.

pawn Код:
PlayerInfo[playerid][pRobTime] = gettime() + 10 * 60; // или просто gettime() + 600
pawn Код:
if (PlayerInfo[playerid][pRobTime] > gettime())
    return SendClientMessage(playerid, COLOR_GREY, "* Ты уже пытался ограбить банк, потерпи немного.");



Re: Проблема с таймерами. - PeM6o - 17.05.2012

Perfecto! Огромное спасибо, Ru-user, работает как часы, даже лучше таймера.
Stepashka, благодарю за оптимальный вариант команды.


Re: Проблема с таймерами. - jhonyxakep - 18.05.2012

Quote:

работает как часы

это и есть часы.