Added NWN Dark Sun module contents
Added NWN Dark Sun module contents.
This commit is contained in:
166
nwnds_module/hench_i0_monsho.nss
Normal file
166
nwnds_module/hench_i0_monsho.nss
Normal file
@@ -0,0 +1,166 @@
|
||||
/*
|
||||
|
||||
Henchman Inventory And Battle AI
|
||||
|
||||
This file is used for responding to monster shouts. Mostly
|
||||
involves getting the listening creature to start attacking
|
||||
unseen and unheard foe.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
#include "hench_i0_act"
|
||||
#include "hench_i0_ai"
|
||||
|
||||
|
||||
// void main() { }
|
||||
|
||||
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Respond To Shouts
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Allows the listener to react in a manner
|
||||
consistant with the given shout but only to one
|
||||
combat shout per round
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Oct 25, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
//NOTE ABOUT COMMONERS
|
||||
/*
|
||||
Commoners are universal cowards. If you attack anyone they will flee for 4 seconds away from the attacker.
|
||||
However to make the commoners into a mob, make a single commoner at least 10th level of the same faction.
|
||||
If that higher level commoner is attacked or killed then the commoners will attack the attacker. They will disperse again
|
||||
after some of them are killed. Should NOT make multi-class creatures using commoners.
|
||||
*/
|
||||
//NOTE ABOUT BLOCKERS
|
||||
/*
|
||||
It should be noted that the Generic Script for On Dialogue attempts to get a local set on the shouter by itself.
|
||||
This object represents the LastOpenedBy object. It is this object that becomes the oIntruder within this function.
|
||||
*/
|
||||
|
||||
//NOTE ABOUT INTRUDERS
|
||||
/*
|
||||
The intruder object is for cases where a placable needs to pass a LastOpenedBy Object or a AttackMyAttacker
|
||||
needs to make his attacker the enemy of everyone.
|
||||
*/
|
||||
|
||||
// modified form of shout handler, calls different routines
|
||||
void HenchMonRespondToShout(object oShouter, int nShoutIndex, object oIntruder = OBJECT_INVALID)
|
||||
{
|
||||
// Pausanias: Do not respond to shouts if you've surrendered.
|
||||
int iSurrendered = GetLocalInt(OBJECT_SELF,"Generic_Surrender");
|
||||
if (iSurrendered) return;
|
||||
|
||||
switch (nShoutIndex)
|
||||
{
|
||||
case 1://NW_GENERIC_SHOUT_I_WAS_ATTACKED:
|
||||
case 3://NW_GENERIC_SHOUT_I_AM_DEAD:
|
||||
{
|
||||
object oTarget = oIntruder;
|
||||
if(!GetIsObjectValid(oTarget))
|
||||
{
|
||||
oTarget = GetLastHostileActor(oShouter);
|
||||
if (!GetIsObjectValid(oTarget))
|
||||
{
|
||||
oTarget = GetLocalObject(oShouter, sHenchLastTarget);
|
||||
}
|
||||
}
|
||||
if(!GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL))
|
||||
{
|
||||
if(!GetLevelByClass(CLASS_TYPE_COMMONER))
|
||||
{
|
||||
if(!GetIsObjectValid(GetAttemptedAttackTarget()) && !GetIsObjectValid(GetAttemptedSpellTarget()))
|
||||
{
|
||||
if(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsFriend(oTarget) && GetIsFriend(oShouter))
|
||||
{
|
||||
RemoveAmbientSleep();
|
||||
HenchDetermineCombatRound(oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (GetLevelByClass(CLASS_TYPE_COMMONER, oShouter) >= 10)
|
||||
{
|
||||
HenchStartAttack(GetLastHostileActor(oShouter));
|
||||
}
|
||||
else
|
||||
{
|
||||
HenchDetermineCombatRound(oTarget);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
HenchDetermineSpecialBehavior();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 2://NW_GENERIC_SHOUT_MOB_ATTACK:
|
||||
{
|
||||
if(!GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL))
|
||||
{
|
||||
//Is friendly check to make sure that only like minded commoners attack.
|
||||
if(GetIsFriend(oShouter))
|
||||
{
|
||||
HenchStartAttack(GetLastHostileActor(oShouter));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
HenchDetermineSpecialBehavior();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
//For this shout to work the object must shout the following
|
||||
//string sHelp = "NW_BLOCKER_BLK_" + GetTag(OBJECT_SELF);
|
||||
case 4: //BLOCKER OBJECT HAS BEEN DISTURBED
|
||||
{
|
||||
if(!GetLevelByClass(CLASS_TYPE_COMMONER))
|
||||
{
|
||||
if(!GetIsObjectValid(GetAttemptedAttackTarget()) && !GetIsObjectValid(GetAttemptedSpellTarget()))
|
||||
{
|
||||
if(GetIsObjectValid(oIntruder))
|
||||
{
|
||||
SetIsTemporaryEnemy(oIntruder);
|
||||
HenchDetermineCombatRound(oIntruder);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (GetLevelByClass(CLASS_TYPE_COMMONER, oShouter) >= 10)
|
||||
{
|
||||
HenchStartAttack(GetLastHostileActor(oShouter));
|
||||
}
|
||||
else
|
||||
{
|
||||
HenchDetermineCombatRound();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 5: //ATTACK MY TARGET
|
||||
{
|
||||
if(GetIsFriend(oShouter))
|
||||
{
|
||||
AdjustReputation(oIntruder, OBJECT_SELF, -100);
|
||||
SetIsTemporaryEnemy(oIntruder);
|
||||
HenchDetermineCombatRound(oIntruder);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 6: //CALL_TO_ARMS
|
||||
{
|
||||
//This was once commented out.
|
||||
HenchDetermineCombatRound();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user