SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Português/Portuguese > Lançamentos/Releases

Reply
 
Thread Tools Display Modes
Old 18/06/2018, 10:51 PM   #3401
Cycle
Big Clucker
 
Join Date: Sep 2017
Location: Salvador, Brazil
Posts: 128
Reputation: 90
Default Re: Chat sem mensagens para jogadores que não efetuaram login

Quote:
Originally Posted by RazorGuigo View Post
está função é bem simples, com ela nenhuma mensagem é exibida na para jogadores que não efetuaram o login, assim despolui bastante o visual do servidor:



PHP Code:
SendClientMessage(playerid, -1" ");//poderá ser enviado para jogadores não logado (limpar mensagens nativas) 
PHP Code:
//não enviar menssagens para os players
public OnOutcomingRPC(playeridrpcidBitStream:bs)

    if(
rpcid== 93
    {
           if(!
IsLogado(playerid)) //substitua por sua variável ou função de login
           
{
               new 
dMessageLength;

               
BS_IgnoreBits(bs32);
               
BS_ReadValue(bs,PR_UINT32,dMessageLength);

               if(
dMessageLength 1)
                   return 
0;
           }
       }
     return 
1;

Pode apenas retornar o valor do RPC para falso, dará no mesmo.
PHP Code:
public OnIncomingRPC(playeridrpcidBitStream:bs)
{
    if(
rpcid == 93)
        return 
false;
    return 
true;

Quote:
Originally Posted by RafaeeL View Post
PHP Code:
if(!strcmp(cmd"/admins"true))
    {
        new
            
admladmmdrhlpcrg
        
;
        new
            
stg2[1500]
        ;
        
strcat(stg2"Nome\tCargo\tStatus\n");
        foreach(
Playeri)
        {
            if(
DOF2_GetInt(f(i), "AdminL") == 1)
            {
                if(
aInfo[i][Oculto] == false)
                {
                    
adml ++;
                     
format(gStrsizeof(gStr), "{FFFFFF}%s[{76EEC6}%d{FFFFFF}] \t{FF1493}Dono(a) \t{00FF00}Online\n"PlayerName(i), i);
                    
strcat(stg2gStr);
                }
            }
            if(
aInfo[i][Admin] == && DOF2_GetInt(f(i), "AdminL") == 0)
            {
                if(
aInfo[i][Oculto] == false)
                {
                    
adm ++;
                     
format(gStrsizeof(gStr), "{FFFFFF}%s[{76EEC6}%d{FFFFFF}] \t{1E90FF}Administrador(a) \t{00FF00}Online\n"PlayerName(i), i);
                     
strcat(stg2gStr);
                }
            }
              if(
aInfo[i][Moderador] == && DOF2_GetInt(f(i), "AdminL") == 0)
            {
                if(
aInfo[i][Oculto] == false)
                {
                    
mdr ++;
                     
format(gStrsizeof(gStr), "{FFFFFF}%s[{76EEC6}%d{FFFFFF}] \t{FF7F24}Moderador(a) \t{00FF00}Online\n"PlayerName(i), i);
                     
strcat(stg2gStr);
                }
            }
               if(
aInfo[i][Ajudante] == && DOF2_GetInt(f(i), "AdminL") == 0)
            {
                if(
aInfo[i][Oculto] == false)
                {
                    
hlp ++;
                     
format(gStrsizeof(gStr), "{FFFFFF}%s[{76EEC6}%d{FFFFFF}] \t{43CD80}Ajudante \t{00FF00}Online\n"PlayerName(i), i);
                     
strcat(stg2gStr);
                }
            }
               if(
aInfo[i][Corregedor] == && DOF2_GetInt(f(i), "AdminL") == 0)
            {
                if(
aInfo[i][Oculto] == false)
                {
                    
crg ++;
                     
format(gStrsizeof(gStr), "{FFFFFF}%s[{76EEC6}%d{FFFFFF}] \t{98F5FF}Corregedor(a) \t{00FF00}Online\n"PlayerName(i), i);
                     
strcat(stg2gStr);
                }
            }
        }
        new 
teste crg+adml+adm+mdr+hlp;
        if(
teste == 0) return SendClientMessage(playeridCOR_ERRO"| INFO ADMIN |{FFFFFF} Nenhum Staff online no momento [L.S]!");
        
format(hFilesizeof(hFile), "{FFFFFF}•{FFFFFF} Staff PFL Online [{76EEC6}%d{FFFFFF}]",teste);
        
ShowPlayerDialog(playerid1447DIALOG_STYLE_TABLIST_HEADERShFilestg2"Fechar""");
        return 
1;
    } 

Já vi alguns tópicos a respeito de um /admins em dialog! Então decidi postar oq fiz, já que não estou utilizando ele
Amigo, leve em consideração que não são todos que irão conseguir interpretar o seu código.
Existem variáveis com nomenclaturas que não podem ser entendidas de acordo com o seu script.
O mais aconselhável, seria você mostrar/compartilhar as variáveis dentro do script, logo, o seu comando, não servirá de nada, pois resultará em erros para o utilizador do mesmo.

PHP Code:
/*
      Perdão por qualquer erro, não testei.
*/
public OnPlayerCommandText(playeridcmdtext[])
{
    if(!
strcmp(cmdtext"/admins"true))
    {
        new 
playerAdministratornameAdministrator[MAX_PLAYER_NAME], str[121];
        
GetPlayerName(playeridnameAdministratorsizeof(nameAdministrator));
        for(new 
0MAX_PLAYERSi++)
        {
            if(
IsPlayerAdmin(i))
            {
                
playerAdministrator++;
                
format(strsizeof(str), "%s"nameAdministrator);
            }
        }
        if(
playerAdministrator == 0)
            return 
str "Administradores presentes no servidor: \n\nNão existe nenhum administrador presente no servidor.";
        
ShowPlayerDialog(playerid1515DIALOG_STYLE_MSGBOX"Administradores"str"OK""");
        return 
true;
    }
    return 
true;

+Topic.

Trago algo não tão relevante, mas pode ser um bom instrumento de estudo para os interessados sobre como funcionam as funções "Get" no SA-MP.
Trago uma versão do GetPlayerWeapon em Pawn.RakNet.

O que a função faz?
  • Ela retorna o valor da arma em que o jogador possui em mãos.

Função:
PHP Code:
#if defined _GPW_included
    #endinput
#endif 
#define _GPW_included

#if !defined PAWNRAKNET_INC_
    #error You must have Pawn.RakNet include in order to use this one.
#endif

static GPW_RakNet[MAX_PLAYERS char];

stock GetPlayerWeapon(playerid){
    if(
playerid || playerid MAX_PLAYERS)
        return 
false;
    return 
GPW_RakNet{playerid};
}

public 
OnIncomingPacket(playeridpacketidBitStream:bs)
{
    if(
packetid == 207){
        
BS_SetReadOffset(bs234);
        
BS_ReadValue(
            
bs,
            
PR_BITSGPW_RakNet{playerid}, 6
        
);
        
BS_ResetReadPointer(bs);
    }
    
#if defined GPW_RakNet_OnIncomingPacket
        
return GPW_RakNet_OnIncomingPacket(playeridpacketidBitStream:bs);
    
#else
        
return true;
    
#endif
}

#if defined _ALS_OnIncomingPacket
    #undef OnIncomingPacket
#else
    #define _ALS_OnIncomingPacket
#endif
#define OnIncomingPacket _ALS_OnIncomingPacket 
O que foi feito:
  • Fizemos a definição e verificação inicial de todo o script, se há utilização do Pawn.RakNet(que o mesmo é necessário para funcionamento da função neste caso).
  • Foi criada uma variável estática, para não ter problemas de nomenclatura com o filterscript ou gamemode que está sendo utilizado no servidor. Foi utilizado o limite sobre a variável em char.
  • Criei uma função, utilizando a keyword stock para evitar que dê algum aviso caso ela não seja usada, e normalmente, retornei com o valor da variável.
  • Dentro da callback OnIncomingPacket, foi verificado o pacote 207. Feito a soma das offsets sobre as variáveis dentro do enumerador. O valor do BitStream foi lido, e deslocou diretamente para o parâmetro desejado. Foi resetado o valor do ponto lido, para que outro script/função que for acessar o mesmo pacote e mesmo endereço, não seja resultado em problemas ou até erros.
  • Um hook da callback foi feito.

Espero que seja útil. (Como material de estudo, é claro)

Last edited by Cycle; 19/06/2018 at 11:46 PM.
Cycle is offline   Reply With Quote
Old 18/06/2018, 11:27 PM   #3402
FerrariL
Gangsta
 
FerrariL's Avatar
 
Join Date: Sep 2016
Location: Goiânia
Posts: 527
Reputation: 22
Default Re: Chat sem mensagens para jogadores que não efetuaram login

Quote:
Originally Posted by Cycle View Post
Pode apenas retornar o valor do RPC para falso, dará no mesmo.
PHP Code:
public OnIncomingRPC(playeridrpcidBitStream:bs)
{
    if(
rpcid == 93)
        return 
false;
    return 
true;



Amigo, leve em consideração que não são todos que irão conseguir interpretar o seu código.
Existem variáveis com nomenclaturas que não podem ser entendidas de acordo com o seu script.
O mais aconselhável, seria você mostrar/compartilhar as variáveis dentro do script, logo, o seu comando, não servirá de nada, pois resultará em erros para o utilizador do mesmo.

PHP Code:
/*
      Perdão por qualquer erro, não testei.
*/
public OnPlayerCommandText(playeridcmdtext[])
{
    if(!
strcmp(cmdtext"/admins"true))
    {
        new 
playerAdministratornameAdministrator[MAX_PLAYER_NAME], str[121];
        
GetPlayerName(playeridnameAdministratorsizeof(nameAdministrator));
        for(new 
0MAX_PLAYERSi++)
        {
            if(
IsPlayerAdmin(i))
            {
                
playerAdministrator++;
                
format(strsizeof(str), "%s"nameAdministrator);
            }
        }
        if(
playerAdministrator == 0)
            return 
str "Administradores presentes no servidor: \n\nNão existe nenhum administrador presente no servidor.";
        
ShowPlayerDialog(playerid1515DIALOG_STYLE_MSGBOX"Administradores"str"OK""");
        return 
true;
    }
    return 
true;

+Topic.

Writing...
O autor do tópico Rafael, criou este comando em dialog para os usuários do gamemode WE e seus derivados, faltou ele especificar.
__________________
Faço sistemas por encomenda, discord: FerrariL
#5104
FerrariL is offline   Reply With Quote
Old 19/06/2018, 12:11 AM   #3403
RazorGuigo
High-roller
 
RazorGuigo's Avatar
 
Join Date: May 2016
Location: South is my Country
Posts: 1,168
Reputation: 104
Default Re: Chat sem mensagens para jogadores que não efetuaram login

Quote:
Originally Posted by Cycle View Post
Pode apenas retornar o valor do RPC para falso, dará no mesmo.
PHP Code:
public OnIncomingRPC(playeridrpcidBitStream:bs)
{
    if(
rpcid == 93)
        return 
false;
    return 
true;

isso prova que não tem noção ou nenhuma do que esteja falando, ou então nem compreendeu a proposta, antes de sair falando!


PS: GetPlayerWeapon() Realmente não agregou em nada
RazorGuigo is offline   Reply With Quote
Old 19/06/2018, 08:51 PM   #3404
Cycle
Big Clucker
 
Join Date: Sep 2017
Location: Salvador, Brazil
Posts: 128
Reputation: 90
Default Re: Chat sem mensagens para jogadores que não efetuaram login

Quote:
Originally Posted by RazorGuigo View Post
isso prova que não tem noção ou nenhuma do que esteja falando, ou então nem compreendeu a proposta, antes de sair falando!


PS: GetPlayerWeapon() Realmente não agregou em nada
Como assim o que eu estou falando não tem sentido ou noção?
O que você está fazendo que é realmente sem noção, criando variáveis e condicionais enquanto pode apenas retornar a condição do RPC para falso.

Como disse acima, mostrei para se tratar em material de estudo.
Algo que não agrega em nada mesmo é a sua include de IsFirstJoin, abraço.


Amo você, Razor.
Cycle is offline   Reply With Quote
Old 20/06/2018, 01:47 AM   #3405
B4dSh33p
Big Clucker
 
Join Date: Jun 2016
Posts: 109
Reputation: 4
Default Re: Códigos Úteis #1

Quote:
Originally Posted by Cycle View Post
É inefetivo usar o plugin para fazer algo que já é possível.
Quote:
Originally Posted by RodrigoMSR View Post
Liberar o caractere de porcentagem (%) no chat com Pawn.RakNet.
PHP Code:
public OnIncomingRPC(playeridrpcidBitStream:bs)
{
    if(
rpcid == 101//Chat
    
{
        new 
lenmessage[150];

        
BS_ReadValue(
            
bs,
            
PR_UINT8len,
            
PR_STRINGmessagelen
        
);

        for(new 
0leni++)
        {
            if(
message[i] == '%')
            {
                
strins(message"%"i);
                
i++;
                
len++;
            }
        }

          
CallRemoteFunction("OnPlayerText""is"playeridmessage);
          return 
0;
    }
    return 
1;

OBS: isso inutiliza os retornos da callback OnPlayerText.
Como faço para funcionar com SendClientMessage?
B4dSh33p is offline   Reply With Quote
Old 20/06/2018, 03:28 PM   #3406
RodrigoMSR
Gangsta
 
RodrigoMSR's Avatar
 
Join Date: Mar 2015
Location: Paraná - Brasil
Posts: 959
Reputation: 128
Default Re: Códigos Úteis #1

Quote:
Originally Posted by B4dSh33p View Post
Como faço para funcionar com SendClientMessage?
Se você utiliza SendClientMessage na OnPlayerText não precisa alterar nada.
__________________
Asus Prime H310M-K, i5-8400 Coffee Lake, GTX 1060 6GB, 8GB DDR4 2400MHz.
RodrigoMSR is offline   Reply With Quote
Old 23/06/2018, 04:23 PM   #3407
BrGabrielBr
Huge Clucker
 
BrGabrielBr's Avatar
 
Join Date: Jul 2016
Location: Rio De Janeiro
Posts: 425
Reputation: 5
Default Re: Códigos Úteis #1

Sistema bem simples só pra avisa o seu id do player que loga

PHP Code:
public OnPlayerConnect(playerid)
{
new 
string[128];
format(stringsizeof(string), ""TAG_SERVE" O %s entrou no servidor com o ID: (%d)",Nome(playerid),playerid);//Nome(playerid) você substitui pela definição que salva as contas do seu serve
SendClientMessageToAll(COLOR_TEALstring);
return 
1;

__________________
BrGabrielBr is offline   Reply With Quote
Old 23/06/2018, 04:49 PM   #3408
Cycle
Big Clucker
 
Join Date: Sep 2017
Location: Salvador, Brazil
Posts: 128
Reputation: 90
Default Re: Códigos Úteis #1

Quote:
Originally Posted by BrGabrielBr View Post
Sistema bem simples só pra avisa o seu id do player que loga

PHP Code:
public OnPlayerConnect(playerid)
{
new 
string[128];
format(stringsizeof(string), ""TAG_SERVE" O %s entrou no servidor com o ID: (%d)",Nome(playerid),playerid);//Nome(playerid) você substitui pela definição que salva as contas do seu serve
SendClientMessageToAll(COLOR_TEALstring);
return 
1;

Mesmo sendo simples, está errado.

Não há necessidade de usar 128 células em uma variável, logo terá perda de memória.
Não são todos que possuem o macro de "TAG_SERVE", então não use isso, e muito menos o "Nome(playerid)", se quiser fazer isso, que formate uma variável com matriz.
De novo, não são todos que possuem o macro "COLOR_TEAL", logo, o compilador irá apresentar erros.

O modo mais correto e simples de criar um "sistema" desse porte, é da seguinte forma:

PHP Code:
public OnPlayerConnect(playerid){
    new 
str[66], playerName[MAX_PLAYER_NAME];
    
GetPlayerName(playeridplayerNamesizeof(playerName));
    
format(strsizeof(str), "O jogador %s entrou no servidor. [ID:%d]"playerNameplayerid);
    
SendClientMessageToAll(-1str);
    return 
true;

Cycle is offline   Reply With Quote
Old 23/06/2018, 04:56 PM   #3409
BrGabrielBr
Huge Clucker
 
BrGabrielBr's Avatar
 
Join Date: Jul 2016
Location: Rio De Janeiro
Posts: 425
Reputation: 5
Default Re: Códigos Úteis #1

Quote:
Originally Posted by Cycle View Post
Mesmo sendo simples, está errado.

Não há necessidade de usar 128 células em uma variável, logo terá perda de memória.
Não são todos que possuem o macro de "TAG_SERVE", então não use isso, e muito menos o "Nome(playerid)", se quiser fazer isso, que formate uma variável com matriz.
De novo, não são todos que possuem o macro "COLOR_TEAL", logo, o compilador irá apresentar erros.

O modo mais correto e simples de criar um "sistema" desse porte, é da seguinte forma:

PHP Code:
public OnPlayerConnect(playerid){
    new 
str[66], playerName[MAX_PLAYER_NAME];
    
GetPlayerName(playeridplayerNamesizeof(playerName));
    
format(strsizeof(str), "O jogador %s entrou no servidor. [ID:%d]"playerNameplayerid);
    
SendClientMessageToAll(-1str);
    return 
true;

Sim me desculpa mano, é que aprendi a programa faz muito pouco tempo to aprendendo as coisas agora
__________________
BrGabrielBr is offline   Reply With Quote
Old 23/06/2018, 04:59 PM   #3410
BrGabrielBr
Huge Clucker
 
BrGabrielBr's Avatar
 
Join Date: Jul 2016
Location: Rio De Janeiro
Posts: 425
Reputation: 5
Default Re: Códigos Úteis #1

Refiz

PHP Code:
public OnPlayerConnect(playerid)
{
    new 
String[70];
    
format(Stringsizeof(String), "[SERVER]: O %s entrou no servidor com o ID: (%d)"Nome(playerid), playerid);
     
SendClientMessageToAll(0x00A180FFString);
    return 
1;
}

//Stock que define Nome.
stock Nome(playerid)
{
    new 
name[MAX_PLAYER_NAME];
    
GetPlayerName(playeridnamesizeof(name));
    return 
name;

__________________
BrGabrielBr is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[FilterScript] Menus Úteis [SKIN|CARROS|ARMAS] SlashPT Lançamentos/Releases 25 02/05/2014 03:56 PM
[Include] [INC]Várias e Uteis Funções andmeida10 Lançamentos/Releases 28 14/12/2012 01:49 PM
[PEDIDO] Codigos Hashtag Português/Portuguese 7 16/11/2011 10:09 PM


All times are GMT. The time now is 06:24 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.