69 lines
1.8 KiB
Plaintext
69 lines
1.8 KiB
Plaintext
int IsColdSubType( object oTarget )
|
|
{
|
|
object oHide = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oTarget);
|
|
|
|
if ( !GetIsObjectValid( oHide ) )
|
|
return FALSE;
|
|
|
|
int bCold = FALSE;
|
|
int bFire = FALSE;
|
|
int nIPType;
|
|
int nIPSubType;
|
|
|
|
itemproperty ipIP = GetFirstItemProperty(oHide);
|
|
|
|
while ( GetIsItemPropertyValid(ipIP) )
|
|
{
|
|
nIPType = GetItemPropertyType(ipIP);
|
|
nIPSubType = GetItemPropertySubType(ipIP);
|
|
if ( nIPType == ITEM_PROPERTY_DAMAGE_VULNERABILITY &&
|
|
nIPSubType == 10 ) // fire vuln
|
|
bFire = TRUE;
|
|
if ( nIPType == ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE &&
|
|
nIPSubType == 7 ) // cold immunity
|
|
bCold = TRUE;
|
|
|
|
if ( bFire && bCold )
|
|
return TRUE;
|
|
|
|
ipIP = GetNextItemProperty(oHide);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void main()
|
|
{
|
|
object oTarget = GetEnteringObject();
|
|
object oCaster = GetAreaOfEffectCreator();
|
|
|
|
if ( oTarget == oCaster )
|
|
return;
|
|
|
|
effect eCold = EffectDamage(d10(2),DAMAGE_TYPE_COLD);
|
|
effect eVis = EffectVisualEffect(VFX_IMP_FROST_S);
|
|
effect eRegen = EffectRegenerate(10,5.5);
|
|
effect eTurn = EffectTurnResistanceIncrease(6);
|
|
effect eVis2 = EffectVisualEffect(VFX_IMP_SUPER_HEROISM);
|
|
|
|
|
|
if ( GetIsEnemy(oTarget,oCaster) )
|
|
{
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT,eCold,oTarget);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,oTarget);
|
|
}
|
|
|
|
// check for fire and cold properties on hide to determine
|
|
// if creature is cold subtype
|
|
|
|
if ( IsColdSubType(oTarget) )
|
|
{
|
|
|
|
if ( GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD )
|
|
eRegen = EffectLinkEffects(eRegen,eTurn);
|
|
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis2,oTarget);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eRegen,oTarget,6.0);
|
|
}
|
|
|
|
}
|