Schedule: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
No edit summary
(Added default schedules)
Line 60: Line 60:


This method is called after the schedule selection, it can be used to translate parent NPC schedules to child specific schedules, it's useful if you want to change the default schedules to run your own ones instead.
This method is called after the schedule selection, it can be used to translate parent NPC schedules to child specific schedules, it's useful if you want to change the default schedules to run your own ones instead.
==Default Schedule List==
SCHED_NONE
SCHED_IDLE_STAND
SCHED_IDLE_WALK
SCHED_IDLE_WANDER
SCHED_WAKE_ANGRY
SCHED_ALERT_FACE
SCHED_ALERT_FACE_BESTSOUND
SCHED_ALERT_SCAN
SCHED_ALERT_STAND
SCHED_ALERT_WALK
SCHED_INVESTIGATE_SOUND
SCHED_COMBAT_FACE
SCHED_COMBAT_SWEEP
SCHED_FEAR_FACE
SCHED_COMBAT_STAND
SCHED_COMBAT_WALK
SCHED_CHASE_ENEMY
SCHED_CHASE_ENEMY_FAILED
SCHED_VICTORY_DANCE
SCHED_TARGET_FACE
SCHED_TARGET_CHASE
SCHED_SMALL_FLINCH
SCHED_BIG_FLINCH
SCHED_BACK_AWAY_FROM_ENEMY
SCHED_BACK_AWAY_FROM_SAVE_POSITION
SCHED_TAKE_COVER_FROM_ENEMY
SCHED_TAKE_COVER_FROM_BEST_SOUND
SCHED_FLEE_FROM_BEST_SOUND
SCHED_TAKE_COVER_FROM_ORIGIN
SCHED_FAIL_TAKE_COVER
SCHED_RUN_FROM_ENEMY
SCHED_RUN_FROM_ENEMY_FALLBACK
SCHED_MOVE_TO_WEAPON_RANGE
SCHED_ESTABLISH_LINE_OF_FIRE
SCHED_ESTABLISH_LINE_OF_FIRE_FALLBACK
SCHED_PRE_FAIL_ESTABLISH_LINE_OF_FIRE
SCHED_FAIL_ESTABLISH_LINE_OF_FIRE
SCHED_SHOOT_ENEMY_COVER
SCHED_COWER
SCHED_MELEE_ATTACK1
SCHED_MELEE_ATTACK2
SCHED_RANGE_ATTACK1
SCHED_RANGE_ATTACK2
SCHED_SPECIAL_ATTACK1
SCHED_SPECIAL_ATTACK2
SCHED_STANDOFF
SCHED_ARM_WEAPON
SCHED_DISARM_WEAPON
SCHED_HIDE_AND_RELOAD
SCHED_RELOAD
SCHED_AMBUSH
SCHED_DIE
SCHED_DIE_RAGDOLL
SCHED_WAIT_FOR_SCRIPT
SCHED_AISCRIPT
SCHED_SCRIPTED_WALK
SCHED_SCRIPTED_RUN
SCHED_SCRIPTED_CUSTOM_MOVE
SCHED_SCRIPTED_WAIT
SCHED_SCRIPTED_FACE
SCHED_SCENE_GENERIC
SCHED_NEW_WEAPON
SCHED_NEW_WEAPON_CHEAT
SCHED_GET_HEALTHKIT
SCHED_WAIT_FOR_SPEAK_FINISH
SCHED_GIVE_WAY
SCHED_MOVE_AWAY
SCHED_MOVE_AWAY_FAIL
SCHED_MOVE_AWAY_END
SCHED_FORCED_GO
SCHED_FORCED_GO_RUN
SCHED_NPC_FREEZE
SCHED_PATROL_WALK
SCHED_COMBAT_PATROL
SCHED_PATROL_RUN
SCHED_RUN_RANDOM
SCHED_FALL_TO_GROUND
SCHED_DROPSHIP_DUSTOFF
SCHED_FLINCH_PHYSICS
SCHED_FAIL

Revision as of 19:43, 3 August 2005


A Schedule is a list of Tasks the NPC is to perform, a schedule could be to go to a specific location, such as SCHED_FORCED_GO or a schedule to create an attack plan SCHED_PLAN_ATTACK. The NPC's schedule selection is governed by its current State and Conditions.

Some interesting methods are described below that make up CAI_BaseNPC class.

SelectSchedule()

In CAI_BaseNPC the method SelectSchedule() determines what schedule the NPC should run depending on its state and conditions.

In CAI_BaseNPC, all of the default States are considered, and additional methods are called to select the schedule based on condition, for example, when the NPC is in the NPC_STATE_IDLE, the method SelectIdleSchedule() is called, this method is similar to SelectSchedule(), all it does is select a schedule based on the npc's state and conditions.

Child classes can implement these schedule selection methods to select their own custom schedules based on their own custom conditions.

For instance, we could create our own schedule SCHED_MEDICALPOINT_GO and a condition COND_NEEDS_MEDICAL_ASSISTANCE.

We could implement the schedule selection in SelectSchedule() or a schedule selection method variation as follows

if(HasCondition(COND_NEEDS_MEDICAL_ASSISTANCE)) 
     return SCHED_MEDICALPOINT_GO; 

The following switch statement has been taken from SelectSchedule() in CAI_BaseNPC, it shows how the different variations of schedule selection is chosen depending on the NPC's state.


switch( m_NPCState ) 
{ 
      case NPC_STATE_NONE: 
            DevWarning( 2, "NPC_STATE IS NONE!\n" ); 
            break; 
      
      case NPC_STATE_PRONE: 
            return SCHED_IDLE_STAND; 
      case NPC_STATE_IDLE: 
            AssertMsgOnce( GetEnemy() == NULL, "NPC has enemy but is not in combat state?" ); 
            return SelectIdleSchedule(); 

      case NPC_STATE_ALERT: 
            AssertMsgOnce( GetEnemy() == NULL, "NPC has enemy but is not in combat state?" ); 
            return SelectAlertSchedule(); 

      case NPC_STATE_COMBAT: 
            return SelectCombatSchedule(); 
      
      case NPC_STATE_DEAD: 
            return SelectDeadSchedule(); 

      case NPC_STATE_SCRIPT: 
            return SelectScriptSchedule(); 

      default: 
            DevWarning( 2, "Invalid State for SelectSchedule!\n" ); 
            break; 
} 

TranslateSchedule()

This method is called after the schedule selection, it can be used to translate parent NPC schedules to child specific schedules, it's useful if you want to change the default schedules to run your own ones instead.

Default Schedule List

SCHED_NONE

SCHED_IDLE_STAND

SCHED_IDLE_WALK

SCHED_IDLE_WANDER

SCHED_WAKE_ANGRY

SCHED_ALERT_FACE

SCHED_ALERT_FACE_BESTSOUND

SCHED_ALERT_SCAN

SCHED_ALERT_STAND

SCHED_ALERT_WALK

SCHED_INVESTIGATE_SOUND

SCHED_COMBAT_FACE

SCHED_COMBAT_SWEEP

SCHED_FEAR_FACE

SCHED_COMBAT_STAND

SCHED_COMBAT_WALK

SCHED_CHASE_ENEMY

SCHED_CHASE_ENEMY_FAILED

SCHED_VICTORY_DANCE

SCHED_TARGET_FACE

SCHED_TARGET_CHASE

SCHED_SMALL_FLINCH

SCHED_BIG_FLINCH

SCHED_BACK_AWAY_FROM_ENEMY

SCHED_BACK_AWAY_FROM_SAVE_POSITION

SCHED_TAKE_COVER_FROM_ENEMY

SCHED_TAKE_COVER_FROM_BEST_SOUND

SCHED_FLEE_FROM_BEST_SOUND

SCHED_TAKE_COVER_FROM_ORIGIN

SCHED_FAIL_TAKE_COVER

SCHED_RUN_FROM_ENEMY

SCHED_RUN_FROM_ENEMY_FALLBACK

SCHED_MOVE_TO_WEAPON_RANGE

SCHED_ESTABLISH_LINE_OF_FIRE

SCHED_ESTABLISH_LINE_OF_FIRE_FALLBACK

SCHED_PRE_FAIL_ESTABLISH_LINE_OF_FIRE

SCHED_FAIL_ESTABLISH_LINE_OF_FIRE

SCHED_SHOOT_ENEMY_COVER

SCHED_COWER

SCHED_MELEE_ATTACK1

SCHED_MELEE_ATTACK2

SCHED_RANGE_ATTACK1

SCHED_RANGE_ATTACK2

SCHED_SPECIAL_ATTACK1

SCHED_SPECIAL_ATTACK2

SCHED_STANDOFF

SCHED_ARM_WEAPON

SCHED_DISARM_WEAPON

SCHED_HIDE_AND_RELOAD

SCHED_RELOAD

SCHED_AMBUSH

SCHED_DIE

SCHED_DIE_RAGDOLL

SCHED_WAIT_FOR_SCRIPT

SCHED_AISCRIPT

SCHED_SCRIPTED_WALK

SCHED_SCRIPTED_RUN

SCHED_SCRIPTED_CUSTOM_MOVE

SCHED_SCRIPTED_WAIT

SCHED_SCRIPTED_FACE

SCHED_SCENE_GENERIC

SCHED_NEW_WEAPON

SCHED_NEW_WEAPON_CHEAT

SCHED_GET_HEALTHKIT

SCHED_WAIT_FOR_SPEAK_FINISH


SCHED_GIVE_WAY

SCHED_MOVE_AWAY

SCHED_MOVE_AWAY_FAIL

SCHED_MOVE_AWAY_END

SCHED_FORCED_GO

SCHED_FORCED_GO_RUN

SCHED_NPC_FREEZE

SCHED_PATROL_WALK

SCHED_COMBAT_PATROL

SCHED_PATROL_RUN

SCHED_RUN_RANDOM

SCHED_FALL_TO_GROUND

SCHED_DROPSHIP_DUSTOFF


SCHED_FLINCH_PHYSICS


SCHED_FAIL