Author Topic: [GUIDE] AI Types  (Read 805 times)

Offline Tryskell

  • The cute dwarf
  • Administrator
  • Core
  • *
  • Posts: 3.763
  • Awards You don't like me, but I got the power. Forever dwarf.
[GUIDE] AI Types
« on: August 07, 2015, 11:41:40 AM »
(This is a copy-paste from my own MxC topic in order to keep things)

I decided to share some knowledge regarding AI system on L2J, since someone asked me.

Quote
Hello Tryskell , I would like to learn about AIs? Are they important in L2J? Can you give me some info about them(about what exactly they are) because I see them a lot And i can't understand a lot. And then if you could tell me some .java files to read (from eclipse , l2 acis) to understand them better how they work? (with the proper row if possible)
thank you a lot, i wait for your answer !


Hello, you got different types of AIs and aspects, they all are melted together to form something called "AI".

You have to understand AI works differently on L2OFF compared to L2J. On L2OFF, each NPC got its particular script, while on L2J all is mutualized, then few scripts bypass basic behavior.

AI TYPES

To begin with, you got AI types. L2 got few : DEFAULT, MAGE, HEALER, ARCHER. Default launch skills under a 10 or 15% chance, and melee attack. Mage only launch skills, 2 types (far or near skills) depending about player position. They attack when oom. Healer only heal and flee under attack. Archers attack and got a % to flee when a player is near them.

GENERIC AI BEHAVIOR

On L2J, as stated higher, the behavior of any mob is mutualized under a unique AI script system. This system is localized into gameserver.ai. Then few scripts, located under data/scripts (notably the ai folder) bypass the regular behavior to handle special cases.

Generic AI system is kinda simple : an AI Object is linked to a L2Character, via the getAI() method (which creates this object if missing). The base of all AI is named AbstractAI, the behavior is shared amongst all AI types, or eventually overidden if it doesn't fit. Different AIs are linked to different types of instance : for example, L2PcInstance would be linked to a L2PlayerAI (which inherits behavior from L2PlayableAI, L2CharacterAI and AbstractAI).

The generic system works under an Intention system (Desire on L2OFF), you can find all (documented) cases on CtrlIntention.java. L2 is supposed to store the current and future intentions. Another layer used by the AI system in order to send the correct intention is CtrlEvent.java ; it lists all possible scenarii. AbstractAI got a follow task, L2AttackableAI got a general task (which allows the mob to interact every second with his environnement depending about the intention and event), while L2SummonAI got a avoid task (used when you hit a summon, he flees).

SCRIPTED AI BEHAVIOR

Another layer of AI system is called by scripts. Scripts handle specific scenarii, which would requiere to create a specific AI for a specific npcId. This system is heavily supported by quest system, notably Quest.java. QuestEventType lists all possible events. Basically said, listeners are written on specific point of code (aggro, cast a spell, move, etc). Once a listener is triggered, the content of script is used, which allow to bypass generic AI behavior. An important script is named L2AttackableAIScript.java. Those scripts are stored under data/scripts folder.
« Last Edit: September 11, 2015, 06:07:36 PM by Tryskell »
Code: [Select]
<html><body>Triskel:<br>
Triskel does not speak with foolish fellows who do not know their profession!
</body></html>