Page 1 sur 1

[CARTES] Comment modifier un conteneur dans une carte déjà visitée ?

Posté : mer. 28 oct. 2015, 22:15
par Cocrane
Dans mon mod (suite de BG1), je désire mettre à jour un container existant dans BG1 :

- ajout d'objets
- ajout d'un piège magique.

Je sais mettre à jour un .ARE mais cet ajout doit être actif que lorsque mon mod sera commencé. Si on est dans une partie BG1, cet ajout ne doit pas intervenir.

Comment reverrouiller le coffre si il a été ouvert au cours d'une partie BG1 ?
Comment ajouter un piège uniquement lorsque la partie Mod est commencée ?


Édit de Freddy : pour éviter toute confusion, je précise que ton mod est développé pour BGT et non pour BG1 seul ! ;)

Posté : jeu. 29 oct. 2015, 22:43
par Isaya
Il n'existe pas de solution pour modifier un fichier ARE une fois qu'on l'a déjà visité dans une partie. Il faut donc tout placer et le désactiver ou activer au moment opportun.

Ajouter un objet dans un conteneur :
Voir le script AR0602.bcs de BG II, pour l'ajout des pantalons dorées

Code : Tout sélectionner

ActionOverride("Picture1",CreateItem("MISC47",0,0,0))
Picture1 est le nom du conteneur.

Ajout de piège :
La seule solution me semble être de l'ajouter dès le début et de le désactiver jusqu'au début de ton mod. Tu devrais regarder du côté de TriggerActivation.
Je te suggère de chercher dans le jeu un endroit où un piège est désactivé par le fait d'avoir un objet, par exemple.

L'action Lock permet de verrouiller un conteneur ou une porte.

Posté : jeu. 29 oct. 2015, 22:54
par Freddy_Gwendo
Argh !!! Grillé par Isaya.

Bon, j'édite mon message.

Ce que tu veux faire dépasse les limites du moteur.
En revanche, tu peux désactiver, activer un container, lui ajouter des objets, mais s'il a déjà été déverrouillé, tu ne pourras plus que l'ouvrir et le fermer (plus le verrouiller), en cours de partie.

Cependant, il est possible de tricher un peu avec ces règles : en jonglant avec des "fausses portes" et des containers, j'ai réussi à créer des containers en cours de partie : ils ne s'affichent que lorsque la fausse porte est ouverte.

Ça fonctionne très bien avec de nouvelles cartes. Mais je n'ai jamais essayé sur des cartes existantes.

Indique-moi dans quelle carte tu veux faire ces manips, la nature exacte des manips, et je jetterai un coup d’œil pour voir s'il est facile d'adapter ma méthode à ton objectif.

Quant à l'action TriggerActivation, je te confirme que c'est le b-a-ba de la gestion de scenario pour activer-désactiver des points d'informations, des pièges ou des zones de transfert entre cartes selon l'état d'avancement de ta campagne.

Posté : dim. 01 nov. 2015, 13:40
par Cocrane
Isaya, Freddy,
merci pour vos retours.

J'ai modifié mon script pour insérer le mot-clé TRIGGERACTIVATION. Mais mon container est toujours verrouillé et actif même si j'ai désactivé le container.

CARTE: AR8011.ARE
Script:

Code : Tout sélectionner

IF
  Global("MOD_PDB_acte","GLOBAL",1)
  Global("AR8011_citadins","GLOBAL",0)    
THEN
  response #100
  setGlobal("AR8011_citadins","GLOBAL",1)  
  ActionOverride("SUNIN",desTroyself())

  TriggerActivation("Container 1",FALSE) // je le désactive volontairement pour voir si ça fonctionne
END
SCRIPT du container:

Code : Tout sélectionner

IF
  OPENED([0])
  Global("MOD_PDB_acte","GLOBAL",1)
  Global("AR8011_container_1","GLOBAL",0)
THEN
 RESPONSE #100
 SETGlobal("AR8011_container_1","GLOBAL",1)
  
 ForceSpell(Lasttrigger,WIZARD_WEB)
 WAIT(1)
 ForceSpell(Lasttrigger,WIZARD_CLOUDKILL)
 Shout(3)
END
Les deux sorts se déclenchent quand même.

Posté : dim. 01 nov. 2015, 15:49
par Freddy_Gwendo
Normal, tu as confondu TriggerActivation et ContainerEnable. La première action concerne les triggers, la seconde les containers. ;)

Dans ton cas, c'est ceci qui convient : ContainerEnable("Container 1",FALSE).

Exemple de mon laïus du précédent message :

Code : Tout sélectionner

IF
  Global("GWDos101","GW0000",0)
  OR(2)
    !Contains("GWOs02","Os101")
    Global("GW0001Dos101","GLOBAL",1)
THEN
  RESPONSE #100
    SetGlobal("GWDos101","GW0000",1)
    SetGlobal("GW0001Dos101","GLOBAL",1)
    CloseDoor("Dos101")
    ContainerEnable("Os101",FALSE)
END

IF
  Global("GWDos102","GW0000",0)
  OR(2)
    !Contains("GWOs03","Os102")
    Global("GW0001Dos102","GLOBAL",1)
THEN
  RESPONSE #100
    SetGlobal("GWDos102","GW0000",1)
    SetGlobal("GW0001Dos102","GLOBAL",1)
    CloseDoor("Dos102")
    ContainerEnable("Os102",FALSE)
END
Quand tu ramasses des ossements au sol (ils sont dessinés sur la carte et inclus dans un container "invisible"), une porte "invisible" se ferme (les dessins des os disparaissent du sol) et le container n'est plus visible, ni accessible.

Posté : sam. 07 nov. 2015, 10:43
par Cocrane
OK, c'est noté. ^^

Ca me fait deux mots de plus connus. Au suivant!