Déclencheur avec un sorts

Répondre
Partager Rechercher
Bonjour à tous,

J'essaye de créer un déclencheur qui balance un sort sur le premier qui rentre dedans.
Simplement, ça ne marche pas.
Au passage, y a t'il un outil prévu pour piéger qq chose avec n'importe quel spell ? (Pcq s'il existe je l'ai pas trouvé)

Voici donc le script que j'ai essayé mais je pense que c'est le GetLastClosedBy qui ne doit pas être correct.

Citation :
void main()
{
object oPC = GetLastClosedBy();
int cSpell = SPELL_DISPEL_MAGIC;
int bCheat = 1;
int bInstantSpell = 1;
{
ActionCastSpellAtObject(cSpell, oPC, bCheat, bInstantSpell);
}
}
Je croyais aussi Elmo, mais l'autre jour j'ai fais lancer "boule de feu" à une armoire... Musazai tu le mets où ton script (quel slot)? Qu'appelles-tu un déclancheur? Un trigger (les trucs que l'on dessine par terre) ou un plaçable (mobilier) ?
Ouep, les plaçables peuvent lancer des sorts.
Mais les déclencheurs, j'ai des doutes.

Cependant, la question de Sire Pom-pom est définitivement perspicace parceque si tu parle vraiment d'un déclencheur (= trigger = truc qu'on dessine sur le sol) le GetLastClosedBy(à n'est effectivement pas du tout à sa place.

En fait pour récupérer un objet qui rentre dans un trigger, on utilise GetEnteringObject().
Oui, je parlais d'un trigger,
Je l'avais mis ds le OnEnter.

En attendant, j'ai essayé sur un plaçable (un gong ) avec ce script :

Citation :
void main()
{
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);
string sSoundName = "as_cv_bell2";
if (GetIsObjectValid(oPC) == TRUE && GetDistanceToObject(oPC) < 10.0)
{
int cSpell = SPELL_MORDENKAINENS_DISJUNCTION;
int bCheat = 1;
int bInstantSpell = 1;
PlaySound(sSoundName);
ActionCastSpellAtObject(cSpell, oPC, bCheat, bInstantSpell);
}
}
Par contre, j'ai du augmenter de version de dispel (jusqu'à la disjonction) et même là ça ne marche pas. Je vois bien le sort se lancer mais il ne dissipe pas une bête potion d'invisibilité !

Alors soit
-la disjonction ne dissipe pas l'invis et il faut recourir a invisibility purge, et ça c'est gros comme une baraque
-les potions ne subissent pas les memes règles que les spells
-j'ai oublié une variable qq part pour valider un casteur lvl
-je suis victime comme Mastokk du " le sort se lançait bien mais j'avais pas l'effet "
Apparemment l'effet du sort ne s'applique pas quand il est lancé par un plaçable ...

Pourtant, dans le script du sort que tu as essayé Musazai, les effets de dissipation auraient du s'appliquer même s'il n'était pas lancé par un magicien

Enfin en attendant, y'a toujours moyen de reproduire les effets manuellement
Bizaroïde les boules de feu de mon armoire faisaient bien des dégâts... J'ai un peu la flemme d'aller voir les scripts de ces sorts, mais a priori je vois pas trop pourquoi ça marcherait dans un cas et pas dans l'autre. Les mystères de NWScript...
Citation :
Enfin en attendant, y'a toujours moyen de reproduire les effets manuellement
Bonne idée ça, dis moi un peu comment on peut faire ça. (l'effet visuel, j'ai déjà vu)
Tu ouvre le script du sort (ils s'appellent nw_s0_<nomdusort>, mais faut bien préciser d'afficher toutes les ressources du jeu quand tu fait "Ouvrir..." ), et tu copie colle

Par exemple, le script du sort Aide (nw_s0_aid) :

Code PHP:

//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Sept 6, 2001
//:://////////////////////////////////////////////
//:: VFX Pass By: Preston W, On: June 20, 2001

void main()
{
    
//Declare major variables
    
int nDuration GetCasterLevel(OBJECT_SELF);
    
int nBonus d8(1);
    
int nMetaMagic GetMetaMagicFeat();
    
effect eDur EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);

    
//Enter Metamagic conditions
    
if (nMetaMagic == METAMAGIC_MAXIMIZE)
    {
        
nBonus 8;//Damage is at max
    
}
    else if (
nMetaMagic == METAMAGIC_EMPOWER)
    {
        
nBonus nBonus + (nBonus/2); //Damage/Healing is +50%
    
}
    else if (
nMetaMagic == METAMAGIC_EXTEND)
    {
        
nDuration nDuration *2//Duration is +100%
    
}
    
effect eAttack EffectAttackIncrease(1);
    
effect eSave EffectSavingThrowIncrease(SAVING_THROW_ALL1SAVING_THROW_TYPE_FEAR);

    
effect eHP EffectTemporaryHitpoints(nBonus);

    
effect eVis EffectVisualEffect(VFX_IMP_HOLY_AID);
    
object oTarget GetSpellTargetObject();

    
effect eLink EffectLinkEffects(eAttackeSave);
    
