Difference between revisions of "Ai Overview"
Line 19: | Line 19: | ||
:Messages using the <code>Sendmessage</code> function tell the NPC someone or something sent it a message. To understand Messages the NPC needs to have the appropriate [[EventHandlers]]. | :Messages using the <code>Sendmessage</code> function tell the NPC someone or something sent it a message. To understand Messages the NPC needs to have the appropriate [[EventHandlers]]. | ||
;Views | ;Views | ||
− | :Views are added to objects by using the <code>AddView</code> | + | :Views are added to objects by using the <code>AddView</code> function. A view is basically a search function performed on a configurably regular basis which triggers an event if something matching that search function enters its configured range. Mobiles can carry around views with them. |
;FindObjects | ;FindObjects | ||
:The <code>FindObjects</code> function can be executed whenever an NPC needs to find something. | :The <code>FindObjects</code> function can be executed whenever an NPC needs to find something. | ||
+ | Each of these sensing mechanisms can call functions provided by the core Ai which lives in <code>base_ai_state_machine.lua</code>. | ||
+ | SchedulePulse() | ||
+ | AI.StateMachine.Init(initialState) | ||
+ | AI.StateMachine.Shutdown() | ||
+ | AI.StateMachine.ChangeState(newState) | ||
+ | AI.StateMachine.ChangeSubState(newState) | ||
+ | AI.StateMachine.EndSubStates(success,reason) | ||
+ | HandleAiPulse() | ||
+ | |||
+ | Especially important is function </code>AI.StateMachine.ChangeState(newState)</code> which could be called when something happens our NPC needs to react to, e.g. a wolf entering the perception range of a turkey. | ||
+ | |||
+ | In <code>base_ai_mob.lua</code> we find the following line of code in the initialization part: | ||
+ | <syntaxhighlight lang="lua"> | ||
+ | AddView("chaseRange",SearchMobileInRange(chaseViewRange,false,false,true)) | ||
+ | <syntaxhighlight> | ||
Revision as of 20:22, 1 November 2016
Ai Overview
This article is about helping to understand how the Ai in Shards Online works.
Some Basics:
The Artificial Intelligence for NPCs follows a general Ai Principle which is the cycle of
- Sense
- Think
- Act
The model of implementation is a Finite State Machine(FSM). [Wikipedia Article Finite State Machine]
To understand how an FSM would transition from one state (e.g. "Idle") to another state (e.g. "Combat") in Shards Online (SO) it is important to understand the first step: "Sense".
How does an NPC sense the world?
There are several ways:
- Messages
- Messages using the
Sendmessage
function tell the NPC someone or something sent it a message. To understand Messages the NPC needs to have the appropriate EventHandlers. - Views
- Views are added to objects by using the
AddView
function. A view is basically a search function performed on a configurably regular basis which triggers an event if something matching that search function enters its configured range. Mobiles can carry around views with them. - FindObjects
- The
FindObjects
function can be executed whenever an NPC needs to find something.
Each of these sensing mechanisms can call functions provided by the core Ai which lives in base_ai_state_machine.lua
.
SchedulePulse() AI.StateMachine.Init(initialState) AI.StateMachine.Shutdown() AI.StateMachine.ChangeState(newState) AI.StateMachine.ChangeSubState(newState) AI.StateMachine.EndSubStates(success,reason) HandleAiPulse()
Especially important is function AI.StateMachine.ChangeState(newState) which could be called when something happens our NPC needs to react to, e.g. a wolf entering the perception range of a turkey.
In base_ai_mob.lua
we find the following line of code in the initialization part:
<syntaxhighlight lang="lua">
AddView("chaseRange",SearchMobileInRange(chaseViewRange,false,false,true))
<syntaxhighlight>