
* Fixes #3385. * Updated the header guard names to C++ standards. Thanks to @elfring's suggestion!
104 lines
3.2 KiB
C++
104 lines
3.2 KiB
C++
// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL
|
|
// For more information, see LICENCE in the main folder
|
|
|
|
#ifndef INSTANCE_HPP
|
|
#define INSTANCE_HPP
|
|
|
|
#include "../common/cbasetypes.hpp"
|
|
#include "../common/mmo.hpp" // struct point
|
|
#include "../common/strlib.hpp"
|
|
|
|
#include "script.hpp" // struct reg_db
|
|
|
|
enum send_target : uint8;
|
|
struct block_list;
|
|
|
|
extern int16 instance_start;
|
|
|
|
#define MAX_INSTANCE_DATA 300 // Essentially how many instances we can create, but instance creation is primarily decided by MAX_MAP_PER_SERVER
|
|
#define MAX_MAP_PER_INSTANCE 255 // Max number of maps per instance (Enter map is counted as one) - Supports up to 255 maps
|
|
|
|
#define INSTANCE_NAME_LENGTH (60+1)
|
|
|
|
enum instance_state {
|
|
INSTANCE_FREE,
|
|
INSTANCE_IDLE,
|
|
INSTANCE_BUSY
|
|
};
|
|
|
|
enum instance_mode {
|
|
IM_NONE,
|
|
IM_CHAR,
|
|
IM_PARTY,
|
|
IM_GUILD,
|
|
IM_CLAN,
|
|
IM_MAX,
|
|
};
|
|
|
|
enum e_instance_enter {
|
|
IE_OK = 0,
|
|
IE_NOMEMBER,
|
|
IE_NOINSTANCE,
|
|
IE_OTHER
|
|
};
|
|
|
|
struct s_instance_map {
|
|
int16 m, src_m;
|
|
};
|
|
|
|
struct instance_data {
|
|
unsigned short type; ///< Instance DB ID
|
|
enum instance_state state; ///< State of instance
|
|
enum instance_mode mode; ///< Mode of instance
|
|
int owner_id; ///< Owner ID of instance
|
|
unsigned int keep_limit; ///< Life time of instance
|
|
int keep_timer; ///< Remaining life time of instance
|
|
unsigned int idle_limit; ///< Idle time of instance
|
|
int idle_timer; ///< Remaining idle time of instance
|
|
struct reg_db regs; ///< Instance variables for scripts
|
|
struct s_instance_map **map; ///< Dynamic array of maps in instance
|
|
uint8 cnt_map; ///< Number of maps in an instance
|
|
};
|
|
|
|
/// Instance DB entry struct
|
|
struct instance_db {
|
|
unsigned short id; ///< Instance ID
|
|
StringBuf *name; ///< Instance name
|
|
unsigned int limit, ///< Duration limit
|
|
timeout; ///< Timeout limit
|
|
struct s_MapInfo {
|
|
StringBuf *mapname; ///< Mapname, the limit should be MAP_NAME_LENGTH_EXT
|
|
short x, y; ///< Map coordinates
|
|
} enter;
|
|
StringBuf **maplist; ///< Used maps in instance, the limit should be MAP_NAME_LENGTH_EXT
|
|
uint8 maplist_count; ///< Number of used maps
|
|
};
|
|
|
|
extern struct instance_data instance_data[MAX_INSTANCE_DATA];
|
|
|
|
struct instance_db *instance_searchtype_db(unsigned short instance_id);
|
|
struct instance_db *instance_searchname_db(const char* name);
|
|
void instance_getsd(unsigned short instance_id, struct map_session_data **sd, enum send_target *target);
|
|
|
|
int instance_create(int owner_id, const char *name, enum instance_mode mode);
|
|
int instance_destroy(unsigned short instance_id);
|
|
enum e_instance_enter instance_enter(struct map_session_data *sd, unsigned short instance_id, const char *name, short x, short y);
|
|
int instance_reqinfo(struct map_session_data *sd, unsigned short instance_id);
|
|
int instance_addusers(unsigned short instance_id);
|
|
int instance_delusers(unsigned short instance_id);
|
|
int16 instance_mapname2mapid(const char *name, unsigned short instance_id);
|
|
int instance_addmap(unsigned short instance_id);
|
|
|
|
void instance_addnpc(struct instance_data *im);
|
|
void instance_readdb(void);
|
|
void instance_reload(void);
|
|
void do_reload_instance(void);
|
|
void do_init_instance(void);
|
|
void do_final_instance(void);
|
|
|
|
#if MAX_MAP_PER_INSTANCE > 255
|
|
#error Too many maps per instance defined! Please adjust MAX_MAP_PER_INSTANCE to a lower value.
|
|
#endif
|
|
|
|
#endif /* INSTANCE_HPP */
|