• 04 Juin 2026, 13:01:18


Auteur Sujet: Erreur de script pour empecher les message contenant un IP  (Lu 1816 fois)

0 Membres et 1 Invité sur ce sujet

akcayir

  • Invité
Erreur de script pour empecher les message contenant un IP
« le: 11 Février 2009, 16:55:31 »
Bonjours,
Je veut empêcher dans mon serveur que les joueurs qui rentre ne puisse pas donner d'adresse IP dans mon serveur.
Je suis aller sur le forum samp il mon donner ce code:

public OnPlayerText(playerid, text[])
{
    if (StringContainsIP(text)
        return 1;
}
    return 0;
}

stock StringContainsIP(string[])
{
    new dotcount= 0;

    for (new i = 0; i < sizeof(string); i++)
        if (string[i] == '.')
            dotcount++;

    if (dotcount >= 3 && strfind(string,":", true) > -1) // 3 dots and a :
        return 1;
}
    return 0;
}

Mais j'ai des erreur, j'ai poster un message mail il ne me réponde pas :'(


(1339) : error 001: expected token: ")", but found "return"
(1340) : warning 209: function "OnPlayerText" should return a value
(1341) : error 010: invalid function or declaration
(1348) : warning 224: indeterminate array size in "sizeof" expression (symbol "")
(1354) : warning 209: function "StringContainsIP" should return a value
(1355) : error 010: invalid function or declaration
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


3 Errors.
:P

Hors ligne NatiVe™

  • *
  • Messages: 7977
    • Voir le profil
Re : Erreur de script pour empecher les message contenant un IP
« Réponse #1 le: 11 Février 2009, 17:04:49 »
public OnPlayerText(playerid, text[])
{
    if (StringContainsIP(text)
    return 1;
    }
return 0;
}

>>>

public OnPlayerText(playerid, text[])
{
    if (StringContainsIP(text[]))
        return 1;
}
    return 0;
}

Pour le reste je ne comprend pas le code.

NV. 8)



Tu vois avant? Bah j'étais là encore avant!

Hors ligne R@f

  • *
  • GTAOnline Addict
  • Messages: 4655
    • Voir le profil
Re : Erreur de script pour empecher les message contenant un IP
« Réponse #2 le: 11 Février 2009, 17:20:09 »
Accolade en trop dans OnPlayerText
public OnPlayerText(playerid, text[])
{
    if (StringContainsIP(text[]))
        return 1;

    return 0;
}

Tu peux aussi le faire comme ça :
public OnPlayerText(playerid, text[])
{
    if (StringContainsIP(text[]))
    {
        return 1;
    }
    return 0;
}

Dans le StringContainsIP il y a aussi une accolade en trop, pareil que en haut ;)

++
R@f

akcayir

  • Invité
Re : Erreur de script pour empecher les message contenant un IP
« Réponse #3 le: 11 Février 2009, 19:23:33 »
Bah voila j'ai fait ce que j'ai des ptit truk dans le GM, mais le probleme c'est qu'il ne trouve pas d'erreur(ça c'est bon) Mais quand je rentre pour essayer si sa marche, quand j'envoie un message sa me le double et en plus sa masque pas les IP mdr . Trop compliquer c'est truk

public OnPlayerText(playerid,text[])
{
    new textstring[128];
    format(textstring, sizeof(textstring), "[%i] %s", playerid, text);
    SendPlayerMessageToAll(playerid, textstring);
    if (StringContainsIP(text))
    return 1;

    return 0;
}

stock StringContainsIP(string[])
{
    new dotcount= 0;

    for (new i = 0; i < strlen(string); i++)
        if (string[i] == '.')
            dotcount++;

    if (dotcount >= 3 && strfind(string,":", true) > -1) // 3 dots and a :
        return 1;

    return 0;
}

Je sais vous allez me dire il n'y à pas d'acollade entre les return 1; et 0; mais le probleme c'est que si je mais des acolade sa me mais 1 erreurs
« Modifié: 11 Février 2009, 19:25:42 par akcayir »

Hors ligne R@f

  • *
  • GTAOnline Addict
  • Messages: 4655
    • Voir le profil
Re : Erreur de script pour empecher les message contenant un IP
« Réponse #4 le: 11 Février 2009, 19:25:55 »
A la place de mettre return1; mets return 0; dans le if(StringContainsIP(text)) ;)

