diff options
Diffstat (limited to 'src/map/map.h')
-rw-r--r-- | src/map/map.h | 75 |
1 files changed, 38 insertions, 37 deletions
diff --git a/src/map/map.h b/src/map/map.h index 3960a64b4..39af13de8 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -5,18 +5,17 @@ #ifndef MAP_MAP_H #define MAP_MAP_H -#include "../config/core.h" - +#include "map/atcommand.h" +#include "common/hercules.h" +#include "common/core.h" // CORE_ST_LAST +#include "common/db.h" +#include "common/mapindex.h" +#include "common/mmo.h" +#include "common/sql.h" + +#include <stdio.h> #include <stdarg.h> -#include "atcommand.h" -#include "../common/cbasetypes.h" -#include "../common/core.h" // CORE_ST_LAST -#include "../common/db.h" -#include "../common/mapindex.h" -#include "../common/mmo.h" -#include "../common/sql.h" - struct mob_data; struct npc_data; struct channel_data; @@ -65,16 +64,6 @@ enum MOBID { 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 @@ -224,7 +213,13 @@ enum { #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->list[m].flag.pvp || map->list[m].flag.gvg_dungeon || map->list[m].flag.gvg || ((map->agit_flag || map->agit2_flag) && map->list[m].flag.gvg_castle) || map->list[m].flag.battleground) +#define map_flag_vs(m) ( \ + map->list[m].flag.pvp \ + || map->list[m].flag.gvg_dungeon \ + || map->list[m].flag.gvg \ + || ((map->agit_flag || map->agit2_flag) && map->list[m].flag.gvg_castle) \ + || map->list[m].flag.battleground \ + ) // Specifies maps that have special GvG/WoE restrictions #define map_flag_gvg(m) (map->list[m].flag.gvg || ((map->agit_flag || map->agit2_flag) && map->list[m].flag.gvg_castle)) // Specifies if the map is tagged as GvG/WoE (regardless of map->agit_flag status) @@ -266,10 +261,15 @@ enum { RC_DEMIHUMAN, RC_ANGEL, RC_DRAGON, + RC_PLAYER, RC_BOSS, RC_NONBOSS, + RC_MAX, RC_NONDEMIHUMAN, - RC_MAX + RC_NONPLAYER, + RC_DEMIPLAYER, + RC_NONDEMIPLAYER, + RC_ALL = 0xFF }; enum { @@ -280,6 +280,8 @@ enum { RC2_GOLEM, RC2_GUARDIAN, RC2_NINJA, + RC2_SCARABA, + RC2_TURTLE, RC2_MAX }; @@ -294,7 +296,8 @@ enum elements { ELE_DARK, ELE_GHOST, ELE_UNDEAD, - ELE_MAX + ELE_MAX, + ELE_ALL = 0xFF }; /** @@ -716,7 +719,7 @@ struct map_data { bool custom_name; ///< Whether the instanced map is using a custom name /* */ - int (*getcellp)(struct map_data* m,int16 x,int16 y,cell_chk cellchk); + int (*getcellp)(struct map_data* m, const struct block_list *bl, int16 x, int16 y, cell_chk cellchk); void (*setcell) (int16 m, int16 x, int16 y, cell_t cell, bool flag); char *cellPos; @@ -763,8 +766,6 @@ struct mapit_interface { bool (*exists) (struct s_mapiterator* iter); }; -struct mapit_interface *mapit; - #define mapit_getallusers() (mapit->alloc(MAPIT_NORMAL,BL_PC)) #define mapit_geteachpc() (mapit->alloc(MAPIT_NORMAL,BL_PC)) #define mapit_geteachmob() (mapit->alloc(MAPIT_NORMAL,BL_MOB)) @@ -862,7 +863,6 @@ struct map_interface { char mob_db2_db[32]; char mob_skill_db_db[32]; char mob_skill_db2_db[32]; - char interreg_db[32]; char autotrade_merchants_db[32]; char autotrade_data_db[32]; char npc_market_data_db[32]; @@ -896,15 +896,15 @@ struct map_interface { DBMap* regen_db; // int id -> struct block_list* (status_natural_heal processing) DBMap* zone_db; // string => struct map_zone_data DBMap* iwall_db; - /* order respected by map_defaults() in order to zero */ - /* from block_free until zone_pk */ struct block_list **block_free; int block_free_count, block_free_lock, block_free_list_size; struct block_list **bl_list; int bl_list_count, bl_list_size; +BEGIN_ZEROED_BLOCK; // This block is zeroed in map_defaults() struct block_list bl_head; struct map_zone_data zone_all;/* used as a base on all maps */ struct map_zone_data zone_pk;/* used for (pk_mode) */ +END_ZEROED_BLOCK; /* */ struct map_session_data *cpsd; struct map_data *list; @@ -924,7 +924,7 @@ struct map_interface { 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); + int (*getcell) (int16 m, const struct block_list *bl, int16 x, int16 y, cell_chk cellchk); void (*setgatcell) (int16 m, int16 x, int16 y, int gat); void (*cellfromcache) (struct map_data *m); @@ -946,7 +946,7 @@ struct map_interface { // 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); - bool (*closest_freecell) (int16 m, int16 *x, int16 *y, int type, int flag); + bool (*closest_freecell) (int16 m, const struct block_list *bl, int16 *x, int16 *y, int type, int flag); // int (*quit) (struct map_session_data *sd); // npc @@ -955,7 +955,7 @@ struct map_interface { int (*clearflooritem_timer) (int tid, int64 tick, int id, intptr_t data); int (*removemobs_timer) (int tid, int64 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); + int (*addflooritem) (const struct block_list *bl, 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); @@ -1042,15 +1042,15 @@ struct map_interface { void (*do_shutdown) (void); int (*freeblock_timer) (int tid, int64 tick, int id, intptr_t data); - int (*searchrandfreecell) (int16 m, int16 *x, int16 *y, int stack); + int (*searchrandfreecell) (int16 m, const struct block_list *bl, int16 *x, int16 *y, int stack); int (*count_sub) (struct block_list *bl, va_list ap); DBData (*create_charid2nick) (DBKey key, va_list args); int (*removemobs_sub) (struct block_list *bl, va_list ap); struct mapcell (*gat2cell) (int gat); int (*cell2gat) (struct mapcell cell); - int (*getcellp) (struct map_data *m, int16 x, int16 y, cell_chk cellchk); + int (*getcellp) (struct map_data *m, const struct block_list *bl, int16 x, int16 y, cell_chk cellchk); void (*setcell) (int16 m, int16 x, int16 y, cell_t cell, bool flag); - int (*sub_getcellp) (struct map_data *m, int16 x, int16 y, cell_chk cellchk); + int (*sub_getcellp) (struct map_data *m, const struct block_list *bl, int16 x, int16 y, cell_chk cellchk); void (*sub_setcell) (int16 m, int16 x, int16 y, cell_t cell, bool flag); void (*iwall_nextxy) (int16 x, int16 y, int8 dir, int pos, int16 *x1, int16 *y1); DBData (*create_map_data_other_server) (DBKey key, va_list args); @@ -1087,10 +1087,11 @@ struct map_interface { void (*zone_clear_single) (struct map_zone_data *zone); }; -struct map_interface *map; - #ifdef HERCULES_CORE void map_defaults(void); #endif // HERCULES_CORE +HPShared struct mapit_interface *mapit; +HPShared struct map_interface *map; + #endif /* MAP_MAP_H */ |