summaryrefslogtreecommitdiff
path: root/src/map/map.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/map.h')
-rw-r--r--src/map/map.h75
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 */