Moderator elections are being held. See Valve Developer Community:Moderator elections for more details.
Users who would like to run for moderator must be autoconfirmed and have at least 100 edits. Users can check their own edit count at Special:Preferences.
Users who would like to run for moderator must be autoconfirmed and have at least 100 edits. Users can check their own edit count at Special:Preferences.
Behaviors
Behaviors let you abstract AI code to a C++ class of its own which is not tied to any one NPC. You might want to create MensBathroomBehavior
for male NPCs and WomensBathroomBehavior
for female NPCs, for instance.
Authoring a behavior
Behavior code, for the most part, behaves in the same way and uses the same framework as AI code you would write directly into an NPC. There is a certain amount of 'glue' required between one and the NPCs that will use it however:
The behavior
- Create
bool CanSelectSchedule()
, which defines whether or not an NPC will 'defer' to the behavior for a given think. - Create
virtual const char *GetName() { return "MyBehavior friendly name"; }
. - Use
AI_BEGIN_CUSTOM_SCHEDULE_PROVIDER
instead ofAI_BEGIN_CUSTOM_NPC
(in the body). - Use
DEFINE_CUSTOM_SCHEDULE_PROVIDER
instead ofDEFINE_CUSTOM_AI
(in the header). - Use
GetOuter()->
to access the NPC object.
The NPC
- Include the header for your new behavior, and
ai_behavior.h
. - Create a member instance of your behavior.
- Register the instance in
CreateBehaviors()
withAddBehavior( &m_MyBehavior )
.- None of Valve's NPC base classes have any behaviors registered - it may not be possible to do it at that level.
- Call
BehaviorSelectSchedule()
at some point inSelectSchedule()
. This probably already happens if you're working with a stock NPC.
Activating a behaviour manually
Behaviours are evaluated on every think with the logic in CanSelectSchedule()
. If you want to manually enable a behavior until you disable it:
MyNPC::SelectSchedule() { if ( m_MyBehavior.m_bActive ) { DeferSchedulingToBehavior( &m_MyBehavior ); // Normally happens in BehaviorSelectSchedule() return BaseClass::SelectSchedule(); // This will now poll your behavior } ... }
Warning:Until you release it, this will lock the NPC into your behavior code and only your behavior code.