diff options
Diffstat (limited to 'src/map/map.h')
-rw-r--r-- | src/map/map.h | 444 |
1 files changed, 235 insertions, 209 deletions
diff --git a/src/map/map.h b/src/map/map.h index c8c1aae12..9126f39a7 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -1,32 +1,24 @@ // Copyright (c) Hercules Dev Team, licensed under GNU GPL. // See the LICENSE file // Portions Copyright (c) Athena Dev Teams - #ifndef _MAP_H_ #define _MAP_H_ - #include "../common/cbasetypes.h" #include "../common/core.h" // CORE_ST_LAST #include "../common/mmo.h" #include "../common/mapindex.h" #include "../common/db.h" - #include "../config/core.h" - #include "atcommand.h" - #include <stdarg.h> - struct npc_data; struct item_data; struct hChSysCh; - enum E_MAPSERVER_ST { MAPSERVER_ST_RUNNING = CORE_ST_LAST, MAPSERVER_ST_SHUTDOWN, MAPSERVER_ST_LAST }; - #define MAX_NPC_PER_MAP 512 #define AREA_SIZE battle_config.area_size #define DAMAGELOG_SIZE 30 @@ -42,37 +34,32 @@ enum E_MAPSERVER_ST { #define MAX_IGNORE_LIST 20 // official is 14 #define MAX_VENDING 12 #define MAX_MAP_SIZE 512*512 // Wasn't there something like this already? Can't find it.. [Shinryo] - // Added definitions for WoESE objects. [L0ne_W0lf] enum MOBID { - MOBID_EMPERIUM = 1288, - MOBID_TREAS01 = 1324, - MOBID_TREAS40 = 1363, - MOBID_BARRICADE1 = 1905, - MOBID_BARRICADE2, - MOBID_GUARIDAN_STONE1, - MOBID_GUARIDAN_STONE2, - MOBID_FOOD_STOR, - MOBID_BLUE_CRYST = 1914, - MOBID_PINK_CRYST, - MOBID_TREAS41 = 1938, - MOBID_TREAS49 = 1946, - MOBID_SILVERSNIPER = 2042, - MOBID_MAGICDECOY_WIND = 2046, + MOBID_EMPERIUM = 1288, + MOBID_TREAS01 = 1324, + MOBID_TREAS40 = 1363, + MOBID_BARRICADE1 = 1905, + MOBID_BARRICADE2, + MOBID_GUARIDAN_STONE1, + MOBID_GUARIDAN_STONE2, + MOBID_FOOD_STOR, + MOBID_BLUE_CRYST = 1914, + MOBID_PINK_CRYST, + MOBID_TREAS41 = 1938, + MOBID_TREAS49 = 1946, + MOBID_SILVERSNIPER = 2042, + MOBID_MAGICDECOY_WIND = 2046, }; - // The following system marks a different job ID system used by the map server, // which makes a lot more sense than the normal one. [Skotlex] -// // These marks the "level" of the job. #define JOBL_2_1 0x100 //256 #define JOBL_2_2 0x200 //512 #define JOBL_2 0x300 - #define JOBL_UPPER 0x1000 //4096 #define JOBL_BABY 0x2000 //8192 #define JOBL_THIRD 0x4000 //16384 - // For filtering and quick checking. #define MAPID_BASEMASK 0x00ff #define MAPID_UPPERMASK 0x0fff @@ -81,7 +68,7 @@ enum MOBID { //Note the oddity of the novice: //Super Novices are considered the 2-1 version of the novice! Novices are considered a first class type. enum { -//Novice And 1-1 Jobs + //Novice And 1-1 Jobs MAPID_NOVICE = 0x0, MAPID_SWORDMAN, MAPID_MAGE, @@ -96,7 +83,7 @@ enum { MAPID_XMAS, MAPID_SUMMER, MAPID_GANGSI, -//2-1 Jobs + //2-1 Jobs MAPID_SUPER_NOVICE = JOBL_2_1|0x0, MAPID_KNIGHT, MAPID_WIZARD, @@ -107,7 +94,7 @@ enum { MAPID_STAR_GLADIATOR, MAPID_KAGEROUOBORO = JOBL_2_1|0x0A, MAPID_DEATH_KNIGHT = JOBL_2_1|0x0E, -//2-2 Jobs + //2-2 Jobs MAPID_CRUSADER = JOBL_2_2|0x1, MAPID_SAGE, MAPID_BARDDANCER, @@ -116,7 +103,7 @@ enum { MAPID_ROGUE, MAPID_SOUL_LINKER, MAPID_DARK_COLLECTOR = JOBL_2_2|0x0D, -//Trans Novice And Trans 1-1 Jobs + //Trans Novice And Trans 1-1 Jobs MAPID_NOVICE_HIGH = JOBL_UPPER|0x0, MAPID_SWORDMAN_HIGH, MAPID_MAGE_HIGH, @@ -124,21 +111,21 @@ enum { MAPID_ACOLYTE_HIGH, MAPID_MERCHANT_HIGH, MAPID_THIEF_HIGH, -//Trans 2-1 Jobs + //Trans 2-1 Jobs MAPID_LORD_KNIGHT = JOBL_UPPER|JOBL_2_1|0x1, MAPID_HIGH_WIZARD, MAPID_SNIPER, MAPID_HIGH_PRIEST, MAPID_WHITESMITH, MAPID_ASSASSIN_CROSS, -//Trans 2-2 Jobs + //Trans 2-2 Jobs MAPID_PALADIN = JOBL_UPPER|JOBL_2_2|0x1, MAPID_PROFESSOR, MAPID_CLOWNGYPSY, MAPID_CHAMPION, MAPID_CREATOR, MAPID_STALKER, -//Baby Novice And Baby 1-1 Jobs + //Baby Novice And Baby 1-1 Jobs MAPID_BABY = JOBL_BABY|0x0, MAPID_BABY_SWORDMAN, MAPID_BABY_MAGE, @@ -146,7 +133,7 @@ enum { MAPID_BABY_ACOLYTE, MAPID_BABY_MERCHANT, MAPID_BABY_THIEF, -//Baby 2-1 Jobs + //Baby 2-1 Jobs MAPID_SUPER_BABY = JOBL_BABY|JOBL_2_1|0x0, MAPID_BABY_KNIGHT, MAPID_BABY_WIZARD, @@ -154,14 +141,14 @@ enum { MAPID_BABY_PRIEST, MAPID_BABY_BLACKSMITH, MAPID_BABY_ASSASSIN, -//Baby 2-2 Jobs + //Baby 2-2 Jobs MAPID_BABY_CRUSADER = JOBL_BABY|JOBL_2_2|0x1, MAPID_BABY_SAGE, MAPID_BABY_BARDDANCER, MAPID_BABY_MONK, MAPID_BABY_ALCHEMIST, MAPID_BABY_ROGUE, -//3-1 Jobs + //3-1 Jobs MAPID_SUPER_NOVICE_E = JOBL_THIRD|JOBL_2_1|0x0, MAPID_RUNE_KNIGHT, MAPID_WARLOCK, @@ -169,28 +156,28 @@ enum { MAPID_ARCH_BISHOP, MAPID_MECHANIC, MAPID_GUILLOTINE_CROSS, -//3-2 Jobs + //3-2 Jobs MAPID_ROYAL_GUARD = JOBL_THIRD|JOBL_2_2|0x1, MAPID_SORCERER, MAPID_MINSTRELWANDERER, MAPID_SURA, MAPID_GENETIC, MAPID_SHADOW_CHASER, -//Trans 3-1 Jobs + //Trans 3-1 Jobs MAPID_RUNE_KNIGHT_T = JOBL_THIRD|JOBL_UPPER|JOBL_2_1|0x1, MAPID_WARLOCK_T, MAPID_RANGER_T, MAPID_ARCH_BISHOP_T, MAPID_MECHANIC_T, MAPID_GUILLOTINE_CROSS_T, -//Trans 3-2 Jobs + //Trans 3-2 Jobs MAPID_ROYAL_GUARD_T = JOBL_THIRD|JOBL_UPPER|JOBL_2_2|0x1, MAPID_SORCERER_T, MAPID_MINSTRELWANDERER_T, MAPID_SURA_T, MAPID_GENETIC_T, MAPID_SHADOW_CHASER_T, -//Baby 3-1 Jobs + //Baby 3-1 Jobs MAPID_SUPER_BABY_E = JOBL_THIRD|JOBL_BABY|JOBL_2_1|0x0, MAPID_BABY_RUNE, MAPID_BABY_WARLOCK, @@ -198,7 +185,7 @@ enum { MAPID_BABY_BISHOP, MAPID_BABY_MECHANIC, MAPID_BABY_CROSS, -//Baby 3-2 Jobs + //Baby 3-2 Jobs MAPID_BABY_GUARD = JOBL_THIRD|JOBL_BABY|JOBL_2_2|0x1, MAPID_BABY_SORCERER, MAPID_BABY_MINSTRELWANDERER, @@ -206,7 +193,6 @@ enum { MAPID_BABY_GENETIC, MAPID_BABY_CHASER, }; - // Max size for inputs to Graffiti, Talkie Box and Vending text prompts #define MESSAGE_SIZE (79 + 1) // String length you can write in the 'talking box' @@ -218,14 +204,12 @@ enum { #define CHAT_SIZE_MAX (255 + 1) // 24 for npc name + 24 for label + 2 for a "::" and 1 for EOS #define EVENT_NAME_LENGTH ( NAME_LENGTH * 2 + 3 ) - #define DEFAULT_AUTOSAVE_INTERVAL 5*60*1000 - // Specifies maps where players may hit each other -#define map_flag_vs(m) (map[m].flag.pvp || map[m].flag.gvg_dungeon || map[m].flag.gvg || ((agit_flag || agit2_flag) && map[m].flag.gvg_castle) || map[m].flag.battleground) +#define map_flag_vs(m) (map[m].flag.pvp || map[m].flag.gvg_dungeon || map[m].flag.gvg || ((iMap->agit_flag || iMap->agit2_flag) && map[m].flag.gvg_castle) || map[m].flag.battleground) // Specifies maps that have special GvG/WoE restrictions -#define map_flag_gvg(m) (map[m].flag.gvg || ((agit_flag || agit2_flag) && map[m].flag.gvg_castle)) -// Specifies if the map is tagged as GvG/WoE (regardless of agit_flag status) +#define map_flag_gvg(m) (map[m].flag.gvg || ((iMap->agit_flag || iMap->agit2_flag) && map[m].flag.gvg_castle)) +// Specifies if the map is tagged as GvG/WoE (regardless of iMap->agit_flag status) #define map_flag_gvg2(m) (map[m].flag.gvg || map[m].flag.gvg_castle) // No Kill Steal Protection #define map_flag_ks(m) (map[m].flag.town || map[m].flag.pvp || map[m].flag.gvg || map[m].flag.battleground) @@ -326,8 +310,8 @@ struct spawn_data { struct { unsigned int size : 2; //Holds if mob has to be tiny/large unsigned int ai : 4; //Special ai for summoned monsters. - //0: Normal mob | 1: Standard summon, attacks mobs - //2: Alchemist Marine Sphere | 3: Alchemist Summon Flora | 4: Summon Zanzou + //0: Normal mob | 1: Standard summon, attacks mobs + //2: Alchemist Marine Sphere | 3: Alchemist Summon Flora | 4: Summon Zanzou unsigned int dynamic : 1; //Whether this data is indexed by a map's dynamic mob list unsigned int boss : 1; //0: Non-boss monster | 1: Boss monster } state; @@ -441,7 +425,7 @@ typedef enum { } cell_t; -// used by map_getcell() +// used by iMap->getcell() typedef enum { CELL_GETTYPE, // retrieves a cell's 'gat' type @@ -469,19 +453,19 @@ struct mapcell { // terrain flags unsigned char - walkable : 1, - shootable : 1, - water : 1; +walkable : 1, +shootable : 1, +water : 1; // dynamic flags unsigned char - npc : 1, - basilica : 1, - landprotector : 1, - novending : 1, - nochat : 1, - maelstrom : 1, - icewall : 1; +npc : 1, +basilica : 1, +landprotector : 1, +novending : 1, +nochat : 1, +maelstrom : 1, +icewall : 1; #ifdef CELL_NOSTACK unsigned char cell_bl; //Holds amount of bls in this cell. @@ -504,7 +488,7 @@ enum map_zone_skill_subtype { MZS_NONE = 0x0, MZS_CLONE = 0x01, MZS_BOSS = 0x02, - + MZS_ALL = 0xFFF, }; @@ -547,11 +531,6 @@ struct map_zone_data { struct map_zone_skill_damage_cap_entry **capped_skills; int capped_skills_count; }; -void map_zone_init(void); -void map_zone_remove(int m); -void map_zone_apply(int m, struct map_zone_data *zone, const char* start, const char* buffer, const char* filepath); -void map_zone_change(int m, struct map_zone_data *zone, const char* start, const char* buffer, const char* filepath); -void map_zone_change2(int m, struct map_zone_data *zone); struct map_zone_data map_zone_all;/* used as a base on all maps */ struct map_zone_data map_zone_pk;/* used for (pk_mode) */ @@ -638,35 +617,35 @@ struct map_data { int bexp; // map experience multiplicator int nocommand; //Blocks @/# commands for non-gms. [Skotlex] /** - * Ice wall reference counter for bugreport:3574 - * - since there are a thounsand mobs out there in a lot of maps checking on, - * - every targetting for icewall on attack path would just be a waste, so, - * - this counter allows icewall checking be only run when there is a actual ice wall on the map - **/ + * Ice wall reference counter for bugreport:3574 + * - since there are a thounsand mobs out there in a lot of maps checking on, + * - every targetting for icewall on attack path would just be a waste, so, + * - this counter allows icewall checking be only run when there is a actual ice wall on the map + **/ int icewall_num; // Instance Variables int instance_id; int instance_src_map; - + /* adjust_unit_duration mapflag */ struct mapflag_skill_adjust **units; unsigned short unit_count; /* adjust_skill_damage mapflag */ struct mapflag_skill_adjust **skills; unsigned short skill_count; - + /* Hercules nocast db overhaul */ struct map_zone_data *zone; char **zone_mf;/* used to store this map's zone mapflags that should be re-applied once zone is removed */ unsigned short zone_mf_count; struct map_zone_data *prev_zone; - + /* Hercules Local Chat */ struct hChSysCh *channel; - + /* invincible_time_inc mapflag */ unsigned int invincible_time_inc; - + /* weapon_damage_rate mapflag */ unsigned short weapon_damage_rate; /* magic_damage_rate mapflag */ @@ -677,10 +656,10 @@ struct map_data { unsigned short short_damage_rate; /* long_damage_rate mapflag */ unsigned short long_damage_rate; - + /* instance unique name */ char *cName; - + /* */ int (*getcellp)(struct map_data* m,int16 x,int16 y,cell_chk cellchk); void (*setcell) (int16 m, int16 x, int16 y, cell_t cell, bool flag); @@ -697,112 +676,35 @@ struct map_data_other_server { uint16 port; }; -int map_getcell(int16 m,int16 x,int16 y,cell_chk cellchk); -void map_setgatcell(int16 m, int16 x, int16 y, int gat); struct map_data *map; -extern int map_num; - -extern int autosave_interval; -extern int minsave_interval; -extern int save_settings; -extern int agit_flag; -extern int agit2_flag; -extern int night_flag; // 0=day, 1=night [Yor] -extern int enable_spy; //Determines if @spy commands are active. -extern char db_path[256]; - -extern char help_txt[]; -extern char help2_txt[]; -extern char charhelp_txt[]; - -extern char wisp_server_name[]; - -void map_cellfromcache(struct map_data *m); - -// users -void map_setusers(int); -int map_getusers(void); -int map_usercount(void); - -// blocklist lock -int map_freeblock(struct block_list *bl); -int map_freeblock_lock(void); -int map_freeblock_unlock(void); -// blocklist manipulation -int map_addblock(struct block_list* bl); -int map_delblock(struct block_list* bl); -int map_moveblock(struct block_list *, int, int, unsigned int); -int map_foreachinrange(int (*func)(struct block_list*,va_list), struct block_list* center, int16 range, int type, ...); -int map_foreachinshootrange(int (*func)(struct block_list*,va_list), struct block_list* center, int16 range, int type, ...); -int map_foreachinarea(int (*func)(struct block_list*,va_list), int16 m, int16 x0, int16 y0, int16 x1, int16 y1, int type, ...); -int map_forcountinrange(int (*func)(struct block_list*,va_list), struct block_list* center, int16 range, int count, int type, ...); -int map_forcountinarea(int (*func)(struct block_list*,va_list), int16 m, int16 x0, int16 y0, int16 x1, int16 y1, int count, int type, ...); -int map_foreachinmovearea(int (*func)(struct block_list*,va_list), struct block_list* center, int16 range, int16 dx, int16 dy, int type, ...); -int map_foreachincell(int (*func)(struct block_list*,va_list), int16 m, int16 x, int16 y, int type, ...); -int map_foreachinpath(int (*func)(struct block_list*,va_list), int16 m, int16 x0, int16 y0, int16 x1, int16 y1, int16 range, int length, int type, ...); -int map_foreachinmap(int (*func)(struct block_list*,va_list), int16 m, int type, ...); -int map_foreachininstance(int (*func)(struct block_list*,va_list), int16 instance_id, int type,...); -//blocklist nb in one cell -int map_count_oncell(int16 m,int16 x,int16 y,int type); -struct skill_unit *map_find_skill_unit_oncell(struct block_list *,int16 x,int16 y,uint16 skill_id,struct skill_unit *, int flag); -// search and creation -int map_get_new_object_id(void); -int map_search_freecell(struct block_list *src, int16 m, int16 *x, int16 *y, int16 rx, int16 ry, int flag); + + + + + + +//int map_foreachinrange(int (*func)(struct block_list*,va_list), struct block_list* center, int16 range, int type, ...); +//int map_foreachinshootrange(int (*func)(struct block_list*,va_list), struct block_list* center, int16 range, int type, ...); +//int map_foreachinarea(int (*func)(struct block_list*,va_list), int16 m, int16 x0, int16 y0, int16 x1, int16 y1, int type, ...); +//int map_forcountinrange(int (*func)(struct block_list*,va_list), struct block_list* center, int16 range, int count, int type, ...); +//int map_forcountinarea(int (*func)(struct block_list*,va_list), int16 m, int16 x0, int16 y0, int16 x1, int16 y1, int count, int type, ...); +//int map_foreachinmovearea(int (*func)(struct block_list*,va_list), struct block_list* center, int16 range, int16 dx, int16 dy, int type, ...); +//int map_foreachincell(int (*func)(struct block_list*,va_list), int16 m, int16 x, int16 y, int type, ...); +//int map_foreachinpath(int (*func)(struct block_list*,va_list), int16 m, int16 x0, int16 y0, int16 x1, int16 y1, int16 range, int length, int type, ...); +//int map_foreachinmap(int (*func)(struct block_list*,va_list), int16 m, int type, ...); +//int map_foreachininstance(int (*func)(struct block_list*,va_list), int16 instance_id, int type,...); // -int map_quit(struct map_session_data *); -// npc -bool map_addnpc(int16 m,struct npc_data *); - -// map item -int map_clearflooritem_timer(int tid, unsigned int tick, int id, intptr_t data); -int map_removemobs_timer(int tid, unsigned int tick, int id, intptr_t data); -void map_clearflooritem(struct block_list* bl); -int map_addflooritem(struct item *item_data,int amount,int16 m,int16 x,int16 y,int first_charid,int second_charid,int third_charid,int flags); - -// player to map session -void map_addnickdb(int charid, const char* nick); -void map_delnickdb(int charid, const char* nick); -void map_reqnickdb(struct map_session_data* sd,int charid); -const char* map_charid2nick(int charid); -struct map_session_data* map_charid2sd(int charid); - -struct map_session_data * map_id2sd(int id); -struct mob_data * map_id2md(int id); -struct npc_data * map_id2nd(int id); -struct homun_data* map_id2hd(int id); -struct mercenary_data* map_id2mc(int id); -struct chat_data* map_id2cd(int id); -struct block_list * map_id2bl(int id); -bool map_blid_exists( int id ); + + + #define map_id2index(id) map[(id)].index -int16 map_mapindex2mapid(unsigned short mapindex); -int16 map_mapname2mapid(const char* name); -int map_mapname2ipport(unsigned short name, uint32* ip, uint16* port); -int map_setipport(unsigned short map, uint32 ip, uint16 port); -int map_eraseipport(unsigned short map, uint32 ip, uint16 port); -int map_eraseallipport(void); -void map_addiddb(struct block_list *); -void map_deliddb(struct block_list *bl); -/* temporary until the map.c "Hercules Renewal Phase One" design is complete. */ -void (*map_foreachpc) (int (*func)(struct map_session_data* sd, va_list args), ...); -void (*map_foreachmob) (int (*func)(struct mob_data* md, va_list args), ...); -void (*map_foreachnpc) (int (*func)(struct npc_data* nd, va_list args), ...); -void (*map_foreachregen) (int (*func)(struct block_list* bl, va_list args), ...); -void (*map_foreachiddb) (int (*func)(struct block_list* bl, va_list args), ...); -/* */ -struct map_session_data * map_nick2sd(const char*); -struct mob_data * map_getmob_boss(int16 m); -struct mob_data * map_id2boss(int id); - -// reload config file looking only for npcs -void map_reloadnpc(bool clear); /// Bitfield of flags for the iterator. enum e_mapitflags { MAPIT_NORMAL = 0, -// MAPIT_PCISPLAYING = 1,// Unneeded as pc_db/id_db will only hold auth'ed, active players. + // MAPIT_PCISPLAYING = 1,// Unneeded as pc_db/id_db will only hold auth'ed, active players. }; struct s_mapiterator; /* temporary until the map.c "Hercules Renewal Phase One" design is complete. */ @@ -822,35 +724,11 @@ struct mapit_interface *mapit; #define mapit_geteachnpc() mapit->alloc(MAPIT_NORMAL,BL_NPC) #define mapit_geteachiddb() mapit->alloc(MAPIT_NORMAL,BL_ALL) -int map_check_dir(int s_dir,int t_dir); -uint8 map_calc_dir( struct block_list *src,int16 x,int16 y); -int map_random_dir(struct block_list *bl, short *x, short *y); // [Skotlex] -int cleanup_sub(struct block_list *bl, va_list ap); -int map_delmap(char* mapname); -void map_flags_init(void); -bool map_iwall_set(int16 m, int16 x, int16 y, int size, int8 dir, bool shootable, const char* wall_name); -void map_iwall_get(struct map_session_data *sd); -void map_iwall_remove(const char *wall_name); -int map_addmobtolist(unsigned short m, struct spawn_data *spawn); // [Wizputer] -void map_spawnmobs(int16 m); // [Wizputer] -void map_removemobs(int16 m); // [Wizputer] -void do_reconnect_map(void); //Invoked on map-char reconnection [Skotlex] -void map_addmap2db(struct map_data *m); -void map_removemapdb(struct map_data *m); -void map_clean(int i); -extern char *INTER_CONF_NAME; -extern char *LOG_CONF_NAME; -extern char *MAP_CONF_NAME; -extern char *BATTLE_CONF_FILENAME; -extern char *ATCOMMAND_CONF_FILENAME; -extern char *SCRIPT_CONF_NAME; -extern char *MSG_CONF_NAME; -extern char *GRF_PATH_FILENAME; //Useful typedefs from jA [Skotlex] typedef struct map_session_data TBL_PC; @@ -869,19 +747,167 @@ typedef struct elemental_data TBL_ELEM; #include "../common/sql.h" -extern int db_use_sqldbs; extern Sql* mmysql_handle; extern Sql* logmysql_handle; -extern char item_db_db[32]; -extern char item_db2_db[32]; -extern char item_db_re_db[32]; -extern char mob_db_db[32]; -extern char mob_db2_db[32]; -extern char mob_skill_db_db[32]; -extern char mob_skill_db2_db[32]; -void do_shutdown(void); + +/*===================================== +* Interface : map.h +* Generated by HerculesInterfaceMaker +* created by Susu +*-------------------------------------*/ +struct map_interface { + + /* vars */ + int map_num; + + int autosave_interval; + int minsave_interval; + int save_settings; + int agit_flag; + int agit2_flag; + int night_flag; // 0=day, 1=night [Yor] + int enable_spy; //Determines if @spy commands are active. + char db_path[256]; + + char help_txt[256]; + char help2_txt[256]; + char charhelp_txt[256]; + + char wisp_server_name[NAME_LENGTH]; + + char *INTER_CONF_NAME; + char *LOG_CONF_NAME; + char *MAP_CONF_NAME; + char *BATTLE_CONF_FILENAME; + char *ATCOMMAND_CONF_FILENAME; + char *SCRIPT_CONF_NAME; + char *MSG_CONF_NAME; + char *GRF_PATH_FILENAME; + + int db_use_sqldbs; + + char item_db_db[32]; + char item_db2_db[32]; + char item_db_re_db[32]; + char mob_db_db[32]; + char mob_db2_db[32]; + char mob_skill_db_db[32]; + char mob_skill_db2_db[32]; + + /* funcs */ + void (*zone_init) (void); + void (*zone_remove) (int m); + void (*zone_apply) (int m, struct map_zone_data *zone, const char* start, const char* buffer, const char* filepath); + void (*zone_change) (int m, struct map_zone_data *zone, const char* start, const char* buffer, const char* filepath); + void (*zone_change2) (int m, struct map_zone_data *zone); + + int (*getcell) (int16 m,int16 x,int16 y,cell_chk cellchk); + void (*setgatcell) (int16 m, int16 x, int16 y, int gat); + + void (*cellfromcache) (struct map_data *m); + // users + void (*setusers) (int); + int (*getusers) (void); + int (*usercount) (void); + // blocklist lock + int (*freeblock) (struct block_list *bl); + int (*freeblock_lock) (void); + int (*freeblock_unlock) (void); + // blocklist manipulation + int (*addblock) (struct block_list* bl); + int (*delblock) (struct block_list* bl); + int (*moveblock) (struct block_list *, int, int, unsigned int); + //blocklist nb in one cell + int (*count_oncell) (int16 m,int16 x,int16 y,int type); + struct skill_unit * (*find_skill_unit_oncell) (struct block_list *,int16 x,int16 y,uint16 skill_id,struct skill_unit *, int flag); + // search and creation + int (*get_new_object_id) (void); + int (*search_freecell) (struct block_list *src, int16 m, int16 *x, int16 *y, int16 rx, int16 ry, int flag); + // + int (*quit) (struct map_session_data *); + // npc + bool (*addnpc) (int16 m,struct npc_data *); + // map item + int (*clearflooritem_timer) (int tid, unsigned int tick, int id, intptr_t data); + int (*removemobs_timer) (int tid, unsigned int tick, int id, intptr_t data); + void (*clearflooritem) (struct block_list* bl); + int (*addflooritem) (struct item *item_data,int amount,int16 m,int16 x,int16 y,int first_charid,int second_charid,int third_charid,int flags); + // player to map session + void (*addnickdb) (int charid, const char* nick); + void (*delnickdb) (int charid, const char* nick); + void (*reqnickdb) (struct map_session_data* sd,int charid); + const char* (*charid2nick) (int charid); + struct map_session_data* (*charid2sd) (int charid); + + void (*map_foreachpc) (int (*func)(struct map_session_data* sd, va_list args), ...); + void (*map_foreachmob) (int (*func)(struct mob_data* md, va_list args), ...); + void (*map_foreachnpc) (int (*func)(struct npc_data* nd, va_list args), ...); + void (*map_foreachregen) (int (*func)(struct block_list* bl, va_list args), ...); + void (*map_foreachiddb) (int (*func)(struct block_list* bl, va_list args), ...); + + int (*foreachinrange) (int (*func)(struct block_list*,va_list), struct block_list* center, int16 range, int type, ...); + int (*foreachinshootrange) (int (*func)(struct block_list*,va_list), struct block_list* center, int16 range, int type, ...); + int (*foreachinarea) (int (*func)(struct block_list*,va_list), int16 m, int16 x0, int16 y0, int16 x1, int16 y1, int type, ...); + int (*forcountinrange) (int (*func)(struct block_list*,va_list), struct block_list* center, int16 range, int count, int type, ...); + int (*forcountinarea) (int (*func)(struct block_list*,va_list), int16 m, int16 x0, int16 y0, int16 x1, int16 y1, int count, int type, ...); + int (*foreachinmovearea) (int (*func)(struct block_list*,va_list), struct block_list* center, int16 range, int16 dx, int16 dy, int type, ...); + int (*foreachincell) (int (*func)(struct block_list*,va_list), int16 m, int16 x, int16 y, int type, ...); + int (*foreachinpath) (int (*func)(struct block_list*,va_list), int16 m, int16 x0, int16 y0, int16 x1, int16 y1, int16 range, int length, int type, ...); + int (*foreachinmap) (int (*func)(struct block_list*,va_list), int16 m, int type, ...); + int (*foreachininstance)(int (*func)(struct block_list*,va_list), int16 instance_id, int type,...); + + struct map_session_data * (*id2sd) (int id); + struct mob_data * (*id2md) (int id); + struct npc_data * (*id2nd) (int id); + struct homun_data* (*id2hd) (int id); + struct mercenary_data* (*id2mc) (int id); + struct chat_data* (*id2cd) (int id); + struct block_list * (*id2bl) (int id); + bool (*blid_exists) (int id); + int16 (*mapindex2mapid) (unsigned short mapindex); + int16 (*mapname2mapid) (const char* name); + int (*mapname2ipport) (unsigned short name, uint32* ip, uint16* port); + int (*setipport) (unsigned short map, uint32 ip, uint16 port); + int (*eraseipport) (unsigned short map, uint32 ip, uint16 port); + int (*eraseallipport) (void); + void (*addiddb) (struct block_list *); + void (*deliddb) (struct block_list *bl); + /* */ + struct map_session_data * (*nick2sd) (const char*); + struct mob_data * (*getmob_boss) (int16 m); + struct mob_data * (*id2boss) (int id); + // reload config file looking only for npcs + void (*reloadnpc) (bool clear); + + int (*check_dir) (int s_dir,int t_dir); + uint8 (*calc_dir) (struct block_list *src,int16 x,int16 y); + int (*random_dir) (struct block_list *bl, short *x, short *y); // [Skotlex] + + int (*cleanup_sub) (struct block_list *bl, va_list ap); + + int (*delmap) (char* mapname); + void (*flags_init) (void); + + bool (*iwall_set) (int16 m, int16 x, int16 y, int size, int8 dir, bool shootable, const char* wall_name); + void (*iwall_get) (struct map_session_data *sd); + void (*iwall_remove) (const char *wall_name); + + int (*addmobtolist) (unsigned short m, struct spawn_data *spawn); // [Wizputer] + void (*spawnmobs) (int16 m); // [Wizputer] + void (*removemobs) (int16 m); // [Wizputer] + void (*do_reconnect_map) (void); //Invoked on map-char reconnection [Skotlex] Note used but still keeping it, just in case + void (*addmap2db) (struct map_data *m); + void (*removemapdb) (struct map_data *m); + void (*clean) (int i); + + void (*do_shutdown) (void); +} iMap_s; + +struct map_interface *iMap; + +void map_defaults(void); #endif /* _MAP_H_ */ |