JeuxOnLineForumsPlusConnectés : 487 (sites) | 790 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > [Portes] Je te verrouille d'un coté mais tu ne l'es pas de l'autre. RSS
   
Répondre
Partager Outils Rechercher
Avatar de Angelounet
Angelounet
Alpha & Oméga
 
Avatar de Angelounet
 

[Portes] Je te verrouille d'un coté mais tu ne l'es pas de l'autre.

(oui oui j'ai encore un problème :roll: )

Voilà que ce soit dans 2 zones différentes ou dans la même zone, quand j'ai 2 portes avec une zone de transition entre les deux, et que j'en verrouille une, l'autre ne l'est pas, sachant que si j'ouvre l'une des deux, l'autre s'ouvre aussi, donc elles sont bien liées mais pas au niveau du verrouillage, il faut faire quelque chose de spécial? j'ai fouillé le forum et différents sites mais aucun ne parlaient de ça donc je pensais que ça devait marcher sans rien normalement

Enfin Merci ^^
Lien direct vers le message - Vieux
Avatar de MadCat
MadCat
Dauphin
 
Avatar de MadCat
 
Effectivement...
Effectivement, une porte verrouillée d'un côté ne l'est pas forcement de l'autre... c pas logique mais c'est comme ça

La solution est que lorsque tu verrouilles une porte il faut faire un
SetLocked(oDoor, TRUE) sur l'autre porte...

Maintenant si tu utilises la compétence "verrouiller" de ton PC tu va me demander où placer ce script ...et bien bonne question (je viens juste de me la poser !!!)

Je suis aussi intéressé de le savoir
__________________
MadCat
Lien direct vers le message - Vieux
Avatar de Angelounet
Angelounet
Alpha & Oméga
 
Avatar de Angelounet
 
je pensais effectivement à mettre ce genre de fonction dans le onlock de la porte et lui dire donc de locker la porte qui est liée, mais le problême c'est que cela reviendrait à faire ça pour toutes les portes en changeant les tags pour les lier entre elle ce qui est assez énorme donc je me demandais si il n'y avait rien d'autre à faire...
Lien direct vers le message - Vieux
BERNARD_JULIUS [[LH]]
Roi
 
Tu peux peut-être t'en sortir en stockant une variable locale dans chacune de tes portes (un script sur le onenter de ton module par ex) : cette variable locale est le string du tag de la porte qui lui est associée, et elle porte toujours le même nom...
Après tu n'as plus qu'a faire un ptit script sur le onlock et le onunlock de tes portes, mais au moins le script est toujours le même...
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Je trouve quand même bête que le lock ne se fasse pô entre deux portes liées... alors qu'une porte cassée d'un côté l'est aussi de l'autre
Lien direct vers le message - Vieux
Avatar de Angelounet
Angelounet
Alpha & Oméga
 
Avatar de Angelounet
 
Je trouve ça rageant vu qu'on vient de se poser la question sur un module contenant pas mal de porte et de zone et qu'il va falloir toutes les refaire

Angel *ni mappeur ni scripteur normalement mais qui va devoir s'y mettre sérieusement* Ounet
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Le mieux c'est encore d'adopter une convention pour les tags de tes portes qui permet de trouver la porte correspondante pour chaque, exemple les trois dernières lettres du tag de la zone de départ puis un "_" puis les trois dernières lettres du tag de la zone d'arrivée.

Ainsi tu peux totalement automatiser le processus et ça aide pour beaucoup d'autres choses.
Lien direct vers le message - Vieux
Avatar de Caarheim/Mougeot
Caarheim/Mougeot [Epsi]
Alpha & Oméga
 
Avatar de Caarheim/Mougeot
 
Je m etai fait 2 petits scripts generiques, sur le OnOpen et le OnClose pour les portes associées dans des zones differente mais je le trouve plus

En gros, ca fonctionne suivant le principe suivant:
_ les portes associées on le même tag + le tag de la zones de l autre porte.
Ex : 2 porte, une sur zone Toto et l autre sur zone Gnigni. leur tag sont respectivement "Trans3_Gnigni" et "Trans3_Toto". Le premier "_" sert de séparateur entre le tag des portes et le tag de la zone, donc les tag de porte ne peuvent pas comporter de "_".
_ Qd le Pj ferme ou ouvre une des portes, ca fait la meme chose sur l autre ( vi ^^ c le but du truc donc normal )
Ex : PJ ouvre la porte "Trans3_Gnigni", qui est dans la zone Toto. le script du OnOpen va garder la debut, cad "Trans3_" et coller derriere le tag de la zone ou se trouve Pj, ici "Toto", puis va ouvrir la porte "Trans3_Toto" dans la zone Gnigni

Ca marche plutot pas mal et c surtout tout bete

edit: Jedai a posté quand j etai en train d ecrire ^^ c la meme chose
__________________
http://ctprofiles.net/303223 [img]http://******************/caarheim/PA.gif[/img][img]http://******************/caarheim/buff.gif[/img] @2.29 de vitesse ... PAN PAN dans le ...
Lien direct vers le message - Vieux
Avatar de Gadjio
Gadjio
Alpha & Oméga
 
Avatar de Gadjio
 
Pour info, je les ai déjà postés je sais plus où mais valà les scripts de portes de Faltazia. Chaque modèle de porte possède les scripts en question quand il faut synchroniser deux portes "techniques" qui n'en sont qu'une d'un point de vue architectural (en cas de transition donc).

Il se pose cependant un problème gênant, surtout à trouver et débuguer. Le SetLocked comme le ActionTrucDoor appellent eux aussi les événements de la porte cible. Donc en gros si je lock A, le script va locker B, qui va réagir pour synchroniser A en la lockant, ce qui appellera le unLock à nouveau, et ainsi de suite. Souvent, pouf ça plante. Des fois, ça se contente d'ignorer l'action ou d'ouvrir-fermer la porte en boucle. Ca se corrige facilement, avec un flag qui bloque la deuxième tentative.

onClose : door_closeparent
Code PHP:
void main()
{
  if (
GetLocalInt(OBJECT_SELF"NoFeedBack"))
    
DeleteLocalInt(OBJECT_SELF"NoFeedBack");
  else
  {
    
object oSisterDoor GetTransitionTarget(OBJECT_SELF);
    
SetLocalInt(oSisterDoor"NoFeedBack"TRUE);
    
ActionCloseDoor(oSisterDoor);
  }

onOpen : door_openparent
Code PHP:
void main()
{
  if (
GetLocalInt(OBJECT_SELF"NoFeedBack"))
    
DeleteLocalInt(OBJECT_SELF"NoFeedBack");
  else
  {
    
object oSisterDoor GetTransitionTarget(OBJECT_SELF);
    
SetLocalInt(oSisterDoor"NoFeedBack"TRUE);
    
ActionOpenDoor(oSisterDoor);
  }

onLock : door_lockparent
Code PHP:
void main()
{
  if (
GetLocalInt(OBJECT_SELF"NoFeedBack"))
    
DeleteLocalInt(GetModule(), GetTag(OBJECT_SELF) + "NoFeedBack");
  else
  {
    
object oSisterDoor GetTransitionTarget(OBJECT_SELF);
    
SetLocalInt(oSisterDoor"NoFeedBack"TRUE);
    
SetLocked(oSisterDoorTRUE);
  }

onUnlock : door_unlockparent
Code PHP:
void main()
{
  if (
GetLocalInt(OBJECT_SELF"NoFeedBack"))
    
DeleteLocalInt(OBJECT_SELF"NoFeedBack");
  else
  {
    
object oSisterDoor GetTransitionTarget(OBJECT_SELF);
    
SetLocalInt(oSisterDoor"NoFeedBack"TRUE);
    
SetLocked(oSisterDoorFALSE);
  }


Dans la gamme, je laisse si besoin le script de l'objet invisible pour frapper à la porte. Il se place sur le seuil extérieur, est 'utilisable', 'intrigue', tagué "knock_TagDeLaPorteInterieure", avec le script suivant sur le onUse :

onUse : door_knock
Code PHP:
void main()
{
  
string oTag;
  
oTag GetTag(OBJECT_SELF);
  
object oTarget GetObjectByTag(GetStringRight(oTagGetStringLength(oTag) - 6));
  
AssignCommand(oTargetSpeakString("*Quelqu'un frappe.*"));
  
AssignCommand(oTargetPlaySound("as_cv_hammering2"));
  if (
GetArea(OBJECT_SELF) != GetArea(oTarget))
  {
    
AssignCommand(OBJECT_SELFPlaySound("as_cv_hammering2"));
  }

Lien direct vers le message - Vieux
Avatar de Angelounet
Angelounet
Alpha & Oméga
 
Avatar de Angelounet
 
Merci Gad pour les explications et les scripts, c'est sympa
Lien direct vers le message - Vieux
Avatar de Twist
Twist
Empereur
 
Avatar de Twist
 
Citation:
Provient du message de Angelounet
je pensais effectivement à mettre ce genre de fonction dans le onlock de la porte et lui dire donc de locker la porte qui est liée, mais le problême c'est que cela reviendrait à faire ça pour toutes les portes en changeant les tags pour les lier entre elle ce qui est assez énorme donc je me demandais si il n'y avait rien d'autre à faire...
Tu n'es pas obligé de reprendre tous les tags de tes portes. Dans la mesure ou tu as créé tes liens entre tes portes, il te suffit d'utiliser la fonction
Code PHP:
object oPorteOpposée=GetTransitionTarget(OBJECT_SELF); 
afin de retourner la porte qui est associée à la porte qui est en train de se faire fermer à clé. Il ne reste plus qu'à vérifier si la porte opposée est fermée, la fermer le cas échéant et lui donner un tour de clé avec un SetLocked.

Cette fonction va te permettre de créer un script générique que tu ne seras pas obligé de modifier pour chaque porte.
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > [Portes] Je te verrouille d'un coté mais tu ne l'es pas de l'autre.
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 09h27.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite