BTW for any PW owners out there who are worried about this, here is the item update code that can nerf specific items and update them (used here to remove gear with too many spell slots which can parcipitate this problem.) This is in our on client login event.
void UpdateItems(object oPC)
{
object oItem = GetFirstItemInInventory(oPC);
while(oItem != OBJECT_INVALID)
{
string sTag = GetTag(oItem);
string sRef = GetResRef(oItem); // Either the tag or the ref can be used
// Destroy illegal items. Add or remove checks as needed.
// if(sTag == "any_tag" || sTag == "any_other_tag") DestroyObject(oItem); tbz_tmpl_magelec
if(sTag == "skip_divideritem" || sTag == "skip_xpsignet" || sTag == "laz_aventianid1" || sTag == "laz_aventianid2" || sTag == "laz_aventianid3" || sTag == "laz_aventianid4" || sTag == "tbz_tmpl_magelec") DestroyObject(oItem);
// Replace items in inventories
if(sRef == "ice_glaciercape" || sRef == "grtringanimempth" || sRef == "ice_vx4druidstaf" || sRef == "midnightplate" || sRef == "piratesarmor" || sRef == "armorofsin") // Items with same ref
{
AddStringElement(sRef, "ToReplace", oPC); // Store the ref in a list for later creation
DestroyObject(oItem);
}
else if(sRef == "x2_it_mring019" || sRef == "laz_mring019") // Items with different ref or tag
{
AddStringElement("laz_30ring1", "ToReplace", oPC);
DestroyObject(oItem);
}
oItem = GetNextItemInInventory(oPC);
}
int nSlot = 0;
for(nSlot = 0; nSlot < NUM_INVENTORY_SLOTS; nSlot++)
{
object oWorn = GetItemInSlot(nSlot, oPC);
string sTag = GetTag(oWorn);
string sRef = GetResRef(oWorn); // Either the tag or the ref can be used
// Destroy illegal items. Add or remove checks as needed.
// if(sTag == "any_tag" || sTag == "any_other_tag") DestroyObject(oItem);
// Replace equiped items
if(sRef == "tov_vissii_boots" || sRef == "ice_glaciercape" || sRef == "grtringanimempth" ||
sRef == "ice_vx4druidstaf" || sRef == "midnightplate" || sRef == "piratesarmor" || sRef == "armorofsin") // Items with same ref
{
AddStringElement(sRef, "ToReplace", oPC); // Store the ref in a list for later creation
DestroyObject(oWorn);
}
else if(sRef == "x2_it_mring019" || sRef == "laz_mring019") // Items with different ref or tag
{
AddStringElement("laz_30ring1", "ToReplace", oPC);
DestroyObject(oWorn);
}
}
int nNth = 0;
int nCount = GetElementCount("ToReplace", oPC);
for(nNth = 0; nNth < nCount; nNth++) // Loop over the list and create items from the refs
{
CreateItemOnObject(GetStringElement(nNth, "ToReplace", oPC), oPC);
}
DeleteList("ToReplace", oPC); // Delete the list
}
Then in the void main you have to add this line somewhere:
UpdateItems(oPC);