server/game/src/quest.h
2022-03-05 12:44:06 +02:00

134 lines
2.6 KiB
C++

#ifndef __METIN2_SERVER_QUEST_H__
#define __METIN2_SERVER_QUEST_H__
#define INDUCTION_LEVEL3 (1 << 0)
#define INDUCTION_LEVEL8 (1 << 1)
#define INDUCTION_LEVEL2 (1 << 2)
//#define QUEST_DIR "./quest/"
#include "lua_incl.h"
namespace quest
{
enum
{
QUEST_NO_NPC,
QUEST_ATTR_NPC_START = 100000,
QUEST_ATTR0_NPC = QUEST_ATTR_NPC_START,
QUEST_ATTR1_NPC = 100000,
QUEST_ATTR2_NPC = 100001,
QUEST_ATTR3_NPC = 100002,
QUEST_ATTR4_NPC = 100003,
QUEST_ATTR5_NPC = 100004,
QUEST_ATTR6_NPC = 100005,
QUEST_ATTR7_NPC = 100006,
QUEST_ATTR8_NPC = 100007,
QUEST_ATTR9_NPC = 100008,
QUEST_ATTR10_NPC = 100009,
QUEST_ATTR11_NPC = 100010,
QUEST_ATTR12_NPC = 100011,
QUEST_ATTR13_NPC = 100012,
QUEST_ATTR14_NPC = 100013,
QUEST_ATTR15_NPC = 100014,
};
enum
{
QUEST_CLICK_EVENT,
QUEST_KILL_EVENT,
QUEST_TIMER_EVENT,
QUEST_LEVELUP_EVENT,
QUEST_LOGIN_EVENT,
QUEST_LOGOUT_EVENT,
QUEST_BUTTON_EVENT,
QUEST_INFO_EVENT,
QUEST_CHAT_EVENT,
QUEST_ATTR_IN_EVENT,
QUEST_ATTR_OUT_EVENT,
QUEST_ITEM_USE_EVENT,
QUEST_SERVER_TIMER_EVENT,
QUEST_ENTER_STATE_EVENT,
QUEST_LEAVE_STATE_EVENT,
QUEST_LETTER_EVENT,
QUEST_ITEM_TAKE_EVENT,
QUEST_TARGET_EVENT,
QUEST_PARTY_KILL_EVENT,
QUEST_UNMOUNT_EVENT,
QUEST_ITEM_PICK_EVENT,
QUEST_SIG_USE_EVENT,
QUEST_ITEM_INFORMER_EVENT,
QUEST_EVENT_COUNT
};
enum
{
SUSPEND_STATE_NONE,
SUSPEND_STATE_PAUSE,
SUSPEND_STATE_SELECT,
SUSPEND_STATE_INPUT,
SUSPEND_STATE_CONFIRM,
SUSPEND_STATE_SELECT_ITEM,
};
enum EQuestConfirmType
{
CONFIRM_NO,
CONFIRM_YES,
CONFIRM_TIMEOUT,
};
struct AStateScriptType
{
int GetSize() const { return m_code.size(); }
const char* GetCode() const { return &m_code[0]; }
std::vector<char> m_code;
};
struct AArgScript
{
//
// script syntax example
//
// when namespace.func.arg with when_condition begin ...
// --- --------------
// | +
std::string arg; // <--+ |
std::vector<char> when_condition;// <-+
AStateScriptType script;
unsigned int quest_index;
int state_index;
AArgScript()
: quest_index(0), state_index(0)
{}
};
struct QuestState
{
lua_State * co;
int ico;
short int args;
BYTE suspend_state;
int iIndex;
bool bStart;
int st;
std::string _title;
std::string _clock_name;
std::string _counter_name;
int _clock_value;
int _counter_value;
std::string _icon_file;
std::vector<AArgScript *> chat_scripts;
QuestState()
: co(NULL), ico(0), args(0), suspend_state(SUSPEND_STATE_NONE), iIndex(0), bStart(false), st(-1),
_clock_value(0), _counter_value(0)
{}
};
}
#endif