2025/07/31 Update
Reverted Luminous Armor. Updated NUI spellcast menu (@Alhooness). Fixed Inlindl School. Tweaked prc_2da_cache creature. Fixed Celebrant of Sharess spellcasting. Found a few more functions to remove Assassin from. Added GetTotalShieldACBonus(). Made magic staves medium weapons again, so that small creatures can use them. Added feat constants for Charge & Grapple. Devil's Eye should be Extendable. Setup talents for Combat maneuvers. Updated PRC8 manual.
This commit is contained in:
@@ -60,100 +60,66 @@ Created: 6/20/06
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
|
||||
//Declare main variables.
|
||||
int nEvent = GetRunningEvent();
|
||||
object oPC;
|
||||
switch(nEvent)
|
||||
{
|
||||
case EVENT_ONHEARTBEAT: oPC = OBJECT_SELF; break;
|
||||
|
||||
default:
|
||||
oPC = OBJECT_SELF;
|
||||
}
|
||||
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
|
||||
if(nEvent == FALSE)
|
||||
object oPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
int nSpell = GetSpellId();
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
int nAlign = GetAlignmentGoodEvil(oTarget);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
float fDur = HoursToSeconds(nCasterLvl);
|
||||
|
||||
if(nAlign == ALIGNMENT_GOOD)
|
||||
{
|
||||
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
int nSpell = GetSpellId();
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
int nAlign = GetAlignmentGoodEvil(oTarget);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
float fDur = HoursToSeconds(nCasterLvl);
|
||||
if(nMetaMagic & METAMAGIC_EXTEND)
|
||||
fDur += fDur;
|
||||
|
||||
if(nAlign == ALIGNMENT_GOOD)
|
||||
{
|
||||
if(nMetaMagic & METAMAGIC_EXTEND)
|
||||
fDur += fDur;
|
||||
//VFX
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_SUPER_HEROISM), oTarget);
|
||||
|
||||
//VFX
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_SUPER_HEROISM), oTarget);
|
||||
//Light as a daylight spell, AoE for attack penalty
|
||||
effect eLight = EffectLinkEffects(EffectVisualEffect(VFX_DUR_LIGHT_WHITE_20), EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE));
|
||||
eLight = EffectLinkEffects(eLight, EffectAreaOfEffect(AOE_MOB_LUMINOUS_ARMOR));
|
||||
|
||||
//Light as a daylight spell, AoE for attack penalty
|
||||
effect eLight = EffectLinkEffects(EffectVisualEffect(VFX_DUR_LIGHT_WHITE_20), EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE));
|
||||
eLight = EffectLinkEffects(eLight, EffectAreaOfEffect(AOE_MOB_LUMINOUS_ARMOR));
|
||||
|
||||
int nArmor;
|
||||
int nLevel = GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION);
|
||||
int nArmor;
|
||||
int nLevel = GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION);
|
||||
|
||||
|
||||
if(nSpell == SPELL_LUMINOUS_ARMOR)
|
||||
{
|
||||
nArmor = nLevel + 5;
|
||||
DoCorruptionCost(oPC, ABILITY_STRENGTH, d2(1), 0);
|
||||
}
|
||||
if(nSpell == SPELL_LUMINOUS_ARMOR)
|
||||
{
|
||||
nArmor = nLevel + 5;
|
||||
DoCorruptionCost(oPC, ABILITY_STRENGTH, d2(1), 0);
|
||||
}
|
||||
|
||||
else if(nSpell == SPELL_GREATER_LUMINOUS_ARMOR)
|
||||
{
|
||||
nArmor = nLevel + 8;
|
||||
DoCorruptionCost(oPC, ABILITY_STRENGTH, d3(), 0);
|
||||
}
|
||||
else if(nSpell == SPELL_GREATER_LUMINOUS_ARMOR)
|
||||
{
|
||||
nArmor = nLevel + 8;
|
||||
DoCorruptionCost(oPC, ABILITY_STRENGTH, d3(), 0);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
PRCRemoveEffectsFromSpell(oTarget, SPELL_LUMINOUS_ARMOR);
|
||||
PRCRemoveEffectsFromSpell(oTarget, SPELL_GREATER_LUMINOUS_ARMOR);
|
||||
RemoveEventScript(oPC, EVENT_ONHEARTBEAT, "sp_lumins_armr", TRUE, FALSE);
|
||||
PRCRemoveEffectsFromSpell(oTarget, SPELL_LUMINOUS_ARMOR);
|
||||
PRCRemoveEffectsFromSpell(oTarget, SPELL_GREATER_LUMINOUS_ARMOR);
|
||||
|
||||
effect eArmor = EffectACIncrease(nArmor, AC_ARMOUR_ENCHANTMENT_BONUS, AC_VS_DAMAGE_TYPE_ALL);
|
||||
eArmor = EffectLinkEffects(eArmor, eLight);
|
||||
effect eArmor = EffectACIncrease(nArmor, AC_ARMOUR_ENCHANTMENT_BONUS, AC_VS_DAMAGE_TYPE_ALL);
|
||||
eArmor = EffectLinkEffects(eArmor, eLight);
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eArmor, oTarget, fDur);
|
||||
object oArmour = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
|
||||
if (GetBaseAC(oArmour) > 0)
|
||||
{
|
||||
ForceUnequip(oPC, oArmour, INVENTORY_SLOT_CHEST);
|
||||
SendMessageToPC(oPC, "You cannot wear armor while under the effects of Luminous Armour");
|
||||
}
|
||||
}
|
||||
PRCSetSchool();
|
||||
|
||||
AddEventScript(oPC, EVENT_ONHEARTBEAT, "sp_lumins_armr", TRUE, FALSE);
|
||||
DelayCommand(fDur, RemoveEventScript(oPC, EVENT_ONHEARTBEAT, "sp_lumins_armr", TRUE, FALSE));
|
||||
//Sanctified spells get mandatory 10 pt good adjustment, regardless of switch
|
||||
AdjustAlignment(oPC, ALIGNMENT_GOOD, 10, FALSE);
|
||||
}
|
||||
else if(nEvent == EVENT_ONHEARTBEAT)
|
||||
{
|
||||
if(GetHasSpellEffect(SPELL_LUMINOUS_ARMOR, oPC) || GetHasSpellEffect(SPELL_GREATER_LUMINOUS_ARMOR, oPC))
|
||||
{
|
||||
object oArmour = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
|
||||
if (GetBaseAC(oArmour) > 0)
|
||||
{
|
||||
ForceUnequip(oPC, oArmour, INVENTORY_SLOT_CHEST);
|
||||
SendMessageToPC(oPC, "You cannot wear armor while under the effects of Luminous Armour");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PRCRemoveEffectsFromSpell(oPC, SPELL_LUMINOUS_ARMOR);
|
||||
PRCRemoveEffectsFromSpell(oPC, SPELL_GREATER_LUMINOUS_ARMOR);
|
||||
}
|
||||
}
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eArmor, oTarget, fDur);
|
||||
object oArmour = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
|
||||
if (GetBaseAC(oArmour) > 0)
|
||||
{
|
||||
ForceUnequip(oPC, oArmour, INVENTORY_SLOT_CHEST);
|
||||
SendMessageToPC(oPC, "You cannot wear armor while under the effects of Luminous Armour");
|
||||
}
|
||||
}
|
||||
PRCSetSchool();
|
||||
|
||||
//Sanctified spells get mandatory 10 pt good adjustment, regardless of switch
|
||||
AdjustAlignment(oPC, ALIGNMENT_GOOD, 10, FALSE);
|
||||
}
|
Reference in New Issue
Block a user