PRC8/nwn/nwnprc/trunk/scripts/prc_evnt_clbebil.nss
Jaysyn904 31331675fa TLK Cleanup
TLK Cleanup (thanks @barmlot).  Added grapple check to catch dead grappler.  Made plot items immune to PnP Disarm.  Fixed minor script typos.  Fixed missing Totemist soulmeld (thanks @barmlot). Fixed Grasping Shadows tlk pointer (thanks @barmlot).  Added Duskblade notes.
2024-10-17 13:32:35 -04:00

107 lines
2.3 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Name Claws of the Bebilith event script
//:: FileName prc_evnt_clbebil.nss
//:://////////////////////////////////////////////
#include "prc_inc_combmove"
void main()
{
//Check for target's armor/shield
object oSpellTarget = PRCGetSpellTargetObject();
object oSpellOrigin = OBJECT_SELF;
object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oSpellTarget);
object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oSpellTarget);
int bArmor;
int bShield;
if(GetIsObjectValid(oShield))
{
//Make sure it's a shield
int nShield = GetBaseItemType(oShield);
if(nShield != BASE_ITEM_SMALLSHIELD &&
nShield != BASE_ITEM_LARGESHIELD &&
nShield != BASE_ITEM_TOWERSHIELD)
{
int bShield = TRUE;
}
}
if(GetIsObjectValid(oArmor))
{
int bArmor = TRUE;
}
object oAffected = oArmor;
int nAffectedSlot = INVENTORY_SLOT_CHEST;
//if both Armor and Shield present
if(bArmor == TRUE && bShield == TRUE)
{
//roll the dice
int nRoll = d6();
if(nRoll > 4)
{
oAffected = oShield;
nAffectedSlot = INVENTORY_SLOT_LEFTHAND;
}
}
else if(bShield == TRUE)
{
oAffected = oShield;
nAffectedSlot = INVENTORY_SLOT_LEFTHAND;
}
else
{
SendMessageToPC(oSpellOrigin, "Your target has no valid items");
return;
}
//The caster makes a grapple check whenever she hits with a claw attack,
//adding to the opponent's roll any enhancement bonus from magic possessed
//by the opponent's armor or shield.
int nEnhance;
itemproperty ip = GetFirstItemProperty(oAffected);
while(GetIsItemPropertyValid(ip))
{
if(GetItemPropertyType(ip) == ITEM_PROPERTY_ENHANCEMENT_BONUS)
{
nEnhance = GetItemPropertyCostTableValue(ip);
break;
}
ip = GetNextItemProperty(oAffected);
}
nEnhance *= -1; // New function needs negatives for target bonuses
//Check
if(_DoGrappleCheck(oSpellOrigin, oSpellTarget, nEnhance))
{
//check switch
if(GetPRCSwitch(PRC_BEBILITH_CLAWS_DESTROY))
{
if(!GetPlotFlag(oAffected))
{
DestroyObject(oAffected);
}
}
else
{
if(oAffected == oShield)
{
ForceUnequip(oSpellTarget, oAffected, nAffectedSlot);
}
//if oArmor, copy to inventory then destroy
else
{
CopyItem(oArmor, oSpellTarget, TRUE);
DestroyObject(oArmor);
}
}
}
}