Page 1 sur 1

Comment ne téléporter que les PJ présents dans une map d'intérieur ?

Posté : mar. 16 oct. 2018, 16:26
par Luren
Je suis en train de bosser sur une map "parallèle" à une version existante d'une map originale d'IWD2 (Targos, AR1100). Il s'agira d'une version avec des bâtiments restaurés : nouvelles portes, nouvelles anims... plutôt que de tout "coller" via des DOORS ou des anims sur une map déjà passablement chargée, j'ai préféré en faire une seconde. Selon l'avancement dans le jeu on sera donc balancé vers l'une où l'autre de ces maps d'extérieur. Le truc c'est que je voulais conserver les maps d'intérieurs (bâtiments) existantes. Du coup, lorsqu'on sort des bâtiments, il a été nécessaire de faire un script, attaché à la Travel zone, pour renvoyer les PJ dans la bonne map de Targos.
J'ai dans un premier temps voulu utiliser

Code : Tout sélectionner

IF
  Clicked([PC])
  Global("AR1150_active","GLOBAL",1)
THEN
  RESPONSE #100
    MoveGlobal("AR1150",Player1,[430.1080])
    MoveGlobal("AR1150",Player2,[430.1080])
    ...
mais sous outre que ce n'est pas sélectif (comment savoir quels PJs sont entrés dans le bâtiment et quels PJ sont restés dehors ?), je n'arrive pas redonner le focus aux PJs.

Je suis donc passé par une cutscene découpée en deux temps :
Le script attaché à la Travel Zone de la map d'intérieur :

Code : Tout sélectionner

IF
  Clicked([PC])
  Global("AR1150_active","GLOBAL",1)    
THEN
  RESPONSE #100
    CutSceneId(Myself)
    StartCutSceneMode()
    ClearActions(Player1)
    ClearActions(Player2)
    ClearActions(Player3)
    ClearActions(Player4)
    ClearActions(Player5)
    ClearActions(Player6)
    MultiPlayerSync()
    EndCutSceneMode()
    StartCutScene("LUA1150a")
END
Et la CutScene (LUA1150a.bcs) :

Code : Tout sélectionner

IF
  True()
THEN
  RESPONSE #100
    CutSceneId(Player1)
    LeaveAreaLUA("AR1150","",[430.1080],12)
 END

IF
  True()
THEN
  RESPONSE #100
    CutSceneId(Player2)
    LeaveAreaLUA("AR1150","",[430.1080],12)
END

...
Ça marche nickel... sauf qu'évidemment les 6 PJ sont transportés. Je n'arrive pas à faire en sorte que seuls les PJs présents dans la map d'intérieur (AR1107 dans mon test) soit sélectionnés et téléportés.
J'ai essayé avec les trigger CurrentAreaIs(player1,1107), Range, NearLocation... mais aveupas...

Si vous avez une idée... :dash3:

Posté : mar. 16 oct. 2018, 17:30
par Freddy_Gwendo
Tu te compliques grandement la vie : jette un œil ici. En gérant les cartes extérieures auxquelles tu as accès avec une variable globale (Entree = 1, 2, 3...) et en appliquant la méthode indiquée non pas à la carte extérieure, mais à la carte intérieure, le tour est joué !

Seuls les persos présents dans la carte intérieure passeront dans la carte extérieure, quelle qu'elle soit.

Posté : mar. 16 oct. 2018, 18:49
par Luren
Bon sang mais c'est bien sûr ! Il suffisait de créer une seconde sortie dans la map d'intérieur, puis d'utiliser l'action TriggerActivation et de basculer sur une sortie ou l'autre en fonction d'une variable :

Code : Tout sélectionner

// activation de la sortie vers la nouvelle map
IF
    Global("AR1150_exit","GLOBAL",1)
THEN
    RESPONSE #100
        TriggerActivation("To1100",FALSE)
        TriggerActivation("To1150",TRUE)
END

// activation de la sortie vers la map d'origine
IF
    Global("AR1150_exit","GLOBAL",0)
THEN
    RESPONSE #100
        TriggerActivation("To1100",TRUE)
        TriggerActivation("To1150",FALSE)
END
Merci !

Posté : mar. 16 oct. 2018, 18:59
par Freddy_Gwendo
Il manquerait plus que tonton Freddy se décarcasse à écrire des tutos longs comme le bras pour des prunes ! :p