Further file organization
Further file organization
This commit is contained in:
82
nwn/nwnprc/trunk/scripts/prc_mithral.nss
Normal file
82
nwn/nwnprc/trunk/scripts/prc_mithral.nss
Normal file
@@ -0,0 +1,82 @@
|
||||
//For crafted items
|
||||
|
||||
#include "prc_craft_inc"
|
||||
|
||||
//Assumes only one bane/dread can be applied
|
||||
void BaneCheck(object oItem)
|
||||
{
|
||||
if(!GetIsObjectValid(oItem))
|
||||
return;
|
||||
|
||||
itemproperty ipDread, ipBane;
|
||||
int bDread = FALSE, bBane = FALSE;
|
||||
ipBane = GetSpecificProperty(oItem, ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP, -1, IP_CONST_DAMAGEBONUS_2d6);
|
||||
bBane = GetIsItemPropertyValid(ipBane);
|
||||
if(!bBane)
|
||||
{ //don't want to search through itemprops again
|
||||
ipDread = GetSpecificProperty(oItem, ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP, -1, IP_CONST_DAMAGEBONUS_4d6);
|
||||
bDread = GetIsItemPropertyValid(ipDread);
|
||||
}
|
||||
if(bBane || bDread)
|
||||
{
|
||||
int nRace, nBonus;
|
||||
int nEnhance = IPGetWeaponEnhancementBonus(oItem);
|
||||
if(bBane)
|
||||
{
|
||||
nRace = GetItemPropertySubType(ipBane);
|
||||
}
|
||||
else
|
||||
{
|
||||
nRace = GetItemPropertySubType(ipDread);
|
||||
}
|
||||
//Refresh enhancement bonuses in case of item upgrade
|
||||
SetCompositeBonusT(oItem, "BaseEnhancementRace", nEnhance, ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP, nRace);
|
||||
SetCompositeBonusT(oItem, "BaneEnhancement", (bDread) ? 4 : 2, ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP, nRace);
|
||||
}
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
object oPC = OBJECT_SELF;
|
||||
object oArmour = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
|
||||
int nBonus = 0;
|
||||
int nCapIncrease = 0;
|
||||
int nLevel = (GetLevelByClass(CLASS_TYPE_COC, oPC));
|
||||
if(StringToInt(GetStringLeft(GetTag(oArmour), 3)) & 16)
|
||||
{ //mithral armour :P
|
||||
nCapIncrease += 2;
|
||||
}
|
||||
if(nLevel >= 3)
|
||||
{ //increases by 1 every 3 levels of champion of corellon
|
||||
nCapIncrease += nLevel / 3;
|
||||
}
|
||||
if(nCapIncrease)
|
||||
{
|
||||
int nMaxDexBonus;
|
||||
SetIdentified(oArmour, FALSE);
|
||||
switch(GetGoldPieceValue(oArmour))
|
||||
{
|
||||
case 1: nMaxDexBonus = -1; break; // None - assumes you can't make robes mithral
|
||||
case 5: nMaxDexBonus = 8; break; // Padded
|
||||
case 10: nMaxDexBonus = 6; break; // Leather
|
||||
case 15: nMaxDexBonus = 4; break; // Studded Leather / Hide
|
||||
case 100: nMaxDexBonus = 4; break; // Chain Shirt / Scale Mail
|
||||
case 150: nMaxDexBonus = 2; break; // Chainmail / Breastplate
|
||||
case 200: nMaxDexBonus = 1; break; // Splint Mail / Banded Mail
|
||||
case 600: nMaxDexBonus = 1; break; // Half-Plate
|
||||
case 1500: nMaxDexBonus = 1; break; // Full Plate
|
||||
}
|
||||
SetIdentified(oArmour, TRUE);
|
||||
if(nMaxDexBonus == -1)
|
||||
nBonus = 0; //can't increase max dex bonus on 0 base AC armour since it's unlimited
|
||||
int nDexBonus = (GetAbilityScore(oPC, ABILITY_DEXTERITY) - 10) / 2;
|
||||
if(nDexBonus > nMaxDexBonus)
|
||||
{
|
||||
nBonus = min(nDexBonus - nMaxDexBonus, nCapIncrease);
|
||||
}
|
||||
}
|
||||
SetCompositeBonus(GetPCSkin(oPC), "PRC_CRAFT_MITHRAL", nBonus, ITEM_PROPERTY_AC_BONUS);
|
||||
|
||||
BaneCheck(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC));
|
||||
BaneCheck(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC));
|
||||
}
|
Reference in New Issue
Block a user