SA-MP Forums

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

Reply
 
Thread Tools Display Modes
Old 22/10/2017, 12:20 AM   #1
yFrank
Little Clucker
 
Join Date: Mar 2017
Posts: 32
Reputation: 2
Default Desbugar o derrubamento do servidor pelo comando [%s]

Primeiramente, vão na sua callback

Code:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
Depois de terem ido na callback, adicionem o seguinte código:

Code:
	if(strlen(inputtext) > 128)return SendClientMessage(playerid, COLOR_GREY, " O link que você digitou está muito grande !");
    if(strfind(inputtext,"%", true) != -1)return SendClientMessage(playerid, COLOR_GREY, "{FFFFFF}Você não pode usar esse tipo de caractere.");
Explicação:

Code:
if(strlen(inputtext) > 128)return SendClientMessage(playerid, COLOR_GREY, " O link que você digitou está muito grande !"); - Permite que o player possa digitar até 128 digitos
Code:
if(strfind(inputtext,"%", true) != -1)return SendClientMessage(playerid, COLOR_GREY, "{FFFFFF}Você não pode usar esse tipo de caractere."); - O player não pode digitar nenhum código com ''%'' nas dialogs, que é o caso que ocorre o derrubamento do servidor!
O caso de derrubamento, (Não sei se ocorre em todos os servidores de SAMP), mas na maioria das GM's RPG acontecem.
Quando o player executa algum dialog e digita o comando %s crasha o servidor.
yFrank is offline   Reply With Quote
Old 22/10/2017, 12:59 AM   #2
IlanZ
High-roller
 
Join Date: Jul 2016
Location: Brasil
Posts: 1,358
Reputation: 75
Default Re: Desbugar o derrubamento do servidor pelo comando [%s]

muitobom
IlanZ is offline   Reply With Quote
Old 22/10/2017, 01:04 AM   #3
Bruno13
High-roller
 
Bruno13's Avatar
 
Join Date: May 2013
Location: Caxias do Sul/RS
Posts: 1,433
Reputation: 240
Default Re: Desbugar o derrubamento do servidor pelo comando [%s]

Solução mais prática

PHP Code:
strreplace(inputtext"%s""#", .maxlength 128);

