PRC8/trunk/scripts/prc_debug_hfeatm.nss
Jaysyn904 6585d40a0f Major script update for 8 class support
Major script update for 8 class support.

prc_wipeNSB.nss

PRC_S_spellb.nss

prc_amagsys_gain.nss	- AMSCompatibilityCheck()

prc_prereq.nss			- Dragonheart(), KnightWeave()

prc_onenter.nss			- OnEnter_AMSCompatibilityCheck()

prc_metamagic.nss		- GetHasSpontaneousNSBClass()

prc_feats.nss

prc_dracactive.nss

prc_debug_hfeatm.nss

prc_cbtmed_spnhl.nss

psi_powconv.nss

psi_pow_bstpwr.nss

x2_pc_umdcheck.nss
2023-03-11 12:04:30 -05:00

99 lines
4.2 KiB
Plaintext

//:://////////////////////////////////////////////
//:: Debug: Duplicate hide feat monitor
//:: prc_debug_hfeatm
//:://////////////////////////////////////////////
/** @file
Checks if the PC has multiple instances of the
same itempropertybonusfeat on their hide.
@author Ornedan
@date Created - 2005.9.18
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Updated for .35 by Jaysyn 2023/03/11
#include "inc_utility"
const string SET_NAME = "PRC_DEBUG_HFeatM_IPs";
void main()
{if(DEBUG){ // This should do nothing if DEBUG is not active
object oPC = OBJECT_SELF;
object oSkin = GetPCSkin(oPC);
// If the skin has no itemproperties, nothing to do
itemproperty ip = GetFirstItemProperty(oSkin);
if(!GetIsItemPropertyValid(ip))
return;
// Create the set to store the ipfeat numbers in
if(set_exists(oPC, SET_NAME))
set_delete(oPC, SET_NAME);
set_create(oPC, SET_NAME);
// Loop over all itemproperties, looking for duplicates
int nErrorFound = FALSE;
while(GetIsItemPropertyValid(ip))
{
if(GetItemPropertyType(ip) == ITEM_PROPERTY_BONUS_FEAT)
{
int nIPFeat = GetItemPropertySubType(ip);
if(set_contains_int(oPC, SET_NAME, nIPFeat))
{
DoDebug("prc_debug_hfeatm: Duplicate bonus feat on the hide: " + IntToString(nIPFeat) + " - '" + GetStringByStrRef(StringToInt(Get2DACache("iprp_feats", "Name", nIPFeat))) + "'");
nErrorFound = TRUE;
}
else
set_add_int(oPC, SET_NAME, nIPFeat);
}
ip = GetNextItemProperty(oSkin);
}
// Cleanup
set_delete(oPC, SET_NAME);
// Request a bugreport
if(nErrorFound)
{
DoDebug("prc_debug_hfeatm: Found duplicate bonus feats on the hide of " + DebugObject2Str(oPC) + "; Build: "
+ GetStringByStrRef(StringToInt(Get2DACache("classes", "Name", GetClassByPosition(1, oPC)))) + " " + IntToString(GetLevelByPosition(1, oPC))
+ (GetClassByPosition(2, oPC) != CLASS_TYPE_INVALID ?
" / " + GetStringByStrRef(StringToInt(Get2DACache("classes", "Name", GetClassByPosition(2, oPC)))) + " " + IntToString(GetLevelByPosition(2, oPC))
: ""
)
+ (GetClassByPosition(3, oPC) != CLASS_TYPE_INVALID ?
" / " + GetStringByStrRef(StringToInt(Get2DACache("classes", "Name", GetClassByPosition(3, oPC)))) + " " + IntToString(GetLevelByPosition(3, oPC))
: ""
)
+ (GetClassByPosition(4, oPC) != CLASS_TYPE_INVALID ?
" / " + GetStringByStrRef(StringToInt(Get2DACache("classes", "Name", GetClassByPosition(4, oPC)))) + " " + IntToString(GetLevelByPosition(4, oPC))
: ""
)
+ (GetClassByPosition(5, oPC) != CLASS_TYPE_INVALID ?
" / " + GetStringByStrRef(StringToInt(Get2DACache("classes", "Name", GetClassByPosition(5, oPC)))) + " " + IntToString(GetLevelByPosition(5, oPC))
: ""
)
+ (GetClassByPosition(6, oPC) != CLASS_TYPE_INVALID ?
" / " + GetStringByStrRef(StringToInt(Get2DACache("classes", "Name", GetClassByPosition(6, oPC)))) + " " + IntToString(GetLevelByPosition(6, oPC))
: ""
)
+ (GetClassByPosition(7, oPC) != CLASS_TYPE_INVALID ?
" / " + GetStringByStrRef(StringToInt(Get2DACache("classes", "Name", GetClassByPosition(7, oPC)))) + " " + IntToString(GetLevelByPosition(7, oPC))
: ""
)
+ (GetClassByPosition(8, oPC) != CLASS_TYPE_INVALID ?
" / " + GetStringByStrRef(StringToInt(Get2DACache("classes", "Name", GetClassByPosition(8, oPC)))) + " " + IntToString(GetLevelByPosition(8, oPC))
: ""
)
);
DoDebug("A duplicate itemproperty feat has been discovered. This is a critical bug, so please report it.\n\n"
+ "The report should contain an excerpt from your log (nwn/logs/nwclientlog1.txt) that contains all lines starting with"
+ "'prc_debug_hfeatm:'."
);
}
}}