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

Répondre
Partager Rechercher
(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 ^^
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
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 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...
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
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.
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 http://membres.lycos.fr/caarheim/PA.gifhttp://membres.lycos.fr/caarheim/buff.gif @2.29 de vitesse ... PAN PAN dans le ...
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"));
  }

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.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés