(Pb) Un Boss invoqué qui invoque lui-même d'autres créatures

Répondre
Partager Rechercher
Bonjour j'ai modifié un script initialement fait par jedaï, mais en le changant j'ai dut mal faire certaines choses.

Tout d'abord un petit script dans le On Used d'un levier :

Code PHP:

 void main()
{
  
effect eVis EffectVisualEffect(VFX_DUR_GHOSTLY_VISAGE);

  
location lLoc GetLocation(GetNearestObjectByTag("Spawncr_invo_slaadfor" ));
  
object oMonstre CreateObject(OBJECT_TYPE_CREATURE,"cr_invo_slaadfor",lLoc,TRUE) ;

  
ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD),lLoc);
  
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVis,oMonstre);

Le monstre de Resref = cr_invo_slaadfor apparait sur le point de passage = Spawncr_invo_slaadfor lorsqu'on utilise le levier


Ensuite un script d'appel à ne placer nulle part :


Code PHP:

//Script de Jedai modifie par Damonya

//script "zdm_boss_guerr03"
void Summon(string sTaglocation coffin_loc);
int Random(int nMaxInteger);

void main()
{
    
object oMobb OBJECT_SELF;
    
location lLoc GetLocationGetWaypointByTag"Spawncr_invo_slaadfor" ) );
    if( 
GetIsInCombatoMobb ) )
    {

        
ClearAllActions();
        
ActionCastFakeSpellAtLocationSPELL_SUMMON_CREATURE_IXlLoc );
        
ActionDoCommand(Summon("creature_yamon"lLoc) );
        
//change le délai ici
        
DelayCommand12.0fExecuteScript"zdm_boss_guerr03"oMobb ) );
    }
}
void Summon(string sTaglocation lLoc)
{
        
CreateObject(OBJECT_TYPE_CREATUREsTaglLoc);

Normallement ça permet au boss invoqué, d'invoquer lui-même une créature de Resref creature_yamon toutes les 12 secondes.

Enfin rajouter la fonction execute script dans le On PhysicalAttacqued de la créature qui a pour Resref cr_invo_slaadfor . ce qui donne :

Code PHP:

//::///////////////////////////////////////////////
//:: Default On Attacked
//:: NW_C2_DEFAULT5
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
    If already fighting then ignore, else determine
    combat round
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Oct 16, 2001
//:://////////////////////////////////////////////

#include "NW_I0_GENERIC"

void main()
{
    if(!
GetFleeToExit())
    {
        if(!
GetSpawnInCondition(NW_FLAG_SET_WARNINGS))
        {
            if(!
GetIsObjectValid(GetAttemptedAttackTarget()) && !GetIsObjectValid(GetAttemptedSpellTarget()))
            {
                if(
GetIsObjectValid(GetLastAttacker()))
                {
                    if(
GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL))
                    {
                        
//AdjustReputation(GetLastAttacker(), OBJECT_SELF, -100);
                        
SetSummonHelpIfAttacked();
                        
DetermineSpecialBehavior(GetLastAttacker());
                    }
                    else
                    {
                        if(
GetArea(GetLastAttacker()) == GetArea(OBJECT_SELF))
                        {
                            
SetSummonHelpIfAttacked();
                            
DetermineCombatRound();
                        }
                    }
                    
//Shout Attack my target, only works with the On Spawn In setup
                    
SpeakString("NW_ATTACK_MY_TARGET"TALKVOLUME_SILENT_TALK);
                    
//Shout that I was attacked
                    
SpeakString("NW_I_WAS_ATTACKED"TALKVOLUME_SILENT_TALK);
                }
            }
        }
        else
        {
            
//Put a check in to see if this attacker was the last attacker
            //Possibly change the GetNPCWarning function to make the check
            
SetSpawnInCondition(NW_FLAG_SET_WARNINGSFALSE);
        }
    }
    else
    {
        
ActivateFleeToExit();
    }
    if(
GetSpawnInCondition(NW_FLAG_ATTACK_EVENT))
    {
        
SignalEvent(OBJECT_SELFEventUserDefined(1005));
    }


 
ExecuteScript"zdm_boss_guerr03"OBJECT_SELF);


