Jump to content
Prosíme všetkých užívateľov, ktorý sa chcú opätovne pripojiť na discord aby znovu spárovali svoje účty kliknutím na "Discord" v navigácií a pripojili sa na server Read more... ×
  • 0
Quipo1

pomoc ESC to AFK

Dotaz

10 odpovědí na tuto otázku

Recommended Posts

  • 1
new Update[MAX_PLAYRS];

CMD:afk(playerid,params[])
{
	if(IsPlayerAfk[playerid] == 1) return SendClientMessage(playerid,-1,"{FF0000}[ ! ] {FFFFFF}Pro návrat použij {FF0000}/back!");
	else
	{
		IsPlayerAfk[playerid] = 1;
		GameTextForPlayer(playerid,"~g~AFK",2000,3);
		SetPlayerHealth(playerid,255.0);
		TogglePlayerControllable(playerid,0);
	}
	return 1;
}

CMD:back(playerid,params[])
{
	if(IsPlayerAfk[playerid] == 0) return SendClientMessage(playerid,-1,"{FF0000}[ ! ] {FFFFFF}Nejsi AFK!");
	else
	{
		IsPlayerAfk[playerid] = 0;
		SendClientMessage(playerid,-1,"{00CC00}[ ! ] {FFFFFF}Jsi zpět ve hře!");
		SetPlayerHealth(playerid,100);
		TogglePlayerControllable(playerid,1);
	}
	return 1;
}

public OnPlayerUpdate(playerid)
{
	Update[playerid] = GetTickCount();
	return 1;
}

public VytvorSiTimer()
{
	for(new i,j=GetPlayerPoolSize();i<=j;i++)
	{
		if(IsPlayerConnected(i) && !IsPlayerAfk[i] && GetTickCount()-Update[i] > 1*60*1000/*1 minutu je ESC*/) cmd_afk(i," ");
	}
	return 1;
}

 

Edited by ATomas

Sdílet tento příspěvek


Link to post
Share on other sites
  • 2

Nazdar, nie je to nič zložité. Existuje include (ktorý sa ti určite hneď podarí nájsť) obsahujúci public OnPlayerPause. Tento public sa zavolá, keď hráč strávi nejakú dobu (napr. 5 sec) ESC. 

Potom ti stačí iba vnútri OnPlayerPause zavolať funkciu na zapnutie afk režimu pre hráča (napr. z módu). 

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0
Spoiler

 


new bool:PlayerPaused[MAX_PLAYERS] = false,
InactiveTime[MAX_PLAYERS];

public OnGameModeInit()
{
    SetTimer("CheckForPausedPlayers", 1000, true);
    return 1;
}

public OnPlayerUpdate(playerid)
{   
    if(InactiveTime[playerid] >= 5) PlayerPaused[playerid] = false; // Player has unpaused their game.
    InactiveTime[playerid] = 0;
    return 1;
}

forward CheckForPausedPlayers();
public CheckForPausedPlayers()
{
    foreach(new i: Player)
    {
        if(PlayerPaused[i] == false)
        {
            InactiveTime[i] ++;
            if(InactiveTime[i] == 5)
            {
                PlayerPaused[i] = true; // Player has paused their game.
            }
        }
    }
}

 

 

Napiš jestli to funguje, hledal jsem to asi 10 s, takže kdyby nešlo, tak pardon.

Zdroj: https://forum.sa-mp.com/showthread.php?t=529596 

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0

no našel jsem jeden filterscript přímo, který mi 100% funguje i dobře vypadá, ale chci tam nějak narvat to, když dá hráč ESC, tak ho to po určité době hodí do AFKU a nebudou se ani přičítat nahrané hodiny, což tenhle kod neumí.

 

Pomohl by mi ho někdo upravit? Díky

 

