Bringing PRC alpha up to parity with PRC35 with the exception of the marker feats, which need to be reworked. Updated PRC alpha release.
762 lines
30 KiB
Plaintext
762 lines
30 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Weapon Restriction System Include
|
|
//:: prc_inc_restwpn.nss
|
|
//::///////////////////////////////////////////////
|
|
/*
|
|
Functions to support PnP Weapon Proficiency and
|
|
weapon feat chain simulation
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Fox
|
|
//:: Created On: Feb 2, 2008
|
|
//:://////////////////////////////////////////////
|
|
|
|
#include "prc_inc_fork"
|
|
#include "inc_item_props"
|
|
#include "prc_x2_itemprop"
|
|
|
|
//:: void main (){}
|
|
|
|
/**
|
|
* All of the following functions use the following parameters:
|
|
*
|
|
* @param oPC The character weilding the weapon
|
|
* @param oItem The item in question.
|
|
* @param nHand The hand the weapon is wielded in. In the form of
|
|
* ATTACK_BONUS_ONHAND or ATTACK_BONUS_OFFHAND.
|
|
*/
|
|
|
|
void DoRacialEquip(object oPC, int nBaseType);
|
|
|
|
//return if PC has proficiency in an item
|
|
int IsProficient(object oPC, int nBaseItem)
|
|
{
|
|
switch(nBaseItem)
|
|
{
|
|
//special case: counts as simple for chitine
|
|
case BASE_ITEM_SHORTSWORD:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC)
|
|
|| GetHasFeat(FEAT_MINDBLADE, oPC)
|
|
|| (GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC) && GetRacialType(oPC) == RACIAL_TYPE_CHITINE)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_SHORTSWORD, oPC);
|
|
|
|
case BASE_ITEM_LONGSWORD:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC)
|
|
|| GetHasFeat(FEAT_MINDBLADE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELF, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_LONGSWORD, oPC);
|
|
|
|
case BASE_ITEM_BATTLEAXE:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC)
|
|
|| (GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC) && GetRacialType(oPC) == RACIAL_TYPE_GNOLL)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_BATTLEAXE, oPC);
|
|
|
|
case BASE_ITEM_BASTARDSWORD:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC)
|
|
|| GetHasFeat(FEAT_MINDBLADE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_BASTARD_SWORD, oPC);
|
|
|
|
case BASE_ITEM_LIGHTFLAIL:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_LIGHT_FLAIL, oPC);
|
|
|
|
case BASE_ITEM_WARHAMMER:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_WARHAMMER, oPC);
|
|
|
|
case BASE_ITEM_LONGBOW:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELF, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_LONGBOW, oPC);
|
|
|
|
case BASE_ITEM_LIGHTMACE:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_LIGHT_MACE, oPC);
|
|
|
|
case BASE_ITEM_HALBERD:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_HALBERD, oPC);
|
|
|
|
case BASE_ITEM_SHORTBOW:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELF, oPC)
|
|
|| (GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC) && GetRacialType(oPC) == RACIAL_TYPE_GNOLL)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_SHORTBOW, oPC);
|
|
|
|
case BASE_ITEM_TWOBLADEDSWORD:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_TWO_BLADED_SWORD, oPC);
|
|
|
|
case BASE_ITEM_GREATSWORD:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_GREATSWORD, oPC);
|
|
|
|
case BASE_ITEM_GREATAXE:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_GREATAXE, oPC);
|
|
|
|
case BASE_ITEM_DART:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_DART, oPC);
|
|
|
|
case BASE_ITEM_DIREMACE:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_DIRE_MACE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC);
|
|
|
|
case BASE_ITEM_DOUBLEAXE:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_DOUBLE_AXE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC);
|
|
|
|
case BASE_ITEM_HEAVYFLAIL:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_HEAVY_FLAIL, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC);
|
|
|
|
case BASE_ITEM_LIGHTHAMMER:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_LIGHT_HAMMER, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC);
|
|
|
|
case BASE_ITEM_HANDAXE:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_HANDAXE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oPC);
|
|
|
|
case BASE_ITEM_KAMA:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_KAMA, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC);
|
|
|
|
case BASE_ITEM_KATANA:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_KATANA, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC);
|
|
|
|
case BASE_ITEM_KUKRI:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_KUKRI, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC);
|
|
|
|
case BASE_ITEM_MORNINGSTAR:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MORNINGSTAR, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC);
|
|
|
|
case BASE_ITEM_QUARTERSTAFF:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_WIZARD, oPC);
|
|
|
|
case BASE_ITEM_RAPIER:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_RAPIER, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELF, oPC);
|
|
|
|
case BASE_ITEM_SCIMITAR:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SCIMITAR, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC);
|
|
|
|
case BASE_ITEM_SCYTHE:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SCYTHE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC);
|
|
|
|
case BASE_ITEM_SHORTSPEAR:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SHORTSPEAR, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC);
|
|
|
|
case BASE_ITEM_SHURIKEN:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SHURIKEN, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oPC);
|
|
|
|
case BASE_ITEM_SICKLE:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SICKLE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC);
|
|
|
|
case BASE_ITEM_SLING:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SLING, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC);
|
|
|
|
case BASE_ITEM_THROWINGAXE:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_THROWING_AXE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC)
|
|
|| GetHasFeat(FEAT_MINDBLADE, oPC);
|
|
|
|
case BASE_ITEM_CSLASHWEAPON:
|
|
case BASE_ITEM_CPIERCWEAPON:
|
|
case BASE_ITEM_CBLUDGWEAPON:
|
|
case BASE_ITEM_CSLSHPRCWEAP:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_CREATURE, oPC);
|
|
|
|
case BASE_ITEM_TRIDENT:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_TRIDENT, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC);
|
|
|
|
case BASE_ITEM_DOUBLE_SCIMITAR:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_DOUBLE_SCIMITAR, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC);
|
|
|
|
case BASE_ITEM_FALCHION:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_FALCHION, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC);
|
|
|
|
case BASE_ITEM_GOAD:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_GOAD, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC);
|
|
|
|
case BASE_ITEM_HEAVY_MACE:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_HEAVY_MACE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC);
|
|
|
|
case BASE_ITEM_HEAVY_PICK:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_HEAVY_PICK, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC);
|
|
|
|
case BASE_ITEM_LIGHT_PICK:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_LIGHT_PICK, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC);
|
|
|
|
case BASE_ITEM_KATAR:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_KATAR, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC);
|
|
|
|
case BASE_ITEM_MAUL:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MAUL, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC);
|
|
|
|
case BASE_ITEM_NUNCHAKU:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_NUNCHAKU, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC);
|
|
|
|
case BASE_ITEM_SAI:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SAI, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC);
|
|
|
|
case BASE_ITEM_SAP:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SAP, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC);
|
|
|
|
//special case: counts as martial for dwarves
|
|
case BASE_ITEM_DWARVENWARAXE:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_DWARVEN_WARAXE, oPC)
|
|
|| (GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) && GetHasFeat(FEAT_DWARVEN, oPC))
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC);
|
|
|
|
case BASE_ITEM_WHIP:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_WHIP, oPC)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC);
|
|
|
|
case BASE_ITEM_ELVEN_LIGHTBLADE:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC)
|
|
|| (GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) && MyPRCGetRacialType(oPC) == RACIAL_TYPE_ELF)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELVEN_LIGHTBLADE, oPC);
|
|
|
|
case BASE_ITEM_ELVEN_THINBLADE:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC)
|
|
|| (GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) && MyPRCGetRacialType(oPC) == RACIAL_TYPE_ELF)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELVEN_THINBLADE, oPC);
|
|
|
|
case BASE_ITEM_ELVEN_COURTBLADE:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC)
|
|
|| (GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) && MyPRCGetRacialType(oPC) == RACIAL_TYPE_ELF)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELVEN_COURTBLADE, oPC);
|
|
|
|
//special case: counts as martial for asherati
|
|
case BASE_ITEM_EAGLE_CLAW:
|
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC)
|
|
|| (GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) && GetRacialType(oPC) == RACIAL_TYPE_ASHERATI)
|
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_EAGLE_CLAW, oPC);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//gets the main weapon proficiency feat needed for a given weapon - mostly for Favored Soul
|
|
int GetWeaponProfFeatByType(int nBaseType)
|
|
{
|
|
switch(nBaseType)
|
|
{
|
|
case BASE_ITEM_SHORTSWORD:
|
|
return FEAT_WEAPON_PROFICIENCY_SHORTSWORD;
|
|
|
|
case BASE_ITEM_LONGSWORD:
|
|
return FEAT_WEAPON_PROFICIENCY_LONGSWORD;
|
|
|
|
case BASE_ITEM_BATTLEAXE:
|
|
return FEAT_WEAPON_PROFICIENCY_BATTLEAXE;
|
|
|
|
case BASE_ITEM_BASTARDSWORD:
|
|
return FEAT_WEAPON_PROFICIENCY_BASTARD_SWORD;
|
|
|
|
case BASE_ITEM_LIGHTFLAIL:
|
|
return FEAT_WEAPON_PROFICIENCY_LIGHT_FLAIL;
|
|
|
|
case BASE_ITEM_WARHAMMER:
|
|
return FEAT_WEAPON_PROFICIENCY_WARHAMMER;
|
|
|
|
case BASE_ITEM_LONGBOW:
|
|
return FEAT_WEAPON_PROFICIENCY_LONGBOW;
|
|
|
|
case BASE_ITEM_LIGHTMACE:
|
|
return FEAT_WEAPON_PROFICIENCY_LIGHT_MACE;
|
|
|
|
case BASE_ITEM_HALBERD:
|
|
return FEAT_WEAPON_PROFICIENCY_HALBERD;
|
|
|
|
case BASE_ITEM_SHORTBOW:
|
|
return FEAT_WEAPON_PROFICIENCY_SHORTBOW;
|
|
|
|
case BASE_ITEM_TWOBLADEDSWORD:
|
|
return FEAT_WEAPON_PROFICIENCY_TWO_BLADED_SWORD;
|
|
|
|
case BASE_ITEM_GREATSWORD:
|
|
return FEAT_WEAPON_PROFICIENCY_GREATSWORD;
|
|
|
|
case BASE_ITEM_GREATAXE:
|
|
return FEAT_WEAPON_PROFICIENCY_GREATAXE;
|
|
|
|
case BASE_ITEM_DART:
|
|
return FEAT_WEAPON_PROFICIENCY_DART;
|
|
|
|
case BASE_ITEM_DIREMACE:
|
|
return FEAT_WEAPON_PROFICIENCY_DIRE_MACE;
|
|
|
|
case BASE_ITEM_DOUBLEAXE:
|
|
return FEAT_WEAPON_PROFICIENCY_DOUBLE_AXE;
|
|
|
|
case BASE_ITEM_HEAVYFLAIL:
|
|
return FEAT_WEAPON_PROFICIENCY_HEAVY_FLAIL;
|
|
|
|
case BASE_ITEM_LIGHTHAMMER:
|
|
return FEAT_WEAPON_PROFICIENCY_LIGHT_HAMMER;
|
|
|
|
case BASE_ITEM_HANDAXE:
|
|
return FEAT_WEAPON_PROFICIENCY_HANDAXE;
|
|
|
|
case BASE_ITEM_KAMA:
|
|
return FEAT_WEAPON_PROFICIENCY_KAMA;
|
|
|
|
case BASE_ITEM_KATANA:
|
|
return FEAT_WEAPON_PROFICIENCY_KATANA;
|
|
|
|
case BASE_ITEM_KUKRI:
|
|
return FEAT_WEAPON_PROFICIENCY_KUKRI;
|
|
|
|
case BASE_ITEM_MORNINGSTAR:
|
|
return FEAT_WEAPON_PROFICIENCY_MORNINGSTAR;
|
|
|
|
case BASE_ITEM_RAPIER:
|
|
return FEAT_WEAPON_PROFICIENCY_RAPIER;
|
|
|
|
case BASE_ITEM_SCIMITAR:
|
|
return FEAT_WEAPON_PROFICIENCY_SCIMITAR;
|
|
|
|
case BASE_ITEM_SCYTHE:
|
|
return FEAT_WEAPON_PROFICIENCY_SCYTHE;
|
|
|
|
case BASE_ITEM_SHORTSPEAR:
|
|
return FEAT_WEAPON_PROFICIENCY_SHORTSPEAR;
|
|
|
|
case BASE_ITEM_SHURIKEN:
|
|
return FEAT_WEAPON_PROFICIENCY_SHURIKEN;
|
|
|
|
case BASE_ITEM_SICKLE:
|
|
return FEAT_WEAPON_PROFICIENCY_SICKLE;
|
|
|
|
case BASE_ITEM_SLING:
|
|
return FEAT_WEAPON_PROFICIENCY_SLING;
|
|
|
|
case BASE_ITEM_THROWINGAXE:
|
|
return FEAT_WEAPON_PROFICIENCY_THROWING_AXE;
|
|
|
|
case BASE_ITEM_CSLASHWEAPON:
|
|
return FEAT_WEAPON_PROFICIENCY_CREATURE;
|
|
|
|
case BASE_ITEM_CPIERCWEAPON:
|
|
return FEAT_WEAPON_PROFICIENCY_CREATURE;
|
|
|
|
case BASE_ITEM_CBLUDGWEAPON:
|
|
return FEAT_WEAPON_PROFICIENCY_CREATURE;
|
|
|
|
case BASE_ITEM_CSLSHPRCWEAP:
|
|
return FEAT_WEAPON_PROFICIENCY_CREATURE;
|
|
|
|
case BASE_ITEM_TRIDENT:
|
|
return FEAT_WEAPON_PROFICIENCY_TRIDENT;
|
|
|
|
case BASE_ITEM_DWARVENWARAXE:
|
|
return FEAT_WEAPON_PROFICIENCY_DWARVEN_WARAXE;
|
|
|
|
case BASE_ITEM_WHIP:
|
|
return FEAT_WEAPON_PROFICIENCY_WHIP;
|
|
|
|
case BASE_ITEM_ELVEN_LIGHTBLADE:
|
|
return FEAT_WEAPON_PROFICIENCY_ELVEN_LIGHTBLADE;
|
|
|
|
case BASE_ITEM_ELVEN_THINBLADE:
|
|
return FEAT_WEAPON_PROFICIENCY_ELVEN_THINBLADE;
|
|
|
|
case BASE_ITEM_ELVEN_COURTBLADE:
|
|
return FEAT_WEAPON_PROFICIENCY_ELVEN_COURTBLADE;
|
|
|
|
case BASE_ITEM_HEAVY_PICK:
|
|
return FEAT_WEAPON_PROFICIENCY_HEAVY_PICK;
|
|
|
|
case BASE_ITEM_LIGHT_PICK:
|
|
return FEAT_WEAPON_PROFICIENCY_LIGHT_PICK;
|
|
|
|
case BASE_ITEM_SAI:
|
|
return FEAT_WEAPON_PROFICIENCY_SAI;
|
|
|
|
case BASE_ITEM_NUNCHAKU:
|
|
return FEAT_WEAPON_PROFICIENCY_NUNCHAKU;
|
|
|
|
case BASE_ITEM_FALCHION:
|
|
return FEAT_WEAPON_PROFICIENCY_FALCHION;
|
|
|
|
case BASE_ITEM_SAP:
|
|
return FEAT_WEAPON_PROFICIENCY_SAP;
|
|
|
|
case BASE_ITEM_KATAR:
|
|
return FEAT_WEAPON_PROFICIENCY_KATAR;
|
|
|
|
case BASE_ITEM_HEAVY_MACE:
|
|
return FEAT_WEAPON_PROFICIENCY_HEAVY_MACE;
|
|
|
|
case BASE_ITEM_MAUL:
|
|
return FEAT_WEAPON_PROFICIENCY_MAUL;
|
|
|
|
case BASE_ITEM_DOUBLE_SCIMITAR:
|
|
return FEAT_WEAPON_PROFICIENCY_DOUBLE_SCIMITAR;
|
|
|
|
case BASE_ITEM_GOAD:
|
|
return FEAT_WEAPON_PROFICIENCY_GOAD;
|
|
|
|
case BASE_ITEM_EAGLE_CLAW:
|
|
return FEAT_WEAPON_PROFICIENCY_EAGLE_CLAW;
|
|
|
|
default:
|
|
return FEAT_WEAPON_PROFICIENCY_SIMPLE;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//resolves Weapon Prof feats to their ItemProp counterparts
|
|
int GetWeaponProfIPFeat(int nWeaponProfFeat)
|
|
{
|
|
return nWeaponProfFeat - 3300;
|
|
}
|
|
|
|
//handles the feat chain for Elven Lightblades
|
|
void DoEquipLightblade(object oPC, object oItem, int nHand)
|
|
{
|
|
if(DEBUG) DoDebug("Checking Lightblade feats"); // optimised as some feats are prereq for others
|
|
if(GetHasFeat(FEAT_WEAPON_FOCUS_SHORT_SWORD, oPC) || GetHasFeat(FEAT_WEAPON_FOCUS_RAPIER, oPC))
|
|
{
|
|
SetCompositeAttackBonus(oPC, "LightbladeWF" + IntToString(nHand), 1, nHand);
|
|
if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_SHORTSWORD, oPC) || GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_RAPIER, oPC))
|
|
SetCompositeAttackBonus(oPC, "LightbladeEpicWF" + IntToString(nHand), 2, nHand);
|
|
if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SHORT_SWORD, oPC) || GetHasFeat(FEAT_WEAPON_SPECIALIZATION_RAPIER, oPC))
|
|
{
|
|
SetCompositeDamageBonusT(oItem, "LightbladeWS", 2);
|
|
if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTSWORD, oPC) || GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_RAPIER, oPC))
|
|
SetCompositeDamageBonusT(oItem, "LightbladeEpicWS", 4);
|
|
}
|
|
}
|
|
if(GetHasFeat(FEAT_IMPROVED_CRITICAL_SHORT_SWORD, oPC) || GetHasFeat(FEAT_IMPROVED_CRITICAL_RAPIER, oPC))
|
|
IPSafeAddItemProperty(oItem, ItemPropertyKeen(), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|
}
|
|
|
|
//handles the feat chain for Elven Thinblades
|
|
void DoEquipThinblade(object oPC, object oItem, int nHand)
|
|
{
|
|
if(GetHasFeat(FEAT_WEAPON_FOCUS_LONG_SWORD, oPC) || GetHasFeat(FEAT_WEAPON_FOCUS_RAPIER, oPC))
|
|
{
|
|
SetCompositeAttackBonus(oPC, "ThinbladeWF" + IntToString(nHand), 1, nHand);
|
|
if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_LONGSWORD, oPC) || GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_RAPIER, oPC))
|
|
SetCompositeAttackBonus(oPC, "ThinbladeEpicWF" + IntToString(nHand), 2, nHand);
|
|
if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_LONG_SWORD, oPC) || GetHasFeat(FEAT_WEAPON_SPECIALIZATION_RAPIER, oPC))
|
|
{
|
|
SetCompositeDamageBonusT(oItem, "ThinbladeWS", 2);
|
|
if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_LONGSWORD, oPC) || GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_RAPIER, oPC))
|
|
SetCompositeDamageBonusT(oItem, "ThinbladeEpicWS", 4);
|
|
}
|
|
}
|
|
if(GetHasFeat(FEAT_IMPROVED_CRITICAL_LONG_SWORD, oPC) || GetHasFeat(FEAT_IMPROVED_CRITICAL_RAPIER, oPC))
|
|
IPSafeAddItemProperty(oItem, ItemPropertyKeen(), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|
}
|
|
|
|
//handles the feat chain for Elven Courtblades
|
|
void DoEquipCourtblade(object oPC, object oItem, int nHand)
|
|
{
|
|
if(GetHasFeat(FEAT_WEAPON_FOCUS_GREAT_SWORD, oPC))
|
|
{
|
|
SetCompositeAttackBonus(oPC, "CourtbladeWF" + IntToString(nHand), 1, nHand);
|
|
if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_GREATSWORD, oPC))
|
|
SetCompositeAttackBonus(oPC, "CourtbladeEpicWF" + IntToString(nHand), 2, nHand);
|
|
if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_GREAT_SWORD, oPC))
|
|
{
|
|
SetCompositeDamageBonusT(oItem, "CourtbladeWS", 2);
|
|
if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_GREATSWORD, oPC))
|
|
SetCompositeDamageBonusT(oItem, "CourtbladeEpicWS", 4);
|
|
}
|
|
}
|
|
if(GetHasFeat(FEAT_IMPROVED_CRITICAL_GREAT_SWORD, oPC))
|
|
IPSafeAddItemProperty(oItem, ItemPropertyKeen(), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|
}
|
|
|
|
//clears any bonuses used to simulate feat chains on unequip
|
|
void DoWeaponFeatUnequip(object oPC, object oItem, int nHand)
|
|
{
|
|
// fluffyamoeba - going to assume redundant local var clearing isn't worth tradeoff
|
|
int nBaseType = GetBaseItemType(oItem);
|
|
if(nBaseType == BASE_ITEM_ELVEN_LIGHTBLADE)
|
|
{
|
|
if(DEBUG) DoDebug("Clearing Lightblade variables.");
|
|
SetCompositeAttackBonus(oPC, "LightbladeWF" + IntToString(nHand), 0, nHand);
|
|
SetCompositeAttackBonus(oPC, "LightbladeEpicWF" + IntToString(nHand), 0, nHand);
|
|
SetCompositeDamageBonusT(oItem, "LightbladeWS", 0);
|
|
SetCompositeDamageBonusT(oItem, "LightbladeEpicWS", 0);
|
|
if(GetHasFeat(FEAT_IMPROVED_CRITICAL_SHORT_SWORD, oPC) || GetHasFeat(FEAT_IMPROVED_CRITICAL_RAPIER, oPC))
|
|
RemoveSpecificProperty(oItem, ITEM_PROPERTY_KEEN, -1, -1, 1, "", -1, DURATION_TYPE_TEMPORARY);
|
|
}
|
|
else if(nBaseType == BASE_ITEM_ELVEN_THINBLADE)
|
|
{
|
|
SetCompositeAttackBonus(oPC, "ThinbladeWF" + IntToString(nHand), 0, nHand);
|
|
SetCompositeAttackBonus(oPC, "ThinbladeEpicWF" + IntToString(nHand), 0, nHand);
|
|
SetCompositeDamageBonusT(oItem, "ThinbladeWS", 0);
|
|
SetCompositeDamageBonusT(oItem, "ThinbladeEpicWS", 0);
|
|
if(GetHasFeat(FEAT_IMPROVED_CRITICAL_LONG_SWORD, oPC) || GetHasFeat(FEAT_IMPROVED_CRITICAL_RAPIER, oPC))
|
|
RemoveSpecificProperty(oItem, ITEM_PROPERTY_KEEN, -1, -1, 1, "", -1, DURATION_TYPE_TEMPORARY);
|
|
}
|
|
else if(nBaseType == BASE_ITEM_ELVEN_COURTBLADE)
|
|
{
|
|
SetCompositeAttackBonus(oPC, "CourtbladeWF" + IntToString(nHand), 0, nHand);
|
|
SetCompositeAttackBonus(oPC, "CourtbladeEpicWF" + IntToString(nHand), 0, nHand);
|
|
SetCompositeDamageBonusT(oItem, "CourtbladeWS", 0);
|
|
SetCompositeDamageBonusT(oItem, "CourtbladeEpicWS", 0);
|
|
if(GetHasFeat(FEAT_IMPROVED_CRITICAL_GREAT_SWORD, oPC))
|
|
RemoveSpecificProperty(oItem, ITEM_PROPERTY_KEEN, -1, -1, 1, "", -1, DURATION_TYPE_TEMPORARY);
|
|
}
|
|
}
|
|
|
|
int IsWeaponMartial(int nBaseItemType, object oPC)
|
|
{
|
|
switch(nBaseItemType)
|
|
{
|
|
case BASE_ITEM_SHORTSWORD:
|
|
case BASE_ITEM_LONGSWORD:
|
|
case BASE_ITEM_BATTLEAXE:
|
|
case BASE_ITEM_LIGHTFLAIL:
|
|
case BASE_ITEM_WARHAMMER:
|
|
case BASE_ITEM_LONGBOW:
|
|
case BASE_ITEM_HALBERD:
|
|
case BASE_ITEM_SHORTBOW:
|
|
case BASE_ITEM_GREATSWORD:
|
|
case BASE_ITEM_GREATAXE:
|
|
case BASE_ITEM_HEAVYFLAIL:
|
|
case BASE_ITEM_LIGHTHAMMER:
|
|
case BASE_ITEM_HANDAXE:
|
|
case BASE_ITEM_RAPIER:
|
|
case BASE_ITEM_SCIMITAR:
|
|
case BASE_ITEM_THROWINGAXE:
|
|
case BASE_ITEM_SCYTHE:
|
|
case BASE_ITEM_MAUL:
|
|
case BASE_ITEM_FALCHION:
|
|
case BASE_ITEM_HEAVY_PICK:
|
|
case BASE_ITEM_LIGHT_PICK:
|
|
case BASE_ITEM_LIGHT_LANCE:
|
|
case BASE_ITEM_GOAD:
|
|
case BASE_ITEM_SAP:
|
|
return TRUE;
|
|
|
|
//special case: counts as martial for dwarves
|
|
case BASE_ITEM_DWARVENWARAXE:
|
|
if(GetHasFeat(FEAT_DWARVEN, oPC))
|
|
return TRUE;
|
|
|
|
//special case: counts as martial for asherati
|
|
case BASE_ITEM_EAGLE_CLAW:
|
|
if(GetRacialType(oPC) == RACIAL_TYPE_ASHERATI)
|
|
return TRUE;
|
|
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
//checks to see if the PC can wield the weapon. If not, applies a -4 penalty.
|
|
void DoProficiencyCheck(object oPC, object oItem, int nHand)
|
|
{
|
|
int bProficient = FALSE;
|
|
|
|
int nBase = GetBaseItemType(oItem);
|
|
bProficient = IsProficient(oPC, nBase);
|
|
|
|
// Warlock special code
|
|
if (GetTag(oItem) == "prc_eldrtch_glv")
|
|
bProficient = TRUE;
|
|
// Incarnate Weapon
|
|
if (GetTag(oItem) == "moi_incarnatewpn")
|
|
bProficient = TRUE;
|
|
// Skarn Spine
|
|
if (GetTag(oItem) == "skarn_spine")
|
|
bProficient = TRUE;
|
|
|
|
if(!bProficient)
|
|
{
|
|
if (DEBUG) DoDebug(GetName(oPC)+" is non-proficient with "+GetName(oItem));
|
|
SetCompositeAttackBonus(oPC, "Unproficient" + IntToString(nHand), -4, ATTACK_BONUS_ONHAND);
|
|
if(nBase == BASE_ITEM_DOUBLEAXE || nBase == BASE_ITEM_TWOBLADEDSWORD || nBase == BASE_ITEM_DIREMACE)
|
|
SetCompositeAttackBonus(oPC, "Unproficient" + IntToString(ATTACK_BONUS_OFFHAND), -4, ATTACK_BONUS_OFFHAND);
|
|
}
|
|
}
|
|
|
|
void DoWeaponEquip(object oPC, object oItem, int nHand)
|
|
{
|
|
if(GetIsDM(oPC) || !GetIsWeapon(oItem)) return;
|
|
|
|
if(GetTag(oItem) == "prc_eldrtch_glv") return;
|
|
if(GetTag(oItem) == "PRC_PYRO_LASH_WHIP") return;
|
|
|
|
//initialize variables
|
|
int nRealSize = PRCGetCreatureSize(oPC); //size for Finesse/TWF
|
|
int nSize = nRealSize; //size for equipment restrictions
|
|
int nWeaponSize = GetWeaponSize(oItem);
|
|
int nStrMod = GetAbilityModifier(ABILITY_STRENGTH, oPC);
|
|
int nElfFinesse = GetAbilityModifier(ABILITY_DEXTERITY, oPC) - nStrMod;
|
|
int nTHFDmgBonus = nStrMod / 2;
|
|
int nBaseType = GetBaseItemType(oItem);
|
|
|
|
//Powerful Build bonus
|
|
if(GetHasFeat(FEAT_RACE_POWERFUL_BUILD, oPC))
|
|
nSize++;
|
|
//Monkey Grip
|
|
if(GetHasFeat(FEAT_MONKEY_GRIP, oPC))
|
|
{
|
|
nSize++;
|
|
// If you try and use the big weapons
|
|
if (nWeaponSize > nRealSize)
|
|
{
|
|
SetCompositeAttackBonus(oPC, "MonkeyGripL", -2, ATTACK_BONUS_OFFHAND);
|
|
SetCompositeAttackBonus(oPC, "MonkeyGripR", -2, ATTACK_BONUS_ONHAND);
|
|
}
|
|
}
|
|
|
|
if(DEBUG) DoDebug("prc_inc_wpnrest - Weapon size: " + IntToString(nWeaponSize));
|
|
if(DEBUG) DoDebug("prc_inc_wpnrest - Character Size: " + IntToString(nSize));
|
|
|
|
//check to make sure it's not too large, or that you're not trying to TWF with 2-handers
|
|
if((nWeaponSize > 1 + nSize && nHand == ATTACK_BONUS_ONHAND)
|
|
|| ((nWeaponSize > nSize || GetWeaponSize(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) > nSize) && nHand == ATTACK_BONUS_OFFHAND))
|
|
{
|
|
if(DEBUG) DoDebug("prc_inc_wpnrest: Forcing unequip due to size");
|
|
if(nHand == ATTACK_BONUS_OFFHAND)
|
|
nHand = INVENTORY_SLOT_LEFTHAND;
|
|
else
|
|
nHand = INVENTORY_SLOT_RIGHTHAND;
|
|
// Force unequip
|
|
ForceUnequip(oPC, oItem, nHand);
|
|
}
|
|
|
|
//OTWF
|
|
if(GetHasFeat(FEAT_OTWF, oPC))
|
|
{
|
|
// When wielding a one-handed weapon in your off hand, you take penalties for fighting with two weapons as if you were wielding a light weapon in your off hand
|
|
if (nWeaponSize == nRealSize && nHand == ATTACK_BONUS_OFFHAND)
|
|
{
|
|
SetCompositeAttackBonus(oPC, "OTWFL", 2, ATTACK_BONUS_OFFHAND);
|
|
SetCompositeAttackBonus(oPC, "OTWFR", 2, ATTACK_BONUS_ONHAND);
|
|
}
|
|
}
|
|
|
|
//check for proficiency
|
|
DoProficiencyCheck(oPC, oItem, nHand);
|
|
|
|
//simulate Weapon Finesse for Elven *blades
|
|
if((nBaseType == BASE_ITEM_ELVEN_LIGHTBLADE || nBaseType == BASE_ITEM_ELVEN_THINBLADE
|
|
|| nBaseType == BASE_ITEM_ELVEN_COURTBLADE) && GetHasFeat(FEAT_WEAPON_FINESSE, oPC) && nElfFinesse > 0)
|
|
{
|
|
if(nHand == ATTACK_BONUS_ONHAND)
|
|
SetCompositeAttackBonus(oPC, "ElfFinesseRH", nElfFinesse, nHand);
|
|
else if(nHand == ATTACK_BONUS_OFFHAND)
|
|
SetCompositeAttackBonus(oPC, "ElfFinesseLH", nElfFinesse, nHand);
|
|
}
|
|
//Two-hand damage bonus
|
|
if(!GetWeaponRanged(oItem) && PRCLargeWeaponCheck(nBaseType, nWeaponSize)
|
|
&& (nWeaponSize == nSize + 1 || (nWeaponSize == nRealSize + 1 && GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC) == OBJECT_INVALID) && nRealSize > CREATURE_SIZE_SMALL))
|
|
{
|
|
if(DEBUG) DoDebug("prc_inc_wpnrest - Two-hand Damage Bonus (Before Enhancement): " + IntToString(nTHFDmgBonus));
|
|
nTHFDmgBonus += IPGetWeaponEnhancementBonus(oItem, ITEM_PROPERTY_ENHANCEMENT_BONUS, FALSE);//include temp effects here
|
|
if(DEBUG) DoDebug("prc_inc_wpnrest - Two-hand Damage Bonus: " + IntToString(nTHFDmgBonus));
|
|
SetCompositeDamageBonusT(oItem, "THFBonus", nTHFDmgBonus);
|
|
}
|
|
|
|
//if a 2-hander, then unequip shield/offhand weapon
|
|
if(nWeaponSize == 1 + nSize && nHand == ATTACK_BONUS_ONHAND)
|
|
// Force unequip
|
|
ForceUnequip(oPC, GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC), INVENTORY_SLOT_LEFTHAND);
|
|
|
|
//apply TWF penalty if a one-handed, not light weapon in offhand - -4/-4 etc isntead of -2/-2
|
|
//Does not apply to small races due to weapon size-up. Stupid size equip hardcoded restrictions.
|
|
if(nWeaponSize == nRealSize && nHand == ATTACK_BONUS_OFFHAND && nRealSize > CREATURE_SIZE_MEDIUM)
|
|
{
|
|
// Assign penalty
|
|
if(DEBUG) DoDebug("prc_inc_wpnrest - OTWFPenalty: " + IntToString(-2));
|
|
SetCompositeAttackBonus(oPC, "OTWFPenalty", -2);
|
|
}
|
|
|
|
//Handle feat bonuses for Lightblade, thinblade, and courtblade
|
|
//using else if so they don't overlap.
|
|
/*if(nBaseType == BASE_ITEM_ELVEN_LIGHTBLADE)
|
|
DoEquipLightblade(oPC, oItem, nHand);
|
|
else if(nBaseType == BASE_ITEM_ELVEN_THINBLADE)
|
|
DoEquipThinblade(oPC, oItem, nHand);
|
|
else if(nBaseType == BASE_ITEM_ELVEN_COURTBLADE)
|
|
DoEquipCourtblade(oPC, oItem, nHand);*/
|
|
// Beamdog allowing us to do feats means we don't need this any more
|
|
|
|
DoRacialEquip(oPC, nBaseType);
|
|
}
|
|
|
|
void DoWeaponsEquip(object oPC)
|
|
{
|
|
object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
|
|
DelayCommand(0.2, DoWeaponEquip(oPC, oWeapon, ATTACK_BONUS_ONHAND));
|
|
oWeapon = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC);
|
|
DelayCommand(0.2, DoWeaponEquip(oPC, oWeapon, ATTACK_BONUS_OFFHAND));
|
|
}
|
|
|
|
void DoRacialEquip(object oPC, int nBaseType)
|
|
{
|
|
if(GetRacialType(oPC) == RACIAL_TYPE_NEANDERTHAL)
|
|
{
|
|
if (nBaseType == BASE_ITEM_CLUB ||
|
|
nBaseType == BASE_ITEM_SHORTSPEAR ||
|
|
nBaseType == BASE_ITEM_QUARTERSTAFF ||
|
|
nBaseType == BASE_ITEM_SHORTBOW ||
|
|
nBaseType == BASE_ITEM_SLING ||
|
|
nBaseType == BASE_ITEM_THROWINGAXE)
|
|
{
|
|
SetCompositeAttackBonus(oPC, "PrimitiveWeapon", 1);
|
|
}
|
|
else
|
|
SetCompositeAttackBonus(oPC, "PrimitiveWeapon", 0);
|
|
}
|
|
} |