Page 1 sur 1

[SCRIPT] Déclenchement de l'évènement sur un PNJ

Posté : sam. 01 avr. 2017, 09:10
par Cocrane
Je désire déclencher un évènement quelque soit la créature qui passe sur la zone.

Le script se déclenche uniquement si c'est une créature du groupe.
IF
Entered([ANYONE])
THEN
RESPONSE #100
OpenDoor("PS5")
END
Le code simple mais ça ne marche pas. :-(

J'ai essayé différentes configurations avec DLTCEP mais au passage d'un PNJ, la porte ne s'ouvre pas contraitement à une créature du groupe.

Posté : sam. 01 avr. 2017, 10:07
par Freddy_Gwendo
En général pour déclencher un message lorsque le groupe passe sur une zone, j'utilise ceci :

Code : Tout sélectionner

IF
  OR(4)
	Name("Info11",Myself)
	Name("Info12",Myself)
	Name("Info13",Myself)
	Name("Info14",Myself)
  OR(3)
	Range([PC],15)
	Entered([PC])
	IsOverMe([PC])
THEN
  RESPONSE #100
	DisplayStringHead(Myself,@2001002) // ~Ce bâtiment tombe en ruines. Il n'est pas prudent d'y pénétrer.~
	TriggerActivation(Myself,FALSE)
END

IF
  Name("Info01",Myself)
  OR(3)
	Range([PC],15)
	Entered([PC])
	IsOverMe([PC])
THEN
  RESPONSE #100
	DisplayStringHead(Myself,@2000002) // ~Lorsque vous arrivez sur le quai, votre attention est immédiatement attirée par les volutes de fumée qui s'en échappent. Le sol est jonché de cadavres de soldats et la puanteur est insoutenable.~
	TriggerActivation(Myself,FALSE)
END

IF
  Name("Info02",Myself)
  OR(2)
	Entered([PC])
	IsOverMe([PC])
THEN
  RESPONSE #100
	DisplayStringHead(LastTrigger,@2000003)	// ~Ce pavement en marbre a été totalement dévasté et ne contient plus que quelques gravats épars et des débris de pierres.~
	TriggerActivation(Myself,FALSE)
END

IF
  Name("Info03",Myself)
  OR(2)
	Entered([PC])
	IsOverMe([PC])
THEN
  RESPONSE #100
	DisplayStringHead(LastTrigger,@2000004)	// ~Tous ces cadavres mutilés, ce silence et ce port déserté... Un frisson de danger parcourt votre nuque. Quelque chose ici n'est pas normal.~
	TriggerActivation(Myself,FALSE)
END
Pas ailleurs, tu n'as pas besoin de cocher la case Walk : là encore, de mémoire, elle ne fonctionnait pas correctement dans BG2.

Enfin, à tout hasard : ce n'est pas le nom de la porte que tu dois inclure dans OpenDoor(), mais celui de son Identifiant. D'où l'intérêt de leur donner le même.

Édit : Fais aussi attention à l'utilisation de [ANYONE]. Si mes souvenir sont exacts, il me semble qu'il n'était pas présent dans tous les fichiers IDS et donc pas tout le temps reconnu par le moteur et que des mods l'ont ajouté. Essaie de le remplacer par [0] pour voir.

Je ne l'ai plus en tête, mais il me semble qu'un moins un script de BG2 permet de le faire. As-tu essayé une recherche de l'action OpenDoor avec NI ?

Après réflexion : assure-toi que ta porte est bien fermée.

Code : Tout sélectionner

IF
	IsOverMe([ANYONE])
	Global("MyVariable","MyMap",0)
	OpenState("PS5",FALSE)
THEN
	RESPONSE #100
		SetGlobal("MyVariable","MyMap",1)
//		Unlock("PS5") ==> Si ton passage secret est verrouillé.
		OpenDoor("PS5")
END

Posté : sam. 01 avr. 2017, 10:32
par Cocrane
Pas mieux avec [0].

Ca fonctionne bien si c'est un perso du groupe.

Rien ne se passe si c'est un PNJ.

Pour le moment, je n'ai pas testé ton code proposé.


Cocrane

Posté : sam. 01 avr. 2017, 10:52
par Freddy_Gwendo
Tu as essayé avec LastTrigger ? Ou tout simplement Range (LastTrigger,1) sans IsOverMe ?

Posté : lun. 03 avr. 2017, 18:01
par Cocrane
Bilan des essais (pour faire simple):

Entered réagit uniquement si c'est un PC qui passe sur la zone.

Isoverme réagit quelque soit la créature qui est sur la zone. Par contre, tant que la créature est sur la zone, le script se déclenche en boucle.

Ranged réagit quelque soit la créature et le script se déclenche en boucle tant que la créature est à la bonne distance.


Je n'ai pas trouvé le moyen de tester efficacement l'inverse de Hors zone avec Isoverme. Que je mette '!' ou pas le script se déclenche. Je voulais gérer une priorité à l'ouverture, vu que j'ai une zone qui provoque l'ouverture et une autre qui la ferme.

Conclusion, j'ai opté pour Ranged.

Cocrane