SA-MP Forums Archive
[Ajuda] Como detectar se o player ta correndo? - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda] Como detectar se o player ta correndo? (/showthread.php?tid=629572)



Como detectar se o player ta correndo? - gmstrikker - 28.02.2017

No meu servidor vocк precisa muito andar a pй, aн tem uns malandrinhos usando uns CLEO que nunca cansa, й meio ruim ter que banir uns caras por uns mods tгo zuados ou ficar de olho...

Tava pensando em criar um sistema de cansar server side...
Sу tenho uma dъvida...

Qual a melhor forma de detectar se o player estб correndo?

OBS: Eu nгo uso modo de correr do CJ UsePlayerPedAnims();
Se alguйm jб fez isso qualquer dica de ideia pro sistema seria util, obrigado!


Re: Como detectar se o player ta correndo? - F1N4L - 01.03.2017

Pode ser feito um sistema com barra de progresso:
Detecte, com um timer, quando o jogador estiver correndo e se estiver, use esse timer para aumentar a barra de progresso.
Quando a barra chegar a 100% (como queira) caso esteja correndo aplique a animaзгo de andar, atй que a barra se encha novamente...
Isso tudo no mesmo timer.

Esta й uma forma.


Re: Como detectar se o player ta correndo? - Cheleber_Pausini - 01.03.2017

PHP код:
// HOLDING(keys)
#define HOLDING(%0) \
    
((newkeys & (%0)) == (%0))
    
// PRESSING(keyVariable, keys)
#define PRESSING(%0,%1) \
    
(%& (%1)) 
PHP код:
if(HOLDING(KEY_SPRINT) || PRESSING(newkeysKEY_SPRINT ))
{
    (
assim vocк deteta quando ele corre)




Re: Como detectar se o player ta correndo? - gmstrikker - 02.03.2017

Quote:
Originally Posted by F1N4L
Посмотреть сообщение
Pode ser feito um sistema com barra de progresso:
Detecte, com um timer, quando o jogador estiver correndo e se estiver, use esse timer para aumentar a barra de progresso.
Quando a barra chegar a 100% (como queira) caso esteja correndo aplique a animaзгo de andar, atй que a barra se encha novamente...
Isso tudo no mesmo timer.

Esta й uma forma.
Boa ideia usar uma progress bar pra mostrar pros players, mas meu problema й com a forma de detectar se o player ta correndo...

Quote:
Originally Posted by Cheleber_Pausini
Посмотреть сообщение
PHP код:
// HOLDING(keys)
#define HOLDING(%0) \
    
((newkeys & (%0)) == (%0))
    
// PRESSING(keyVariable, keys)
#define PRESSING(%0,%1) \
    
(%& (%1)) 
PHP код:
if(HOLDING(KEY_SPRINT) || PRESSING(newkeysKEY_SPRINT ))
{
    (
assim vocк deteta quando ele corre)

Tentei seguir o que vc me falou:
Код:
		if(HOLDING(KEY_SPRINT) && HOLDING(KEY_UP) || HOLDING(KEY_SPRINT) && HOLDING(KEY_DOWN) || HOLDING(KEY_SPRINT) && HOLDING(KEY_LEFT) || HOLDING(KEY_SPRINT) && HOLDING(KEY_RIGHT))
		{
			if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT) { Correndo[playerid] = true; }
		}
		else {
			Correndo[playerid] = false;
		}
Mas printando Correndo[playerid] no onplayerupdate sempre fica como false, posso correr no GTA q nunca vai pra TRUE


Re: Como detectar se o player ta correndo? - F1N4L - 02.03.2017

Lhe dei a ideia de um sistema, nгo de apenas detectar o jogador correndo.
Se quer detectar o jogador correndo, simplesmente detecte a animaзгo de correr. Nгo tem como correr sem aplicar a animaзгo de correr, ou seja, nгo tem erro.


Respuesta: Como detectar se o player ta correndo? - Eiffel - 02.03.2017

Resolvido?


Re: Como detectar se o player ta correndo? - Cheleber_Pausini - 02.03.2017

Quote:
Originally Posted by gmstrikker
Посмотреть сообщение
Boa ideia usar uma progress bar pra mostrar pros players, mas meu problema й com a forma de detectar se o player ta correndo...



Tentei seguir o que vc me falou:
Код:
if(HOLDING(KEY_SPRINT) && HOLDING(KEY_UP) || HOLDING(KEY_SPRINT) && HOLDING(KEY_DOWN) || HOLDING(KEY_SPRINT) && HOLDING(KEY_LEFT) || HOLDING(KEY_SPRINT) && HOLDING(KEY_RIGHT))
		{
			if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT) { Correndo[playerid] = true; }
		}
		else {
			Correndo[playerid] = false;
		}
Mas printando Correndo[playerid] no onplayerupdate sempre fica como false, posso correr no GTA q nunca vai pra TRUE
A key sprint й a key de quando ele clica no espaзo para correr.
As Key DOWN, UP, LEFT, RIGHT sгo as setas e tem de ser detetadas no OnPlayerUpdate ou com um timer , exemplo:
https://sampwiki.blast.hk/wiki/GetPlayerKeys
PHP код:
public OnPlayerUpdate(playerid)
{
    new 
Keys,ud,lr;
    
GetPlayerKeys(playerid,Keys,ud,lr);
 
    if(
ud == KEY_UPSendClientMessage(playerid, -1"UP");
    else if(
ud == KEY_DOWNSendClientMessage(playerid, -1"DOWN");
 
    if(
lr == KEY_LEFTSendClientMessage(playerid, -1"LEFT");
    else if(
lr == KEY_RIGHTSendClientMessage(playerid, -1"RIGHT");
 
    return 
1;

Leia bem a wiki:
https://sampwiki.blast.hk/wiki/OnPlayerKeyStateChange
"Directional keys do not trigger OnPlayerKeyStateChange (up/down/left/right). They can only be detected with GetPlayerKeys (in OnPlayerUpdate or a timer)."


Um dica para a barra de espaзo (sprint):
PHP код:
if(HOLDING(KEY_SPRINT) || PRESSING(newkeysKEY_SPRINT ))
    {
            
//QUANDO PRESSIONA BARRA DE ESPAЗO PARA CORRER
    
}
    if(
RELEASED(KEY_SPRINT))
    {
          
//QUANDO LIBERTA A BARRA DE ESPAЗO PARA PARAR DE CORRER
    

E para o as setas:
PHP код:
public OnPlayerUpdate(playerid)
{
    new 
Keys,ud,lr;
    
GetPlayerKeys(playerid,Keys,ud,lr);
    if(
ud != || ud != || lr != || lr != 0)
    {
          if(
Correndo[playerid] == false)
          {
                if(!
IsPlayerInAnyVehicle(playerid))
                {
                   
//QUANDO SE MOVE NAS SETAS
                   
Andando[playerid] = true;
                }
          }
    }
    else
    {
          if(
Correndo[playerid] == true)
          {
             if(!
IsPlayerInAnyVehicle(playerid))
             {
                
//QUANDO DEIXA DE PRESSIONAR AS SETAS
                
Andando[playerid] = false;
             }
          }
    }
    return 
1;