++
R@f

akcayir

  • Invité
Re : Re : Erreur de script pour empecher les message contenant un IP
« Réponse #5 le: 11 Février 2009, 19:43:27 »
Bah C'est bon sa ne double pas les messages. Mais les ip toujour visible :'(

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Erreur de script pour empecher les message contenant un IP
« Réponse #6 le: 12 Février 2009, 14:37:23 »
Pour que les IP soient masquées, il faut qu'elles contiennent au moins 3 points et un deux-points ( : ).
C'est ce qui est écrit dans la fonction StringContainsIP :
// 3 dots and a :
Je pense que ne tester que les 3 points suffit :
stock StringContainsIP(string[])
{
    new dotcount= 0;

    for (new i = 0; i < strlen(string); i++)
        if (string[i] == '.')
            dotcount++;

    if (dotcount >= 3) // 3 dots
        return 1;

    return 0;
}
Par contre, cette fonction est très minimaliste, elle contrôle que la phrase que tu saisis contient au moins 3 points et estime que dans ce cas elle contient une IP.
Donc si un joueur tape "J'attend ..." sa phrase ne s'affichera pas.

Pour contrôler qu'une chaîne contient une IP, il faudrait vérifier qu'entre les points il y a des chiffres.

++
Syg



Courtesy of GtaManiac

akcayir

  • Invité
Re : Re : Erreur de script pour empecher les message contenant un IP
« Réponse #7 le: 13 Février 2009, 12:40:39 »
Pour que les IP soient masquées, il faut qu'elles contiennent au moins 3 points et un deux-points ( : ).
C'est ce qui est écrit dans la fonction StringContainsIP :
// 3 dots and a :
Je pense que ne tester que les 3 points suffit :
stock StringContainsIP(string[])
{
    new dotcount= 0;

    for (new i = 0; i < strlen(string); i++)
        if (string[i] == '.')
            dotcount++;

    if (dotcount >= 3) // 3 dots
        return 1;

    return 0;
}
Par contre, cette fonction est très minimaliste, elle contrôle que la phrase que tu saisis contient au moins 3 points et estime que dans ce cas elle contient une IP.
Donc si un joueur tape "J'attend ..." sa phrase ne s'affichera pas.

Pour contrôler qu'une chaîne contient une IP, il faudrait vérifier qu'entre les points il y a des chiffres.

++
Syg





Et comment il faut faire pour qu'il controle les chifres ?

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Erreur de script pour empecher les message contenant un IP
« Réponse #8 le: 13 Février 2009, 14:13:55 »
Voici la fonction que j'ai faîte vite fait :
stock StringContainsIP (string[])
{
new i;
new DotCount = 0;

/* Parcours total de la chaîne */
for (i=0 ; i<strlen (string) ; i++)
{
/* Si on tombe sur un chiffre */
if (string[i]>='0' && string[i]<='9')
{
DotCount = 0;
do
{
if (string[i]=='.')
{
    DotCount++;
}
i++;
}
while ((string[i]>='0' && string[i]<='9') || string[i]=='.');
}
}

/* Si on a trouvé 3 points c'est que la chaîne contient une IP */
if (DotCount >= 3)
{
return 1;
}
else
{
return 0;
}
}

Il est certainement possible de l'améliorer.

Cette fonction teste si elle trouve un groupe de caractères ne contenant que des chiffres et au moins 3 points. Si elle trouve un tel groupe, elle considère que c'est une IP.
Si le groupe de caractères contient un espace, une lettre ou un signe de ponctuation différent du point, elle ne le considèrera pas comme une IP.

Exemple de chaîne que la fonction considère comme contenant une IP :
Mon serveur : 123.321.12.34
Mon serveur : 123...321
Mon serveur : 123...

Exemple de chaîne que la fonction considère comme NE contenant PAS une IP :
Mon serveur : 123.321 .12.34      (A cause de l'espace après 321)
Mon serveur : 123.321.12            (Seulement 2 points)
Mon serveur : i23.32i.i2.34           (A cause des 'i')

Il est important de comprendre que les joueurs qui veulent faire chier trouveront toujours un contournement à ce genre de fonctions.
Et peut importe la complexité du contrôle, il y aura toujours une faille et elle sera souvent très vite découverte.
La meilleure parade reste le cerveau humain (celui des admins et modérateurs).

++
Syg
Courtesy of GtaManiac