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.7 KiB
Plaintext
140 lines
4.7 KiB
Plaintext
#include "prc_alterations"
|
|
#include "prc_feat_const"
|
|
#include "prc_class_const"
|
|
|
|
// Checks to see if weapon is metal
|
|
int IsItemMetal(object oItem)
|
|
{
|
|
int nReturnVal=0; // Assume it's not metal until proven otherwise.
|
|
int type=GetBaseItemType(oItem);
|
|
|
|
// Any of these Base Item Types can be considered "mostly metal"
|
|
if (type==BASE_ITEM_BASTARDSWORD ||
|
|
type==BASE_ITEM_BATTLEAXE ||
|
|
type==BASE_ITEM_DAGGER ||
|
|
type==BASE_ITEM_DIREMACE ||
|
|
type==BASE_ITEM_DOUBLEAXE ||
|
|
type==BASE_ITEM_DWARVENWARAXE ||
|
|
type==BASE_ITEM_GREATAXE ||
|
|
type==BASE_ITEM_GREATSWORD ||
|
|
type==BASE_ITEM_HALBERD ||
|
|
type==BASE_ITEM_HANDAXE ||
|
|
type==BASE_ITEM_HEAVYFLAIL ||
|
|
type==BASE_ITEM_KAMA ||
|
|
type==BASE_ITEM_KATANA ||
|
|
type==BASE_ITEM_KUKRI ||
|
|
type==BASE_ITEM_LIGHTFLAIL ||
|
|
type==BASE_ITEM_LIGHTHAMMER ||
|
|
type==BASE_ITEM_LIGHTMACE ||
|
|
type==BASE_ITEM_LONGSWORD ||
|
|
type==BASE_ITEM_MORNINGSTAR ||
|
|
type==BASE_ITEM_RAPIER ||
|
|
type==BASE_ITEM_SCIMITAR ||
|
|
type==BASE_ITEM_SCYTHE ||
|
|
type==BASE_ITEM_SHORTSWORD ||
|
|
type==BASE_ITEM_SHURIKEN ||
|
|
type==BASE_ITEM_SICKLE ||
|
|
type==BASE_ITEM_THROWINGAXE ||
|
|
type==BASE_ITEM_TWOBLADEDSWORD ||
|
|
type==BASE_ITEM_WARHAMMER ||
|
|
type==BASE_ITEM_HEAVY_PICK ||
|
|
type==BASE_ITEM_LIGHT_PICK ||
|
|
type==BASE_ITEM_SAI ||
|
|
type==BASE_ITEM_FALCHION ||
|
|
type==BASE_ITEM_KATAR ||
|
|
type==BASE_ITEM_HEAVY_MACE ||
|
|
type==BASE_ITEM_MAUL ||
|
|
type==BASE_ITEM_DOUBLE_SCIMITAR ||
|
|
type==BASE_ITEM_EAGLE_CLAW ||
|
|
type==BASE_ITEM_ELVEN_LIGHTBLADE ||
|
|
type==BASE_ITEM_ELVEN_THINBLADE ||
|
|
type==BASE_ITEM_ELVEN_COURTBLADE)
|
|
{
|
|
nReturnVal=2; // Mostly metal
|
|
}
|
|
return nReturnVal;
|
|
}
|
|
|
|
// Device Lore +2 on Search/Disable Device
|
|
void Device_Lore(object oPC ,object oSkin ,int iLevel)
|
|
{
|
|
// if the bonus is already applied there is no need to apply it again.
|
|
if(GetLocalInt(oSkin, "DeviceSear") == iLevel) return;
|
|
|
|
SetCompositeBonus(oSkin, "DeviceSear", iLevel, ITEM_PROPERTY_SKILL_BONUS,SKILL_SEARCH);
|
|
SetCompositeBonus(oSkin, "DeviceDisa", iLevel, ITEM_PROPERTY_SKILL_BONUS,SKILL_DISABLE_TRAP);
|
|
}
|
|
|
|
// Removes any temporary item properties on the weapon when unequipped.
|
|
void RemoveIronPower(object oPC, object oWeap)
|
|
{
|
|
if (GetLocalInt(oWeap, "DispIronPowerD"))
|
|
{
|
|
SetCompositeDamageBonusT(oWeap, "DispIronPowerD", 0);
|
|
// Remove all temporary keen properties (sometimes they pile up, thus we'll go with 99)
|
|
RemoveSpecificProperty(oWeap, ITEM_PROPERTY_KEEN,-1,-1, 99,"",-1,DURATION_TYPE_TEMPORARY);
|
|
}
|
|
}
|
|
|
|
// Adds damage property and keenness
|
|
void IronPower(object oPC, object oWeap, int iBonusType)
|
|
{
|
|
|
|
int iBonus = 0;
|
|
|
|
if (GetLevelByClass(CLASS_TYPE_DISPATER, oPC) >= 4)
|
|
iBonus = 1;
|
|
|
|
if (GetLevelByClass(CLASS_TYPE_DISPATER, oPC) >= 8)
|
|
iBonus = 2;
|
|
|
|
// Before we start we want to remove all the properties. If the
|
|
// weapon/character qualifies we'll add them again.
|
|
RemoveIronPower(oPC, oWeap);
|
|
|
|
if (IsItemMetal(oWeap) == 2 && iBonus)
|
|
{
|
|
//Fix up bonuses
|
|
SetCompositeAttackBonus(oWeap, "DispIronPowerA"+IntToString(iBonusType), iBonus, iBonusType);
|
|
SetCompositeDamageBonusT(oWeap, "DispIronPowerD", iBonus);
|
|
|
|
// Make the weapon keen
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyKeen(), oWeap,9999.0);
|
|
}
|
|
}
|
|
|
|
void main()
|
|
{
|
|
|
|
object oPC = OBJECT_SELF;
|
|
object oSkin = GetPCSkin(oPC);
|
|
object oWeap1 = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND);
|
|
object oWeap2 = GetItemInSlot(INVENTORY_SLOT_LEFTHAND);
|
|
|
|
// make sure it doesn't mess with non-weapons
|
|
if (GetBaseItemType(oWeap2) == BASE_ITEM_SMALLSHIELD ||
|
|
GetBaseItemType(oWeap2) == BASE_ITEM_LARGESHIELD ||
|
|
GetBaseItemType(oWeap2) == BASE_ITEM_TOWERSHIELD ||
|
|
GetBaseItemType(oWeap2) == BASE_ITEM_TORCH)
|
|
oWeap2 = OBJECT_INVALID;
|
|
|
|
int bDivLor = GetHasFeat(FEAT_DEVICE_LORE, oPC) ? 2 : 0;
|
|
|
|
// remove any bonuses from SetCompositeAttackBonus, we'll add them later
|
|
// the charcter qualifies
|
|
string sIronPowerR = "DispIronPowerA"+IntToString(ATTACK_BONUS_ONHAND);
|
|
string sIronPowerL = "DispIronPowerA"+IntToString(ATTACK_BONUS_OFFHAND);
|
|
SetCompositeAttackBonus(oPC, sIronPowerR, 0, ATTACK_BONUS_ONHAND);
|
|
SetCompositeAttackBonus(oPC, sIronPowerL, 0, ATTACK_BONUS_OFFHAND);
|
|
|
|
// Apply any iron power bonuses
|
|
IronPower(oPC, oWeap1, ATTACK_BONUS_ONHAND);
|
|
IronPower(oPC, oWeap2, ATTACK_BONUS_OFFHAND);
|
|
|
|
// Remove any bonuses from items unequipped
|
|
if (GetLocalInt(oPC,"ONEQUIP") == 1)
|
|
RemoveIronPower(oPC, GetItemLastUnequipped());
|
|
|
|
// Add device lore bonus
|
|
if(bDivLor > 0) Device_Lore(oPC,oSkin,bDivLor);
|
|
} |