Page 1 sur 1

[Container] Contrôler ce qu'il contient après fermeture

Posté : mar. 28 mars 2017, 19:31
par Cocrane
J'ai besoin de consulter ce que contient un container après chaque évènement de fermeture
Si le groupe a déposé un objet non adéquat, il y aura une sanction.

J'ai mis un script sur le container pour tester son ouverture (je ne vois pas de test existant pour la fermeture):
IF
Opened([PC])
Global("Niche1_crane","Com021",0)
THEN
Response #100

SetGlobal("Niche1_crane","Com021",1) // activation du contrôle du contenu du container
PlaySound("CAS_M02")
END

J'ai mis un script sur l'AREA pour tester le contenu du container:
// Objets mal placés
IF
Global("Niche1_crane","Com021",1)
Global("niche1_OK","COM021",0)
OR(3)
Contains("Miscp46","Niche1")
Contains("Miscp47","Niche1")
Contains("Miscp48","Niche1")
THEN
RESPONSE #100
Global("Niche1_crane","Com021",0)

PlaySound("CAS_M03")
END

Le problème est que dès que le container est ouvert, la variable se met à jour et le script AREA se déclenche. Le joueur n'a pas le temps de décider de ce qu'il met dans le container.
Je pourrai mettre une tempo (WAIT) mais c'est pas top.

Cocrane

Posté : mar. 28 mars 2017, 19:45
par Freddy_Gwendo
Et si tu te passais du contrôle sur l'ouverture-fermeture du coffre ? Après tout, tu es bien obligé de l'ouvrir pour y déposer quelque chose. ;)

De plus, tu pourrais utiliser uniquement le script de la carte pour faire tes contrôles.

Posté : mar. 28 mars 2017, 20:42
par Cocrane
Pourquoi faire simple quand on peut faire compliqué? ;-)

Chaque container est lié à une énigme permettant de savoir quel objet mettre. Mon souhait est de "punir" chaque erreur de dépose d'objet.

A chaque nouvel essai, il faut que je teste le container. Si je ne teste pas l'ouverture du container (à défaut de sa fermeture), j'ignore qu'il y a un nouvel essai. Ca me semble non faisable avec les mots clés existants sans s'arracher les cheveux.

Sinon je pars sur un timer déclenché par l'ouverture du container. Tant qu'il y a un mauvais objet en place, il y a une sanction régulière.

Cocrane

Posté : mar. 28 mars 2017, 20:53
par Haplo74
Bonsoir,

Mais comment est-ce fait pour le jeu des diablotins dans la cité sahuagin ?
Là aussi il s'agit de placer des objets dans des coffres.
Il doit bien y avoir un test qui te dit que tu as faux à un moment non ? Personnellement je mets toujours la bonne combinaison mais quelqu'un a déjà essayé d'échouer ?

Ou de même les statues a objets et à énigmes au début de l'asile de Spellhold (juste après avoir récupéré Imoen, une salle à gauche qui donne une pierre ionique entre autres) ?

Haplo74

Posté : mar. 28 mars 2017, 22:08
par Cocrane
Salut Haplo74,
pour les diablotins, je ne me souviens pas de cette partie de BG2.

pour les statues, de mémoire, il n'y avait pas de sanction. Dans ce cas, pour moi c'est simple (sans avoir à consulter le code de la carte):
Si l'objet est à la bonne place, le container est "ok". Il suffit de tester le contenu du container via le .baf de la carte.


Cocrane

Posté : mar. 28 mars 2017, 23:03
par Freddy_Gwendo
L'énigme des diablotins se gère avec le script de la carte qui vérifie que chaque coffre contient bien le bon objet. Si c'est le cas, il déclenche le dialogue avec un diablotin.

Quant à la première énigme de l'asile, elle fonctionne de la même manière, à la nuance près qu'elle déclenche une variable globale utilisée dans un script déclenché par l'ouverture du coffre central.

Tu devrais peut-être t'en inspirer. Sinon, ajoute un timer une fois que tu as effectué ton test pour le réinitialiser si et uniquement si le conteneur est vide.

Posté : mer. 29 mars 2017, 21:10
par Cocrane
J'ai trouvé une solution à mon problème. On ne peut pas contrôler à la fermeture faute de mot clé, du coup je contrôle le contenu du container à l'ouverture.

// Script du container

// Le container a été vidé: réactivation du contrôle
IF
Opened([PC])
Global("Variable_container_sanction","Nom_carte",1) // Le contrôle et la sanction a déjà eu lieu
!Contains("OBJET1_à_tester","container1") // Test absence mauvais objet
!Contains("OBJET2_à_tester","container1")
!Contains("OBJET3_à_tester","container1")
THEN
Response #100
SetGlobal("Variable_container_sanction","Nom_carte",0) // Contrôle à réaliser
END

// Script de l'AREA

// Le contrôle est à réaliser et le container contient au moins un mauvais objet
IF
Global("Variable_container_sanction","Nom_carte",0)
OR(3)
Contains("OBJET1_à_tester","container1")
Contains("OBJET2_à_tester","container1")
Contains("OBJET3_à_tester","container1")
THEN
RESPONSE #100
SetGlobal("Variable_container_sanction","Nom_carte",1)

// Déclenchement de la sanction
END