Liladrielle cette méthode fonctionne bien pour une zone "optionelle" de type quête où un seul PJ (ou groupe de PJ) se rend à la fois. Si certains rentrent pendant que d'autres restent sur place et que d'autres sortent en même temps il faudra un traitement plus conséquent, par exemple avec un compteur comme cela a été mentionné.
C'est à ta charge de créer les PnJ et objets éventuels dans le OnEnter de la zone. Pour info voici celui que j'ai écrit mais ça ne t'aidera pas des masses j'en ai peur^^.
#include "nw_i0_generic"
void createpotion(object oPC)
{
object oPotion ;
oPotion = CreateItemOnObject("it_mpotion020", oPC) ;
DestroyObject(oPotion, 60.0) ;
}
void castinvis(object oPC)
{
effect eInvis = EffectInvisibility(INVISIBILITY_TYPE_NORMAL) ;
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eInvis, oPC, 300.0) ;
}
void main()
{
object oPC = GetEnteringObject() ;
object oToliviel ;
object oTanaria ;
object oLoignar ;
object oWPMidFight = GetWaypointByTag("WP_MIDFIGHT") ;
object oWPFight = GetWaypointByTag("WP_FIGHT") ;
object oWPFightImp = GetWaypointByTag("WP_FIGHTIMP") ;
object oWPFightDiantre = GetWaypointByTag("WP_FIGHTDEVIL") ;
object oDiantre1, oDiantre2, oImp;
string sDB = GetLocalString(oPC, "DBNAME") ;
int nFaction = GetCampaignInt(sDB, "FACTION") ;
object oObject;
if (!GetIsPC(oPC) || GetIsDM(oPC)) return ;
oDiantre1 = CreateObject(OBJECT_TYPE_CREATURE,"NW_DEVIL001", GetLocation(GetObjectByTag("WP_DIANTRE1")), TRUE) ;
oDiantre2 = CreateObject(OBJECT_TYPE_CREATURE,"NW_DEVIL001", GetLocation(GetObjectByTag("WP_DIANTRE2")), TRUE) ;
oImp = CreateObject(OBJECT_TYPE_CREATURE,"NW_IMP", GetLocation(GetObjectByTag("WP_IMP")), TRUE) ;
switch (nFaction) {
case 1:
oToliviel = CreateObject(OBJECT_TYPE_CREATURE,"pnj_toliviel", GetLocation(oPC), TRUE) ;
AssignCommand(oToliviel, ActionWait(2.0));
AssignCommand(oToliviel, ActionSpeakString("Des Diantrefosses! Tout est perdu ! Va, et accomplis ton destin pendant que je les retiens.", TALKVOLUME_WHISPER ));
AssignCommand(oToliviel, ActionCastFakeSpellAtObject(SPELL_INVISIBILITY, oPC)) ;
AssignCommand(oToliviel, ActionDoCommand(castinvis(oPC))) ;
AssignCommand(oToliviel, ActionMoveToObject(oWPMidFight, TRUE)) ;
AssignCommand(oImp, ActionWait(20.0));
AssignCommand(oImp, ActionMoveToObject(oWPFightImp, TRUE)) ;
AssignCommand(oDiantre1, ActionWait(25.0));
AssignCommand(oDiantre1, ActionMoveToObject(oWPFightDiantre, TRUE)) ;
break ;
case 3:
oTanaria = CreateObject(OBJECT_TYPE_CREATURE,"pnj_tanaria", GetLocation(oPC), TRUE) ;
AssignCommand(oTanaria, ActionWait(2.0));
AssignCommand(oTanaria, ActionSpeakString("Tiens tiens des Diantrefosses.. comme c'est intéressant. Je vais leur parler et toi dépêche toi de sauter dans ce trou avant qu'ils ne décident s'il faut te rôtir ou te faire bouillir dans la lave !" ));
AssignCommand(oTanaria, ActionCastFakeSpellAtObject(SPELL_INVISIBILITY, oPC)) ;
AssignCommand(oTanaria, ActionDoCommand(castinvis(oPC))) ;
AssignCommand(oTanaria, ActionForceMoveToObject(oWPMidFight, TRUE)) ;
AssignCommand(oTanaria, ActionForceMoveToObject(oWPFight, TRUE)) ;
AssignCommand(oTanaria, ActionWait(10.0));
AssignCommand(oTanaria, ActionSpeakString("Je suis Tanaria, grande prêtresse de Lolth et j'exige que vous me laissiez passer !")) ;
AssignCommand(oTanaria, ActionWait(15.0));
AssignCommand(oTanaria, ActionSpeakString("Tes paroles m'ont rendue furieuse ! TU VAS LE REGRETTER !")) ;
AssignCommand(oTanaria, ActionDoCommand(ChangeToStandardFaction(oTanaria, STANDARD_FACTION_DEFENDER))) ;
AssignCommand(oTanaria, ActionAttack(oImp)) ;
AssignCommand(oTanaria, ActionDoCommand( SetCommandable(TRUE) ));
AssignCommand(oTanaria, SetCommandable(FALSE));
AssignCommand(oTanaria, ActionDoCommand(DetermineCombatRound(oImp)));
AssignCommand(oImp, ActionWait(20.0));
AssignCommand(oImp, ActionForceMoveToObject(oWPFightImp, TRUE)) ;
AssignCommand(oImp, ActionWait(10.0));
AssignCommand(oImp, ActionDoCommand(SpeakString("Tanaria telemara ! Hihihihihihihihihi !"))) ;
AssignCommand(oImp, ActionDoCommand( SetCommandable(TRUE) ));
AssignCommand(oImp, SetCommandable(FALSE));
AssignCommand(oDiantre1, ActionWait(25.0));
AssignCommand(oDiantre1, ActionForceMoveToObject(oWPFightDiantre, TRUE)) ;
AssignCommand(oImp, ActionWait(7.0));
AssignCommand(oDiantre1, ActionDoCommand(SpeakString("Silence femelle !Tu n'entreras pas vivante dans le royaume de notre maitre !"))) ;
AssignCommand(oDiantre1, ActionDoCommand( SetCommandable(TRUE) ));
AssignCommand(oDiantre1, SetCommandable(FALSE));
break ;
case 2:
oLoignar = CreateObject(OBJECT_TYPE_CREATURE,"pnj_loignar", GetLocation(oPC), TRUE) ;
DelayCommand(6.0, AssignCommand(oLoignar, ActionSpeakString("Sacripan des Diantrefosses ! Bon, bois cette potion et cours pendant que je m'occupe d'eux.", TALKVOLUME_WHISPER )));
DelayCommand(6.1, createpotion(oPC)) ;
DelayCommand(12.1, AssignCommand(oLoignar, ActionMoveToObject(oWPMidFight, TRUE))) ;
DelayCommand(12.2, AssignCommand(oImp, ActionMoveToObject(oWPFightImp, TRUE))) ;
DelayCommand(12.3, AssignCommand(oDiantre1, ActionMoveToObject(oWPFightDiantre, TRUE))) ;
break ;
}
}