是的,20级内只要不出秘术师这种进阶,与纯牧相差不会太大,在不太牺牲牧师能力的前提下兼职,能获得的额外好处有限。20级后的解释权貌似全交给DM了,否则就那句“你的BAB等于人物等级”,要严格照办的话就得囧倒一片……我不止一次地听到和看到DM说:算牧师的。所以才会有这个问题:在有进阶职业的情况下到底怎么算?
其实脚本昨天就写好备用了,就是想讨论一下……
============================================
#include "nw_i0_spells"
#include "x2_inc_spellhook"
void main()
{
if (!X2PreSpellCastCode())
{
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
return;
}
// End of Spell Cast Hook
//Declare major variables
object oTarget = GetSpellTargetObject();
RemoveEffectsFromSpell(oTarget, GetSpellId());
RemoveTempHitPoints();
int nCasterLevel = GetCasterLevel(OBJECT_SELF);
int nTotalCharacterLevel = GetHitDice(OBJECT_SELF);
int nStrengthIncrease = 6; // JLR - OEI 07/19/05
int nBab = GetBaseAttackBonus(OBJECT_SELF);
int nBabToIncrease = 0;
int nCasterLevelFeatModify = 0;
int nCasterLevelOfWp = 0;
int nCasterLevelOfSf = 0;
if(GetLastSpellCastClass() == CLASS_TYPE_CLERIC) //牧师法术
{
if(GetHasFeat(1247, OBJECT_SELF)) //熟练施法者专长不得影响DP效果
{
if( nTotalCharacterLevel - GetLevelByClass(CLASS_TYPE_CLERIC, OBJECT_SELF) < 4 )
{
nCasterLevelFeatModify = nTotalCharacterLevel - GetLevelByClass(CLASS_TYPE_CLERIC, OBJECT_SELF);
}
else
{
nCasterLevelFeatModify = 4;
}
}
if(GetHasFeat(1808, OBJECT_SELF)) //WP本身就是全BAB
{
int nCasterLevelOfWp = GetLevelByClass(CLASS_TYPE_WARPRIEST, OBJECT_SELF) / 2;
}
if(GetHasFeat(1549, OBJECT_SELF)) //圣拳一样去死去死
{
if(GetLevelByClass(CLASS_TYPE_SACREDFIST, OBJECT_SELF) < 4)
{
nCasterLevelOfSf = GetLevelByClass(CLASS_TYPE_SACREDFIST, OBJECT_SELF);
}
else if(GetLevelByClass(CLASS_TYPE_SACREDFIST, OBJECT_SELF) >= 4 && GetLevelByClass(CLASS_TYPE_SACREDFIST, OBJECT_SELF) < 8)
{
nCasterLevelOfSf = GetLevelByClass(CLASS_TYPE_SACREDFIST, OBJECT_SELF) - 1;
}
else
{
nCasterLevelOfSf = GetLevelByClass(CLASS_TYPE_SACREDFIST, OBJECT_SELF) - 2;
}
}
nBabToIncrease = (nCasterLevel - nCasterLevelFeatModify - nCasterLevelOfWp - nCasterLevelOfSf) / 4;
if((nCasterLevel - nCasterLevelFeatModify - nCasterLevelOfWp - nCasterLevelOfSf) > (nBabToIncrease * 4))
{
nBabToIncrease = nBabToIncrease + 1;
}
}
else if(GetLastSpellCastClass() == CLASS_TYPE_FAVORED_SOUL) //天佑法术
{
if(GetHasFeat(2068, OBJECT_SELF)) //熟练施法者专长不得影响DP效果
{
if( nTotalCharacterLevel - GetLevelByClass(CLASS_TYPE_FAVORED_SOUL, OBJECT_SELF) < 4 )
{
nCasterLevelFeatModify = nTotalCharacterLevel - GetLevelByClass(CLASS_TYPE_FAVORED_SOUL, OBJECT_SELF);
}
else
{
nCasterLevelFeatModify = 4;
}
}
if(GetHasFeat(2079, OBJECT_SELF)) //WP本身就是全BAB
{
int nCasterLevelOfWp = GetLevelByClass(CLASS_TYPE_WARPRIEST, OBJECT_SELF) / 2;
}
if(GetHasFeat(2102, OBJECT_SELF)) //圣拳一样去死去死
{
if(GetLevelByClass(CLASS_TYPE_SACREDFIST, OBJECT_SELF) < 4)
{
nCasterLevelOfSf = GetLevelByClass(CLASS_TYPE_SACREDFIST, OBJECT_SELF);
}
else if(GetLevelByClass(CLASS_TYPE_SACREDFIST, OBJECT_SELF) >= 4 && GetLevelByClass(CLASS_TYPE_SACREDFIST, OBJECT_SELF) < 8)
{
nCasterLevelOfSf = GetLevelByClass(CLASS_TYPE_SACREDFIST, OBJECT_SELF) - 1;
}
else
{
nCasterLevelOfSf = GetLevelByClass(CLASS_TYPE_SACREDFIST, OBJECT_SELF) - 2;
}
}
nBabToIncrease = (nCasterLevel - nCasterLevelFeatModify - nCasterLevelOfWp - nCasterLevelOfSf) / 4;
if((nCasterLevel - nCasterLevelFeatModify - nCasterLevelOfWp - nCasterLevelOfSf) > (nBabToIncrease * 4))
{
nBabToIncrease = nBabToIncrease + 1;
}
}
else
{
nBabToIncrease = 2; //UMD的当成是7级牧师施展的效果
}
effect eVis = EffectVisualEffect( VFX_DUR_SPELL_DIVINE_POWER ); // uses NWN2 VFX
effect eStrength = EffectAbilityIncrease(ABILITY_STRENGTH, nStrengthIncrease);
effect eHP = EffectTemporaryHitpoints(nCasterLevel);
effect eBAB;
if(nBab + nBabToIncrease > nTotalCharacterLevel)
{
eBAB = EffectBABMinimum(nTotalCharacterLevel);
}
else
{
eBAB = EffectBABMinimum(nBab + nBabToIncrease);
}
effect eLink = EffectLinkEffects(eBAB, eVis);
//Make sure that the strength modifier is a bonus
if( nStrengthIncrease > 0 )
{
eLink = EffectLinkEffects(eLink, eStrength);
}
//Meta-Magic
int nMetaMagic = GetMetaMagicFeat();
if( nMetaMagic == METAMAGIC_EXTEND )
{
nCasterLevel *= 2;
}
effect eOnDispell = EffectOnDispel(0.0f, RemoveEffectsFromSpell(OBJECT_SELF, SPELL_DIVINE_POWER));
eLink = EffectLinkEffects(eLink, eOnDispell);
eHP = EffectLinkEffects(eHP, eOnDispell);
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_DIVINE_POWER, FALSE));
//Apply Link and VFX effects to the target
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nCasterLevel));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, oTarget, RoundsToSeconds(nCasterLevel));
//ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); // now linked to eLink
} |