forked from Jaysyn/PRC8
Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
80 lines
2.3 KiB
Plaintext
80 lines
2.3 KiB
Plaintext
#include "prc_alterations"
|
|
#include "prc_feat_const"
|
|
|
|
void main()
|
|
{
|
|
if (GetIsImmune(PRCGetSpellTargetObject(),IMMUNITY_TYPE_CRITICAL_HIT)) return;
|
|
|
|
object oWeap=GetSpellCastItem();
|
|
|
|
if (GetBaseItemType(oWeap)!=BASE_ITEM_SHORTSPEAR ) return;
|
|
|
|
|
|
int nThreat = 20;
|
|
|
|
if (GetItemHasItemProperty(oWeap, ITEM_PROPERTY_KEEN) == TRUE)
|
|
{
|
|
nThreat = nThreat - 1;
|
|
}
|
|
|
|
if (GetHasFeat(FEAT_IMPROVED_CRITICAL_SPEAR) == TRUE)
|
|
{
|
|
nThreat = nThreat - 1;
|
|
}
|
|
|
|
int dice=d20();
|
|
|
|
int iDiceCritical = 2 + (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SHORTSPEAR) && GetHasFeat(FEAT_INCREASE_MULTIPLIER));
|
|
|
|
if (dice>=nThreat)
|
|
{
|
|
FloatingTextStringOnCreature("Critical Hit", OBJECT_SELF);
|
|
|
|
if (GetHasFeat( FEAT_SHOCKING_WEAPON,OBJECT_SELF))
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(d10(iDiceCritical),DAMAGE_TYPE_ELECTRICAL,DAMAGE_POWER_NORMAL),PRCGetSpellTargetObject());
|
|
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(d8(iDiceCritical),DAMAGE_TYPE_SONIC,DAMAGE_POWER_NORMAL),PRCGetSpellTargetObject());
|
|
|
|
}
|
|
|
|
if (GetHasSpellEffect( SPELL_DARKFIRE,oWeap))
|
|
{
|
|
|
|
int nDamageType = GetLocalInt(oWeap, "X2_Wep_Dam_Type");
|
|
int nAppearanceTypeS = VFX_IMP_FLAME_S;
|
|
int nAppearanceTypeM = VFX_IMP_FLAME_M;
|
|
|
|
switch(nDamageType)
|
|
{
|
|
case DAMAGE_TYPE_ACID: nAppearanceTypeS = VFX_IMP_ACID_S; nAppearanceTypeM = VFX_IMP_ACID_L; break;
|
|
case DAMAGE_TYPE_COLD: nAppearanceTypeS = VFX_IMP_FROST_S; nAppearanceTypeM = VFX_IMP_FROST_L; break;
|
|
case DAMAGE_TYPE_ELECTRICAL: nAppearanceTypeS = VFX_IMP_LIGHTNING_S; nAppearanceTypeM =VFX_IMP_LIGHTNING_M;break;
|
|
case DAMAGE_TYPE_SONIC: nAppearanceTypeS = VFX_IMP_SONIC; nAppearanceTypeM = VFX_IMP_SONIC; break;
|
|
}
|
|
|
|
// Get Caster Level
|
|
int nLevel = GetLocalInt(oWeap, "X2_Wep_Caster_Lvl");
|
|
|
|
int nDmg = d6() + (nLevel/2);
|
|
|
|
effect eDmg = EffectDamage(nDmg,nDamageType);
|
|
effect eVis;
|
|
if (nDmg<10) // if we are doing below 12 point of damage, use small flame
|
|
{
|
|
eVis =EffectVisualEffect(nAppearanceTypeS);
|
|
}
|
|
else
|
|
{
|
|
eVis =EffectVisualEffect(nAppearanceTypeM);
|
|
}
|
|
eDmg = EffectLinkEffects (eVis, eDmg);
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
|
|
if (GetIsObjectValid(oTarget))
|
|
{
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDmg, oTarget);
|
|
}
|
|
|
|
}
|
|
}
|