• 10 Juillet 2025, 18:27:10


Auteur Sujet: LePtitClown : différentes questions  (Lu 24535 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : LePtitClown : différentes questions
« Réponse #150 le: 19 Janvier 2010, 21:43:47 »
Salut,

sans doute que la meilleure méthode consiste à sauvegarder tous les IP ayant un compte sur le serveur dans un fichier,

ainsi il ne te resterais qu'à ouvrir ce fichier et vérifier les IP une à une.

par contre, fais attention, ce genre de système peut nuire au serveur en empêchant de nouveaux joueurs de ce créer un compte (disons que moi et mon frère sommes sur le même pc....), puisque tu semble vouloir utiliser les deux premiers nombre de l'IP seulement, tu risque également de bloquer beaucoup de gens...

sinon en ce qui concerne la méthode, pour lire le fichier, il serait plus judicieux d'utiliser directement les fonctions de gestions de fichier de sa-mp:

if(fexist(FICHIER))
{
    new File:file;
    file = fopen(FICHIER, io_read);
    if(file)
    {
        new tmp[32];//un IP par ligne, pas besoin d'un string long (serait mieux de mettre 128 au cas où...)
        while(fread(file, tmp, 32))
        {
            if(strcmp(IP, tmp, false, 16))
            {
                fclose(file);
                //l'ip est déjà enregistré
            }
        }
        fclose(file);
    }
}

pour faire la liste, il te suffirait de ce format : "%s\r\n" et simplement un petit fopen (mode io_append), un fwrite et un fclose
et de récupérer l'IP du joueur au moment de son inscription (GetPlayerIP)

++Sim++





Hors ligne LePtitClown

  • [M2R]LePtitClown
  • *
  • Bandit
  • Messages: 342
    • Voir le profil
Re : LePtitClown : différentes questions
« Réponse #151 le: 19 Janvier 2010, 21:54:03 »
Re:

Slt

Tu m'as convaincu, on va éviter de faire comme ça
Pourrais tu m'expliquer comment faire pour que lorsque un joueur s'enregistre ( donc /register mdp en général ) son pseudo suivi de son ip soit sauvegarder dans un fichier texte dans scriptfile. Comme ça on peut voir qui est nouveau et on peut vérifier les comptes facilement. D'après une grande aide de rambo pour sauvegarder j en arrive là:
#define FileSaveLPCIP "IP.txt"//LPCIP //tout en haut du GM

public OnGameModeInit()
{
//LPCIP
SetGameModeText("Blank Script");
new File:SaveD;
SaveD = fopen(FileSaveLPCIP, io_readwrite);
if(!fexist(FileSaveLPCIP))
{
fopen(FileSaveLPCIP, io_readwrite);
print("fichier"#FileSaveLPCIP"cree");
fclose(SaveD);
}
else
{
   print("fichier"#FileSaveLPCIP"charger");
   fclose(SaveD);
}
                 return 1;
}

//puis à la suite de ma commande register:

new File:Ficher = fopen(FileSaveLPCIP, io_append);
                 new ip[30];
                 new name[MAX_PLAYER_NAME];
                 new VTR[128];
                 GetPlayerIp(playerid,ip,128);
GetPlayerName(playerid,name,sizeof(name));
printf ("IP du joueur %s: %d",name,ip);//??????
fwrite(Ficher, VTR);
fclose(Ficher);
    return true;

Comme vous pouvez vous en douter, si je suis là c'est que ça ne marche pas :D. Donc j'aimerai avoir de l'aide avec par exemple un exemple car là je sèche :P

A+ ;)
« Modifié: 20 Janvier 2010, 20:25:46 par LePtitClown »

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : LePtitClown : différentes questions
« Réponse #152 le: 21 Janvier 2010, 01:15:02 »
Salut,

dans ton OnGameModeInit, tu devrais modifier l'ordre de tes actions:

 1 - vérifie si le fichier existe
 2 - s'il n'existe pas, on en crée un nouveau (+ le fermer (io_write ferait pareil))

Ensuite, il pourrait être plus pratique de placer le reste du code dans une fonction du genre:

IsIPAndPseudoSaved(pseudo[], IP[])
{
    new tmp[64], tmpp[64], len;
    format(tmp, 64, "%s %s", pseudo, IP);
    len = strlen(tmp);//permet de ne pas tenir compte des \r\n à la fin de chaque ligne
    new File:file = fopen(fichier, io_read);
    while(fread(file, tmpp, 64))
    {
        if(!strcmp(tmp, tmpp, true, len))
        {
            //trouvé
            fclose(file);
            return 1;
        }
    }
    fclose(file);
    return 0;
}

dans le cas de cette fonction, ton fichier devrait contenir les données structurées comme ceci:

Citer
NOM1 IP1
NOM2 IP2
NOM3 IP3
NOM4 IP4

essaie de t'en inspiré pour le faire à ta façon si tu le veut et de faire le code qui générerais le fichier correspondant
bonne chance

++Sim++





Hors ligne LePtitClown

  • [M2R]LePtitClown
  • *
  • Bandit
  • Messages: 342
    • Voir le profil
Re : LePtitClown : différentes questions
« Réponse #153 le: 21 Janvier 2010, 20:53:20 »
Slt

Tu pourrais me donner quelques précisions de plus car dsl mais je n'y arrive vraiment pas. ???
Ce que je comprend ddans ce que tu dis c'est:
Citer
1 - vérifie si le fichier existe
 2 - s'il n'existe pas, on en crée un nouveau (+ le fermer (io_write ferait pareil))
if(!fexist(file))
{
fopen(file, io_readwrite);
fclose(file);
}
else
{
   fclose(file);
}
Et dans register je met la fonction que tu m'as donné mais une fois en jeu ce code ne marche pas :(
Donc je n'ai pas encore tout compris ;D

A+

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : LePtitClown : différentes questions
« Réponse #154 le: 21 Janvier 2010, 21:11:56 »
Salut,

comme tu n'ouvre pas le fichier s'il existe, le else ...(fermer le fichier) est inutile (il n'est pas ouvert)

La fonction qui te permettrais de stocker les IP et pseudo dans le fichier (qui auraient étés testés avec l'autre function), ressemblerais à ceci:

function(playerid)
{
    new tmp[64], tmpp[16];
    GetPlayerIP(playerid, tmpp, 16);
    GetPlayerName(playerid, tmp, MAX_PLAYER_NAME);
    format(tmp, sizeof(tmp), "%s %s\r\n", tmp, tmpp);//donc on format les informations à entrer
    new File:file = fopen("fichier", io_append);//io_append permet de se placer à la fin du fichier afin d'ajouter des choses à la suite
    fwrite(file, tmp);
    fclose(file);
    return 1;
}

voilà, en vérifiant de bien placé le tout comme tu le désire, tu as une fonction pour ajouter le joueur à la liste, une pour savoir s'il est dans la liste (simple à modifier pour récupérer de la liste)

++Sim++





Hors ligne LePtitClown

  • [M2R]LePtitClown
  • *
  • Bandit
  • Messages: 342
    • Voir le profil
Re : LePtitClown : différentes questions
« Réponse #155 le: 22 Janvier 2010, 18:19:17 »
Slt

Toujours pas, j'ai pas l'habitude de demander ça mais, tu peux me le faire car là je vois vraiment pas, je regarderai comment tu as fait car là je pense te faire perdre du temps :-[

A+ ;)

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : LePtitClown : différentes questions
« Réponse #156 le: 22 Janvier 2010, 18:43:12 »
Salut,

en reprenant les fonctions précédentes

OnPlayerConnect(playerid)
{
    new name[MAX_PLAYER_NAME], ip[16];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    GetPlayerIP(playerid, ip, 16);
    if(IsIPAndPseudoSaved(name, ip))
    {//le joueur est dans le fichier
    }
    else
    {//le joueur n'y est pas
        function(playerid);//on ajoute le joueur au fichier (la liste)
    }
}

ps. si tu veut tester seulement l'IP (donc le pseudo on s'en fou un peu), il te suffirait de faire un strtok avant de comparé le string dans la fonction (IsIPAndPseudoSaved)

faudrait voir selon ce que tu désire faire...
par contre, je ne te recommande pas de regarder dans le fichier si le joueur est déjà enregistrer au lieu de ton fexist, le fexist sera toujours bien plus rapide (du fait qu'il est native)
si ce n'est pas du tout ce dont tu parle, essaie de ré expliquer XD

++Sim++





Hors ligne LePtitClown

  • [M2R]LePtitClown
  • *
  • Bandit
  • Messages: 342
    • Voir le profil
Re : LePtitClown : différentes questions
« Réponse #157 le: 22 Janvier 2010, 18:47:34 »
Moi qui croyait que ce serait super simple
je réexplique. En gros une personne arrive sur mon serveur, il décide de s'enregistrer. Lorsqu'il s'enregistre son pseudo suivi de son ip sont sauvegardés dans un dossier rien de plus rien de moins :D
ex:
LePtitClown: 50.69.78.69
Sim: 25.37.12.95

A+

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : LePtitClown : différentes questions
« Réponse #158 le: 22 Janvier 2010, 19:50:01 »
Salut,

dans ce cas tu n'as besoin que d'une seule fonction, la dernière que j'ai donné

comme ça les noms seront stockés dans un fichier de ton choix:

ListPlayer(playerid)
{
    new tmp[64], tmpp[16];
    GetPlayerIP(playerid, tmpp, 16);
    GetPlayerName(playerid, tmp, MAX_PLAYER_NAME);
    format(tmp, sizeof(tmp), "%s: %s\r\n", tmp, tmpp);//donc on format les informations à entrer
    new File:file = fopen("fichier", io_append);//io_append permet de se placer à la fin du fichier afin d'ajouter des choses à la suite
    if(file)
    {
        fwrite(file, tmp);
        fclose(file);
    }
    return 1;
}

il te suffirais de placer ça au moment où le joueur s'enregistre (si tu as un système de compte)

si tu n'en as pas (système de compte), il te suffit de tester si le joueur est dans la liste (avec IsIPAndPseudoSaved) et l'ajouter à la liste avec cette fonction s'il n'y est pas déjà

ps. ajuste la forme dans les deux fonctions si tu les utilisent les deux

++Sim++





Hors ligne LePtitClown

  • [M2R]LePtitClown
  • *
  • Bandit
  • Messages: 342
    • Voir le profil
Re : LePtitClown : différentes questions
« Réponse #159 le: 24 Janvier 2010, 11:16:39 »
Slt

J'ai enfin réussi à faire marcher la dernière méthode grâce à ton aide mais ce script s'obstine  à enregistrer les ip à la connexion alors que moi je voudrai que ce soit à la commande /register. Pourtant le code se trouve bien dans la commande /register. ???
De quoi ça peut venir ?

A+ ;)

Hors ligne ApocKalipsS

  • *
  • Gangster
  • **** | Une experience GTA IV hors du commun !
  • Messages: 1141
    • Voir le profil
Re : LePtitClown : différentes questions
« Réponse #160 le: 24 Janvier 2010, 11:50:22 »
Dit nous ta commande /login

Hors ligne LePtitClown

  • [M2R]LePtitClown
  • *
  • Bandit
  • Messages: 342
    • Voir le profil
Re : LePtitClown : différentes questions
« Réponse #161 le: 24 Janvier 2010, 16:02:50 »
je pense que tu voulais dire /register, donc la voilà ( /register car l ip doit être rengristré lors de l'enregistrement )
  dcmd_register(playerid,params[]) {
    //if (autoriserregister[playerid] ==0) return SystemMsg(playerid,"Pour vous créer un compte avec /register [Mot de passe de votre choix], vous devez contacter un Admin en Jeu pour qu'il vous autorise à en créer un.");//rajoutertest
    if (PLAYERLIST_authed[playerid]) return SystemMsg(playerid,"Vous êtes déjà logué.");
    if (indm[playerid] > 0) return SystemMsg(playerid,"Vous ne pouvez pas vous enregistrer dans un DM.");
    if (udb_Exists(PlayerName(playerid))) return SystemMsg(playerid,"Ce compte existe déjà '/login mot de passe'.");
    if (strlen(params)==0) return SystemMsg(playerid,"Usage correct: '/register mot de passe'");
    if (udb_Create(PlayerName(playerid),params)) return SystemMsg(playerid,"Compte crée '/login mot de passe.");
//===SIMIP==
    new name[MAX_PLAYER_NAME], ip[16];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    GetPlayerIp(playerid, ip, 16);
    if(IsIPAndPseudoSaved(name, ip))
    {//le joueur est dans le fichier
    }
    else
    {//le joueur n'y est pas
        function(playerid);//on ajoute le joueur au fichier (la liste)
    }
//==SIMIP==


Voilà :D

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : LePtitClown : différentes questions
« Réponse #162 le: 24 Janvier 2010, 17:07:18 »
Salut,

et tu es certains que le code ne se retrouve pas ailleurs dans le script?

sinon ce serait que cette commande est appelée au moment de la connexion... c'est curieux

++Sim++





Hors ligne LePtitClown

  • [M2R]LePtitClown
  • *
  • Bandit
  • Messages: 342
    • Voir le profil
Re : LePtitClown : différentes questions
« Réponse #163 le: 24 Janvier 2010, 17:26:17 »
Non non, je viens d'ailleurs de faire de nombreux testss, voici les résultats:
PS: j 'ai mis la fonction qui enregistre en stock ce qui ne change rien, je précise
- lorsque je met la fonction dans register, rien ne se passe
- lorsque je met cette même fonction dans oneplayerconnect, tout marche

A+ :(

Hors ligne ApocKalipsS

  • *
  • Gangster
  • **** | Une experience GTA IV hors du commun !
  • Messages: 1141
    • Voir le profil
Re : LePtitClown : différentes questions
« Réponse #164 le: 24 Janvier 2010, 18:11:38 »
Passe nous plutôt le /login, si il tape /login et que ça enregistre l'IP...