OnHit

Répondre
Partager Rechercher
Une possibilité est d'avoir un script dans le OnDamage des cibles potentielles. On peut tester le type de dommage et en reconnaître un particulier. Dans cet exemple tiré de Sarmates!, si un dommage énergie négative est reconnu, la cible est assommée.

Code PHP:

// Knock down the adversary if hit by the right ammunition. 

void main()
{
    
object oSoldier OBJECT_SELF;
    
effect eKnock EffectKnockdown();
    
    if (
GetDamageDealtByType(DAMAGE_TYPE_NEGATIVE)>0)
    {
        
ApplyEffectToObject(DURATION_TYPE_TEMPORARYeKnockoSoldier14400.0f);
        
ChangeFaction(oSoldierGetObjectByTag("sirwan"));    // set to neutral (puzzled for a long ... time)
        
return;
    }      

Bonne idée comme alternative

Cela dit je préfèrerais récupérer l'evènement OnHitCast d'un item, vu que il devra s'executer sur pas mal d'objects différents (Creatures, plaçables, portes, ...)

L'idée finale est de réaliser des armes intelligentes, un peu comme Lilarcor pour ceux qui connaissent Baldur's Gate

Par exemple si tu tapes contre un plaçable/porte, l'arme va dire "Si tu veux te débarasser de moi, c'est pas en me tapant contre un bout de bois que tu y arriveras !"
Ou contre une créature "J'aime sentir le sang couler le long de ma lame !"
L'exemple est certes sur des créatures mais le OnDamage est disponible aussi pour les portes et les plaçables.

Pour un évènement de type sort GetSpellId() et/ou GetSpellCastItem() me semble intéressants pour répondre à ton souci.
Le truc c'est que sur le module, il y a déja plusieurs miliers de plaçables & portes utilisables, éparpillés sur une bonne centaine de maps.
Du coup je vais pas m'amuser à mettre mon script pour générer des OnHitCast sur chaque elements du module.

J'avais déja essayé de récupérer le OnHitCast via un spellhook, et celui ci n'était jamais éxécuté...
Cependant ça fait quelques mois, alors je recommencerais ce soir ou demain, mais je suis assez pessimiste là dessus :/
Il ne reste pas la moindre trace d'Ensenric (HotU) dans Nwn2 ?

Ils ont repris pas mal de trucs du premier Nwn, alors il y a peut être encore quelques petits scripts qu'ils avaient pu faire pour Ensenric quelque part dans le 2. Ou, au pire, aller fouiller dans les scripts du 1 pour les reprendre et les adapter au 2.

Ça me paraît une bonne solution plutôt que de tout refaire de zéro, surtout que tu sembles tourner en rond.
Tu peux essayer d'utiliser un script "tagbased" de la forme i_tagarme_hc.
Il faut que les scripts "tagbased" soient autorisés dans le script de chargement du module :


Code:
SetModuleSwitch (MODULE_SWITCH_ENABLE_TAGBASED_SCRIPTS, TRUE);
     
SetModuleSwitch (MODULE_SWITCH_ENABLE_SEPERATE_ITEM_SCRIPTS, TRUE);
 
if (GetModuleSwitchValue (MODULE_SWITCH_ENABLE_TAGBASED_SCRIPTS) == TRUE)
    {         
         SetUserDefinedItemEventPrefix("i_");
    }
Il suffit de donner la propriété à l'arme "sort déclenché au touché : pouvoir unique (onhit)", le niveau n'a pas d'importance.
Et de faire un script avec pour nom : i_tagarme_hc


Par exemple :


Code:
void main()
 {
     object oItem = GetSpellCastItem();  
     object oSpellOrigin = OBJECT_SELF ;
     object oSpellTarget = GetSpellTargetObject();
      
     SendMessageToPC(GetFirstPC(),"Marre des cadences infernales moi, je me barre.");
     DestroyObject(oItem);
 }
Répondre

Connectés sur ce fil

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