Bonjour drakan,
Je ne me suis jamais penché sur les déplacements aléatoires des PNJs. Il y a donc peut-être des manières plus simples de gérer tout ça mais en tout cas, ton idée d'activateur me semble assez facilement réalisable dans la mesure où tu connais d'avance les IDs des PNJs qui peuvent être concernés.
Comme toujours avec les scripts, on peut parvenir aux mêmes résultats de différentes manières mais en voici une qui me semble possible avec ton idée d'activateurs. Note que je ne l'ai pas testé et qu'il peut donc y avoir des ajustements à faire, par exemple dans la distance indiquée :
begin pasdeporteXX
if ( MenuMode == 1 )
return
elseif ( GetStandingActor == 0 )
return
endif
PlaySound, “ID_son_de_porte”
if ( GetDistance, ID_PNJ01 <= 10 )
ID_PNJ01->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif ( GetDistance, ID_PNJ02 <= 10 )
ID_PNJ02->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif ( GetDistance, ID_PNJ03 <= 10 )
ID_PNJ03->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif ( GetDistance, ID_PNJ04 <= 10 )
ID_PNJ04->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif ( GetDistance, ID_PNJ05 <= 10 )
ID_PNJ05->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif ( GetDistance, ID_PNJ06 <= 10 )
ID_PNJ06->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif ( GetDistance, ID_PNJ07 <= 10 )
ID_PNJ07->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif ( GetDistance, ID_PNJ08 <= 10 )
ID_PNJ08->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif ( GetDistance, ID_PNJ09 <= 10 )
ID_PNJ09->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif ( GetDistance, ID_PNJ10 <= 10 )
ID_PNJ10->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
endif
if ( GetDistance, ID_PNJ11 <= 10 )
ID_PNJ11->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif ( GetDistance, ID_PNJ12 <= 10 )
ID_PNJ12->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif...
....
....
end
Le principe : Si aucun acteur n'est sur l'activateur (PNJ ou PJ), le script ne va pas plus loin. Dans le cas contraire, il vérifie la distance des 40 PNJs avec l'activateur. Quand il en trouve un qui est dessus ou tout près, il le téléporte dans la cellule de destination prévue pour cet activateur. Il fait aussi un son de porte pour fignoler.
Pour ne pas faire des blocs contenant trop de "elseif", tu peux faire 4 blocs de 10 mais ce n'est pas forcément nécessaire (à vérifier).
Note : Avec ce système, il faut bien sûr un script local différent pour chaque activateur.
Comme il s'agit de scripts locaux, il ne fonctionneront que si le PJ est dans la cellule. Si tu veux que les PNJs présents dans une cellule ne soient pas les mêmes quand le PJ y retourne que quand il l'avait quittée, il faudra gérer ça avec un autre script mais c'est une autre histoire...
PS : Change le titre de ton sujet pour qu'il indique ce dont il traite stp car il ne concerne plus les fonctions de MWSE.