Raised This Month: $51 Target: $400
 12% 

Pas de commande ici !


  
 
 
Thread Tools Display Modes
Author Message
Aooka
Veteran Member
Join Date: Aug 2011
Location: Villeurbanne
Old 07-20-2012 , 07:49   Pas de commande ici !
#1

Voilà j'ai fais un petit code rapidement qui enlève toute commande disponible sur le serveur :
Code:
#include < amxmodx > new g_szMsg[ 192 ]; public plugin_init( ) {     register_plugin( "Block /cmd" , "1.0" , "Aooka" );         register_clcmd( "say" , "HookSay" );     register_clcmd( "say_team" , "HookSay" ); } public HookSay( const id ) {     read_args( g_szMsg , charsmax( g_szMsg ) );     remove_quotes( g_szMsg );         if( g_szMsg[ 0 ] == '/'     || g_szMsg[ 0 ] == '.'     || g_szMsg[ 0 ] == '@'     || g_szMsg[ 0 ] == ' ' )     {         return 2;     }     return 0; }

Je voulais juste savoir comment le trouviez-vous. Des choses à modifier à refaire ... etc.

A +
__________________
Pawn ? Useless
Aooka is offline
Sherazaa
Member
Join Date: Jun 2012
Old 07-20-2012 , 08:03   Re: Pas de commande ici !
#2

A mon avis ce code est bon.
Mais pourquoi tu fais cela :
Code:
if( g_szMsg[ 0 ] == '/'     || g_szMsg[ 0 ] == '.'     || g_szMsg[ 0 ] == '@'     || g_szMsg[ 0 ] == ' ' )

et pourquoi tu met ' ' et pas " " ?
__________________
[B]Bhop & Kz Player
Sherazaa is offline
Aooka
Veteran Member
Join Date: Aug 2011
Location: Villeurbanne
Old 07-20-2012 , 08:19   Re: Pas de commande ici !
#3

Quote:
A mon avis ce code est bon.
Mais pourquoi tu fais cela :
Code:
if( g_szMsg[ 0 ] == '/'
|| g_szMsg[ 0 ] == '.'
|| g_szMsg[ 0 ] == '@'
|| g_szMsg[ 0 ] == ' ' )
Bah je fais sa pour que sa soit plus lisible. Je m'y retrouve mieux. C'est un méthode pour coder. Si sa ne t'aide pas ne le fait pas. Si tu trouve sa mieux je te conseils de le faire

Quote:
et pourquoi tu met ' ' et pas " " ?
Lorsque tu n'a qu'un seul caractère ( a , b , c , ; , i , ! , / , etc. ) tu peux mettre ce type de guillemet. Sa reste facultatif bien sûr. Tu peux aussi bien faire :

Code:
g_szMsg[ 0 ] == '/'
et sa :
Code:
g_szMsg[ 0 ] == "/"

Par contre impossible de faire ceci :
Code:
g_szMsg[ 0 ] == 'Salut les filles'
Dans ce cas là. Obligation de faire ceci :
Code:
g_szMsg[ 0 ] == "Salut les filles"

Ps: D'ailleurs là je fais comment si je fias une chaîne de caractère ? Je ne peux pas laisser g_szMsg[ 0 ]... Que mettre ? [ 15 ] ?

Voilà j'espère que tu aura compris :p
__________________
Pawn ? Useless
Aooka is offline
Arkshine
AMX Mod X Plugin Approver
Join Date: Oct 2005
Old 07-20-2012 , 09:22   Re: Pas de commande ici !
#4

Pas sûr de comprendre l'intérêt de faire ça, mais tu peux améliorer les choses comme ceci :

Code:
public HookSay( const id ) {     static message[ 3 ];         if( read_args( message , charsmax( message ) ) )     {         new c = message[ message[ 0 ] == '"' ];         static const charactersToCheck[] = { '/', '.', '@' };                 for( new i = 0; i < sizeof charactersToCheck; i++ )         {             if( charactersToCheck[ i ] == c )             {                 return PLUGIN_HANDLED;             }         }     }     return PLUGIN_CONTINUE; }


