• 07 Juillet 2025, 18:14:16


Auteur Sujet: [Topic Général] Aide de Chneubeul - Lire en plusieurs fois sscanf  (Lu 7693 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Bonjour, je pense que c'est la meilleurs solution pour moi de regrouper tous mes demandes aides dans un seul topic, comme ça je n'ai pas à chercher mes anciens topics, pour reconsulter les informations qui m'ont été donner :)

Voila mon petit problème, j'aimerais rendre possible d'utiliser soit le nom soit l'id du véhicule, grâce à l'aide de Sim, j'ai pu réaliser le code ci dessous, mais qui renvoie bien l'id de la voiture, mais à cause du return 1; la suite du code ne s'exécute pas.. :(


if (sscanf(params, "dD(0)D(0)", id, col1, col2))
{
if (sscanf(params, "s[20]D(0)D(0)", id2, col1, col2))
   {
SendClientMessage(playerid, COLOR_YELLOW, "USAGE: /veh <nom/id> <col1> <col2>");
return 1;
}
else
{
   modelid = ReturnModelByName(id2);
   format(string, sizeof(string), "modelid : %d", modelid);
           SendClientMessage(playerid, COL_YELLOW, string);
   
}
return 1;
}
else { modelid = id; }


Merci de votre aide.
Sam.  :cheers
« Modifié: 25 Décembre 2010, 21:32:06 par chneubeul »

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - Contourner la logique SSCANF
« Réponse #1 le: 21 Novembre 2010, 20:52:24 »
Salut,

tu devraiis pouvoir enlever le return 1 comme les cas où l'information n'est pas correcte sont déjà gérés.

Pour te donner une petite idée:

Code: (pawn) [Sélectionner]
if (sscanf(params, "dD(0)D(0)", modelid, col1, col2))
{
if (sscanf(params, "s[20]D(0)D(0)", id2, col1, col2))
    {
SendClientMessage(playerid, COLOR_YELLOW, "USAGE: /veh <nom/id> <col1> <col2>");
return 1;
}
else
{
    modelid = ReturnModelByName(id2);
    format(string, sizeof(string), "modelid : %d", modelid);//pourquoi? tu devrais plutot vérifier que modelid est valide et le bloquer si ce n'est pas le cas
            SendClientMessage(playerid, COL_YELLOW, string);
   
}
}
//suite de la commande

++Sim++





Hors ligne cristab

  • *
  • Messages: 8379
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - Contourner la logique SSCANF
« Réponse #2 le: 21 Novembre 2010, 20:57:13 »
sinon le return 1 devrais pouvoir ce positionner juste en dessous du SendClientMessage
pas d'aide en PM, vous êtes sur un forum est il me semble que vous êtes la pour avoir de l'aide donc pourquoi MP une seul personne qui ne vous répondra pas alors qu'il y a plein de membre ici

Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - Contourner la logique SSCANF
« Réponse #3 le: 21 Novembre 2010, 21:03:51 »
Ah merci. Je ne savais pas que si la commande échoué, c'était déjà validé, donc par habitude, je n'ai pas songé à enlever ce return 1;
Cristab, les sendclientmessage étais juste pour '' débugguer "  ^^ Comme je n'avais jamais encore réaliser de système comme ça, je n'étais pas sûr et donc j'voulais m'assurer qu'il retournais bien l'ID du véhicule.. :)

Merci à vous deux.
 :dling

Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - Fblockwrite
« Réponse #4 le: 24 Novembre 2010, 16:22:02 »
Bonjour, :)

Voila donc je poste mon code pour enregistrer les positions, j'aimerais savoir si celui est bon et/ou comment l'optimiser.
Merci de votre aide.


function PrisePos(playerid)
{
new Float:X, Float:Y, Float:Z, stringg[32], string[32] = "anderiusmap.ini";
GetPlayerPos(playerid, X, Y, Z);
new File:File = fopen(string, io_write);
if (File)
{
    format(stringg, sizeof(stringg), "%.1f|%.1f|%.1f\r\n", X, Y, Z);
        fblockwrite(File,stringg, 20);
fclose(File);
}
}

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - Résolu
« Réponse #5 le: 24 Novembre 2010, 17:05:45 »
Ton code est bon mais je te déconseil d'utiliser fblocwrite dans ton cas vu que tu ne pourra pas lire les valeurs des positions avec notepad, utilise plutôt fwrite :)




Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - Résolu
« Réponse #6 le: 24 Novembre 2010, 17:17:01 »
Docteur Sim, m'a dit le contraire ^^ à la limite osef que j'peut pas lire via notepad :)
Si j'veut vérifier si c'est bon, j'fait un p'tit script IG :)

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - Résolu
« Réponse #7 le: 24 Novembre 2010, 17:28:15 »
enfaite ça dépend de ce que tu veut en faire, si c'est pour ton truc qui permet de récupérer la position Z sur le mod que tu utilise la méthode de Sim est meilleur, mais si tu veut juste prendre des positions comme pour le /save, celle de Sim est bien, mais le top pour pouvoir lire les valeurs avec notepad est d'utiliser fwrite ^^



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - Résolu
« Réponse #8 le: 24 Novembre 2010, 17:48:13 »
Nan c'pour mon truc pour récupérer la position Z :)


