Initial commit. Updated release archive.
This commit is contained in:
109
_module/nss/m_rustm_cmbt_end.nss
Normal file
109
_module/nss/m_rustm_cmbt_end.nss
Normal file
@@ -0,0 +1,109 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Rust Monster Antennae Attack
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Handles antennae attack and rusting functions
|
||||
if attack hits. Also calls the end of combat
|
||||
script every round.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Based on End of Round Combat Script by Preston Watamaniuk
|
||||
//:: Modified by LordEmil (July-30-2002) to include rust monster abilities
|
||||
//:: Modified by El Magnifico Uno (Sept-11-2002) to enhance an already great script
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "NW_I0_GENERIC"
|
||||
|
||||
// this will check to see if the object is metal
|
||||
// or is partly metal - Returns 0 if no metal,
|
||||
// 1 if part metal, 2 if mostly metal
|
||||
// type 16 is armor and needs an extra check
|
||||
int IsItemMetal(object oItem)
|
||||
{
|
||||
int nReturnVal=0;
|
||||
int type=GetBaseItemType(oItem);
|
||||
if((type<6)||type==9||type==10||type==12||type==13||type==17||type==18
|
||||
||type==22||type==27||type==32||type==33||type==35||type==37||type==28
|
||||
||type==40||type==41||type==42||type==47||type==51||type==52||type==53
|
||||
||type==57||type==59||type==60||type==63||type==65||type==76)
|
||||
{
|
||||
nReturnVal=2;// Mostly metal
|
||||
}
|
||||
if(type==7||type==7||type==19||type==20||type==21||type==28||type==31
|
||||
||type==44||type==45||type==46||type==56||type==62||type==78
|
||||
||type==25||type==55||type==58)
|
||||
{
|
||||
nReturnVal=1;// Part metal
|
||||
}
|
||||
if(type==BASE_ITEM_ARMOR)// see what kind of armor
|
||||
{
|
||||
int ac=GetItemACValue (oItem);
|
||||
int limit=3;
|
||||
if(GetItemHasItemProperty(oItem,ITEM_PROPERTY_AC_BONUS))limit=5;
|
||||
if(ac>limit)
|
||||
{
|
||||
nReturnVal=2;// mostly metal
|
||||
}
|
||||
}
|
||||
return nReturnVal;
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL))
|
||||
{
|
||||
DetermineSpecialBehavior();
|
||||
}
|
||||
else if(!GetSpawnInCondition(NW_FLAG_SET_WARNINGS))
|
||||
{
|
||||
DetermineCombatRound();
|
||||
}
|
||||
// do rust attack against attakee
|
||||
if(GetIsInCombat())
|
||||
{
|
||||
string sItem;
|
||||
object oItem;
|
||||
int nItemSlot;
|
||||
int isMetal;
|
||||
object oPC=GetAttackTarget();
|
||||
if(oPC==OBJECT_INVALID)oPC=GetAttemptedAttackTarget();
|
||||
|
||||
if (GetDistanceToObject(oPC) < 2.5)
|
||||
{
|
||||
for(nItemSlot=0;nItemSlot<13;nItemSlot++)
|
||||
{
|
||||
oItem=GetItemInSlot(nItemSlot,oPC);
|
||||
isMetal=IsItemMetal(oItem);
|
||||
if(isMetal!=0)break;// found a target
|
||||
}
|
||||
// El Magnifico Uno - Added TouchAttack
|
||||
if(nItemSlot<13 && (TouchAttackMelee(oPC)>0))// we got one
|
||||
{
|
||||
sItem=GetName(oItem);
|
||||
SendMessageToPC(oPC,"The Rust Monster's antennae brush against your "+sItem );
|
||||
// El Magnifico Uno - Changed save mechanism
|
||||
// to a straight Reflex Save per 3e rules.
|
||||
// Normally only get a save for magical items.
|
||||
// But was lazy and didn't want to list 60+
|
||||
// instances of GetItemHasProperty.
|
||||
if(ReflexSave(oPC,20))// saved
|
||||
{
|
||||
SendMessageToPC(oPC,"But the "+sItem+" resists the rust effects!");
|
||||
}else //didn't save
|
||||
{
|
||||
SendMessageToPC(oPC,"And destroys your "+sItem+"!");
|
||||
DestroyObject(oItem);
|
||||
//El Magnifico Uno - Changed Effect
|
||||
// ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_ACID_L),oPC);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_ACID),GetLocation(oPC));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(GetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT))
|
||||
{
|
||||
SignalEvent(OBJECT_SELF, EventUserDefined(1003));
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user