Retour à l'accueil
Accueil Aide Rechercher Calendrier Identifiez-vous Inscrivez-vous
Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.
Avez-vous perdu votre courriel d'activation?
12 Décembre 2018 à 06:39

Connexion avec identifiant, mot de passe et durée de la session
Règlement | Grades du forum | L'équipe de modération | Album photo | Chat
Rechercher:     avancée
Forums Zelda Solarus  |  Jeux amateurs  |  Aide & support  |  Sujet: SOLARUS: comment démarer un dialogue après l'obtention d'un objet 0 Membres et 1 Invité sur ce sujet.
Pages: [1] Imprimer
Auteur Sujet: SOLARUS: comment démarer un dialogue après l'obtention d'un objet  (Lu 713 fois)
knil
Bourgeon Mojo
*
Hors ligne Hors ligne

Messages: 3


« le: 28 Mai 2018 à 10:23 »

Bonjour à tous ,

Je débute  rit aux éclats merci pour votre temps: voici ma question : Comment faire démarrer un dialogue après avoir obtenu un objet(ici l'épée)?

voici le script de la map

Code:
local map = ...
local game = map:get_game()

function uncle:on_interaction()


  if game:set_ability("sword",1) then    -- VOICI MON PROBLÈME = je n'arrive pas a faire comprendre au moteur
                                                                                              que je possède l'épée !!! tout le reste fonctionne bien  :)
    game:start_diaolog("uncle.finish")

  else
 

      if  game:get_value("uncle_sword_quest_started")   then
       game:start_dialog("uncle.done")
       door_switch:set_enabled(true)
    
      else

      

         game:start_dialog("uncle.sword", function(answer)
            if answer == 3 then -- non
              game:start_dialog("uncle.no")
            else  -- oui
              game:start_dialog("uncle.yes")
                game:set_value("uncle_sword_quest_started", true)
                door_switch:set_enabled(true)
                sol.audio.play_sound("door_open")
  
          
          end
       end)
    
   end
 end
end


J'ai déjà essayer avec game:get_ability  et game has_ability message d'erreur pour les deux
Merci pour vos réponse.
« Dernière édition: 28 Mai 2018 à 10:40 par knil » Journalisée
PhoenixII
Mojo
*
Hors ligne Hors ligne

Messages: 43



« Répondre #1 le: 28 Mai 2018 à 13:27 »

Pour reprendre la réponse de Diarandor sur les forums solarus :

Afin de tester l'état d'une capacité, il faut faire :
Code: (Lua)
if game:get_ability(<capacité a tester>)==1
  --du code
end

Donc, dans ton cas, il faut faire
Code: (Lua)
if game:get_ability("sword")==1
  --code si c'est le cas
end

L'erreur venant du fait que tu as repris la syntaxe de set_ability(<capacité a definir>, <nouvelle valeur>)

D'autre part, pour gagner en lisibilité, au lieu de
Code: (Lua)
if <contition>
  --du code
else
  if <autre condition>
    --code
  else
    --code par défaut
  end
end
tu peux faire
Code: (Lua)
if <condition>
  --du code
elseif <autre condition>
  --autre code
else
  --code par défaut
end
pour réduire la hiérarchie des tests (et gagner de la place au passage

J'espère t'avoir aidé à progresser dans ton long apprentissage du Lua  clin d'oeil
Journalisée
knil
Bourgeon Mojo
*
Hors ligne Hors ligne

Messages: 3


« Répondre #2 le: 28 Mai 2018 à 17:05 »

salut PhoenixII merci pour ton aide

J'ai bien testé avec
Code:
game:get_ability("sword)==1

mais le moteur me renvoi
 
Code:
Error: In on_interaction: [string "maps/cave_link_house.lua"]:17: attempt to call method 'start_diaolog' (a nil value)

la ligne 17 etant
Code:
game:start_dialog("uncle.finish")


Code:
game:get_value("sword") == 1

ne fonctionne pas non plus

J'ai aussi essayé tout un tas d'autre code et fonction mais vraiment je reste bloqué!!  étonné
« Dernière édition: 28 Mai 2018 à 17:14 par knil » Journalisée
PhoenixII
Mojo
*
Hors ligne Hors ligne

Messages: 43



« Répondre #3 le: 28 Mai 2018 à 17:13 »

Bizarre, pour moi tout semble correct, aux erreurs de recopie près (ton message d'erreur fait reference à "game:start_diaolog()" avec un "o" en trop)
(edit : je pense meme que c'est çà l'erreur en fait, ce "o" en trop, vérifie avant de lire la suite de ce post)
(edit 2 : confirmé : ligne 17 de ton code, tu as bien mis
Code:
game:start_diaolog("uncle.finish")
              ^ ici

Y aurait-t-il moyen d'avoir le projet pour vérifier si d'autres erreurs ne se cachent pas ? <-- a ne rendre en compte qu'en cas d'autres erreurs
« Dernière édition: 28 Mai 2018 à 17:19 par PhoenixII » Journalisée
knil
Bourgeon Mojo
*
Hors ligne Hors ligne

Messages: 3


« Répondre #4 le: 28 Mai 2018 à 17:23 »

ok c'est bon

cela fonctionne avec la syntax
Code:
game:get_ability("sword") ==1

l'erreur etant diaolog() avec le o en trop je suis dslé à force de lire du code depuis hier mes yeux s'embrume

 une chose de moins à apprendre (et toujours faire attention à la syntax et l'orthographe bien sur tire la langue)

 je te partagerais volontiers le début du projet quand l'intro. sera fini   

Merci pour ton aide et ton temps à très vite sur le forum



Journalisée
Pages: [1] Imprimer 
Forums Zelda Solarus  |  Jeux amateurs  |  Aide & support  |  Sujet: SOLARUS: comment démarer un dialogue après l'obtention d'un objet
Aller à:  

Propulsé par MySQL Propulsé par PHP Powered by SMF 1.1.20 | SMF © 2006, Simple Machines XHTML 1.0 Transitionnel valide ! CSS valide !
Zelda Solarus 2009Skin par Eidarloy
www.zelda-solarus.com