Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
176 lines
5.8 KiB
Plaintext
176 lines
5.8 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Name Claws of the Savage
|
|
//:: FileName sp_claws_savage.nss
|
|
//:://////////////////////////////////////////////
|
|
/**@file Claws of the Savage
|
|
Transmutation [Evil]
|
|
Level: Bestial 4, Blk 4, Clr 4, Drd 4
|
|
Components: V, S
|
|
Casting Time: 1 action
|
|
Range: Touch
|
|
Target: One creature
|
|
Duration: 10 minutes/level
|
|
|
|
The caster grants one creature two long claws that
|
|
replace its hands, tentacle tips, or whatever
|
|
else is appropriate. The claws deal damage based
|
|
on the creature's size.
|
|
|
|
Creature Size Claw Damage
|
|
|
|
Fine 1
|
|
|
|
Diminutive ld2
|
|
|
|
Tiny ld3
|
|
|
|
Small ld4
|
|
|
|
Medium-size ld6
|
|
|
|
Large ld8
|
|
|
|
Huge 2d6
|
|
|
|
Gargantuan 2d8
|
|
|
|
Colossal 4d6
|
|
|
|
The creature can make attacks with both claws as if
|
|
it were proficient with them. Just as with a
|
|
creature that has natural weapons, the subject
|
|
takes no penalty for making two claw attacks. The
|
|
subject is treated as armed. Furthermore, these
|
|
claws gain a +2 enhancement bonus on attack and
|
|
damage rolls.
|
|
|
|
If the creature already has claws, those claws gain
|
|
a +2 enhancement bonus on attack and damage rolls,
|
|
and the claws' damage increases as if the creature
|
|
were two size categories larger.
|
|
|
|
|
|
Author: Tenjac
|
|
Created:
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:://////////////////////////////////////////////
|
|
|
|
object GetClawWeapon (object oCreature, string sResRef, int nInventorySlot, float fDuration);
|
|
|
|
#include "prc_inc_spells"
|
|
#include "prc_inc_unarmed"
|
|
|
|
void main()
|
|
{
|
|
//Spellhook
|
|
if (!X2PreSpellCastCode()) return;
|
|
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
|
|
|
|
//define vars
|
|
object oPC = OBJECT_SELF;
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
object oLClaw, oRClaw;
|
|
int nCasterLvl = PRCGetCasterLevel(oPC);
|
|
int nClawSize = PRCGetCreatureSize(oTarget);
|
|
int nBaseDamage;
|
|
float fDuration = 600.0f * nCasterLvl;
|
|
int nMetaMagic = PRCGetMetaMagicFeat();
|
|
int nBonus = 2;
|
|
|
|
//eval metamagic
|
|
if (nMetaMagic & METAMAGIC_EXTEND)
|
|
{
|
|
fDuration = (fDuration * 2);
|
|
}
|
|
|
|
if (nMetaMagic & METAMAGIC_EMPOWER)
|
|
{
|
|
nBonus = 3;
|
|
}
|
|
|
|
// Determine base damage
|
|
switch(nClawSize)
|
|
{
|
|
case 0: nBaseDamage = IP_CONST_MONSTERDAMAGE_1d3; break;
|
|
case 1: nBaseDamage = IP_CONST_MONSTERDAMAGE_1d4; break;
|
|
case 2: nBaseDamage = IP_CONST_MONSTERDAMAGE_1d6; break;
|
|
case 3: nBaseDamage = IP_CONST_MONSTERDAMAGE_1d8; break;
|
|
case 4: nBaseDamage = IP_CONST_MONSTERDAMAGE_2d6; break;
|
|
case 5: nBaseDamage = IP_CONST_MONSTERDAMAGE_3d6; break;
|
|
case 6: nBaseDamage = IP_CONST_MONSTERDAMAGE_4d6; break;
|
|
case 7: nBaseDamage = IP_CONST_MONSTERDAMAGE_6d6; break;
|
|
}
|
|
|
|
//Check for existing claws, if so, nBaseDamage +=2
|
|
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oTarget)))
|
|
{
|
|
nBaseDamage += nBonus;
|
|
}
|
|
|
|
// Get the creature weapon
|
|
oLClaw = GetClawWeapon(oPC, "PRC_UNARMED_SP", INVENTORY_SLOT_CWEAPON_L, fDuration);
|
|
oRClaw = GetClawWeapon(oPC, "PRC_UNARMED_SP", INVENTORY_SLOT_CWEAPON_R, fDuration);
|
|
|
|
// Catch exceptions here
|
|
if (nClawSize < 0) nBaseDamage = IP_CONST_MONSTERDAMAGE_1d3;
|
|
else if (nClawSize > 7) nBaseDamage = IP_CONST_MONSTERDAMAGE_6d6;
|
|
|
|
// Add the base damage
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyMonsterDamage(nBaseDamage), oLClaw, fDuration);
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyMonsterDamage(nBaseDamage), oRClaw, fDuration);
|
|
|
|
//Add Enhancement Bonus
|
|
IPSafeAddItemProperty(oLClaw, ItemPropertyEnhancementBonus(nBonus), fDuration, X2_IP_ADDPROP_POLICY_IGNORE_EXISTING, FALSE, FALSE);
|
|
IPSafeAddItemProperty(oRClaw, ItemPropertyEnhancementBonus(nBonus), fDuration, X2_IP_ADDPROP_POLICY_IGNORE_EXISTING, FALSE, FALSE);
|
|
|
|
//SPEvilShift(oPC);
|
|
PRCSetSchool();
|
|
}
|
|
|
|
object GetClawWeapon (object oCreature, string sResRef, int nInventorySlot, float fDuration)
|
|
{
|
|
int bCreatedWeapon = FALSE;
|
|
object oCWeapon = GetItemInSlot(nInventorySlot, oCreature);
|
|
|
|
RemoveUnarmedAttackEffects(oCreature);
|
|
// Make sure they can actually equip them
|
|
UnarmedFeats(oCreature);
|
|
|
|
// Determine if a creature weapon of the proper type already exists in the slot
|
|
if(!GetIsObjectValid(oCWeapon) ||
|
|
GetStringUpperCase(GetTag(oCWeapon)) != GetStringUpperCase(sResRef)) // Hack: The resref's and tags of the PRC creature weapons are the same
|
|
{
|
|
if (GetHasItem(oCreature, sResRef))
|
|
{
|
|
oCWeapon = GetItemPossessedBy(oCreature, sResRef);
|
|
SetIdentified(oCWeapon, TRUE);
|
|
ForceEquip(oCreature, oCWeapon, nInventorySlot);
|
|
}
|
|
else
|
|
{
|
|
oCWeapon = CreateItemOnObject(sResRef, oCreature);
|
|
SetIdentified(oCWeapon, TRUE);
|
|
ForceEquip(oCreature, oCWeapon, nInventorySlot);
|
|
bCreatedWeapon = TRUE;
|
|
}
|
|
}
|
|
|
|
// Weapon finesse or intuitive attack?
|
|
SetLocalInt(oCreature, "UsingCreature", TRUE);
|
|
ExecuteScript("prc_intuiatk", oCreature);
|
|
DelayCommand(1.0f, DeleteLocalInt(oCreature, "UsingCreature"));
|
|
|
|
// Add OnHitCast: Unique if necessary
|
|
if(GetHasFeat(FEAT_REND, oCreature))
|
|
IPSafeAddItemProperty(oCWeapon, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|
|
|
// This adds creature weapon finesse
|
|
ApplyUnarmedAttackEffects(oCreature);
|
|
|
|
// Destroy the weapon if it was created by this function
|
|
if(bCreatedWeapon)
|
|
DestroyObject(oCWeapon, (fDuration + 6.0));
|
|
|
|
return oCWeapon;
|
|
} |