324 lines
14 KiB
Plaintext
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));
|
|
}
|