SOLARUS: comment démarer un dialogue après l'obtention d'un objet

Démarré par knil, 28 Mai 2018 à 10:23

0 Membres et 1 Invité sur ce sujet

Bonjour à tous ,

Je débute  :D 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


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.

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

Afin de tester l'état d'une capacité, il faut faire :

if game:get_ability(<capacité a tester>)==1
 --du code
end


Donc, dans ton cas, il faut faire

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

if <contition>
 --du code
else
 if <autre condition>
   --code
 else
   --code par défaut
 end
end
tu peux faire

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  ;)

salut PhoenixII merci pour ton aide

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

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

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


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é!!  :mellow:

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
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

ok c'est bon

cela fonctionne avec la syntax
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 :P)

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