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?
15 Septembre 2019 à 08:38

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  |  Topic: SOLARUS: comment démarer un dialogue après l'obtention d'un objet 0 Membres et 3 Invités sur ce sujet.
Pages: [1] Imprimer
Auteur Sujet: SOLARUS: comment démarer un dialogue après l'obtention d'un objet  (Lu 13422 fois)
knil
Bourgeon Mojo
*
Offline Offline

Messages: 3


Courriel
« le: 28 Mai 2018 à 09:23 »

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

Code: [Select]
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 à 09:40 par knil » Journalisée
PhoenixII
Mojo
*
Online Online

Messages: 43



Courriel
« Répondre #1 le: 28 Mai 2018 à 12: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) [Select]
if game:get_ability(<capacité a tester>)==1
  --du code
end

Donc, dans ton cas, il faut faire
Code: (Lua) [Select]
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) [Select]
if <contition>
  --du code
else
  if <autre condition>
    --code
  else
    --code par défaut
  end
end
tu peux faire
Code: (Lua) [Select]
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  ;)
Journalisée
knil
Bourgeon Mojo
*
Offline Offline

Messages: 3


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

salut PhoenixII merci pour ton aide

J'ai bien testé avec
Code: [Select]
game:get_ability("sword)==1
mais le moteur me renvoi
 
Code: [Select]
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: [Select]
game:start_dialog("uncle.finish")

Code: [Select]
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:
« Dernière édition: 28 Mai 2018 à 16:14 par knil » Journalisée
PhoenixII
Mojo
*
Online Online

Messages: 43



Courriel
« Répondre #3 le: 28 Mai 2018 à 16: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: [Select]
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 à 16:19 par PhoenixII » Journalisée
knil
Bourgeon Mojo
*
Offline Offline

Messages: 3


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

ok c'est bon

cela fonctionne avec la syntax
Code: [Select]
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



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

Propulsé par MySQL Propulsé par PHP Powered by SMF 2.0.15 | SMF © 2006, Simple Machines LLC XHTML 1.0 Transitionnel valide ! CSS valide !
Zelda Solarus 2009Skin par Eidarloy
Solarus-Games