l2-unlegits/l2ooghelper/L2ClientAI.h
2012-02-01 05:25:08 +00:00

81 lines
2.1 KiB
C++

#pragma once
#include "IL2Client.h"
enum AI_INTENTION_TYPE
{
INT_TYPE_NONE = 0,
INT_TYPE_GOTO,
INT_TYPE_ATTACK,
INT_TYPE_NPC_TALK
};
class AI_INTENTION
{
public:
AI_INTENTION();
AI_INTENTION( const AI_INTENTION& other );
const AI_INTENTION& operator=( const AI_INTENTION& other );
public:
AI_INTENTION_TYPE getType() const { return m_type; }
int getX() const { return m_x; }
int getY() const { return m_y; }
int getZ() const { return m_z; }
unsigned int getTargetOid() const { return m_target_oid; }
public:
void set_NONE() { m_type = INT_TYPE_NONE; }
void set_GOTO( int x, int y, int z );
void set_ATTACK( unsigned int target_oid );
void set_NPC_TALK( unsigned int npc_oid, const wchar_t *dlg_str );
protected:
AI_INTENTION_TYPE m_type;
int m_x;
int m_y;
int m_z;
unsigned int m_target_oid;
wchar_t m_npcdlg_string[256];
};
class AiIntentionQueue
{
public:
AiIntentionQueue();
~AiIntentionQueue();
public:
void pushIntention( AI_INTENTION i );
AI_INTENTION getIntention();
bool hasIntentions() const;
protected:
std::list<AI_INTENTION> m_q;
};
class L2ClientAI
{
public:
static const int THINK_DELAY = 500; // ms
public:
L2ClientAI( IL2Client *pinterfaceL2Client );
~L2ClientAI();
public:
void think();
void setFollow( bool enable, unsigned int oid );
public:
void pushIntentionGoto( int x, int y, int z );
void pushIntentionAttack( unsigned int target_oid );
void pushIntentionNpcTalk( unsigned int npc_oid, const wchar_t *dlg_str );
protected:
void follow();
void onIntentionGoto( AI_INTENTION& wish );
void onIntentionAttack( AI_INTENTION& wish );
void onIntentionNpcTalk( AI_INTENTION& wish );
protected:
IL2Client *m_cl;
AiIntentionQueue m_int_queue;
unsigned int m_last_think_time;
unsigned int m_last_follow_time;
bool m_follow_enabled;
unsigned int m_follow_oid;
};