JeuxOnLineForumsPlusConnectés : 743 (sites) | 1353 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > onperceive entre NPC RSS
   
Répondre
Partager Outils Rechercher
Avatar de talendil
talendil
Roi
 
Avatar de talendil
 
Question

onperceive entre NPC

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
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
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 )
Lien direct vers le message - Vieux
Avatar de talendil
talendil
Roi
 
Avatar de talendil
 
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
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
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
Lien direct vers le message - Vieux
Avatar de talendil
talendil
Roi
 
Avatar de talendil
 
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
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > onperceive entre NPC
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 14h56.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite