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
-
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
-
Salut,
Essaie de faire des recherche en mettant: AntiSpam
Tu trouvera quelque chose je pense,
perso j'ai pas test
++ Franky
-
jvais esseyer :-X
++
nikko
-
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
-
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
-
T'es explication sont inutile Alexandre, on comprend rien du tout !
NV.
-
Ah oui en effet. ;D
En haut de ton script tu met:
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):
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:
SetTimerEx("CheckFlood", 1000, false, "i", playerid); // Pour lancer le timer
En bas de ton script:
public CheckFlood(playerid)
{
blabla[playerid]--;
}
En espérant que ce soit mieux. :happy
++
Alexandre
-
Oui beaucoup mieux, mais je met quoi a la place de blabla ??
++
nikko
-
Ce que tu veut, c'est le nom de la variable, blabla c'est bien :)
NV.
-
lool ok merci
++
nikko
-
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..
-
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
-
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--; ???
-
Oui
++
nikko
-
Met flood[playerid] à 0 dans ta fonction Unmute :)
++
Alexandre
-
Oui
++
nikko
Ta essayer mon code la
-
Rivoal, c'est quoi la différence ? :happy
-
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.
-
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
-
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
-
Perso je ne comprend pas !
NV.
-
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
-
Tu fait une condition. :happy
S'il vaut true on le diminue, sinon, non. :)
++
Alexandre
-
et en pawn ca donne quoi ?
++
nikko
-
if() :)
-
MErci, ca je sais mais je met quoi comme condition ??
++
nikko
-
S'il vaut true on le diminue, sinon, non. :)
if(flood[playerid]) flood[playerid]--; :)
++
Alexandre
-
Avec ca, ca veut dire que ca valeur de flood ne descendra psa en dessous de 0 ?? car cest ca le bug..
++
nikko
-
Pourquoi tu mets tout simplement pas à zéro ta variable?
-
Cest bon ca marche :)
Merci a tous.
++
nikko