onperceive entre NPC

Répondre
Partager Rechercher
Bonjour à tous !
Voila je suis en train de scripter un petit jeu de cache cache pour animer les enfants d'un village. Seul hic le "chasseur" ne voit pas sa "proie". Ma question est la suivante : est-ce que l'événement onperveive fonctionne entre NPC ?
Je ne peux pas vous mettre le code, je suis au boulot ... mais dés que j'ai cinq minutes j'éditerais ce post. Grosso modo :
Code PHP:

 //dans le onUserDefined

void main()
{

  
int nPlayerNumber 5;
  switch(
GetUserDefinedEventNumber())
     {
     case 
1001// Appele par OnHeartbeat
     
{
       
object oSelf OBJECT_SELF;
        
object oStake GetObjectByTag("MH_STAKE");
        
object oHidingPlace;
        
int nHunter GetLocalInt(oSelf"MH_Hunter");
        
int nCatched GetLocalInt(oSelf"MH_Catched");
        
int nStep GetLocalInt(oSelf"MH_Step");
        
int i GetLocalInt(oSelf"MH_NbCachette");
        
oHidingPlace GetObjectByTag("MH_HIDINGPLACE");



        
// Debug

        
AssignCommand (OBJECT_SELF,
                        
SpeakString("DEBUG "+" Step: "+IntToString(nStep)+
                                        
" i: "+IntToString(i)+
                                        
" tag : "+GetTag(GetLastPerceived())+
                                        
" name : "+GetName(GetLastPerceived())+
                                        
"  catched : "IntToString(nCatched)

                                        ,
                        
TALKVOLUME_SHOUT));

        
// Fin debug
        
switch(nStep)
        {
            case 
0:     // Etape d'initialisation: tout le monde au piquet
            
{
                if (
GetDistanceToObject(oStake) > 1.0f && nHunter==1)
                {
                    
AssignCommand (OBJECT_SELFActionMoveToObject(oStake,TRUE,1.0));
                }

                if  (
GetDistanceToObject(oStake) < 2.0f && nHunter==1)
                {
                    
AssignCommand (OBJECT_SELFActionSpeakString("Un..."TALKVOLUME_SHOUT));
                    
DelayCommand (0.5ActionSpeakString("Deux..."TALKVOLUME_SHOUT));
                    
DelayCommand (1.0ActionSpeakString("Trois..."TALKVOLUME_SHOUT));
                    
DelayCommand (1.5ActionSpeakString("Quatre..."TALKVOLUME_SHOUT));
                    
DelayCommand (2.0ActionSpeakString("Cinq..."TALKVOLUME_SHOUT));
                    
DelayCommand (2.5ActionSpeakString("Six..."TALKVOLUME_SHOUT));
                    
DelayCommand (3.0ActionSpeakString("Sept..."TALKVOLUME_SHOUT));
                    
DelayCommand (3.5ActionSpeakString("Huit..."TALKVOLUME_SHOUT));
                    
DelayCommand (4.0ActionSpeakString("Neuf..."TALKVOLUME_SHOUT));
                    
DelayCommand (4.5ActionSpeakString("Et dix !"TALKVOLUME_SHOUT));
                    
nStep 1;
                    
SetLocalInt (OBJECT_SELF"MH_Step"nStep);
                }
            break;
            }

            case 
1:       // Etape 1 : l'un compte pendant que les autres se cachent
            
{
                if ( 
GetLocalInt(OBJECT_SELF"MH_EnCours")==FALSE)
                {
                    
AssignCommand (OBJECT_SELFActionMoveToObject (oHidingPlaceTRUE1.0f));

                    
SetLocalInt(oSelf"MH_EnCours"TRUE);
                }
                if ( 
GetLocalInt(OBJECT_SELF"MH_EnCours")==TRUE && GetDistanceToObject(oHidingPlace) < 2.0f )
                {
                    
AssignCommand (OBJECT_SELFActionRandomWalk());
                    
AssignCommand (OBJECT_SELFActionSpeakString("Mais ou sont ils ?"TALKVOLUME_SHOUT));
                    
SetLocalInt(oSelf"MH_EnCours"FALSE);
                    
SetLocalInt(oSelf"MH_NbCachette", ++i);
                }
            break;
            }
// fin case 1
        
// fin switch
        
break;
     }
// fin du case 1001



     
case 1002// Appel par OnPerception
     
{

        
object oStake GetObjectByTag("MH_STAKE");

        if ( (
GetLocalInt(OBJECT_SELF,"MH_Step")==1) && (GetLocalInt(OBJECT_SELF,"MH_Hunter")==1) )
        {
            
object oNoticed GetLastPerceived();
            if ( 
GetLastPerceptionSeen() && GetIsObjectValid(oNoticed) && GetTag(oNoticed)=="MH_PLAYER")
            {
                
//ClearAllActions();

                
int nCatched GetLocalInt(OBJECT_SELF"MH_catched")+1;
                
SetLocalInt(oNoticed"MH_Catched"nCatched);
                
SetLocalInt (OBJECT_SELF"MH_Catched"nCatched);
                
string sNoticed GetName (oNoticed);
                
AssignCommand(OBJECT_SELFSpeakString("Vu ! Je t'ai trouve"+sNoticed+" !"TALKVOLUME_SHOUT));
                
AssignCommand(oNoticedActionMoveToObject(oStake,TRUE,1.0) );
                if (
nCatched == (nPlayerNumber-1))
                    
SetLocalInt (OBJECT_SELF"MH_Step"0);

            }
        }
        break; 
J'édite pour faire remonter le message... Si vous avez besoin de plus d'infos n'hésitez pas
Une chose est sure : le OnPErceive fonctionne avec tout ce qui est proche a entendre ou a voir



Tu devrait essayer avec autre chose que "OBEJECT_SELF", deja

(bon, je sais que tu restitue de tete Mais pour corriger, il faut le script )
Question
2eme interrogation
Est-ce que l'événement onPerceive fonctionne si le chasseur a déjà aperçu ses proies auparavant ?
Pour le OBJECT_SELF, je vois pas de problème à première vue
me semble que c " qd il rentre ds la zone de perception et qu'on le capte" la premièer fois qu'on le voit, si on le voit plus un moment, ca peut redéclencher mais bon c detête aussi, j'avais lu ca ds un des tut celui qui parle des evts

d'ailleur, il est déclenché deux fois, qd on voit et qd on entend, d'où un jeu possible sur les GetLastPerceptionSeen et GetLastPerceptionHeard

enfin je crois ^_^

Citation :
Liste des évènements des créatures. (Creature event)
Evènement: OnPerception, déclenché par: quelque chose qui entre dans la zone de perception de la créature.
Ca ne veut pas dire que la créature entend ou voit quelque chose…mais juste quand c’est possible pour lui de la percevoir. Qu’est ce qu’il a déclenché? Utilisez GetLastPerceived() pour renvoyer la dernière créature percus. (qu’elle soit encore en vue ou non).
Aussi utilisé dans: GetLastPerceptionHeard() renvoie TRUE ou FALSE selon que le dernier objet perçu ai été entendu ou non, , GetLastPerceptionInaudible() renvoie TRUE ou FALSE selon que le dernier objet perçu soit devenu inaudible ou non, , GetLastPerceptionSeen() idem que GetLastPerceptionSeen() pour la vue, GetLastPerceptionVanished() renvoie TRUE ou FALSE selon que l’objet soit encore visible ou non. Une chose dont il faut se servir : Toutes les commandes ci dessus sont en rapport uniquement avec le OnPerception event. Ne les utilisez pas n’importe où.
Qu’est ce que fait le script d’IA par défaut ? L’IA générique de OnPerception dit en priorité à la créature de se mettre en mode recherche si un ennemi disparaît subitement, puis de l’attaquer dès qu’elle réapparaît.
c écrit
hop it canne help
Angry
desespéré
c'est incroyable j'ai fait du "débuggage" et le perso chasseur détecte bien les autres joueurs mais le script onperceive ne se déclenche pas à tout les coups...
un conflit est il possible entre le onheartbeat et le onperceive
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés