Donner l'impression qu'un PNJ coupe un arbre
Ce jeu de scripts vous permet, avec quelques modifications, d'obtenir à peu près n'importe quel effet. Il fait aussi en sorte que le PNJ s'arrête quand un PJ arrive pour pouvoir lui parler.
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.
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à !
PS : 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.