From f319be6dec146737059d527c064225ce681faeb8 Mon Sep 17 00:00:00 2001 From: Jaysyn904 <68194417+Jaysyn904@users.noreply.github.com> Date: Mon, 16 Mar 2026 08:52:22 -0400 Subject: [PATCH] 2026/03/16 Update Tweaked Bane & Dread iprops Fixed Bane & Dread doubling any existing Enhancement vs. Racialtype iprops. Fixed issue where material iprop wasn't showing up for some crafted items. --- nwn/nwnprc/trunk/Craft2das/craft_weapon.2da | 4 +- nwn/nwnprc/trunk/include/prc_craft_inc.nss | 31 ++--- nwn/nwnprc/trunk/scripts/prc_mithral.nss | 129 +++++++++++++++----- 3 files changed, 117 insertions(+), 47 deletions(-) diff --git a/nwn/nwnprc/trunk/Craft2das/craft_weapon.2da b/nwn/nwnprc/trunk/Craft2das/craft_weapon.2da index 43536f57..ce1e7a95 100644 --- a/nwn/nwnprc/trunk/Craft2das/craft_weapon.2da +++ b/nwn/nwnprc/trunk/Craft2das/craft_weapon.2da @@ -27,8 +27,8 @@ 23 16828848 Anarchic_Power 16828849 M 21 *_*_*_C_* **** **** 3223_*_*_*_*_* 8 **** 1 17_2_31_8 48_17_70_1 **** **** **** **** 1 **** 24 16828826 Axiomatic 16828827 M 7 *_*_*_L_* **** **** 76_*_*_*_*_* 2 **** **** 17_3_10_8 **** **** **** **** **** 0 **** 25 16828850 Axiomatic_Power 16828851 M 21 *_*_*_L_* **** **** 3222_*_*_*_*_* 8 **** 1 17_3_31_8 48_17_70_1 **** **** **** **** 1 **** -26 16828828 Bane 16828829 M 8 **** **** **** 174_*_*_*_*_* 1 **** **** 18_*_10_4 8_*_2_* **** **** **** **** 0 1 -27 16828852 Dread 16828853 M 22 **** **** **** 178_*_*_*_*_* 7 **** 1 18_*_32_4 8_*_4_* 48_21_27_* **** **** **** 1 1 +26 16828828 Bane 16828829 M 8 **** **** **** 174_*_*_*_*_* 1 **** **** 18_*_10_4 **** **** **** **** **** 0 1 +27 16828852 Dread 16828853 M 22 **** **** **** 178_*_*_*_*_* 7 **** 1 18_*_32_4 48_21_27_* **** **** **** **** 1 1 28 16828830 Disruption 16828831 M 14 **** **** **** 79_*_*_*_*_* 2 **** **** 48_21_0_24 **** **** **** **** **** 0 1 29 16828862 Mighty_Disruption 16828863 M 21 **** **** **** 1855_*_*_*_*_* 6 **** 1 48_21_21_24 **** **** **** **** **** 1 1 30 16828832 Flaming 16828833 M 10 **** **** **** *_*_*_542_58_61 1 **** **** 16_10_7_* **** **** **** **** **** 0 **** diff --git a/nwn/nwnprc/trunk/include/prc_craft_inc.nss b/nwn/nwnprc/trunk/include/prc_craft_inc.nss index bc287383..fb06891b 100644 --- a/nwn/nwnprc/trunk/include/prc_craft_inc.nss +++ b/nwn/nwnprc/trunk/include/prc_craft_inc.nss @@ -1912,7 +1912,10 @@ void MakeMasterwork(object oItem) void MakeAdamantine(object oItem) { - if(GetPlotFlag(oItem)) return; //sanity check + if(GetPlotFlag(oItem)) return; //sanity check + + itemproperty ip; + if(GetBaseItemType(oItem) == BASE_ITEM_ARMOR) { int nBonus = 0; @@ -1929,7 +1932,7 @@ void MakeAdamantine(object oItem) } if(nBonus) { - itemproperty ip = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_BLUDGEONING, nBonus); + ip = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_BLUDGEONING, nBonus); ip = TagItemProperty(ip, "Material_Adamantine"); IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); @@ -1939,21 +1942,21 @@ void MakeAdamantine(object oItem) ip = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SLASHING, nBonus); ip = TagItemProperty(ip, "Material_Adamantine"); - IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); - - ip = ItemPropertyMaterial(IP_MATERIAL_ADAMANTINE); - ip = TagItemProperty(ip, "Material_Adamantine"); - IPSafeAddItemProperty(oItem, ip, 0.0f, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); } - } + } + + ip = ItemPropertyMaterial(IP_MATERIAL_ADAMANTINE); + ip = TagItemProperty(ip, "Material_Adamantine"); + IPSafeAddItemProperty(oItem, ip, 0.0f, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); } void MakeDarkwood(object oItem) { if(GetPlotFlag(oItem)) return; //sanity check - itemproperty ip = ItemPropertyWeightReduction(IP_CONST_REDUCEDWEIGHT_50_PERCENT); - ip = TagItemProperty(ip, "Material_Darkwood"); + itemproperty ip = ItemPropertyWeightReduction(IP_CONST_REDUCEDWEIGHT_50_PERCENT); + ip = TagItemProperty(ip, "Material_Darkwood"); IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING); int nBase = GetBaseItemType(oItem); @@ -1996,11 +1999,11 @@ void MakeDarkwood(object oItem) ip = ItemPropertySkillBonus(SKILL_JUMP, nBonus); ip = TagItemProperty(ip, "Material_Darkwood"); IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); - - ip = ItemPropertyMaterial(IP_MATERIAL_WOOD_DARKWOOD_ZALANTAR); - ip = TagItemProperty(ip, "Material_Darkwood"); - IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); } + + ip = ItemPropertyMaterial(IP_MATERIAL_WOOD_DARKWOOD_ZALANTAR); + ip = TagItemProperty(ip, "Material_Darkwood"); + IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); } void MakeDragonhide(object oItem) diff --git a/nwn/nwnprc/trunk/scripts/prc_mithral.nss b/nwn/nwnprc/trunk/scripts/prc_mithral.nss index 20a15f7b..dc8bec5d 100644 --- a/nwn/nwnprc/trunk/scripts/prc_mithral.nss +++ b/nwn/nwnprc/trunk/scripts/prc_mithral.nss @@ -2,38 +2,105 @@ #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); - } +//:: Assumes only one bane/dread can be applied +//:: 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) + { + ipDread = GetSpecificProperty(oItem, ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP, -1, IP_CONST_DAMAGEBONUS_4d6); + bDread = GetIsItemPropertyValid(ipDread); + } + if(bBane || bDread) + { + int nRace; + if(bBane) + { + nRace = GetItemPropertySubType(ipBane); + } + else + { + nRace = GetItemPropertySubType(ipDread); + } + + // Check if weapon already has permanent enhancement vs this race + itemproperty ip = GetFirstItemProperty(oItem); + int bHasExistingRacialEnhance = FALSE; + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyType(ip) == ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP && + GetItemPropertySubType(ip) == nRace && + GetItemPropertyDurationType(ip) == DURATION_TYPE_PERMANENT) + { + bHasExistingRacialEnhance = TRUE; + break; + } + ip = GetNextItemProperty(oItem); + } + + // Skip BaneCheck if weapon already has permanent racial enhancement + if(bHasExistingRacialEnhance) + return; + + // Get only base enhancement bonus + int nEnhance = 0; + ip = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyType(ip) == ITEM_PROPERTY_ENHANCEMENT_BONUS && + GetItemPropertyDurationType(ip) == DURATION_TYPE_PERMANENT) + { + nEnhance = GetItemPropertyCostTableValue(ip); + break; + } + ip = GetNextItemProperty(oItem); + } + + //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 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); + int nEnhance = IPGetWeaponEnhancementBonus(oItem, ITEM_PROPERTY_ENHANCEMENT_BONUS, TRUE); + + 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() {