PDA

Просмотр полной версии : [Вопрос] как сделать сколько игрок находился времени в игре



denis01
09.06.2014, 12:05
Ув. знатоки pro-pawn.
Как сделать так чтобы к примеру игрок заходил в игру у него началось считать сколько времени он проводит в игре а при выходе с игры обнулялось.

К примеру игрок водит команду /time у него выводит сообщени нахождение в игре: час/минут а потом игрок вышел у него обнуляеться время

L0ndl3m
09.06.2014, 12:33
NetStats_GetConnectedTime (http://pro-pawn.ru/showthread.php?6580)

Либо через массив. При коннекте устанавливаете значение переменной игрока значению: GetTickCount() и потом сравниваете так:

(GetTickCount() - переменная_игрока[playerid]) / 1000

Выведет количество секунд, сколько игрок провёл в игре.

DeimoS
09.06.2014, 12:54
В начало мода

#define ShowTimeOfPlayerInGame(%0,%1,%2,%3) ConvertSeconds(gettime() - GetPVarInt(%0, "Time Of Player In Game"), %1, %2, %3)

В OnPlayerConnect

SetPVarInt(playerid, "Time Of Player In Game", gettime());

После новую функцию для конвертации секунд в формат "час/минута/секунда"

stock ConvertSeconds(conv_time, &conv_hour, &conv_minute,&conv_second)
{
if(conv_time <= 60)
{
conv_hour = 0;
conv_minute = 0;
conv_second = conv_time;
}
else if(conv_time > 60 && conv_time < 3600)
{
conv_hour = 0;
conv_minute = conv_time / 60;
conv_second = floatround(conv_time % 60, floatround_tozero);
}
else if(conv_time == 3600){ conv_hour = 1; conv_minute = 0; conv_second = 0; }
else if(conv_time > 3600)
{
new conv_minute_int;
conv_hour = conv_time / 3600;
minutes_int = floatround(conv_time % 3600, floatround_tozero);
conv_minute = conv_minute_int / 60;
conv_second = floatround(conv_minute_int % 60, floatround_tozero);
}
return 1;
}

И пример вывода времени:

new hour_in_game,
minute_in_game,
seconds_in_game;

ShowTimeOfPlayerInGame(playerid, hour_in_game, minute_in_game, seconds_in_game);
printf("Игрок с ID %d провёл в игре %d часов, %d минут и %d секунд", playerid, hour_in_game, minute_in_game, seconds_in_game);

Как-то так. В теории должно работать. Кто проверит - отпишитесь

Mr.DeViLsS
09.06.2014, 13:11
Как-то так. В теории должно работать. Кто проверит - отпишитесь

Работает!

denis01
09.06.2014, 19:13
Вот скриншот:
http://s019.radikal.ru/i626/1406/88/115184a4ad80.png
Хотелось бы так сделать, DeimoS а твоим способом в диалоге что надо использовать?

Gressie
09.06.2014, 19:24
Вот скриншот:
http://s019.radikal.ru/i626/1406/88/115184a4ad80.png
Хотелось бы так сделать, DeimoS а твоим способом в диалоге что надо использовать?

в PlayerInfo:

pTimeGame
в public Refresh либо его аналог:

PlayerInfo[i][pTimeGame] +=1;
в public PayDay:

if(PlayerInfo[i][pTimeGame] < 1800)
{
if(PlayerInfo[i][pMember] !=0) { checks = checks / 2; }
}
а в команду /time там где формат:

Convert(PlayerInfo[playerid][pTimeGame])
Примерно будет так:

format(string, sizeof(string), "Нахождение в игре: {2BD639}%s", Convert(PlayerInfo[playerid][pTimeGame]));
В OnPlayerConnect это:

PlayerInfo[playerid][pTimeGame] = 0;

denis01
09.06.2014, 19:36
в PlayerInfo:

pTimeGame
в public Refresh либо его аналог:

PlayerInfo[i][pTimeGame] +=1;
в public PayDay:

if(PlayerInfo[i][pTimeGame] < 1800)
{
if(PlayerInfo[i][pMember] !=0) { checks = checks / 2; }
}
а в команду /time там где формат:

Convert(PlayerInfo[playerid][pTimeGame])
Примерно будет так:

format(string, sizeof(string), "Нахождение в игре: {2BD639}%s", Convert(PlayerInfo[playerid][pTimeGame]));
В OnPlayerConnect это:

PlayerInfo[playerid][pTimeGame] = 0;

Вы же при payday заного начинаете читать! а мне надо чтобы к примеру если он 5 часов или 10 часов, то ему это показывало а не в payday обратно с 0 отчёт шел

Mr.DeViLsS
09.06.2014, 20:54
Вот скриншот:
http://s019.radikal.ru/i626/1406/88/115184a4ad80.png
Хотелось бы так сделать, DeimoS а твоим способом в диалоге что надо использовать?



new string[30]; new hour_in_game,minute_in_game,seconds_in_game;
ShowTimeOfPlayerInGame(playerid, hour_in_game, minute_in_game, seconds_in_game);
format(string,30, "Нахождение в игре: %d часов, %d минут и %d секунд",hour_in_game, minute_in_game, seconds_in_game);
ShowPlayerDialog(playerid,ид_диалога,стиль_диалога,"Название",string, "кнопка1","кнопка2");