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.h497
1 files changed, 287 insertions, 210 deletions
diff --git a/src/map/map.h b/src/map/map.h
index dbd30febf..2de6df2f7 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -2,8 +2,8 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2012-2015 Hercules Dev Team
- * Copyright (C) Athena Dev Teams
+ * Copyright (C) 2012-2020 Hercules Dev Team
+ * Copyright (C) Athena Dev Teams
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -27,12 +27,14 @@
#include "common/db.h"
#include "common/mapindex.h"
#include "common/mmo.h"
+#include "map/unitdefines.h" // enum unit_dir
#include <stdio.h>
#include <stdarg.h>
/* Forward Declarations */
struct Sql; // common/sql.h
+struct config_t; // common/conf.h
struct mob_data;
struct npc_data;
struct channel_data;
@@ -44,36 +46,12 @@ enum E_MAPSERVER_ST {
MAPSERVER_ST_LAST
};
-#define MAX_NPC_PER_MAP 512
-#define AREA_SIZE (battle->bc->area_size)
-#define DAMAGELOG_SIZE 30
-#define LOOTITEM_SIZE 10
-#define MAX_MOBSKILL 50
-#define MAX_MOB_LIST_PER_MAP 100
-#define MAX_EVENTQUEUE 2
-#define MAX_EVENTTIMER 32
-#define NATURAL_HEAL_INTERVAL 500
-#define MIN_FLOORITEM 2
-#define MAX_FLOORITEM START_ACCOUNT_NUM
-#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]
-
-#define BLOCK_SIZE 8
-#define block_free_max 1048576
-#define BL_LIST_MAX 1048576
-
-// For filtering and quick checking.
-#define MAPID_BASEMASK 0x00ff
-#define MAPID_UPPERMASK 0x0fff
-#define MAPID_THIRDMASK (JOBL_THIRD|MAPID_UPPERMASK)
-
//First Jobs
//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
- MAPID_NOVICE = 0x0,
+ MAPID_NOVICE = 0,
MAPID_SWORDMAN,
MAPID_MAGE,
MAPID_ARCHER,
@@ -87,146 +65,249 @@ enum {
MAPID_XMAS,
MAPID_SUMMER,
MAPID_GANGSI,
+ MAPID_SUMMONER,
+ MAPID_1_1_MAX,
+
//2-1 Jobs
- MAPID_SUPER_NOVICE = JOBL_2_1|0x0,
- MAPID_KNIGHT,
- MAPID_WIZARD,
- MAPID_HUNTER,
- MAPID_PRIEST,
- MAPID_BLACKSMITH,
- MAPID_ASSASSIN,
- MAPID_STAR_GLADIATOR,
- MAPID_REBELLION = JOBL_2_1|0x09,
- MAPID_KAGEROUOBORO = JOBL_2_1|0x0A,
- MAPID_DEATH_KNIGHT = JOBL_2_1|0x0E,
+ MAPID_SUPER_NOVICE = JOBL_2_1 | MAPID_NOVICE,
+ MAPID_KNIGHT = JOBL_2_1 | MAPID_SWORDMAN,
+ MAPID_WIZARD = JOBL_2_1 | MAPID_MAGE,
+ MAPID_HUNTER = JOBL_2_1 | MAPID_ARCHER,
+ MAPID_PRIEST = JOBL_2_1 | MAPID_ACOLYTE,
+ MAPID_BLACKSMITH = JOBL_2_1 | MAPID_MERCHANT,
+ MAPID_ASSASSIN = JOBL_2_1 | MAPID_THIEF,
+ MAPID_STAR_GLADIATOR = JOBL_2_1 | MAPID_TAEKWON,
+ // = JOBL_2_1 | MAPID_WEDDING,
+ MAPID_REBELLION = JOBL_2_1 | MAPID_GUNSLINGER,
+ MAPID_KAGEROUOBORO = JOBL_2_1 | MAPID_NINJA,
+ // = JOBL_2_1 | MAPID_XMAS,
+ // = JOBL_2_1 | MAPID_SUMMER,
+ MAPID_DEATH_KNIGHT = JOBL_2_1 | MAPID_GANGSI,
+ // = JOBL_2_1 | MAPID_SUMMONER,
+
//2-2 Jobs
- MAPID_CRUSADER = JOBL_2_2|0x1,
- MAPID_SAGE,
- MAPID_BARDDANCER,
- MAPID_MONK,
- MAPID_ALCHEMIST,
- MAPID_ROGUE,
- MAPID_SOUL_LINKER,
- MAPID_DARK_COLLECTOR = JOBL_2_2|0x0E,
+ // = JOBL_2_1 | MAPID_NOVICE,
+ MAPID_CRUSADER = JOBL_2_2 | MAPID_SWORDMAN,
+ MAPID_SAGE = JOBL_2_2 | MAPID_MAGE,
+ MAPID_BARDDANCER = JOBL_2_2 | MAPID_ARCHER,
+ MAPID_MONK = JOBL_2_2 | MAPID_ACOLYTE,
+ MAPID_ALCHEMIST = JOBL_2_2 | MAPID_MERCHANT,
+ MAPID_ROGUE = JOBL_2_2 | MAPID_THIEF,
+ MAPID_SOUL_LINKER = JOBL_2_2 | MAPID_TAEKWON,
+ // = JOBL_2_2 | MAPID_WEDDING,
+ // = JOBL_2_2 | MAPID_GUNSLINGER,
+ // = JOBL_2_2 | MAPID_NINJA,
+ // = JOBL_2_2 | MAPID_XMAS,
+ // = JOBL_2_2 | MAPID_SUMMER,
+ MAPID_DARK_COLLECTOR = JOBL_2_2 | MAPID_GANGSI,
+ // = JOBL_2_2 | MAPID_SUMMONER,
+
//Trans Novice And Trans 1-1 Jobs
- MAPID_NOVICE_HIGH = JOBL_UPPER|0x0,
- MAPID_SWORDMAN_HIGH,
- MAPID_MAGE_HIGH,
- MAPID_ARCHER_HIGH,
- MAPID_ACOLYTE_HIGH,
- MAPID_MERCHANT_HIGH,
- MAPID_THIEF_HIGH,
+ MAPID_NOVICE_HIGH = JOBL_UPPER | MAPID_NOVICE,
+ MAPID_SWORDMAN_HIGH = JOBL_UPPER | MAPID_SWORDMAN,
+ MAPID_MAGE_HIGH = JOBL_UPPER | MAPID_MAGE,
+ MAPID_ARCHER_HIGH = JOBL_UPPER | MAPID_ARCHER,
+ MAPID_ACOLYTE_HIGH = JOBL_UPPER | MAPID_ACOLYTE,
+ MAPID_MERCHANT_HIGH = JOBL_UPPER | MAPID_MERCHANT,
+ MAPID_THIEF_HIGH = JOBL_UPPER | MAPID_THIEF,
+ // = JOBL_UPPER | MAPID_TAEKWON,
+ // = JOBL_UPPER | MAPID_WEDDING,
+ // = JOBL_UPPER | MAPID_GUNSLINGER,
+ // = JOBL_UPPER | MAPID_NINJA,
+ // = JOBL_UPPER | MAPID_XMAS,
+ // = JOBL_UPPER | MAPID_SUMMER,
+ // = JOBL_UPPER | MAPID_GANGSI,
+ // = JOBL_UPPER | MAPID_SUMMONER,
+
//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,
+ // = JOBL_UPPER | JOBL_2_1 | MAPID_NOVICE,
+ MAPID_LORD_KNIGHT = JOBL_UPPER | JOBL_2_1 | MAPID_SWORDMAN,
+ MAPID_HIGH_WIZARD = JOBL_UPPER | JOBL_2_1 | MAPID_MAGE,
+ MAPID_SNIPER = JOBL_UPPER | JOBL_2_1 | MAPID_ARCHER,
+ MAPID_HIGH_PRIEST = JOBL_UPPER | JOBL_2_1 | MAPID_ACOLYTE,
+ MAPID_WHITESMITH = JOBL_UPPER | JOBL_2_1 | MAPID_MERCHANT,
+ MAPID_ASSASSIN_CROSS = JOBL_UPPER | JOBL_2_1 | MAPID_THIEF,
+ // = JOBL_UPPER | JOBL_2_1 | MAPID_TAEKWON,
+ // = JOBL_UPPER | JOBL_2_1 | MAPID_WEDDING,
+ // = JOBL_UPPER | JOBL_2_1 | MAPID_GUNSLINGER,
+ // = JOBL_UPPER | JOBL_2_1 | MAPID_NINJA,
+ // = JOBL_UPPER | JOBL_2_1 | MAPID_XMAS,
+ // = JOBL_UPPER | JOBL_2_1 | MAPID_SUMMER,
+ // = JOBL_UPPER | JOBL_2_1 | MAPID_GANGSI,
+ // = JOBL_UPPER | JOBL_2_1 | MAPID_SUMMONER,
+
//Trans 2-2 Jobs
- MAPID_PALADIN = JOBL_UPPER|JOBL_2_2|0x1,
- MAPID_PROFESSOR,
- MAPID_CLOWNGYPSY,
- MAPID_CHAMPION,
- MAPID_CREATOR,
- MAPID_STALKER,
+ // = JOBL_UPPER | JOBL_2_2 | MAPID_NOVICE,
+ MAPID_PALADIN = JOBL_UPPER | JOBL_2_2 | MAPID_SWORDMAN,
+ MAPID_PROFESSOR = JOBL_UPPER | JOBL_2_2 | MAPID_MAGE,
+ MAPID_CLOWNGYPSY = JOBL_UPPER | JOBL_2_2 | MAPID_ARCHER,
+ MAPID_CHAMPION = JOBL_UPPER | JOBL_2_2 | MAPID_ACOLYTE,
+ MAPID_CREATOR = JOBL_UPPER | JOBL_2_2 | MAPID_MERCHANT,
+ MAPID_STALKER = JOBL_UPPER | JOBL_2_2 | MAPID_THIEF,
+ // = JOBL_UPPER | JOBL_2_2 | MAPID_TAEKWON,
+ // = JOBL_UPPER | JOBL_2_2 | MAPID_WEDDING,
+ // = JOBL_UPPER | JOBL_2_2 | MAPID_GUNSLINGER,
+ // = JOBL_UPPER | JOBL_2_2 | MAPID_NINJA,
+ // = JOBL_UPPER | JOBL_2_2 | MAPID_XMAS,
+ // = JOBL_UPPER | JOBL_2_2 | MAPID_SUMMER,
+ // = JOBL_UPPER | JOBL_2_2 | MAPID_GANGSI,
+ // = JOBL_UPPER | JOBL_2_2 | MAPID_SUMMONER,
+
//Baby Novice And Baby 1-1 Jobs
- MAPID_BABY = JOBL_BABY|0x0,
- MAPID_BABY_SWORDMAN,
- MAPID_BABY_MAGE,
- MAPID_BABY_ARCHER,
- MAPID_BABY_ACOLYTE,
- MAPID_BABY_MERCHANT,
- MAPID_BABY_THIEF,
+ MAPID_BABY = JOBL_BABY | MAPID_NOVICE,
+ MAPID_BABY_SWORDMAN = JOBL_BABY | MAPID_SWORDMAN,
+ MAPID_BABY_MAGE = JOBL_BABY | MAPID_MAGE,
+ MAPID_BABY_ARCHER = JOBL_BABY | MAPID_ARCHER,
+ MAPID_BABY_ACOLYTE = JOBL_BABY | MAPID_ACOLYTE,
+ MAPID_BABY_MERCHANT = JOBL_BABY | MAPID_MERCHANT,
+ MAPID_BABY_THIEF = JOBL_BABY | MAPID_THIEF,
+ // = JOBL_BABY | MAPID_TAEKWON,
+ // = JOBL_BABY | MAPID_WEDDING,
+ // = JOBL_BABY | MAPID_GUNSLINGER,
+ // = JOBL_BABY | MAPID_NINJA,
+ // = JOBL_BABY | MAPID_XMAS,
+ // = JOBL_BABY | MAPID_SUMMER,
+ // = JOBL_BABY | MAPID_GANGSI,
+ // = JOBL_BABY | MAPID_SUMMONER,
+
//Baby 2-1 Jobs
- MAPID_SUPER_BABY = JOBL_BABY|JOBL_2_1|0x0,
- MAPID_BABY_KNIGHT,
- MAPID_BABY_WIZARD,
- MAPID_BABY_HUNTER,
- MAPID_BABY_PRIEST,
- MAPID_BABY_BLACKSMITH,
- MAPID_BABY_ASSASSIN,
+ MAPID_SUPER_BABY = JOBL_BABY | JOBL_2_1 | MAPID_NOVICE,
+ MAPID_BABY_KNIGHT = JOBL_BABY | JOBL_2_1 | MAPID_SWORDMAN,
+ MAPID_BABY_WIZARD = JOBL_BABY | JOBL_2_1 | MAPID_MAGE,
+ MAPID_BABY_HUNTER = JOBL_BABY | JOBL_2_1 | MAPID_ARCHER,
+ MAPID_BABY_PRIEST = JOBL_BABY | JOBL_2_1 | MAPID_ACOLYTE,
+ MAPID_BABY_BLACKSMITH = JOBL_BABY | JOBL_2_1 | MAPID_MERCHANT,
+ MAPID_BABY_ASSASSIN = JOBL_BABY | JOBL_2_1 | MAPID_THIEF,
+ // = JOBL_BABY | JOBL_2_1 | MAPID_TAEKWON,
+ // = JOBL_BABY | JOBL_2_1 | MAPID_WEDDING,
+ // = JOBL_BABY | JOBL_2_1 | MAPID_GUNSLINGER,
+ // = JOBL_BABY | JOBL_2_1 | MAPID_NINJA,
+ // = JOBL_BABY | JOBL_2_1 | MAPID_XMAS,
+ // = JOBL_BABY | JOBL_2_1 | MAPID_SUMMER,
+ // = JOBL_BABY | JOBL_2_1 | MAPID_GANGSI,
+ // = JOBL_BABY | JOBL_2_1 | MAPID_SUMMONER,
+
//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,
+ // = JOBL_BABY | JOBL_2_2 | MAPID_NOVICE,
+ MAPID_BABY_CRUSADER = JOBL_BABY | JOBL_2_2 | MAPID_SWORDMAN,
+ MAPID_BABY_SAGE = JOBL_BABY | JOBL_2_2 | MAPID_MAGE,
+ MAPID_BABY_BARDDANCER = JOBL_BABY | JOBL_2_2 | MAPID_ARCHER,
+ MAPID_BABY_MONK = JOBL_BABY | JOBL_2_2 | MAPID_ACOLYTE,
+ MAPID_BABY_ALCHEMIST = JOBL_BABY | JOBL_2_2 | MAPID_MERCHANT,
+ MAPID_BABY_ROGUE = JOBL_BABY | JOBL_2_2 | MAPID_THIEF,
+ // = JOBL_BABY | JOBL_2_2 | MAPID_TAEKWON,
+ // = JOBL_BABY | JOBL_2_2 | MAPID_WEDDING,
+ // = JOBL_BABY | JOBL_2_2 | MAPID_GUNSLINGER,
+ // = JOBL_BABY | JOBL_2_2 | MAPID_NINJA,
+ // = JOBL_BABY | JOBL_2_2 | MAPID_XMAS,
+ // = JOBL_BABY | JOBL_2_2 | MAPID_SUMMER,
+ // = JOBL_BABY | JOBL_2_2 | MAPID_GANGSI,
+ // = JOBL_BABY | JOBL_2_2 | MAPID_SUMMONER,
+
//3-1 Jobs
- MAPID_SUPER_NOVICE_E = JOBL_THIRD|JOBL_2_1|0x0,
- MAPID_RUNE_KNIGHT,
- MAPID_WARLOCK,
- MAPID_RANGER,
- MAPID_ARCH_BISHOP,
- MAPID_MECHANIC,
- MAPID_GUILLOTINE_CROSS,
+ MAPID_SUPER_NOVICE_E = JOBL_THIRD | JOBL_2_1 | MAPID_NOVICE,
+ MAPID_RUNE_KNIGHT = JOBL_THIRD | JOBL_2_1 | MAPID_SWORDMAN,
+ MAPID_WARLOCK = JOBL_THIRD | JOBL_2_1 | MAPID_MAGE,
+ MAPID_RANGER = JOBL_THIRD | JOBL_2_1 | MAPID_ARCHER,
+ MAPID_ARCH_BISHOP = JOBL_THIRD | JOBL_2_1 | MAPID_ACOLYTE,
+ MAPID_MECHANIC = JOBL_THIRD | JOBL_2_1 | MAPID_MERCHANT,
+ MAPID_GUILLOTINE_CROSS = JOBL_THIRD | JOBL_2_1 | MAPID_THIEF,
+ // = JOBL_THIRD | JOBL_2_1 | MAPID_TAEKWON,
+ // = JOBL_THIRD | JOBL_2_1 | MAPID_WEDDING,
+ // = JOBL_THIRD | JOBL_2_1 | MAPID_GUNSLINGER,
+ // = JOBL_THIRD | JOBL_2_1 | MAPID_NINJA,
+ // = JOBL_THIRD | JOBL_2_1 | MAPID_XMAS,
+ // = JOBL_THIRD | JOBL_2_1 | MAPID_SUMMER,
+ // = JOBL_THIRD | JOBL_2_1 | MAPID_GANGSI,
+ // = JOBL_THIRD | JOBL_2_1 | MAPID_SUMMONER,
+
//3-2 Jobs
- MAPID_ROYAL_GUARD = JOBL_THIRD|JOBL_2_2|0x1,
- MAPID_SORCERER,
- MAPID_MINSTRELWANDERER,
- MAPID_SURA,
- MAPID_GENETIC,
- MAPID_SHADOW_CHASER,
+ // = JOBL_THIRD | JOBL_2_2 | MAPID_NOVICE,
+ MAPID_ROYAL_GUARD = JOBL_THIRD | JOBL_2_2 | MAPID_SWORDMAN,
+ MAPID_SORCERER = JOBL_THIRD | JOBL_2_2 | MAPID_MAGE,
+ MAPID_MINSTRELWANDERER = JOBL_THIRD | JOBL_2_2 | MAPID_ARCHER,
+ MAPID_SURA = JOBL_THIRD | JOBL_2_2 | MAPID_ACOLYTE,
+ MAPID_GENETIC = JOBL_THIRD | JOBL_2_2 | MAPID_MERCHANT,
+ MAPID_SHADOW_CHASER = JOBL_THIRD | JOBL_2_2 | MAPID_THIEF,
+ // = JOBL_THIRD | JOBL_2_2 | MAPID_TAEKWON,
+ // = JOBL_THIRD | JOBL_2_2 | MAPID_WEDDING,
+ // = JOBL_THIRD | JOBL_2_2 | MAPID_GUNSLINGER,
+ // = JOBL_THIRD | JOBL_2_2 | MAPID_NINJA,
+ // = JOBL_THIRD | JOBL_2_2 | MAPID_XMAS,
+ // = JOBL_THIRD | JOBL_2_2 | MAPID_SUMMER,
+ // = JOBL_THIRD | JOBL_2_2 | MAPID_GANGSI,
+ // = JOBL_THIRD | JOBL_2_2 | MAPID_SUMMONER,
+
//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,
+ // = JOBL_THIRD | JOBL_UPPER | JOBL_2_1 | MAPID_NOVICE,
+ MAPID_RUNE_KNIGHT_T = JOBL_THIRD | JOBL_UPPER | JOBL_2_1 | MAPID_SWORDMAN,
+ MAPID_WARLOCK_T = JOBL_THIRD | JOBL_UPPER | JOBL_2_1 | MAPID_MAGE,
+ MAPID_RANGER_T = JOBL_THIRD | JOBL_UPPER | JOBL_2_1 | MAPID_ARCHER,
+ MAPID_ARCH_BISHOP_T = JOBL_THIRD | JOBL_UPPER | JOBL_2_1 | MAPID_ACOLYTE,
+ MAPID_MECHANIC_T = JOBL_THIRD | JOBL_UPPER | JOBL_2_1 | MAPID_MERCHANT,
+ MAPID_GUILLOTINE_CROSS_T = JOBL_THIRD | JOBL_UPPER | JOBL_2_1 | MAPID_THIEF,
+ // = JOBL_THIRD | JOBL_UPPER | JOBL_2_1 | MAPID_TAEKWON,
+ // = JOBL_THIRD | JOBL_UPPER | JOBL_2_1 | MAPID_WEDDING,
+ // = JOBL_THIRD | JOBL_UPPER | JOBL_2_1 | MAPID_GUNSLINGER,
+ // = JOBL_THIRD | JOBL_UPPER | JOBL_2_1 | MAPID_NINJA,
+ // = JOBL_THIRD | JOBL_UPPER | JOBL_2_1 | MAPID_XMAS,
+ // = JOBL_THIRD | JOBL_UPPER | JOBL_2_1 | MAPID_SUMMER,
+ // = JOBL_THIRD | JOBL_UPPER | JOBL_2_1 | MAPID_GANGSI,
+ // = JOBL_THIRD | JOBL_UPPER | JOBL_2_1 | MAPID_SUMMONER,
+
//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,
+ // = JOBL_THIRD | JOBL_UPPER | JOBL_2_2 | MAPID_NOVICE,
+ MAPID_ROYAL_GUARD_T = JOBL_THIRD | JOBL_UPPER | JOBL_2_2 | MAPID_SWORDMAN,
+ MAPID_SORCERER_T = JOBL_THIRD | JOBL_UPPER | JOBL_2_2 | MAPID_MAGE,
+ MAPID_MINSTRELWANDERER_T = JOBL_THIRD | JOBL_UPPER | JOBL_2_2 | MAPID_ARCHER,
+ MAPID_SURA_T = JOBL_THIRD | JOBL_UPPER | JOBL_2_2 | MAPID_ACOLYTE,
+ MAPID_GENETIC_T = JOBL_THIRD | JOBL_UPPER | JOBL_2_2 | MAPID_MERCHANT,
+ MAPID_SHADOW_CHASER_T = JOBL_THIRD | JOBL_UPPER | JOBL_2_2 | MAPID_THIEF,
+ // = JOBL_THIRD | JOBL_UPPER | JOBL_2_2 | MAPID_TAEKWON,
+ // = JOBL_THIRD | JOBL_UPPER | JOBL_2_2 | MAPID_WEDDING,
+ // = JOBL_THIRD | JOBL_UPPER | JOBL_2_2 | MAPID_GUNSLINGER,
+ // = JOBL_THIRD | JOBL_UPPER | JOBL_2_2 | MAPID_NINJA,
+ // = JOBL_THIRD | JOBL_UPPER | JOBL_2_2 | MAPID_XMAS,
+ // = JOBL_THIRD | JOBL_UPPER | JOBL_2_2 | MAPID_SUMMER,
+ // = JOBL_THIRD | JOBL_UPPER | JOBL_2_2 | MAPID_GANGSI,
+ // = JOBL_THIRD | JOBL_UPPER | JOBL_2_2 | MAPID_SUMMONER,
+
//Baby 3-1 Jobs
- MAPID_SUPER_BABY_E = JOBL_THIRD|JOBL_BABY|JOBL_2_1|0x0,
- MAPID_BABY_RUNE,
- MAPID_BABY_WARLOCK,
- MAPID_BABY_RANGER,
- MAPID_BABY_BISHOP,
- MAPID_BABY_MECHANIC,
- MAPID_BABY_CROSS,
+ MAPID_SUPER_BABY_E = JOBL_THIRD | JOBL_BABY | JOBL_2_1 | MAPID_NOVICE,
+ MAPID_BABY_RUNE = JOBL_THIRD | JOBL_BABY | JOBL_2_1 | MAPID_SWORDMAN,
+ MAPID_BABY_WARLOCK = JOBL_THIRD | JOBL_BABY | JOBL_2_1 | MAPID_MAGE,
+ MAPID_BABY_RANGER = JOBL_THIRD | JOBL_BABY | JOBL_2_1 | MAPID_ARCHER,
+ MAPID_BABY_BISHOP = JOBL_THIRD | JOBL_BABY | JOBL_2_1 | MAPID_ACOLYTE,
+ MAPID_BABY_MECHANIC = JOBL_THIRD | JOBL_BABY | JOBL_2_1 | MAPID_MERCHANT,
+ MAPID_BABY_CROSS = JOBL_THIRD | JOBL_BABY | JOBL_2_1 | MAPID_THIEF,
+ // = JOBL_THIRD | JOBL_BABY | JOBL_2_1 | MAPID_TAEKWON,
+ // = JOBL_THIRD | JOBL_BABY | JOBL_2_1 | MAPID_WEDDING,
+ // = JOBL_THIRD | JOBL_BABY | JOBL_2_1 | MAPID_GUNSLINGER,
+ // = JOBL_THIRD | JOBL_BABY | JOBL_2_1 | MAPID_NINJA,
+ // = JOBL_THIRD | JOBL_BABY | JOBL_2_1 | MAPID_XMAS,
+ // = JOBL_THIRD | JOBL_BABY | JOBL_2_1 | MAPID_SUMMER,
+ // = JOBL_THIRD | JOBL_BABY | JOBL_2_1 | MAPID_GANGSI,
+ // = JOBL_THIRD | JOBL_BABY | JOBL_2_1 | MAPID_SUMMONER,
+
//Baby 3-2 Jobs
- MAPID_BABY_GUARD = JOBL_THIRD|JOBL_BABY|JOBL_2_2|0x1,
- MAPID_BABY_SORCERER,
- MAPID_BABY_MINSTRELWANDERER,
- MAPID_BABY_SURA,
- MAPID_BABY_GENETIC,
- MAPID_BABY_CHASER,
+ // = JOBL_THIRD | JOBL_BABY | JOBL_2_2 | MAPID_NOVICE,
+ MAPID_BABY_GUARD = JOBL_THIRD | JOBL_BABY | JOBL_2_2 | MAPID_SWORDMAN,
+ MAPID_BABY_SORCERER = JOBL_THIRD | JOBL_BABY | JOBL_2_2 | MAPID_MAGE,
+ MAPID_BABY_MINSTRELWANDERER = JOBL_THIRD | JOBL_BABY | JOBL_2_2 | MAPID_ARCHER,
+ MAPID_BABY_SURA = JOBL_THIRD | JOBL_BABY | JOBL_2_2 | MAPID_ACOLYTE,
+ MAPID_BABY_GENETIC = JOBL_THIRD | JOBL_BABY | JOBL_2_2 | MAPID_MERCHANT,
+ MAPID_BABY_CHASER = JOBL_THIRD | JOBL_BABY | JOBL_2_2 | MAPID_THIEF,
+ // = JOBL_THIRD | JOBL_BABY | JOBL_2_2 | MAPID_TAEKWON,
+ // = JOBL_THIRD | JOBL_BABY | JOBL_2_2 | MAPID_WEDDING,
+ // = JOBL_THIRD | JOBL_BABY | JOBL_2_2 | MAPID_GUNSLINGER,
+ // = JOBL_THIRD | JOBL_BABY | JOBL_2_2 | MAPID_NINJA,
+ // = JOBL_THIRD | JOBL_BABY | JOBL_2_2 | MAPID_XMAS,
+ // = JOBL_THIRD | JOBL_BABY | JOBL_2_2 | MAPID_SUMMER,
+ // = JOBL_THIRD | JOBL_BABY | JOBL_2_2 | MAPID_GANGSI,
+ // = JOBL_THIRD | JOBL_BABY | JOBL_2_2 | MAPID_SUMMONER,
};
-// 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'
-#define CHATBOX_SIZE (70 + 1)
-// Chatroom-related string sizes
-#define CHATROOM_TITLE_SIZE (36 + 1)
-#define CHATROOM_PASS_SIZE (8 + 1)
-// Max allowed chat text length
-#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->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)
-#define map_flag_gvg2(m) (map->list[m].flag.gvg || map->list[m].flag.gvg_castle)
-// No Kill Steal Protection
-#define map_flag_ks(m) (map->list[m].flag.town || map->list[m].flag.pvp || map->list[m].flag.gvg || map->list[m].flag.battleground)
-// No ViewID
-#define map_no_view(m, view) (map->list[m].flag.noviewid & (view))
+STATIC_ASSERT(((MAPID_1_1_MAX - 1) | MAPID_BASEMASK) == MAPID_BASEMASK, "First class map IDs do not fit into MAPID_BASEMASK");
//This stackable implementation does not means a BL can be more than one type at a time, but it's
// meant to make it easier to check for multiple types at a time on invocations such as map_foreach* calls [Skotlex]
@@ -246,9 +327,6 @@ enum bl_type {
BL_ALL = 0xFFF,
};
-// For common mapforeach calls. Since pets cannot be affected, they aren't included here yet.
-#define BL_CHAR (BL_PC|BL_MOB|BL_HOM|BL_MER|BL_ELEM)
-
enum npc_subtype { WARP, SHOP, SCRIPT, CASHSHOP, TOMB };
/**
@@ -372,7 +450,7 @@ struct block_list {
// Mob List Held in memory for Dynamic Mobs [Wizputer]
// Expanded to specify all mob-related spawn data by [Skotlex]
struct spawn_data {
- short class_; ///< Class, used because a mob can change it's class
+ int class_; ///< Class, used because a mob can change it's class
unsigned short m, x, y; ///< Spawn information (map, point, spawn-area around point)
signed short xs, ys;
unsigned short num; ///< Number of mobs using this structure
@@ -385,7 +463,7 @@ struct spawn_data {
//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
+ uint8 boss; ///< 0: Non-boss monster | 1: Boss monster | 2: MVP
} state;
char name[NAME_LENGTH], eventname[EVENT_NAME_LENGTH]; //Name/event
};
@@ -397,9 +475,11 @@ struct flooritem_data {
int first_get_charid,second_get_charid,third_get_charid;
int64 first_get_tick,second_get_tick,third_get_tick;
struct item item_data;
+ bool showdropeffect;
};
enum status_point_types { //we better clean up this enum and change it name [Hemagx]
+ SP_NONE = -1,
SP_SPEED,SP_BASEEXP,SP_JOBEXP,SP_KARMA,SP_MANNER,SP_HP,SP_MAXHP,SP_SP, // 0-7
SP_MAXSP,SP_STATUSPOINT,SP_0a,SP_BASELEVEL,SP_SKILLPOINT,SP_STR,SP_AGI,SP_VIT, // 8-15
SP_INT,SP_DEX,SP_LUK,SP_CLASS,SP_ZENY,SP_SEX,SP_NEXTBASEEXP,SP_NEXTJOBEXP, // 16-23
@@ -419,6 +499,7 @@ enum status_point_types { //we better clean up this enum and change it name [Hem
SP_MOD_EXP=125,
SP_MOD_DROP=126,
SP_MOD_DEATH=127,
+ SP_BANKVAULT=128,
// Mercenaries
SP_MERCFLEE=165, SP_MERCKILLS=189, SP_MERCFAITH=190,
@@ -488,6 +569,10 @@ enum look {
LOOK_FLOOR,
LOOK_ROBE,
LOOK_BODY2,
+
+#ifndef LOOK_MAX
+ LOOK_MAX
+#endif
};
// used by map_setcell()
@@ -573,7 +658,7 @@ enum map_zone_skill_subtype {
};
struct map_zone_disabled_skill_entry {
- unsigned short nameid;
+ int nameid;
enum bl_type type;
enum map_zone_skill_subtype subtype;
};
@@ -583,7 +668,7 @@ struct map_zone_disabled_command_entry {
};
struct map_zone_skill_damage_cap_entry {
- unsigned short nameid;
+ int nameid;
unsigned int cap;
enum bl_type type;
enum map_zone_skill_subtype subtype;
@@ -595,15 +680,6 @@ enum map_zone_merge_type {
MZMT_NEVERMERGE, ///< Cannot merge with any zones.
};
-#define MAP_ZONE_NAME_LENGTH 60
-#define MAP_ZONE_ALL_NAME "All"
-#define MAP_ZONE_NORMAL_NAME "Normal"
-#define MAP_ZONE_PVP_NAME "PvP"
-#define MAP_ZONE_GVG_NAME "GvG"
-#define MAP_ZONE_BG_NAME "Battlegrounds"
-#define MAP_ZONE_PK_NAME "PK Mode"
-#define MAP_ZONE_MAPFLAG_LENGTH 50
-
struct map_zone_data {
char name[MAP_ZONE_NAME_LENGTH];/* 20'd */
enum map_zone_merge_type merge_type;
@@ -630,17 +706,6 @@ struct map_drop_list {
int drop_per;
};
-
-struct questinfo {
- struct npc_data *nd;
- unsigned short icon;
- unsigned char color;
- int quest_id;
- bool hasJob;
- unsigned short job;/* perhaps a mapid mask would be most flexible? */
-};
-
-
struct map_data {
char name[MAP_NAME_LENGTH];
uint16 index; // The map index used by the mapindex* functions.
@@ -687,6 +752,7 @@ struct map_data {
unsigned gvg_dungeon : 1; // Celest
unsigned gvg_noparty : 1;
unsigned battleground : 2; // [BattleGround System]
+ unsigned cvc : 1;
unsigned nozenypenalty : 1;
unsigned notrade : 1;
unsigned noskill : 1;
@@ -717,6 +783,11 @@ struct map_data {
unsigned noknockback : 1;
unsigned notomb : 1;
unsigned nocashshop : 1;
+ unsigned noautoloot : 1;
+ unsigned pairship_startable : 1;
+ unsigned pairship_endable : 1;
+ unsigned nostorage : 2;
+ unsigned nogstorage : 2;
uint32 noviewid; ///< noviewid (bitmask - @see enum equip_pos)
} flag;
struct point save;
@@ -769,11 +840,13 @@ struct map_data {
/* */
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;
+ struct {
+ uint8 *data;
+ int len;
+ } cell_buf;
- /* ShowEvent Data Cache */
- struct questinfo *qi_data;
- unsigned short qi_count;
+ /* questinfo entries list */
+ VECTOR_DECL(struct npc_data *) qi_list;
/* speeds up clif_updatestatus processing by causing hpmeter to run only when someone with the permission can view it */
unsigned short hpmeter_visible;
@@ -924,20 +997,20 @@ struct charid2nick {
struct charid_request* requests;// requests of notification on this nick
};
-// This is the main header found at the very beginning of the map cache
-struct map_cache_main_header {
- uint32 file_size;
- uint16 map_count;
-};
-
-// This is the header appended before every compressed map cells info in the map cache
-struct map_cache_map_info {
- char name[MAP_NAME_LENGTH];
+// New mcache file format header
+#if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
+#pragma pack(push, 1)
+#endif // not NetBSD < 6 / Solaris
+struct map_cache_header {
+ int16 version;
+ uint8 md5_checksum[16];
int16 xs;
int16 ys;
int32 len;
-};
-
+} __attribute__((packed));
+#if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
+#pragma pack(pop)
+#endif // not NetBSD < 6 / Solaris
/*=====================================
* Interface : map.h
@@ -967,7 +1040,6 @@ struct map_interface {
char db_path[256];
char help_txt[256];
- char help2_txt[256];
char charhelp_txt[256];
char wisp_server_name[NAME_LENGTH];
@@ -984,6 +1056,8 @@ struct map_interface {
char autotrade_merchants_db[32];
char autotrade_data_db[32];
char npc_market_data_db[32];
+ char npc_barter_data_db[32];
+ char npc_expanded_barter_data_db[32];
char default_codepage[32];
char default_lang_str[64];
@@ -996,7 +1070,7 @@ struct map_interface {
char server_db[32];
struct Sql *mysql_handle;
- int port;
+ uint16 port;
int users;
int enable_grf; //To enable/disable reading maps from GRF files, bypassing mapcache [blackhole89]
bool ip_set;
@@ -1028,7 +1102,6 @@ END_ZEROED_BLOCK;
struct map_data *list;
/* [Ind/Hercules] */
struct eri *iterator_ers;
- char *cache_buffer; // Has the uncompressed gat data of all maps, so just one allocation has to be made
/* */
struct eri *flooritem_ers;
/* */
@@ -1038,9 +1111,11 @@ END_ZEROED_BLOCK;
/* funcs */
void (*zone_init) (void);
void (*zone_remove) (int m);
+ void (*zone_remove_all) (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);
+ void (*zone_reload) (void);
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);
@@ -1073,7 +1148,7 @@ END_ZEROED_BLOCK;
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) (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);
+ 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, bool showdropeffect);
// player to map session
void (*addnickdb) (int charid, const char* nick);
void (*delnickdb) (int charid, const char* nick);
@@ -1110,6 +1185,7 @@ END_ZEROED_BLOCK;
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 (*vforeachinmap) (int (*func)(struct block_list*,va_list), int16 m, int type, va_list args);
int (*foreachinmap) (int (*func)(struct block_list*,va_list), int16 m, int type, ...);
+ int (*forcountinmap) (int (*func)(struct block_list*,va_list), int16 m, int count, int type, ...);
int (*vforeachininstance)(int (*func)(struct block_list*,va_list), int16 instance_id, int type, va_list ap);
int (*foreachininstance)(int (*func)(struct block_list*,va_list), int16 instance_id, int type,...);
@@ -1134,25 +1210,25 @@ END_ZEROED_BLOCK;
void (*addiddb) (struct block_list *bl);
void (*deliddb) (struct block_list *bl);
/* */
- struct map_session_data * (*nick2sd) (const char *nick);
+ struct map_session_data * (*nick2sd) (const char *nick, bool allow_partial);
struct mob_data * (*getmob_boss) (int16 m);
struct mob_data * (*id2boss) (int id);
uint32 (*race_id2mask) (int race);
// 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 (*check_dir) (enum unit_dir s_dir, enum unit_dir t_dir);
+ enum unit_dir (*calc_dir) (const 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);
+ int (*delmap) (const 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);
+ bool (*iwall_remove) (const char *wall_name);
int (*addmobtolist) (unsigned short m, struct spawn_data *spawn); // [Wizputer]
void (*spawnmobs) (int16 m); // [Wizputer]
@@ -1178,8 +1254,8 @@ END_ZEROED_BLOCK;
void (*iwall_nextxy) (int16 x, int16 y, int8 dir, int pos, int16 *x1, int16 *y1);
struct DBData (*create_map_data_other_server) (union DBKey key, va_list args);
int (*eraseallipport_sub) (union DBKey key, struct DBData *data, va_list va);
- char* (*init_mapcache) (FILE *fp);
- int (*readfromcache) (struct map_data *m, char *buffer);
+ bool (*readfromcache) (struct map_data *m);
+ bool (*readfromcache_v1) (FILE *fp, struct map_data *m, unsigned int file_size);
int (*addmap) (const char *mapname);
void (*delmapid) (int id);
void (*zone_db_clear) (void);
@@ -1187,14 +1263,15 @@ END_ZEROED_BLOCK;
int (*waterheight) (char *mapname);
int (*readgat) (struct map_data *m);
int (*readallmaps) (void);
- int (*config_read) (char *cfgName);
- int (*config_read_sub) (char *cfgName);
- void (*reloadnpc_sub) (char *cfgName);
- int (*inter_config_read) (char *cfgName);
+ bool (*config_read) (const char *filename, bool imported);
+ bool (*read_npclist) (const char *filename, bool imported);
+ bool (*inter_config_read) (const char *filename, bool imported);
+ bool (*inter_config_read_database_names) (const char *filename, const struct config_t *config, bool imported);
+ bool (*inter_config_read_connection) (const char *filename, const struct config_t *config, bool imported);
int (*sql_init) (void);
int (*sql_close) (void);
bool (*zone_mf_cache) (int m, char *flag, char *params);
- unsigned short (*zone_str2itemid) (const char *name);
+ int (*zone_str2itemid) (const char *name);
unsigned short (*zone_str2skillid) (const char *name);
enum bl_type (*zone_bl_type) (const char *entry, enum map_zone_skill_subtype *subtype);
void (*read_zone_db) (void);
@@ -1204,7 +1281,7 @@ END_ZEROED_BLOCK;
int (*abort_sub) (struct map_session_data *sd, va_list ap);
void (*update_cell_bl) (struct block_list *bl, bool increase);
int (*get_new_bonus_id) (void);
- void (*add_questinfo) (int m, struct questinfo *qi);
+ bool (*add_questinfo) (int m, struct npc_data *nd);
bool (*remove_questinfo) (int m, struct npc_data *nd);
struct map_zone_data *(*merge_zone) (struct map_zone_data *main, struct map_zone_data *other);
void (*zone_clear_single) (struct map_zone_data *zone);