PRC8_fork/nwn/nwnprc/trunk/psionics/psi_sk_manifshld.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

122 lines
4.0 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Soulknife: Manifest Shield of Thought
//:: psi_sk_manifshld
//::///////////////////////////////////////////////
/**
Handles the manifesting of a Kalashtar Soulknife's
Shield of Thought.
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "psi_inc_soulkn"
int LOCAL_DEBUG = DEBUG;
//////////////////////////////////////////////////
/* Function prototypes */
//////////////////////////////////////////////////
// Handles adding in the enhancement bonuses and specials
// ======================================================
// oShield mindblade item
void BuildMindShield(object oPC, object oShield);
void main()
{
if(LOCAL_DEBUG) DoDebug("Starting psi_sk_manifshld");
object oPC = OBJECT_SELF;
object oShield;
int nMbldType = GetPersistantLocalInt(oPC, MBLADE_SHAPE);
int nHand = INVENTORY_SLOT_LEFTHAND;
// Check the item based on type selection
switch(nMbldType)
{
case MBLADE_SHAPE_DUAL_SHORTSWORDS:
//if dual-wielding, no shield
return;
break;
case MBLADE_SHAPE_BASTARDSWORD:
//bastard sword is 2-hander if you lack proficiency
if(!GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC) && !GetHasFeat(FEAT_WEAPON_PROFICIENCY_BASTARD_SWORD)) return;
break;
}
oShield = CreateItemOnObject("psi_sk_tshield_0", oPC);
// Construct the bonuses
/*DelayCommand(0.25f, */BuildMindShield(oPC, oShield)/*)*/;
// Force equip
AssignCommand(oPC, ActionEquipItem(oShield, nHand));
// Make even more sure the mindshield cannot be dropped
SetDroppableFlag(oShield, FALSE);
SetItemCursedFlag(oShield, TRUE);
if(LOCAL_DEBUG) DelayCommand(0.01f, DoDebug("Finished psi_sk_manifshld")); // Wrap in delaycommand so that the game clock gets to update for the purposes of WriteTimestampedLogEntry
}
void BuildMindShield(object oPC, object oShield)
{
/* Add normal stuff and VFX */
/* Apply the enhancements */
int nFlags = GetPersistantLocalInt(oPC, MBLADE_FLAGS);
int bLight = FALSE;
if(nFlags & MBLADE_FLAG_SHIELD_1)
{
AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyACBonus(1), oShield);
}
if(nFlags & MBLADE_FLAG_SHIELD_2)
{
AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyACBonus(2), oShield);
}
if(nFlags & MBLADE_FLAG_SHIELD_3)
{
AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyACBonus(3), oShield);
}
if(nFlags & MBLADE_FLAG_SHIELD_4)
{
AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyACBonus(4), oShield);
}
if(nFlags & MBLADE_FLAG_SHIELD_5)
{
AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyACBonus(5), oShield);
}
if(nFlags & MBLADE_FLAG_SHIELD_6)
{
AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyACBonus(6), oShield);
}
if(nFlags & MBLADE_FLAG_SHIELD_7)
{
AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyACBonus(7), oShield);
}
if(nFlags & MBLADE_FLAG_SHIELD_8)
{
AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyACBonus(8), oShield);
}
if(nFlags & MBLADE_FLAG_SHIELD_9)
{
AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyACBonus(9), oShield);
}
if(nFlags & MBLADE_FLAG_SHIELD_10)
{
AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyACBonus(10), oShield);
}
/// Add in VFX
AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyVisualEffect(GetAlignmentGoodEvil(oPC) == ALIGNMENT_GOOD ? ITEM_VISUAL_HOLY :
GetAlignmentGoodEvil(oPC) == ALIGNMENT_EVIL ? ITEM_VISUAL_EVIL :
ITEM_VISUAL_SONIC
), oShield);
}