generated from Jaysyn/ModuleTemplate
190 lines
6.4 KiB
Plaintext
190 lines
6.4 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Name corpse_save
|
|
//:: FileName
|
|
//::
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
Performs a test to know if OBJECT_SELF is destroyed
|
|
or not. Used for items saving throws.
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Alexandre Brunel
|
|
//:: Created On: 21/04/2003
|
|
//:://////////////////////////////////////////////
|
|
#include "corpse_lib"
|
|
//int magic
|
|
void main()
|
|
{
|
|
int baseItem = GetBaseItemType(OBJECT_SELF);
|
|
|
|
int fireDamages = GetDamageTaken(1);
|
|
int acidDamages = GetDamageTaken(2);
|
|
if(fireDamages <0)
|
|
{
|
|
fireDamages = 0;
|
|
}
|
|
if(acidDamages <0)
|
|
{
|
|
acidDamages = 0;
|
|
}
|
|
int otherDamages = GetDamageTaken() - (fireDamages + acidDamages);
|
|
int oldIdentified = GetIdentified(OBJECT_SELF);
|
|
|
|
//WriteTimestampedLogEntry("Dammages: fire = " + IntToString(fireDamages)+" acid = " + IntToString(acidDamages) + " others = "+ IntToString(otherDamages));//Debug
|
|
SetIdentified(OBJECT_SELF,TRUE);
|
|
|
|
int itemPrice = GetGoldPieceValue(OBJECT_SELF);
|
|
int ACModifier = 0;
|
|
//int weight
|
|
switch(baseItem)
|
|
{
|
|
//vulnerable acid
|
|
|
|
//Armor liked items
|
|
case BASE_ITEM_ARMOR:
|
|
case BASE_ITEM_TOWERSHIELD:
|
|
case BASE_ITEM_HELMET: ACModifier = GetItemACValue(OBJECT_SELF);
|
|
acidDamages = acidDamages * 2;
|
|
break;
|
|
//Weapons
|
|
case BASE_ITEM_BASTARDSWORD:
|
|
case BASE_ITEM_BATTLEAXE:
|
|
case BASE_ITEM_DIREMACE:
|
|
case BASE_ITEM_DOUBLEAXE:
|
|
case BASE_ITEM_DAGGER:
|
|
case BASE_ITEM_GREATAXE:
|
|
case BASE_ITEM_GREATSWORD:
|
|
case BASE_ITEM_HALBERD:
|
|
case BASE_ITEM_HANDAXE:
|
|
case BASE_ITEM_HEAVYCROSSBOW:
|
|
case BASE_ITEM_HEAVYFLAIL:
|
|
case BASE_ITEM_KAMA:
|
|
case BASE_ITEM_KATANA:
|
|
case BASE_ITEM_CLUB:
|
|
case BASE_ITEM_KUKRI:
|
|
case BASE_ITEM_LARGESHIELD:
|
|
case BASE_ITEM_LIGHTCROSSBOW:
|
|
case BASE_ITEM_LIGHTFLAIL:
|
|
case BASE_ITEM_LIGHTHAMMER:
|
|
case BASE_ITEM_LIGHTMACE:
|
|
case BASE_ITEM_LONGBOW:
|
|
case BASE_ITEM_LONGSWORD:
|
|
case BASE_ITEM_MORNINGSTAR:
|
|
case BASE_ITEM_QUARTERSTAFF:
|
|
case BASE_ITEM_RAPIER:
|
|
case BASE_ITEM_SCIMITAR:
|
|
case BASE_ITEM_SCYTHE:
|
|
case BASE_ITEM_SHORTBOW:
|
|
case BASE_ITEM_SHORTSPEAR:
|
|
case BASE_ITEM_SHORTSWORD:
|
|
case BASE_ITEM_SICKLE:
|
|
case BASE_ITEM_SMALLSHIELD:
|
|
case BASE_ITEM_THROWINGAXE:
|
|
case BASE_ITEM_TWOBLADEDSWORD:
|
|
case BASE_ITEM_WARHAMMER: ACModifier = 2; //Base weapons damage resistance.
|
|
acidDamages = acidDamages * 2;
|
|
break;
|
|
|
|
//small items
|
|
case BASE_ITEM_SHURIKEN:
|
|
case BASE_ITEM_RING:
|
|
case BASE_ITEM_AMULET:
|
|
case BASE_ITEM_KEY: acidDamages = FloatToInt(IntToFloat(acidDamages) * 2.5);
|
|
break;
|
|
|
|
/*Creature items
|
|
case BASE_ITEM_CBLUDGWEAPON:
|
|
|
|
case BASE_ITEM_CPIERCWEAPON:
|
|
case BASE_ITEM_CREATUREITEM:
|
|
case BASE_ITEM_CSLASHWEAPON:
|
|
case BASE_ITEM_CSLSHPRCWEAP:*/
|
|
|
|
//Vulnerable acid and fire
|
|
|
|
//ammo
|
|
case BASE_ITEM_DART:
|
|
case BASE_ITEM_ARROW:
|
|
case BASE_ITEM_BOLT:
|
|
case BASE_ITEM_BULLET: fireDamages = fireDamages * 2;
|
|
acidDamages = acidDamages * 2;
|
|
break;
|
|
//Clothes
|
|
case BASE_ITEM_CLOAK:
|
|
case BASE_ITEM_BOOTS:
|
|
case BASE_ITEM_BRACER:
|
|
case BASE_ITEM_GLOVES:
|
|
case BASE_ITEM_BELT: acidDamages = FloatToInt(IntToFloat(acidDamages) * 1.5);
|
|
fireDamages = fireDamages * 2;
|
|
break;
|
|
|
|
|
|
//Samll items.
|
|
case BASE_ITEM_BOOK:
|
|
case BASE_ITEM_POTIONS:
|
|
case BASE_ITEM_SCROLL: fireDamages = fireDamages * 3;
|
|
acidDamages = acidDamages * 3;
|
|
break;
|
|
//Magic scroll have better resistence
|
|
case BASE_ITEM_SPELLSCROLL: acidDamages = FloatToInt(IntToFloat(acidDamages) * 2.5);
|
|
fireDamages = FloatToInt(IntToFloat(fireDamages) * 2.5);
|
|
break;
|
|
|
|
//Magic items
|
|
case BASE_ITEM_MAGICROD:
|
|
case BASE_ITEM_MAGICSTAFF:
|
|
case BASE_ITEM_MAGICWAND:
|
|
|
|
//What the hell am I going to do with these.
|
|
case BASE_ITEM_SLING:
|
|
case BASE_ITEM_THIEVESTOOLS:
|
|
case BASE_ITEM_TORCH:
|
|
case BASE_ITEM_TRAPKIT:
|
|
break;
|
|
//Gold and gems must resist a bit more :-)
|
|
case BASE_ITEM_GEM:
|
|
case BASE_ITEM_GOLD: ACModifier = 8;
|
|
break;
|
|
case BASE_ITEM_HEALERSKIT:
|
|
case BASE_ITEM_LARGEBOX:
|
|
|
|
case BASE_ITEM_MISCLARGE:
|
|
case BASE_ITEM_MISCMEDIUM:
|
|
case BASE_ITEM_MISCSMALL:
|
|
case BASE_ITEM_MISCTALL:
|
|
case BASE_ITEM_MISCTHIN:
|
|
case BASE_ITEM_MISCWIDE:
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
SetIdentified(OBJECT_SELF,oldIdentified);
|
|
float ACFactor = 1.0;
|
|
|
|
/*if(ACModifier > 0)
|
|
{
|
|
ACFactor = 1.0/IntToFloat(ACModifier);
|
|
}*/
|
|
|
|
int total = FloatToInt(IntToFloat(otherDamages + acidDamages + fireDamages));
|
|
|
|
//WriteTimestampedLogEntry("Object "+GetTag(OBJECT_SELF)+" saving throw: "+IntToString(itemPrice/1000)+" damages: "+IntToString(total));//Debug
|
|
if(total >0 && total >= (itemPrice/1000)+ACModifier+d20())
|
|
{
|
|
object linked = GetLocalObject(OBJECT_SELF,CorpseOriginalObject);
|
|
|
|
if(GetIsObjectValid(linked))
|
|
{
|
|
DeleteLocalObject(OBJECT_SELF,CorpseOriginalObject);
|
|
DestroyObject(linked);
|
|
if(GetIsObjectValid(GetLocalObject(OBJECT_SELF,CorpsePCCorpse)))
|
|
{
|
|
DestroyObject(GetLocalObject(OBJECT_SELF,CorpsePCCorpse));
|
|
}
|
|
}
|
|
DestroyObject(OBJECT_SELF);
|
|
//WriteTimestampedLogEntry("Object destroyed.");//Debug
|
|
}
|
|
}
|