PDA

Просмотр полной версии : [Вопрос] Таймер заключения Jail



Jackal
23.09.2015, 18:41
Изначально стоял таймер цикличный посекундный, решил попробовать сделать не цикличный таймер.
Не получается отобразить (format) его в команде /time корректно.



new ArrestTime[MAX_PLAYERS];//Таймер заключения




public OnPlayerSpawn(playerid)//При спавне
{
if(PlayerInfo[playerid][pArrest] > 0)//Если есть время заключения
{
ArrestTime[playerid] = SetTimerEx("Arrest",PlayerInfo[playerid][pArrest],false,"i",playerid);//Устанавливаю таймер, время заключения беру из аккаунта




public OnPlayerDeath(playerid, killerid, reason)//После смерти игрока
{
if(cuff[playerid] == true)//Если в наручниках
{
switch(PlayerInfo[playerid][pWanted])//В зависимости от розыска записываю время заключения в аккаунт
{
case 1: PlayerInfo[playerid][pArrest] = 600000;
case 2: PlayerInfo[playerid][pArrest] = 1200000;
case 3: PlayerInfo[playerid][pArrest] = 1800000;
case 4: PlayerInfo[playerid][pArrest] = 2400000;
case 5: PlayerInfo[playerid][pArrest] = 3000000;
case 6: PlayerInfo[playerid][pArrest] = 3600000;
}




CMD:time(playerid)
{
com
flood
new string[100];
if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT) ApplyAnimation(playerid, "COP_AMBIENT", "Coplook_watch",4.1,0,0,0,0,0,1);
new text[20];
getdate(year, month, day);
switch(month)
{
case 1: text = "January";
case 2: text = "February";
case 3: text = "March";
case 4: text = "April";
case 5: text = "May";
case 6: text = "June";
case 7: text = "July";
case 8: text = "August";
case 9: text = "September";
case 10: text = "October";
case 11: text = "November";
case 12: text = "December";
}
GPN
f("%s взглянул(а) на часы", playername);
SetPlayerChatBubble(playerid, string, COLOR_PURPLE, 20.0, 10000);
gettime(hour, minuite, second);
FixHour();
if(PlayerInfo[playerid][pArrest] > 0)//Если в тюрьме
{
PlayerInfo[playerid][pArrest] = ArrestTime[playerid];//Приравниваю массив игрока к таймеру заключения и показываю время заключения игроку
SavePlayer(playerid);
f("~w~%d %s~n~~w~~w~%d:%d~n~~p~NewGame~n~~w~Jail: ~r~%d sec", day, text, hour, minuite, PlayerInfo[playerid][pArrest])
}
else
{
f("~w~%d %s~n~~w~~w~%d:%d~n~~p~NewGame", day, text, hour, minuite);
}
GameTextForPlayer(playerid, string, 5000, 1);
return 1;
}

Роуди.
24.09.2015, 13:19
PlayerInfo[playerid][pArrest] = ArrestTime[playerid];//Приравниваю массив игрока к таймеру заключения и показываю время заключения игроку
Для чего? Если уже

switch(PlayerInfo[playerid][pWanted])//В зависимости от розыска записываю время заключения в аккаунт
{
case 1: PlayerInfo[playerid][pArrest] = 600000;
case 2: PlayerInfo[playerid][pArrest] = 1200000;
case 3: PlayerInfo[playerid][pArrest] = 1800000;
case 4: PlayerInfo[playerid][pArrest] = 2400000;
case 5: PlayerInfo[playerid][pArrest] = 3000000;
case 6: PlayerInfo[playerid][pArrest] = 3600000;
}

Jackal
25.09.2015, 09:15
Не понял твоего вопроса. Для того, чтобы массив в аккаунте приравнять к текущему таймеру, чтобы показать это время игроку. А "уже" - это выставление в массив значения в зависимости от уровня розыска pWanted.

Мой вопрос состоит в том, чтобы узнать - как можно показать игроку время из вот этого таймера - ArrestTime[playerid] = SetTimerEx("Arrest",PlayerInfo[playerid][pArrest],false,"i",playerid);

#Vito
26.09.2015, 02:06
В твоем варианте PlayerInfo[playerid][pArrest] не изменяется, по этому и баг с /time

Закрыто. Решение найдено. Делюсь.

[quote name='Romzes' timestamp='1443163314' post='133568']
20 - это ID таймера
0 - это значит что таймер еще не был создан.

[hr]
По сути функции нету что бы узнать время когда остановится таймер но можно это сделать.

1. Заводим новую переменную, допустим

new aTEST[playerid];
2. В паблик Tazer(playerid) нужно будет добавить код:

TazerTime[playerid] = 0;
aTEST[playerid] = 0;
3. После или перед созданием таймера добавляем этот код:

aTEST[playerid] = gettime()+20; // 20 - это кол-во секунд что в таймере
4. Команда для узнавания время:

CMD:test(playerid) {
new text[32];
if(TazerTime[playerid] != 0) {
format(text, sizeof(text), "~w~Taz: ~r~%d", (aTEST[playerid]-gettime())); // Узнаю сколько времени осталось
} else {
format(text, sizeof(text), "The timer is not running!"); // Сообщаем что таймер не запущен!
}
GameTextForPlayer(playerid, text, 5000, 1);
return 1;
}

PS: Вариант не идеален но может быть вам подойдет!


Здесь аналогично.