Не работает не одна АФК система
#1

В чем может быть проблема? не работает не одна АФК система, таймер объявляю - все равно не работает.
Говорили проблема со стримером, пробовал разные версии - не помогло.
Кто что знает отпишите пожалуйста!

Написал даже систему с 0 - все равно не работает.
Reply
#2

В каком смысле? Ты можешь нормально описать что и как не работает? 3d тексты не отображаются или секунды не считаются?
Reply
#3

ответ: 42
Reply
#4

Дам мысль, от неё будешь плясать..
Паблик OnPlayerUpdate вызывается только тогда, когда игрок не на паузе.
Reply
#5

Quote:
Originally Posted by Kolstin
Посмотреть сообщение
В каком смысле? Ты можешь нормально описать что и как не работает? 3d тексты не отображаются или секунды не считаются?
И то и другое
Reply
#6

https://sampforum.blast.hk/showthread.php?tid=490436
Emmet_ сделал отличные события и функции, там есть функции для AFK
Reply
#7

Quote:
Originally Posted by Optimus_Sprite
Посмотреть сообщение
https://sampforum.blast.hk/showthread.php?tid=490436
Emmet_ сделал отличные события и функции, там есть функции для AFK
Данный инклуд не помог.
Reply
#8

Тогда выложи весь код, посмотрим.
Reply
#9

НУ КАК ОНА МОЖЕТ НЕ РАБОТАТЬ!!!!
ЧТО ЗНАЧИТ ДАЖЕ С НУЛЯ НЕ РАБОТАЕТ, ДНО.

PHP код:
new boolafk[MAX_PLAYERS];

OnPlayerUpdate afk false;
TimerSec afk true 
ВСЁ, ЧТО ТТ ДЕЛАТЬ ТО!
Reply
#10

Quote:
Originally Posted by k3dr
Посмотреть сообщение
НУ КАК ОНА МОЖЕТ НЕ РАБОТАТЬ!!!!
ЧТО ЗНАЧИТ ДАЖЕ С НУЛЯ НЕ РАБОТАЕТ, ДНО.

PHP код:
new boolafk[MAX_PLAYERS];
OnPlayerUpdate afk false;
TimerSec afk true 
ВСЁ, ЧТО ТТ ДЕЛАТЬ ТО!
Напиши полным кодом, а то многим будет не понятно!
Reply
#11

Вот, написал по-быстрому:


pawn Code:
//Глобальные
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;
}
Reply
#12

Есть мысля что автору просто нужен готовый код, а у него на самом деле ничего нет.
Reply
#13

Quote:
Originally Posted by k3dr
View Post
НУ КАК ОНА МОЖЕТ НЕ РАБОТАТЬ!!!!
ЧТО ЗНАЧИТ ДАЖЕ С НУЛЯ НЕ РАБОТАЕТ, ДНО.

PHP Code:
new boolafk[MAX_PLAYERS];
OnPlayerUpdate afk false;
TimerSec afk 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(playeridstringFCOLOR_ORANGE15.01200);
        
format(stringF,sizeof(stringF),"~r~AFK: ~w~%s sec",Convert(PlayerEx[playerid][VarEx]));
        
GameTextForPlayer(playeridstringF3000,3);
    }
    return 
true;

PHP Code:
stock Convert(number)
{
    new 
hours 0mins 0secs 0string[100];
    
hours floatround(number 3600);
    
mins floatround((number 60) - (hours 60));
    
secs floatround(number - ((hours 3600) + (mins 60)));
    if(
hours 0) { format(string100"%i:%02dì:%02dñ"hoursminssecs); }
    else { 
format(string100"%i:%02d"minssecs); }
    return 
string;

Reply
#14

Quote:
Originally Posted by Stepashka
View Post
Есть мысля что автору просто нужен готовый код, а у него на самом деле ничего нет.
Reply
#15

Я так понял, у тебя там отдельный таймер для каждого игрока?

pawn Code:
//Глобальные
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;
}
Reply
#16

Code:
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;
}
Reply
#17

Quote:
Originally Posted by Slava[LSW]
View Post
Я так понял, у тебя там отдельный таймер для каждого игрока?

pawn Code:
//Глобальные
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;
}
Спасибо!!! Заработало!!!
Система вижу твоя, молодец, помог очень, не мог бы сделать проверку что бы при входе в игру (вводе пароля) не срабатывала она.
Reply
#18

Замени IsPlayerConnected(i) в цикле на GetPlayerState(i) != PLAYER_STATE_NONE

PLAYER_STATE_NONE возвращается в том случае, если игрок не подключен, либо он только что зашел на сервер и выбирает скин.
Reply
#19

Quote:
Originally Posted by Slava[LSW]
View Post
Замени IsPlayerConnected(i) в цикле на GetPlayerState(i) != PLAYER_STATE_NONE

PLAYER_STATE_NONE возвращается в том случае, если игрок не подключен, либо он только что зашел на сервер и выбирает скин.
Благодарю, теска .
И еще, например когда телепортируешь игрока к себе, нужна проверка что игрок АФК, какую функцию в данной системе можно использовать в качестве проверки? AfkTime? AfkTick?
Reply
#20

Вверху же макрос есть #define IsPlayerInAFK(%0) (AfkTime[%0]!=0)

например

pawn Code:
if(IsPlayerInAFK(playerid))
{
    //AFK
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)