CMD:afk(playerid, params[])
{
 if(IsPlayerAfk[playerid] == 1) return SendClientMessage(playerid, -1, "{FF0000}[ ! ] {FFFFFF}Pro návrat použij {FF0000}/back!");
 IsPlayerAfk[playerid] = 1;
 GameTextForPlayer(playerid, "~g~AFK",2000,3);
 SetPlayerHealth(playerid, 9999999999999999999.0);
 TogglePlayerControllable(playerid,0);
 return 1;
}
CMD:back(playerid,params[])
{
 if(IsPlayerAfk[playerid] == 0) return SendClientMessage(playerid, -1, "{FF0000}[ ! ] {FFFFFF}Nejsi AFK!");
 if(IsPlayerAfk[playerid] == 1)
 {
 IsPlayerAfk[playerid] = 0;
 SendClientMessage(playerid, -1,"{00CC00}[ ! ] {FFFFFF}Jsi zpět ve hře!");
 SetPlayerHealth(playerid, 100);
 TogglePlayerControllable(playerid,1);
 }
 return 1;
}

 

Edited by Quipo1

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0
On 30. 11. 2018 at 8:09, ATomas said:

new Update[MAX_PLAYRS];

CMD:afk(playerid,params[])
{
	if(IsPlayerAfk[playerid] == 1) return SendClientMessage(playerid,-1,"{FF0000}[ ! ] {FFFFFF}Pro návrat použij {FF0000}/back!");
	else
	{
		IsPlayerAfk[playerid] = 1;
		GameTextForPlayer(playerid,"~g~AFK",2000,3);
		SetPlayerHealth(playerid,255.0);
		TogglePlayerControllable(playerid,0);
	}
	return 1;
}

CMD:back(playerid,params[])
{
	if(IsPlayerAfk[playerid] == 0) return SendClientMessage(playerid,-1,"{FF0000}[ ! ] {FFFFFF}Nejsi AFK!");
	else
	{
		IsPlayerAfk[playerid] = 0;
		SendClientMessage(playerid,-1,"{00CC00}[ ! ] {FFFFFF}Jsi zpět ve hře!");
		SetPlayerHealth(playerid,100);
		TogglePlayerControllable(playerid,1);
	}
	return 1;
}

public OnPlayerUpdate(playerid)
{
	Update[playerid] = GetTickCount();
	return 1;
}

public VytvorSiTimer()
{
	for(new i,j=GetPlayerPoolSize();i<=j;i++)
	{
		if(IsPlayerConnected(i) && !IsPlayerAfk[i] && GetTickCount()-Update[i] > 1*60*1000/*1 minutu je ESC*/) cmd_afk(i," ");
	}
	return 1;
}

 

Hodil jsem to do toho FS za ten můj kód a nějak nepobírám co to po mě chce.. A nějak si nevím rady s tím timerem. Za každou pomoc budu fakt rád aspon si to zase oživím. :)

 

https://ibb.co/vjM7dHY
https://ibb.co/4JmZ4zp
https://ibb.co/jZjPFCf

 

Edited by Quipo1
screeny
  • Si děláš prdel? :D 2

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0
public OnGameModeInit()
{
	SetTimer("VytvorSiTimer",1000,1);
}

Si nikdy nepouzil timer ? :)

A pokud v dalsim prispevku napises ze nedokazes opravit

Citace

public function lacks forward declaration

Tak ten PC vyhod z okna 😄

Edited by ATomas

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0

Bože já jsem de*il. Čumím do toho takovou dobu a vůbec mi nedošlo jakou dělám chybu. 😄😄 Už mi z toho hrabe, díky za trpělivost ..

Ještě jedna věc, jak udělám aby mi to nepřipočítávalo nahraný hodiny?  Protože ikdyž dám /afk nebo mě to tam hodí automaticky, tak když dám /stats vidím, jak se mi hodiny přičítaji. A ještě aby to hráče hodilo do AFKu až třeba za 5 sekund. Díky A to už bude vše 😄

Edited by Quipo1

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0

Tak pak máš nějaký timer nebo něco kde ti to každou minutu třeba připočítává do nějaké proměnné tak jsi vytvoř podmínku aby to zapisovalo jen když není afk 
 

if(IsPlayerAfk[playerid] == 0) //Zjištuje zda je hráč afk 
{
nahrano ++; //proměnná na ten čas se tedy přičte, jelikož afk se = 0. 
}
else
{
stravenoafk ++; //když je afk tak mu to místo k nahranému času bude přičítat k času strávenému afk
}

 



 

Edited by Zexy

Sdílet tento příspěvek


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×