strreplace(string[], const search[], const replacement[], bool:ignorecase falsepos 0limit = -1maxlength sizeof(string))
{
    
// No need to do anything if the limit is 0.
    
if (limit == 0)
        return 
0;
    
    new
        
sublen strlen(search),
        
replen strlen(replacement),
            
bool:packed ispacked(string),
        
maxlen maxlength,
        
len strlen(string),
        
count 0
    
;
    
    
    
// "maxlen" holds the max string length (not to be confused with "maxlength", which holds the max. array size).
    // Since packed strings hold 4 characters per array slot, we multiply "maxlen" by 4.
    
if (packed)
        
maxlen *= 4;
    
    
// If the length of the substring is 0, we have nothing to look for..
    
if (!sublen)
        return 
0;
    
    
// In this line we both assign the return value from "strfind" to "pos" then check if it's -1.
    
while (-!= (pos strfind(stringsearchignorecasepos))) {
        
// Delete the string we found
        
strdel(stringpospos sublen);
        
        
len -= sublen;
        
        
// If there's anything to put as replacement, insert it. Make sure there's enough room first.
        
if (replen && len replen maxlen) {
            
strins(stringreplacementposmaxlength);

            
pos += replen;
            
len += replen;
        }
        
        
// Is there a limit of number of replacements, if so, did we break it?
        
if (limit != -&& ++count >= limit)
            break;
    }
    
    return 
count;

__________________
Desenvolvendo Hogwarts RP/G
Code:
> Não trabalho mais com venda de sistemas.
> Site: www.bruno13.tk
Bruno13 is offline   Reply With Quote
Old 22/10/2017, 03:10 AM   #4
ForT
Gangsta
 
ForT's Avatar
 
Join Date: Sep 2012
Location: Florianópolis - SC Country: Brazil
Posts: 674
Reputation: 261
Default Re: Desbugar o derrubamento do servidor pelo comando [%s]

Ao invés de bloquear o dialog para um jogador, seria mais simples fazer desse jeito:
PHP Code:
public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    
// Tamanho da mensagem
    
new len strlen(inputtext);
    
    while (
len--) {
        
// Verificar se possui % na mensagem
        
if (inputtext[len] == '%'inputtext[len] = '#';
    }
   
//... resto do código 
__________________


Coming soon

ForT is offline   Reply With Quote
Old 23/10/2017, 12:46 AM   #5
BrunoLuiz
Big Clucker
 
Join Date: Feb 2015
Location: Florida
Posts: 81
Reputation: 6
Default Re: Desbugar o derrubamento do servidor pelo comando [%s]

http://forum.sa-mp.com/showthread.php?t=641164
BrunoLuiz is offline   Reply With Quote
Old 23/10/2017, 01:25 AM   #6
connork
Gangsta
 
connork's Avatar
 
Join Date: May 2013
Posts: 560
Reputation: 46
Default Re: Desbugar o derrubamento do servidor pelo comando [%s]

O erro é na callback SendClientMessage, o dialog é um caminho pra enviar o caractere e causar o problema. Eu fiz da forma abaixo, pois no meu servidor haviam jogadores utilizando o caractere "%" nas senhas de suas contas.

pawn Code:
forward SendClientMessageEx(playerid, color, const message[]);
public SendClientMessageEx(playerid, color, const message[]) {
    new messagef[256];
    format(messagef, (256), "%s", message);
    if(strlen(message) > 0)
    {
        format(messagef, (256), "%s", \
        str_replace("%", "%%", messagef));
    }
    else format(messagef, (256), "%s", " ");
    return SendClientMessage(playerid, color, messagef);
}

#if defined _ALS_SendClientMessage
    #undef SendClientMessage
#else
    #define _ALS_SendClientMessage
#endif
#define SendClientMessage SendClientMessageEx
__________________
HeavyHost
SA-MP | MTA | VPS Windows | VPS Linux |Hospedagem de Sites | Minecraft | Streaming | VPS Anti-DDoS
360Gbps DDoS Protection in CA & Layer 7 Mitigation
40Gbps DDoS Protection in USA & Layer 7 Mitigation
connork is offline   Reply With Quote
Old 24/10/2017, 11:38 PM   #7
CaioTJF
Gangsta
 
CaioTJF's Avatar
 
Join Date: Sep 2012
Location: Rio de Janeiro
Posts: 541
Reputation: 148
Default Re: Desbugar o derrubamento do servidor pelo comando [%s]

Eu transformei % em # nas saídas dos dialogs e não pensei nesse detalhe das senhas.

rep++ connork
__________________

IP: 35.196.228.74:2009 / Website: www.gtatorcidas.net



CaioTJF is offline   Reply With Quote
Old 25/10/2017, 12:08 PM   #8
SrDivuOfficial
Big Clucker
 
SrDivuOfficial's Avatar
 
Join Date: Jul 2017
Location: Itabirinha de Mantena, Minas Gerais, Brazil
Posts: 55
Reputation: 5
Default Re: Desbugar o derrubamento do servidor pelo comando [%s]

Eu Não estou contra mas eu acho q você usou o do bruno_Street como base... ou não usou... apesar de ele te postado primeiro...
SrDivuOfficial 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
[Ajuda] Falar no servidor pelo samp-server.exe MustangGT Português/Portuguese 3 11/01/2013 06:49 PM
[AJUDA] Comando /desbugar r-Valdez Português/Portuguese 3 15/12/2011 09:17 PM
[AJUDA] para abrir servidor pelo linux Gu_from Português/Portuguese 3 14/10/2011 04:17 AM


All times are GMT. The time now is 05:14 PM.


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