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.
		
			
				
	
	
		
			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;
 | 
						|
} |