Я сделал систему мута, основанную на получении тиков сервера, которые равны миллисекундам, и умножая их на 60к, и записывая в энум игрока, соответственно система мута у меня по минутам. Но на форуме sa-mp.com говорят, что при работе сервера более 24 часов GetTickCount переполняется, и нужно использовать сток с параметрами oldtick и newtick, но у меня не идет подсчет времени на вычитании тиков, соответственно я не могу пользоваться этим тиком - вычитать нечего. Повлияет ли переполнение GetTickCount на работу мута?
- - - Добавлено - - -
Вот код:
PHP код:
enum pInfo {
pPass[50+1], pMail[60+1], pMoney, pLevel, pAge, pNational, pSkin, pSex, pID, pReferal[MAX_PLAYER_NAME+1],
pDateReg[10+1], pExp, pDeath, pNockout, pItem1, pItem2, pItem3, pItemAmmo1, pItemAmmo2, pItemAmmo3,
pItemSelect, pAdmin, pMute
}
new
player[MAX_PLAYERS][pInfo];
PHP код:
public OnPlayerText(playerid, text[])
{
if(login_check{playerid} == false)
{
SCM(playerid, COLOR_GREY, "Вы не авторизованы!");
return false;
}
if(player[playerid][pMute] >= GetTickCount())
{
SCM(playerid, COLOR_RED, !"Вы заткнуты!");
printf("GetTickCount - %d, Mute - %d", GetTickCount(), player[playerid][pMute]);
return false;
}
return false;
}
PHP код:
CMD:mute(playerid, params[])
{
if(player[playerid][pAdmin] == 0)
{
SCM(playerid, COLOR_RED, !"Вы не администратор!");
return false;
}
if(player[playerid][pAdmin] <= 1)
return SCM(playerid, COLOR_RED, !"Вы не можете замутить игрока!");
new
targetid,
targettime,
reason[51];
if(sscanf(params, "uds[51]", targetid, targettime, reason))
return SCM(playerid, COLOR_RED, !"Образец мута: /mute [playerid] [minute] [reason]");
if(!IsPlayerConnected(targetid))
return SCM(playerid, COLOR_RED, !"Игрок с введенным вами ID не в сети!");
if(reason[50] != EOS)
return SCM(playerid, COLOR_RED, !"Максимальная длина причины мута: 50 символов");
if(targetid == playerid)
return SCM(playerid, COLOR_RED, !"Вы не можете замутить себя!");
if(targettime < 1)
return SCM(playerid, COLOR_RED, !"Вы не можете замутить игрока меньше, чем на 1 минуту!");
new
server_tick = GetTickCount();
if(player[targetid][pMute] > server_tick)
return SendClientMessage(playerid, COLOR_RED, !"Игрок уже заткнут!");
player[targetid][pMute] = server_tick+targettime*60000;
SavePlayer(targetid, "Mute", player[targetid][pMute], "d");
static const
fmt_str[] = "Администратор %s заткнул игрока %s на %d минут по причине: %s";
new
str[sizeof(fmt_str)-6+MAX_PLAYER_NAME*2+4+50+1];
format(str, sizeof(str), fmt_str, GetName(playerid), GetName(targetid), targettime, reason);
SCMTA(COLOR_RED, str);
return true;
}