• 11 Juillet 2025, 06:50:35


Auteur Sujet: Premières commandes  (Lu 1568 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne OW3N

  • *
  • Nouveau
  • Messages: 5
    • Voir le profil
Premières commandes
« le: 11 Février 2013, 12:43:39 »
Bonjour,

Je vais expliquer mon cas avant d'expliquer mon problème  ???.
Depuis quelques jours, je me suis décidé de commencer à apprendre le PAWN. Ayant quelques petites notions de C, je me suis dit : Pourquoi pas ?

Donc j'ai cherché un GM sur internet, et j'ai pris un DM qui a été traduit en Français, comme on m'a dit que ça serait plus pratique pour débuter.

Ce matin, j'ai essayé de bidouiller quelques petites fonctions pour voir ce que ça fait, donc j'ai crée une commande qui restaure la vie à 100.

Ensuite j'ai voulu un peu compliquer les choses, en faisant une commande qui fait boire le joueur, rajoutant 10 points de vie en l'échange de 5$.

J'en ai conclu par :

Code: (pawn) [Sélectionner]
if(strcmp(cmd, "/boire", true) == 0)
    {
    new Float:health;
     GetPlayerHealth(playerid,health);
        if(playermoney >= 5)
        {
        GivePlayerMoney(playerid, -5);
        health++;
        health++;
        health++;
        health++;
        health++;
        SendClientMessage(playerid, 0xF5FF9FAA, "Vous avez bu un soda, il vous fait gagner 10PV et perdre 5$.");
        return 1;
        }
       
        if(health == 100)
        {
        SendClientMessage(playerid, 0xF5FF9FAA, "Vous avez déjà toute votre vie.");
        return 1;
        }
        if(playermoney <= 4)
        {
        SendClientMessage(playerid, 0xF5FF9FAA, "Vous n'avez pas assez d'argent (5$).");
        return 1;   
        }
    return 1;
}

En voulant tester In Game, j'ai remarqué que ça effectue seulement les deux conditions si la vie est au maximum et si l'argent est inférieur ou égal à 4.

J'aimerais qu'on m'éclaire un peu là dessus, que je sache ce qui va et ce qui va pas etc pour que je puisse progresser...

Merci d'avance :)

OW3N

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3551
    • Voir le profil
Re : Premières commandes
« Réponse #1 le: 11 Février 2013, 12:53:14 »
J'ai pas bien compris, qu'est-ce qui ne marche pas dedans?


Adju ♥
(-_-)



Hors ligne OW3N

  • *
  • Nouveau
  • Messages: 5
    • Voir le profil
Re : Premières commandes
« Réponse #2 le: 11 Février 2013, 14:59:23 »
Ce qui ne fonctionne pas c'est ma première condition if.
Je vais continuer à essayer de bidouiller, je pense que c'est comme ça que je vais finir par comprendre mais.. Un petit coup de pouce serait pas de refus  ;D.

Hors ligne Gilux

  • *
  • Mafioso
  • GOOBY PLS
  • Messages: 2209
    • Voir le profil
Re : Premières commandes
« Réponse #3 le: 11 Février 2013, 18:33:22 »
Il n'y a pas de SetPlayerHealth déjà, il faut que tu changes le niveau de vie du joueur (avec la valeur de la variable plus 5, donc health += 5)
Et pour la condition je ferais plutôt :

if(health < 100)
{
     if((GetPlayerMoney....) >= 5)
     {
          // enlever l'argent, donner la vie (GetPlayerHealth +5)   
     }
     else
     {
           // Pas assez d'argent !
     }
}
else
{
     //  Vie déjà à 100 ou plus
}

Tu devrais pouvoir y arriver avec ça ;)
++

Hors ligne OW3N

  • *
  • Nouveau
  • Messages: 5
    • Voir le profil
Re : Premières commandes
« Réponse #4 le: 11 Février 2013, 20:24:31 »
Je vais essayer comme tu as dis, ça devrait fonctionner oui.
J'ai bidouillé encore ma commande aujourd'hui, j'ai réussi à régler un problème, mais un dernier est apparu, et celui là je sais pas comment le régler...
Voilà mon code :

Code: (pawn) [Sélectionner]
if(strcmp(cmd, "/boire", true) == 0)
    {
    new Float:health;
     GetPlayerHealth(playerid,health);
        if(GetPlayerMoney(playerid) >= 5)
        {
        GivePlayerMoney(playerid, -5);
        health + 5;
        SendClientMessage(playerid, 0xF5FF9FAA, "Vous buvez votre soda, vous perdez 5$.");
        }
        else if(health >= 100)
        {
        SendClientMessage(playerid, 0xF5FF9FAA, "Vous avez déjà toute votre vie.");
        }
        else
        {
        SendClientMessage(playerid, 0xF5FF9FAA, "Il vous faut 5$ pour boire.");
        }
    return 1;
}

