Voila le code du sort remove fear/regain d'assurance a la sauce d&d.
//::///////////////////////////////////////////////
//:: Remove Fear
//:: NW_S0_RmvFear.nss
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
All allies within a 10ft radius have their actual fear
effects allowed a new saving throw against a random
DC based on the caster level, but with a +4 bonus
and if they didn't have a fear effect they
are granted a +4 Save versus future fear effects.
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: April 13, 2001
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Modified By: Dolanor
//:: Modified On: 23/05/2005
//:://////////////////////////////////////////////
#include "NW_I0_SPELLS"
void main()
{
//Declare major variables
object oTarget;
effect eFear;
effect eSave = EffectSavingThrowIncrease(SAVING_THROW_WILL, 4, SAVING_THROW_TYPE_FEAR);
effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_POSITIVE);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eImpact = EffectVisualEffect(VFX_FNF_LOS_HOLY_10);
effect eLink = EffectLinkEffects(eMind, eSave);
eLink = EffectLinkEffects(eLink, eDur);
float fDelay;
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, GetSpellTargetLocation());
effect eVis = EffectVisualEffect(VFX_IMP_REMOVE_CONDITION);
//Get first target in the spell area
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, GetSpellTargetLocation());
int nCLevel = GetCasterLevel(OBJECT_SELF);
int nFriendNumber = 1 + (nCLevel / 4);
//indique si le sujet a un effet de peur applique
int nFear = 0;
while (GetIsObjectValid(oTarget) && nFriendNumber > 0)
{
//Only remove the fear effect from the people who are friends.
if(GetIsFriend(oTarget))
{
fDelay = GetRandomDelay();
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_REMOVE_FEAR, FALSE));
eFear = GetFirstEffect(oTarget);
//Get the first effect on the current target
while(GetIsEffectValid(eFear))
{
if (GetEffectType(eFear) == EFFECT_TYPE_FRIGHTENED)
{
//Remove any fear effects and apply the VFX impact
RemoveEffect(oTarget, eFear);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
//On assigne une valeur aleatoire au DC du 2 eme effet de peur
int nRandomFearDC = Random(nCLevel + 4) + 6;
if(!MySavingThrow(SAVING_THROW_WILL, oTarget, nRandomFearDC, SAVING_THROW_TYPE_FEAR, OBJECT_SELF, fDelay))
{
nFear = 1;
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(d6(Random(nCLevel / 6) + 1))));
}
}
//Get the next effect on the target
eFear = GetNextEffect(oTarget);
}
if (nFear == 0)
{
//Apply the linked effects
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(100)));
}
//On reinitialise nFear
nFear = 0;
//On a utilise le sort sur 1 ami, on passe au suivant.
nFriendNumber--;
}
//Get the next target in the spell area.
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, GetSpellTargetLocation());
}
}
CORRECTIONS apportées :
*Le sort n'enleve plus l'effet de peur, mais permet de rejouer le jet de sauvegarde avec le bonus de +4 de ce sort.
Je n'ai pas pu rejouer exactement le meme effet de peur, car d'une part je peux recuperer l'effet de peur, mais ni sa durée, ni son DD, donc sa durée et son DD sont aleatoire en fonction du niveau du pretre (j'ai pas trouvé mieux, mais il me semble que plus un pretre est elevé, plus il va affronter des bestioles avec des pouvoirs plus difficile et plus long). Mais bon si la valeur aleatoire descends tres bas face a un DD de dragon, l'allié resistera surement au nouveau JS, mais ca reste mieux que d'enlever l'effet de peur directement. La y'a une chance que ca ne se dissipe pas.
*Changé la durée du sort de 10 rd a 10 min.