GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Nikko™ le 25 Mai 2008, 21:06:58

Titre: Anti flood, comment le créer ?
Posté par: Nikko™ le 25 Mai 2008, 21:06:58
Bonsoir/jour tout le monde  :)

Voila, jai un serveur, et souvent confronté au flooders.
Jai cherché sur forum samp mais je ne trouve que des truc anti bots.... :dry
Donc j'aimerai savoir comment faire pour en créer un  :)
Merci pour votre aide

++
nikko
Titre: Re : Anti flood, comment le créer ?
Posté par: Franky™ le 26 Mai 2008, 15:30:38
Salut,

Essaie de faire des recherche en mettant:  AntiSpam

Tu trouvera quelque chose je pense,
perso j'ai pas test

++ Franky
Titre: Re : Anti flood, comment le créer ?
Posté par: Nikko™ le 26 Mai 2008, 16:36:28
jvais esseyer  :-X

++
nikko
Titre: Re : Anti flood, comment le créer ?
Posté par: Bayshore le 26 Mai 2008, 19:18:31
Salut,

tu crée un tableau pour chaque player, blabla[MAX_PLAYERS].

Dans OnPlayerConnect tu lance un timer pour que si blabla[playerid] est supérieur à 0 il diminue toute les X secondes.

Dans OnPlayerMsg tu blabla[playerid]++ :)
Toujours dans OnPlayerMsg tu vérifie si blabla[playerid] est égal à tant, si c'est le cas tu kick. :)

++
Alexandre
Titre: Re : Anti flood, comment le créer ?
Posté par: Nikko™ le 26 Mai 2008, 19:55:44
Bah pour moi tout ca cest du BLABLA ....  :happy
Tu pourrai m'expliquer en me donnant quelques truc car je comprend rien et je usis pas encore super scripteur ... ^^
merci

++
nikko
Titre: Re : Anti flood, comment le créer ?
Posté par: NatiVe™ le 26 Mai 2008, 20:09:24
T'es explication sont inutile Alexandre, on comprend rien du tout !

NV.

Titre: Re : Anti flood, comment le créer ?
Posté par: Bayshore le 26 Mai 2008, 20:25:44
Ah oui en effet. ;D

En haut de ton script tu met:
Code: (pawn) [Sélectionner]
new blabla[MAX_PLAYERS]; // Variable pour voir le taut de parlote de chacun
forward CheckFlood(playerid); // Pour le timer

Dans OnPlayerText (http://wiki.sa-mp.com/wiki/OnPlayerText):
Code: (pawn) [Sélectionner]
blabla[playerid]++; // Quand le joueur parle on augmente son compteur
if(blabla[playerid] >= 5) Kick(playerid); // Quand le compteur du joueur atteint 5, on le kick

Dans OnPlayerConnect:
Code: (pawn) [Sélectionner]
SetTimerEx("CheckFlood", 1000, false, "i", playerid); // Pour lancer le timer
En bas de ton script:
Code: (pawn) [Sélectionner]
public CheckFlood(playerid)
{
blabla[playerid]--;
}

En espérant que ce soit mieux. :happy

++
Alexandre
Titre: Re : Anti flood, comment le créer ?
Posté par: Nikko™ le 26 Mai 2008, 20:28:40
Oui beaucoup mieux, mais je met quoi a la place de blabla ??

++
nikko
Titre: Re : Anti flood, comment le créer ?
Posté par: NatiVe™ le 26 Mai 2008, 20:48:56
Ce que tu veut, c'est le nom de la variable, blabla c'est bien :)

NV.

Titre: Re : Anti flood, comment le créer ?
Posté par: Nikko™ le 26 Mai 2008, 21:04:54
lool ok merci

