Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > [Script] b没cheron b没cheronnant
[Script] b没cheron b没cheronnant
Par Daynos le 14/10/2002 脿 12:32:20 (#2332682)
Cet exemple s'applique 脿 un PNJ pour qu'il "attaque" un arbre pour donner l'illusion qu'il le coupe, mais avec quelques modifs on peut appliquer ce qu'on veut comme effet.
Le but 茅tant que le b没cheron arr锚te son boulot quand le joueur approche, afin de pouvoir lui parler, et qu'il recommence 脿 couper l'arbre apr猫s son d茅part.
D'abord, cr茅er un PNJ, si possible avec une hache :D.
Pour un b么 narbre, j'ai pris le tileset forest et comme les arbres sont des tiles qu'on ne peut pas "tagger", j'ai pos茅 dessus un "InvisibleObject" que le b没cheron attaquera.
Autour du PNJ, cr茅er un trigger qui d茅limitera la zone dans laquelle le joueur p茅n茅trera et arr锚tera en m锚me temps le boulot du b没cheron.
Voil脿 les scripts 脿 mettre :
Sur le Trigger :
- dans OnEnter :
void main()
{
object oPC;
oPC=GetEnteringObject();
SetLocalInt(oPC,"InZone",1);
}
- Dans OnExit :
void main()
{
object oPC;
oPC = GetExitingObject();
SetLocalInt(oPC,"InZone",0);
}
Sur le PNJ :
Dans OnPerception :
void main()
{
if(GetIsPC(GetLastPerceived()))
{
SignalEvent(OBJECT_SELF,EventUserDefined(200));
}
}
- Dans OnUserDefined :
void main()
{
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC );
switch(GetUserDefinedEventNumber())
{
case 200:
{
if(!IsInConversation(OBJECT_SELF) && GetLocalInt(oPC,"InZone") == 0)
{
ActionAttack(GetNearestObjectByTag("InvisibleObject"));
DelayCommand(12.0,ClearAllActions());
DelayCommand(24.0,SignalEvent(OBJECT_SELF,EventUserDefined(200)));
}
else
{
DelayCommand(12.0,SignalEvent(OBJECT_SELF,EventUserDefined(200)));
}
}
}
}
Voil脿 !
EDIT : il est 脿 noter qu'on ne peut pas parler au PNJ tant qu'il ne s'est pas mit en "mode repos" (dans mon cas, il repose sa hache sur son 茅paule). Si le PNJ renvoie la phrase "object is busy", il suffit d'attendre un peu que son attitude ou sa posture change pour pouvoir lui parler.
JOL Archives 1.0.1
@ JOL / JeuxOnLine