eLink EffectLinkEffects(eLinkeDur);

    
//Fire cast spell at event for the specified target
    
SignalEvent(oTargetEventSpellCastAt(OBJECT_SELFSPELL_AIDFALSE));

    
//Apply the VFX impact and effects
    
ApplyEffectToObject(DURATION_TYPE_INSTANTeVisoTarget);
    
ApplyEffectToObject(DURATION_TYPE_TEMPORARYeLinkoTargetTurnsToSeconds(nDuration));
    
ApplyEffectToObject(DURATION_TYPE_TEMPORARYeHPoTargetTurnsToSeconds(nDuration));


De ce script tu prend cette portion :

Code PHP:

    int nBonus d8(1);
    
effect eDur EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);

    
//Enter Metamagic conditions
    
if (nMetaMagic == METAMAGIC_MAXIMIZE)
    {
        
nBonus 8;//Damage is at max
    
}
    else if (
nMetaMagic == METAMAGIC_EMPOWER)
    {
        
nBonus nBonus + (nBonus/2); //Damage/Healing is +50%
    
}
    else if (
nMetaMagic == METAMAGIC_EXTEND)
    {
        
nDuration nDuration *2//Duration is +100%
    
}
    
effect eAttack EffectAttackIncrease(1);
    
effect eSave EffectSavingThrowIncrease(SAVING_THROW_ALL1SAVING_THROW_TYPE_FEAR);

    
effect eHP EffectTemporaryHitpoints(nBonus);

    
effect eVis EffectVisualEffect(VFX_IMP_HOLY_AID);

    
effect eLink EffectLinkEffects(eAttackeSave);
    
eLink EffectLinkEffects(eLinkeDur);

    
//Fire cast spell at event for the specified target
    
SignalEvent(oTargetEventSpellCastAt(OBJECT_SELFSPELL_AIDFALSE));

    
//Apply the VFX impact and effects
    
ApplyEffectToObject(DURATION_TYPE_INSTANTeVisoTarget);
    
ApplyEffectToObject(DURATION_TYPE_TEMPORARYeLinkoTargetTurnsToSeconds(nDuration));
    
ApplyEffectToObject(DURATION_TYPE_TEMPORARYeHPoTargetTurnsToSeconds(nDuration)); 
Après la difficulté c'est de définir les variables oTarget, nDuration et de remplacer OBJECT_SELF par le lanceur de sort. Enfin tu peux enlever les bouts qui concernent la métamagie, vu qu'une armoire ça m'étonnerait qu'elle sache lancer des sorts à efficacité accrue Bon ok c'est pas très difficile, mais je le précise

Voilà pour l'exemple, ça s'applique à peu près à tous les sorts je crois
Oki merci

Comme toutes les bonnes réponses, elle soulève des question

Si je copie un sort (nv blueprint et tout le tralala), que je le modifie, renomme, ... Est il accessible par les lanceurs de sorts ou fait il modifier qq chose qq part ?

Autre chose aussi, si je veux qu'une araignée puisse caster Toile d'araignée, je rajoute le sort ds ses capacités speciales, or le DC du sort sera tjs ridicule (vu les caras int et cha de la spider), est il possible d'augmenter "artificiellement" le DC en question ?
1/ Non ça suffit pas, il faut également modifier les entrées dans le fichier spells.2da (= faire un hak ).
Hop là le lien d'un post qui t'en parleras très bien (merci les sujets de référence ) :
https://forums.jeuxonline.info/showthread.php?t=134464

Et si tu ne sais pas ce qu'est un fichier .2da, et ben là j'avoue n'avoir pas de sujet sous la main pour t'aider. Donc ça va demander de l'aide personnalisée

2/ Soit tu modifie les caras de l'araignée (je pense que c'est le plus simple, et après tout personne ne se rendra compte que ton araignée est une intellectuelle), soit tu modifie le script de sort (genre tu rajoute une ligne qui fait : if(tag lanceur=="tag araignée") { DC = DC + x } ).

Merci pour le compliment en passant
Bah Musa, ton script ne peut pas intepréter la constante SPELL_XXX vu qu'il ne comporte pas l'include: #include "NW_I0_SPELLS"

C'est aussi simple que ça....
Ah ben désolé d'avoir à te contredire Delphinea, mais les constantes sont valables quelque soient les fichiers inclus dans le script.

En fait elles sont toutes définies dans le fichier nwscript.nss, qui est en quelque sorte "inclus" automatiquement à tous les scripts.
Pas interprétée ? tu veux dire qu'elle n'a aucun effet ingame ?

Parcequ'en tout cas un script avec une constante SPELL_* compile très bien lorsque nw_i0_spells n'est pas inclus.
De plus je n'ai rien vu traitant de ces constantes dans ce fichier d'include.

Je me suis mal exprimé.

Le fait de recopier le script d'effet de sort dans le script de Musazai ne suffit pas dans le cas d'un sort de dissipation.
Si il ne met pas l'include, le sort ne sera pas interprété correctement, et donc n'aura pas l'effet voulu

J'espère avoir été plus clair
Répondre

Connectés sur ce fil

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