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.
107 lines
2.3 KiB
Plaintext
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);
|
|
}
|
|
}
|
|
|
|
}
|
|
} |