Amon_PRC8/_removed/hench/nw_ch_ac2.nss
Jaysyn904 c5cffc37af Initial Commit
Initial Commit [v1.01]
2025-04-03 19:00:46 -04:00

77 lines
3.7 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Associate: On Percieve
//:: NW_CH_AC2
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Nov 19, 2001
//:://////////////////////////////////////////////
#include "hench_i0_ai"
void main()
{
//This is the equivalent of a force conversation bubble, should only be used if you want an NPC
//to say something while he is already engaged in combat.
if(GetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION))
{
ActionStartConversation(OBJECT_SELF);
}
object oLastPerceived = GetLastPerceived();
// if (GetIsEnemy(oLastPerceived))
// {
// Jug_Debug(GetName(OBJECT_SELF) + " perceived " + GetName(oLastPerceived) + " seen " + IntToString(GetLastPerceptionSeen()) + " heard " + IntToString(GetLastPerceptionHeard()) + " van " + IntToString(GetLastPerceptionVanished()) + " ina " + IntToString(GetLastPerceptionInaudible()) + " action " + IntToString(GetCurrentAction()));
// }
// TODO HotU added check for stealth
if (!GetAssociateState(NW_ASC_MODE_STAND_GROUND))
{
//If the last perception event was hearing based or if someone vanished then go to search mode
if (GetLastPerceptionVanished() || GetLastPerceptionInaudible())
{
if (!GetObjectSeen(oLastPerceived) && !GetObjectHeard(oLastPerceived) &&
!GetIsDead(oLastPerceived) && GetArea(oLastPerceived) == GetArea(OBJECT_SELF) &&
GetIsEnemy(oLastPerceived))
{
// add check if target - prevents creature from following the target
// due to ActionAttack without actually perceiving them
if (GetLocalObject(OBJECT_SELF, sHenchLastTarget) == oLastPerceived)
{
DeleteLocalObject(OBJECT_SELF, sHenchLastTarget);
HenchDetermineCombatRound(oLastPerceived, TRUE);
}
}
}
else if(GetLastPerceptionSeen())
{
//Do not bother checking the last target seen if already fighting
// PAUS: No, actually please do check
// Auldar: Use these more accurate checks for being in combat. ie uncomment them.
if(!GetIsObjectValid(GetAttemptedAttackTarget()) &&
!GetIsObjectValid(GetAttackTarget()) &&
!GetIsObjectValid(GetAttemptedSpellTarget()) && GetCurrentAction() != ACTION_TAUNT)
{
//Check if the last percieved creature was actually seen
if(GetIsEnemy(oLastPerceived) && !GetIsDead(oLastPerceived))
{
// Jug_Debug(GetName(OBJECT_SELF) + " perceived " + GetName(oLastPerceived) + " seen " + IntToString(GetLastPerceptionSeen()) + " heard " + IntToString(GetLastPerceptionHeard()) + " van " + IntToString(GetLastPerceptionVanished()) + " ina " + IntToString(GetLastPerceptionInaudible()) + " action " + IntToString(GetCurrentAction()));
SetFacingPoint(GetPosition(oLastPerceived));
HenchDetermineCombatRound(oLastPerceived);
}
//Linked up to the special conversation check to initiate a special one-off conversation
//to get the PCs attention
else if (GetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION) && GetIsPC(oLastPerceived))
{
ActionStartConversation(OBJECT_SELF);
}
}
}
}
if(GetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_PERCEIVE));
}
}