- Même si ça ne change rien, y'a pas vraiment d'intérêt à ce que g_szMsg soit global à tout le plugin.
- Mettre la taille de g_szMsg à 192 n'est pas très logique si tu veux vérifier que les premiers caractères.
- Pas besoin donc remote_quotes, une native en moins, c'est toujours ça de pris.
- La taille de 3 pour g_szMsg est suffisant, car le message peut commencer avec un " et sachant que tu veux vérifier que le premier caractère, la taille est donc de 2 max + 1 pour le EOS.
- Réindexer un array est à éviter quand tu peux. Dans ce cas là, tu pouvais soit faire un switch soit faire ce que j'ai fais, un tableau constant avec les caractères à vérifier et boucler. Et pour éviter de réindexer, je sauvegarde le premier caractère dans 'c'.
__________________

Last edited by Arkshine; 07-20-2012 at 09:26.
Arkshine is offline
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 07-20-2012 , 12:12   Re: Pas de commande ici !
#5

Le mec on lui dit d'utiliser les return standarts il se borne comme un gros con à utiliser des nombres.
Et en + il les utilise mal.

Jverrais bien ça pour parfaire le code d'arkshine :

PHP Code:
public HookSay( const id )
{
    static 
message];
    
    if( 
read_argsmessage charsmaxmessage ) ) )
    {
        if( !
isalnummessagemessage] == '"' ] ) )
        {
            return 
PLUGIN_HANDLED;
        }
    }

    return 
PLUGIN_CONTINUE;

__________________
- tired and retired -

- my plugins -

Last edited by ConnorMcLeod; 07-20-2012 at 12:25.
ConnorMcLeod is offline
Aooka
Veteran Member
Join Date: Aug 2011
Location: Villeurbanne
Old 07-20-2012 , 12:42   Re: Pas de commande ici !
#6

Juste pour savoir Arkshine je ne comprends pas bien cette ligne :
Code:
new c = message[ message[ 0 ] == '"' ]; // pourquoi tu met comme premier caractère " ?

Après je comrpends se que tu veux faire mais cette ligne ...

Merci à vous deux.

Ps Connor: Hum pour le PLUGIN_CONTINUE il est égale à 0 donc je l'ai bien utiliser et le return 2 = HANDLED_MAIN et j'aurais mis sa aussi donc même avec ces trucs je me serais trompé.
__________________
Pawn ? Useless

Last edited by Aooka; 07-20-2012 at 12:43.
Aooka is offline
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 07-20-2012 , 12:49   Re: Pas de commande ici !
#7

C'est juste une astuce pour ne pas utiliser remove_quotes

Si le 1er caractère est " on va vérifier le 2ème, sinon on vérifie le 1er.

On aurait pu mettre :

message[ message[0] == '"' ? 1 : 0 ]

Mais la valeur boléenne de message[0] == '"' a le même effet est est plus efficiente.
__________________
- tired and retired -

- my plugins -
ConnorMcLeod is offline
Electroo
Senior Member
Join Date: Jun 2012
Old 07-24-2012 , 18:49   Re: Pas de commande ici !
#8

Ce plugin bloque tous les /cmd ?
Et pour bloquer juste une /cmd (/rs par exemple) , je change ça ? :
Quote:
static const charactersToCheck[] = { '/', '.', '@' };
à celui la ?

Quote:
static const charactersToCheck[] = {"/rs"};
Electroo is offline
Arkshine
AMX Mod X Plugin Approver
Join Date: Oct 2005
Old 07-25-2012 , 02:18   Re: Pas de commande ici !
#9

Non. Ce n'était pas ce que tu voulais au départ... Pour vérifier par commande exacte, le code doit être revu. Par exemple faire un Trie.
__________________

Last edited by Arkshine; 07-25-2012 at 02:19.
Arkshine is offline
Electroo
Senior Member
Join Date: Jun 2012
Old 07-25-2012 , 13:06   Re: Pas de commande ici !
#10

Quote:
Non. Ce n'était pas ce que tu voulais au départ... Pour vérifier par commande exacte, le code doit être revu.
Ah ok !
Tu peux me donner le code pour bloquer juste une cmd ou plusieurs , mais pas tous ?
Merci
Electroo is offline
 



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

Forum Jump


All times are GMT -4. The time now is 19:18.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode