• 08 Juillet 2025, 22:38:27


Auteur Sujet: Kick /rcon login et /login  (Lu 1168 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne RenZoKen

  • *
  • Criminel
  • Messages: 38
    • Voir le profil
Kick /rcon login et /login
« le: 19 Mars 2010, 20:30:14 »
Bonjour,

J'ai créé un public permettant que si le joueur arrive sur le serveur et si il n'est pas loggé dans 30 secondes, il est kick.
Mais le problème est que le joueur arrive, il se logge normalement, ca ne le kick pas mais ca kick l'id 0 après 30 secondes.

Dans la commande /login
Code: (pawn) [Sélectionner]
KillTimer(Logincount);
Plus haut dans le public du Login Auto
Code: (pawn) [Sélectionner]
SendClientMessage(playerid,COLOR_LIGHTGREEN,"Ce compte existe déjà, loggez vous en tapant /login [motdepasse]");
SendClientMessage(playerid,COLOR_LIGHTGREEN,"Vous avez 30 secondes pour vous logger.");
cd=30;
  Logincount = SetTimer("Login",1000,1);
Ici le nouveau public
Code: (pawn) [Sélectionner]
forward Login();
public Login()
{
     if(cd == 0)
{
new string[256];
new playerid;
       new iname[MAX_PLAYER_NAME];
   GetPlayerName(playerid, iname, sizeof(iname));
format(string,sizeof(string),"*** %s a été kick ( Raison - Pas loggé dans les temps ).",iname);
SendClientMessageToAll(COLOR_BRIGHTRED,string);
Kick(playerid);
KillTimer(Logincount);
}
cd--;
}

Concernant le mauvais pass pour /rcon login, au lieu de kick le joueur qui tente de se connecter en Admin et rentre le mauvais mot de passe, ca kick tous les joueurs.
Code: (pawn) [Sélectionner]
public OnRconLoginAttempt(ip[], password[], success)
{
new playername[MAX_PLAYER_NAME];
  new playerid;
GetPlayerName(playerid, playername, sizeof(playername));
    if(!success)
    {
        for(new i=0; i<MAX_PLAYERS; i++)
        {
        SendClientMessage(i, COLOR_BRIGHTRED, "---- Vous n'avez pas le droit de faire ceci");
        SendClientMessage(i, COLOR_BRIGHTRED, "---- La prochaine fois vous êtes banni.");
        Kick(i);
        printf("//---BadAdmin---  %s a tenté de se connecter en /rcon login",playername, password);
        }
    }
    return 1;
}


En attendant votre aide.  ;D
« Modifié: 19 Mars 2010, 20:44:37 par RenZoKen »

Hors ligne BuBuNo

  • Radio Guingamp - Bien plus qu'une radio !
  • *
  • Grand Banditisme
  • La radio bien plus qu'une passion !
  • Messages: 840
    • Voir le profil
    • Radio Guingamp - Bien plus qu'une radio !
Re : Kick /rcon login et /login
« Réponse #1 le: 20 Mars 2010, 00:41:49 »
salut

forward Login(playerid);
public Login(playerid)
{
    if(cd == 0)
{
new string[256];
new playerid;
        new iname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, iname, sizeof(iname));
format(string,sizeof(string),"*** %s a été kick ( Raison - Pas loggé dans les temps ).",iname);
SendClientMessageToAll(COLOR_BRIGHTRED,string);
Kick(playerid);
KillTimer(Logincount);
}
cd--;
}

Sa devrai marcher ;)
ıllıllı вυвυησ ıllıllı


Hors ligne RenZoKen

  • *
  • Criminel
  • Messages: 38
    • Voir le profil
Re : Kick /rcon login et /login
« Réponse #2 le: 20 Mars 2010, 11:37:04 »
Déjà essayé,
Je pense que le problème vient du /login car le cd de 30 secondes continue de marcher même après que le joueur est fais /login.
Alors que pourtant j'ai mis KillTimer(Logincount); dans /login  ;D

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Kick /rcon login et /login
« Réponse #3 le: 21 Mars 2010, 22:26:49 »
L'erreur est classique.
Tu n'as qu'un seul ID de timer pour TOUS les joueurs alors qu'il faudrait un tableau pour que chaque joueur aie un ID de timer différent.

De plus, à la création de ton timer, il faut absolument lui passer en paramètre le playerid du joueur. Pour cela, il faut obligatoirement utiliser la fonction CreateTimerEx.
Avec CreateTimer, aucune valeur n'est donnée aux paramètres de la fonction du timer. Ainsi, le paramètre playerid de ta fonction Login (playerid) vaudra systématiquement 0 (et donc c'est forcément le joueur avec l'ID 0 qui sera kické dans tous les cas).

Voici deux exemple pour illustrer ce que j'ai écrit ci-dessus et, j'espère, te permettre de mieux comprendre.

Exemple 1 (qui montre pourquoi il faut utiliser un tableau pour les ID des timers) :
- Un premier joueur se connecte, un timer est démarré et son ID est stocké dans Logincount,
- Un deuxième joueur se connecte, un autre timer est démarré et son ID va écrasé la valeur du premier timer dans Logincount (le premier timer ne pourra donc plus être arrêté car son ID est perdu),
- Le premier joueur se logue (ce qui aura pour effet d'arrêter le timer du deuxième joueur mais pas celui du premier qui se fera kicker).

Exemple 2 (qui montre qu'il faut utiliser CreateTimerEx) :
- Un premier joueur se connecte (timer 1 démarré),
- Le joueur se logue (timer 1 arrêté),
- Un deuxième joueur se connecte (timer 2 démarré),
- Le deuxième joueur ne se logue pas,
- A l'échéance du timer 2, c'est le premier joueur qui sera kické (joueur avec l'ID 0).


Sinon pour ta callback OnRconLoginAttempt, il n'est pas possible de faire ce que tu veux directement.
Cette callback ne donne pas l'id du joueur qui essaie de se loguer en RCON.
Une solution consisterait à faire une boucle qui recherche l'ID du joueur en fonction de son IP mais plusieurs joueurs peuvent avoir la même IP et il serait alors impossible de savoir lequel des joueur doit être kické (reste la solution de les kicker tous).
Exemple :
public OnRconLoginAttempt(ip[], password[], success)
{
new playername[MAX_PLAYER_NAME];
new playerIP[21];
if(!success)
{
for(new i=0; i<MAX_PLAYERS; i++)
{
/* On récupère l'IP du joueur */
GetPlayerIp (i, playerIP, 20);

/* Si l'IP est la même que celle du joueur qui a fait /rcon login */
if (strcmp (playerIP, ip) ==0)
{
/* On kicke le joueur */
Kick (i);
GetPlayerName (i, playername, sizeof(playername));
printf ("//---BadAdmin---  %s (%d) kicke car IP (%s) identique a celle du joueur qui a fait /rcon login",playername, i, ip);
printf ("Mot de passe utilise : <%s>", password);
}
}
}
return 1;
}

NB : Ce bout de script n'a pas été tester (car fait sur le forum). De plus, il serait bien de mettre un message aux joueurs kickés pour leur indiquer la raison du kick.

++
Syg
Courtesy of GtaManiac

Hors ligne RenZoKen

  • *
  • Criminel
  • Messages: 38
    • Voir le profil
Re : Kick /rcon login et /login
« Réponse #4 le: 22 Mars 2010, 17:57:41 »
Quand tu parles de CreateTimerEx, tu parles de SetTimerEx ?

Edit : C'est bon, j'ai réussi. Je te remercie énormément  :-[
« Modifié: 22 Mars 2010, 18:53:05 par RenZoKen »

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Kick /rcon login et /login
« Réponse #5 le: 22 Mars 2010, 22:33:31 »
Oui, je ne sais pas pourquoi j'ai mis CreateTimer et CreateTimerEx, ce ne sont même pas des fonctions de Win32 .... je vieillis ....
Mais je vois que tu as fait la correction donc ce n'est pas trop grave.

++
Syg
Courtesy of GtaManiac