UW2_PRC8/_module/nss/dm_inc_remove.nss
Jaysyn904 5197ad9a4d Initial upload
Initial upload
2023-09-25 20:24:01 -04:00

324 lines
14 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Name Forge System Handler
//:: FileName dm_inc_remove
//:://////////////////////////////////////////////
/*
This include file holds all the custom functions
used in the new IP removal feature.
Please do not alter any of this file. Any
altering of this file is considered unsupported.
For instructions on configuring the forge,
please refer to the new script file: dm_forge_readme
OmegaDM
*/
//:://////////////////////////////////////////////
//:: Created By: OmegaDM
//:: Created On: August 2006
//:://////////////////////////////////////////////
//////////////////////////////////////////////////
#include "dm_inc_forge"
//#include "x2_inc_itemprop" wrapped in with dm_inc_forge
//::///////////////////////////////////////////////////////////////
//:: Do not alter ANYTHING within this include.
//:: All forge configuring is done in the file
//:: dm_forge_config
//::///////////////////////////////////////////////////////////////
void dmRemoveProperty(object oItem, int ModCode, int Mods = -1);
void dmRemoveProperty(object oItem, int ModCode, int Mods = -1)
{
switch(ModCode)
{
case 1: // enhancement bonus
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_ENHANCEMENT_BONUS,DURATION_TYPE_PERMANENT);
break;
case 2: // fire damage
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_DAMAGE_BONUS,DURATION_TYPE_PERMANENT,IP_CONST_DAMAGETYPE_FIRE);
break;
case 3: // cold damage
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_DAMAGE_BONUS,DURATION_TYPE_PERMANENT,IP_CONST_DAMAGETYPE_COLD);
break;
case 4: // electrical damage
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_DAMAGE_BONUS,DURATION_TYPE_PERMANENT,IP_CONST_DAMAGETYPE_ELECTRICAL);
break;
case 5: // acid damage
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_DAMAGE_BONUS,DURATION_TYPE_PERMANENT,IP_CONST_DAMAGETYPE_ACID);
break;
case 6: // sonic damage
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_DAMAGE_BONUS,DURATION_TYPE_PERMANENT,IP_CONST_DAMAGETYPE_SONIC);
break;
case 7: // divine damage
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_DAMAGE_BONUS,DURATION_TYPE_PERMANENT,IP_CONST_DAMAGETYPE_DIVINE);
break;
case 8: // magical damage
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_DAMAGE_BONUS,DURATION_TYPE_PERMANENT,IP_CONST_DAMAGETYPE_MAGICAL);
break;
case 9: // all damages
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_DAMAGE_BONUS,DURATION_TYPE_PERMANENT);
break;
case 10: // DR (damage reduction)
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_DAMAGE_REDUCTION,DURATION_TYPE_PERMANENT);
break;
case 11: // fire resistance
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_DAMAGE_RESISTANCE,DURATION_TYPE_PERMANENT,IP_CONST_DAMAGETYPE_FIRE);
break;
case 12: // cold resistance
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_DAMAGE_RESISTANCE,DURATION_TYPE_PERMANENT,IP_CONST_DAMAGETYPE_COLD);
break;
case 13: // lightning resistance
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_DAMAGE_RESISTANCE,DURATION_TYPE_PERMANENT,IP_CONST_DAMAGETYPE_ELECTRICAL);
break;
case 14: // acid resistance
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_DAMAGE_RESISTANCE,DURATION_TYPE_PERMANENT,IP_CONST_DAMAGETYPE_ACID);
break;
case 15: // sonic resistance
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_DAMAGE_RESISTANCE,DURATION_TYPE_PERMANENT,IP_CONST_DAMAGETYPE_SONIC);
break;
case 16: // divine resistance
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_DAMAGE_RESISTANCE,DURATION_TYPE_PERMANENT,IP_CONST_DAMAGETYPE_DIVINE);
break;
case 17: // magical resistance
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_DAMAGE_RESISTANCE,DURATION_TYPE_PERMANENT,IP_CONST_DAMAGETYPE_MAGICAL);
break;
case 18: // slashing resist
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_DAMAGE_RESISTANCE,DURATION_TYPE_PERMANENT,IP_CONST_DAMAGETYPE_SLASHING);
break;
case 19: // piercing resist
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_DAMAGE_RESISTANCE,DURATION_TYPE_PERMANENT,IP_CONST_DAMAGETYPE_PIERCING);
break;
case 20: // bludgeoning resist
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_DAMAGE_RESISTANCE,DURATION_TYPE_PERMANENT,IP_CONST_DAMAGETYPE_BLUDGEONING);
break;
case 21: // AC bonus
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_AC_BONUS,DURATION_TYPE_PERMANENT);
break;
case 22: // strength bonus
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_ABILITY_BONUS,DURATION_TYPE_PERMANENT,IP_CONST_ABILITY_STR);
break;
case 23: // dexterity bonus
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_ABILITY_BONUS,DURATION_TYPE_PERMANENT,IP_CONST_ABILITY_DEX);
break;
case 24: // constitution bonus
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_ABILITY_BONUS,DURATION_TYPE_PERMANENT,IP_CONST_ABILITY_CON);
break;
case 25: // intelligence bonus
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_ABILITY_BONUS,DURATION_TYPE_PERMANENT,IP_CONST_ABILITY_INT);
break;
case 26: // wisdom bonus
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_ABILITY_BONUS,DURATION_TYPE_PERMANENT,IP_CONST_ABILITY_WIS);
break;
case 27: // charisma bonus
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_ABILITY_BONUS,DURATION_TYPE_PERMANENT,IP_CONST_ABILITY_CHA);
break;
case 28: // all ability bonuses
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_ABILITY_BONUS,DURATION_TYPE_PERMANENT);
break;
// Ran out of abilitys, so here we skip some and start our immunitys
case 31: // death magic
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS,DURATION_TYPE_PERMANENT,IP_CONST_IMMUNITYMISC_DEATH_MAGIC);
break;
case 32: // disease
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS,DURATION_TYPE_PERMANENT,IP_CONST_IMMUNITYMISC_DISEASE);
break;
case 33: // fear
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS,DURATION_TYPE_PERMANENT,IP_CONST_IMMUNITYMISC_FEAR);
break;
case 34: // knockdown
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS,DURATION_TYPE_PERMANENT,IP_CONST_IMMUNITYMISC_KNOCKDOWN);
break;
case 35: // level and ability drain
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS,DURATION_TYPE_PERMANENT,IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN);
break;
case 36: // mind spells
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS,DURATION_TYPE_PERMANENT,IP_CONST_IMMUNITYMISC_MINDSPELLS);
break;
case 37: // paralysis
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS,DURATION_TYPE_PERMANENT,IP_CONST_IMMUNITYMISC_PARALYSIS);
break;
case 38: // poison
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS,DURATION_TYPE_PERMANENT,IP_CONST_IMMUNITYMISC_POISON);
break;
case 39: // all immunitys
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS,DURATION_TYPE_PERMANENT);
break;
// skip 40 as we ran out of immunitys
case 41: // attack bonus
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_ATTACK_BONUS,DURATION_TYPE_PERMANENT);
break;
// we can jump right into saves from here
case 42: // fortitude save
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC,DURATION_TYPE_PERMANENT,IP_CONST_SAVEBASETYPE_FORTITUDE);
break;
case 43: // reflex save
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC,DURATION_TYPE_PERMANENT,IP_CONST_SAVEBASETYPE_REFLEX);
break;
case 44: // will save
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC,DURATION_TYPE_PERMANENT,IP_CONST_SAVEBASETYPE_WILL);
break;
case 45: // universal save
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_SAVING_THROW_BONUS,DURATION_TYPE_PERMANENT);
break;
case 46: // all saves
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC,DURATION_TYPE_PERMANENT);
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_SAVING_THROW_BONUS,DURATION_TYPE_PERMANENT);
break;
// ran out of saves, nothing else to fill in till 51
case 51: // freedom of movement
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_FREEDOM_OF_MOVEMENT,DURATION_TYPE_PERMANENT);
break;
case 52: // haste
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_HASTE,DURATION_TYPE_PERMANENT);
break;
case 53: // keen
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_KEEN,DURATION_TYPE_PERMANENT);
break;
case 54: // true seeing
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_TRUE_SEEING,DURATION_TYPE_PERMANENT);
break;
case 55: // spell resistance
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_SPELL_RESISTANCE,DURATION_TYPE_PERMANENT);
break;
case 56: // unlimited ammo
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_UNLIMITED_AMMUNITION,DURATION_TYPE_PERMANENT);
break;
case 57: // vampiric regen
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_REGENERATION_VAMPIRIC,DURATION_TYPE_PERMANENT);
break;
case 58: // improved evasion
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_IMPROVED_EVASION,DURATION_TYPE_PERMANENT);
break;
case 59: // massive crits
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_MASSIVE_CRITICALS,DURATION_TYPE_PERMANENT);
break;
case 60: // visual effects
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_VISUALEFFECT,DURATION_TYPE_PERMANENT);
break;
case 61: // regeneration
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_REGENERATION,DURATION_TYPE_PERMANENT);
break;
case 62: // remove all properties
IPRemoveAllItemProperties(oItem,DURATION_TYPE_PERMANENT);
break;
case 63: // all feats
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_BONUS_FEAT,DURATION_TYPE_PERMANENT);
break;
case 64: // all skills
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_SKILL_BONUS,DURATION_TYPE_PERMANENT);
break;
case 65: // all cast spells
IPRemoveMatchingItemProperties(oItem,ITEM_PROPERTY_CAST_SPELL,DURATION_TYPE_PERMANENT);
break;
}
}
void SetRemovalCost(object oOriginal, object oModified, object oSmith)
{
int y = GetGoldPieceValue(oModified);
int x = GetGoldPieceValue(oOriginal);
float fDiff = IntToFloat(abs(y-x));
float fGoldCost = fDiff * PROPERTY_REMOVAL_VAR;
float fTokenCost;
if(x > L_20)
{
fGoldCost = fGoldCost * EPIC_COST_VAR;
fTokenCost = fDiff * EPIC_COST_VAR;
}
fTokenCost /= FORGE_TOKEN_VALUE;
int iGold = FloatToInt(fGoldCost);
int iToken = FloatToInt(fTokenCost);
if (PAYMENT_METHOD == 1) // Gold for payment
{
if(GetLocalInt(oSmith,"Visual"))
{
iGold = VISUAL_GOLD_VALUE;
iToken = 0;
}
if(y <= x)
{
SetLocalInt(oSmith,"Refund",TRUE);
}
if(iGold < 1)
{
iGold = 1;
iToken = 0;
}
SetLocalInt(oSmith,"GoldCost",iGold);
SetLocalInt(oSmith,"TokenCost",0);
SetSmithToken(oSmith,IntToString(iGold),"0",dmGetNewLevel(oModified));
}
else
if(PAYMENT_METHOD == 2) // Tokens used instead
{
if(GetLocalInt(oSmith,"Visual"))
{
iGold = 0;
iToken = VISUAL_TOKEN_VALUE;
}
if(y <= x)
{
SetLocalInt(oSmith,"Refund",TRUE);
}
if(iToken < 1)
{
iGold = 0;
iToken = 1;
}
SetLocalInt(oSmith,"GoldCost",0);
SetLocalInt(oSmith,"TokenCost",iToken);
SetSmithToken(oSmith,"0",IntToString(iToken),dmGetNewLevel(oModified));
}
else
if(PAYMENT_METHOD == 3) // Use both gold and tokens
{
if(GetLocalInt(oSmith,"Visual"))
{
iGold = VISUAL_GOLD_VALUE;
iToken = VISUAL_TOKEN_VALUE;
}
if(y <= x)
{
SetLocalInt(oSmith,"Refund",TRUE);
}
if(iToken < 1) iToken = 1;
if(iGold < 1) iGold = 1;
SetLocalInt(oSmith,"GoldCost",iGold);
SetLocalInt(oSmith,"TokenCost",iToken);
SetSmithToken(oSmith,IntToString(iGold),IntToString(iToken),dmGetNewLevel(oModified));
}
}
void ModItemWithRemoval(object oOriginal, object oForge, object oAnvil, object oSmith, int ModCode, int Mods = -1)
{
object oModified = CopyItem(oOriginal,oAnvil);
dmRemoveProperty(oModified,ModCode,Mods);
DelayCommand(0.3, SetRemovalCost(oOriginal, oModified, oSmith));
}