rathena/src/map/instance.hpp
Lemongrass3110 534c5b2edd
Add more Github Actions (#6530)
Renames "build_servers.yml" to "build_servers_gcc.yml"
Removed Pre-Renewal and Renewal from GCC compilation
Added an action for Pre-Renewal and Renewal
Added an action for VIP
Added an action for different packet versions
Added MSVS build
Changed some make server to make all
Added master building
Disabled LTO by default
Added some missing override declarations
Added Clang building
Disabled Clang 12 and 13 for the time being

Thanks to @aleos89 and @Akkarinage for their help and input.
2022-01-19 00:08:28 +01:00

132 lines
3.3 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 <deque>
#include <memory>
#include <string>
#include <unordered_map>
#include <vector>
#include "../common/cbasetypes.hpp"
#include "../common/database.hpp"
#include "../common/mmo.hpp"
#include "script.hpp"
enum send_target : uint8;
struct block_list;
extern int16 instance_start;
extern int instance_count;
#define INSTANCE_NAME_LENGTH (60+1)
enum e_instance_state : uint8 {
INSTANCE_IDLE,
INSTANCE_BUSY
};
enum e_instance_mode : uint8 {
IM_NONE,
IM_CHAR,
IM_PARTY,
IM_GUILD,
IM_CLAN,
IM_MAX,
};
enum e_instance_enter : uint8 {
IE_OK,
IE_NOMEMBER,
IE_NOINSTANCE,
IE_OTHER
};
enum e_instance_notify : uint8 {
IN_NOTIFY = 0,
IN_DESTROY_LIVE_TIMEOUT,
IN_DESTROY_ENTER_TIMEOUT,
IN_DESTROY_USER_REQUEST,
IN_CREATE_FAIL,
};
struct s_instance_map {
int16 m, src_m;
};
/// Instance data
struct s_instance_data {
int id; ///< Instance DB ID
e_instance_state state; ///< State of instance
e_instance_mode mode; ///< Mode of instance
int owner_id; ///< Owner ID of instance
unsigned int keep_limit; ///< Life time of instance
int keep_timer; ///< Life time ID
unsigned int idle_limit; ///< Idle time of instance
int idle_timer; ///< Idle timer ID
struct reg_db regs; ///< Instance variables for scripts
std::vector<s_instance_map> map; ///< Array of maps in instance
s_instance_data() :
id(0),
state(INSTANCE_IDLE),
mode(IM_PARTY),
owner_id(0),
keep_limit(0),
keep_timer(INVALID_TIMER),
idle_limit(0),
idle_timer(INVALID_TIMER),
regs(),
map() { }
};
/// Instance DB entry
struct s_instance_db {
int id; ///< Instance DB ID
std::string name; ///< Instance name
uint32 limit, ///< Duration limit
timeout; ///< Timeout limit
bool destroyable; ///< Destroyable flag
struct point enter; ///< Instance entry point
std::vector<int16> maplist; ///< Maps in instance
};
class InstanceDatabase : public TypesafeYamlDatabase<int32, s_instance_db> {
public:
InstanceDatabase() : TypesafeYamlDatabase("INSTANCE_DB", 1) {
}
const std::string getDefaultLocation() override;
uint64 parseBodyNode(const YAML::Node &node) override;
};
extern InstanceDatabase instance_db;
extern std::unordered_map<int, std::shared_ptr<s_instance_data>> instances;
std::shared_ptr<s_instance_db> instance_search_db_name(const char* name);
void instance_getsd(int instance_id, struct map_session_data *&sd, enum send_target *target);
int instance_create(int owner_id, const char *name, e_instance_mode mode);
bool instance_destroy(int instance_id);
void instance_destroy_command(map_session_data *sd);
e_instance_enter instance_enter(struct map_session_data *sd, int instance_id, const char *name, short x, short y);
bool instance_reqinfo(struct map_session_data *sd, int instance_id);
bool instance_addusers(int instance_id);
bool instance_delusers(int instance_id);
void instance_generate_mapname(int map_id, int instance_id, char outname[MAP_NAME_LENGTH]);
int16 instance_mapid(int16 m, int instance_id);
int instance_addmap(int instance_id);
void instance_addnpc(std::shared_ptr<s_instance_data> idata);
void do_reload_instance(void);
void do_init_instance(void);
void do_final_instance(void);
#endif /* INSTANCE_HPP */