forked from Jaysyn/PRC8
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.
140 lines
4.4 KiB
Plaintext
140 lines
4.4 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Lasher
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
Script to add lasher bonuses
|
|
|
|
Improved Knockdown (Whip)
|
|
Crack of Fate
|
|
Lashing Whip
|
|
Improved Disarm (Whip)
|
|
Crack of Doom
|
|
|
|
code "borrowed" from tempest, stormlord,
|
|
soulknife
|
|
|
|
modified to allow toggling of crack of fate/doom
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Flaming_Sword
|
|
//:: Created On: Sept 24, 2005
|
|
//:: Modified: May 24, 2006
|
|
//:://////////////////////////////////////////////
|
|
|
|
//compiler would completely crap itself unless this include was here
|
|
//#include "prc_alterations"
|
|
//#include "inc_2dacache"
|
|
#include "prc_inc_spells"
|
|
|
|
void ApplyLashing(object oPC) //ripped off the tempest
|
|
{
|
|
if(!GetHasSpellEffect(SPELL_LASHER_LASHW, oPC))
|
|
ActionCastSpellOnSelf(SPELL_LASHER_LASHW);
|
|
}
|
|
|
|
void ApplyBonuses(object oPC, object oWeapon)
|
|
{
|
|
object oSkin = GetPCSkin(oPC);
|
|
int iClassLevel = GetLevelByClass(CLASS_TYPE_LASHER, oPC);
|
|
|
|
object oOffHand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC);
|
|
//counters the +2 damage on the offhand weapon
|
|
if(GetIsObjectValid(oOffHand) && oOffHand == oWeapon)
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyDamagePenalty(2), oOffHand, 9999.0);
|
|
|
|
if(GetBaseItemType(oWeapon) != BASE_ITEM_WHIP) //assumes off-hand can't be whip
|
|
return;
|
|
|
|
if(iClassLevel > 1 && !GetHasFeat(FEAT_IMPROVED_TRIP)) //improved trip (whip)
|
|
{
|
|
IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(IP_CONST_FEAT_IMPROVED_TRIP));
|
|
}
|
|
|
|
if(iClassLevel > 3) //lashing whip
|
|
{
|
|
DelayCommand(0.1, ApplyLashing(oPC));
|
|
//counters the +2 damage on the offhand weapon
|
|
if(GetIsObjectValid(oOffHand))
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyDamagePenalty(2), oOffHand, 9999.0);
|
|
}
|
|
|
|
if(iClassLevel > 5 && !GetHasFeat(FEAT_PRC_IMP_DISARM)) //improved disarm (whip)
|
|
{
|
|
IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(IP_CONST_FEAT_PRC_IMPROVED_DISARM));
|
|
}
|
|
}
|
|
|
|
void RemoveBonuses(object oPC, object oWeapon)
|
|
{
|
|
object oSkin = GetPCSkin(oPC);
|
|
|
|
object oOffHand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC);
|
|
//counters the +2 damage on the offhand weapon
|
|
RemoveSpecificProperty(oOffHand, ITEM_PROPERTY_DECREASED_DAMAGE, -1, 2, 1, "", -1, DURATION_TYPE_TEMPORARY);
|
|
if(oOffHand == oWeapon)
|
|
return; //it's the off-hand weapon being equipped here
|
|
|
|
int iClassLevel = (GetLevelByClass(CLASS_TYPE_LASHER));
|
|
|
|
if (GetBaseItemType(oWeapon) != BASE_ITEM_WHIP)
|
|
return;
|
|
|
|
if(iClassLevel > 1) //improved knockdown (whip)
|
|
{
|
|
RemoveSpecificProperty(oSkin, ITEM_PROPERTY_BONUS_FEAT,
|
|
IP_CONST_FEAT_IMPROVED_KNOCKDOWN
|
|
);
|
|
RemoveSpecificProperty(oSkin, ITEM_PROPERTY_BONUS_FEAT,
|
|
IP_CONST_FEAT_KNOCKDOWN
|
|
);
|
|
}
|
|
|
|
if(GetHasSpellEffect(SPELL_LASHER_LASHW, oPC)) //lashing whip
|
|
PRCRemoveEffectsFromSpell(oPC, SPELL_LASHER_LASHW);
|
|
|
|
if(iClassLevel > 5) //improved disarm (whip)
|
|
{
|
|
RemoveSpecificProperty(oSkin, ITEM_PROPERTY_BONUS_FEAT,
|
|
IP_CONST_FEAT_IMPROVED_DISARM
|
|
);
|
|
RemoveSpecificProperty(oSkin, ITEM_PROPERTY_BONUS_FEAT,
|
|
IP_CONST_FEAT_DISARM
|
|
);
|
|
}
|
|
|
|
if(GetHasSpellEffect(SPELL_LASHER_CRACK_FATE, oPC))
|
|
{
|
|
PRCRemoveEffectsFromSpell(oPC, SPELL_LASHER_CRACK_FATE);
|
|
FloatingTextStringOnCreature("*Crack of Fate Deactivated*", oPC, FALSE);
|
|
}
|
|
if(GetHasSpellEffect(SPELL_LASHER_CRACK_DOOM, oPC))
|
|
{
|
|
PRCRemoveEffectsFromSpell(oPC, SPELL_LASHER_CRACK_DOOM);
|
|
FloatingTextStringOnCreature("*Crack of Doom Deactivated*", oPC, FALSE);
|
|
}
|
|
}
|
|
|
|
void main()
|
|
{
|
|
object oPC = OBJECT_SELF;
|
|
object oWeapon;
|
|
int iEquip = GetLocalInt(oPC,"ONEQUIP"); //2 = equip, 1 = unequip
|
|
|
|
if(iEquip == 2) //OnEquip
|
|
{
|
|
oWeapon = GetPCItemLastEquipped();
|
|
ApplyBonuses(oPC, oWeapon);
|
|
}
|
|
else if (iEquip == 1) //OnUnEquip
|
|
{
|
|
oWeapon = GetPCItemLastUnequipped();
|
|
RemoveBonuses(oPC, oWeapon);
|
|
}
|
|
if(GetLocalInt(oPC,"ONENTER") == 1)
|
|
{
|
|
oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
|
|
ApplyBonuses(oPC, oWeapon);
|
|
}
|
|
|
|
}
|