[Ajuda] Criar Funзгo ou Stock?
#1

Olб galera. Estou com uma dъvida. Eu quero fazer uma public ou um stock para fazer algumas verificaзхes que sгo constantes no meu GM e que eu nгo precise ficar em cada Bloco de If ficar fazendo if(...) return 1; e etc...
Essas verificaзхes seriam deste tipo, exemplo:

Existe a Var: bool:Algemado[MAX_PLAYERS]=false;
Que verifica se o jogador estб algemado ou nгo. Eu poderia fazer deste jeito:

Код:
forward verificar(playerid);
public verificar(playerid)
{
    if(Algemado[playerid] == true) return 0;
    // Outras verificaзхes aqui...
return 1;
}
Ou seja, eu quero que essa Public ou Stock retorne TRUE ou FALSE.
Seria deste modo?
Reply
#2

Nгo entendi muito bem sua dъvida, mas seria algo do tipo?

PHP код:
//Identificar se o player estб algemado
PlayerIsHandcuffed(playerid) return Algemado[playerid];
forward verificar(playerid);
public 
verificar(playerid)
{
    if(
PlayerIsHandcuffed(playerid)) return 0;
    
// Outras verificaзхes aqui...
return 1;

Reply
#3

Quote:
Originally Posted by Bruno13
Посмотреть сообщение
Nгo entendi muito bem sua dъvida, mas seria algo do tipo?

PHP код:
//Identificar se o player estб algemado
PlayerIsHandcuffed(playerid) return Algemado[playerid];
forward verificar(playerid);
public 
verificar(playerid)
{
    if(
PlayerIsHandcuffed(playerid)) return 0;
    
// Outras verificaзхes aqui...
return 1;

Tambйm entendi assim rs.

Ah, caso seja isso, vocк tambйm pode fazer assim:
PHP код:
#define PlayerIsHandcuffed(%0) Algemado[%0] 
Reply
#4

Quote:
Originally Posted by Bruno13
Посмотреть сообщение
Nгo entendi muito bem sua dъvida, mas seria algo do tipo?

PHP код:
//Identificar se o player estб algemado
PlayerIsHandcuffed(playerid) return Algemado[playerid];
forward verificar(playerid);
public 
verificar(playerid)
{
    if(
PlayerIsHandcuffed(playerid)) return 0;
    
// Outras verificaзхes aqui...
return 1;

Nгo.
Eu quero fazer minha propria funзгo onde ela verificarб se o Jogador estб algemado, Handsup e outras Variбveis que uso como Bool.
E quero que essa funзгo retorne TRUE ou FALSE.

Portanto se a funзгo tem:
Код:
Algemado[playerid] == true { return FALSE }
Handsup[playerid] == true { return FALSE}
Deu pra entender que SE UMA das verificaзхes acima estiver como Verdadeiro, ele vai retornar como FALSE INDEPENDENTEMENTE das outras estarem como falso.

Aн numa outra parte do GM, como por exemplo num comando que eu fosse criar, eu utilizaria:
NomeDaFunзгo(playerid) == true) { executa} else { executa }
Reply
#5

Acho que entendi o que vocк quer fazer, vocк pode fazer desse modo:
PHP код:
stock NomeDaFuncao(playerid)
{
    return !(
Algemado[playerid] || Handsup[playerid]);

Ou usando um macro:
PHP код:
#define NomeDaFuncao(%0) (!Algemado[%0] && !Handsup[%0] ? true : false) 
Espero ter ajudado
Reply
#6

Quote:
Originally Posted by Artista
Посмотреть сообщение
Acho que entendi o que vocк quer fazer, vocк pode fazer desse modo:
PHP код:
stock NomeDaFuncao(playerid)
{
    return !(
Algemado[playerid] || Handsup[playerid]);

Ou usando um macro:
PHP код:
#define NomeDaFuncao(%0) (!Algemado[%0] && !Handsup[%0] ? true : false) 
Espero ter ajudado
Compilei e nгo deu erros, ainda nгo testei na prбtica. Mas nгo tinha que colocar um ELSE? para retornar TRUE se nenhuma das condiзхes anteriores foram aceitas?
Algo do tipo:
Код:
stock NomeDaFuncao(playerid)
{
	return !(Algemado[playerid] || Handsup[playerid]);
        return TRUE;
}
Reply
#7

Artista, vocк cometeu um erro muito comum em eletrфnica digital quanto ao macro. Barrar todas as entradas, nгo й a mesma coisa que barrar a saнda. Vou aplicar a tabela verdade para vocк entender:

PHP код:
Porta NAND (!&&) - Todas as entradas devem ser altas para a saida ser baixa.
S'      A'H'| S
0 | 0 | 1       1 | 1 | 1
0 | 1 | 1       1 | 0 | 0
1 | 0 | 1       0 | 1 | 0
1 | 1 | 0       0 | 0 | 0 
Como pode ver, o resultado nгo vai servir.

Aplicando a tabela verdade para fazer o que o amigo aqui do tуpico, obtemos:

PHP код:
Se alguma entrada for 1saнda deve ser 0
S
1
0
0

O que corresponde a tabela verdade de uma porta NOR. Esta porta, й uma OR barrada.

Portanto basta fazer a seguinte operaзгo

S = (A+B)'

Em programaзгo:

PHP код:
return !(VarA || VarB || ... || VarZ); 
Espero ter ajudado
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)