A mon avis j'ai dut me tromper quelque part, dans les deux derniers scripts mais où ?
Bah le problème il est que ça marche pas. Le boss n'invoque pas d'autres créatures.
Le problème il vient sûrement du script d'appel à ne placer nulle part, car je l'ai fait un peu moi-même et j'en suis pas sûr du tout.
Ou bien il va dans le dernier script ou j'ai rajouté au script par défaut du OnPhysicalAttacqued la ligne :
Code PHP:

ExecuteScript"zdm_boss_guerr03"OBJECT_SELF); 

L'OBJECT_SELF me parait pas bon dedans je crois.

Enfin a dire vrais je sais pas trop où est le problème.
Pas sur le premier script en tout cas.
Code PHP:

ActionCastFakeSpellAtLocationSPELL_SUMMON_CREATURE_IXlLoc );
ActionDoCommand(Summon("creature_yamon"lLoc) ); 
J'essairai bien de mettre un AssignCommand(oMobb,
devant les actions pour voir...
sinon j'essairai aussi d'enlever le ActionDoCommand et de faire juste l'appel de Summon...

voila ...
le "ActionDoComamnd" met l'appel "summon" dans la pile d'actions, autrement dit ca n'est pas fais quand le script arrive dessus, mais quand l'action précédente du streum est finie (le "fake spell" )

Et c'est là que le bas blesse, je crois, parce qu'il est occupé le boss, l'a d'autre chat à fouetter, des chats du genre armés et vindicatifs.
Donc moi j'essaireai (jess et ray ?) avec un

Code PHP:

ClearAllActions(1); 

là où il sert, parce que :

// - nClearCombatState: if true, this will immediately clear the combat state
// on a creature, which will stop the combat music and allow them to rest,
// engage in dialog, or other actions that they would normally have to wait for.

maintenant c'est p-e pas ca ^_^

Et le OBJECT_SELF est bon, tout du long on fais executer les scripts au Streum

Et il me semble que le "AssignCommand" ne sert qu'à assigner à des objets n'éxecutant pas le script une actions, donc si l'objets execute le script, pas besoin . . . je crois
Code PHP:


//Script de Jedai modifie par Damonya et Slay 
//script "zdm_boss_guerr03" 
void Summon(string sTaglocation coffin_loc); 
int Random(int nMaxInteger); 

void main() 

    
object oMobb OBJECT_SELF
    
location lLoc GetLocationGetWaypointByTag"Spawncr_invo_slaadfor" ) ); 
    if( 
GetIsInCombatoMobb ) ) 
    { 

        
ClearAllActions(); 
        
ActionCastFakeSpellAtLocationSPELL_SUMMON_CREATURE_IXlLoc ); 
         
AssignCommand(GetArea(oMobb), Summon("creature_yamon"lLoc) ); 
        
//change le délai ici 
        
AssignCommand(GetArea(oMobb), DelayCommand12.0fExecuteScript"zdm_boss_guerr03"oMobb )) ); 
    } 

void Summon(string sTaglocation lLoc

        
CreateObject(OBJECT_TYPE_CREATUREsTaglLoc); 

Voila c'était ça en fait qu'il fallait faire. merci Slay pour la correction
pour Drak Valer : c'etait pas loin du tout de ce que tu as proposé
pour Reyan : j'ai pas essayé avec le clearallaction(1). Tu crois que c'est encore mieux ? en effet le but c'est aussi que le boss de départ s'arette de se battre pour regarder sa créature invoqué combattre le Pj comme avec un mage.
Il lance le sort tout de suite ? Parce qu'en théorie il devrait aoir du mal à arrêter d'attaquer . . . fin bon à ce que j'en sais

Et je vois pas l'interêt d'assigner le delaycommand à la zone . . . puisque executescript n'est pas une action entré dans la pile, donc pas de pb si il est en combat, et qu'il assign déjà le script au mob . . .

Et là il y a pas vraiment de raison sinon la chance que la création du monstre interviennent juste après le "FakeSpell", donc ba ca peut rendre bizarre nan ?

T'as essayé avec le ClearAllAction(TRUE) ?

rq : la déclaration de la fonction RandomTruc est inutil et ne renvoit à rien ^_^
Répondre

Connectés sur ce fil

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