utilité de UserDefined

Répondre
Partager Rechercher
Bonjour tout le monde !

Voilà j'ai une question qui me tarode l'esprit, la bougresse
Si j'ai bien compris, dans le OnSpawn d'une créature, on peut libérer des Flags afin de mettre des scripts sur le UserDefined Event.

Pour cela, on utilise le SetSpawnInCondition (NW_FLAG_XXX_EVENT), et selon le cas, on remplace le XXX par PERCIEVE, ATTACK, DAMAGED, etc..

Cela permet ensuite de mettre un autre script dans le UserDefined Event et faire que la créature exécute ledit script selon tel ou tel condition (si elle voit un PJ, si elle est attaquée par un PJ)..

Bref ma question est : vu que ce genre de script peut aussi être mis dans les autre event de la créature, le UserDefined fait pas un peu doublon ? quelle est son avantage par rapport à un autre script placé dans l'onglet de la créature exactement ?

Merci d'avance pour vos réponses
__________________
http://img91.imageshack.us/img91/9666/yingyangwm8jt3.gif
http://simaon.free.fr/
Ca évite de modifier les scripts génériques hormis le OnSpawn. Cela dit je te conseille de modifier le script OnSpawn par défaut pour y soumettre le déclenchement des SignalEvent à une variable que tu places à TRUE pour le lancer et à FALSE pour pas la lancer. Ca évite comme ça de modifier le script OnSpawn pour lancer un UserDefinedEvent.

Je sais pas si je suis clair...
Comme un petit schéma vaut mieux qu'un long discours, j'ai fait ces modifs dans le script OnSpawn de mon IA générique :

Code PHP:

// ***** CUSTOM USER DEFINED EVENTS ***** /


    /*
      If you uncomment any of these conditions, the creature will fire
      a specific user-defined event number on each event. That will then
      allow you to write custom code in the "OnUserDefinedEvent" handler
      script to go on top of the default NPC behaviors for that event.

      Example: I want to add some custom behavior to my NPC when they
      are damaged. I uncomment the "NW_FLAG_DAMAGED_EVENT", then create
      a new user-defined script that has something like this in it:

      if (GetUserDefinedEventNumber() == 1006) {
          // Custom code for my NPC to execute when it's damaged
      }

      These user-defined events are in the range 1001-1007.
    */

    // * Fire User Defined Event 1001 in the OnHeartbeat
    // *
    
if(GetCreatureFlag(OBJECT_SELF"LAUNCH_UDE_HEARTBEAT") == TRUE)
    {
        
SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT);
    }

    
// * Fire User Defined Event 1002
    // *
    
if(GetCreatureFlag(OBJECT_SELF"LAUNCH_UDE_PERCEIVE") == TRUE)
    {
        
SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT);
    }
    
// * Fire User Defined Event 1005
    // *
    
if(GetCreatureFlag(OBJECT_SELF"LAUNCH_UDE_ATTACK") == TRUE)
    {
        
SetSpawnInCondition(NW_FLAG_ATTACK_EVENT);
    }
    
// * Fire User Defined Event 1006
    // *
    
if(GetCreatureFlag(OBJECT_SELF"LAUNCH_UDE_DAMAGED") == TRUE)
    {
        
SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT);
    }
    
// * Fire User Defined Event 1008
    // *
    
if(GetCreatureFlag(OBJECT_SELF"LAUNCH_UDE_DISTURBED") == TRUE)
    {
        
SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT);
    }
    
// * Fire User Defined Event 1003
    // *
    
if(GetCreatureFlag(OBJECT_SELF"LAUNCH_UDE_ECR") == TRUE)
    {
        
SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT);
    }
    
// * Fire User Defined Event 1004
    // *
    
if(GetCreatureFlag(OBJECT_SELF"LAUNCH_UDE_DIAL") == TRUE)
    {
        
SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT);
    } 
Voilà, c'est très con, mais ça évite d'avoir 10 000 OnSpawns différents.

Donc si tu veux que ta créature lance l'évenement OnPerceive dans le OnUserDefiniedEvent de la créature, dans l'onglet variable tu mets une variable de type INT à TRUE (==1) nommée "LAUNCH_UDE_PERCEIVE"

[EDIT] Si un modo passe par là, les balises PHP ne tiennent pas compte de ce qu'il y a comme commentaires entre / * * / à l'intérieur d'elles c'est normal ?
EDIT 2 : Apparemment, ça en tient pas compte non plus dans un texte sans les balises...
Bon après quelques réflexions, c'est vraiment utile ce userdefined.

Avec la fonction SignalEvent(oObject, nEvent) on peut vraiment s'amuser.
Par exemple, vous ouvrez une porte, vous envoyez un "message" à un PNJ avec l'event n°264 (par exemple), et ce dernier va exécuter les script UserDefined spécifique
avec un contrôle
Code PHP:

 if (EventUserDefined (264)==TRUE

le pnj va donc pouvoir se retourner vers la porte, parler au PJ, s'assoir, etc bref c'est génial pour l'interactivité


(d'ailleurs moi ma première application c'est quand un joueur va dévérouiller / désarmer / ouvrir un coffre tranquillement devant le PNJ mais shuut je sais que y'en a qui traînent sur le forum )

Je mettrai plus tard les débuts des codes afin de donner des exemples à ceux qui débutent
__________________
http://img91.imageshack.us/img91/9666/yingyangwm8jt3.gif
http://simaon.free.fr/
Répondre

Connectés sur ce fil

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