mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-07-31 00:15:54 -04:00
174 lines
4.1 KiB
Plaintext
174 lines
4.1 KiB
Plaintext
include ai.ai_aggro;
|
|
include ai.ai_combat;
|
|
include library.ai_lib;
|
|
include library.attrib;
|
|
include library.factions;
|
|
include library.pet_lib;
|
|
include library.utils;
|
|
|
|
const string ACTION_ALERT = "alert";
|
|
const string ACTION_THREATEN = "threaten";
|
|
|
|
trigger OnAttach()
|
|
{
|
|
if ( !hasObjVar( self, "ai.diction") )
|
|
setObjVar( self, "ai.diction", "military" );
|
|
|
|
setAttributeAttained(self, attrib.GUARD);
|
|
setAttributeInterested(self, attrib.THUG);
|
|
setAttributeInterested(self, attrib.HERBIVORE);
|
|
setAttributeInterested(self, attrib.CARNIVORE);
|
|
|
|
if ( getConfigSetting("GameServer", "disableAITriggerVolumes") == null )
|
|
createTriggerVolume( ai_lib.ALERT_VOLUME_NAME, ai_lib.aiGetApproachTriggerRange( self ), true );
|
|
|
|
setObjVar( self, "ai.rangedOnly", true );
|
|
|
|
if ( !hasObjVar( self, "ai.grenadeType" ))
|
|
{
|
|
setObjVar( self, "ai.grenadeType", "object/weapon/ranged/grenade/grenade_fragmentation" );
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
trigger OnTriggerVolumeEntered( string volumeName, obj_id breacher )
|
|
{
|
|
if (ai_lib.isInCombat(self))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
if (breacher == self)
|
|
return SCRIPT_CONTINUE;
|
|
|
|
if (isIncapacitated(self))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
if (!isMob( breacher))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
if (ai_lib.isMonster(breacher))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
if (hasObjVar( self, "ai.inFormation" ))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
if (volumeName == ai_lib.ALERT_VOLUME_NAME)
|
|
{
|
|
const int reaction = factions.getFactionReaction( self, breacher );
|
|
|
|
switch ( reaction )
|
|
{
|
|
case factions.REACTION_NEGATIVE :
|
|
if (!hasObjVar( self, "ai.inFormation" ))
|
|
ai_lib.barkString( self, "hi_mean" );
|
|
break;
|
|
case factions.REACTION_POSITIVE:
|
|
if (!hasObjVar( self, "ai.inFormation" ))
|
|
ai_lib.barkString( self, "hi_nice" );
|
|
break;
|
|
default:
|
|
if (!hasObjVar( self, "ai.inFormation" ))
|
|
ai_lib.barkString( self, "hi_mid" );
|
|
break;
|
|
}
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
trigger OnTriggerVolumeExited( string volumeName, obj_id breacher )
|
|
{
|
|
if (ai_lib.isAiDead(self))
|
|
return SCRIPT_OVERRIDE;
|
|
|
|
if ( volumeName == ai_lib.ALERT_VOLUME_NAME && ( isMob( breacher)
|
|
&& !ai_lib.isMonster( breacher) ) && !ai_lib.isInCombat( self )
|
|
&& !ai_lib.isAiDead( breacher ) && !hasObjVar( self, "ai.inFormation" )
|
|
)
|
|
{
|
|
int reaction = factions.getFactionReaction( self, breacher );
|
|
switch ( reaction )
|
|
{
|
|
case factions.REACTION_NEGATIVE :
|
|
ai_lib.barkString( self, "bye_mean" );
|
|
break;
|
|
case factions.REACTION_POSITIVE:
|
|
ai_lib.barkString( self, "bye_nice" );
|
|
break;
|
|
default:
|
|
ai_lib.barkString( self, "bye_mid" );
|
|
break;
|
|
}
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
|
|
trigger OnBehaviorChange( int newBehavior, int oldBehavior, int[] changeFlags )
|
|
{
|
|
if ( ai_lib.isAiDead( self ) )
|
|
return SCRIPT_OVERRIDE;
|
|
|
|
if ( ai_lib.isInCombat( self ))
|
|
return SCRIPT_OVERRIDE;
|
|
|
|
if ( newBehavior > oldBehavior )
|
|
{
|
|
if ( newBehavior >= BEHAVIOR_THREATEN && newBehavior < BEHAVIOR_ATTACK )
|
|
{
|
|
doAgitateBehavior( self, newBehavior );
|
|
return SCRIPT_OVERRIDE;//don't do the default AI thing
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
else if ( newBehavior == BEHAVIOR_CALM )
|
|
{
|
|
//debugSpeakMsg( self, "I AM CALM AGAIN" );
|
|
ai_lib.barkString( self, "calm" );
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
//do default behavior stuff:
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
void doAgitateBehavior( obj_id npc, int behavior )
|
|
{
|
|
if ( isInvulnerable( npc ) )
|
|
return;
|
|
|
|
if ( getConfigSetting("GameServer", "disableAICombat")!=null )
|
|
return;
|
|
|
|
|
|
//debugSpeakMsg( npc, "doing custom thing" );
|
|
//obj_id threat = ai_lib.getBehaviorTarget( npc, behavior );
|
|
//if ( threat == null )
|
|
// return;
|
|
//else
|
|
// setObjVar( npc, "ai.threat", threat );
|
|
//
|
|
//switch ( behavior )
|
|
//{
|
|
// case BEHAVIOR_ALERT:
|
|
// stop( npc );
|
|
// ai_lib.setMood( npc, ai_lib.MOOD_NERVOUS );
|
|
// break;
|
|
// case BEHAVIOR_THREATEN:
|
|
// //debugSpeakMsg( npc, "Grrr!");
|
|
// faceTo( npc, threat );
|
|
// doAnimationAction( npc, ACTION_THREATEN );
|
|
// ai_lib.setMood( npc, ai_lib.MOOD_THREATEN );
|
|
// break;
|
|
// case BEHAVIOR_FLEE:
|
|
// startCombat(npc, threat);
|
|
// break;
|
|
// case BEHAVIOR_PANIC:
|
|
// startCombat(npc, threat);
|
|
// break;
|
|
// default :
|
|
// //debugSpeakMsg( npc, "default: " + behavior );
|
|
// break;
|
|
//}
|
|
}
|