PRC8/nwn/nwnprc/trunk/scripts/prc_evnt_strmtl.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
2024-02-11 14:01:05 -05:00

129 lines
7.2 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Name Starmantle Onhit: Destroy Non-magical weapons
//:: FileName prc_evnt_strmtl.nss
//:://////////////////////////////////////////////
/*
The starmantle renders the wearer impervious to
non-magical weapon attacks and transforms any
non-magical weapon or missile that strikes it
into harmless light, destroying it forever.
Contact with the starmantle does not destroy
magic weapons or missiles, but the starmantle's
wearer is entitled to a Reflex saving throw
(DC 15) each time he is struck by such a weapon;
success indicates that the wearer takes only
half damage from the weapon (rounded down).
Author: Tenjac
Created: 7/17/06
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//------------------------------------------------------------------------------
// AN, 2003
// Returns TRUE if oItem has any item property that classifies it as magical item
//------------------------------------------------------------------------------
// fluffyamoeba - minor optimisation to remove itemprops that will never be on a melee weapon from the check
int PRCGetIsMagicalMeleeWeapon(object oItem)
{
return GetItemHasItemProperty(oItem, ITEM_PROPERTY_ABILITY_BONUS)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_AC_BONUS)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_AC_BONUS_VS_SPECIFIC_ALIGNMENT)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_ATTACK_BONUS)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_BASE_ITEM_WEIGHT_REDUCTION)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_BONUS_FEAT)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_CAST_SPELL)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_DAMAGE_BONUS)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_DAMAGE_BONUS_VS_SPECIFIC_ALIGNMENT)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_DAMAGE_REDUCTION)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_DAMAGE_RESISTANCE)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_DAMAGE_VULNERABILITY)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_DARKVISION)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_DECREASED_ABILITY_SCORE)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_DECREASED_AC)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_DECREASED_DAMAGE)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_DECREASED_ENHANCEMENT_MODIFIER)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_DECREASED_SAVING_THROWS)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_DECREASED_SKILL_MODIFIER)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_ENHANCED_CONTAINER_REDUCED_WEIGHT)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_ENHANCEMENT_BONUS)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNEMENT)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_FREEDOM_OF_MOVEMENT)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_HASTE)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_HOLY_AVENGER)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_IMMUNITY_SPELL_SCHOOL)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_IMMUNITY_SPELLS_BY_LEVEL)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_IMPROVED_EVASION)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_KEEN)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_LIGHT)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_MASSIVE_CRITICALS)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_MIGHTY)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_MIND_BLANK)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_MONSTER_DAMAGE)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_NO_DAMAGE)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_ON_HIT_PROPERTIES)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_ON_MONSTER_HIT)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_POISON)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_REGENERATION)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_REGENERATION_VAMPIRIC)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_SAVING_THROW_BONUS)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_SKILL_BONUS)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_SPELL_RESISTANCE)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_TRUE_SEEING)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_TURN_RESISTANCE)
|| GetItemHasItemProperty(oItem, ITEM_PROPERTY_ONHITCASTSPELL);
}
#include "prc_inc_spells"
void main()
{
//Get attacker that hit
object oSpellOrigin = OBJECT_SELF;
object oSpellTarget = PRCGetSpellTargetObject(oSpellOrigin);
object oWeaponR = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oSpellTarget);
object oWeaponL = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oSpellTarget);
/*
// motu99: obsolate - is handled in PRCGetSpellCastItem
// Scripted combat system
if(!GetIsObjectValid(oItem))
{
oItem = GetLocalObject(oSpellOrigin, "PRC_CombatSystem_OnHitCastSpell_Item");
}
*/
//If non-magical weapon in right hand
if(GetIsObjectValid(oWeaponR) && IPGetIsMeleeWeapon(oWeaponR) && !PRCGetIsMagicalMeleeWeapon(oWeaponR))
{
DestroyObject(oWeaponR);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DISPEL), oSpellTarget);
return;
}
//if non-magical weapon in left hand
else if(GetIsObjectValid(oWeaponL) && IPGetIsMeleeWeapon(oWeaponL) && !PRCGetIsMagicalMeleeWeapon(oWeaponL))
{
DestroyObject(oWeaponL);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DISPEL), oSpellTarget);
return;
}
//Magical now handled as damage reduction
}