Ce n'est pas forcément évident il faut utiliser des Waypoint numérotés et un script récurrent. Dans cette exemple tirée d'une célèbre campagne récente
, le PNJ guide le PJ suivant un itinéraire défini par 4 Waypoints.
Quand le PNJ arrive au Waypoint suivant, il attend. Dès que le PJ arrive suffisamment près le PNJ se dirige vers le Waypoint suivant. Quand il atteint le dernier il le signale.
Le script, attaché au PNJ, utilise 3 variables locales attachées au PNJ : IsArrived, IsWaiting et NWP. NWP donne le N° du Waypoint suivant. Le tag du Waypoint suivant est calculé sous la forme "WP_walk_"+IntToString(NWP).
Le mouvement est déclenché par l'instruction
ActionMoveToLocation.
Désolé pour les commentaires en anglais, mais il faut penser aussi aux modeurs non francophones. En espérant que ça aide.
// move Ulwe according to PC movements. Recurrent attached to Ulwe.
const int MAXWAYPOINTS = 4;
const string NWP = "NWaypoint";
void main()
{
object oUlwe = OBJECT_SELF;
if (GetLocalInt(oUlwe, "IsArrived")) // already arrived, execute default and exit
{
ExecuteScript("nw_c2_default1", oUlwe);
return;
}
float fDistance = GetDistanceBetween(oUlwe, GetFirstPC());
string sWP;
int n;
if (GetLocalInt(oUlwe, "IsWaiting")) // Ulwe is waiting for the PC
{
if (fDistance < 2.1f) // if PC close
{
SetLocalInt(oUlwe, "IsWaiting", 0); // no more waiting
n = 1 + GetLocalInt(oUlwe, NWP); // next waypoint to reach
SetLocalInt(oUlwe, NWP, n);
if (n <= MAXWAYPOINTS) // not yet arrived, move Ulwe to the next waypoint
{
sWP = "WP_walk_"+IntToString(n);
AssignCommand(oUlwe, ActionMoveToLocation(GetLocation(GetWaypointByTag(sWP))));
SpeakString("Suis moi.");
}
else // arrived
{
SetLocalInt(oUlwe, "IsArrived", 1);
SpeakString("Nous sommes arrivés, regardes.");
}
}
}
else // Ulwe is moving
{
sWP = "WP_walk_"+IntToString(GetLocalInt(oUlwe, NWP)); // WP to reach
SetLocalInt(oUlwe, "IsWaiting", (GetDistanceBetween(oUlwe, GetObjectByTag(sWP)) < 1.1f)); // start waiting if close enough
}
}
Par contre si tu veux simplement déplacer un PNJ selon un chemin répété infiniment (comme pour une patrouille), c'est beaucoup plus simple.
Positionnes les Waypoijnt sur la carte. Ensuite sélectionnes les tous ensemble, puis Click droit/Céer Groupe de Waypoints (ou un truc de ce genre).
Donnes un nom par exemple "MonTrajet", il va les appeler "WP_MonTrajet_01" .... "WP_Montrajet_nn". Il te suffira de tagger tous les PNJ que tu souhaites "MonTrajet", ils emprunteront automatiquement l'itinéraire indéfiniment (une fois arrivés au dernier ils reviennent au premier)