++
nikko
Titre: Re : Anti flood, comment le créer ?
Posté par: spykerc8 le 26 Mai 2008, 21:07:09
J'avais très compris les premières instructions pour ma part, suffit juste de réfléchir un peu et de connaitre les fonctions et outils disponibles..
Titre: Re : Anti flood, comment le créer ?
Posté par: Nikko™ le 26 Mai 2008, 21:34:17
Re,

Voila ce que jai fait:

public OnPlayerText(playerid, text[])
{
   new Playerid;
   new str[256];
   new pname[256];

   flood[playerid]++;
   if(flood[playerid] >= 4)
   {
   Mute[playerid] = 1;
   SetTimerEx ("Unmute", 30000, 0, "i", playerid);
   SendClientMessage(playerid, admin2,"Tu a été muté(e) pendant 30 sec pour flood");

   GetPlayerName(Playerid, pname, sizeof (str));
   format(str, sizeof (str), "*** %s a été muté(e) pour flood ***", pname);
   SendClientMessageToAll(gris, str);
   }
    if (Mute[playerid] == 1)
     {
     SendClientMessage(playerid,rouge,"Tu est muté(e) !");
     return 0;
     }
   return 1;
}

public Unmute (playerid)
{

      SendClientMessage(playerid, admin2, "*** Tu a été unmuté(e) ***");
      Mute[playerid] = 0;
}

Le probleme, cest que quand on se fait muter, et qu'on redit une chose juste apré, ca remarque "%s a été muté .."
La je bloque... mais jai bien avancé :)
merci

++
nikko
Titre: Re : Re : Anti flood, comment le créer ?
Posté par: rivoal29 le 26 Mai 2008, 21:54:10
public OnPlayerText(playerid, text[])
{
new Playerid;
new str[256];
new pname[256];

flood[playerid]++;
if(flood[playerid] >= 4)
{
        if (Mute[playerid] == 1)
        {
Mute[playerid] = 1;
SetTimerEx ("Unmute", 30000, 0, "i", playerid);
SendClientMessage(playerid, admin2,"Tu a été muté(e) pendant 30 sec pour flood");

GetPlayerName(Playerid, pname, sizeof (str));
format(str, sizeof (str), "*** %s a été muté(e) pour flood ***", pname);
SendClientMessageToAll(gris, str);
}
        }
  if (Mute[playerid] == 1)
  {
  SendClientMessage(playerid,rouge,"Tu est muté(e) !");
  return 0;
  }
return 1;
}

public Unmute (playerid)
{

SendClientMessage(playerid, admin2, "*** Tu a été unmuté(e) ***");
Mute[playerid] = 0;
}
Essaye


Tu as bien mi un timer qui fait flood--; ???
Titre: Re : Anti flood, comment le créer ?
Posté par: Nikko™ le 26 Mai 2008, 22:16:12
Oui

++
nikko
Titre: Re : Anti flood, comment le créer ?
Posté par: Bayshore le 26 Mai 2008, 22:24:56
Met flood[playerid] à 0 dans ta fonction Unmute :)

++
Alexandre
Titre: Re : Re : Anti flood, comment le créer ?
Posté par: rivoal29 le 26 Mai 2008, 22:37:52
Oui

++
nikko

Ta essayer mon code la
Titre: Re : Anti flood, comment le créer ?
Posté par: Bayshore le 26 Mai 2008, 22:43:03
Rivoal, c'est quoi la différence ? :happy
Titre: Re : Re : Anti flood, comment le créer ?
Posté par: Nikko™ le 27 Mai 2008, 17:36:06
Met flood[playerid] à 0 dans ta fonction Unmute :)


cest fait ... je vais esseyer le truc de rivoal ...

++
nikko

EDIT: jai trouvé !!

jai mi:

if(mute[playerid] == 1)
blablabla
}
comment faire pour le muter qu'une seule fois ??
car quand il reparle, il est tjr "mute == 1" donc ca relance le procéssus.
Titre: Re : Anti flood, comment le créer ?
Posté par: Bayshore le 27 Mai 2008, 18:37:33
Où l'as tu mis ? :)