Donc quand je l'essaye In Game :
* Je test avec 100% de vie, "Vous avez déjà toute votre vie.".
* Je test avec 90% de vie et 0$, "Il vous faut 5$ pour boire.".
* Je test avec 90% de vie et plus 20$, je peux effectuer l'action 4 fois.

En gros, j'aimerais savoir comment "bloquer" la commande à partir de 100%, pour qu'on me dise que ma vie est déjà pleine.

Merci de ta réponse Gilux :)

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3551
    • Voir le profil
Re : Premières commandes
« Réponse #5 le: 11 Février 2013, 21:12:59 »
Code: (pawn) [Sélectionner]
health += 5;


Adju ♥
(-_-)



Hors ligne Gilux

  • *
  • Mafioso
  • GOOBY PLS
  • Messages: 2209
    • Voir le profil
Re : Premières commandes
« Réponse #6 le: 11 Février 2013, 21:19:04 »
Une nouvelle fois, tes conditions ne sont pas bonnes :)

Voilà en gros ce que tu fais : "Si le joueur a 5$ ou plus, alors on le fait boire. Sinon, si le joueur dépasse 100 de vie, alors on affiche une erreur. Si aucune des deux conditions n'est vraie, alors on lui signale qu'il n'a pas assez d'argent"

Le truc, c'est que tant que le joueur a de l'argent, il peut boire à l'infini car la 1ère condition sera toujours lue.

Regarde ce que je t'ai mis juste avant, tu verras que ça n'a rien à voir. Sinon, tu peux aussi mettre un opérateur "ET" (&&), donc par exemple : "Si le joueur a moins de 100 en vie ET s'il a au moins 5$, alors on le fait boire, sinon on affiche une erreur."

Bonne chance ;)

EDIT : Exact Infu, je l'avais pas remarqué.

Hors ligne OW3N

  • *
  • Nouveau
  • Messages: 5
    • Voir le profil
Re : Premières commandes
« Réponse #7 le: 11 Février 2013, 22:13:21 »
J'ai essayé ce que vous m'avez dit et j'ai essayé de faire au mieux pour ne pas avoir d'erreurs, maintenant tout fonctionne, la vie s'ajoute mais au lieu de s'arrêter ou de dire "Votre vie est déjà au maximum", eh bien.. je reçois "Server closed the connection"...
Pourtant j'essaie de comprendre d'où vient le problème mais étant débutant ça va pas être facile...

@Infu.
Pourquoi le "+=" ?

Je mets quand même mon code actuel pour que quelqu'un puisse m'éclaircir, encore merci de vos réponses ! :)

Code: (pawn) [Sélectionner]
if(strcmp(cmd, "/boire", true) == 0)
    {
     new Float:health;
     GetPlayerHealth(playerid,health);
     SetPlayerHealth(playerid,health);
        if(GetPlayerMoney(playerid) >= 5 && health <= 100)
        {
        GivePlayerMoney(playerid, -5);
        GetPlayerHealth(playerid,health);
        SetPlayerHealth(playerid,health + 10);
        SendClientMessage(playerid, 0xF5FF9FAA, "Vous buvez votre soda, vous perdez 5$.");
        return 1;
        }
        else if(health >= 99)
        {
        SendClientMessage(playerid, 0xF5FF9FAA, "Vous avez déjà toute votre vie.");
        }
        else
        {
        SendClientMessage(playerid, 0xF5FF9FAA, "Il vous faut 5$ pour boire.");
        }
    return 1;
        }

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3551
    • Voir le profil
Re : Premières commandes
« Réponse #8 le: 11 Février 2013, 22:18:43 »
Citer
@Infu.
Pourquoi le "+=" ?

+= signifie en fait "ajouter à la somme existante" en gros. Un signe ne se balade jamais tout seul.

!=  différent de..

>= Supérieur ou égal...

:)


Adju ♥
(-_-)



Hors ligne OW3N

  • *
  • Nouveau
  • Messages: 5
    • Voir le profil
Re : Premières commandes
« Réponse #9 le: 11 Février 2013, 22:25:58 »
Ha d'accord, je comprends, je connaissais juste les deux derniers, je pensais que pour additionner ou soustraire un nombre d'une variable il fallait juste mettre le nom de la variable, + ou - et le montant, merci en tout cas pour ce petit plus :)

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3551
    • Voir le profil
Re : Premières commandes
« Réponse #10 le: 12 Février 2013, 11:13:23 »
Il n'y a pas de quoi :)


Adju ♥
(-_-)