Double post
Bonjour :)

Dans mon bus tout à l'heure j'étais pensif, et d'un coup paf un flash ! Comment fonctionne la fonction '' do ''

par exemple si je me met ceci

MaFonction(playerid)
{
     do var++;
     while
     {
           var <= 150;
     }
}

Donc si jamais je charge cette fonction, est-ce que le code va continuer tout seul, ou je suis obliger de la charger avec un timer ?
« Modifié: 25 Novembre 2010, 17:00:17 par chneubeul »

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - Question sur fonction ''do"
« Réponse #9 le: 25 Novembre 2010, 23:54:31 »
Salut chneubeul,

je ne suis pas sur de comprendre ta question.

Dans l'exemple que tu donne, la syntaxe n'est pas bonne. Enfin, je n'ai pas testé, mais je n'ai jamais vu personne utiliser do de cette façon, ni while.

Les do-while sont des boucles au même titre que les while ou les for. La principale différence, c'est que l'action contenue dans la loop sera exécutée au moins 1 fois, peu importe que le test soit validé ou non.

La syntaxe générale est:
do
{
    //code de la boucle
}
while(condition);

En ordre, le code de la boucle est exécuté, puis, si le test est validé, au retourne au do et ainsi de suite tant que le test est validé.

Un petit exemple:
new myvar =10;
do
{
    myvar--;
}
while(myvar > 0);

Dans ce cas ci, le résultat est le même que:

while(myvar > 0)
{
    myvar--;
}

La différence apparait dans les cas où le premier test peut ne pas être validé:

new myvar = 3;
do
{
    myvar = 10;
}
while(myvar < 2);
printf("Myvar: %d", myvar);
Le printf sortira donc myvar = 10.

Avec un simple while:

new myvar = 3;
while(myvar < 2)
{
    myvar = 10;
}
printf("myvar: %d", myvar);

Si tu parle d'une autre utilisation qu'en boucle, dit le et quelqu'un (peut-être moi) tentera de t'expliquer. Ensuite, si tu parle effectivement de l'utilisation en boucle, mais que mon explication n'est pas claire, tu peut toujours demander.

++Sim++





Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - Question sur fonction ''do"
« Réponse #10 le: 26 Novembre 2010, 17:53:27 »
Bonsoir Sim,

Tu m'a permis d'éclairer un peu ma lanterne :)

Le but primaire de ma requête bien que ton post est très intéressant résulte d'une boucle.
J'aimerais savoir si le while se comporte comme un '' timer en boucle " il va se répéter par exemple tant que la condition n'est pas atteinte, ou c'est une autre façon d'écrire un if ?

A+, Sam.

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - Question sur fonction ''do"
« Réponse #11 le: 26 Novembre 2010, 18:05:59 »
Une boucle c'est du code qui se répète tant que la condition est vrai, si elle est fausse alors la boucle est arrêtée ^^



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - Question sur fonction ''do"
« Réponse #12 le: 26 Novembre 2010, 18:14:42 »
Oui, je sais ça ^^

Mais le while est une boucle ?

Bref :)
Je tourne cours au sujet, on en reparlas un peu plus tard j'ai une petite question un peu plus urgente :)

Voila donc pour simplifier un peu le code, j'aimerais utiliser foreach le problème, c'est que ben ça ne marche pas x')
Je m'en suis rendu compte, en mettant mes textdraw dans ongamemodeinit et je l'ai charger via une boucle
qu'ils fonctionnent très bien SANS le foreach c'est à dire une boucle classique for(new i=0; i< ...
Et la je test, avec foreach, rien n'apparait. :(

Est-ce un bug connu ? Ma syntaxe je l'ai écris comme ça :

foreach(Player, i)

Je trouve ça très louche, j'ai regardé un peu dans l'include et perso je trouve ça bizarre, à peine l'ombre de foreach mininuscule..

Merci de votre aide,
Sam.  :cheers
« Modifié: 26 Novembre 2010, 18:55:43 par chneubeul »

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - Question sur fonction ''do"
« Réponse #13 le: 26 Novembre 2010, 19:01:43 »
Salut,

foreach fait une loop de tous les joueurs connectés, donc dans OnGameModeInit ce n'est pas à utiliser.

++Sim++





Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : [Topic Général] Aide de Chneubeul - Question sur fonction ''do"
« Réponse #14 le: 26 Novembre 2010, 19:11:58 »
Ben j'vais mettre dans OnPlayerConnect :)

Merci à toi Sim.  :dling