В каком смысле? Ты можешь нормально описать что и как не работает? 3d тексты не отображаются или секунды не считаются?
|
https://sampforum.blast.hk/showthread.php?tid=490436
Emmet_ сделал отличные события и функции, там есть функции для AFK |
new bool: afk[MAX_PLAYERS];
OnPlayerUpdate - afk = false;
TimerSec - afk = true
НУ КАК ОНА МОЖЕТ НЕ РАБОТАТЬ!!!!
ЧТО ЗНАЧИТ ДАЖЕ С НУЛЯ НЕ РАБОТАЕТ, ДНО. PHP код:
|
//Глобальные
new AfkTick[MAX_PLAYERS];
new bool:IsAFK[MAX_PLAYERS];
public OnGameModeInit()
{
SetTimer("AfkTimer", 950, true);//Секундный таймер
}
public OnPlayerConnect(playerid)
{
IsAFK[playerid] = false;//Обнуляем
return true;
}
public OnPlayerUpdate(playerid)
{
AfkTick[playerid] = GetTickCount();//Обновляем время
return true;
}
forward AfkTimer();
public AfkTimer()
{
for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i))
{
if((GetTickCount() - AfkTick[i]) >= 1000)//Проверяем, если данные не обновлялись больше секунды
{
if(!IsAFK[i])
{
SendClientMessage(i, -1, "Вы вышли на паузу.");
IsAFK[i] = true;
}
}
else if(IsAFK[i])
{
SendClientMessage(i, -1, "Вы вышли из паузы.");
IsAFK[i] = false;
}
}
}
return true;
}
НУ КАК ОНА МОЖЕТ НЕ РАБОТАТЬ!!!!
ЧТО ЗНАЧИТ ДАЖЕ С НУЛЯ НЕ РАБОТАЕТ, ДНО. PHP Code:
|
public AFKSystem(playerid)
{
if(PlayerEx[playerid][ChekEx] < PlayerEx[playerid][TickEx])
{
if(PlayerEx[playerid][AFKEx] == true)
{
PlayerEx[playerid][VarEx] = 0;
PlayerEx[playerid][AFKEx] = false;
}
}
if(PlayerEx[playerid][AFKEx] == true)
{
PlayerEx[playerid][VarEx]++;
}
if(PlayerInfo[playerid][pAdmin] < 1)
{
if(PlayerEx[playerid][VarEx] > 1800)
{
SCM(playerid,COLOR_LIGHTRED,"Вы были отсоеденены от сервера (AFK)");
PlayerEx[playerid][VarEx] = 0;
Kicked(playerid);
}
}
if(PlayerEx[playerid][VarEx] > 0)
{
new stringF[50];
format(stringF,sizeof(stringF),"Игрок на паузе: %s",Convert(PlayerEx[playerid][VarEx]));
SetPlayerChatBubble(playerid, stringF, COLOR_ORANGE, 15.0, 1200);
format(stringF,sizeof(stringF),"~r~AFK: ~w~%s sec",Convert(PlayerEx[playerid][VarEx]));
GameTextForPlayer(playerid, stringF, 3000,3);
}
return true;
}
stock Convert(number)
{
new hours = 0, mins = 0, secs = 0, string[100];
hours = floatround(number / 3600);
mins = floatround((number / 60) - (hours * 60));
secs = floatround(number - ((hours * 3600) + (mins * 60)));
if(hours > 0) { format(string, 100, "%i:%02dì:%02dñ", hours, mins, secs); }
else { format(string, 100, "%i:%02d", mins, secs); }
return string;
}
Есть мысля что автору просто нужен готовый код, а у него на самом деле ничего нет.
|
//Глобальные
new AfkTick[MAX_PLAYERS];
new AfkTime[MAX_PLAYERS];
#define IsPlayerInAFK(%0) (AfkTime[%0]!=0)
public OnGameModeInit()
{
SetTimer("AfkTimer", 950, true);//Секундный таймер
}
public OnPlayerConnect(playerid)
{
AfkTime[playerid] = 0;//Обнуляем
return true;
}
public OnPlayerUpdate(playerid)
{
AfkTick[playerid] = GetTickCount();//Обновляем время
return true;
}
forward AfkTimer();
public AfkTimer()
{
new stringF[50];
for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i))
{
if((GetTickCount() - AfkTick[i]) >= 1000)//Проверяем, если данные не обновлялись больше секунды
{
if(++AfkTime[i] == 1)
{
SendClientMessage(i, -1, "Вы вышли на паузу.");
}
format(stringF,50,"Игрок на паузе: %s", Convert(AfkTime[i]));
SetPlayerChatBubble(i, stringF, COLOR_ORANGE, 15.0, 1010);
if(PlayerInfo[i][pAdmin] < 1 && AfkTime[i] > 1800)
{
SCM(i,COLOR_LIGHTRED,"Вы были отсоединены от сервера (AFK)");
Kicked(i);
continue;
}
}
else if(AfkTime[i] != 0)
{
SendClientMessage(i, -1, "Вы вышли из паузы.");
format(stringF,50,"~r~AFK: ~w~%s sec",Convert(AfkTime[i]));
GameTextForPlayer(i, stringF, 3000,3);
AfkTime[i] = 0;
}
}
}
return true;
}
new AFK_Time[MAX_PLAYERS]; public OneSecond() { for(new i; i < MAX_PLAYERS; i++) { if(!IsPlayerConnected(i)) continue; if(++AFK_Time[i] > 4) { SendClientMessage(i, -1, "Вы в АФК"); } } return 1; } public OnPlayerUpdate(playerid) { AFK_Time[playerid] = 0; return 1; }
Я так понял, у тебя там отдельный таймер для каждого игрока?
pawn Code:
|
Замени IsPlayerConnected(i) в цикле на GetPlayerState(i) != PLAYER_STATE_NONE
PLAYER_STATE_NONE возвращается в том случае, если игрок не подключен, либо он только что зашел на сервер и выбирает скин. |
if(IsPlayerInAFK(playerid))
{
//AFK
}