PDA

Просмотр полной версии : [Вопрос] Бонус каждый час



codeo
24.06.2014, 18:05
Можно ли как нибудь через эту функцию(NetStats_GetConnectedTime) сделать выдачу бонуса каждый час?

тестил с одной минутой, засунул в секундный таймер, но в течении всей минуты был флуд..


if(NetStats_GetConnectedTime(i) / 60000 == 1)
{
SendClientMessage(i, -1, "{FFFF00}Ты в сети 1 минут");
}

^_^
24.06.2014, 18:50
Начнём с одной интересной особенности С подобных языках (вроде Pawn) а именно - конечный результат операции в Павн имеет тип максимального типа операндов (переменных). В данном случае у вас:
http://breedpmnr.ru/i/4621FD6B
Значит результат деления у вас будет неполным частным = 1. (Пример в Павн: 60000/60000 = 60001/60000 = 60002/60000 = ... = 11999/60000 = 1).
Исправляется проблема очень легко, достаточно один операнд перевести в тип Float:, делается это двумя способами:
1) NetStats_GetConnectedTime(i) / 60000.0 //Добавляем дробную часть .0
2) float(NetStats_GetConnectedTime(i)) / 60000 //Переводим возвращаеммое значение функции NetStats_GetConnectedTime в тип Float:.
Так мы получим результат 1 только когда функция будет точно равна 60000.
(Пример в Павн: 60000/60000.0 = 1 = 60002/60000.0 = ... = 119999/60000.0).

P.S: Насчёт вашей системы, вам не придётся использовать операцию деления, а операцию остатка от деления ( % ). Если остаток от деления к 3600000 миллисекунд равен нулю, значит игрок отыграл час.
Тогда проверка будет:


if(NetStats_GetConnectedTime(i) % 3600000 == 0)
Желательно также добавить проверку на логин, и т.д... если вы часто используете данную проверку, есть шанс что проверка пройдёт когда игрок сразу подключится к игре, ибо 0 % 3600000 тоже равен нулю.
UPD: Насчёт последней цитаты, функция NetStats_GetConnectedTime возвращает ноль только когда игрок не подключён. Собственно в проверки у вас должна быть и проверка на IsPlayerConnected(i), либо если у вас есть система регистрации - на переменную которая хранит статус логина, иначе бонус будет выдаваться неподключенным игрокам.