PS: Le == 1 est facultatif dans la condition, si tu l'enlève le compilo comprendra que tu veut que ça valle true :happy

++
Alexandre
Titre: Re : Anti flood, comment le créer ?
Posté par: Nikko™ le 27 Mai 2008, 19:05:15
Nn laissez tomber pour le mute, le mec se fera kick, ca ira plus vite.

Mais une question encore, (attention, niveau requis pour répondre a la question: bac+2 ^^^^)
si on met un timer quand il se connect, et que toutes les 3s(cest moi qui lai mi a 3s) on lui fait flood[playerid]--;
Cest a dire qu'au bout de 9sec il est a -3 et a 18s il est a -6, je pense que vous suivez. (et jai mi mon max flood a 4)
Mais si le mec flood arrive et flood apré 18sec, ca ve dire qu'il doit remonter de -6 jusqua +4 .... (il flood 10fois).
Jesper que vous comprenez. XD
Comment faire pour que si la persone est a flood = 0, qu'il désende pas en dessous ?

++
nikko
Titre: Re : Anti flood, comment le créer ?
Posté par: NatiVe™ le 27 Mai 2008, 19:11:58
Perso je ne comprend pas !

NV.

Titre: Re : Anti flood, comment le créer ?
Posté par: Nikko™ le 27 Mai 2008, 19:17:20
Toi je vais texpliquer par msn, javou cest compliquer a comprendre...

Je vous explique plus clairement (enfin jesper)
Prenon un exemple, un assenceur (quelle comparaison au script)
On vous dit, au départ, il est au niveau 0 et toutes les 3secondes, il descend de un niveux.
Si on a écoulé 9secondes, on est bien au -3. (je pense que je peu pas etre plus clair ^^)

Maintenant, si un joueur est conecté au serveur depuis 9seconde, avec le timer, on arrive a flood[playerid] = -3
Donc si je met la limite du flood a 4 cest a dire, que pour que le joueur ateigne 4, il faut qui flood 7 fois.
Donc est ce possible de bloquer le flood = 0

Je pense que syg arrivera a comprendre si il vien  :happy
Sinon ressortaient vos cahiers de math de 3e.
Bonne chance.

++
nikko
Titre: Re : Anti flood, comment le créer ?
Posté par: Bayshore le 27 Mai 2008, 21:49:33
Tu fait une condition. :happy

S'il vaut true on le diminue, sinon, non. :)

++
Alexandre
Titre: Re : Anti flood, comment le créer ?
Posté par: Nikko™ le 27 Mai 2008, 21:50:05
et en pawn ca donne quoi ?

++
nikko
Titre: Re : Anti flood, comment le créer ?
Posté par: Bayshore le 27 Mai 2008, 21:51:59
if() :)
Titre: Re : Anti flood, comment le créer ?
Posté par: Nikko™ le 27 Mai 2008, 21:52:53
MErci, ca je sais mais je met quoi comme condition ??

++
nikko
Titre: Re : Re : Anti flood, comment le créer ?
Posté par: Bayshore le 27 Mai 2008, 22:27:05
S'il vaut true on le diminue, sinon, non. :)

if(flood[playerid]) flood[playerid]--; :)

++
Alexandre
Titre: Re : Anti flood, comment le créer ?
Posté par: Nikko™ le 28 Mai 2008, 12:29:57
Avec ca, ca veut dire que ca valeur de flood ne descendra psa en dessous de 0 ?? car cest ca le bug..

++
nikko
Titre: Re : Anti flood, comment le créer ?
Posté par: spykerc8 le 28 Mai 2008, 16:37:35
Pourquoi tu mets tout simplement pas à zéro ta variable?
Titre: Re : Anti flood, comment le créer ?
Posté par: Nikko™ le 28 Mai 2008, 17:04:34
Cest bon ca marche :)
Merci a tous.

++
nikko