PRC8/nwn/nwnprc/trunk/scripts/prc_lasher_third.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

170 lines
6.8 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Lasher - Third Hand
//:://////////////////////////////////////////////
/*
Script to add lasher bonuses
code "borrowed" from far hand, ranged disarm
disarm gets weapon sizes using Get2DACache
*/
//:://////////////////////////////////////////////
//:: Created By: Flaming_Sword
//:: Created On: Sept 25, 2005
//:: Modified: Sept 27, 2005
//:://////////////////////////////////////////////
#include "prc_inc_combat"
void main()
{
object oPC = OBJECT_SELF;
object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
string sMessage = "";
if(GetBaseItemType(oWeapon) == BASE_ITEM_WHIP)
{
object oTarget = PRCGetSpellTargetObject();
float fRange = 4.5;
float fDistance = GetDistanceToObject(oTarget);
if(fDistance < fRange)
{
object oCopy;
int nWeight;
int nDC;
int nType = GetObjectType(oTarget);
int nAttack = GetAttackBonus(oTarget, oPC, oWeapon);
if(nType == OBJECT_TYPE_PLACEABLE) //code for use on placeables here
{
if(GetTag(oTarget) == "BodyBag")
{
oTarget = GetFirstItemInInventory(oTarget);
nWeight = GetWeight(oTarget);
nDC = 20;
if(nWeight <= 200)
{
if(nAttack + d20() >= nDC)
{
oCopy = CopyItem(oTarget, oPC);
if(GetIsObjectValid(oCopy)) //wouldn't want to destroy objects that can't be copied
{
sMessage = "Third Hand picked up " + GetName(oTarget);
DestroyObject(oTarget);
}
else
{
if(GetBaseItemType(oTarget) == BASE_ITEM_LARGEBOX)
sMessage = "You cannot pick up a container that is not empty";
}
}
else
sMessage = "Third Hand failed";
}
else
sMessage = "This item is too heavy";
}
}
else if(nType == OBJECT_TYPE_DOOR) //code for use on doors here
{
nDC = 15;
}
else if(nType == OBJECT_TYPE_ITEM)
{
nWeight = GetWeight(oTarget);
nDC = 20;
if(nWeight <= 200)
{
if(nAttack + d20() >= nDC)
{
oCopy = CopyItem(oTarget, oPC);
if(GetIsObjectValid(oCopy)) //wouldn't want to destroy objects that can't be copied
{
sMessage = "Third Hand picked up " + GetName(oTarget);
DestroyObject(oTarget);
}
else
{
if(GetBaseItemType(oTarget) == BASE_ITEM_LARGEBOX)
sMessage = "You cannot pick up a container that is not empty";
}
}
else
sMessage = "Third Hand failed";
}
else
sMessage = "This item is too heavy";
}
else if(nType == OBJECT_TYPE_CREATURE)
{
if(GetLevelByClass(CLASS_TYPE_LASHER, oPC) > 5)
{//string string Get2DACache(string s2DA, string sColumn, int nRow, string s = "", int nDebug = FALSE)
if (GetIsCreatureDisarmable(oTarget) && !GetPRCSwitch(PRC_PNP_DISARM))
{
object oEnemyWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
//weapon size
int nSize = StringToInt(Get2DACache("baseitems", "WeaponSize", GetBaseItemType(oEnemyWeapon)));
PRCSignalSpellEvent(oTarget, TRUE, GetSpellId());
//whip treated as medium from feat but -4 penalty on improved disarm
int nModifier = (2 - nSize) * 4;
int iHit = GetAttackRoll(oTarget, OBJECT_SELF, oWeapon, 0, nAttack, nModifier);
if(iHit)
{
if(GetSkill(oTarget, SKILL_DISCIPLINE) + d20() < nAttack)
{
nWeight = GetWeight(oEnemyWeapon);
nDC = 20;
FloatingTextStringOnCreature("*Disarm: Hit*", oPC, FALSE);
if(nWeight <= 200)
{
if(nAttack + d20() >= nDC)
{
oCopy = CopyItem(oEnemyWeapon, oPC);
if(GetIsObjectValid(oCopy)) //wouldn't want to destroy objects that can't be copied
{
sMessage = "Third Hand picked up " + GetName(oTarget);
}
else
{
sMessage = "DEBUG: CopyItem Failed (" + GetName(oTarget) + ")";
CopyObject(oEnemyWeapon, GetLocation(oTarget));
}
}
else
{
CopyObject(oEnemyWeapon, GetLocation(oTarget));
}
DestroyObject(oEnemyWeapon);
}
else
sMessage = "This item is too heavy";
}
else
FloatingTextStringOnCreature("*Disarm: Failed*", oPC, FALSE);
}
else
FloatingTextStringOnCreature("*Disarm: Miss*", oPC, FALSE);
}
else
sMessage = "That target is not disarmable";
}
else
sMessage = "You cannot use Third Hand to disarm opponents until level 6";
}
}
else
sMessage = "The target is too far away";
}
else
sMessage = "You must use a whip";
SendMessageToPC(oPC, sMessage);
}