Tweaked several areas, mobs, and added
the codi ai to some mobs.
This commit is contained in:
121
_module/nss/no_ai_hrt.nss
Normal file
121
_module/nss/no_ai_hrt.nss
Normal file
@@ -0,0 +1,121 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: On Heartbeat
|
||||
//::
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
This script will have people perform default
|
||||
animations.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "no_lib_data"
|
||||
#include "no_inc"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if the AI level is very low and the combat AI is not active do nothing
|
||||
//need this change so that combat AI can shut itself down properly before ignoring heartbeats
|
||||
if ( GetAILevel() == AI_LEVEL_VERY_LOW && !IsActive() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ( IsActive() )
|
||||
{
|
||||
//if combat AI is active this is the only segment of the heartbeat that will run
|
||||
int iE = GetHostileCount( 50.0 );
|
||||
if ( iE == 0 )
|
||||
{
|
||||
object oA = GetFurthestActiveAlly( 50.0 );
|
||||
if ( GetIsObjectValid( oA ) && GetDistanceBetween( OBJECT_SELF, oA ) > 20.0 && !GetIsPerceived( oA ) )
|
||||
{
|
||||
DoMoveToObject( oA, TRUE );
|
||||
}
|
||||
else
|
||||
{
|
||||
ExecuteScript( "no_scr_shutdown", OBJECT_SELF );
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//combat AI isn't active
|
||||
if( GetSpawnInCondition( NW_FLAG_DAY_NIGHT_POSTING ) )
|
||||
{
|
||||
int nDay = FALSE;
|
||||
if( GetIsDay() || GetIsDawn() )
|
||||
{
|
||||
nDay = TRUE;
|
||||
}
|
||||
if( GetLocalInt( OBJECT_SELF, "NW_GENERIC_DAY_NIGHT" ) != nDay )
|
||||
{
|
||||
if( nDay == TRUE )
|
||||
{
|
||||
SetLocalInt( OBJECT_SELF, "NW_GENERIC_DAY_NIGHT", TRUE );
|
||||
}
|
||||
else
|
||||
{
|
||||
SetLocalInt( OBJECT_SELF, "NW_GENERIC_DAY_NIGHT", FALSE );
|
||||
}
|
||||
WalkWayPoints();
|
||||
}
|
||||
}
|
||||
|
||||
if( CanAct() )
|
||||
{
|
||||
object oE = GetTarget();
|
||||
if( !GetIsPostOrWalking() )
|
||||
{
|
||||
if( !GetIsObjectValid( GetAttemptedAttackTarget() ) && !GetIsObjectValid( GetAttemptedSpellTarget() ) )
|
||||
{
|
||||
//if( !GetIsObjectValid( GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN) ) )
|
||||
if ( !GetIsObjectValid( oE ) )
|
||||
{
|
||||
if( /*!GetBehaviorState( NW_FLAG_BEHAVIOR_SPECIAL ) &&*/ !IsInConversation( OBJECT_SELF ) )
|
||||
{
|
||||
if( GetSpawnInCondition( NW_FLAG_AMBIENT_ANIMATIONS ) || GetSpawnInCondition( NW_FLAG_AMBIENT_ANIMATIONS_AVIAN ) )
|
||||
{
|
||||
PlayMobileAmbientAnimations();
|
||||
}
|
||||
else if( GetIsEncounterCreature() )
|
||||
//won't be here unless this next condition is true so it is redundant to check it
|
||||
//!GetIsObjectValid( GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN ) ) )
|
||||
{
|
||||
PlayMobileAmbientAnimations();
|
||||
}
|
||||
else if( GetSpawnInCondition( NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS ) )
|
||||
//won't be in here unless this next condition is true so it is redundant to check it
|
||||
//!GetIsObjectValid( GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN ) ) )
|
||||
{
|
||||
PlayImmobileAmbientAnimations();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DetermineSpecialBehavior();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//DetermineCombatRound()
|
||||
InitCombat();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( GetSpawnInCondition( NW_FLAG_SLEEPING_AT_NIGHT ) )
|
||||
{
|
||||
effect eVis = EffectVisualEffect( VFX_IMP_SLEEP );
|
||||
if( d10() > 6 )
|
||||
{
|
||||
ApplyEffectToObject( DURATION_TYPE_INSTANT, eVis, OBJECT_SELF );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Signal heart beat event to userdef
|
||||
SignalEvent( OBJECT_SELF, EventUserDefined( 1001 ) );
|
||||
}
|
Reference in New Issue
Block a user