summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/mmo.h51
-rw-r--r--src/common/timer.h3
-rw-r--r--src/map/atcommand.c302
-rw-r--r--src/map/battle.c122
-rw-r--r--src/map/battleground.c4
-rw-r--r--src/map/buyingstore.c4
-rw-r--r--src/map/chat.c2
-rw-r--r--src/map/clif.c134
-rw-r--r--src/map/duel.c4
-rw-r--r--src/map/elemental.c2
-rw-r--r--src/map/guild.c6
-rw-r--r--src/map/instance.c184
-rw-r--r--src/map/intif.c6
-rw-r--r--src/map/itemdb.c22
-rw-r--r--src/map/log.c53
-rw-r--r--src/map/log.h9
-rw-r--r--src/map/mail.c2
-rw-r--r--src/map/map.c2134
-rw-r--r--src/map/map.h194
-rw-r--r--src/map/mapreg_sql.c36
-rw-r--r--src/map/mob.c88
-rw-r--r--src/map/mob.h4
-rw-r--r--src/map/npc.c518
-rw-r--r--src/map/packets.h36
-rw-r--r--src/map/party.c2
-rw-r--r--src/map/path.c12
-rw-r--r--src/map/pc.c92
-rw-r--r--src/map/pc.h50
-rw-r--r--src/map/pet.c2
-rw-r--r--src/map/script.c425
-rw-r--r--src/map/skill.c68
-rw-r--r--src/map/status.c1326
-rw-r--r--src/map/status.h139
-rw-r--r--src/map/trade.c2
-rw-r--r--src/map/unit.c30
35 files changed, 3149 insertions, 2919 deletions
diff --git a/src/common/mmo.h b/src/common/mmo.h
index f49a859e0..205cf8425 100644
--- a/src/common/mmo.h
+++ b/src/common/mmo.h
@@ -777,12 +777,63 @@ enum {
JOB_MAX,
};
+//Total number of classes (for data storage)
+#define CLASS_COUNT (JOB_MAX - JOB_NOVICE_HIGH + JOB_MAX_BASIC)
+
enum {
SEX_FEMALE = 0,
SEX_MALE,
SEX_SERVER
};
+enum weapon_type {
+ W_FIST, //Bare hands
+ W_DAGGER, //1
+ W_1HSWORD, //2
+ W_2HSWORD, //3
+ W_1HSPEAR, //4
+ W_2HSPEAR, //5
+ W_1HAXE, //6
+ W_2HAXE, //7
+ W_MACE, //8
+ W_2HMACE, //9 (unused)
+ W_STAFF, //10
+ W_BOW, //11
+ W_KNUCKLE, //12
+ W_MUSICAL, //13
+ W_WHIP, //14
+ W_BOOK, //15
+ W_KATAR, //16
+ W_REVOLVER, //17
+ W_RIFLE, //18
+ W_GATLING, //19
+ W_SHOTGUN, //20
+ W_GRENADE, //21
+ W_HUUMA, //22
+ W_2HSTAFF, //23
+ MAX_WEAPON_TYPE,
+ // dual-wield constants
+ W_DOUBLE_DD, // 2 daggers
+ W_DOUBLE_SS, // 2 swords
+ W_DOUBLE_AA, // 2 axes
+ W_DOUBLE_DS, // dagger + sword
+ W_DOUBLE_DA, // dagger + axe
+ W_DOUBLE_SA, // sword + axe
+};
+
+enum ammo_type {
+ A_ARROW = 1,
+ A_DAGGER, //2
+ A_BULLET, //3
+ A_SHELL, //4
+ A_GRENADE, //5
+ A_SHURIKEN, //6
+ A_KUNAI, //7
+ A_CANNONBALL, //8
+ A_THROWWEAPON //9
+};
+
+
// sanity checks...
#if MAX_ZENY > INT_MAX
#error MAX_ZENY is too big
diff --git a/src/common/timer.h b/src/common/timer.h
index 3146a2e66..600f9fd02 100644
--- a/src/common/timer.h
+++ b/src/common/timer.h
@@ -23,9 +23,8 @@ typedef int (*TimerFunc)(int tid, unsigned int tick, int id, intptr_t data);
struct TimerData {
unsigned int tick;
TimerFunc func;
- int type;
+ unsigned char type;
int interval;
- int heap_pos;
// general-purpose storage
int id;
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index 5a6068a54..3d04a6bff 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -412,11 +412,11 @@ ACMD(mapmove) {
if (!map->search_freecell(NULL, m, &x, &y, 10, 10, 1))
x = y = 0; //Invalid cell, use random spot.
}
- if (maplist[m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
+ if (map->list[m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
clif->message(fd, msg_txt(247));
return false;
}
- if (sd->bl.m >= 0 && maplist[sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
+ if (sd->bl.m >= 0 && map->list[sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
clif->message(fd, msg_txt(248));
return false;
}
@@ -476,12 +476,12 @@ ACMD(jumpto) {
return false;
}
- if (pl_sd->bl.m >= 0 && maplist[pl_sd->bl.m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
+ if (pl_sd->bl.m >= 0 && map->list[pl_sd->bl.m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
clif->message(fd, msg_txt(247)); // You are not authorized to warp to this map.
return false;
}
- if (sd->bl.m >= 0 && maplist[sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
+ if (sd->bl.m >= 0 && map->list[sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
clif->message(fd, msg_txt(248)); // You are not authorized to warp from your current map.
return false;
}
@@ -511,7 +511,7 @@ ACMD(jump)
sscanf(message, "%hd %hd", &x, &y);
- if (maplist[sd->bl.m].flag.noteleport && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
+ if (map->list[sd->bl.m].flag.noteleport && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
clif->message(fd, msg_txt(248)); // You are not authorized to warp from your current map.
return false;
}
@@ -626,11 +626,11 @@ ACMD(who) {
StrBuf->Printf(&buf, msg_txt(30), count); // %d players found.
} else {
if (count == 0)
- StrBuf->Printf(&buf, msg_txt(54), maplist[map_id].name); // No player found in map '%s'.
+ StrBuf->Printf(&buf, msg_txt(54), map->list[map_id].name); // No player found in map '%s'.
else if (count == 1)
- StrBuf->Printf(&buf, msg_txt(55), maplist[map_id].name); // 1 player found in map '%s'.
+ StrBuf->Printf(&buf, msg_txt(55), map->list[map_id].name); // 1 player found in map '%s'.
else
- StrBuf->Printf(&buf, msg_txt(56), count, maplist[map_id].name); // %d players found in map '%s'.
+ StrBuf->Printf(&buf, msg_txt(56), count, map->list[map_id].name); // %d players found in map '%s'.
}
clif->message(fd, StrBuf->Value(&buf));
StrBuf->Destroy(&buf);
@@ -750,11 +750,11 @@ ACMD(load) {
nullpo_retr(-1, sd);
m = map->mapindex2mapid(sd->status.save_point.map);
- if (m >= 0 && maplist[m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
+ if (m >= 0 && map->list[m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
clif->message(fd, msg_txt(249)); // You are not authorized to warp to your save map.
return false;
}
- if (sd->bl.m >= 0 && maplist[sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
+ if (sd->bl.m >= 0 && map->list[sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
clif->message(fd, msg_txt(248)); // You are not authorized to warp from your current map.
return false;
}
@@ -893,9 +893,9 @@ ACMD(hide) {
clif->message(fd, msg_txt(10)); // Invisible: Off
// increment the number of pvp players on the map
- maplist[sd->bl.m].users_pvp++;
+ map->list[sd->bl.m].users_pvp++;
- if( maplist[sd->bl.m].flag.pvp && !maplist[sd->bl.m].flag.pvp_nocalcrank ) {
+ if( map->list[sd->bl.m].flag.pvp && !map->list[sd->bl.m].flag.pvp_nocalcrank ) {
// register the player for ranking calculations
sd->pvp_timer = timer->add( timer->gettick() + 200, pc->calc_pvprank_timer, sd->bl.id, 0 );
}
@@ -907,9 +907,9 @@ ACMD(hide) {
clif->message(fd, msg_txt(11)); // Invisible: On
// decrement the number of pvp players on the map
- maplist[sd->bl.m].users_pvp--;
+ map->list[sd->bl.m].users_pvp--;
- if( maplist[sd->bl.m].flag.pvp && !maplist[sd->bl.m].flag.pvp_nocalcrank && sd->pvp_timer != INVALID_TIMER ) {
+ if( map->list[sd->bl.m].flag.pvp && !map->list[sd->bl.m].flag.pvp_nocalcrank && sd->pvp_timer != INVALID_TIMER ) {
// unregister the player for ranking
timer->delete( sd->pvp_timer, pc->calc_pvprank_timer );
sd->pvp_timer = INVALID_TIMER;
@@ -1463,13 +1463,13 @@ int atcommand_pvpoff_sub(struct block_list *bl,va_list ap)
ACMD(pvpoff) {
nullpo_retr(-1, sd);
- if (!maplist[sd->bl.m].flag.pvp) {
+ if (!map->list[sd->bl.m].flag.pvp) {
clif->message(fd, msg_txt(160)); // PvP is already Off.
return false;
}
- map->zone_change2(sd->bl.m,maplist[sd->bl.m].prev_zone);
- maplist[sd->bl.m].flag.pvp = 0;
+ map->zone_change2(sd->bl.m,map->list[sd->bl.m].prev_zone);
+ map->list[sd->bl.m].flag.pvp = 0;
if (!battle_config.pk_mode) {
clif->map_property_mapall(sd->bl.m, MAPPROPERTY_NOTHING);
@@ -1501,13 +1501,13 @@ int atcommand_pvpon_sub(struct block_list *bl,va_list ap)
ACMD(pvpon) {
nullpo_retr(-1, sd);
- if (maplist[sd->bl.m].flag.pvp) {
+ if (map->list[sd->bl.m].flag.pvp) {
clif->message(fd, msg_txt(161)); // PvP is already On.
return false;
}
- map->zone_change2(sd->bl.m,strdb_get(zone_db, MAP_ZONE_PVP_NAME));
- maplist[sd->bl.m].flag.pvp = 1;
+ map->zone_change2(sd->bl.m,strdb_get(map->zone_db, MAP_ZONE_PVP_NAME));
+ map->list[sd->bl.m].flag.pvp = 1;
if (!battle_config.pk_mode) {// display pvp circle and rank
clif->map_property_mapall(sd->bl.m, MAPPROPERTY_FREEPVPZONE);
@@ -1526,13 +1526,13 @@ ACMD(pvpon) {
ACMD(gvgoff) {
nullpo_retr(-1, sd);
- if (!maplist[sd->bl.m].flag.gvg) {
+ if (!map->list[sd->bl.m].flag.gvg) {
clif->message(fd, msg_txt(162)); // GvG is already Off.
return false;
}
- map->zone_change2(sd->bl.m,maplist[sd->bl.m].prev_zone);
- maplist[sd->bl.m].flag.gvg = 0;
+ map->zone_change2(sd->bl.m,map->list[sd->bl.m].prev_zone);
+ map->list[sd->bl.m].flag.gvg = 0;
clif->map_property_mapall(sd->bl.m, MAPPROPERTY_NOTHING);
clif->maptypeproperty2(&sd->bl,ALL_SAMEMAP);
map->foreachinmap(atcommand->stopattack,sd->bl.m, BL_CHAR, 0);
@@ -1547,13 +1547,13 @@ ACMD(gvgoff) {
ACMD(gvgon) {
nullpo_retr(-1, sd);
- if (maplist[sd->bl.m].flag.gvg) {
+ if (map->list[sd->bl.m].flag.gvg) {
clif->message(fd, msg_txt(163)); // GvG is already On.
return false;
}
- map->zone_change2(sd->bl.m,strdb_get(zone_db, MAP_ZONE_GVG_NAME));
- maplist[sd->bl.m].flag.gvg = 1;
+ map->zone_change2(sd->bl.m,strdb_get(map->zone_db, MAP_ZONE_GVG_NAME));
+ map->list[sd->bl.m].flag.gvg = 1;
clif->map_property_mapall(sd->bl.m, MAPPROPERTY_AGITZONE);
clif->maptypeproperty2(&sd->bl,ALL_SAMEMAP);
clif->message(fd, msg_txt(34)); // GvG: On.
@@ -1845,11 +1845,11 @@ ACMD(go)
if (town >= 0 && town < ARRAYLENGTH(data)) {
m = map->mapname2mapid(data[town].map);
- if (m >= 0 && maplist[m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
+ if (m >= 0 && map->list[m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
clif->message(fd, msg_txt(247));
return false;
}
- if (sd->bl.m >= 0 && maplist[sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
+ if (sd->bl.m >= 0 && map->list[sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
clif->message(fd, msg_txt(248));
return false;
}
@@ -2192,7 +2192,7 @@ ACMD(gat) {
for (y = 2; y >= -2; y--) {
sprintf(atcmd_output, "%s (x= %d, y= %d) %02X %02X %02X %02X %02X",
- maplist[sd->bl.m].name, sd->bl.x - 2, sd->bl.y + y,
+ map->list[sd->bl.m].name, sd->bl.x - 2, sd->bl.y + y,
map->getcell(sd->bl.m, sd->bl.x - 2, sd->bl.y + y, CELL_GETTYPE),
map->getcell(sd->bl.m, sd->bl.x - 1, sd->bl.y + y, CELL_GETTYPE),
map->getcell(sd->bl.m, sd->bl.x, sd->bl.y + y, CELL_GETTYPE),
@@ -2688,11 +2688,11 @@ ACMD(recall) {
return false;
}
- if (sd->bl.m >= 0 && maplist[sd->bl.m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
+ if (sd->bl.m >= 0 && map->list[sd->bl.m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
clif->message(fd, msg_txt(1019)); // You are not authorized to warp someone to this map.
return false;
}
- if (pl_sd->bl.m >= 0 && maplist[pl_sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
+ if (pl_sd->bl.m >= 0 && map->list[pl_sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
clif->message(fd, msg_txt(1020)); // You are not authorized to warp this player from their map.
return false;
}
@@ -3391,7 +3391,7 @@ ACMD(recallall)
memset(atcmd_output, '\0', sizeof(atcmd_output));
- if (sd->bl.m >= 0 && maplist[sd->bl.m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
+ if (sd->bl.m >= 0 && map->list[sd->bl.m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
clif->message(fd, msg_txt(1032)); // You are not authorized to warp somenone to your current map.
return false;
}
@@ -3402,7 +3402,7 @@ ACMD(recallall)
if (sd->status.account_id != pl_sd->status.account_id && pc->get_group_level(sd) >= pc->get_group_level(pl_sd)) {
if (pl_sd->bl.m == sd->bl.m && pl_sd->bl.x == sd->bl.x && pl_sd->bl.y == sd->bl.y)
continue; // Don't waste time warping the character to the same place.
- if (pl_sd->bl.m >= 0 && maplist[pl_sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE))
+ if (pl_sd->bl.m >= 0 && map->list[pl_sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE))
count++;
else {
if (pc_isdead(pl_sd)) { //Wake them up
@@ -3444,7 +3444,7 @@ ACMD(guildrecall)
return false;
}
- if (sd->bl.m >= 0 && maplist[sd->bl.m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
+ if (sd->bl.m >= 0 && map->list[sd->bl.m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
clif->message(fd, msg_txt(1032)); // You are not authorized to warp somenone to your current map.
return false;
}
@@ -3464,7 +3464,7 @@ ACMD(guildrecall)
if (sd->status.account_id != pl_sd->status.account_id && pl_sd->status.guild_id == g->guild_id) {
if (pc->get_group_level(pl_sd) > pc->get_group_level(sd) || (pl_sd->bl.m == sd->bl.m && pl_sd->bl.x == sd->bl.x && pl_sd->bl.y == sd->bl.y))
continue; // Skip GMs greater than you... or chars already on the cell
- if (pl_sd->bl.m >= 0 && maplist[pl_sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE))
+ if (pl_sd->bl.m >= 0 && map->list[pl_sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE))
count++;
else
pc->setpos(pl_sd, sd->mapindex, sd->bl.x, sd->bl.y, CLR_RESPAWN);
@@ -3502,7 +3502,7 @@ ACMD(partyrecall)
return false;
}
- if (sd->bl.m >= 0 && maplist[sd->bl.m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
+ if (sd->bl.m >= 0 && map->list[sd->bl.m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
clif->message(fd, msg_txt(1032)); // You are not authorized to warp somenone to your current map.
return false;
}
@@ -3521,7 +3521,7 @@ ACMD(partyrecall)
if (sd->status.account_id != pl_sd->status.account_id && pl_sd->status.party_id == p->party.party_id) {
if (pc->get_group_level(pl_sd) > pc->get_group_level(sd) || (pl_sd->bl.m == sd->bl.m && pl_sd->bl.x == sd->bl.x && pl_sd->bl.y == sd->bl.y))
continue; // Skip GMs greater than you... or chars already on the cell
- if (pl_sd->bl.m >= 0 && maplist[pl_sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE))
+ if (pl_sd->bl.m >= 0 && map->list[pl_sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE))
count++;
else
pc->setpos(pl_sd, sd->mapindex, sd->bl.x, sd->bl.y, CLR_RESPAWN);
@@ -3774,129 +3774,129 @@ ACMD(mapinfo) {
}
mapit->free(iter);
- sprintf(atcmd_output, msg_txt(1040), mapname, maplist[m_id].zone->name, maplist[m_id].users, maplist[m_id].npc_num, chat_num, vend_num); // Map: %s (Zone:%s) | Players: %d | NPCs: %d | Chats: %d | Vendings: %d
+ sprintf(atcmd_output, msg_txt(1040), mapname, map->list[m_id].zone->name, map->list[m_id].users, map->list[m_id].npc_num, chat_num, vend_num); // Map: %s (Zone:%s) | Players: %d | NPCs: %d | Chats: %d | Vendings: %d
clif->message(fd, atcmd_output);
clif->message(fd, msg_txt(1041)); // ------ Map Flags ------
- if (maplist[m_id].flag.town)
+ if (map->list[m_id].flag.town)
clif->message(fd, msg_txt(1042)); // Town Map
- if (battle_config.autotrade_mapflag == maplist[m_id].flag.autotrade)
+ if (battle_config.autotrade_mapflag == map->list[m_id].flag.autotrade)
clif->message(fd, msg_txt(1043)); // Autotrade Enabled
else
clif->message(fd, msg_txt(1044)); // Autotrade Disabled
- if (maplist[m_id].flag.battleground)
+ if (map->list[m_id].flag.battleground)
clif->message(fd, msg_txt(1045)); // Battlegrounds ON
strcpy(atcmd_output,msg_txt(1046)); // PvP Flags:
- if (maplist[m_id].flag.pvp)
+ if (map->list[m_id].flag.pvp)
strcat(atcmd_output, msg_txt(1047)); // Pvp ON |
- if (maplist[m_id].flag.pvp_noguild)
+ if (map->list[m_id].flag.pvp_noguild)
strcat(atcmd_output, msg_txt(1048)); // NoGuild |
- if (maplist[m_id].flag.pvp_noparty)
+ if (map->list[m_id].flag.pvp_noparty)
strcat(atcmd_output, msg_txt(1049)); // NoParty |
- if (maplist[m_id].flag.pvp_nightmaredrop)
+ if (map->list[m_id].flag.pvp_nightmaredrop)
strcat(atcmd_output, msg_txt(1050)); // NightmareDrop |
- if (maplist[m_id].flag.pvp_nocalcrank)
+ if (map->list[m_id].flag.pvp_nocalcrank)
strcat(atcmd_output, msg_txt(1051)); // NoCalcRank |
clif->message(fd, atcmd_output);
strcpy(atcmd_output,msg_txt(1052)); // GvG Flags:
- if (maplist[m_id].flag.gvg)
+ if (map->list[m_id].flag.gvg)
strcat(atcmd_output, msg_txt(1053)); // GvG ON |
- if (maplist[m_id].flag.gvg_dungeon)
+ if (map->list[m_id].flag.gvg_dungeon)
strcat(atcmd_output, msg_txt(1054)); // GvG Dungeon |
- if (maplist[m_id].flag.gvg_castle)
+ if (map->list[m_id].flag.gvg_castle)
strcat(atcmd_output, msg_txt(1055)); // GvG Castle |
- if (maplist[m_id].flag.gvg_noparty)
+ if (map->list[m_id].flag.gvg_noparty)
strcat(atcmd_output, msg_txt(1056)); // NoParty |
clif->message(fd, atcmd_output);
strcpy(atcmd_output,msg_txt(1057)); // Teleport Flags:
- if (maplist[m_id].flag.noteleport)
+ if (map->list[m_id].flag.noteleport)
strcat(atcmd_output, msg_txt(1058)); // NoTeleport |
- if (maplist[m_id].flag.monster_noteleport)
+ if (map->list[m_id].flag.monster_noteleport)
strcat(atcmd_output, msg_txt(1059)); // Monster NoTeleport |
- if (maplist[m_id].flag.nowarp)
+ if (map->list[m_id].flag.nowarp)
strcat(atcmd_output, msg_txt(1060)); // NoWarp |
- if (maplist[m_id].flag.nowarpto)
+ if (map->list[m_id].flag.nowarpto)
strcat(atcmd_output, msg_txt(1061)); // NoWarpTo |
- if (maplist[m_id].flag.noreturn)
+ if (map->list[m_id].flag.noreturn)
strcat(atcmd_output, msg_txt(1062)); // NoReturn |
- if (maplist[m_id].flag.nomemo)
+ if (map->list[m_id].flag.nomemo)
strcat(atcmd_output, msg_txt(1064)); // NoMemo |
clif->message(fd, atcmd_output);
sprintf(atcmd_output, msg_txt(1065), // No Exp Penalty: %s | No Zeny Penalty: %s
- (maplist[m_id].flag.noexppenalty) ? msg_txt(1066) : msg_txt(1067),
- (maplist[m_id].flag.nozenypenalty) ? msg_txt(1066) : msg_txt(1067)); // On / Off
+ (map->list[m_id].flag.noexppenalty) ? msg_txt(1066) : msg_txt(1067),
+ (map->list[m_id].flag.nozenypenalty) ? msg_txt(1066) : msg_txt(1067)); // On / Off
clif->message(fd, atcmd_output);
- if (maplist[m_id].flag.nosave) {
- if (!maplist[m_id].save.map)
+ if (map->list[m_id].flag.nosave) {
+ if (!map->list[m_id].save.map)
clif->message(fd, msg_txt(1068)); // No Save (Return to last Save Point)
- else if (maplist[m_id].save.x == -1 || maplist[m_id].save.y == -1 ) {
- sprintf(atcmd_output, msg_txt(1069), mapindex_id2name(maplist[m_id].save.map)); // No Save, Save Point: %s,Random
+ else if (map->list[m_id].save.x == -1 || map->list[m_id].save.y == -1 ) {
+ sprintf(atcmd_output, msg_txt(1069), mapindex_id2name(map->list[m_id].save.map)); // No Save, Save Point: %s,Random
clif->message(fd, atcmd_output);
} else {
sprintf(atcmd_output, msg_txt(1070), // No Save, Save Point: %s,%d,%d
- mapindex_id2name(maplist[m_id].save.map),maplist[m_id].save.x,maplist[m_id].save.y);
+ mapindex_id2name(map->list[m_id].save.map),map->list[m_id].save.x,map->list[m_id].save.y);
clif->message(fd, atcmd_output);
}
}
strcpy(atcmd_output,msg_txt(1071)); // Weather Flags:
- if (maplist[m_id].flag.snow)
+ if (map->list[m_id].flag.snow)
strcat(atcmd_output, msg_txt(1072)); // Snow |
- if (maplist[m_id].flag.fog)
+ if (map->list[m_id].flag.fog)
strcat(atcmd_output, msg_txt(1073)); // Fog |
- if (maplist[m_id].flag.sakura)
+ if (map->list[m_id].flag.sakura)
strcat(atcmd_output, msg_txt(1074)); // Sakura |
- if (maplist[m_id].flag.clouds)
+ if (map->list[m_id].flag.clouds)
strcat(atcmd_output, msg_txt(1075)); // Clouds |
- if (maplist[m_id].flag.clouds2)
+ if (map->list[m_id].flag.clouds2)
strcat(atcmd_output, msg_txt(1076)); // Clouds2 |
- if (maplist[m_id].flag.fireworks)
+ if (map->list[m_id].flag.fireworks)
strcat(atcmd_output, msg_txt(1077)); // Fireworks |
- if (maplist[m_id].flag.leaves)
+ if (map->list[m_id].flag.leaves)
strcat(atcmd_output, msg_txt(1078)); // Leaves |
- if (maplist[m_id].flag.nightenabled)
+ if (map->list[m_id].flag.nightenabled)
strcat(atcmd_output, msg_txt(1080)); // Displays Night |
clif->message(fd, atcmd_output);
strcpy(atcmd_output,msg_txt(1081)); // Other Flags:
- if (maplist[m_id].flag.nobranch)
+ if (map->list[m_id].flag.nobranch)
strcat(atcmd_output, msg_txt(1082)); // NoBranch |
- if (maplist[m_id].flag.notrade)
+ if (map->list[m_id].flag.notrade)
strcat(atcmd_output, msg_txt(1083)); // NoTrade |
- if (maplist[m_id].flag.novending)
+ if (map->list[m_id].flag.novending)
strcat(atcmd_output, msg_txt(1084)); // NoVending |
- if (maplist[m_id].flag.nodrop)
+ if (map->list[m_id].flag.nodrop)
strcat(atcmd_output, msg_txt(1085)); // NoDrop |
- if (maplist[m_id].flag.noskill)
+ if (map->list[m_id].flag.noskill)
strcat(atcmd_output, msg_txt(1086)); // NoSkill |
- if (maplist[m_id].flag.noicewall)
+ if (map->list[m_id].flag.noicewall)
strcat(atcmd_output, msg_txt(1087)); // NoIcewall |
- if (maplist[m_id].flag.allowks)
+ if (map->list[m_id].flag.allowks)
strcat(atcmd_output, msg_txt(1088)); // AllowKS |
- if (maplist[m_id].flag.reset)
+ if (map->list[m_id].flag.reset)
strcat(atcmd_output, msg_txt(1089)); // Reset |
clif->message(fd, atcmd_output);
strcpy(atcmd_output,msg_txt(1090)); // Other Flags:
- if (maplist[m_id].nocommand)
+ if (map->list[m_id].nocommand)
strcat(atcmd_output, msg_txt(1091)); // NoCommand |
- if (maplist[m_id].flag.nobaseexp)
+ if (map->list[m_id].flag.nobaseexp)
strcat(atcmd_output, msg_txt(1092)); // NoBaseEXP |
- if (maplist[m_id].flag.nojobexp)
+ if (map->list[m_id].flag.nojobexp)
strcat(atcmd_output, msg_txt(1093)); // NoJobEXP |
- if (maplist[m_id].flag.nomobloot)
+ if (map->list[m_id].flag.nomobloot)
strcat(atcmd_output, msg_txt(1094)); // NoMobLoot |
- if (maplist[m_id].flag.nomvploot)
+ if (map->list[m_id].flag.nomvploot)
strcat(atcmd_output, msg_txt(1095)); // NoMVPLoot |
- if (maplist[m_id].flag.partylock)
+ if (map->list[m_id].flag.partylock)
strcat(atcmd_output, msg_txt(1096)); // PartyLock |
- if (maplist[m_id].flag.guildlock)
+ if (map->list[m_id].flag.guildlock)
strcat(atcmd_output, msg_txt(1097)); // GuildLock |
clif->message(fd, atcmd_output);
@@ -3919,8 +3919,8 @@ ACMD(mapinfo) {
break;
case 2:
clif->message(fd, msg_txt(1100)); // ----- NPCs in Map -----
- for (i = 0; i < maplist[m_id].npc_num;) {
- nd = maplist[m_id].npc[i];
+ for (i = 0; i < map->list[m_id].npc_num;) {
+ nd = map->list[m_id].npc[i];
switch(nd->dir) {
case 0: strcpy(direction, msg_txt(1101)); break; // North
case 1: strcpy(direction, msg_txt(1102)); break; // North West
@@ -5028,7 +5028,7 @@ ACMD(killable) {
*------------------------------------------*/
ACMD(skillon) {
nullpo_retr(-1, sd);
- maplist[sd->bl.m].flag.noskill = 0;
+ map->list[sd->bl.m].flag.noskill = 0;
clif->message(fd, msg_txt(244));
return true;
}
@@ -5039,7 +5039,7 @@ ACMD(skillon) {
*------------------------------------------*/
ACMD(skilloff) {
nullpo_retr(-1, sd);
- maplist[sd->bl.m].flag.noskill = 1;
+ map->list[sd->bl.m].flag.noskill = 1;
clif->message(fd, msg_txt(243));
return true;
}
@@ -5069,8 +5069,8 @@ ACMD(npcmove) {
return false; //Not on a map.
}
- x = cap_value(x, 0, maplist[m].xs-1);
- y = cap_value(y, 0, maplist[m].ys-1);
+ x = cap_value(x, 0, map->list[m].xs-1);
+ y = cap_value(y, 0, map->list[m].ys-1);
map->foreachinrange(clif->outsight, &nd->bl, AREA_SIZE, BL_PC, &nd->bl);
map->moveblock(&nd->bl, x, y, timer->gettick());
map->foreachinrange(clif->insight, &nd->bl, AREA_SIZE, BL_PC, &nd->bl);
@@ -5557,7 +5557,7 @@ ACMD(changelook)
ACMD(autotrade) {
nullpo_retr(-1, sd);
- if( maplist[sd->bl.m].flag.autotrade != battle_config.autotrade_mapflag ) {
+ if( map->list[sd->bl.m].flag.autotrade != battle_config.autotrade_mapflag ) {
clif->message(fd, msg_txt(1179)); // Autotrade is not allowed on this map.
return false;
}
@@ -5599,7 +5599,7 @@ ACMD(changegm) {
return false;
}
- if( maplist[sd->bl.m].flag.guildlock || maplist[sd->bl.m].flag.gvg_castle ) {
+ if( map->list[sd->bl.m].flag.guildlock || map->list[sd->bl.m].flag.gvg_castle ) {
clif->message(fd, msg_txt(1182)); // You cannot change guild leaders on this map.
return false;
}
@@ -5815,12 +5815,12 @@ ACMD(autolootitem)
*------------------------------------------*/
//ACMD(rain) {
// nullpo_retr(-1, sd);
-// if (maplist[sd->bl.m].flag.rain) {
-// maplist[sd->bl.m].flag.rain=0;
+// if (map->list[sd->bl.m].flag.rain) {
+// map->list[sd->bl.m].flag.rain=0;
// clif->weather(sd->bl.m);
// clif->message(fd, msg_txt(1201)); // The rain has stopped.
// } else {
-// maplist[sd->bl.m].flag.rain=1;
+// map->list[sd->bl.m].flag.rain=1;
// clif->weather(sd->bl.m);
// clif->message(fd, msg_txt(1202)); // It has started to rain.
// }
@@ -5832,12 +5832,12 @@ ACMD(autolootitem)
*------------------------------------------*/
ACMD(snow) {
nullpo_retr(-1, sd);
- if (maplist[sd->bl.m].flag.snow) {
- maplist[sd->bl.m].flag.snow=0;
+ if (map->list[sd->bl.m].flag.snow) {
+ map->list[sd->bl.m].flag.snow=0;
clif->weather(sd->bl.m);
clif->message(fd, msg_txt(1203)); // Snow has stopped falling.
} else {
- maplist[sd->bl.m].flag.snow=1;
+ map->list[sd->bl.m].flag.snow=1;
clif->weather(sd->bl.m);
clif->message(fd, msg_txt(1204)); // It has started to snow.
}
@@ -5850,12 +5850,12 @@ ACMD(snow) {
*------------------------------------------*/
ACMD(sakura) {
nullpo_retr(-1, sd);
- if (maplist[sd->bl.m].flag.sakura) {
- maplist[sd->bl.m].flag.sakura=0;
+ if (map->list[sd->bl.m].flag.sakura) {
+ map->list[sd->bl.m].flag.sakura=0;
clif->weather(sd->bl.m);
clif->message(fd, msg_txt(1205)); // Cherry tree leaves no longer fall.
} else {
- maplist[sd->bl.m].flag.sakura=1;
+ map->list[sd->bl.m].flag.sakura=1;
clif->weather(sd->bl.m);
clif->message(fd, msg_txt(1206)); // Cherry tree leaves have begun to fall.
}
@@ -5867,12 +5867,12 @@ ACMD(sakura) {
*------------------------------------------*/
ACMD(clouds) {
nullpo_retr(-1, sd);
- if (maplist[sd->bl.m].flag.clouds) {
- maplist[sd->bl.m].flag.clouds=0;
+ if (map->list[sd->bl.m].flag.clouds) {
+ map->list[sd->bl.m].flag.clouds=0;
clif->weather(sd->bl.m);
clif->message(fd, msg_txt(1207)); // The clouds has disappear.
} else {
- maplist[sd->bl.m].flag.clouds=1;
+ map->list[sd->bl.m].flag.clouds=1;
clif->weather(sd->bl.m);
clif->message(fd, msg_txt(1208)); // Clouds appear.
}
@@ -5885,12 +5885,12 @@ ACMD(clouds) {
*------------------------------------------*/
ACMD(clouds2) {
nullpo_retr(-1, sd);
- if (maplist[sd->bl.m].flag.clouds2) {
- maplist[sd->bl.m].flag.clouds2=0;
+ if (map->list[sd->bl.m].flag.clouds2) {
+ map->list[sd->bl.m].flag.clouds2=0;
clif->weather(sd->bl.m);
clif->message(fd, msg_txt(1209)); // The alternative clouds disappear.
} else {
- maplist[sd->bl.m].flag.clouds2=1;
+ map->list[sd->bl.m].flag.clouds2=1;
clif->weather(sd->bl.m);
clif->message(fd, msg_txt(1210)); // Alternative clouds appear.
}
@@ -5903,12 +5903,12 @@ ACMD(clouds2) {
*------------------------------------------*/
ACMD(fog) {
nullpo_retr(-1, sd);
- if (maplist[sd->bl.m].flag.fog) {
- maplist[sd->bl.m].flag.fog=0;
+ if (map->list[sd->bl.m].flag.fog) {
+ map->list[sd->bl.m].flag.fog=0;
clif->weather(sd->bl.m);
clif->message(fd, msg_txt(1211)); // The fog has gone.
} else {
- maplist[sd->bl.m].flag.fog=1;
+ map->list[sd->bl.m].flag.fog=1;
clif->weather(sd->bl.m);
clif->message(fd, msg_txt(1212)); // Fog hangs over.
}
@@ -5920,12 +5920,12 @@ ACMD(fog) {
*------------------------------------------*/
ACMD(leaves) {
nullpo_retr(-1, sd);
- if (maplist[sd->bl.m].flag.leaves) {
- maplist[sd->bl.m].flag.leaves=0;
+ if (map->list[sd->bl.m].flag.leaves) {
+ map->list[sd->bl.m].flag.leaves=0;
clif->weather(sd->bl.m);
clif->message(fd, msg_txt(1213)); // Leaves no longer fall.
} else {
- maplist[sd->bl.m].flag.leaves=1;
+ map->list[sd->bl.m].flag.leaves=1;
clif->weather(sd->bl.m);
clif->message(fd, msg_txt(1214)); // Fallen leaves fall.
}
@@ -5938,12 +5938,12 @@ ACMD(leaves) {
*------------------------------------------*/
ACMD(fireworks) {
nullpo_retr(-1, sd);
- if (maplist[sd->bl.m].flag.fireworks) {
- maplist[sd->bl.m].flag.fireworks=0;
+ if (map->list[sd->bl.m].flag.fireworks) {
+ map->list[sd->bl.m].flag.fireworks=0;
clif->weather(sd->bl.m);
clif->message(fd, msg_txt(1215)); // Fireworks have ended.
} else {
- maplist[sd->bl.m].flag.fireworks=1;
+ map->list[sd->bl.m].flag.fireworks=1;
clif->weather(sd->bl.m);
clif->message(fd, msg_txt(1216)); // Fireworks have launched.
}
@@ -5959,14 +5959,14 @@ ACMD(clearweather) {
/**
* No longer available, keeping here just in case it's back someday. [Ind]
**/
- //maplist[sd->bl.m].flag.rain=0;
- maplist[sd->bl.m].flag.snow=0;
- maplist[sd->bl.m].flag.sakura=0;
- maplist[sd->bl.m].flag.clouds=0;
- maplist[sd->bl.m].flag.clouds2=0;
- maplist[sd->bl.m].flag.fog=0;
- maplist[sd->bl.m].flag.fireworks=0;
- maplist[sd->bl.m].flag.leaves=0;
+ //map->list[sd->bl.m].flag.rain=0;
+ map->list[sd->bl.m].flag.snow=0;
+ map->list[sd->bl.m].flag.sakura=0;
+ map->list[sd->bl.m].flag.clouds=0;
+ map->list[sd->bl.m].flag.clouds2=0;
+ map->list[sd->bl.m].flag.fog=0;
+ map->list[sd->bl.m].flag.fireworks=0;
+ map->list[sd->bl.m].flag.leaves=0;
clif->weather(sd->bl.m);
clif->message(fd, msg_txt(291));
@@ -7238,7 +7238,7 @@ ACMD(whereis)
for (i = 0; i < ARRAYLENGTH(monster->spawn) && monster->spawn[i].qty; i++) {
j = map->mapindex2mapid(monster->spawn[i].mapindex);
if (j < 0) continue;
- snprintf(atcmd_output, sizeof atcmd_output, "%s (%d)", maplist[j].name, monster->spawn[i].qty);
+ snprintf(atcmd_output, sizeof atcmd_output, "%s (%d)", map->list[j].name, monster->spawn[i].qty);
clif->message(fd, atcmd_output);
}
if (i == 0)
@@ -7513,10 +7513,10 @@ ACMD(fakename)
* Ragnarok Resources
*------------------------------------------*/
ACMD(mapflag) {
-#define CHECKFLAG( cmd ) do { if ( maplist[ sd->bl.m ].flag.cmd ) clif->message(sd->fd,#cmd); } while(0)
+#define CHECKFLAG( cmd ) do { if ( map->list[ sd->bl.m ].flag.cmd ) clif->message(sd->fd,#cmd); } while(0)
#define SETFLAG( cmd ) do { \
if ( strcmp( flag_name , #cmd ) == 0 ) { \
- maplist[ sd->bl.m ].flag.cmd = flag; \
+ map->list[ sd->bl.m ].flag.cmd = flag; \
sprintf(atcmd_output,"[ @mapflag ] %s flag has been set to %s value = %hd",#cmd,flag?"On":"Off",flag); \
clif->message(sd->fd,atcmd_output); \
return true; \
@@ -7552,20 +7552,20 @@ ACMD(mapflag) {
for (i = 0; flag_name[i]; i++) flag_name[i] = TOLOWER(flag_name[i]); //lowercase
if ( strcmp( flag_name , "gvg" ) == 0 ) {
- if( flag && !maplist[sd->bl.m].flag.gvg )
- map->zone_change2(sd->bl.m,strdb_get(zone_db, MAP_ZONE_GVG_NAME));
- else if ( !flag && maplist[sd->bl.m].flag.gvg )
- map->zone_change2(sd->bl.m,maplist[sd->bl.m].prev_zone);
+ if( flag && !map->list[sd->bl.m].flag.gvg )
+ map->zone_change2(sd->bl.m,strdb_get(map->zone_db, MAP_ZONE_GVG_NAME));
+ else if ( !flag && map->list[sd->bl.m].flag.gvg )
+ map->zone_change2(sd->bl.m,map->list[sd->bl.m].prev_zone);
} else if ( strcmp( flag_name , "pvp" ) == 0 ) {
- if( flag && !maplist[sd->bl.m].flag.pvp )
- map->zone_change2(sd->bl.m,strdb_get(zone_db, MAP_ZONE_PVP_NAME));
- else if ( !flag && maplist[sd->bl.m].flag.pvp )
- map->zone_change2(sd->bl.m,maplist[sd->bl.m].prev_zone);
+ if( flag && !map->list[sd->bl.m].flag.pvp )
+ map->zone_change2(sd->bl.m,strdb_get(map->zone_db, MAP_ZONE_PVP_NAME));
+ else if ( !flag && map->list[sd->bl.m].flag.pvp )
+ map->zone_change2(sd->bl.m,map->list[sd->bl.m].prev_zone);
} else if ( strcmp( flag_name , "battleground" ) == 0 ) {
- if( flag && !maplist[sd->bl.m].flag.battleground )
- map->zone_change2(sd->bl.m,strdb_get(zone_db, MAP_ZONE_BG_NAME));
- else if ( !flag && maplist[sd->bl.m].flag.battleground )
- map->zone_change2(sd->bl.m,maplist[sd->bl.m].prev_zone);
+ if( flag && !map->list[sd->bl.m].flag.battleground )
+ map->zone_change2(sd->bl.m,strdb_get(map->zone_db, MAP_ZONE_BG_NAME));
+ else if ( !flag && map->list[sd->bl.m].flag.battleground )
+ map->zone_change2(sd->bl.m,map->list[sd->bl.m].prev_zone);
}
SETFLAG(autotrade); SETFLAG(allowks); SETFLAG(nomemo); SETFLAG(noteleport);
@@ -8004,11 +8004,11 @@ ACMD(ksprotection)
ACMD(allowks) {
nullpo_retr(-1,sd);
- if( maplist[sd->bl.m].flag.allowks ) {
- maplist[sd->bl.m].flag.allowks = 0;
+ if( map->list[sd->bl.m].flag.allowks ) {
+ map->list[sd->bl.m].flag.allowks = 0;
clif->message(fd, msg_txt(1330)); // [ Map K.S Protection Active ]
} else {
- maplist[sd->bl.m].flag.allowks = 1;
+ map->list[sd->bl.m].flag.allowks = 1;
clif->message(fd, msg_txt(1331)); // [ Map K.S Protection Inactive ]
}
return true;
@@ -8707,11 +8707,11 @@ ACMD(join) {
return false;
}
if( hChSys.local && strcmpi(name + 1, hChSys.local_name) == 0 ) {
- if( !maplist[sd->bl.m].channel ) {
+ if( !map->list[sd->bl.m].channel ) {
clif->chsys_mjoin(sd);
return true;
} else
- channel = maplist[sd->bl.m].channel;
+ channel = map->list[sd->bl.m].channel;
} else if( hChSys.ally && sd->status.guild_id && strcmpi(name + 1, hChSys.ally_name) == 0 ) {
struct guild *g = sd->guild;
if( !g ) return false;/* unlikely, but we wont let it crash anyway. */
@@ -8877,7 +8877,7 @@ ACMD(channel) {
bool show_all = pc->has_permission(sd, PC_PERM_HCHSYS_ADMIN) ? true : false;
clif->message(fd, msg_txt(1410)); // -- Public Channels
if( hChSys.local ) {
- sprintf(atcmd_output, msg_txt(1409), hChSys.local_name, maplist[sd->bl.m].channel ? db_size(maplist[sd->bl.m].channel->users) : 0);// - #%s ( %d users )
+ sprintf(atcmd_output, msg_txt(1409), hChSys.local_name, map->list[sd->bl.m].channel ? db_size(map->list[sd->bl.m].channel->users) : 0);// - #%s ( %d users )
clif->message(fd, atcmd_output);
}
if( hChSys.ally && sd->status.guild_id ) {
@@ -9815,7 +9815,7 @@ bool is_atcommand(const int fd, struct map_session_data* sd, const char* message
// 1 = player invoked
if ( type == 1) {
//Commands are disabled on maps flagged as 'nocommand'
- if ( maplist[sd->bl.m].nocommand && pc->get_group_level(sd) < maplist[sd->bl.m].nocommand ) {
+ if ( map->list[sd->bl.m].nocommand && pc->get_group_level(sd) < map->list[sd->bl.m].nocommand ) {
clif->message(fd, msg_txt(143));
return false;
}
@@ -9938,9 +9938,9 @@ bool is_atcommand(const int fd, struct map_session_data* sd, const char* message
clif->message(fd, msg_txt(1393)); // You can't use commands while dead
return true;
}
- for(i = 0; i < maplist[sd->bl.m].zone->disabled_commands_count; i++) {
- if( info->func == maplist[sd->bl.m].zone->disabled_commands[i]->cmd ) {
- if( pc->get_group_level(sd) < maplist[sd->bl.m].zone->disabled_commands[i]->group_lv ) {
+ for(i = 0; i < map->list[sd->bl.m].zone->disabled_commands_count; i++) {
+ if( info->func == map->list[sd->bl.m].zone->disabled_commands[i]->cmd ) {
+ if( pc->get_group_level(sd) < map->list[sd->bl.m].zone->disabled_commands[i]->group_lv ) {
clif->colormes(sd->fd,COLOR_RED,"This command is disabled in this area");
return true;
} else
diff --git a/src/map/battle.c b/src/map/battle.c
index 237a4091d..6e6e7eab5 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -3003,16 +3003,16 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
default:
if (flag & BF_SKILL) { //Skills get a different reduction than non-skills. [Skotlex]
if (flag&BF_WEAPON)
- damage = damage * maplist[bl->m].weapon_damage_rate / 100;
+ damage = damage * map->list[bl->m].weapon_damage_rate / 100;
if (flag&BF_MAGIC)
- damage = damage * maplist[bl->m].magic_damage_rate / 100;
+ damage = damage * map->list[bl->m].magic_damage_rate / 100;
if (flag&BF_MISC)
- damage = damage * maplist[bl->m].misc_damage_rate / 100;
+ damage = damage * map->list[bl->m].misc_damage_rate / 100;
} else { //Normal attacks get reductions based on range.
if (flag & BF_SHORT)
- damage = damage * maplist[bl->m].short_damage_rate / 100;
+ damage = damage * map->list[bl->m].short_damage_rate / 100;
if (flag & BF_LONG)
- damage = damage * maplist[bl->m].long_damage_rate / 100;
+ damage = damage * map->list[bl->m].long_damage_rate / 100;
}
if(!damage) damage = 1;
break;
@@ -3178,12 +3178,12 @@ int battle_range_type(struct block_list *src, struct block_list *target, uint16
return BF_LONG;
}
int battle_adjust_skill_damage(int m, unsigned short skill_id) {
- if( maplist[m].skill_count ) {
+ if( map->list[m].skill_count ) {
int i;
- ARR_FIND(0, maplist[m].skill_count, i, maplist[m].skills[i]->skill_id == skill_id );
+ ARR_FIND(0, map->list[m].skill_count, i, map->list[m].skills[i]->skill_id == skill_id );
- if( i < maplist[m].skill_count ) {
- return maplist[m].skills[i]->modifier;
+ if( i < map->list[m].skill_count ) {
+ return map->list[m].skills[i]->modifier;
}
}
@@ -3402,18 +3402,18 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
}
#ifndef HMAP_ZONE_DAMAGE_CAP_TYPE
if( target && skill_id ) {
- for(i = 0; i < maplist[target->m].zone->capped_skills_count; i++) {
- if( skill_id == maplist[target->m].zone->capped_skills[i]->nameid && (maplist[target->m].zone->capped_skills[i]->type & target->type) ) {
- if( target->type == BL_MOB && maplist[target->m].zone->capped_skills[i]->subtype != MZS_NONE ) {
- if( (((TBL_MOB*)target)->status.mode&MD_BOSS) && !(maplist[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS) )
+ for(i = 0; i < map->list[target->m].zone->capped_skills_count; i++) {
+ if( skill_id == map->list[target->m].zone->capped_skills[i]->nameid && (map->list[target->m].zone->capped_skills[i]->type & target->type) ) {
+ if( target->type == BL_MOB && map->list[target->m].zone->capped_skills[i]->subtype != MZS_NONE ) {
+ if( (((TBL_MOB*)target)->status.mode&MD_BOSS) && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS) )
continue;
- if( ((TBL_MOB*)target)->special_state.clone && !(maplist[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE) )
+ if( ((TBL_MOB*)target)->special_state.clone && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE) )
continue;
}
- if( ad.damage > maplist[target->m].zone->capped_skills[i]->cap )
- ad.damage = maplist[target->m].zone->capped_skills[i]->cap;
- if( ad.damage2 > maplist[target->m].zone->capped_skills[i]->cap )
- ad.damage2 = maplist[target->m].zone->capped_skills[i]->cap;
+ if( ad.damage > map->list[target->m].zone->capped_skills[i]->cap )
+ ad.damage = map->list[target->m].zone->capped_skills[i]->cap;
+ if( ad.damage2 > map->list[target->m].zone->capped_skills[i]->cap )
+ ad.damage2 = map->list[target->m].zone->capped_skills[i]->cap;
break;
}
}
@@ -3498,7 +3498,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
ad.damage=battle->calc_damage(src,target,&ad,ad.damage,skill_id,skill_lv);
if( map_flag_gvg2(target->m) )
ad.damage=battle->calc_gvg_damage(src,target,ad.damage,ad.div_,skill_id,skill_lv,ad.flag);
- else if( maplist[target->m].flag.battleground )
+ else if( map->list[target->m].flag.battleground )
ad.damage=battle->calc_bg_damage(src,target,ad.damage,ad.div_,skill_id,skill_lv,ad.flag);
switch( skill_id ) { /* post-calc modifiers */
@@ -3844,18 +3844,18 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
}
#ifndef HMAP_ZONE_DAMAGE_CAP_TYPE
if( target && skill_id ) {
- for(i = 0; i < maplist[target->m].zone->capped_skills_count; i++) {
- if( skill_id == maplist[target->m].zone->capped_skills[i]->nameid && (maplist[target->m].zone->capped_skills[i]->type & target->type) ) {
- if( target->type == BL_MOB && maplist[target->m].zone->capped_skills[i]->subtype != MZS_NONE ) {
- if( (((TBL_MOB*)target)->status.mode&MD_BOSS) && !(maplist[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS) )
+ for(i = 0; i < map->list[target->m].zone->capped_skills_count; i++) {
+ if( skill_id == map->list[target->m].zone->capped_skills[i]->nameid && (map->list[target->m].zone->capped_skills[i]->type & target->type) ) {
+ if( target->type == BL_MOB && map->list[target->m].zone->capped_skills[i]->subtype != MZS_NONE ) {
+ if( (((TBL_MOB*)target)->status.mode&MD_BOSS) && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS) )
continue;
- if( ((TBL_MOB*)target)->special_state.clone && !(maplist[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE) )
+ if( ((TBL_MOB*)target)->special_state.clone && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE) )
continue;
}
- if( md.damage > maplist[target->m].zone->capped_skills[i]->cap )
- md.damage = maplist[target->m].zone->capped_skills[i]->cap;
- if( md.damage2 > maplist[target->m].zone->capped_skills[i]->cap )
- md.damage2 = maplist[target->m].zone->capped_skills[i]->cap;
+ if( md.damage > map->list[target->m].zone->capped_skills[i]->cap )
+ md.damage = map->list[target->m].zone->capped_skills[i]->cap;
+ if( md.damage2 > map->list[target->m].zone->capped_skills[i]->cap )
+ md.damage2 = map->list[target->m].zone->capped_skills[i]->cap;
break;
}
}
@@ -3896,7 +3896,7 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
md.damage=battle->calc_damage(src,target,&md,md.damage,skill_id,skill_lv);
if( map_flag_gvg2(target->m) )
md.damage=battle->calc_gvg_damage(src,target,md.damage,md.div_,skill_id,skill_lv,md.flag);
- else if( maplist[target->m].flag.battleground )
+ else if( map->list[target->m].flag.battleground )
md.damage=battle->calc_bg_damage(src,target,md.damage,md.div_,skill_id,skill_lv,md.flag);
switch( skill_id ) {
@@ -4859,18 +4859,18 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list
return wd; //Enough, rest is not needed.
#ifndef HMAP_ZONE_DAMAGE_CAP_TYPE
if( target && skill_id ) {
- for(i = 0; i < maplist[target->m].zone->capped_skills_count; i++) {
- if( skill_id == maplist[target->m].zone->capped_skills[i]->nameid && (maplist[target->m].zone->capped_skills[i]->type & target->type) ) {
- if( target->type == BL_MOB && maplist[target->m].zone->capped_skills[i]->subtype != MZS_NONE ) {
- if( (((TBL_MOB*)target)->status.mode&MD_BOSS) && !(maplist[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS) )
+ for(i = 0; i < map->list[target->m].zone->capped_skills_count; i++) {
+ if( skill_id == map->list[target->m].zone->capped_skills[i]->nameid && (map->list[target->m].zone->capped_skills[i]->type & target->type) ) {
+ if( target->type == BL_MOB && map->list[target->m].zone->capped_skills[i]->subtype != MZS_NONE ) {
+ if( (((TBL_MOB*)target)->status.mode&MD_BOSS) && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS) )
continue;
- if( ((TBL_MOB*)target)->special_state.clone && !(maplist[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE) )
+ if( ((TBL_MOB*)target)->special_state.clone && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE) )
continue;
}
- if( wd.damage > maplist[target->m].zone->capped_skills[i]->cap )
- wd.damage = maplist[target->m].zone->capped_skills[i]->cap;
- if( wd.damage2 > maplist[target->m].zone->capped_skills[i]->cap )
- wd.damage2 = maplist[target->m].zone->capped_skills[i]->cap;
+ if( wd.damage > map->list[target->m].zone->capped_skills[i]->cap )
+ wd.damage = map->list[target->m].zone->capped_skills[i]->cap;
+ if( wd.damage2 > map->list[target->m].zone->capped_skills[i]->cap )
+ wd.damage2 = map->list[target->m].zone->capped_skills[i]->cap;
break;
}
}
@@ -5047,13 +5047,13 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list
wd.damage = battle->calc_damage(src,target,&wd,wd.damage,skill_id,skill_lv);
if( map_flag_gvg2(target->m) )
wd.damage=battle->calc_gvg_damage(src,target,wd.damage,wd.div_,skill_id,skill_lv,wd.flag);
- else if( maplist[target->m].flag.battleground )
+ else if( map->list[target->m].flag.battleground )
wd.damage=battle->calc_bg_damage(src,target,wd.damage,wd.div_,skill_id,skill_lv,wd.flag);
} else if(!wd.damage) {
wd.damage2 = battle->calc_damage(src,target,&wd,wd.damage2,skill_id,skill_lv);
if( map_flag_gvg2(target->m) )
wd.damage2 = battle->calc_gvg_damage(src,target,wd.damage2,wd.div_,skill_id,skill_lv,wd.flag);
- else if( maplist[target->m].flag.battleground )
+ else if( map->list[target->m].flag.battleground )
wd.damage = battle->calc_bg_damage(src,target,wd.damage2,wd.div_,skill_id,skill_lv,wd.flag);
} else {
#ifdef RENEWAL
@@ -5065,7 +5065,7 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list
#endif
if( map_flag_gvg2(target->m) )
wd.damage = battle->calc_gvg_damage(src,target,wd.damage,wd.div_,skill_id,skill_lv,wd.flag);
- else if( maplist[target->m].flag.battleground )
+ else if( map->list[target->m].flag.battleground )
wd.damage = battle->calc_bg_damage(src,target,wd.damage,wd.div_,skill_id,skill_lv,wd.flag);
#ifndef RENEWAL
wd.damage2 = d2*100/d1 * wd.damage/100;
@@ -5118,18 +5118,18 @@ struct Damage battle_calc_attack(int attack_type,struct block_list *bl,struct bl
#ifdef HMAP_ZONE_DAMAGE_CAP_TYPE
if( target && skill_id ) {
int i;
- for(i = 0; i < maplist[target->m].zone->capped_skills_count; i++) {
- if( skill_id == maplist[target->m].zone->capped_skills[i]->nameid && (maplist[target->m].zone->capped_skills[i]->type & target->type) ) {
- if( target->type == BL_MOB && maplist[target->m].zone->capped_skills[i]->subtype != MZS_NONE ) {
- if( (((TBL_MOB*)target)->status.mode&MD_BOSS) && !(maplist[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS) )
+ for(i = 0; i < map->list[target->m].zone->capped_skills_count; i++) {
+ if( skill_id == map->list[target->m].zone->capped_skills[i]->nameid && (map->list[target->m].zone->capped_skills[i]->type & target->type) ) {
+ if( target->type == BL_MOB && map->list[target->m].zone->capped_skills[i]->subtype != MZS_NONE ) {
+ if( (((TBL_MOB*)target)->status.mode&MD_BOSS) && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS) )
continue;
- if( ((TBL_MOB*)target)->special_state.clone && !(maplist[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE) )
+ if( ((TBL_MOB*)target)->special_state.clone && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE) )
continue;
}
- if( d.damage > maplist[target->m].zone->capped_skills[i]->cap )
- d.damage = maplist[target->m].zone->capped_skills[i]->cap;
- if( d.damage2 > maplist[target->m].zone->capped_skills[i]->cap )
- d.damage2 = maplist[target->m].zone->capped_skills[i]->cap;
+ if( d.damage > map->list[target->m].zone->capped_skills[i]->cap )
+ d.damage = map->list[target->m].zone->capped_skills[i]->cap;
+ if( d.damage2 > map->list[target->m].zone->capped_skills[i]->cap )
+ d.damage2 = map->list[target->m].zone->capped_skills[i]->cap;
break;
}
}
@@ -5801,7 +5801,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
switch( battle->get_current_skill(src) ) {
case RK_DRAGONBREATH:// it can only hit traps in pvp/gvg maps
case RK_DRAGONBREATH_WATER:
- if( !maplist[m].flag.pvp && !maplist[m].flag.gvg )
+ if( !map->list[m].flag.pvp && !map->list[m].flag.gvg )
break;
case 0://you can hit them without skills
case MA_REMOVETRAP:
@@ -5886,7 +5886,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
{
struct mob_data *md = BL_CAST(BL_MOB, t_bl);
- if( !((map->agit_flag || map->agit2_flag) && maplist[m].flag.gvg_castle) && md->guardian_data && md->guardian_data->guild_id )
+ if( !((map->agit_flag || map->agit2_flag) && map->list[m].flag.gvg_castle) && md->guardian_data && md->guardian_data->guild_id )
return 0; // Disable guardians/emperiums owned by Guilds on non-woe times.
break;
}
@@ -5929,7 +5929,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
state |= BCT_ENEMY; // Can kill anything
strip_enemy = 0;
} else if( sd->duel_group
- && !((!battle_config.duel_allow_pvp && maplist[m].flag.pvp) || (!battle_config.duel_allow_gvg && map_flag_gvg(m)))
+ && !((!battle_config.duel_allow_pvp && map->list[m].flag.pvp) || (!battle_config.duel_allow_gvg && map_flag_gvg(m)))
) {
if( t_bl->type == BL_PC && (sd->duel_group == ((TBL_PC*)t_bl)->duel_group) )
return (BCT_ENEMY&flag)?1:-1; // Duel targets can ONLY be your enemy, nothing else.
@@ -5946,7 +5946,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
case BL_MOB:
{
struct mob_data *md = BL_CAST(BL_MOB, s_bl);
- if( !((map->agit_flag || map->agit2_flag) && maplist[m].flag.gvg_castle) && md->guardian_data && md->guardian_data->guild_id )
+ if( !((map->agit_flag || map->agit2_flag) && map->list[m].flag.gvg_castle) && md->guardian_data && md->guardian_data->guild_id )
return 0; // Disable guardians/emperium owned by Guilds on non-woe times.
if( !md->special_state.ai )
@@ -5994,16 +5994,16 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
if( map_flag_vs(m) ) {
//Check rivalry settings.
int sbg_id = 0, tbg_id = 0;
- if( maplist[m].flag.battleground ) {
+ if( map->list[m].flag.battleground ) {
sbg_id = bg->team_get_id(s_bl);
tbg_id = bg->team_get_id(t_bl);
}
if( flag&(BCT_PARTY|BCT_ENEMY) ) {
int s_party = status->get_party_id(s_bl);
if( s_party && s_party == status->get_party_id(t_bl)
- && !(maplist[m].flag.pvp && maplist[m].flag.pvp_noparty)
- && !(map_flag_gvg(m) && maplist[m].flag.gvg_noparty)
- && (!maplist[m].flag.battleground || sbg_id == tbg_id) )
+ && !(map->list[m].flag.pvp && map->list[m].flag.pvp_noparty)
+ && !(map_flag_gvg(m) && map->list[m].flag.gvg_noparty)
+ && (!map->list[m].flag.battleground || sbg_id == tbg_id) )
state |= BCT_PARTY;
else
state |= BCT_ENEMY;
@@ -6011,15 +6011,15 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
if( flag&(BCT_GUILD|BCT_ENEMY) ) {
int s_guild = status->get_guild_id(s_bl);
int t_guild = status->get_guild_id(t_bl);
- if( !(maplist[m].flag.pvp && maplist[m].flag.pvp_noguild)
+ if( !(map->list[m].flag.pvp && map->list[m].flag.pvp_noguild)
&& s_guild && t_guild
&& (s_guild == t_guild || (!(flag&BCT_SAMEGUILD) && guild->isallied(s_guild, t_guild)))
- && (!maplist[m].flag.battleground || sbg_id == tbg_id) )
+ && (!map->list[m].flag.battleground || sbg_id == tbg_id) )
state |= BCT_GUILD;
else
state |= BCT_ENEMY;
}
- if( state&BCT_ENEMY && maplist[m].flag.battleground && sbg_id && sbg_id == tbg_id )
+ if( state&BCT_ENEMY && map->list[m].flag.battleground && sbg_id && sbg_id == tbg_id )
state &= ~BCT_ENEMY;
if( state&BCT_ENEMY && battle_config.pk_mode && !map_flag_gvg(m) && s_bl->type == BL_PC && t_bl->type == BL_PC )
diff --git a/src/map/battleground.c b/src/map/battleground.c
index 160d2f96e..e7fe4085b 100644
--- a/src/map/battleground.c
+++ b/src/map/battleground.c
@@ -91,8 +91,8 @@ int bg_team_join(int bg_id, struct map_session_data *sd) {
bgd->members[i].x = sd->bl.x;
bgd->members[i].y = sd->bl.y;
/* populate 'where i came from' */
- if(maplist[sd->bl.m].flag.nosave || maplist[sd->bl.m].instance_id >= 0) {
- struct map_data *m=&maplist[sd->bl.m];
+ if(map->list[sd->bl.m].flag.nosave || map->list[sd->bl.m].instance_id >= 0) {
+ struct map_data *m=&map->list[sd->bl.m];
if(m->save.map)
memcpy(&bgd->members[i].source,&m->save,sizeof(struct point));
else
diff --git a/src/map/buyingstore.c b/src/map/buyingstore.c
index 92bf9b869..2a9e6a88e 100644
--- a/src/map/buyingstore.c
+++ b/src/map/buyingstore.c
@@ -34,7 +34,7 @@ bool buyingstore_setup(struct map_session_data* sd, unsigned char slots)
return false;
}
- if( maplist[sd->bl.m].flag.novending ) {
+ if( map->list[sd->bl.m].flag.novending ) {
// custom: no vending maps
clif->message(sd->fd, msg_txt(276)); // "You can't open a shop on this map"
return false;
@@ -89,7 +89,7 @@ void buyingstore_create(struct map_session_data* sd, int zenylimit, unsigned cha
return;
}
- if( maplist[sd->bl.m].flag.novending ) {
+ if( map->list[sd->bl.m].flag.novending ) {
// custom: no vending maps
clif->message(sd->fd, msg_txt(276)); // "You can't open a shop on this map"
return;
diff --git a/src/map/chat.c b/src/map/chat.c
index d6fad4d94..187d40337 100644
--- a/src/map/chat.c
+++ b/src/map/chat.c
@@ -80,7 +80,7 @@ int chat_createpcchat(struct map_session_data* sd, const char* title, const char
return 0;
}
- if( maplist[sd->bl.m].flag.nochat ) {
+ if( map->list[sd->bl.m].flag.nochat ) {
clif->message(sd->fd, msg_txt(281));
return 0; //Can't create chatrooms on this map.
}
diff --git a/src/map/clif.c b/src/map/clif.c
index e260c3a1b..f6c2ef4d0 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -1251,22 +1251,22 @@ void clif_weather_check(struct map_session_data *sd) {
int16 m = sd->bl.m;
int fd = sd->fd;
- if (maplist[m].flag.snow)
+ if (map->list[m].flag.snow)
clif->specialeffect_single(&sd->bl, 162, fd);
- if (maplist[m].flag.clouds)
+ if (map->list[m].flag.clouds)
clif->specialeffect_single(&sd->bl, 233, fd);
- if (maplist[m].flag.clouds2)
+ if (map->list[m].flag.clouds2)
clif->specialeffect_single(&sd->bl, 516, fd);
- if (maplist[m].flag.fog)
+ if (map->list[m].flag.fog)
clif->specialeffect_single(&sd->bl, 515, fd);
- if (maplist[m].flag.fireworks) {
+ if (map->list[m].flag.fireworks) {
clif->specialeffect_single(&sd->bl, 297, fd);
clif->specialeffect_single(&sd->bl, 299, fd);
clif->specialeffect_single(&sd->bl, 301, fd);
}
- if (maplist[m].flag.sakura)
+ if (map->list[m].flag.sakura)
clif->specialeffect_single(&sd->bl, 163, fd);
- if (maplist[m].flag.leaves)
+ if (map->list[m].flag.leaves)
clif->specialeffect_single(&sd->bl, 333, fd);
}
/**
@@ -1319,10 +1319,10 @@ int clif_spawn(struct block_list *bl)
clif->specialeffect(bl,423,AREA);
else if(sd->state.size==SZ_MEDIUM)
clif->specialeffect(bl,421,AREA);
- if( sd->bg_id && maplist[sd->bl.m].flag.battleground )
+ if( sd->bg_id && map->list[sd->bl.m].flag.battleground )
clif->sendbgemblem_area(sd);
for( i = 0; i < sd->sc_display_count; i++ ) {
- clif->sc_load(&sd->bl, sd->bl.id,AREA,StatusIconChangeTable[sd->sc_display[i]->type],sd->sc_display[i]->val1,sd->sc_display[i]->val2,sd->sc_display[i]->val3);
+ clif->sc_load(&sd->bl, sd->bl.id,AREA,status->IconChangeTable[sd->sc_display[i]->type],sd->sc_display[i]->val1,sd->sc_display[i]->val2,sd->sc_display[i]->val3);
}
for(i = 1; i < 5; i++){
if( sd->charm[i] > 0 )
@@ -1638,7 +1638,7 @@ void clif_changemap(struct map_session_data *sd, short m, int x, int y) {
WFIFOHEAD(fd,packet_len(0x91));
WFIFOW(fd,0) = 0x91;
- mapindex_getmapname_ext(maplist[m].custom_name ? maplist[maplist[m].instance_src_map].name : maplist[m].name, (char*)WFIFOP(fd,2));
+ mapindex_getmapname_ext(map->list[m].custom_name ? map->list[map->list[m].instance_src_map].name : map->list[m].name, (char*)WFIFOP(fd,2));
WFIFOW(fd,18) = x;
WFIFOW(fd,20) = y;
WFIFOSET(fd,packet_len(0x91));
@@ -4283,7 +4283,7 @@ void clif_getareachar_pc(struct map_session_data* sd,struct map_session_data* ds
clif->charm_single(sd->fd, dstsd, i);
}
for( i = 0; i < dstsd->sc_display_count; i++ ) {
- clif->sc_load(&sd->bl,dstsd->bl.id,SELF,StatusIconChangeTable[dstsd->sc_display[i]->type],dstsd->sc_display[i]->val1,dstsd->sc_display[i]->val2,dstsd->sc_display[i]->val3);
+ clif->sc_load(&sd->bl,dstsd->bl.id,SELF,status->IconChangeTable[dstsd->sc_display[i]->type],dstsd->sc_display[i]->val1,dstsd->sc_display[i]->val2,dstsd->sc_display[i]->val3);
}
if( (sd->status.party_id && dstsd->status.party_id == sd->status.party_id) || //Party-mate, or hpdisp setting.
(sd->bg_id && sd->bg_id == dstsd->bg_id) || //BattleGround
@@ -4332,7 +4332,7 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl) {
clif->specialeffect_single(bl,423,sd->fd);
else if(tsd->state.size==SZ_MEDIUM)
clif->specialeffect_single(bl,421,sd->fd);
- if( tsd->bg_id && maplist[tsd->bl.m].flag.battleground )
+ if( tsd->bg_id && map->list[tsd->bl.m].flag.battleground )
clif->sendbgemblem_single(sd->fd,tsd);
if ( tsd->status.robe )
clif->refreshlook(&sd->bl,bl->id,LOOK_ROBE,tsd->status.robe,SELF);
@@ -4574,7 +4574,7 @@ void clif_changemapcell(int fd, int16 m, int x, int y, int type, enum send_targe
WBUFW(buf,2) = x;
WBUFW(buf,4) = y;
WBUFW(buf,6) = type;
- mapindex_getmapname_ext(maplist[m].custom_name ? maplist[maplist[m].instance_src_map].name : maplist[m].name,(char*)WBUFP(buf,8));
+ mapindex_getmapname_ext(map->list[m].custom_name ? map->list[map->list[m].instance_src_map].name : map->list[m].name,(char*)WBUFP(buf,8));
if( fd ) {
WFIFOHEAD(fd,packet_len(0x192));
@@ -6525,7 +6525,7 @@ void clif_party_member_info(struct party_data *p, struct map_session_data *sd)
WBUFB(buf,14) = (p->party.member[i].online)?0:1;
memcpy(WBUFP(buf,15), p->party.name, NAME_LENGTH);
memcpy(WBUFP(buf,39), sd->status.name, NAME_LENGTH);
- mapindex_getmapname_ext(maplist[sd->bl.m].custom_name ? maplist[maplist[sd->bl.m].instance_src_map].name : maplist[sd->bl.m].name, (char*)WBUFP(buf,63));
+ mapindex_getmapname_ext(map->list[sd->bl.m].custom_name ? map->list[map->list[sd->bl.m].instance_src_map].name : map->list[sd->bl.m].name, (char*)WBUFP(buf,63));
WBUFB(buf,79) = (p->party.item&1)?1:0;
WBUFB(buf,80) = (p->party.item&2)?1:0;
clif->send(buf,packet_len(0x1e9),&sd->bl,PARTY);
@@ -9286,24 +9286,24 @@ void clif_parse_WantToConnection(int fd, struct map_session_data* sd) {
chrif->authreq(sd);
}
void clif_hercules_chsys_mjoin(struct map_session_data *sd) {
- if( !maplist[sd->bl.m].channel ) {
- CREATE(maplist[sd->bl.m].channel, struct hChSysCh , 1);
- safestrncpy(maplist[sd->bl.m].channel->name, hChSys.local_name, HCHSYS_NAME_LENGTH);
- maplist[sd->bl.m].channel->type = hChSys_MAP;
- maplist[sd->bl.m].channel->m = sd->bl.m;
+ if( !map->list[sd->bl.m].channel ) {
+ CREATE(map->list[sd->bl.m].channel, struct hChSysCh , 1);
+ safestrncpy(map->list[sd->bl.m].channel->name, hChSys.local_name, HCHSYS_NAME_LENGTH);
+ map->list[sd->bl.m].channel->type = hChSys_MAP;
+ map->list[sd->bl.m].channel->m = sd->bl.m;
- clif->chsys_create(maplist[sd->bl.m].channel,NULL,NULL,hChSys.local_color);
+ clif->chsys_create(map->list[sd->bl.m].channel,NULL,NULL,hChSys.local_color);
}
- if( maplist[sd->bl.m].channel->banned && idb_exists(maplist[sd->bl.m].channel->banned, sd->status.account_id) ) {
+ if( map->list[sd->bl.m].channel->banned && idb_exists(map->list[sd->bl.m].channel->banned, sd->status.account_id) ) {
return;
}
- clif->chsys_join(maplist[sd->bl.m].channel,sd);
+ clif->chsys_join(map->list[sd->bl.m].channel,sd);
- if( !( maplist[sd->bl.m].channel->opt & hChSys_OPT_ANNOUNCE_JOIN ) ) {
+ if( !( map->list[sd->bl.m].channel->opt & hChSys_OPT_ANNOUNCE_JOIN ) ) {
char mout[60];
- sprintf(mout, msg_txt(1435),hChSys.local_name,maplist[sd->bl.m].name); // You're now in the '#%s' channel for '%s'
+ sprintf(mout, msg_txt(1435),hChSys.local_name,map->list[sd->bl.m].name); // You're now in the '#%s' channel for '%s'
clif->colormes(sd->fd, COLOR_DEFAULT, mout);
}
}
@@ -9362,14 +9362,14 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) {
pc->setinvincibletimer(sd,battle_config.pc_invincible_time);
}
- if( maplist[sd->bl.m].users++ == 0 && battle_config.dynamic_mobs )
+ if( map->list[sd->bl.m].users++ == 0 && battle_config.dynamic_mobs )
map->spawnmobs(sd->bl.m);
if( !(sd->sc.option&OPTION_INVISIBLE) ) { // increment the number of pvp players on the map
- maplist[sd->bl.m].users_pvp++;
+ map->list[sd->bl.m].users_pvp++;
}
- if( maplist[sd->bl.m].instance_id >= 0 ) {
- instance->list[maplist[sd->bl.m].instance_id].users++;
- instance->check_idle(maplist[sd->bl.m].instance_id);
+ if( map->list[sd->bl.m].instance_id >= 0 ) {
+ instance->list[map->list[sd->bl.m].instance_id].users++;
+ instance->check_idle(map->list[sd->bl.m].instance_id);
}
sd->state.debug_remove_map = 0; // temporary state to track double remove_map's [FlavioJS]
@@ -9388,9 +9388,9 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) {
if( sd->bg_id ) clif->bg_hp(sd); // BattleGround System
- if(maplist[sd->bl.m].flag.pvp && !(sd->sc.option&OPTION_INVISIBLE)) {
+ if(map->list[sd->bl.m].flag.pvp && !(sd->sc.option&OPTION_INVISIBLE)) {
if(!battle_config.pk_mode) { // remove pvp stuff for pk_mode [Valaris]
- if (!maplist[sd->bl.m].flag.pvp_nocalcrank)
+ if (!map->list[sd->bl.m].flag.pvp_nocalcrank)
sd->pvp_timer = timer->add(timer->gettick()+200, pc->calc_pvprank_timer, sd->bl.id, 0);
sd->pvp_rank = 0;
sd->pvp_lastusers = 0;
@@ -9404,7 +9404,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) {
if(sd->duel_group)
clif->map_property(sd, MAPPROPERTY_FREEPVPZONE);
- if (maplist[sd->bl.m].flag.gvg_dungeon)
+ if (map->list[sd->bl.m].flag.gvg_dungeon)
clif->map_property(sd, MAPPROPERTY_FREEPVPZONE); //TODO: Figure out the real packet to send here.
if( map_flag_gvg2(sd->bl.m) )
@@ -9496,13 +9496,13 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) {
if(homun_alive(sd->hd))
homun->init_timers(sd->hd);
- if (map->night_flag && maplist[sd->bl.m].flag.nightenabled) {
+ if (map->night_flag && map->list[sd->bl.m].flag.nightenabled) {
sd->state.night = 1;
clif->status_change(&sd->bl, SI_SKE, 1, 0, 0, 0, 0);
}
// Notify everyone that this char logged in [Skotlex].
- map->map_foreachpc(clif->friendslist_toggle_sub, sd->status.account_id, sd->status.char_id, 1);
+ map->foreachpc(clif->friendslist_toggle_sub, sd->status.account_id, sd->status.char_id, 1);
//Login Event
npc->script_event(sd, NPCE_LOGIN);
@@ -9534,10 +9534,10 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) {
#endif
if( (battle_config.bg_flee_penalty != 100 || battle_config.gvg_flee_penalty != 100)
&& (map_flag_gvg2(sd->state.pmap) || map_flag_gvg2(sd->bl.m)
- || maplist[sd->state.pmap].flag.battleground || maplist[sd->bl.m].flag.battleground) )
+ || map->list[sd->state.pmap].flag.battleground || map->list[sd->bl.m].flag.battleground) )
status_calc_bl(&sd->bl, SCB_FLEE); //Refresh flee penalty
- if( map->night_flag && maplist[sd->bl.m].flag.nightenabled ) {
+ if( map->night_flag && map->list[sd->bl.m].flag.nightenabled ) {
//Display night.
if( !sd->state.night ) {
sd->state.night = 1;
@@ -9548,13 +9548,13 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) {
clif->sc_end(&sd->bl, sd->bl.id, SELF, SI_SKE);
}
- if( maplist[sd->bl.m].flag.battleground ) {
+ if( map->list[sd->bl.m].flag.battleground ) {
clif->map_type(sd, MAPTYPE_BATTLEFIELD); // Battleground Mode
- if( maplist[sd->bl.m].flag.battleground == 2 )
+ if( map->list[sd->bl.m].flag.battleground == 2 )
clif->bg_updatescore_single(sd);
}
- if( maplist[sd->bl.m].flag.allowks && !map_flag_ks(sd->bl.m) ) {
+ if( map->list[sd->bl.m].flag.allowks && !map_flag_ks(sd->bl.m) ) {
char output[128];
sprintf(output, "[ Kill Steal Protection Disabled. KS is allowed in this map ]");
clif->broadcast(&sd->bl, output, strlen(output) + 1, BC_BLUE, SELF);
@@ -9564,7 +9564,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) {
status_calc_pc(sd, false);/* some conditions are map-dependent so we must recalculate */
sd->state.changemap = false;
- if( hChSys.local && hChSys.local_autojoin && !maplist[sd->bl.m].flag.chsysnolocalaj ) {
+ if( hChSys.local && hChSys.local_autojoin && !map->list[sd->bl.m].flag.chsysnolocalaj ) {
clif->chsys_mjoin(sd);
}
}
@@ -9586,7 +9586,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) {
clif->showvendingboard(&sd->bl,sd->message,0);
}
- if(maplist[sd->bl.m].flag.loadevent) // Lance
+ if(map->list[sd->bl.m].flag.loadevent) // Lance
npc->script_event(sd, NPCE_LOADMAP);
if (pc->checkskill(sd, SG_DEVIL) && !pc->nextjobexp(sd)) //blindness [Komurka]
@@ -10415,10 +10415,10 @@ void clif_parse_WisMessage(int fd, struct map_session_data* sd)
chname++;
if( hChSys.local && strcmpi(chname, hChSys.local_name) == 0 ) {
- if( !maplist[sd->bl.m].channel ) {
+ if( !map->list[sd->bl.m].channel ) {
clif->chsys_mjoin(sd);
}
- channel = maplist[sd->bl.m].channel;
+ channel = map->list[sd->bl.m].channel;
} else if( hChSys.ally && sd->status.guild_id && strcmpi(chname, hChSys.ally_name) == 0 ) {
struct guild *g = sd->guild;
if( !g ) return;
@@ -10699,7 +10699,7 @@ void clif_hercules_chsys_delete(struct hChSysCh *channel) {
}
db_destroy(channel->users);
if( channel->m ) {
- maplist[channel->m].channel = NULL;
+ map->list[channel->m].channel = NULL;
aFree(channel);
} else if ( channel->type == hChSys_ALLY )
aFree(channel);
@@ -12000,7 +12000,7 @@ void clif_parse_CreateParty(int fd, struct map_session_data *sd) {
char* name = (char*)RFIFOP(fd,2);
name[NAME_LENGTH-1] = '\0';
- if( maplist[sd->bl.m].flag.partylock ) {
+ if( map->list[sd->bl.m].flag.partylock ) {
// Party locked.
clif->message(fd, msg_txt(227));
return;
@@ -12019,7 +12019,7 @@ void clif_parse_CreateParty2(int fd, struct map_session_data *sd) {
int item2 = RFIFOB(fd,27);
name[NAME_LENGTH-1] = '\0';
- if( maplist[sd->bl.m].flag.partylock ) {
+ if( map->list[sd->bl.m].flag.partylock ) {
// Party locked.
clif->message(fd, msg_txt(227));
return;
@@ -12039,7 +12039,7 @@ void clif_parse_CreateParty2(int fd, struct map_session_data *sd) {
void clif_parse_PartyInvite(int fd, struct map_session_data *sd) {
struct map_session_data *t_sd;
- if(maplist[sd->bl.m].flag.partylock) {
+ if(map->list[sd->bl.m].flag.partylock) {
// Party locked.
clif->message(fd, msg_txt(227));
return;
@@ -12060,7 +12060,7 @@ void clif_parse_PartyInvite2(int fd, struct map_session_data *sd) {
char *name = (char*)RFIFOP(fd,2);
name[NAME_LENGTH-1] = '\0';
- if(maplist[sd->bl.m].flag.partylock) {
+ if(map->list[sd->bl.m].flag.partylock) {
// Party locked.
clif->message(fd, msg_txt(227));
return;
@@ -12097,7 +12097,7 @@ void clif_parse_ReplyPartyInvite2(int fd,struct map_session_data *sd)
/// Request to leave party (CZ_REQ_LEAVE_GROUP).
/// 0100
void clif_parse_LeaveParty(int fd, struct map_session_data *sd) {
- if(maplist[sd->bl.m].flag.partylock) {
+ if(map->list[sd->bl.m].flag.partylock) {
// Party locked.
clif->message(fd, msg_txt(227));
return;
@@ -12109,7 +12109,7 @@ void clif_parse_LeaveParty(int fd, struct map_session_data *sd) {
/// Request to expel a party member (CZ_REQ_EXPEL_GROUP_MEMBER).
/// 0103 <account id>.L <char name>.24B
void clif_parse_RemovePartyMember(int fd, struct map_session_data *sd) {
- if(maplist[sd->bl.m].flag.partylock) {
+ if(map->list[sd->bl.m].flag.partylock) {
// Party locked.
clif->message(fd, msg_txt(227));
return;
@@ -12730,7 +12730,7 @@ void clif_parse_OpenVending(int fd, struct map_session_data* sd) {
if( sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOROOM )
return;
- if( maplist[sd->bl.m].flag.novending ) {
+ if( map->list[sd->bl.m].flag.novending ) {
clif->message (sd->fd, msg_txt(276)); // "You can't open a shop on this map"
return;
}
@@ -12751,7 +12751,7 @@ void clif_parse_CreateGuild(int fd,struct map_session_data *sd) {
char* name = (char*)RFIFOP(fd,6);
name[NAME_LENGTH-1] = '\0';
- if(maplist[sd->bl.m].flag.guildlock) {
+ if(map->list[sd->bl.m].flag.guildlock) {
//Guild locked.
clif->message(fd, msg_txt(228));
return;
@@ -12914,7 +12914,7 @@ clif_sub_guild_invite(int fd, struct map_session_data *sd, struct map_session_da
return 1;
}
- if (maplist[sd->bl.m].flag.guildlock) {
+ if (map->list[sd->bl.m].flag.guildlock) {
//Guild locked.
clif->message(fd, msg_txt(228));
return 1;
@@ -12961,7 +12961,7 @@ void clif_parse_GuildReplyInvite(int fd,struct map_session_data *sd)
/// Request to leave guild (CZ_REQ_LEAVE_GUILD).
/// 0159 <guild id>.L <account id>.L <char id>.L <reason>.40B
void clif_parse_GuildLeave(int fd,struct map_session_data *sd) {
- if(maplist[sd->bl.m].flag.guildlock) {
+ if(map->list[sd->bl.m].flag.guildlock) {
//Guild locked.
clif->message(fd, msg_txt(228));
return;
@@ -12978,7 +12978,7 @@ void clif_parse_GuildLeave(int fd,struct map_session_data *sd) {
/// Request to expel a member of a guild (CZ_REQ_BAN_GUILD).
/// 015b <guild id>.L <account id>.L <char id>.L <reason>.40B
void clif_parse_GuildExpulsion(int fd,struct map_session_data *sd) {
- if( maplist[sd->bl.m].flag.guildlock || sd->bg_id ) {
+ if( map->list[sd->bl.m].flag.guildlock || sd->bg_id ) {
// Guild locked.
clif->message(fd, msg_txt(228));
return;
@@ -13029,7 +13029,7 @@ void clif_parse_GuildRequestAlliance(int fd, struct map_session_data *sd) {
if(!sd->state.gmaster_flag)
return;
- if(maplist[sd->bl.m].flag.guildlock) {
+ if(map->list[sd->bl.m].flag.guildlock) {
//Guild locked.
clif->message(fd, msg_txt(228));
return;
@@ -13067,7 +13067,7 @@ void clif_parse_GuildDelAlliance(int fd, struct map_session_data *sd) {
if(!sd->state.gmaster_flag)
return;
- if(maplist[sd->bl.m].flag.guildlock) {
+ if(map->list[sd->bl.m].flag.guildlock) {
//Guild locked.
clif->message(fd, msg_txt(228));
return;
@@ -13084,7 +13084,7 @@ void clif_parse_GuildOpposition(int fd, struct map_session_data *sd) {
if(!sd->state.gmaster_flag)
return;
- if(maplist[sd->bl.m].flag.guildlock) {
+ if(map->list[sd->bl.m].flag.guildlock) {
//Guild locked.
clif->message(fd, msg_txt(228));
return;
@@ -13108,7 +13108,7 @@ void clif_parse_GuildOpposition(int fd, struct map_session_data *sd) {
/// now guild name; might have been (intended) email, since the
/// field name and size is same as the one in CH_DELETE_CHAR.
void clif_parse_GuildBreak(int fd, struct map_session_data *sd) {
- if( maplist[sd->bl.m].flag.guildlock ) {
+ if( map->list[sd->bl.m].flag.guildlock ) {
//Guild locked.
clif->message(fd, msg_txt(228));
return;
@@ -15950,8 +15950,8 @@ void clif_bg_updatescore(int16 m) {
bl.m = m;
WBUFW(buf,0) = 0x2de;
- WBUFW(buf,2) = maplist[m].bgscore_lion;
- WBUFW(buf,4) = maplist[m].bgscore_eagle;
+ WBUFW(buf,2) = map->list[m].bgscore_lion;
+ WBUFW(buf,4) = map->list[m].bgscore_eagle;
clif->send(buf,packet_len(0x2de),&bl,ALL_SAMEMAP);
}
@@ -15962,8 +15962,8 @@ void clif_bg_updatescore_single(struct map_session_data *sd) {
WFIFOHEAD(fd,packet_len(0x2de));
WFIFOW(fd,0) = 0x2de;
- WFIFOW(fd,2) = maplist[sd->bl.m].bgscore_lion;
- WFIFOW(fd,4) = maplist[sd->bl.m].bgscore_eagle;
+ WFIFOW(fd,2) = map->list[sd->bl.m].bgscore_lion;
+ WFIFOW(fd,4) = map->list[sd->bl.m].bgscore_eagle;
WFIFOSET(fd,packet_len(0x2de));
}
@@ -17358,14 +17358,14 @@ void clif_maptypeproperty2(struct block_list *bl,enum send_target t) {
p.PacketType = maptypeproperty2Type;
p.type = 0x28;
- p.flag.party = maplist[bl->m].flag.pvp ? 1 : 0;
+ p.flag.party = map->list[bl->m].flag.pvp ? 1 : 0;
p.flag.guild = map_flag_gvg(bl->m) ? 1 : 0;
p.flag.siege = map_flag_gvg2(bl->m) ? 1: 0;
p.flag.mineffect = map_flag_gvg(bl->m); // FIXME/CHECKME Forcing /mineffect in castles during WoE (probably redundant? I'm not sure)
p.flag.nolockon = 0; // TODO
- p.flag.countpk = maplist[bl->m].flag.pvp ? 1 : 0;
- p.flag.nopartyformation = maplist[bl->m].flag.partylock ? 1 : 0;
- p.flag.bg = maplist[bl->m].flag.battleground ? 1 : 0;
+ p.flag.countpk = map->list[bl->m].flag.pvp ? 1 : 0;
+ p.flag.nopartyformation = map->list[bl->m].flag.partylock ? 1 : 0;
+ p.flag.bg = map->list[bl->m].flag.battleground ? 1 : 0;
p.flag.noitemconsumption = 0; // TODO
p.flag.summonstarmiracle = 0; // TODO
p.flag.usecart = 1; // TODO
diff --git a/src/map/duel.c b/src/map/duel.c
index a993ee667..4e41865d4 100644
--- a/src/map/duel.c
+++ b/src/map/duel.c
@@ -69,7 +69,7 @@ void duel_showinfo(const unsigned int did, struct map_session_data* sd) {
duel->list[did].members_count + duel->list[did].invites_count);
clif->disp_onlyself(sd, output, strlen(output));
- map->map_foreachpc(duel_showinfo_sub, sd, &p);
+ map->foreachpc(duel_showinfo_sub, sd, &p);
}
int duel_create(struct map_session_data* sd, const unsigned int maxpl) {
@@ -126,7 +126,7 @@ void duel_leave(const unsigned int did, struct map_session_data* sd) {
duel->list[did].members_count--;
if(duel->list[did].members_count == 0) {
- map->map_foreachpc(duel_leave_sub, did);
+ map->foreachpc(duel_leave_sub, did);
duel->count--;
}
diff --git a/src/map/elemental.c b/src/map/elemental.c
index 5a3630c70..3251ca992 100644
--- a/src/map/elemental.c
+++ b/src/map/elemental.c
@@ -754,7 +754,7 @@ int elemental_ai_sub_foreachclient(struct map_session_data *sd, va_list ap) {
}
int elemental_ai_timer(int tid, unsigned int tick, int id, intptr_t data) {
- map->map_foreachpc(elemental->ai_sub_foreachclient,tick);
+ map->foreachpc(elemental->ai_sub_foreachclient,tick);
return 0;
}
diff --git a/src/map/guild.c b/src/map/guild.c
index b66961262..30f989f58 100644
--- a/src/map/guild.c
+++ b/src/map/guild.c
@@ -621,7 +621,7 @@ int guild_invite(struct map_session_data *sd, struct map_session_data *tsd) {
if( tsd->status.guild_id > 0
|| tsd->guild_invite > 0
- || ((map->agit_flag || map->agit2_flag) && maplist[tsd->bl.m].flag.gvg_castle)
+ || ((map->agit_flag || map->agit2_flag) && map->list[tsd->bl.m].flag.gvg_castle)
) {
//Can't invite people inside castles. [Skotlex]
clif->guild_inviteack(sd,0);
@@ -806,7 +806,7 @@ int guild_leave(struct map_session_data* sd, int guild_id, int account_id, int c
if( sd->status.account_id != account_id
|| sd->status.char_id != char_id
|| sd->status.guild_id != guild_id
- || ((map->agit_flag || map->agit2_flag) && maplist[sd->bl.m].flag.gvg_castle)
+ || ((map->agit_flag || map->agit2_flag) && map->list[sd->bl.m].flag.gvg_castle)
)
return 0;
@@ -838,7 +838,7 @@ int guild_expulsion(struct map_session_data* sd, int guild_id, int account_id, i
//Can't leave inside guild castles.
if ((tsd = map->id2sd(account_id))
&& tsd->status.char_id == char_id
- && ((map->agit_flag || map->agit2_flag) && maplist[tsd->bl.m].flag.gvg_castle)
+ && ((map->agit_flag || map->agit2_flag) && map->list[tsd->bl.m].flag.gvg_castle)
)
return 0;
diff --git a/src/map/instance.c b/src/map/instance.c
index 17b66fa75..6ae1d6141 100644
--- a/src/map/instance.c
+++ b/src/map/instance.c
@@ -159,95 +159,95 @@ int instance_add_map(const char *name, int instance_id, bool usebasename, const
return -2;
}
- if( maplist[m].instance_id >= 0 ) {
+ if( map->list[m].instance_id >= 0 ) {
// Source map already belong to a Instance.
ShowError("instance_add_map: trying to instance already instanced map %s.\n", name);
return -4;
}
- ARR_FIND( instance->start_id, map->map_num, i, maplist[i].name[0] == 0 ); // Searching for a Free Map
+ ARR_FIND( instance->start_id, map->count, i, map->list[i].name[0] == 0 ); // Searching for a Free Map
- if( i < map->map_num )
+ if( i < map->count )
im = i; // Unused map found (old instance)
else {
- im = map->map_num; // Using next map index
- RECREATE(maplist,struct map_data,++map->map_num);
+ im = map->count; // Using next map index
+ RECREATE(map->list,struct map_data,++map->count);
}
- if( maplist[m].cell == (struct mapcell *)0xdeadbeaf )
- map->cellfromcache(&maplist[m]);
+ if( map->list[m].cell == (struct mapcell *)0xdeadbeaf )
+ map->cellfromcache(&map->list[m]);
- memcpy( &maplist[im], &maplist[m], sizeof(struct map_data) ); // Copy source map
+ memcpy( &map->list[im], &map->list[m], sizeof(struct map_data) ); // Copy source map
if( map_name != NULL ) {
- snprintf(maplist[im].name, MAP_NAME_LENGTH, "%s", map_name);
- maplist[im].custom_name = true;
+ snprintf(map->list[im].name, MAP_NAME_LENGTH, "%s", map_name);
+ map->list[im].custom_name = true;
} else
- snprintf(maplist[im].name, MAP_NAME_LENGTH, (usebasename ? "%.3d#%s" : "%.3d%s"), instance_id, name); // Generate Name for Instance Map
- maplist[im].index = mapindex_addmap(-1, maplist[im].name); // Add map index
+ snprintf(map->list[im].name, MAP_NAME_LENGTH, (usebasename ? "%.3d#%s" : "%.3d%s"), instance_id, name); // Generate Name for Instance Map
+ map->list[im].index = mapindex_addmap(-1, map->list[im].name); // Add map index
- maplist[im].channel = NULL;
+ map->list[im].channel = NULL;
- if( !maplist[im].index ) {
- maplist[im].name[0] = '\0';
+ if( !map->list[im].index ) {
+ map->list[im].name[0] = '\0';
ShowError("instance_add_map: no more free map indexes.\n");
return -3; // No free map index
}
// Reallocate cells
- num_cell = maplist[im].xs * maplist[im].ys;
- CREATE( maplist[im].cell, struct mapcell, num_cell );
- memcpy( maplist[im].cell, maplist[m].cell, num_cell * sizeof(struct mapcell) );
+ num_cell = map->list[im].xs * map->list[im].ys;
+ CREATE( map->list[im].cell, struct mapcell, num_cell );
+ memcpy( map->list[im].cell, map->list[m].cell, num_cell * sizeof(struct mapcell) );
- size = maplist[im].bxs * maplist[im].bys * sizeof(struct block_list*);
- maplist[im].block = (struct block_list**)aCalloc(size, 1);
- maplist[im].block_mob = (struct block_list**)aCalloc(size, 1);
+ size = map->list[im].bxs * map->list[im].bys * sizeof(struct block_list*);
+ map->list[im].block = (struct block_list**)aCalloc(size, 1);
+ map->list[im].block_mob = (struct block_list**)aCalloc(size, 1);
- memset(maplist[im].npc, 0x00, sizeof(maplist[i].npc));
- maplist[im].npc_num = 0;
+ memset(map->list[im].npc, 0x00, sizeof(map->list[i].npc));
+ map->list[im].npc_num = 0;
- memset(maplist[im].moblist, 0x00, sizeof(maplist[im].moblist));
- maplist[im].mob_delete_timer = INVALID_TIMER;
+ memset(map->list[im].moblist, 0x00, sizeof(map->list[im].moblist));
+ map->list[im].mob_delete_timer = INVALID_TIMER;
//Mimic unit
- if( maplist[m].unit_count ) {
- maplist[im].unit_count = maplist[m].unit_count;
- CREATE( maplist[im].units, struct mapflag_skill_adjust*, maplist[im].unit_count );
+ if( map->list[m].unit_count ) {
+ map->list[im].unit_count = map->list[m].unit_count;
+ CREATE( map->list[im].units, struct mapflag_skill_adjust*, map->list[im].unit_count );
- for(i = 0; i < maplist[im].unit_count; i++) {
- CREATE( maplist[im].units[i], struct mapflag_skill_adjust, 1);
- memcpy( maplist[im].units[i],maplist[m].units[i],sizeof(struct mapflag_skill_adjust));
+ for(i = 0; i < map->list[im].unit_count; i++) {
+ CREATE( map->list[im].units[i], struct mapflag_skill_adjust, 1);
+ memcpy( map->list[im].units[i],map->list[m].units[i],sizeof(struct mapflag_skill_adjust));
}
}
//Mimic skills
- if( maplist[m].skill_count ) {
- maplist[im].skill_count = maplist[m].skill_count;
- CREATE( maplist[im].skills, struct mapflag_skill_adjust*, maplist[im].skill_count );
+ if( map->list[m].skill_count ) {
+ map->list[im].skill_count = map->list[m].skill_count;
+ CREATE( map->list[im].skills, struct mapflag_skill_adjust*, map->list[im].skill_count );
- for(i = 0; i < maplist[im].skill_count; i++) {
- CREATE( maplist[im].skills[i], struct mapflag_skill_adjust, 1);
- memcpy( maplist[im].skills[i],maplist[m].skills[i],sizeof(struct mapflag_skill_adjust));
+ for(i = 0; i < map->list[im].skill_count; i++) {
+ CREATE( map->list[im].skills[i], struct mapflag_skill_adjust, 1);
+ memcpy( map->list[im].skills[i],map->list[m].skills[i],sizeof(struct mapflag_skill_adjust));
}
}
//Mimic zone mf
- if( maplist[m].zone_mf_count ) {
- maplist[im].zone_mf_count = maplist[m].zone_mf_count;
- CREATE( maplist[im].zone_mf, char *, maplist[im].zone_mf_count );
+ if( map->list[m].zone_mf_count ) {
+ map->list[im].zone_mf_count = map->list[m].zone_mf_count;
+ CREATE( map->list[im].zone_mf, char *, map->list[im].zone_mf_count );
- for(i = 0; i < maplist[im].zone_mf_count; i++) {
- CREATE(maplist[im].zone_mf[i], char, MAP_ZONE_MAPFLAG_LENGTH);
- safestrncpy(maplist[im].zone_mf[i],maplist[m].zone_mf[i],MAP_ZONE_MAPFLAG_LENGTH);
+ for(i = 0; i < map->list[im].zone_mf_count; i++) {
+ CREATE(map->list[im].zone_mf[i], char, MAP_ZONE_MAPFLAG_LENGTH);
+ safestrncpy(map->list[im].zone_mf[i],map->list[m].zone_mf[i],MAP_ZONE_MAPFLAG_LENGTH);
}
}
- maplist[im].m = im;
- maplist[im].instance_id = instance_id;
- maplist[im].instance_src_map = m;
- maplist[m].flag.src4instance = 1; // Flag this map as a src map for instances
+ map->list[im].m = im;
+ map->list[im].instance_id = instance_id;
+ map->list[im].instance_src_map = m;
+ map->list[m].flag.src4instance = 1; // Flag this map as a src map for instances
RECREATE(instance->list[instance_id].map, unsigned short, ++instance->list[instance_id].num_map);
instance->list[instance_id].map[instance->list[instance_id].num_map - 1] = im; // Attach to actual instance
- map->addmap2db(&maplist[im]);
+ map->addmap2db(&map->list[im]);
return im;
}
@@ -265,7 +265,7 @@ int instance_map2imap(int16 m, int instance_id) {
}
for( i = 0; i < instance->list[instance_id].num_map; i++ ) {
- if( instance->list[instance_id].map[i] && maplist[instance->list[instance_id].map[i]].instance_src_map == m )
+ if( instance->list[instance_id].map[i] && map->list[instance->list[instance_id].map[i]].instance_src_map == m )
return instance->list[instance_id].map[i];
}
return -1;
@@ -277,9 +277,9 @@ int instance_map2imap(int16 m, int instance_id) {
* result : mapid of map "m" in this instance
*--------------------------------------*/
int instance_mapid2imapid(int16 m, int instance_id) {
- if( maplist[m].flag.src4instance == 0 )
+ if( map->list[m].flag.src4instance == 0 )
return m; // not instances found for this map
- else if( maplist[m].instance_id >= 0 ) { // This map is a instance, not a src map instance
+ else if( map->list[m].instance_id >= 0 ) { // This map is a instance, not a src map instance
ShowError("map_instance_mapid2imapid: already instanced (%d / %d)\n", m, instance_id);
return -1;
}
@@ -314,7 +314,7 @@ void instance_init(int instance_id) {
return; // nothing to do
for( i = 0; i < instance->list[instance_id].num_map; i++ )
- map->foreachinmap(instance_map_npcsub, maplist[instance->list[instance_id].map[i]].instance_src_map, BL_NPC, instance->list[instance_id].map[i]);
+ map->foreachinmap(instance_map_npcsub, map->list[instance->list[instance_id].map[i]].instance_src_map, BL_NPC, instance->list[instance_id].map[i]);
instance->list[instance_id].state = INSTANCE_BUSY;
}
@@ -367,70 +367,70 @@ int instance_cleanup_sub(struct block_list *bl, va_list ap) {
void instance_del_map(int16 m) {
int i;
- if( m <= 0 || maplist[m].instance_id == -1 ) {
+ if( m <= 0 || map->list[m].instance_id == -1 ) {
ShowError("instance_del_map: tried to remove non-existing instance map (%d)\n", m);
return;
}
- map->map_foreachpc(instance_del_load, m);
+ map->foreachpc(instance_del_load, m);
map->foreachinmap(instance_cleanup_sub, m, BL_ALL);
- if( maplist[m].mob_delete_timer != INVALID_TIMER )
- timer->delete(maplist[m].mob_delete_timer, map->removemobs_timer);
+ if( map->list[m].mob_delete_timer != INVALID_TIMER )
+ timer->delete(map->list[m].mob_delete_timer, map->removemobs_timer);
mapindex_removemap(map_id2index(m));
// Free memory
- aFree(maplist[m].cell);
- aFree(maplist[m].block);
- aFree(maplist[m].block_mob);
+ aFree(map->list[m].cell);
+ aFree(map->list[m].block);
+ aFree(map->list[m].block_mob);
- if( maplist[m].unit_count ) {
- for(i = 0; i < maplist[m].unit_count; i++) {
- aFree(maplist[m].units[i]);
+ if( map->list[m].unit_count ) {
+ for(i = 0; i < map->list[m].unit_count; i++) {
+ aFree(map->list[m].units[i]);
}
- if( maplist[m].units )
- aFree(maplist[m].units);
+ if( map->list[m].units )
+ aFree(map->list[m].units);
}
- if( maplist[m].skill_count ) {
- for(i = 0; i < maplist[m].skill_count; i++) {
- aFree(maplist[m].skills[i]);
+ if( map->list[m].skill_count ) {
+ for(i = 0; i < map->list[m].skill_count; i++) {
+ aFree(map->list[m].skills[i]);
}
- if( maplist[m].skills )
- aFree(maplist[m].skills);
+ if( map->list[m].skills )
+ aFree(map->list[m].skills);
}
- if( maplist[m].zone_mf_count ) {
- for(i = 0; i < maplist[m].zone_mf_count; i++) {
- aFree(maplist[m].zone_mf[i]);
+ if( map->list[m].zone_mf_count ) {
+ for(i = 0; i < map->list[m].zone_mf_count; i++) {
+ aFree(map->list[m].zone_mf[i]);
}
- if( maplist[m].zone_mf )
- aFree(maplist[m].zone_mf);
+ if( map->list[m].zone_mf )
+ aFree(map->list[m].zone_mf);
}
// Remove from instance
- for( i = 0; i < instance->list[maplist[m].instance_id].num_map; i++ ) {
- if( instance->list[maplist[m].instance_id].map[i] == m ) {
- instance->list[maplist[m].instance_id].num_map--;
- for( ; i < instance->list[maplist[m].instance_id].num_map; i++ )
- instance->list[maplist[m].instance_id].map[i] = instance->list[maplist[m].instance_id].map[i+1];
+ for( i = 0; i < instance->list[map->list[m].instance_id].num_map; i++ ) {
+ if( instance->list[map->list[m].instance_id].map[i] == m ) {
+ instance->list[map->list[m].instance_id].num_map--;
+ for( ; i < instance->list[map->list[m].instance_id].num_map; i++ )
+ instance->list[map->list[m].instance_id].map[i] = instance->list[map->list[m].instance_id].map[i+1];
i = -1;
break;
}
}
- if( i == instance->list[maplist[m].instance_id].num_map )
- ShowError("map_instance_del: failed to remove %s from instance list (%s): %d\n", maplist[m].name, instance->list[maplist[m].instance_id].name, m);
+ if( i == instance->list[map->list[m].instance_id].num_map )
+ ShowError("map_instance_del: failed to remove %s from instance list (%s): %d\n", map->list[m].name, instance->list[map->list[m].instance_id].name, m);
- if( maplist[m].channel )
- clif->chsys_delete(maplist[m].channel);
-
- map->removemapdb(&maplist[m]);
- memset(&maplist[m], 0x00, sizeof(maplist[0]));
- maplist[m].name[0] = 0;
- maplist[m].instance_id = -1;
- maplist[m].mob_delete_timer = INVALID_TIMER;
+ if( map->list[m].channel )
+ clif->chsys_delete(map->list[m].channel);
+
+ map->removemapdb(&map->list[m]);
+ memset(&map->list[m], 0x00, sizeof(map->list[0]));
+ map->list[m].name[0] = 0;
+ map->list[m].instance_id = -1;
+ map->list[m].mob_delete_timer = INVALID_TIMER;
}
/*--------------------------------------
@@ -592,9 +592,9 @@ void instance_check_kick(struct map_session_data *sd) {
int16 m = sd->bl.m;
clif->instance_leave(sd->fd);
- if( maplist[m].instance_id >= 0 ) { // User was on the instance map
- if( maplist[m].save.map )
- pc->setpos(sd, maplist[m].save.map, maplist[m].save.x, maplist[m].save.y, CLR_TELEPORT);
+ if( map->list[m].instance_id >= 0 ) { // User was on the instance map
+ if( map->list[m].save.map )
+ pc->setpos(sd, map->list[m].save.map, map->list[m].save.x, map->list[m].save.y, CLR_TELEPORT);
else
pc->setpos(sd, sd->status.save_point.map, sd->status.save_point.x, sd->status.save_point.y, CLR_TELEPORT);
}
diff --git a/src/map/intif.c b/src/map/intif.c
index e42679ec6..f31ab0f5a 100644
--- a/src/map/intif.c
+++ b/src/map/intif.c
@@ -454,8 +454,8 @@ int intif_party_changemap(struct map_session_data *sd,int online) {
if(!sd)
return 0;
- if( (m=map->mapindex2mapid(sd->mapindex)) >= 0 && maplist[m].instance_id >= 0 )
- mapindex = map_id2index(maplist[m].instance_src_map);
+ if( (m=map->mapindex2mapid(sd->mapindex)) >= 0 && map->list[m].instance_id >= 0 )
+ mapindex = map_id2index(map->list[m].instance_src_map);
else
mapindex = sd->mapindex;
@@ -918,7 +918,7 @@ void mapif_parse_WisToGM(int fd)
safestrncpy(Wisp_name, (char*)RFIFOP(fd,4), NAME_LENGTH);
safestrncpy(message, (char*)RFIFOP(fd,32), mes_len);
// information is sent to all online GM
- map->map_foreachpc(mapif_parse_WisToGM_sub, permission, Wisp_name, message, mes_len);
+ map->foreachpc(mapif_parse_WisToGM_sub, permission, Wisp_name, message, mes_len);
if (message != mbuf)
aFree(message);
diff --git a/src/map/itemdb.c b/src/map/itemdb.c
index f7ee8a884..fe2c43fcc 100644
--- a/src/map/itemdb.c
+++ b/src/map/itemdb.c
@@ -1838,18 +1838,18 @@ int itemdb_read_sqldb(void) {
uint32 count = 0;
// retrieve all rows from the item database
- if( SQL_ERROR == SQL->Query(mmysql_handle, "SELECT * FROM `%s`", item_db_name[fi]) ) {
- Sql_ShowDebug(mmysql_handle);
+ if( SQL_ERROR == SQL->Query(map->mysql_handle, "SELECT * FROM `%s`", item_db_name[fi]) ) {
+ Sql_ShowDebug(map->mysql_handle);
continue;
}
// process rows one by one
- while( SQL_SUCCESS == SQL->NextRow(mmysql_handle) ) {// wrap the result into a TXT-compatible format
+ while( SQL_SUCCESS == SQL->NextRow(map->mysql_handle) ) {// wrap the result into a TXT-compatible format
char* str[ITEMDB_SQL_COLUMNS];
char* dummy = "";
int i;
for( i = 0; i < ITEMDB_SQL_COLUMNS; ++i ) {
- SQL->GetData(mmysql_handle, i, &str[i], NULL);
+ SQL->GetData(map->mysql_handle, i, &str[i], NULL);
if( str[i] == NULL )
str[i] = dummy; // get rid of NULL columns
}
@@ -1860,7 +1860,7 @@ int itemdb_read_sqldb(void) {
}
// free the query result
- SQL->FreeResult(mmysql_handle);
+ SQL->FreeResult(map->mysql_handle);
ShowStatus("Done reading '"CL_WHITE"%lu"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, item_db_name[fi]);
}
@@ -1895,18 +1895,18 @@ uint64 itemdb_unique_id(int8 flag, int64 value) {
}
int itemdb_uid_load() {
char * uid;
- if (SQL_ERROR == SQL->Query(mmysql_handle, "SELECT `value` FROM `%s` WHERE `varname`='unique_id'",map->interreg_db))
- Sql_ShowDebug(mmysql_handle);
+ if (SQL_ERROR == SQL->Query(map->mysql_handle, "SELECT `value` FROM `%s` WHERE `varname`='unique_id'",map->interreg_db))
+ Sql_ShowDebug(map->mysql_handle);
- if( SQL_SUCCESS != SQL->NextRow(mmysql_handle) ) {
+ if( SQL_SUCCESS != SQL->NextRow(map->mysql_handle) ) {
ShowError("itemdb_uid_load: Unable to fetch unique_id data\n");
- SQL->FreeResult(mmysql_handle);
+ SQL->FreeResult(map->mysql_handle);
return -1;
}
- SQL->GetData(mmysql_handle, 0, &uid, NULL);
+ SQL->GetData(map->mysql_handle, 0, &uid, NULL);
itemdb->unique_id(1, (uint64)strtoull(uid, NULL, 10));
- SQL->FreeResult(mmysql_handle);
+ SQL->FreeResult(map->mysql_handle);
return 0;
}
diff --git a/src/map/log.c b/src/map/log.c
index 5d88e3df4..e33240505 100644
--- a/src/map/log.c
+++ b/src/map/log.c
@@ -91,7 +91,7 @@ bool should_log_item(int nameid, int amount, int refine, struct item_data *id) {
}
void log_branch_sub_sql(struct map_session_data* sd) {
SqlStmt* stmt;
- stmt = SQL->StmtMalloc(logmysql_handle);
+ stmt = SQL->StmtMalloc(logs->mysql_handle);
if( SQL_SUCCESS != SQL->StmtPrepare(stmt, LOG_QUERY " INTO `%s` (`branch_date`, `account_id`, `char_id`, `char_name`, `map`) VALUES (NOW(), '%d', '%d', ?, '%s')", logs->config.log_branch, sd->status.account_id, sd->status.char_id, mapindex_id2name(sd->mapindex) )
|| SQL_SUCCESS != SQL->StmtBindParam(stmt, 0, SQLDT_STRING, sd->status.name, strnlen(sd->status.name, NAME_LENGTH))
|| SQL_SUCCESS != SQL->StmtExecute(stmt) )
@@ -125,13 +125,13 @@ void log_branch(struct map_session_data* sd) {
logs->branch_sub(sd);
}
void log_pick_sub_sql(int id, int16 m, e_log_pick_type type, int amount, struct item* itm, struct item_data *data) {
- if( SQL_ERROR == SQL->Query(logmysql_handle,
+ if( SQL_ERROR == SQL->Query(logs->mysql_handle,
LOG_QUERY " INTO `%s` (`time`, `char_id`, `type`, `nameid`, `amount`, `refine`, `card0`, `card1`, `card2`, `card3`, `map`, `unique_id`) "
"VALUES (NOW(), '%d', '%c', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%s', '%"PRIu64"')",
logs->config.log_pick, id, logs->picktype2char(type), itm->nameid, amount, itm->refine, itm->card[0], itm->card[1], itm->card[2], itm->card[3],
- maplist[m].name?maplist[m].name:"", itm->unique_id)
+ map->list[m].name?map->list[m].name:"", itm->unique_id)
) {
- Sql_ShowDebug(logmysql_handle);
+ Sql_ShowDebug(logs->mysql_handle);
return;
}
}
@@ -146,7 +146,7 @@ void log_pick_sub_txt(int id, int16 m, e_log_pick_type type, int amount, struct
strftime(timestring, sizeof(timestring), "%m/%d/%Y %H:%M:%S", localtime(&curtime));
fprintf(logfp,"%s - %d\t%c\t%d,%d,%d,%d,%d,%d,%d,%s,'%"PRIu64"'\n",
timestring, id, logs->picktype2char(type), itm->nameid, amount, itm->refine, itm->card[0], itm->card[1], itm->card[2], itm->card[3],
- maplist[m].name?maplist[m].name:"", itm->unique_id);
+ map->list[m].name?map->list[m].name:"", itm->unique_id);
fclose(logfp);
}
/// logs item transactions (generic)
@@ -175,10 +175,10 @@ void log_pick_mob(struct mob_data* md, e_log_pick_type type, int amount, struct
log_pick(md->class_, md->bl.m, type, amount, itm, data ? data : itemdb->exists(itm->nameid));
}
void log_zeny_sub_sql(struct map_session_data* sd, e_log_pick_type type, struct map_session_data* src_sd, int amount) {
- if( SQL_ERROR == SQL->Query(logmysql_handle, LOG_QUERY " INTO `%s` (`time`, `char_id`, `src_id`, `type`, `amount`, `map`) VALUES (NOW(), '%d', '%d', '%c', '%d', '%s')",
+ if( SQL_ERROR == SQL->Query(logs->mysql_handle, LOG_QUERY " INTO `%s` (`time`, `char_id`, `src_id`, `type`, `amount`, `map`) VALUES (NOW(), '%d', '%d', '%c', '%d', '%s')",
logs->config.log_zeny, sd->status.char_id, src_sd->status.char_id, logs->picktype2char(type), amount, mapindex_id2name(sd->mapindex)) )
{
- Sql_ShowDebug(logmysql_handle);
+ Sql_ShowDebug(logs->mysql_handle);
return;
}
}
@@ -205,10 +205,10 @@ void log_zeny(struct map_session_data* sd, e_log_pick_type type, struct map_sess
logs->zeny_sub(sd,type,src_sd,amount);
}
void log_mvpdrop_sub_sql(struct map_session_data* sd, int monster_id, int* log_mvp) {
- if( SQL_ERROR == SQL->Query(logmysql_handle, LOG_QUERY " INTO `%s` (`mvp_date`, `kill_char_id`, `monster_id`, `prize`, `mvpexp`, `map`) VALUES (NOW(), '%d', '%d', '%d', '%d', '%s') ",
+ if( SQL_ERROR == SQL->Query(logs->mysql_handle, LOG_QUERY " INTO `%s` (`mvp_date`, `kill_char_id`, `monster_id`, `prize`, `mvpexp`, `map`) VALUES (NOW(), '%d', '%d', '%d', '%d', '%s') ",
logs->config.log_mvpdrop, sd->status.char_id, monster_id, log_mvp[0], log_mvp[1], mapindex_id2name(sd->mapindex)) )
{
- Sql_ShowDebug(logmysql_handle);
+ Sql_ShowDebug(logs->mysql_handle);
return;
}
}
@@ -238,7 +238,7 @@ void log_mvpdrop(struct map_session_data* sd, int monster_id, int* log_mvp)
void log_atcommand_sub_sql(struct map_session_data* sd, const char* message) {
SqlStmt* stmt;
- stmt = SQL->StmtMalloc(logmysql_handle);
+ stmt = SQL->StmtMalloc(logs->mysql_handle);
if( SQL_SUCCESS != SQL->StmtPrepare(stmt, LOG_QUERY " INTO `%s` (`atcommand_date`, `account_id`, `char_id`, `char_name`, `map`, `command`) VALUES (NOW(), '%d', '%d', ?, '%s', ?)", logs->config.log_gm, sd->status.account_id, sd->status.char_id, mapindex_id2name(sd->mapindex) )
|| SQL_SUCCESS != SQL->StmtBindParam(stmt, 0, SQLDT_STRING, sd->status.name, strnlen(sd->status.name, NAME_LENGTH))
|| SQL_SUCCESS != SQL->StmtBindParam(stmt, 1, SQLDT_STRING, (char*)message, safestrnlen(message, 255))
@@ -276,7 +276,7 @@ void log_atcommand(struct map_session_data* sd, const char* message)
void log_npc_sub_sql(struct map_session_data *sd, const char *message) {
SqlStmt* stmt;
- stmt = SQL->StmtMalloc(logmysql_handle);
+ stmt = SQL->StmtMalloc(logs->mysql_handle);
if( SQL_SUCCESS != SQL->StmtPrepare(stmt, LOG_QUERY " INTO `%s` (`npc_date`, `account_id`, `char_id`, `char_name`, `map`, `mes`) VALUES (NOW(), '%d', '%d', ?, '%s', ?)", logs->config.log_npc, sd->status.account_id, sd->status.char_id, mapindex_id2name(sd->mapindex) )
|| SQL_SUCCESS != SQL->StmtBindParam(stmt, 0, SQLDT_STRING, sd->status.name, strnlen(sd->status.name, NAME_LENGTH))
|| SQL_SUCCESS != SQL->StmtBindParam(stmt, 1, SQLDT_STRING, (char*)message, safestrnlen(message, 255))
@@ -314,7 +314,7 @@ void log_npc(struct map_session_data* sd, const char* message)
void log_chat_sub_sql(e_log_chat_type type, int type_id, int src_charid, int src_accid, const char *mapname, int x, int y, const char* dst_charname, const char* message) {
SqlStmt* stmt;
- stmt = SQL->StmtMalloc(logmysql_handle);
+ stmt = SQL->StmtMalloc(logs->mysql_handle);
if( SQL_SUCCESS != SQL->StmtPrepare(stmt, LOG_QUERY " INTO `%s` (`time`, `type`, `type_id`, `src_charid`, `src_accountid`, `src_map`, `src_map_x`, `src_map_y`, `dst_charname`, `message`) VALUES (NOW(), '%c', '%d', '%d', '%d', '%s', '%d', '%d', ?, ?)", logs->config.log_chat, logs->chattype2char(type), type_id, src_charid, src_accid, mapname, x, y)
|| SQL_SUCCESS != SQL->StmtBindParam(stmt, 0, SQLDT_STRING, (char*)dst_charname, safestrnlen(dst_charname, NAME_LENGTH))
|| SQL_SUCCESS != SQL->StmtBindParam(stmt, 1, SQLDT_STRING, (char*)message, safestrnlen(message, CHAT_SIZE_MAX))
@@ -354,6 +354,24 @@ void log_chat(e_log_chat_type type, int type_id, int src_charid, int src_accid,
logs->chat_sub(type,type_id,src_charid,src_accid,mapname,x,y,dst_charname,message);
}
+void log_sql_init(void) {
+ // log db connection
+ logs->mysql_handle = SQL->Malloc();
+
+ ShowInfo(""CL_WHITE"[SQL]"CL_RESET": Connecting to the Log Database "CL_WHITE"%s"CL_RESET" At "CL_WHITE"%s"CL_RESET"...\n",logs->db_name,logs->db_ip);
+ if ( SQL_ERROR == SQL->Connect(logs->mysql_handle, logs->db_id, logs->db_pw, logs->db_ip, logs->db_port, logs->db_name) )
+ exit(EXIT_FAILURE);
+ ShowStatus(""CL_WHITE"[SQL]"CL_RESET": Successfully '"CL_GREEN"connected"CL_RESET"' to Database '"CL_WHITE"%s"CL_RESET"'.\n", logs->db_name);
+
+ if( strlen(map->default_codepage) > 0 )
+ if ( SQL_ERROR == SQL->SetEncoding(logs->mysql_handle, map->default_codepage) )
+ Sql_ShowDebug(logs->mysql_handle);
+}
+void log_sql_final(void) {
+ ShowStatus("Close Log DB Connection....\n");
+ SQL->Free(logs->mysql_handle);
+ logs->mysql_handle = NULL;
+}
void log_set_defaults(void) {
memset(&logs->config, 0, sizeof(logs->config));
@@ -481,6 +499,15 @@ void log_config_complete(void) {
void log_defaults(void) {
logs = &log_s;
+ sprintf(logs->db_ip,"127.0.0.1");
+ sprintf(logs->db_id,"ragnarok");
+ sprintf(logs->db_pw,"ragnarok");
+ sprintf(logs->db_name,"log");
+
+ logs->db_port = 3306;
+ logs->mysql_handle = NULL;
+ /* */
+
logs->pick_pc = log_pick_pc;
logs->pick_mob = log_pick_mob;
logs->zeny = log_zeny;
@@ -501,6 +528,8 @@ void log_defaults(void) {
logs->config_read = log_config_read;
logs->config_done = log_config_complete;
+ logs->sql_init = log_sql_init;
+ logs->sql_final = log_sql_final;
logs->picktype2char = log_picktype2char;
logs->chattype2char = log_chattype2char;
diff --git a/src/map/log.h b/src/map/log.h
index caf9ce0c5..07606c8ef 100644
--- a/src/map/log.h
+++ b/src/map/log.h
@@ -95,6 +95,13 @@ struct log_interface {
char log_branch[64], log_pick[64], log_zeny[64], log_mvpdrop[64], log_gm[64], log_npc[64], log_chat[64];
} config;
/* */
+ char db_ip[32];
+ int db_port;
+ char db_id[32];
+ char db_pw[32];
+ char db_name[32];
+ Sql* mysql_handle;
+ /* */
void (*pick_pc) (struct map_session_data* sd, e_log_pick_type type, int amount, struct item* itm, struct item_data *data);
void (*pick_mob) (struct mob_data* md, e_log_pick_type type, int amount, struct item* itm, struct item_data *data);
void (*zeny) (struct map_session_data* sd, e_log_pick_type type, struct map_session_data* src_sd, int amount);
@@ -114,6 +121,8 @@ struct log_interface {
int (*config_read) (const char* cfgName);
void (*config_done) (void);
+ void (*sql_init) (void);
+ void (*sql_final) (void);
char (*picktype2char) (e_log_pick_type type);
char (*chattype2char) (e_log_chat_type type);
diff --git a/src/map/mail.c b/src/map/mail.c
index ea8bda003..2378cbe2a 100644
--- a/src/map/mail.c
+++ b/src/map/mail.c
@@ -177,7 +177,7 @@ void mail_deliveryfail(struct map_session_data *sd, struct mail_message *msg)
// This function only check if the mail operations are valid
bool mail_invalid_operation(struct map_session_data *sd) {
- if( !maplist[sd->bl.m].flag.town && !pc->can_use_command(sd, "@mail") ) {
+ if( !map->list[sd->bl.m].flag.town && !pc->can_use_command(sd, "@mail") ) {
ShowWarning("clif->parse_Mail: char '%s' trying to do invalid mail operations.\n", sd->status.name);
return true;
}
diff --git a/src/map/map.c b/src/map/map.c
index ea40d9979..0457de5bb 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -62,197 +62,106 @@
#include <unistd.h>
#endif
-char default_codepage[32] = "";
-
-int map_server_port = 3306;
-char map_server_ip[32] = "127.0.0.1";
-char map_server_id[32] = "ragnarok";
-char map_server_pw[32] = "ragnarok";
-char map_server_db[32] = "ragnarok";
-Sql* mmysql_handle;
-
-int map_port=0;
-
-// log database
-char log_db_ip[32] = "127.0.0.1";
-int log_db_port = 3306;
-char log_db_id[32] = "ragnarok";
-char log_db_pw[32] = "ragnarok";
-char log_db_db[32] = "log";
-Sql* logmysql_handle;
-
-// DBMap declaration
-static DBMap* id_db=NULL; // int id -> struct block_list*
-static DBMap* pc_db=NULL; // int id -> struct map_session_data*
-static DBMap* mobid_db=NULL; // int id -> struct mob_data*
-static DBMap* bossid_db=NULL; // int id -> struct mob_data* (MVP db)
-static DBMap* map_db=NULL; // unsigned int mapindex -> struct map_data_other_server*
-static DBMap* nick_db=NULL; // int char_id -> struct charid2nick* (requested names of offline characters)
-static DBMap* charid_db=NULL; // int char_id -> struct map_session_data*
-static DBMap* regen_db=NULL; // int id -> struct block_list* (status_natural_heal processing)
-
-static int map_users=0;
-
-#define BLOCK_SIZE 8
-#define block_free_max 1048576
-struct block_list *block_free[block_free_max];
-static int block_free_count = 0, block_free_lock = 0;
-
-#define BL_LIST_MAX 1048576
-static struct block_list *bl_list[BL_LIST_MAX];
-static int bl_list_count = 0;
-
-struct charid_request {
- struct charid_request* next;
- int charid;// who want to be notified of the nick
-};
-struct charid2nick {
- char nick[NAME_LENGTH];
- 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];
- int16 xs;
- int16 ys;
- int32 len;
-};
-
-int16 index2mapid[MAX_MAPINDEX];
-
-int enable_grf = 0; //To enable/disable reading maps from GRF files, bypassing mapcache [blackhole89]
-
-/* [Ind/Hercules] */
-struct eri *map_iterator_ers;
-char *map_cache_buffer = NULL; // Has the uncompressed gat data of all maps, so just one allocation has to be made
-
struct map_interface map_s;
-
-struct map_session_data *cpsd;
+struct mapit_interface mapit_s;
/*==========================================
-* server player count (of all mapservers)
-*------------------------------------------*/
-void map_setusers(int users)
-{
- map_users = users;
+ * server player count (of all mapservers)
+ *------------------------------------------*/
+void map_setusers(int users) {
+ map->users = users;
}
-int map_getusers(void)
-{
- return map_users;
+int map_getusers(void) {
+ return map->users;
}
/*==========================================
-* server player count (this mapserver only)
-*------------------------------------------*/
-int map_usercount(void)
-{
- return pc_db->size(pc_db);
+ * server player count (this mapserver only)
+ *------------------------------------------*/
+int map_usercount(void) {
+ return db_size(map->pc_db);
}
-
/*==========================================
-* Attempt to free a map blocklist
-*------------------------------------------*/
-int map_freeblock (struct block_list *bl)
-{
- nullpo_retr(block_free_lock, bl);
- if (block_free_lock == 0 || block_free_count >= block_free_max)
- {
+ * Attempt to free a map blocklist
+ *------------------------------------------*/
+int map_freeblock (struct block_list *bl) {
+ nullpo_retr(map->block_free_lock, bl);
+ if (map->block_free_lock == 0 || map->block_free_count >= block_free_max) {
aFree(bl);
bl = NULL;
- if (block_free_count >= block_free_max)
- ShowWarning("map_freeblock: too many free block! %d %d\n", block_free_count, block_free_lock);
+ if (map->block_free_count >= block_free_max)
+ ShowWarning("map_freeblock: too many free block! %d %d\n", map->block_free_count, map->block_free_lock);
} else
- block_free[block_free_count++] = bl;
+ map->block_free[map->block_free_count++] = bl;
- return block_free_lock;
+ return map->block_free_lock;
}
/*==========================================
-* Lock blocklist, (prevent map->freeblock usage)
-*------------------------------------------*/
-int map_freeblock_lock (void)
-{
- return ++block_free_lock;
+ * Lock blocklist, (prevent map->freeblock usage)
+ *------------------------------------------*/
+int map_freeblock_lock (void) {
+ return ++map->block_free_lock;
}
/*==========================================
-* Remove the lock on map_bl
-*------------------------------------------*/
-int map_freeblock_unlock (void)
-{
- if ((--block_free_lock) == 0) {
+ * Remove the lock on map_bl
+ *------------------------------------------*/
+int map_freeblock_unlock (void) {
+ if ((--map->block_free_lock) == 0) {
int i;
- for (i = 0; i < block_free_count; i++)
+ for (i = 0; i < map->block_free_count; i++)
{
- aFree(block_free[i]);
- block_free[i] = NULL;
+ aFree(map->block_free[i]);
+ map->block_free[i] = NULL;
}
- block_free_count = 0;
- } else if (block_free_lock < 0) {
+ map->block_free_count = 0;
+ } else if (map->block_free_lock < 0) {
ShowError("map_freeblock_unlock: lock count < 0 !\n");
- block_free_lock = 0;
+ map->block_free_lock = 0;
}
- return block_free_lock;
+ return map->block_free_lock;
}
// Timer function to check if there some remaining lock and remove them if so.
// Called each 1s
int map_freeblock_timer(int tid, unsigned int tick, int id, intptr_t data) {
- if (block_free_lock > 0) {
- ShowError("map_freeblock_timer: block_free_lock(%d) is invalid.\n", block_free_lock);
- block_free_lock = 1;
+ if (map->block_free_lock > 0) {
+ ShowError("map_freeblock_timer: block_free_lock(%d) is invalid.\n", map->block_free_lock);
+ map->block_free_lock = 1;
map->freeblock_unlock();
}
return 0;
}
-//
-// blocklist
-//
-/*==========================================
-* Handling of map_bl[]
-* The adresse of bl_heal is set in bl->prev
-*------------------------------------------*/
-static struct block_list bl_head;
-
#ifdef CELL_NOSTACK
/*==========================================
-* These pair of functions update the counter of how many objects
-* lie on a tile.
-*------------------------------------------*/
-static void map_addblcell(struct block_list *bl) {
- if( bl->m < 0 || bl->x < 0 || bl->x >= maplist[bl->m].xs
- || bl->y < 0 || bl->y >= maplist[bl->m].ys
+ * These pair of functions update the counter of how many objects
+ * lie on a tile.
+ *------------------------------------------*/
+void map_addblcell(struct block_list *bl) {
+ if( bl->m < 0 || bl->x < 0 || bl->x >= map->list[bl->m].xs
+ || bl->y < 0 || bl->y >= map->list[bl->m].ys
|| !(bl->type&BL_CHAR) )
return;
- maplist[bl->m].cell[bl->x+bl->y*maplist[bl->m].xs].cell_bl++;
- return;
+ map->list[bl->m].cell[bl->x+bl->y*map->list[bl->m].xs].cell_bl++;
}
-static void map_delblcell(struct block_list *bl) {
- if( bl->m < 0 || bl->x < 0 || bl->x >= maplist[bl->m].xs
- || bl->y < 0 || bl->y >= maplist[bl->m].ys
+void map_delblcell(struct block_list *bl) {
+ if( bl->m < 0 || bl->x < 0 || bl->x >= map->list[bl->m].xs
+ || bl->y < 0 || bl->y >= map->list[bl->m].ys
|| !(bl->type&BL_CHAR) )
- return;
- maplist[bl->m].cell[bl->x+bl->y*maplist[bl->m].xs].cell_bl--;
+ map->list[bl->m].cell[bl->x+bl->y*map->list[bl->m].xs].cell_bl--;
}
#endif
/*==========================================
-* Adds a block to the map.
-* Returns 0 on success, 1 on failure (illegal coordinates).
-*------------------------------------------*/
+ * Adds a block to the map.
+ * Returns 0 on success, 1 on failure (illegal coordinates).
+ *------------------------------------------*/
int map_addblock(struct block_list* bl)
{
int16 m, x, y;
@@ -268,39 +177,39 @@ int map_addblock(struct block_list* bl)
m = bl->m;
x = bl->x;
y = bl->y;
- if( m < 0 || m >= map->map_num ) {
- ShowError("map_addblock: invalid map id (%d), only %d are loaded.\n", m, map->map_num);
+ if( m < 0 || m >= map->count ) {
+ ShowError("map_addblock: invalid map id (%d), only %d are loaded.\n", m, map->count);
return 1;
}
- if( x < 0 || x >= maplist[m].xs || y < 0 || y >= maplist[m].ys ) {
- ShowError("map_addblock: out-of-bounds coordinates (\"%s\",%d,%d), map is %dx%d\n", maplist[m].name, x, y, maplist[m].xs, maplist[m].ys);
+ if( x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys ) {
+ ShowError("map_addblock: out-of-bounds coordinates (\"%s\",%d,%d), map is %dx%d\n", map->list[m].name, x, y, map->list[m].xs, map->list[m].ys);
return 1;
}
- pos = x/BLOCK_SIZE+(y/BLOCK_SIZE)*maplist[m].bxs;
+ pos = x/BLOCK_SIZE+(y/BLOCK_SIZE)*map->list[m].bxs;
if (bl->type == BL_MOB) {
- bl->next = maplist[m].block_mob[pos];
- bl->prev = &bl_head;
+ bl->next = map->list[m].block_mob[pos];
+ bl->prev = &map->bl_head;
if (bl->next) bl->next->prev = bl;
- maplist[m].block_mob[pos] = bl;
+ map->list[m].block_mob[pos] = bl;
} else {
- bl->next = maplist[m].block[pos];
- bl->prev = &bl_head;
+ bl->next = map->list[m].block[pos];
+ bl->prev = &map->bl_head;
if (bl->next) bl->next->prev = bl;
- maplist[m].block[pos] = bl;
+ map->list[m].block[pos] = bl;
}
#ifdef CELL_NOSTACK
- map_addblcell(bl);
+ map->addblcell(bl);
#endif
return 0;
}
/*==========================================
-* Removes a block from the map.
-*------------------------------------------*/
+ * Removes a block from the map.
+ *------------------------------------------*/
int map_delblock(struct block_list* bl)
{
int pos;
@@ -316,19 +225,19 @@ int map_delblock(struct block_list* bl)
}
#ifdef CELL_NOSTACK
- map_delblcell(bl);
+ map->delblcell(bl);
#endif
- pos = bl->x/BLOCK_SIZE+(bl->y/BLOCK_SIZE)*maplist[bl->m].bxs;
+ pos = bl->x/BLOCK_SIZE+(bl->y/BLOCK_SIZE)*map->list[bl->m].bxs;
if (bl->next)
bl->next->prev = bl->prev;
- if (bl->prev == &bl_head) {
+ if (bl->prev == &map->bl_head) {
//Since the head of the list, update the block_list map of []
if (bl->type == BL_MOB) {
- maplist[bl->m].block_mob[pos] = bl->next;
+ map->list[bl->m].block_mob[pos] = bl->next;
} else {
- maplist[bl->m].block[pos] = bl->next;
+ map->list[bl->m].block[pos] = bl->next;
}
} else {
bl->prev->next = bl->next;
@@ -340,10 +249,10 @@ int map_delblock(struct block_list* bl)
}
/*==========================================
-* Moves a block a x/y target position. [Skotlex]
-* Pass flag as 1 to prevent doing skill->unit_move checks
-* (which are executed by default on BL_CHAR types)
-*------------------------------------------*/
+ * Moves a block a x/y target position. [Skotlex]
+ * Pass flag as 1 to prevent doing skill->unit_move checks
+ * (which are executed by default on BL_CHAR types)
+ *------------------------------------------*/
int map_moveblock(struct block_list *bl, int x1, int y1, unsigned int tick)
{
int x0 = bl->x, y0 = bl->y;
@@ -375,13 +284,13 @@ int map_moveblock(struct block_list *bl, int x1, int y1, unsigned int tick)
if (moveblock) map->delblock(bl);
#ifdef CELL_NOSTACK
- else map_delblcell(bl);
+ else map->delblcell(bl);
#endif
bl->x = x1;
bl->y = y1;
if (moveblock) map->addblock(bl);
#ifdef CELL_NOSTACK
- else map_addblcell(bl);
+ else map->addblcell(bl);
#endif
if (bl->type&BL_CHAR) {
@@ -449,49 +358,49 @@ int map_moveblock(struct block_list *bl, int x1, int y1, unsigned int tick)
}
/*==========================================
-* Counts specified number of objects on given cell.
-* TODO: merge with bl_getall_area
-*------------------------------------------*/
+ * Counts specified number of objects on given cell.
+ * TODO: merge with bl_getall_area
+ *------------------------------------------*/
int map_count_oncell(int16 m, int16 x, int16 y, int type) {
int bx,by;
struct block_list *bl;
int count = 0;
- if (x < 0 || y < 0 || (x >= maplist[m].xs) || (y >= maplist[m].ys))
+ if (x < 0 || y < 0 || (x >= map->list[m].xs) || (y >= map->list[m].ys))
return 0;
bx = x/BLOCK_SIZE;
by = y/BLOCK_SIZE;
if (type&~BL_MOB)
- for( bl = maplist[m].block[bx+by*maplist[m].bxs] ; bl != NULL ; bl = bl->next )
+ for( bl = map->list[m].block[bx+by*map->list[m].bxs] ; bl != NULL ; bl = bl->next )
if(bl->x == x && bl->y == y && bl->type&type)
count++;
if (type&BL_MOB)
- for( bl = maplist[m].block_mob[bx+by*maplist[m].bxs] ; bl != NULL ; bl = bl->next )
+ for( bl = map->list[m].block_mob[bx+by*map->list[m].bxs] ; bl != NULL ; bl = bl->next )
if(bl->x == x && bl->y == y)
count++;
return count;
}
/*
-* Looks for a skill unit on a given cell
-* flag&1: runs battle_check_target check based on unit->group->target_flag
-*/
+ * Looks for a skill unit on a given cell
+ * flag&1: runs battle_check_target check based on unit->group->target_flag
+ */
struct skill_unit* map_find_skill_unit_oncell(struct block_list* target,int16 x,int16 y,uint16 skill_id,struct skill_unit* out_unit, int flag) {
int16 m,bx,by;
struct block_list *bl;
struct skill_unit *su;
m = target->m;
- if (x < 0 || y < 0 || (x >= maplist[m].xs) || (y >= maplist[m].ys))
+ if (x < 0 || y < 0 || (x >= map->list[m].xs) || (y >= map->list[m].ys))
return NULL;
bx = x/BLOCK_SIZE;
by = y/BLOCK_SIZE;
- for( bl = maplist[m].block[bx+by*maplist[m].bxs] ; bl != NULL ; bl = bl->next ) {
+ for( bl = map->list[m].block[bx+by*map->list[m].bxs] ; bl != NULL ; bl = bl->next ) {
if (bl->x != x || bl->y != y || bl->type != BL_SKILL)
continue;
@@ -523,17 +432,17 @@ static int bl_vforeach(int (*func)(struct block_list*, va_list), int blockcount,
int returnCount = 0;
map->freeblock_lock();
- for (i = blockcount; i < bl_list_count && returnCount < max; i++) {
- if (bl_list[i]->prev) { //func() may delete this bl_list[] slot, checking for prev ensures it wasnt queued for deletion.
+ for (i = blockcount; i < map->bl_list_count && returnCount < max; i++) {
+ if (map->bl_list[i]->prev) { //func() may delete this bl_list[] slot, checking for prev ensures it wasnt queued for deletion.
va_list argscopy;
va_copy(argscopy, args);
- returnCount += func(bl_list[i], argscopy);
+ returnCount += func(map->bl_list[i], argscopy);
va_end(argscopy);
}
}
map->freeblock_unlock();
- bl_list_count = blockcount;
+ map->bl_list_count = blockcount;
return returnCount;
}
@@ -553,30 +462,30 @@ static int map_vforeachinmap(int (*func)(struct block_list*, va_list), int16 m,
int bsize;
va_list argscopy;
struct block_list *bl;
- int blockcount = bl_list_count;
+ int blockcount = map->bl_list_count;
if (m < 0)
return 0;
- bsize = maplist[m].bxs * maplist[m].bys;
+ bsize = map->list[m].bxs * map->list[m].bys;
for (i = 0; i < bsize; i++) {
if (type&~BL_MOB) {
- for (bl = maplist[m].block[i]; bl != NULL; bl = bl->next) {
- if (bl->type&type && bl_list_count < BL_LIST_MAX) {
- bl_list[bl_list_count++] = bl;
+ for (bl = map->list[m].block[i]; bl != NULL; bl = bl->next) {
+ if (bl->type&type && map->bl_list_count < BL_LIST_MAX) {
+ map->bl_list[map->bl_list_count++] = bl;
}
}
}
if (type&BL_MOB) {
- for (bl = maplist[m].block_mob[i]; bl != NULL; bl = bl->next) {
- if (bl_list_count < BL_LIST_MAX) {
- bl_list[bl_list_count++] = bl;
+ for (bl = map->list[m].block_mob[i]; bl != NULL; bl = bl->next) {
+ if (map->bl_list_count < BL_LIST_MAX) {
+ map->bl_list[map->bl_list_count++] = bl;
}
}
}
}
- if (bl_list_count >= BL_LIST_MAX)
+ if (map->bl_list_count >= BL_LIST_MAX)
ShowError("map.c:map_vforeachinmap: bl_list size (%d) exceeded\n", BL_LIST_MAX);
va_copy(argscopy, args);
@@ -679,48 +588,48 @@ static int bl_getall_area(int type, int m, int x0, int y0, int x1, int y1, int (
// Limit search area to map size
x0 = max(x0, 0);
y0 = max(y0, 0);
- x1 = min(x1, maplist[m].xs - 1);
- y1 = min(y1, maplist[m].ys - 1);
+ x1 = min(x1, map->list[m].xs - 1);
+ y1 = min(y1, map->list[m].ys - 1);
for (by = y0 / BLOCK_SIZE; by <= y1 / BLOCK_SIZE; by++) {
for (bx = x0 / BLOCK_SIZE; bx <= x1 / BLOCK_SIZE; bx++) {
if (type&~BL_MOB) {
- for (bl = maplist[m].block[bx + by * maplist[m].bxs]; bl != NULL; bl = bl->next) {
- if (bl_list_count < BL_LIST_MAX
+ for (bl = map->list[m].block[bx + by * map->list[m].bxs]; bl != NULL; bl = bl->next) {
+ if (map->bl_list_count < BL_LIST_MAX
&& bl->type&type
&& bl->x >= x0 && bl->x <= x1
&& bl->y >= y0 && bl->y <= y1) {
if (func) {
va_start(args, func);
if (func(bl, args)) {
- bl_list[bl_list_count++] = bl;
+ map->bl_list[map->bl_list_count++] = bl;
found++;
}
va_end(args);
}
else {
- bl_list[bl_list_count++] = bl;
+ map->bl_list[map->bl_list_count++] = bl;
found++;
}
}
}
}
if (type&BL_MOB) { // TODO: fix this code duplication
- for (bl = maplist[m].block_mob[bx + by * maplist[m].bxs]; bl != NULL; bl = bl->next) {
- if (bl_list_count < BL_LIST_MAX
+ for (bl = map->list[m].block_mob[bx + by * map->list[m].bxs]; bl != NULL; bl = bl->next) {
+ if (map->bl_list_count < BL_LIST_MAX
//&& bl->type&type // block_mob contains BL_MOBs only
&& bl->x >= x0 && bl->x <= x1
&& bl->y >= y0 && bl->y <= y1) {
if (func) {
va_start(args, func);
if (func(bl, args)) {
- bl_list[bl_list_count++] = bl;
+ map->bl_list[map->bl_list_count++] = bl;
found++;
}
va_end(args);
}
else {
- bl_list[bl_list_count++] = bl;
+ map->bl_list[map->bl_list_count++] = bl;
found++;
}
}
@@ -729,7 +638,7 @@ static int bl_getall_area(int type, int m, int x0, int y0, int x1, int y1, int (
}
}
- if (bl_list_count >= BL_LIST_MAX)
+ if (map->bl_list_count >= BL_LIST_MAX)
ShowError("map.c:bl_getall_area: bl_list size (%d) exceeded\n", BL_LIST_MAX);
return found;
@@ -765,7 +674,7 @@ static int bl_vgetall_inrange(struct block_list *bl, va_list args)
*/
int map_vforeachinrange(int (*func)(struct block_list*, va_list), struct block_list* center, int16 range, int type, va_list ap) {
int returnCount = 0;
- int blockcount = bl_list_count;
+ int blockcount = map->bl_list_count;
va_list apcopy;
if (range < 0) range *= -1;
@@ -817,7 +726,7 @@ int map_foreachinrange(int (*func)(struct block_list*, va_list), struct block_li
*/
int map_vforcountinrange(int (*func)(struct block_list*, va_list), struct block_list* center, int16 range, int count, int type, va_list ap) {
int returnCount = 0;
- int blockcount = bl_list_count;
+ int blockcount = map->bl_list_count;
va_list apcopy;
if (range < 0) range *= -1;
@@ -890,7 +799,7 @@ static int bl_vgetall_inshootrange(struct block_list *bl, va_list args)
*/
int map_vforeachinshootrange(int (*func)(struct block_list*, va_list), struct block_list* center, int16 range, int type, va_list ap) {
int returnCount = 0;
- int blockcount = bl_list_count;
+ int blockcount = map->bl_list_count;
va_list apcopy;
if (range < 0) range *= -1;
@@ -943,7 +852,7 @@ int map_foreachinshootrange(int (*func)(struct block_list*, va_list), struct blo
*/
int map_vforeachinarea(int (*func)(struct block_list*, va_list), int16 m, int16 x0, int16 y0, int16 x1, int16 y1, int type, va_list ap) {
int returnCount = 0;
- int blockcount = bl_list_count;
+ int blockcount = map->bl_list_count;
va_list apcopy;
bl_getall_area(type, m, x0, y0, x1, y1, NULL);
@@ -999,7 +908,7 @@ int map_foreachinarea(int (*func)(struct block_list*, va_list), int16 m, int16 x
*/
int map_vforcountinarea(int (*func)(struct block_list*,va_list), int16 m, int16 x0, int16 y0, int16 x1, int16 y1, int count, int type, va_list ap) {
int returnCount = 0;
- int blockcount = bl_list_count;
+ int blockcount = map->bl_list_count;
va_list apcopy;
bl_getall_area(type, m, x0, y0, x1, y1, NULL);
@@ -1084,7 +993,7 @@ static int bl_vgetall_inmovearea(struct block_list *bl, va_list args)
*/
int map_vforeachinmovearea(int (*func)(struct block_list*, va_list), struct block_list* center, int16 range, int16 dx, int16 dy, int type, va_list ap) {
int returnCount = 0;
- int blockcount = bl_list_count;
+ int blockcount = map->bl_list_count;
int m, x0, x1, y0, y1;
va_list apcopy;
@@ -1165,7 +1074,7 @@ int map_foreachinmovearea(int (*func)(struct block_list*, va_list), struct block
*/
int map_vforeachincell(int (*func)(struct block_list*, va_list), int16 m, int16 x, int16 y, int type, va_list ap) {
int returnCount = 0;
- int blockcount = bl_list_count;
+ int blockcount = map->bl_list_count;
va_list apcopy;
bl_getall_area(type, m, x, y, x, y, NULL);
@@ -1280,7 +1189,7 @@ int map_vforeachinpath(int (*func)(struct block_list*, va_list), int16 m, int16
// kRO
int returnCount = 0;
- int blockcount = bl_list_count;
+ int blockcount = map->bl_list_count;
va_list apcopy;
//method specific variables
@@ -1369,7 +1278,7 @@ int map_get_new_object_id(void)
if( i == MAX_FLOORITEM )
i = MIN_FLOORITEM;
- if( !idb_exists(id_db, i) )
+ if( !idb_exists(map->id_db, i) )
break;
++i;
@@ -1387,11 +1296,11 @@ int map_get_new_object_id(void)
}
/*==========================================
-* Timered function to clear the floor (remove remaining item)
-* Called each flooritem_lifetime ms
-*------------------------------------------*/
+ * Timered function to clear the floor (remove remaining item)
+ * Called each flooritem_lifetime ms
+ *------------------------------------------*/
int map_clearflooritem_timer(int tid, unsigned int tick, int id, intptr_t data) {
- struct flooritem_data* fitem = (struct flooritem_data*)idb_get(id_db, id);
+ struct flooritem_data* fitem = (struct flooritem_data*)idb_get(map->id_db, id);
if (fitem == NULL || fitem->bl.type != BL_ITEM || (fitem->cleartimer != tid)) {
ShowError("map_clearflooritem_timer : error\n");
@@ -1410,8 +1319,8 @@ int map_clearflooritem_timer(int tid, unsigned int tick, int id, intptr_t data)
}
/*
-* clears a single bl item out of the bazooonga.
-*/
+ * clears a single bl item out of the bazooonga.
+ */
void map_clearflooritem(struct block_list *bl) {
struct flooritem_data* fitem = (struct flooritem_data*)bl;
@@ -1425,19 +1334,19 @@ void map_clearflooritem(struct block_list *bl) {
}
/*==========================================
-* (m,x,y) locates a random available free cell around the given coordinates
-* to place an BL_ITEM object. Scan area is 9x9, returns 1 on success.
-* x and y are modified with the target cell when successful.
-*------------------------------------------*/
+ * (m,x,y) locates a random available free cell around the given coordinates
+ * to place an BL_ITEM object. Scan area is 9x9, returns 1 on success.
+ * x and y are modified with the target cell when successful.
+ *------------------------------------------*/
int map_searchrandfreecell(int16 m,int16 *x,int16 *y,int stack) {
int free_cell,i,j;
int free_cells[9][2];
for(free_cell=0,i=-1;i<=1;i++){
- if(i+*y<0 || i+*y>=maplist[m].ys)
+ if(i+*y<0 || i+*y>=map->list[m].ys)
continue;
for(j=-1;j<=1;j++){
- if(j+*x<0 || j+*x>=maplist[m].xs)
+ if(j+*x<0 || j+*x>=map->list[m].xs)
continue;
if(map->getcell(m,j+*x,i+*y,CELL_CHKNOPASS) && !map->getcell(m,j+*x,i+*y,CELL_CHKICEWALL))
continue;
@@ -1457,23 +1366,22 @@ int map_searchrandfreecell(int16 m,int16 *x,int16 *y,int stack) {
}
-static int map_count_sub(struct block_list *bl,va_list ap)
-{
+int map_count_sub(struct block_list *bl,va_list ap) {
return 1;
}
/*==========================================
-* Locates a random spare cell around the object given, using range as max
-* distance from that spot. Used for warping functions. Use range < 0 for
-* whole map range.
-* Returns 1 on success. when it fails and src is available, x/y are set to src's
-* src can be null as long as flag&1
-* when ~flag&1, m is not needed.
-* Flag values:
-* &1 = random cell must be around given m,x,y, not around src
-* &2 = the target should be able to walk to the target tile.
-* &4 = there shouldn't be any players around the target tile (use the no_spawn_on_player setting)
-*------------------------------------------*/
+ * Locates a random spare cell around the object given, using range as max
+ * distance from that spot. Used for warping functions. Use range < 0 for
+ * whole map range.
+ * Returns 1 on success. when it fails and src is available, x/y are set to src's
+ * src can be null as long as flag&1
+ * when ~flag&1, m is not needed.
+ * Flag values:
+ * &1 = random cell must be around given m,x,y, not around src
+ * &2 = the target should be able to walk to the target tile.
+ * &4 = there shouldn't be any players around the target tile (use the no_spawn_on_player setting)
+ *------------------------------------------*/
int map_search_freecell(struct block_list *src, int16 m, int16 *x,int16 *y, int16 rx, int16 ry, int flag)
{
int tries, spawn=0;
@@ -1506,13 +1414,13 @@ int map_search_freecell(struct block_list *src, int16 m, int16 *x,int16 *y, int1
tries = rx2*ry2;
if (tries > 100) tries = 100;
} else {
- tries = maplist[m].xs*maplist[m].ys;
+ tries = map->list[m].xs*map->list[m].ys;
if (tries > 500) tries = 500;
}
while(tries--) {
- *x = (rx >= 0)?(rnd()%rx2-rx+bx):(rnd()%(maplist[m].xs-2)+1);
- *y = (ry >= 0)?(rnd()%ry2-ry+by):(rnd()%(maplist[m].ys-2)+1);
+ *x = (rx >= 0)?(rnd()%rx2-rx+bx):(rnd()%(map->list[m].xs-2)+1);
+ *y = (ry >= 0)?(rnd()%ry2-ry+by):(rnd()%(map->list[m].ys-2)+1);
if (*x == bx && *y == by)
continue; //Avoid picking the same target tile.
@@ -1523,7 +1431,7 @@ int map_search_freecell(struct block_list *src, int16 m, int16 *x,int16 *y, int1
if(flag&4) {
if (spawn >= 100) return 0; //Limit of retries reached.
if (spawn++ < battle_config.no_spawn_on_player
- && map->foreachinarea(map_count_sub, m, *x-AREA_SIZE, *y-AREA_SIZE,
+ && map->foreachinarea(map->count_sub, m, *x-AREA_SIZE, *y-AREA_SIZE,
*x+AREA_SIZE, *y+AREA_SIZE, BL_PC)
)
continue;
@@ -1537,14 +1445,14 @@ int map_search_freecell(struct block_list *src, int16 m, int16 *x,int16 *y, int1
}
/*==========================================
-* Add an item to location (m,x,y)
-* Parameters
-* @item_data item attributes
-* @amount quantity
-* @m, @x, @y mapid,x,y
-* @first_charid, @second_charid, @third_charid, looting priority
-* @flag: &1 MVP item. &2 do stacking check.
-*------------------------------------------*/
+ * Add an item to location (m,x,y)
+ * Parameters
+ * @item_data item attributes
+ * @amount quantity
+ * @m, @x, @y mapid,x,y
+ * @first_charid, @second_charid, @third_charid, looting priority
+ * @flag: &1 MVP item. &2 do stacking check.
+ *------------------------------------------*/
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)
{
int r;
@@ -1552,7 +1460,7 @@ int map_addflooritem(struct item *item_data,int amount,int16 m,int16 x,int16 y,i
nullpo_ret(item_data);
- if(!map_searchrandfreecell(m,&x,&y,flags&2?1:0))
+ if(!map->searchrandfreecell(m,&x,&y,flags&2?1:0))
return 0;
r=rnd();
@@ -1589,9 +1497,9 @@ int map_addflooritem(struct item *item_data,int amount,int16 m,int16 x,int16 y,i
}
/**
-* @see DBCreateData
-*/
-static DBData create_charid2nick(DBKey key, va_list args)
+ * @see DBCreateData
+ */
+DBData create_charid2nick(DBKey key, va_list args)
{
struct charid2nick *p;
CREATE(p, struct charid2nick, 1);
@@ -1609,7 +1517,7 @@ void map_addnickdb(int charid, const char* nick)
if( map->charid2sd(charid) )
return;// already online
- p = idb_ensure(nick_db, charid, create_charid2nick);
+ p = idb_ensure(map->nick_db, charid, map->create_charid2nick);
safestrncpy(p->nick, nick, sizeof(p->nick));
while( p->requests ) {
@@ -1631,7 +1539,7 @@ void map_delnickdb(int charid, const char* name)
struct map_session_data* sd;
DBData data;
- if (!nick_db->remove(nick_db, DB->i2key(charid), &data) || (p = DB->data2ptr(&data)) == NULL)
+ if (!map->nick_db->remove(map->nick_db, DB->i2key(charid), &data) || (p = DB->data2ptr(&data)) == NULL)
return;
while( p->requests ) {
@@ -1662,7 +1570,7 @@ void map_reqnickdb(struct map_session_data * sd, int charid)
return;
}
- p = idb_ensure(nick_db, charid, create_charid2nick);
+ p = idb_ensure(map->nick_db, charid, map->create_charid2nick);
if( *p->nick ) {
clif->solved_charname(sd->fd, charid, p->nick);
return;
@@ -1675,8 +1583,8 @@ void map_reqnickdb(struct map_session_data * sd, int charid)
}
/*==========================================
-* add bl to id_db
-*------------------------------------------*/
+ * add bl to id_db
+ *------------------------------------------*/
void map_addiddb(struct block_list *bl)
{
nullpo_retv(bl);
@@ -1684,27 +1592,27 @@ void map_addiddb(struct block_list *bl)
if( bl->type == BL_PC )
{
TBL_PC* sd = (TBL_PC*)bl;
- idb_put(pc_db,sd->bl.id,sd);
- idb_put(charid_db,sd->status.char_id,sd);
+ idb_put(map->pc_db,sd->bl.id,sd);
+ idb_put(map->charid_db,sd->status.char_id,sd);
}
else if( bl->type == BL_MOB )
{
TBL_MOB* md = (TBL_MOB*)bl;
- idb_put(mobid_db,bl->id,bl);
+ idb_put(map->mobid_db,bl->id,bl);
if( md->state.boss )
- idb_put(bossid_db, bl->id, bl);
+ idb_put(map->bossid_db, bl->id, bl);
}
if( bl->type & BL_REGEN )
- idb_put(regen_db, bl->id, bl);
+ idb_put(map->regen_db, bl->id, bl);
- idb_put(id_db,bl->id,bl);
+ idb_put(map->id_db,bl->id,bl);
}
/*==========================================
-* remove bl from id_db
-*------------------------------------------*/
+ * remove bl from id_db
+ *------------------------------------------*/
void map_deliddb(struct block_list *bl)
{
nullpo_retv(bl);
@@ -1712,24 +1620,24 @@ void map_deliddb(struct block_list *bl)
if( bl->type == BL_PC )
{
TBL_PC* sd = (TBL_PC*)bl;
- idb_remove(pc_db,sd->bl.id);
- idb_remove(charid_db,sd->status.char_id);
+ idb_remove(map->pc_db,sd->bl.id);
+ idb_remove(map->charid_db,sd->status.char_id);
}
else if( bl->type == BL_MOB )
{
- idb_remove(mobid_db,bl->id);
- idb_remove(bossid_db,bl->id);
+ idb_remove(map->mobid_db,bl->id);
+ idb_remove(map->bossid_db,bl->id);
}
if( bl->type & BL_REGEN )
- idb_remove(regen_db,bl->id);
+ idb_remove(map->regen_db,bl->id);
- idb_remove(id_db,bl->id);
+ idb_remove(map->id_db,bl->id);
}
/*==========================================
-* Standard call when a player connection is closed.
-*------------------------------------------*/
+ * Standard call when a player connection is closed.
+ *------------------------------------------*/
int map_quit(struct map_session_data *sd) {
int i;
@@ -1808,19 +1716,19 @@ int map_quit(struct map_session_data *sd) {
unit->remove_map(&sd->ed->bl,CLR_TELEPORT,ALC_MARK);
}
- if( hChSys.local && maplist[sd->bl.m].channel && idb_exists(maplist[sd->bl.m].channel->users, sd->status.char_id) ) {
- clif->chsys_left(maplist[sd->bl.m].channel,sd);
+ if( hChSys.local && map->list[sd->bl.m].channel && idb_exists(map->list[sd->bl.m].channel->users, sd->status.char_id) ) {
+ clif->chsys_left(map->list[sd->bl.m].channel,sd);
}
clif->chsys_quit(sd);
unit->remove_map_pc(sd,CLR_RESPAWN);
- if( maplist[sd->bl.m].instance_id >= 0 ) { // Avoid map conflicts and warnings on next login
+ if( map->list[sd->bl.m].instance_id >= 0 ) { // Avoid map conflicts and warnings on next login
int16 m;
struct point *pt;
- if( maplist[sd->bl.m].save.map )
- pt = &maplist[sd->bl.m].save;
+ if( map->list[sd->bl.m].save.map )
+ pt = &map->list[sd->bl.m].save;
else
pt = &sd->status.save_point;
@@ -1845,16 +1753,16 @@ int map_quit(struct map_session_data *sd) {
}
/*==========================================
-* Lookup, id to session (player,mob,npc,homon,merc..)
-*------------------------------------------*/
+ * Lookup, id to session (player,mob,npc,homon,merc..)
+ *------------------------------------------*/
struct map_session_data *map_id2sd(int id) {
if (id <= 0) return NULL;
- return (struct map_session_data*)idb_get(pc_db,id);
+ return (struct map_session_data*)idb_get(map->pc_db,id);
}
struct mob_data *map_id2md(int id) {
if (id <= 0) return NULL;
- return (struct mob_data*)idb_get(mobid_db,id);
+ return (struct mob_data*)idb_get(map->mobid_db,id);
}
struct npc_data *map_id2nd(int id) {
@@ -1891,7 +1799,7 @@ const char *map_charid2nick(int charid) {
if( sd )
return sd->status.name;// character is online, return it's name
- p = idb_ensure(nick_db, charid, create_charid2nick);
+ p = idb_ensure(map->nick_db, charid, map->create_charid2nick);
if( *p->nick )
return p->nick;// name in nick_db
@@ -1902,14 +1810,14 @@ const char *map_charid2nick(int charid) {
/// Returns the struct map_session_data of the charid or NULL if the char is not online.
struct map_session_data* map_charid2sd(int charid)
{
- return (struct map_session_data*)idb_get(charid_db, charid);
+ return (struct map_session_data*)idb_get(map->charid_db, charid);
}
/*==========================================
-* Search session data from a nick name
-* (without sensitive case if necessary)
-* return map_session_data pointer or NULL
-*------------------------------------------*/
+ * Search session data from a nick name
+ * (without sensitive case if necessary)
+ * return map_session_data pointer or NULL
+ *------------------------------------------*/
struct map_session_data * map_nick2sd(const char *nick)
{
struct map_session_data* sd;
@@ -1957,29 +1865,29 @@ struct map_session_data * map_nick2sd(const char *nick)
}
/*==========================================
-* Looksup id_db DBMap and returns BL pointer of 'id' or NULL if not found
-*------------------------------------------*/
+ * Looksup id_db DBMap and returns BL pointer of 'id' or NULL if not found
+ *------------------------------------------*/
struct block_list * map_id2bl(int id) {
- return (struct block_list*)idb_get(id_db,id);
+ return (struct block_list*)idb_get(map->id_db,id);
}
/**
-* Same as map->id2bl except it only checks for its existence
-**/
+ * Same as map->id2bl except it only checks for its existence
+ **/
bool map_blid_exists( int id ) {
- return (idb_exists(id_db,id));
+ return (idb_exists(map->id_db,id));
}
/*==========================================
-* Convext Mirror
-*------------------------------------------*/
+ * Convext Mirror
+ *------------------------------------------*/
struct mob_data * map_getmob_boss(int16 m)
{
DBIterator* iter;
struct mob_data *md = NULL;
bool found = false;
- iter = db_iterator(bossid_db);
+ iter = db_iterator(map->bossid_db);
for( md = (struct mob_data*)dbi_first(iter); dbi_exists(iter); md = (struct mob_data*)dbi_next(iter) )
{
if( md->bl.m == m )
@@ -1996,16 +1904,16 @@ struct mob_data * map_getmob_boss(int16 m)
struct mob_data * map_id2boss(int id)
{
if (id <= 0) return NULL;
- return (struct mob_data*)idb_get(bossid_db,id);
+ return (struct mob_data*)idb_get(map->bossid_db,id);
}
/// Applies func to all the players in the db.
/// Stops iterating if func returns -1.
-void map_vmap_foreachpc(int (*func)(struct map_session_data* sd, va_list args), va_list args) {
+void map_vforeachpc(int (*func)(struct map_session_data* sd, va_list args), va_list args) {
DBIterator* iter;
struct map_session_data* sd;
- iter = db_iterator(pc_db);
+ iter = db_iterator(map->pc_db);
for( sd = dbi_first(iter); dbi_exists(iter); sd = dbi_next(iter) )
{
va_list argscopy;
@@ -2022,22 +1930,22 @@ void map_vmap_foreachpc(int (*func)(struct map_session_data* sd, va_list args),
/// Applies func to all the players in the db.
/// Stops iterating if func returns -1.
-/// @see map_vmap_foreachpc
-void map_map_foreachpc(int (*func)(struct map_session_data* sd, va_list args), ...) {
+/// @see map_vforeachpc
+void map_foreachpc(int (*func)(struct map_session_data* sd, va_list args), ...) {
va_list args;
va_start(args, func);
- map->vmap_foreachpc(func, args);
+ map->vforeachpc(func, args);
va_end(args);
}
/// Applies func to all the mobs in the db.
/// Stops iterating if func returns -1.
-void map_vmap_foreachmob(int (*func)(struct mob_data* md, va_list args), va_list args) {
+void map_vforeachmob(int (*func)(struct mob_data* md, va_list args), va_list args) {
DBIterator* iter;
struct mob_data* md;
- iter = db_iterator(mobid_db);
+ iter = db_iterator(map->mobid_db);
for( md = (struct mob_data*)dbi_first(iter); dbi_exists(iter); md = (struct mob_data*)dbi_next(iter) ) {
va_list argscopy;
int ret;
@@ -2053,22 +1961,22 @@ void map_vmap_foreachmob(int (*func)(struct mob_data* md, va_list args), va_list
/// Applies func to all the mobs in the db.
/// Stops iterating if func returns -1.
-/// @see map_vmap_foreachmob
-void map_map_foreachmob(int (*func)(struct mob_data* md, va_list args), ...) {
+/// @see map_vforeachmob
+void map_foreachmob(int (*func)(struct mob_data* md, va_list args), ...) {
va_list args;
va_start(args, func);
- map->vmap_foreachmob(func, args);
+ map->vforeachmob(func, args);
va_end(args);
}
/// Applies func to all the npcs in the db.
/// Stops iterating if func returns -1.
-void map_vmap_foreachnpc(int (*func)(struct npc_data* nd, va_list args), va_list args) {
+void map_vforeachnpc(int (*func)(struct npc_data* nd, va_list args), va_list args) {
DBIterator* iter;
struct block_list* bl;
- iter = db_iterator(id_db);
+ iter = db_iterator(map->id_db);
for( bl = (struct block_list*)dbi_first(iter); dbi_exists(iter); bl = (struct block_list*)dbi_next(iter) ) {
if( bl->type == BL_NPC ) {
struct npc_data* nd = (struct npc_data*)bl;
@@ -2087,22 +1995,22 @@ void map_vmap_foreachnpc(int (*func)(struct npc_data* nd, va_list args), va_list
/// Applies func to all the npcs in the db.
/// Stops iterating if func returns -1.
-/// @see map_vmap_foreachnpc
-void map_map_foreachnpc(int (*func)(struct npc_data* nd, va_list args), ...) {
+/// @see map_vforeachnpc
+void map_foreachnpc(int (*func)(struct npc_data* nd, va_list args), ...) {
va_list args;
va_start(args, func);
- map->vmap_foreachnpc(func, args);
+ map->vforeachnpc(func, args);
va_end(args);
}
/// Applies func to everything in the db.
/// Stops iteratin gif func returns -1.
-void map_vmap_foreachregen(int (*func)(struct block_list* bl, va_list args), va_list args) {
+void map_vforeachregen(int (*func)(struct block_list* bl, va_list args), va_list args) {
DBIterator* iter;
struct block_list* bl;
- iter = db_iterator(regen_db);
+ iter = db_iterator(map->regen_db);
for( bl = (struct block_list*)dbi_first(iter); dbi_exists(iter); bl = (struct block_list*)dbi_next(iter) ) {
va_list argscopy;
int ret;
@@ -2118,22 +2026,22 @@ void map_vmap_foreachregen(int (*func)(struct block_list* bl, va_list args), va_
/// Applies func to everything in the db.
/// Stops iteratin gif func returns -1.
-/// @see map_vmap_foreachregen
-void map_map_foreachregen(int (*func)(struct block_list* bl, va_list args), ...) {
+/// @see map_vforeachregen
+void map_foreachregen(int (*func)(struct block_list* bl, va_list args), ...) {
va_list args;
va_start(args, func);
- map->vmap_foreachregen(func, args);
+ map->vforeachregen(func, args);
va_end(args);
}
/// Applies func to everything in the db.
/// Stops iterating if func returns -1.
-void map_vmap_foreachiddb(int (*func)(struct block_list* bl, va_list args), va_list args) {
+void map_vforeachiddb(int (*func)(struct block_list* bl, va_list args), va_list args) {
DBIterator* iter;
struct block_list* bl;
- iter = db_iterator(id_db);
+ iter = db_iterator(map->id_db);
for( bl = (struct block_list*)dbi_first(iter); dbi_exists(iter); bl = (struct block_list*)dbi_next(iter) ) {
va_list argscopy;
int ret;
@@ -2149,12 +2057,12 @@ void map_vmap_foreachiddb(int (*func)(struct block_list* bl, va_list args), va_l
/// Applies func to everything in the db.
/// Stops iterating if func returns -1.
-/// @see map_vmap_foreachiddb
-void map_map_foreachiddb(int (*func)(struct block_list* bl, va_list args), ...) {
+/// @see map_vforeachiddb
+void map_foreachiddb(int (*func)(struct block_list* bl, va_list args), ...) {
va_list args;
va_start(args, func);
- map->vmap_foreachiddb(func, args);
+ map->vforeachiddb(func, args);
va_end(args);
}
@@ -2188,12 +2096,12 @@ struct s_mapiterator
struct s_mapiterator* mapit_alloc(enum e_mapitflags flags, enum bl_type types) {
struct s_mapiterator* iter;
- iter = ers_alloc(map_iterator_ers, struct s_mapiterator);
+ iter = ers_alloc(map->iterator_ers, struct s_mapiterator);
iter->flags = flags;
iter->types = types;
- if( types == BL_PC ) iter->dbi = db_iterator(pc_db);
- else if( types == BL_MOB ) iter->dbi = db_iterator(mobid_db);
- else iter->dbi = db_iterator(id_db);
+ if( types == BL_PC ) iter->dbi = db_iterator(map->pc_db);
+ else if( types == BL_MOB ) iter->dbi = db_iterator(map->mobid_db);
+ else iter->dbi = db_iterator(map->id_db);
return iter;
}
@@ -2204,7 +2112,7 @@ void mapit_free(struct s_mapiterator* iter) {
nullpo_retv(iter);
dbi_destroy(iter->dbi);
- ers_free(map_iterator_ers, iter);
+ ers_free(map->iterator_ers, iter);
}
/// Returns the first block_list that matches the description.
@@ -2294,35 +2202,35 @@ bool mapit_exists(struct s_mapiterator* iter) {
}
/*==========================================
-* Add npc-bl to id_db, basically register npc to map
-*------------------------------------------*/
+ * Add npc-bl to id_db, basically register npc to map
+ *------------------------------------------*/
bool map_addnpc(int16 m,struct npc_data *nd) {
nullpo_ret(nd);
- if( m < 0 || m >= map->map_num )
+ if( m < 0 || m >= map->count )
return false;
- if( maplist[m].npc_num == MAX_NPC_PER_MAP ) {
- ShowWarning("too many NPCs in one map %s\n",maplist[m].name);
+ if( map->list[m].npc_num == MAX_NPC_PER_MAP ) {
+ ShowWarning("too many NPCs in one map %s\n",map->list[m].name);
return false;
}
- maplist[m].npc[maplist[m].npc_num]=nd;
- maplist[m].npc_num++;
- idb_put(id_db,nd->bl.id,nd);
+ map->list[m].npc[map->list[m].npc_num]=nd;
+ map->list[m].npc_num++;
+ idb_put(map->id_db,nd->bl.id,nd);
return true;
}
/*=========================================
-* Dynamic Mobs [Wizputer]
-*-----------------------------------------*/
+ * Dynamic Mobs [Wizputer]
+ *-----------------------------------------*/
// Stores the spawn data entry in the mob list.
// Returns the index of successful, or -1 if the list was full.
int map_addmobtolist(unsigned short m, struct spawn_data *spawn) {
size_t i;
- ARR_FIND( 0, MAX_MOB_LIST_PER_MAP, i, maplist[m].moblist[i] == NULL );
+ ARR_FIND( 0, MAX_MOB_LIST_PER_MAP, i, map->list[m].moblist[i] == NULL );
if( i < MAX_MOB_LIST_PER_MAP ) {
- maplist[m].moblist[i] = spawn;
+ map->list[m].moblist[i] = spawn;
return i;
}
return -1;
@@ -2330,20 +2238,20 @@ int map_addmobtolist(unsigned short m, struct spawn_data *spawn) {
void map_spawnmobs(int16 m) {
int i, k=0;
- if (maplist[m].mob_delete_timer != INVALID_TIMER) {
+ if (map->list[m].mob_delete_timer != INVALID_TIMER) {
//Mobs have not been removed yet [Skotlex]
- timer->delete(maplist[m].mob_delete_timer, map->removemobs_timer);
- maplist[m].mob_delete_timer = INVALID_TIMER;
+ timer->delete(map->list[m].mob_delete_timer, map->removemobs_timer);
+ map->list[m].mob_delete_timer = INVALID_TIMER;
return;
}
for(i=0; i<MAX_MOB_LIST_PER_MAP; i++)
- if(maplist[m].moblist[i]!=NULL) {
- k+=maplist[m].moblist[i]->num;
- npc->parse_mob2(maplist[m].moblist[i]);
+ if(map->list[m].moblist[i]!=NULL) {
+ k+=map->list[m].moblist[i]->num;
+ npc->parse_mob2(map->list[m].moblist[i]);
}
if (battle_config.etc_log && k > 0) {
- ShowStatus("Map %s: Spawned '"CL_WHITE"%d"CL_RESET"' mobs.\n",maplist[m].name, k);
+ ShowStatus("Map %s: Spawned '"CL_WHITE"%d"CL_RESET"' mobs.\n",map->list[m].name, k);
}
}
@@ -2379,36 +2287,36 @@ int map_removemobs_timer(int tid, unsigned int tick, int id, intptr_t data)
int count;
const int16 m = id;
- if (m < 0 || m >= map->map_num) { //Incorrect map id!
+ if (m < 0 || m >= map->count) { //Incorrect map id!
ShowError("map_removemobs_timer error: timer %d points to invalid map %d\n",tid, m);
return 0;
}
- if (maplist[m].mob_delete_timer != tid) { //Incorrect timer call!
- ShowError("map_removemobs_timer mismatch: %d != %d (map %s)\n",maplist[m].mob_delete_timer, tid, maplist[m].name);
+ if (map->list[m].mob_delete_timer != tid) { //Incorrect timer call!
+ ShowError("map_removemobs_timer mismatch: %d != %d (map %s)\n",map->list[m].mob_delete_timer, tid, map->list[m].name);
return 0;
}
- maplist[m].mob_delete_timer = INVALID_TIMER;
- if (maplist[m].users > 0) //Map not empty!
+ map->list[m].mob_delete_timer = INVALID_TIMER;
+ if (map->list[m].users > 0) //Map not empty!
return 1;
- count = map->foreachinmap(map_removemobs_sub, m, BL_MOB);
+ count = map->foreachinmap(map->removemobs_sub, m, BL_MOB);
if (battle_config.etc_log && count > 0)
- ShowStatus("Map %s: Removed '"CL_WHITE"%d"CL_RESET"' mobs.\n",maplist[m].name, count);
+ ShowStatus("Map %s: Removed '"CL_WHITE"%d"CL_RESET"' mobs.\n",map->list[m].name, count);
return 1;
}
void map_removemobs(int16 m) {
- if (maplist[m].mob_delete_timer != INVALID_TIMER) // should never happen
+ if (map->list[m].mob_delete_timer != INVALID_TIMER) // should never happen
return; //Mobs are already scheduled for removal
- maplist[m].mob_delete_timer = timer->add(timer->gettick()+battle_config.mob_remove_delay, map->removemobs_timer, m, 0);
+ map->list[m].mob_delete_timer = timer->add(timer->gettick()+battle_config.mob_remove_delay, map->removemobs_timer, m, 0);
}
/*==========================================
-* Hookup, get map_id from map_name
-*------------------------------------------*/
+ * Hookup, get map_id from map_name
+ *------------------------------------------*/
int16 map_mapname2mapid(const char* name) {
unsigned short map_index;
map_index = mapindex_name2id(name);
@@ -2418,23 +2326,23 @@ int16 map_mapname2mapid(const char* name) {
}
/*==========================================
-* Returns the map of the given mapindex. [Skotlex]
-*------------------------------------------*/
+ * Returns the map of the given mapindex. [Skotlex]
+ *------------------------------------------*/
int16 map_mapindex2mapid(unsigned short mapindex) {
if (!mapindex || mapindex > MAX_MAPINDEX)
return -1;
- return index2mapid[mapindex];
+ return map->index2mapid[mapindex];
}
/*==========================================
-* Switching Ip, port ? (like changing map_server) get ip/port from map_name
-*------------------------------------------*/
+ * Switching Ip, port ? (like changing map_server) get ip/port from map_name
+ *------------------------------------------*/
int map_mapname2ipport(unsigned short name, uint32* ip, uint16* port) {
struct map_data_other_server *mdos;
- mdos = (struct map_data_other_server*)uidb_get(map_db,(unsigned int)name);
+ mdos = (struct map_data_other_server*)uidb_get(map->map_db,(unsigned int)name);
if(mdos==NULL || mdos->cell) //If gat isn't null, this is a local map.
return -1;
*ip=mdos->ip;
@@ -2450,21 +2358,21 @@ int map_check_dir(int s_dir,int t_dir)
if(s_dir == t_dir)
return 0;
switch(s_dir) {
- case 0: if(t_dir == 7 || t_dir == 1 || t_dir == 0) return 0; break;
- case 1: if(t_dir == 0 || t_dir == 2 || t_dir == 1) return 0; break;
- case 2: if(t_dir == 1 || t_dir == 3 || t_dir == 2) return 0; break;
- case 3: if(t_dir == 2 || t_dir == 4 || t_dir == 3) return 0; break;
- case 4: if(t_dir == 3 || t_dir == 5 || t_dir == 4) return 0; break;
- case 5: if(t_dir == 4 || t_dir == 6 || t_dir == 5) return 0; break;
- case 6: if(t_dir == 5 || t_dir == 7 || t_dir == 6) return 0; break;
- case 7: if(t_dir == 6 || t_dir == 0 || t_dir == 7) return 0; break;
+ case 0: if(t_dir == 7 || t_dir == 1 || t_dir == 0) return 0; break;
+ case 1: if(t_dir == 0 || t_dir == 2 || t_dir == 1) return 0; break;
+ case 2: if(t_dir == 1 || t_dir == 3 || t_dir == 2) return 0; break;
+ case 3: if(t_dir == 2 || t_dir == 4 || t_dir == 3) return 0; break;
+ case 4: if(t_dir == 3 || t_dir == 5 || t_dir == 4) return 0; break;
+ case 5: if(t_dir == 4 || t_dir == 6 || t_dir == 5) return 0; break;
+ case 6: if(t_dir == 5 || t_dir == 7 || t_dir == 6) return 0; break;
+ case 7: if(t_dir == 6 || t_dir == 0 || t_dir == 7) return 0; break;
}
return 1;
}
/*==========================================
-* Returns the direction of the given cell, relative to 'src'
-*------------------------------------------*/
+ * Returns the direction of the given cell, relative to 'src'
+ *------------------------------------------*/
uint8 map_calc_dir(struct block_list* src, int16 x, int16 y)
{
uint8 dir = 0;
@@ -2508,9 +2416,9 @@ uint8 map_calc_dir(struct block_list* src, int16 x, int16 y)
}
/*==========================================
-* Randomizes target cell x,y to a random walkable cell that
-* has the same distance from object as given coordinates do. [Skotlex]
-*------------------------------------------*/
+ * Randomizes target cell x,y to a random walkable cell that
+ * has the same distance from object as given coordinates do. [Skotlex]
+ *------------------------------------------*/
int map_random_dir(struct block_list *bl, int16 *x, int16 *y)
{
short xi = *x-bl->x;
@@ -2546,13 +2454,13 @@ inline static struct mapcell map_gat2cell(int gat) {
memset(&cell,0,sizeof(struct mapcell));
switch( gat ) {
- case 0: cell.walkable = 1; cell.shootable = 1; cell.water = 0; break; // walkable ground
- case 1: cell.walkable = 0; cell.shootable = 0; cell.water = 0; break; // non-walkable ground
- case 2: cell.walkable = 1; cell.shootable = 1; cell.water = 0; break; // ???
- case 3: cell.walkable = 1; cell.shootable = 1; cell.water = 1; break; // walkable water
- case 4: cell.walkable = 1; cell.shootable = 1; cell.water = 0; break; // ???
- case 5: cell.walkable = 0; cell.shootable = 1; cell.water = 0; break; // gap (snipable)
- case 6: cell.walkable = 1; cell.shootable = 1; cell.water = 0; break; // ???
+ case 0: cell.walkable = 1; cell.shootable = 1; cell.water = 0; break; // walkable ground
+ case 1: cell.walkable = 0; cell.shootable = 0; cell.water = 0; break; // non-walkable ground
+ case 2: cell.walkable = 1; cell.shootable = 1; cell.water = 0; break; // ???
+ case 3: cell.walkable = 1; cell.shootable = 1; cell.water = 1; break; // walkable water
+ case 4: cell.walkable = 1; cell.shootable = 1; cell.water = 0; break; // ???
+ case 5: cell.walkable = 0; cell.shootable = 1; cell.water = 0; break; // gap (snipable)
+ case 6: cell.walkable = 1; cell.shootable = 1; cell.water = 0; break; // ???
default:
ShowWarning("map_gat2cell: unrecognized gat type '%d'\n", gat);
break;
@@ -2561,7 +2469,7 @@ inline static struct mapcell map_gat2cell(int gat) {
return cell;
}
-static int map_cell2gat(struct mapcell cell) {
+int map_cell2gat(struct mapcell cell) {
if( cell.walkable == 1 && cell.shootable == 1 && cell.water == 0 ) return 0;
if( cell.walkable == 0 && cell.shootable == 0 && cell.water == 0 ) return 1;
if( cell.walkable == 1 && cell.shootable == 1 && cell.water == 1 ) return 3;
@@ -2570,8 +2478,6 @@ static int map_cell2gat(struct mapcell cell) {
ShowWarning("map_cell2gat: cell has no matching gat type\n");
return 1; // default to 'wall'
}
-int map_getcellp(struct map_data* m,int16 x,int16 y,cell_chk cellchk);
-void map_setcell(int16 m, int16 x, int16 y, cell_t cell, bool flag);
void map_cellfromcache(struct map_data *m) {
char decode_buffer[MAX_MAP_SIZE];
struct map_cache_map_info *info = NULL;
@@ -2587,10 +2493,10 @@ void map_cellfromcache(struct map_data *m) {
CREATE(m->cell, struct mapcell, size);
for( xy = 0; xy < size; ++xy )
- m->cell[xy] = map_gat2cell(decode_buffer[xy]);
+ m->cell[xy] = map->gat2cell(decode_buffer[xy]);
- m->getcellp = map_getcellp;
- m->setcell = map_setcell;
+ m->getcellp = map->getcellp;
+ m->setcell = map->setcell;
for(i = 0; i < m->npc_num; i++) {
npc->setcells(m->npc[i]);
@@ -2599,10 +2505,10 @@ void map_cellfromcache(struct map_data *m) {
}
/*==========================================
-* Confirm if celltype in (m,x,y) match the one given in cellchk
-*------------------------------------------*/
+ * Confirm if celltype in (m,x,y) match the one given in cellchk
+ *------------------------------------------*/
int map_getcell(int16 m,int16 x,int16 y,cell_chk cellchk) {
- return (m < 0 || m >= map->map_num) ? 0 : maplist[m].getcellp(&maplist[m],x,y,cellchk);
+ return (m < 0 || m >= map->count) ? 0 : map->list[m].getcellp(&map->list[m],x,y,cellchk);
}
int map_getcellp(struct map_data* m,int16 x,int16 y,cell_chk cellchk) {
@@ -2619,7 +2525,7 @@ int map_getcellp(struct map_data* m,int16 x,int16 y,cell_chk cellchk) {
switch(cellchk) {
// gat type retrieval
case CELL_GETTYPE:
- return map_cell2gat(cell);
+ return map->cell2gat(cell);
// base gat type checks
case CELL_CHKWALL:
@@ -2678,69 +2584,67 @@ int map_getcellp(struct map_data* m,int16 x,int16 y,cell_chk cellchk) {
/* [Ind/Hercules] */
int map_sub_getcellp(struct map_data* m,int16 x,int16 y,cell_chk cellchk) {
map->cellfromcache(m);
- m->getcellp = map_getcellp;
- m->setcell = map_setcell;
+ m->getcellp = map->getcellp;
+ m->setcell = map->setcell;
return m->getcellp(m,x,y,cellchk);
}
/*==========================================
-* Change the type/flags of a map cell
-* 'cell' - which flag to modify
-* 'flag' - true = on, false = off
-*------------------------------------------*/
+ * Change the type/flags of a map cell
+ * 'cell' - which flag to modify
+ * 'flag' - true = on, false = off
+ *------------------------------------------*/
void map_setcell(int16 m, int16 x, int16 y, cell_t cell, bool flag) {
int j;
- if( m < 0 || m >= map->map_num || x < 0 || x >= maplist[m].xs || y < 0 || y >= maplist[m].ys )
+ if( m < 0 || m >= map->count || x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys )
return;
- j = x + y*maplist[m].xs;
+ j = x + y*map->list[m].xs;
switch( cell ) {
- case CELL_WALKABLE: maplist[m].cell[j].walkable = flag; break;
- case CELL_SHOOTABLE: maplist[m].cell[j].shootable = flag; break;
- case CELL_WATER: maplist[m].cell[j].water = flag; break;
-
- case CELL_NPC: maplist[m].cell[j].npc = flag; break;
- case CELL_BASILICA: maplist[m].cell[j].basilica = flag; break;
- case CELL_LANDPROTECTOR: maplist[m].cell[j].landprotector = flag; break;
- case CELL_NOVENDING: maplist[m].cell[j].novending = flag; break;
- case CELL_NOCHAT: maplist[m].cell[j].nochat = flag; break;
- case CELL_MAELSTROM: maplist[m].cell[j].maelstrom = flag; break;
- case CELL_ICEWALL: maplist[m].cell[j].icewall = flag; break;
+ case CELL_WALKABLE: map->list[m].cell[j].walkable = flag; break;
+ case CELL_SHOOTABLE: map->list[m].cell[j].shootable = flag; break;
+ case CELL_WATER: map->list[m].cell[j].water = flag; break;
+
+ case CELL_NPC: map->list[m].cell[j].npc = flag; break;
+ case CELL_BASILICA: map->list[m].cell[j].basilica = flag; break;
+ case CELL_LANDPROTECTOR: map->list[m].cell[j].landprotector = flag; break;
+ case CELL_NOVENDING: map->list[m].cell[j].novending = flag; break;
+ case CELL_NOCHAT: map->list[m].cell[j].nochat = flag; break;
+ case CELL_MAELSTROM: map->list[m].cell[j].maelstrom = flag; break;
+ case CELL_ICEWALL: map->list[m].cell[j].icewall = flag; break;
default:
ShowWarning("map_setcell: invalid cell type '%d'\n", (int)cell);
break;
}
}
void map_sub_setcell(int16 m, int16 x, int16 y, cell_t cell, bool flag) {
- if( m < 0 || m >= map->map_num || x < 0 || x >= maplist[m].xs || y < 0 || y >= maplist[m].ys )
+ if( m < 0 || m >= map->count || x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys )
return;
- map->cellfromcache(&maplist[m]);
- maplist[m].setcell = map_setcell;
- maplist[m].getcellp = map_getcellp;
- maplist[m].setcell(m,x,y,cell,flag);
+ map->cellfromcache(&map->list[m]);
+ map->list[m].setcell = map->setcell;
+ map->list[m].getcellp = map->getcellp;
+ map->list[m].setcell(m,x,y,cell,flag);
}
void map_setgatcell(int16 m, int16 x, int16 y, int gat) {
int j;
struct mapcell cell;
- if( m < 0 || m >= map->map_num || x < 0 || x >= maplist[m].xs || y < 0 || y >= maplist[m].ys )
+ if( m < 0 || m >= map->count || x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys )
return;
- j = x + y*maplist[m].xs;
+ j = x + y*map->list[m].xs;
- cell = map_gat2cell(gat);
- maplist[m].cell[j].walkable = cell.walkable;
- maplist[m].cell[j].shootable = cell.shootable;
- maplist[m].cell[j].water = cell.water;
+ cell = map->gat2cell(gat);
+ map->list[m].cell[j].walkable = cell.walkable;
+ map->list[m].cell[j].shootable = cell.shootable;
+ map->list[m].cell[j].water = cell.water;
}
/*==========================================
* Invisible Walls
*------------------------------------------*/
-static DBMap* iwall_db;
-
void map_iwall_nextxy(int16 x, int16 y, int8 dir, int pos, int16 *x1, int16 *y1)
{
if( dir == 0 || dir == 4 )
@@ -2767,7 +2671,7 @@ bool map_iwall_set(int16 m, int16 x, int16 y, int size, int8 dir, bool shootable
if( size < 1 || !wall_name )
return false;
- if( (iwall = (struct iwall_data *)strdb_get(iwall_db, wall_name)) != NULL )
+ if( (iwall = (struct iwall_data *)strdb_get(map->iwall_db, wall_name)) != NULL )
return false; // Already Exists
if( map->getcell(m, x, y, CELL_CHKNOREACH) )
@@ -2783,21 +2687,21 @@ bool map_iwall_set(int16 m, int16 x, int16 y, int size, int8 dir, bool shootable
safestrncpy(iwall->wall_name, wall_name, sizeof(iwall->wall_name));
for( i = 0; i < size; i++ ) {
- map_iwall_nextxy(x, y, dir, i, &x1, &y1);
+ map->iwall_nextxy(x, y, dir, i, &x1, &y1);
if( map->getcell(m, x1, y1, CELL_CHKNOREACH) )
break; // Collision
- maplist[m].setcell(m, x1, y1, CELL_WALKABLE, false);
- maplist[m].setcell(m, x1, y1, CELL_SHOOTABLE, shootable);
+ map->list[m].setcell(m, x1, y1, CELL_WALKABLE, false);
+ map->list[m].setcell(m, x1, y1, CELL_SHOOTABLE, shootable);
clif->changemapcell(0, m, x1, y1, map->getcell(m, x1, y1, CELL_GETTYPE), ALL_SAMEMAP);
}
iwall->size = i;
- strdb_put(iwall_db, iwall->wall_name, iwall);
- maplist[m].iwall_num++;
+ strdb_put(map->iwall_db, iwall->wall_name, iwall);
+ map->list[m].iwall_num++;
return true;
}
@@ -2808,16 +2712,16 @@ void map_iwall_get(struct map_session_data *sd) {
int16 x1, y1;
int i;
- if( maplist[sd->bl.m].iwall_num < 1 )
+ if( map->list[sd->bl.m].iwall_num < 1 )
return;
- iter = db_iterator(iwall_db);
+ iter = db_iterator(map->iwall_db);
for( iwall = dbi_first(iter); dbi_exists(iter); iwall = dbi_next(iter) ) {
if( iwall->m != sd->bl.m )
continue;
for( i = 0; i < iwall->size; i++ ) {
- map_iwall_nextxy(iwall->x, iwall->y, iwall->dir, i, &x1, &y1);
+ map->iwall_nextxy(iwall->x, iwall->y, iwall->dir, i, &x1, &y1);
clif->changemapcell(sd->fd, iwall->m, x1, y1, map->getcell(iwall->m, x1, y1, CELL_GETTYPE), SELF);
}
}
@@ -2829,26 +2733,26 @@ void map_iwall_remove(const char *wall_name)
struct iwall_data *iwall;
int16 i, x1, y1;
- if( (iwall = (struct iwall_data *)strdb_get(iwall_db, wall_name)) == NULL )
+ if( (iwall = (struct iwall_data *)strdb_get(map->iwall_db, wall_name)) == NULL )
return; // Nothing to do
for( i = 0; i < iwall->size; i++ ) {
- map_iwall_nextxy(iwall->x, iwall->y, iwall->dir, i, &x1, &y1);
+ map->iwall_nextxy(iwall->x, iwall->y, iwall->dir, i, &x1, &y1);
- maplist[iwall->m].setcell(iwall->m, x1, y1, CELL_SHOOTABLE, true);
- maplist[iwall->m].setcell(iwall->m, x1, y1, CELL_WALKABLE, true);
+ map->list[iwall->m].setcell(iwall->m, x1, y1, CELL_SHOOTABLE, true);
+ map->list[iwall->m].setcell(iwall->m, x1, y1, CELL_WALKABLE, true);
clif->changemapcell(0, iwall->m, x1, y1, map->getcell(iwall->m, x1, y1, CELL_GETTYPE), ALL_SAMEMAP);
}
- maplist[iwall->m].iwall_num--;
- strdb_remove(iwall_db, iwall->wall_name);
+ map->list[iwall->m].iwall_num--;
+ strdb_remove(map->iwall_db, iwall->wall_name);
}
/**
-* @see DBCreateData
-*/
-static DBData create_map_data_other_server(DBKey key, va_list args)
+ * @see DBCreateData
+ */
+DBData create_map_data_other_server(DBKey key, va_list args)
{
struct map_data_other_server *mdos;
unsigned short mapindex = (unsigned short)key.ui;
@@ -2859,13 +2763,13 @@ static DBData create_map_data_other_server(DBKey key, va_list args)
}
/*==========================================
-* Add mapindex to db of another map server
-*------------------------------------------*/
+ * Add mapindex to db of another map server
+ *------------------------------------------*/
int map_setipport(unsigned short mapindex, uint32 ip, uint16 port)
{
struct map_data_other_server *mdos;
- mdos= uidb_ensure(map_db,(unsigned int)mapindex, create_map_data_other_server);
+ mdos= uidb_ensure(map->map_db,(unsigned int)mapindex, map->create_map_data_other_server);
if(mdos->cell) //Local map,Do nothing. Give priority to our own local maps over ones from another server. [Skotlex]
return 0;
@@ -2880,36 +2784,36 @@ int map_setipport(unsigned short mapindex, uint32 ip, uint16 port)
}
/**
-* Delete all the other maps server management
-* @see DBApply
-*/
+ * Delete all the other maps server management
+ * @see DBApply
+ */
int map_eraseallipport_sub(DBKey key, DBData *data, va_list va)
{
struct map_data_other_server *mdos = DB->data2ptr(data);
if(mdos->cell == NULL) {
- db_remove(map_db,key);
+ db_remove(map->map_db,key);
aFree(mdos);
}
return 0;
}
int map_eraseallipport(void) {
- map_db->foreach(map_db,map_eraseallipport_sub);
+ map->map_db->foreach(map->map_db,map->eraseallipport_sub);
return 1;
}
/*==========================================
-* Delete mapindex from db of another map server
-*------------------------------------------*/
+ * Delete mapindex from db of another map server
+ *------------------------------------------*/
int map_eraseipport(unsigned short mapindex, uint32 ip, uint16 port) {
struct map_data_other_server *mdos;
- mdos = (struct map_data_other_server*)uidb_get(map_db,(unsigned int)mapindex);
+ mdos = (struct map_data_other_server*)uidb_get(map->map_db,(unsigned int)mapindex);
if(!mdos || mdos->cell) //Map either does not exists or is a local map.
return 0;
if(mdos->ip==ip && mdos->port == port) {
- uidb_remove(map_db,(unsigned int)mapindex);
+ uidb_remove(map->map_db,(unsigned int)mapindex);
aFree(mdos);
return 1;
}
@@ -2917,10 +2821,9 @@ int map_eraseipport(unsigned short mapindex, uint32 ip, uint16 port) {
}
/*==========================================
-* [Shinryo]: Init the mapcache
-*------------------------------------------*/
-static char *map_init_mapcache(FILE *fp)
-{
+ * [Shinryo]: Init the mapcache
+ *------------------------------------------*/
+char *map_init_mapcache(FILE *fp) {
size_t size = 0;
char *buffer;
@@ -2948,9 +2851,9 @@ static char *map_init_mapcache(FILE *fp)
}
/*==========================================
-* Map cache reading
-* [Shinryo]: Optimized some behaviour to speed this up
-*==========================================*/
+ * Map cache reading
+ * [Shinryo]: Optimized some behaviour to speed this up
+ *==========================================*/
int map_readfromcache(struct map_data *m, char *buffer) {
int i;
struct map_cache_main_header *header = (struct map_cache_main_header *)buffer;
@@ -2993,15 +2896,15 @@ int map_readfromcache(struct map_data *m, char *buffer) {
int map_addmap(char* mapname) {
- maplist[map->map_num].instance_id = -1;
- mapindex_getmapname(mapname, maplist[map->map_num++].name);
+ map->list[map->count].instance_id = -1;
+ mapindex_getmapname(mapname, map->list[map->count++].name);
return 0;
}
-static void map_delmapid(int id) {
- ShowNotice("Removing map [ %s ] from maplist"CL_CLL"\n",maplist[id].name);
- memmove(maplist+id, maplist+id+1, sizeof(maplist[0])*(map->map_num-id-1));
- map->map_num--;
+void map_delmapid(int id) {
+ ShowNotice("Removing map [ %s ] from map->list"CL_CLL"\n",map->list[id].name);
+ memmove(map->list+id, map->list+id+1, sizeof(map->list[0])*(map->count-id-1));
+ map->count--;
}
int map_delmap(char* mapname) {
@@ -3009,14 +2912,14 @@ int map_delmap(char* mapname) {
char map_name[MAP_NAME_LENGTH];
if (strcmpi(mapname, "all") == 0) {
- map->map_num = 0;
+ map->count = 0;
return 0;
}
mapindex_getmapname(mapname, map_name);
- for(i = 0; i < map->map_num; i++) {
- if (strcmp(maplist[i].name, map_name) == 0) {
- map_delmapid(i);
+ for(i = 0; i < map->count; i++) {
+ if (strcmp(map->list[i].name, map_name) == 0) {
+ map->delmapid(i);
return 1;
}
}
@@ -3026,7 +2929,7 @@ void map_zone_db_clear(void) {
struct map_zone_data *zone;
int i;
- DBIterator *iter = db_iterator(zone_db);
+ DBIterator *iter = db_iterator(map->zone_db);
for(zone = dbi_first(iter); dbi_exists(iter); zone = dbi_next(iter)) {
for(i = 0; i < zone->disabled_skills_count; i++) {
aFree(zone->disabled_skills[i]);
@@ -3048,229 +2951,229 @@ void map_zone_db_clear(void) {
}
dbi_destroy(iter);
- db_destroy(zone_db);/* will aFree(zone) */
+ db_destroy(map->zone_db);/* will aFree(zone) */
/* clear the pk zone stuff */
- for(i = 0; i < map_zone_pk.disabled_skills_count; i++) {
- aFree(map_zone_pk.disabled_skills[i]);
+ for(i = 0; i < map->zone_pk.disabled_skills_count; i++) {
+ aFree(map->zone_pk.disabled_skills[i]);
}
- aFree(map_zone_pk.disabled_skills);
- aFree(map_zone_pk.disabled_items);
- for(i = 0; i < map_zone_pk.mapflags_count; i++) {
- aFree(map_zone_pk.mapflags[i]);
+ aFree(map->zone_pk.disabled_skills);
+ aFree(map->zone_pk.disabled_items);
+ for(i = 0; i < map->zone_pk.mapflags_count; i++) {
+ aFree(map->zone_pk.mapflags[i]);
}
- aFree(map_zone_pk.mapflags);
- for(i = 0; i < map_zone_pk.disabled_commands_count; i++) {
- aFree(map_zone_pk.disabled_commands[i]);
+ aFree(map->zone_pk.mapflags);
+ for(i = 0; i < map->zone_pk.disabled_commands_count; i++) {
+ aFree(map->zone_pk.disabled_commands[i]);
}
- aFree(map_zone_pk.disabled_commands);
- for(i = 0; i < map_zone_pk.capped_skills_count; i++) {
- aFree(map_zone_pk.capped_skills[i]);
+ aFree(map->zone_pk.disabled_commands);
+ for(i = 0; i < map->zone_pk.capped_skills_count; i++) {
+ aFree(map->zone_pk.capped_skills[i]);
}
- aFree(map_zone_pk.capped_skills);
+ aFree(map->zone_pk.capped_skills);
/* clear the main zone stuff */
- for(i = 0; i < map_zone_all.disabled_skills_count; i++) {
- aFree(map_zone_all.disabled_skills[i]);
+ for(i = 0; i < map->zone_all.disabled_skills_count; i++) {
+ aFree(map->zone_all.disabled_skills[i]);
}
- aFree(map_zone_all.disabled_skills);
- aFree(map_zone_all.disabled_items);
- for(i = 0; i < map_zone_all.mapflags_count; i++) {
- aFree(map_zone_all.mapflags[i]);
+ aFree(map->zone_all.disabled_skills);
+ aFree(map->zone_all.disabled_items);
+ for(i = 0; i < map->zone_all.mapflags_count; i++) {
+ aFree(map->zone_all.mapflags[i]);
}
- aFree(map_zone_all.mapflags);
- for(i = 0; i < map_zone_all.disabled_commands_count; i++) {
- aFree(map_zone_all.disabled_commands[i]);
+ aFree(map->zone_all.mapflags);
+ for(i = 0; i < map->zone_all.disabled_commands_count; i++) {
+ aFree(map->zone_all.disabled_commands[i]);
}
- aFree(map_zone_all.disabled_commands);
- for(i = 0; i < map_zone_all.capped_skills_count; i++) {
- aFree(map_zone_all.capped_skills[i]);
+ aFree(map->zone_all.disabled_commands);
+ for(i = 0; i < map->zone_all.capped_skills_count; i++) {
+ aFree(map->zone_all.capped_skills[i]);
}
- aFree(map_zone_all.capped_skills);
+ aFree(map->zone_all.capped_skills);
}
void map_clean(int i) {
int v;
- if(maplist[i].cell && maplist[i].cell != (struct mapcell *)0xdeadbeaf) aFree(maplist[i].cell);
- if(maplist[i].block) aFree(maplist[i].block);
- if(maplist[i].block_mob) aFree(maplist[i].block_mob);
+ if(map->list[i].cell && map->list[i].cell != (struct mapcell *)0xdeadbeaf) aFree(map->list[i].cell);
+ if(map->list[i].block) aFree(map->list[i].block);
+ if(map->list[i].block_mob) aFree(map->list[i].block_mob);
if(battle_config.dynamic_mobs) { //Dynamic mobs flag by [random]
int j;
- if(maplist[i].mob_delete_timer != INVALID_TIMER)
- timer->delete(maplist[i].mob_delete_timer, map->removemobs_timer);
+ if(map->list[i].mob_delete_timer != INVALID_TIMER)
+ timer->delete(map->list[i].mob_delete_timer, map->removemobs_timer);
for (j=0; j<MAX_MOB_LIST_PER_MAP; j++)
- if (maplist[i].moblist[j]) aFree(maplist[i].moblist[j]);
+ if (map->list[i].moblist[j]) aFree(map->list[i].moblist[j]);
}
- if( maplist[i].unit_count ) {
- for(v = 0; v < maplist[i].unit_count; v++) {
- aFree(maplist[i].units[v]);
+ if( map->list[i].unit_count ) {
+ for(v = 0; v < map->list[i].unit_count; v++) {
+ aFree(map->list[i].units[v]);
}
- if( maplist[i].units ) {
- aFree(maplist[i].units);
- maplist[i].units = NULL;
+ if( map->list[i].units ) {
+ aFree(map->list[i].units);
+ map->list[i].units = NULL;
}
- maplist[i].unit_count = 0;
+ map->list[i].unit_count = 0;
}
- if( maplist[i].skill_count ) {
- for(v = 0; v < maplist[i].skill_count; v++) {
- aFree(maplist[i].skills[v]);
+ if( map->list[i].skill_count ) {
+ for(v = 0; v < map->list[i].skill_count; v++) {
+ aFree(map->list[i].skills[v]);
}
- if( maplist[i].skills ) {
- aFree(maplist[i].skills);
- maplist[i].skills = NULL;
+ if( map->list[i].skills ) {
+ aFree(map->list[i].skills);
+ map->list[i].skills = NULL;
}
- maplist[i].skill_count = 0;
+ map->list[i].skill_count = 0;
}
- if( maplist[i].zone_mf_count ) {
- for(v = 0; v < maplist[i].zone_mf_count; v++) {
- aFree(maplist[i].zone_mf[v]);
+ if( map->list[i].zone_mf_count ) {
+ for(v = 0; v < map->list[i].zone_mf_count; v++) {
+ aFree(map->list[i].zone_mf[v]);
}
- if( maplist[i].zone_mf ) {
- aFree(maplist[i].zone_mf);
- maplist[i].zone_mf = NULL;
+ if( map->list[i].zone_mf ) {
+ aFree(map->list[i].zone_mf);
+ map->list[i].zone_mf = NULL;
}
- maplist[i].zone_mf_count = 0;
+ map->list[i].zone_mf_count = 0;
}
- if( maplist[i].channel )
- clif->chsys_delete(maplist[i].channel);
+ if( map->list[i].channel )
+ clif->chsys_delete(map->list[i].channel);
}
void do_final_maps(void) {
int i, v = 0;
- for( i = 0; i < map->map_num; i++ ) {
+ for( i = 0; i < map->count; i++ ) {
- if(maplist[i].cell && maplist[i].cell != (struct mapcell *)0xdeadbeaf ) aFree(maplist[i].cell);
- if(maplist[i].block) aFree(maplist[i].block);
- if(maplist[i].block_mob) aFree(maplist[i].block_mob);
+ if(map->list[i].cell && map->list[i].cell != (struct mapcell *)0xdeadbeaf ) aFree(map->list[i].cell);
+ if(map->list[i].block) aFree(map->list[i].block);
+ if(map->list[i].block_mob) aFree(map->list[i].block_mob);
if(battle_config.dynamic_mobs) { //Dynamic mobs flag by [random]
int j;
- if(maplist[i].mob_delete_timer != INVALID_TIMER)
- timer->delete(maplist[i].mob_delete_timer, map->removemobs_timer);
+ if(map->list[i].mob_delete_timer != INVALID_TIMER)
+ timer->delete(map->list[i].mob_delete_timer, map->removemobs_timer);
for (j=0; j<MAX_MOB_LIST_PER_MAP; j++)
- if (maplist[i].moblist[j]) aFree(maplist[i].moblist[j]);
+ if (map->list[i].moblist[j]) aFree(map->list[i].moblist[j]);
}
- if( maplist[i].unit_count ) {
- for(v = 0; v < maplist[i].unit_count; v++) {
- aFree(maplist[i].units[v]);
+ if( map->list[i].unit_count ) {
+ for(v = 0; v < map->list[i].unit_count; v++) {
+ aFree(map->list[i].units[v]);
}
- if( maplist[i].units ) {
- aFree(maplist[i].units);
- maplist[i].units = NULL;
+ if( map->list[i].units ) {
+ aFree(map->list[i].units);
+ map->list[i].units = NULL;
}
- maplist[i].unit_count = 0;
+ map->list[i].unit_count = 0;
}
- if( maplist[i].skill_count ) {
- for(v = 0; v < maplist[i].skill_count; v++) {
- aFree(maplist[i].skills[v]);
+ if( map->list[i].skill_count ) {
+ for(v = 0; v < map->list[i].skill_count; v++) {
+ aFree(map->list[i].skills[v]);
}
- if( maplist[i].skills ) {
- aFree(maplist[i].skills);
- maplist[i].skills = NULL;
+ if( map->list[i].skills ) {
+ aFree(map->list[i].skills);
+ map->list[i].skills = NULL;
}
- maplist[i].skill_count = 0;
+ map->list[i].skill_count = 0;
}
- if( maplist[i].zone_mf_count ) {
- for(v = 0; v < maplist[i].zone_mf_count; v++) {
- aFree(maplist[i].zone_mf[v]);
+ if( map->list[i].zone_mf_count ) {
+ for(v = 0; v < map->list[i].zone_mf_count; v++) {
+ aFree(map->list[i].zone_mf[v]);
}
- if( maplist[i].zone_mf ) {
- aFree(maplist[i].zone_mf);
- maplist[i].zone_mf = NULL;
+ if( map->list[i].zone_mf ) {
+ aFree(map->list[i].zone_mf);
+ map->list[i].zone_mf = NULL;
}
- maplist[i].zone_mf_count = 0;
+ map->list[i].zone_mf_count = 0;
}
- if( maplist[i].drop_list_count ) {
- maplist[i].drop_list_count = 0;
+ if( map->list[i].drop_list_count ) {
+ map->list[i].drop_list_count = 0;
}
- if( maplist[i].drop_list != NULL )
- aFree(maplist[i].drop_list);
+ if( map->list[i].drop_list != NULL )
+ aFree(map->list[i].drop_list);
- if( maplist[i].channel )
- clif->chsys_delete(maplist[i].channel);
+ if( map->list[i].channel )
+ clif->chsys_delete(map->list[i].channel);
}
- map_zone_db_clear();
+ map->zone_db_clear();
}
/// Initializes map flags and adjusts them depending on configuration.
void map_flags_init(void) {
int i, v = 0;
- for( i = 0; i < map->map_num; i++ ) {
+ for( i = 0; i < map->count; i++ ) {
// mapflags
- memset(&maplist[i].flag, 0, sizeof(maplist[i].flag));
+ memset(&map->list[i].flag, 0, sizeof(map->list[i].flag));
// additional mapflag data
- maplist[i].nocommand = 0; // nocommand mapflag level
- maplist[i].bexp = 100; // per map base exp multiplicator
- maplist[i].jexp = 100; // per map job exp multiplicator
- if( maplist[i].drop_list != NULL )
- aFree(maplist[i].drop_list);
- maplist[i].drop_list = NULL;
- maplist[i].drop_list_count = 0;
-
- if( maplist[i].unit_count ) {
- for(v = 0; v < maplist[i].unit_count; v++) {
- aFree(maplist[i].units[v]);
+ map->list[i].nocommand = 0; // nocommand mapflag level
+ map->list[i].bexp = 100; // per map base exp multiplicator
+ map->list[i].jexp = 100; // per map job exp multiplicator
+ if( map->list[i].drop_list != NULL )
+ aFree(map->list[i].drop_list);
+ map->list[i].drop_list = NULL;
+ map->list[i].drop_list_count = 0;
+
+ if( map->list[i].unit_count ) {
+ for(v = 0; v < map->list[i].unit_count; v++) {
+ aFree(map->list[i].units[v]);
}
- aFree(maplist[i].units);
+ aFree(map->list[i].units);
}
- maplist[i].units = NULL;
- maplist[i].unit_count = 0;
+ map->list[i].units = NULL;
+ map->list[i].unit_count = 0;
- if( maplist[i].skill_count ) {
- for(v = 0; v < maplist[i].skill_count; v++) {
- aFree(maplist[i].skills[v]);
+ if( map->list[i].skill_count ) {
+ for(v = 0; v < map->list[i].skill_count; v++) {
+ aFree(map->list[i].skills[v]);
}
- aFree(maplist[i].skills);
+ aFree(map->list[i].skills);
}
- maplist[i].skills = NULL;
- maplist[i].skill_count = 0;
+ map->list[i].skills = NULL;
+ map->list[i].skill_count = 0;
// adjustments
if( battle_config.pk_mode ) {
- maplist[i].flag.pvp = 1; // make all maps pvp for pk_mode [Valaris]
- maplist[i].zone = &map_zone_pk;
+ map->list[i].flag.pvp = 1; // make all maps pvp for pk_mode [Valaris]
+ map->list[i].zone = &map->zone_pk;
} else /* align with 'All' zone */
- maplist[i].zone = &map_zone_all;
+ map->list[i].zone = &map->zone_all;
- if( maplist[i].zone_mf_count ) {
- for(v = 0; v < maplist[i].zone_mf_count; v++) {
- aFree(maplist[i].zone_mf[v]);
+ if( map->list[i].zone_mf_count ) {
+ for(v = 0; v < map->list[i].zone_mf_count; v++) {
+ aFree(map->list[i].zone_mf[v]);
}
- aFree(maplist[i].zone_mf);
+ aFree(map->list[i].zone_mf);
}
- maplist[i].zone_mf = NULL;
- maplist[i].zone_mf_count = 0;
- maplist[i].prev_zone = maplist[i].zone;
+ map->list[i].zone_mf = NULL;
+ map->list[i].zone_mf_count = 0;
+ map->list[i].prev_zone = map->list[i].zone;
- maplist[i].invincible_time_inc = 0;
+ map->list[i].invincible_time_inc = 0;
- maplist[i].weapon_damage_rate = 100;
- maplist[i].magic_damage_rate = 100;
- maplist[i].misc_damage_rate = 100;
- maplist[i].short_damage_rate = 100;
- maplist[i].long_damage_rate = 100;
+ map->list[i].weapon_damage_rate = 100;
+ map->list[i].magic_damage_rate = 100;
+ map->list[i].misc_damage_rate = 100;
+ map->list[i].short_damage_rate = 100;
+ map->list[i].long_damage_rate = 100;
}
}
#define NO_WATER 1000000
/*
-* Reads from the .rsw for each map
-* Returns water height (or NO_WATER if file doesn't exist) or other error is encountered.
-* Assumed path for file is data/mapname.rsw
-* Credits to LittleWolf
-*/
+ * Reads from the .rsw for each map
+ * Returns water height (or NO_WATER if file doesn't exist) or other error is encountered.
+ * Assumed path for file is data/mapname.rsw
+ * Credits to LittleWolf
+ */
int map_waterheight(char* mapname)
{
char fn[256];
@@ -3295,8 +3198,8 @@ int map_waterheight(char* mapname)
}
/*==================================
-* .GAT format
-*----------------------------------*/
+ * .GAT format
+ *----------------------------------*/
int map_readgat (struct map_data* m)
{
char filename[256];
@@ -3315,7 +3218,7 @@ int map_readgat (struct map_data* m)
num_cells = m->xs * m->ys;
CREATE(m->cell, struct mapcell, num_cells);
- water_height = map_waterheight(m->name);
+ water_height = map->waterheight(m->name);
// Set cell properties
off = 14;
@@ -3329,7 +3232,7 @@ int map_readgat (struct map_data* m)
if( type == 0 && water_height != NO_WATER && height > water_height )
type = 3; // Cell is 0 (walkable) but under water level, set to 3 (walkable water)
- m->cell[xy] = map_gat2cell(type);
+ m->cell[xy] = map->gat2cell(type);
}
aFree(gat);
@@ -3338,25 +3241,25 @@ int map_readgat (struct map_data* m)
}
/*======================================
-* Add/Remove map to the map_db
-*--------------------------------------*/
+ * Add/Remove map to the map_db
+ *--------------------------------------*/
void map_addmap2db(struct map_data *m) {
- index2mapid[m->index] = m->m;
+ map->index2mapid[m->index] = m->m;
}
void map_removemapdb(struct map_data *m) {
- index2mapid[m->index] = -1;
+ map->index2mapid[m->index] = -1;
}
/*======================================
-* Initiate maps loading stage
-*--------------------------------------*/
+ * Initiate maps loading stage
+ *--------------------------------------*/
int map_readallmaps (void) {
int i;
FILE* fp=NULL;
int maps_removed = 0;
- if( enable_grf )
+ if( map->enable_grf )
ShowStatus("Loading maps (using GRF files)...\n");
else {
char mapcachefilepath[254];
@@ -3368,73 +3271,73 @@ int map_readallmaps (void) {
}
// Init mapcache data.. [Shinryo]
- map_cache_buffer = map_init_mapcache(fp);
- if(!map_cache_buffer) {
+ map->cache_buffer = map->init_mapcache(fp);
+ if(!map->cache_buffer) {
ShowFatalError("Failed to initialize mapcache data (%s)..\n", mapcachefilepath);
exit(EXIT_FAILURE);
}
}
- for(i = 0; i < map->map_num; i++) {
+ for(i = 0; i < map->count; i++) {
size_t size;
// show progress
- if(enable_grf)
- ShowStatus("Loading maps [%i/%i]: %s"CL_CLL"\r", i, map->map_num, maplist[i].name);
+ if(map->enable_grf)
+ ShowStatus("Loading maps [%i/%i]: %s"CL_CLL"\r", i, map->count, map->list[i].name);
// try to load the map
if( !
- (enable_grf?
- map_readgat(&maplist[i])
- :map_readfromcache(&maplist[i], map_cache_buffer))
+ (map->enable_grf?
+ map->readgat(&map->list[i])
+ :map->readfromcache(&map->list[i], map->cache_buffer))
) {
- map_delmapid(i);
+ map->delmapid(i);
maps_removed++;
i--;
continue;
}
- maplist[i].index = mapindex_name2id(maplist[i].name);
+ map->list[i].index = mapindex_name2id(map->list[i].name);
- if ( index2mapid[map_id2index(i)] != -1 ) {
- ShowWarning("Map %s already loaded!"CL_CLL"\n", maplist[i].name);
- if (maplist[i].cell && maplist[i].cell != (struct mapcell *)0xdeadbeaf) {
- aFree(maplist[i].cell);
- maplist[i].cell = NULL;
+ if ( map->index2mapid[map_id2index(i)] != -1 ) {
+ ShowWarning("Map %s already loaded!"CL_CLL"\n", map->list[i].name);
+ if (map->list[i].cell && map->list[i].cell != (struct mapcell *)0xdeadbeaf) {
+ aFree(map->list[i].cell);
+ map->list[i].cell = NULL;
}
- map_delmapid(i);
+ map->delmapid(i);
maps_removed++;
i--;
continue;
}
- maplist[i].m = i;
- map->addmap2db(&maplist[i]);
+ map->list[i].m = i;
+ map->addmap2db(&map->list[i]);
- memset(maplist[i].moblist, 0, sizeof(maplist[i].moblist)); //Initialize moblist [Skotlex]
- maplist[i].mob_delete_timer = INVALID_TIMER; //Initialize timer [Skotlex]
+ memset(map->list[i].moblist, 0, sizeof(map->list[i].moblist)); //Initialize moblist [Skotlex]
+ map->list[i].mob_delete_timer = INVALID_TIMER; //Initialize timer [Skotlex]
- maplist[i].bxs = (maplist[i].xs + BLOCK_SIZE - 1) / BLOCK_SIZE;
- maplist[i].bys = (maplist[i].ys + BLOCK_SIZE - 1) / BLOCK_SIZE;
+ map->list[i].bxs = (map->list[i].xs + BLOCK_SIZE - 1) / BLOCK_SIZE;
+ map->list[i].bys = (map->list[i].ys + BLOCK_SIZE - 1) / BLOCK_SIZE;
- size = maplist[i].bxs * maplist[i].bys * sizeof(struct block_list*);
- maplist[i].block = (struct block_list**)aCalloc(size, 1);
- maplist[i].block_mob = (struct block_list**)aCalloc(size, 1);
+ size = map->list[i].bxs * map->list[i].bys * sizeof(struct block_list*);
+ map->list[i].block = (struct block_list**)aCalloc(size, 1);
+ map->list[i].block_mob = (struct block_list**)aCalloc(size, 1);
- maplist[i].getcellp = map_sub_getcellp;
- maplist[i].setcell = map_sub_setcell;
+ map->list[i].getcellp = map->sub_getcellp;
+ map->list[i].setcell = map->sub_setcell;
}
// intialization and configuration-dependent adjustments of mapflags
map->flags_init();
- if( !enable_grf ) {
+ if( !map->enable_grf ) {
fclose(fp);
}
// finished map loading
- ShowInfo("Successfully loaded '"CL_WHITE"%d"CL_RESET"' maps."CL_CLL"\n",map->map_num);
- instance->start_id = map->map_num; // Next Map Index will be instances
+ ShowInfo("Successfully loaded '"CL_WHITE"%d"CL_RESET"' maps."CL_CLL"\n",map->count);
+ instance->start_id = map->count; // Next Map Index will be instances
if (maps_removed)
ShowNotice("Maps removed: '"CL_WHITE"%d"CL_RESET"'\n",maps_removed);
@@ -3442,13 +3345,9 @@ int map_readallmaps (void) {
return 0;
}
-////////////////////////////////////////////////////////////////////////
-static int map_ip_set = 0;
-static int char_ip_set = 0;
-
/*==========================================
-* Read map server configuration files (conf/map_server.conf...)
-*------------------------------------------*/
+ * Read map server configuration files (conf/map_server.conf...)
+ *------------------------------------------*/
int map_config_read(char *cfgName) {
char line[1024], w1[1024], w2[1024];
FILE *fp;
@@ -3488,20 +3387,20 @@ int map_config_read(char *cfgName) {
else if (strcmpi(w1, "passwd") == 0)
chrif->setpasswd(w2);
else if (strcmpi(w1, "char_ip") == 0)
- char_ip_set = chrif->setip(w2);
+ map->char_ip_set = chrif->setip(w2);
else if (strcmpi(w1, "char_port") == 0)
chrif->setport(atoi(w2));
else if (strcmpi(w1, "map_ip") == 0)
- map_ip_set = clif->setip(w2);
+ map->ip_set = clif->setip(w2);
else if (strcmpi(w1, "bind_ip") == 0)
clif->setbindip(w2);
else if (strcmpi(w1, "map_port") == 0) {
clif->setport(atoi(w2));
- map_port = (atoi(w2));
+ map->port = (atoi(w2));
} else if (strcmpi(w1, "map") == 0)
- map->map_num++;
+ map->count++;
else if (strcmpi(w1, "delmap") == 0)
- map->map_num--;
+ map->count--;
else if (strcmpi(w1, "npc") == 0)
npc->addsrcfile(w2);
else if (strcmpi(w1, "delnpc") == 0)
@@ -3529,11 +3428,11 @@ int map_config_read(char *cfgName) {
else if (strcmpi(w1, "enable_spy") == 0)
map->enable_spy = config_switch(w2);
else if (strcmpi(w1, "use_grf") == 0)
- enable_grf = config_switch(w2);
+ map->enable_grf = config_switch(w2);
else if (strcmpi(w1, "console_msg_log") == 0)
console_msg_log = atoi(w2);//[Ind]
else if (strcmpi(w1, "import") == 0)
- map_config_read(w2);
+ map->config_read(w2);
else
ShowWarning("Unknown setting '%s' in file %s\n", w1, cfgName);
}
@@ -3568,11 +3467,11 @@ int map_config_read_sub(char *cfgName) {
*ptr = '\0';
if (strcmpi(w1, "map") == 0)
- map_addmap(w2);
+ map->addmap(w2);
else if (strcmpi(w1, "delmap") == 0)
map->delmap(w2);
else if (strcmpi(w1, "import") == 0)
- map_config_read_sub(w2);
+ map->config_read_sub(w2);
}
fclose(fp);
@@ -3610,7 +3509,7 @@ void map_reloadnpc_sub(char *cfgName)
if (strcmpi(w1, "npc") == 0)
npc->addsrcfile(w2);
else if (strcmpi(w1, "import") == 0)
- map_reloadnpc_sub(w2);
+ map->reloadnpc_sub(w2);
else
ShowWarning("Unknown setting '%s' in file %s\n", w1, cfgName);
}
@@ -3624,9 +3523,9 @@ void map_reloadnpc(bool clear)
npc->addsrcfile("clear"); // this will clear the current script list
#ifdef RENEWAL
- map_reloadnpc_sub("npc/re/scripts_main.conf");
+ map->reloadnpc_sub("npc/re/scripts_main.conf");
#else
- map_reloadnpc_sub("npc/pre-re/scripts_main.conf");
+ map->reloadnpc_sub("npc/pre-re/scripts_main.conf");
#endif
}
@@ -3663,17 +3562,17 @@ int inter_config_read(char *cfgName) {
strcpy(map->interreg_db,w2);
/* map sql stuff */
else if(strcmpi(w1,"map_server_ip")==0)
- strcpy(map_server_ip, w2);
+ strcpy(map->server_ip, w2);
else if(strcmpi(w1,"map_server_port")==0)
- map_server_port=atoi(w2);
+ map->server_port=atoi(w2);
else if(strcmpi(w1,"map_server_id")==0)
- strcpy(map_server_id, w2);
+ strcpy(map->server_id, w2);
else if(strcmpi(w1,"map_server_pw")==0)
- strcpy(map_server_pw, w2);
+ strcpy(map->server_pw, w2);
else if(strcmpi(w1,"map_server_db")==0)
- strcpy(map_server_db, w2);
+ strcpy(map->server_db, w2);
else if(strcmpi(w1,"default_codepage")==0)
- strcpy(default_codepage, w2);
+ strcpy(map->default_codepage, w2);
else if(strcmpi(w1,"use_sql_item_db")==0) {
map->db_use_sql_item_db = config_switch(w2);
ShowStatus ("Using item database as SQL: '%s'\n", w2);
@@ -3688,21 +3587,21 @@ int inter_config_read(char *cfgName) {
}
/* sql log db */
else if(strcmpi(w1,"log_db_ip")==0)
- strcpy(log_db_ip, w2);
+ strcpy(logs->db_ip, w2);
else if(strcmpi(w1,"log_db_id")==0)
- strcpy(log_db_id, w2);
+ strcpy(logs->db_id, w2);
else if(strcmpi(w1,"log_db_pw")==0)
- strcpy(log_db_pw, w2);
+ strcpy(logs->db_pw, w2);
else if(strcmpi(w1,"log_db_port")==0)
- log_db_port = atoi(w2);
+ logs->db_port = atoi(w2);
else if(strcmpi(w1,"log_db_db")==0)
- strcpy(log_db_db, w2);
+ strcpy(logs->db_name, w2);
/* mapreg */
else if( mapreg->config_read(w1,w2) )
continue;
/* import */
else if(strcmpi(w1,"import")==0)
- inter_config_read(w2);
+ map->inter_config_read(w2);
}
fclose(fp);
@@ -3710,21 +3609,21 @@ int inter_config_read(char *cfgName) {
}
/*=======================================
-* MySQL Init
-*---------------------------------------*/
+ * MySQL Init
+ *---------------------------------------*/
int map_sql_init(void)
{
// main db connection
- mmysql_handle = SQL->Malloc();
+ map->mysql_handle = SQL->Malloc();
ShowInfo("Connecting to the Map DB Server....\n");
- if( SQL_ERROR == SQL->Connect(mmysql_handle, map_server_id, map_server_pw, map_server_ip, map_server_port, map_server_db) )
+ if( SQL_ERROR == SQL->Connect(map->mysql_handle, map->server_id, map->server_pw, map->server_ip, map->server_port, map->server_db) )
exit(EXIT_FAILURE);
ShowStatus("connect success! (Map Server Connection)\n");
- if( strlen(default_codepage) > 0 )
- if ( SQL_ERROR == SQL->SetEncoding(mmysql_handle, default_codepage) )
- Sql_ShowDebug(mmysql_handle);
+ if( strlen(map->default_codepage) > 0 )
+ if ( SQL_ERROR == SQL->SetEncoding(map->mysql_handle, map->default_codepage) )
+ Sql_ShowDebug(map->mysql_handle);
return 0;
}
@@ -3732,46 +3631,29 @@ int map_sql_init(void)
int map_sql_close(void)
{
ShowStatus("Close Map DB Connection....\n");
- SQL->Free(mmysql_handle);
- mmysql_handle = NULL;
+ SQL->Free(map->mysql_handle);
+ map->mysql_handle = NULL;
if (logs->config.sql_logs) {
- ShowStatus("Close Log DB Connection....\n");
- SQL->Free(logmysql_handle);
- logmysql_handle = NULL;
+ logs->sql_final();
}
return 0;
}
-int log_sql_init(void)
-{
- // log db connection
- logmysql_handle = SQL->Malloc();
-
- ShowInfo(""CL_WHITE"[SQL]"CL_RESET": Connecting to the Log Database "CL_WHITE"%s"CL_RESET" At "CL_WHITE"%s"CL_RESET"...\n",log_db_db,log_db_ip);
- if ( SQL_ERROR == SQL->Connect(logmysql_handle, log_db_id, log_db_pw, log_db_ip, log_db_port, log_db_db) )
- exit(EXIT_FAILURE);
- ShowStatus(""CL_WHITE"[SQL]"CL_RESET": Successfully '"CL_GREEN"connected"CL_RESET"' to Database '"CL_WHITE"%s"CL_RESET"'.\n", log_db_db);
-
- if( strlen(default_codepage) > 0 )
- if ( SQL_ERROR == SQL->SetEncoding(logmysql_handle, default_codepage) )
- Sql_ShowDebug(logmysql_handle);
- return 0;
-}
void map_zone_change2(int m, struct map_zone_data *zone) {
char empty[1] = "\0";
- maplist[m].prev_zone = maplist[m].zone;
+ map->list[m].prev_zone = map->list[m].zone;
- if( maplist[m].zone_mf_count )
+ if( map->list[m].zone_mf_count )
map->zone_remove(m);
map->zone_apply(m,zone,empty,empty,empty);
}
/* when changing from a mapflag to another during runtime */
void map_zone_change(int m, struct map_zone_data *zone, const char* start, const char* buffer, const char* filepath) {
- maplist[m].prev_zone = maplist[m].zone;
+ map->list[m].prev_zone = map->list[m].zone;
- if( maplist[m].zone_mf_count )
+ if( map->list[m].zone_mf_count )
map->zone_remove(m);
map->zone_apply(m,zone,start,buffer,filepath);
}
@@ -3780,10 +3662,10 @@ void map_zone_remove(int m) {
char flag[MAP_ZONE_MAPFLAG_LENGTH], params[MAP_ZONE_MAPFLAG_LENGTH];
unsigned short k;
char empty[1] = "\0";
- for(k = 0; k < maplist[m].zone_mf_count; k++) {
- int len = strlen(maplist[m].zone_mf[k]),j;
+ for(k = 0; k < map->list[m].zone_mf_count; k++) {
+ int len = strlen(map->list[m].zone_mf[k]),j;
params[0] = '\0';
- memcpy(flag, maplist[m].zone_mf[k], MAP_ZONE_MAPFLAG_LENGTH);
+ memcpy(flag, map->list[m].zone_mf[k], MAP_ZONE_MAPFLAG_LENGTH);
for(j = 0; j < len; j++) {
if( flag[j] == '\t' ) {
memcpy(params, &flag[j+1], len - j);
@@ -3792,19 +3674,19 @@ void map_zone_remove(int m) {
}
}
- npc->parse_mapflag(maplist[m].name,empty,flag,params,empty,empty,empty);
- aFree(maplist[m].zone_mf[k]);
- maplist[m].zone_mf[k] = NULL;
+ npc->parse_mapflag(map->list[m].name,empty,flag,params,empty,empty,empty);
+ aFree(map->list[m].zone_mf[k]);
+ map->list[m].zone_mf[k] = NULL;
}
- aFree(maplist[m].zone_mf);
- maplist[m].zone_mf = NULL;
- maplist[m].zone_mf_count = 0;
+ aFree(map->list[m].zone_mf);
+ map->list[m].zone_mf = NULL;
+ map->list[m].zone_mf_count = 0;
}
static inline void map_zone_mf_cache_add(int m, char *rflag) {
- RECREATE(maplist[m].zone_mf, char *, ++maplist[m].zone_mf_count);
- CREATE(maplist[m].zone_mf[maplist[m].zone_mf_count - 1], char, MAP_ZONE_MAPFLAG_LENGTH);
- safestrncpy(maplist[m].zone_mf[maplist[m].zone_mf_count - 1], rflag, MAP_ZONE_MAPFLAG_LENGTH);
+ RECREATE(map->list[m].zone_mf, char *, ++map->list[m].zone_mf_count);
+ CREATE(map->list[m].zone_mf[map->list[m].zone_mf_count - 1], char, MAP_ZONE_MAPFLAG_LENGTH);
+ safestrncpy(map->list[m].zone_mf[map->list[m].zone_mf_count - 1], rflag, MAP_ZONE_MAPFLAG_LENGTH);
}
/* TODO: introduce enumerations to each mapflag so instead of reading the string a number of times we read it only once and use its value wherever we need */
/* cache previous values to revert */
@@ -3820,157 +3702,157 @@ bool map_zone_mf_cache(int m, char *flag, char *params) {
char savemap[32];
int savex, savey;
if (state == 0) {
- if( maplist[m].flag.nosave ) {
+ if( map->list[m].flag.nosave ) {
sprintf(rflag, "nosave\tSavePoint");
map_zone_mf_cache_add(m,nosave);
}
} else if (!strcmpi(params, "SavePoint")) {
- if( maplist[m].save.map ) {
- sprintf(rflag, "nosave\t%s,%d,%d",mapindex_id2name(maplist[m].save.map),maplist[m].save.x,maplist[m].save.y);
+ if( map->list[m].save.map ) {
+ sprintf(rflag, "nosave\t%s,%d,%d",mapindex_id2name(map->list[m].save.map),map->list[m].save.x,map->list[m].save.y);
} else
- sprintf(rflag, "nosave\t%s,%d,%d",mapindex_id2name(maplist[m].save.map),maplist[m].save.x,maplist[m].save.y);
+ sprintf(rflag, "nosave\t%s,%d,%d",mapindex_id2name(map->list[m].save.map),map->list[m].save.x,map->list[m].save.y);
map_zone_mf_cache_add(m,nosave);
} else if (sscanf(params, "%31[^,],%d,%d", savemap, &savex, &savey) == 3) {
- if( maplist[m].save.map ) {
- sprintf(rflag, "nosave\t%s,%d,%d",mapindex_id2name(maplist[m].save.map),maplist[m].save.x,maplist[m].save.y);
+ if( map->list[m].save.map ) {
+ sprintf(rflag, "nosave\t%s,%d,%d",mapindex_id2name(map->list[m].save.map),map->list[m].save.x,map->list[m].save.y);
map_zone_mf_cache_add(m,nosave);
}
}
#endif // 0
} else if (!strcmpi(flag,"autotrade")) {
- if( state && maplist[m].flag.autotrade )
+ if( state && map->list[m].flag.autotrade )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"autotrade\toff");
- else if( !maplist[m].flag.autotrade )
+ else if( !map->list[m].flag.autotrade )
map_zone_mf_cache_add(m,"autotrade");
}
} else if (!strcmpi(flag,"allowks")) {
- if( state && maplist[m].flag.allowks )
+ if( state && map->list[m].flag.allowks )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"allowks\toff");
- else if( !maplist[m].flag.allowks )
+ else if( !map->list[m].flag.allowks )
map_zone_mf_cache_add(m,"allowks");
}
} else if (!strcmpi(flag,"town")) {
- if( state && maplist[m].flag.town )
+ if( state && map->list[m].flag.town )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"town\toff");
- else if( !maplist[m].flag.town )
+ else if( !map->list[m].flag.town )
map_zone_mf_cache_add(m,"town");
}
} else if (!strcmpi(flag,"nomemo")) {
- if( state && maplist[m].flag.nomemo )
+ if( state && map->list[m].flag.nomemo )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"nomemo\toff");
- else if( !maplist[m].flag.nomemo )
+ else if( !map->list[m].flag.nomemo )
map_zone_mf_cache_add(m,"nomemo");
}
} else if (!strcmpi(flag,"noteleport")) {
- if( state && maplist[m].flag.noteleport )
+ if( state && map->list[m].flag.noteleport )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"noteleport\toff");
- else if( !maplist[m].flag.noteleport )
+ else if( !map->list[m].flag.noteleport )
map_zone_mf_cache_add(m,"noteleport");
}
} else if (!strcmpi(flag,"nowarp")) {
- if( state && maplist[m].flag.nowarp )
+ if( state && map->list[m].flag.nowarp )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"nowarp\toff");
- else if( !maplist[m].flag.nowarp )
+ else if( !map->list[m].flag.nowarp )
map_zone_mf_cache_add(m,"nowarp");
}
} else if (!strcmpi(flag,"nowarpto")) {
- if( state && maplist[m].flag.nowarpto )
+ if( state && map->list[m].flag.nowarpto )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"nowarpto\toff");
- else if( !maplist[m].flag.nowarpto )
+ else if( !map->list[m].flag.nowarpto )
map_zone_mf_cache_add(m,"nowarpto");
}
} else if (!strcmpi(flag,"noreturn")) {
- if( state && maplist[m].flag.noreturn )
+ if( state && map->list[m].flag.noreturn )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"noreturn\toff");
- else if( maplist[m].flag.noreturn )
+ else if( map->list[m].flag.noreturn )
map_zone_mf_cache_add(m,"noreturn");
}
} else if (!strcmpi(flag,"monster_noteleport")) {
- if( state && maplist[m].flag.monster_noteleport )
+ if( state && map->list[m].flag.monster_noteleport )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"monster_noteleport\toff");
- else if( maplist[m].flag.monster_noteleport )
+ else if( map->list[m].flag.monster_noteleport )
map_zone_mf_cache_add(m,"monster_noteleport");
}
} else if (!strcmpi(flag,"nobranch")) {
- if( state && maplist[m].flag.nobranch )
+ if( state && map->list[m].flag.nobranch )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"nobranch\toff");
- else if( maplist[m].flag.nobranch )
+ else if( map->list[m].flag.nobranch )
map_zone_mf_cache_add(m,"nobranch");
}
} else if (!strcmpi(flag,"nopenalty")) {
- if( state && maplist[m].flag.noexppenalty ) /* they are applied together, no need to check both */
+ if( state && map->list[m].flag.noexppenalty ) /* they are applied together, no need to check both */
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"nopenalty\toff");
- else if( maplist[m].flag.noexppenalty )
+ else if( map->list[m].flag.noexppenalty )
map_zone_mf_cache_add(m,"nopenalty");
}
} else if (!strcmpi(flag,"pvp")) {
- if( state && maplist[m].flag.pvp )
+ if( state && map->list[m].flag.pvp )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"pvp\toff");
- else if( maplist[m].flag.pvp )
+ else if( map->list[m].flag.pvp )
map_zone_mf_cache_add(m,"pvp");
}
}
else if (!strcmpi(flag,"pvp_noparty")) {
- if( state && maplist[m].flag.pvp_noparty )
+ if( state && map->list[m].flag.pvp_noparty )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"pvp_noparty\toff");
- else if( maplist[m].flag.pvp_noparty )
+ else if( map->list[m].flag.pvp_noparty )
map_zone_mf_cache_add(m,"pvp_noparty");
}
} else if (!strcmpi(flag,"pvp_noguild")) {
- if( state && maplist[m].flag.pvp_noguild )
+ if( state && map->list[m].flag.pvp_noguild )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"pvp_noguild\toff");
- else if( maplist[m].flag.pvp_noguild )
+ else if( map->list[m].flag.pvp_noguild )
map_zone_mf_cache_add(m,"pvp_noguild");
}
} else if (!strcmpi(flag, "pvp_nightmaredrop")) {
- if( state && maplist[m].flag.pvp_nightmaredrop )
+ if( state && map->list[m].flag.pvp_nightmaredrop )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"pvp_nightmaredrop\toff");
- else if( maplist[m].flag.pvp_nightmaredrop )
+ else if( map->list[m].flag.pvp_nightmaredrop )
map_zone_mf_cache_add(m,"pvp_nightmaredrop");
}
#if 0 /* not yet fully supported */
@@ -3992,262 +3874,262 @@ bool map_zone_mf_cache(int m, char *flag, char *params) {
if (drop_id != 0) {
int i;
for (i = 0; i < MAX_DROP_PER_MAP; i++) {
- if (maplist[m].drop_list[i].drop_id == 0){
- maplist[m].drop_list[i].drop_id = drop_id;
- maplist[m].drop_list[i].drop_type = drop_type;
- maplist[m].drop_list[i].drop_per = drop_per;
+ if (map->list[m].drop_list[i].drop_id == 0){
+ map->list[m].drop_list[i].drop_id = drop_id;
+ map->list[m].drop_list[i].drop_type = drop_type;
+ map->list[m].drop_list[i].drop_per = drop_per;
break;
}
}
- maplist[m].flag.pvp_nightmaredrop = 1;
+ map->list[m].flag.pvp_nightmaredrop = 1;
}
} else if (!state) //Disable
- maplist[m].flag.pvp_nightmaredrop = 0;
+ map->list[m].flag.pvp_nightmaredrop = 0;
#endif // 0
} else if (!strcmpi(flag,"pvp_nocalcrank")) {
- if( state && maplist[m].flag.pvp_nocalcrank )
+ if( state && map->list[m].flag.pvp_nocalcrank )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"pvp_nocalcrank\toff");
- else if( maplist[m].flag.pvp_nocalcrank )
+ else if( map->list[m].flag.pvp_nocalcrank )
map_zone_mf_cache_add(m,"pvp_nocalcrank");
}
} else if (!strcmpi(flag,"gvg")) {
- if( state && maplist[m].flag.gvg )
+ if( state && map->list[m].flag.gvg )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"gvg\toff");
- else if( maplist[m].flag.gvg )
+ else if( map->list[m].flag.gvg )
map_zone_mf_cache_add(m,"gvg");
}
} else if (!strcmpi(flag,"gvg_noparty")) {
- if( state && maplist[m].flag.gvg_noparty )
+ if( state && map->list[m].flag.gvg_noparty )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"gvg_noparty\toff");
- else if( maplist[m].flag.gvg_noparty )
+ else if( map->list[m].flag.gvg_noparty )
map_zone_mf_cache_add(m,"gvg_noparty");
}
} else if (!strcmpi(flag,"gvg_dungeon")) {
- if( state && maplist[m].flag.gvg_dungeon )
+ if( state && map->list[m].flag.gvg_dungeon )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"gvg_dungeon\toff");
- else if( maplist[m].flag.gvg_dungeon )
+ else if( map->list[m].flag.gvg_dungeon )
map_zone_mf_cache_add(m,"gvg_dungeon");
}
}
else if (!strcmpi(flag,"gvg_castle")) {
- if( state && maplist[m].flag.gvg_castle )
+ if( state && map->list[m].flag.gvg_castle )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"gvg_castle\toff");
- else if( maplist[m].flag.gvg_castle )
+ else if( map->list[m].flag.gvg_castle )
map_zone_mf_cache_add(m,"gvg_castle");
}
}
else if (!strcmpi(flag,"battleground")) {
- if( state && maplist[m].flag.battleground )
+ if( state && map->list[m].flag.battleground )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"battleground\toff");
- else if( maplist[m].flag.battleground )
+ else if( map->list[m].flag.battleground )
map_zone_mf_cache_add(m,"battleground");
}
} else if (!strcmpi(flag,"noexppenalty")) {
- if( state && maplist[m].flag.noexppenalty )
+ if( state && map->list[m].flag.noexppenalty )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"noexppenalty\toff");
- else if( maplist[m].flag.noexppenalty )
+ else if( map->list[m].flag.noexppenalty )
map_zone_mf_cache_add(m,"noexppenalty");
}
} else if (!strcmpi(flag,"nozenypenalty")) {
- if( state && maplist[m].flag.nozenypenalty )
+ if( state && map->list[m].flag.nozenypenalty )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"nozenypenalty\toff");
- else if( maplist[m].flag.nozenypenalty )
+ else if( map->list[m].flag.nozenypenalty )
map_zone_mf_cache_add(m,"nozenypenalty");
}
} else if (!strcmpi(flag,"notrade")) {
- if( state && maplist[m].flag.notrade )
+ if( state && map->list[m].flag.notrade )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"notrade\toff");
- else if( maplist[m].flag.notrade )
+ else if( map->list[m].flag.notrade )
map_zone_mf_cache_add(m,"notrade");
}
} else if (!strcmpi(flag,"novending")) {
- if( state && maplist[m].flag.novending )
+ if( state && map->list[m].flag.novending )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"novending\toff");
- else if( maplist[m].flag.novending )
+ else if( map->list[m].flag.novending )
map_zone_mf_cache_add(m,"novending");
}
} else if (!strcmpi(flag,"nodrop")) {
- if( state && maplist[m].flag.nodrop )
+ if( state && map->list[m].flag.nodrop )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"nodrop\toff");
- else if( maplist[m].flag.nodrop )
+ else if( map->list[m].flag.nodrop )
map_zone_mf_cache_add(m,"nodrop");
}
} else if (!strcmpi(flag,"noskill")) {
- if( state && maplist[m].flag.noskill )
+ if( state && map->list[m].flag.noskill )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"noskill\toff");
- else if( maplist[m].flag.noskill )
+ else if( map->list[m].flag.noskill )
map_zone_mf_cache_add(m,"noskill");
}
} else if (!strcmpi(flag,"noicewall")) {
- if( state && maplist[m].flag.noicewall )
+ if( state && map->list[m].flag.noicewall )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"noicewall\toff");
- else if( maplist[m].flag.noicewall )
+ else if( map->list[m].flag.noicewall )
map_zone_mf_cache_add(m,"noicewall");
}
} else if (!strcmpi(flag,"snow")) {
- if( state && maplist[m].flag.snow )
+ if( state && map->list[m].flag.snow )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"snow\toff");
- else if( maplist[m].flag.snow )
+ else if( map->list[m].flag.snow )
map_zone_mf_cache_add(m,"snow");
}
} else if (!strcmpi(flag,"clouds")) {
- if( state && maplist[m].flag.clouds )
+ if( state && map->list[m].flag.clouds )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"clouds\toff");
- else if( maplist[m].flag.clouds )
+ else if( map->list[m].flag.clouds )
map_zone_mf_cache_add(m,"clouds");
}
} else if (!strcmpi(flag,"clouds2")) {
- if( state && maplist[m].flag.clouds2 )
+ if( state && map->list[m].flag.clouds2 )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"clouds2\toff");
- else if( maplist[m].flag.clouds2 )
+ else if( map->list[m].flag.clouds2 )
map_zone_mf_cache_add(m,"clouds2");
}
} else if (!strcmpi(flag,"fog")) {
- if( state && maplist[m].flag.fog )
+ if( state && map->list[m].flag.fog )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"fog\toff");
- else if( maplist[m].flag.fog )
+ else if( map->list[m].flag.fog )
map_zone_mf_cache_add(m,"fog");
}
} else if (!strcmpi(flag,"fireworks")) {
- if( state && maplist[m].flag.fireworks )
+ if( state && map->list[m].flag.fireworks )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"fireworks\toff");
- else if( maplist[m].flag.fireworks )
+ else if( map->list[m].flag.fireworks )
map_zone_mf_cache_add(m,"fireworks");
}
} else if (!strcmpi(flag,"sakura")) {
- if( state && maplist[m].flag.sakura )
+ if( state && map->list[m].flag.sakura )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"sakura\toff");
- else if( maplist[m].flag.sakura )
+ else if( map->list[m].flag.sakura )
map_zone_mf_cache_add(m,"sakura");
}
} else if (!strcmpi(flag,"leaves")) {
- if( state && maplist[m].flag.leaves )
+ if( state && map->list[m].flag.leaves )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"leaves\toff");
- else if( maplist[m].flag.leaves )
+ else if( map->list[m].flag.leaves )
map_zone_mf_cache_add(m,"leaves");
}
} else if (!strcmpi(flag,"nightenabled")) {
- if( state && maplist[m].flag.nightenabled )
+ if( state && map->list[m].flag.nightenabled )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"nightenabled\toff");
- else if( maplist[m].flag.nightenabled )
+ else if( map->list[m].flag.nightenabled )
map_zone_mf_cache_add(m,"nightenabled");
}
} else if (!strcmpi(flag,"noexp")) {
- if( state && maplist[m].flag.nobaseexp )
+ if( state && map->list[m].flag.nobaseexp )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"noexp\toff");
- else if( maplist[m].flag.nobaseexp )
+ else if( map->list[m].flag.nobaseexp )
map_zone_mf_cache_add(m,"noexp");
}
}
else if (!strcmpi(flag,"nobaseexp")) {
- if( state && maplist[m].flag.nobaseexp )
+ if( state && map->list[m].flag.nobaseexp )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"nobaseexp\toff");
- else if( maplist[m].flag.nobaseexp )
+ else if( map->list[m].flag.nobaseexp )
map_zone_mf_cache_add(m,"nobaseexp");
}
} else if (!strcmpi(flag,"nojobexp")) {
- if( state && maplist[m].flag.nojobexp )
+ if( state && map->list[m].flag.nojobexp )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"nojobexp\toff");
- else if( maplist[m].flag.nojobexp )
+ else if( map->list[m].flag.nojobexp )
map_zone_mf_cache_add(m,"nojobexp");
}
} else if (!strcmpi(flag,"noloot")) {
- if( state && maplist[m].flag.nomobloot )
+ if( state && map->list[m].flag.nomobloot )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"noloot\toff");
- else if( maplist[m].flag.nomobloot )
+ else if( map->list[m].flag.nomobloot )
map_zone_mf_cache_add(m,"noloot");
}
} else if (!strcmpi(flag,"nomobloot")) {
- if( state && maplist[m].flag.nomobloot )
+ if( state && map->list[m].flag.nomobloot )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"nomobloot\toff");
- else if( maplist[m].flag.nomobloot )
+ else if( map->list[m].flag.nomobloot )
map_zone_mf_cache_add(m,"nomobloot");
}
} else if (!strcmpi(flag,"nomvploot")) {
- if( state && maplist[m].flag.nomvploot )
+ if( state && map->list[m].flag.nomvploot )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"nomvploot\toff");
- else if( maplist[m].flag.nomvploot )
+ else if( map->list[m].flag.nomvploot )
map_zone_mf_cache_add(m,"nomvploot");
}
} else if (!strcmpi(flag,"nocommand")) {
@@ -4255,79 +4137,79 @@ bool map_zone_mf_cache(int m, char *flag, char *params) {
if( state && sscanf(params, "%d", &state) == 1 ) {
sprintf(rflag, "nocommand\t%s",params);
map_zone_mf_cache_add(m,rflag);
- } else if( !state && maplist[m].nocommand ) {
- sprintf(rflag, "nocommand\t%d",maplist[m].nocommand);
+ } else if( !state && map->list[m].nocommand ) {
+ sprintf(rflag, "nocommand\t%d",map->list[m].nocommand);
map_zone_mf_cache_add(m,rflag);
- } else if( maplist[m].nocommand ) {
+ } else if( map->list[m].nocommand ) {
map_zone_mf_cache_add(m,"nocommand\toff");
}
} else if (!strcmpi(flag,"jexp")) {
if( !state ) {
- if( maplist[m].jexp != 100 ) {
- sprintf(rflag,"jexp\t%d",maplist[m].jexp);
+ if( map->list[m].jexp != 100 ) {
+ sprintf(rflag,"jexp\t%d",map->list[m].jexp);
map_zone_mf_cache_add(m,rflag);
}
} if( sscanf(params, "%d", &state) == 1 ) {
- if( state != maplist[m].jexp ) {
+ if( state != map->list[m].jexp ) {
sprintf(rflag,"jexp\t%s",params);
map_zone_mf_cache_add(m,rflag);
}
}
} else if (!strcmpi(flag,"bexp")) {
if( !state ) {
- if( maplist[m].bexp != 100 ) {
- sprintf(rflag,"bexp\t%d",maplist[m].jexp);
+ if( map->list[m].bexp != 100 ) {
+ sprintf(rflag,"bexp\t%d",map->list[m].jexp);
map_zone_mf_cache_add(m,rflag);
}
} if( sscanf(params, "%d", &state) == 1 ) {
- if( state != maplist[m].bexp ) {
+ if( state != map->list[m].bexp ) {
sprintf(rflag,"bexp\t%s",params);
map_zone_mf_cache_add(m,rflag);
}
}
} else if (!strcmpi(flag,"loadevent")) {
- if( state && maplist[m].flag.loadevent )
+ if( state && map->list[m].flag.loadevent )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"loadevent\toff");
- else if( maplist[m].flag.loadevent )
+ else if( map->list[m].flag.loadevent )
map_zone_mf_cache_add(m,"loadevent");
}
} else if (!strcmpi(flag,"nochat")) {
- if( state && maplist[m].flag.nochat )
+ if( state && map->list[m].flag.nochat )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"nochat\toff");
- else if( maplist[m].flag.nochat )
+ else if( map->list[m].flag.nochat )
map_zone_mf_cache_add(m,"nochat");
}
} else if (!strcmpi(flag,"partylock")) {
- if( state && maplist[m].flag.partylock )
+ if( state && map->list[m].flag.partylock )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"partylock\toff");
- else if( maplist[m].flag.partylock )
+ else if( map->list[m].flag.partylock )
map_zone_mf_cache_add(m,"partylock");
}
} else if (!strcmpi(flag,"guildlock")) {
- if( state && maplist[m].flag.guildlock )
+ if( state && map->list[m].flag.guildlock )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"guildlock\toff");
- else if( maplist[m].flag.guildlock )
+ else if( map->list[m].flag.guildlock )
map_zone_mf_cache_add(m,"guildlock");
}
} else if (!strcmpi(flag,"reset")) {
- if( state && maplist[m].flag.reset )
+ if( state && map->list[m].flag.reset )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"reset\toff");
- else if( maplist[m].flag.reset )
+ else if( map->list[m].flag.reset )
map_zone_mf_cache_add(m,"reset");
}
} else if (!strcmpi(flag,"adjust_unit_duration")) {
@@ -4349,14 +4231,14 @@ bool map_zone_mf_cache(int m, char *flag, char *params) {
if( modifier[0] == '\0' || !( skill_id = skill->name2id(skill_name) ) || !skill->get_unit_id( skill->name2id(skill_name), 0) || atoi(modifier) < 1 || atoi(modifier) > USHRT_MAX ) {
;/* we dont mind it, the server will take care of it next. */
} else {
- int idx = maplist[m].unit_count;
+ int idx = map->list[m].unit_count;
k = 0;
- ARR_FIND(0, idx, k, maplist[m].units[k]->skill_id == skill_id);
+ ARR_FIND(0, idx, k, map->list[m].units[k]->skill_id == skill_id);
if( k < idx ) {
- if( atoi(modifier) != maplist[m].units[k]->modifier ) {
- sprintf(rflag,"adjust_unit_duration\t%s\t%d",skill_name,maplist[m].units[k]->modifier);
+ if( atoi(modifier) != map->list[m].units[k]->modifier ) {
+ sprintf(rflag,"adjust_unit_duration\t%s\t%d",skill_name,map->list[m].units[k]->modifier);
map_zone_mf_cache_add(m,rflag);
}
} else {
@@ -4383,14 +4265,14 @@ bool map_zone_mf_cache(int m, char *flag, char *params) {
if( modifier[0] == '\0' || !( skill_id = skill->name2id(skill_name) ) || atoi(modifier) < 1 || atoi(modifier) > USHRT_MAX ) {
;/* we dont mind it, the server will take care of it next. */
} else {
- int idx = maplist[m].skill_count;
+ int idx = map->list[m].skill_count;
k = 0;
- ARR_FIND(0, idx, k, maplist[m].skills[k]->skill_id == skill_id);
+ ARR_FIND(0, idx, k, map->list[m].skills[k]->skill_id == skill_id);
if( k < idx ) {
- if( atoi(modifier) != maplist[m].skills[k]->modifier ) {
- sprintf(rflag,"adjust_skill_damage\t%s\t%d",skill_name,maplist[m].skills[k]->modifier);
+ if( atoi(modifier) != map->list[m].skills[k]->modifier ) {
+ sprintf(rflag,"adjust_skill_damage\t%s\t%d",skill_name,map->list[m].skills[k]->modifier);
map_zone_mf_cache_add(m,rflag);
}
} else {
@@ -4400,94 +4282,94 @@ bool map_zone_mf_cache(int m, char *flag, char *params) {
}
} else if (!strcmpi(flag,"zone")) {
- ShowWarning("You can't add a zone through a zone! ERROR, skipping for '%s'...\n",maplist[m].name);
+ ShowWarning("You can't add a zone through a zone! ERROR, skipping for '%s'...\n",map->list[m].name);
return true;
} else if ( !strcmpi(flag,"nomapchannelautojoin") ) {
- if( state && maplist[m].flag.chsysnolocalaj )
+ if( state && map->list[m].flag.chsysnolocalaj )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"nomapchannelautojoin\toff");
- else if( maplist[m].flag.chsysnolocalaj )
+ else if( map->list[m].flag.chsysnolocalaj )
map_zone_mf_cache_add(m,"nomapchannelautojoin");
}
} else if ( !strcmpi(flag,"invincible_time_inc") ) {
if( !state ) {
- if( maplist[m].invincible_time_inc != 0 ) {
- sprintf(rflag,"invincible_time_inc\t%d",maplist[m].invincible_time_inc);
+ if( map->list[m].invincible_time_inc != 0 ) {
+ sprintf(rflag,"invincible_time_inc\t%d",map->list[m].invincible_time_inc);
map_zone_mf_cache_add(m,rflag);
}
} if( sscanf(params, "%d", &state) == 1 ) {
- if( state != maplist[m].invincible_time_inc ) {
+ if( state != map->list[m].invincible_time_inc ) {
sprintf(rflag,"invincible_time_inc\t%s",params);
map_zone_mf_cache_add(m,rflag);
}
}
} else if ( !strcmpi(flag,"noknockback") ) {
- if( state && maplist[m].flag.noknockback )
+ if( state && map->list[m].flag.noknockback )
;/* nothing to do */
else {
if( state )
map_zone_mf_cache_add(m,"noknockback\toff");
- else if( maplist[m].flag.noknockback )
+ else if( map->list[m].flag.noknockback )
map_zone_mf_cache_add(m,"noknockback");
}
} else if ( !strcmpi(flag,"weapon_damage_rate") ) {
if( !state ) {
- if( maplist[m].weapon_damage_rate != 100 ) {
- sprintf(rflag,"weapon_damage_rate\t%d",maplist[m].weapon_damage_rate);
+ if( map->list[m].weapon_damage_rate != 100 ) {
+ sprintf(rflag,"weapon_damage_rate\t%d",map->list[m].weapon_damage_rate);
map_zone_mf_cache_add(m,rflag);
}
} if( sscanf(params, "%d", &state) == 1 ) {
- if( state != maplist[m].weapon_damage_rate ) {
+ if( state != map->list[m].weapon_damage_rate ) {
sprintf(rflag,"weapon_damage_rate\t%s",params);
map_zone_mf_cache_add(m,rflag);
}
}
} else if ( !strcmpi(flag,"magic_damage_rate") ) {
if( !state ) {
- if( maplist[m].magic_damage_rate != 100 ) {
- sprintf(rflag,"magic_damage_rate\t%d",maplist[m].magic_damage_rate);
+ if( map->list[m].magic_damage_rate != 100 ) {
+ sprintf(rflag,"magic_damage_rate\t%d",map->list[m].magic_damage_rate);
map_zone_mf_cache_add(m,rflag);
}
} if( sscanf(params, "%d", &state) == 1 ) {
- if( state != maplist[m].magic_damage_rate ) {
+ if( state != map->list[m].magic_damage_rate ) {
sprintf(rflag,"magic_damage_rate\t%s",params);
map_zone_mf_cache_add(m,rflag);
}
}
} else if ( !strcmpi(flag,"misc_damage_rate") ) {
if( !state ) {
- if( maplist[m].misc_damage_rate != 100 ) {
- sprintf(rflag,"misc_damage_rate\t%d",maplist[m].misc_damage_rate);
+ if( map->list[m].misc_damage_rate != 100 ) {
+ sprintf(rflag,"misc_damage_rate\t%d",map->list[m].misc_damage_rate);
map_zone_mf_cache_add(m,rflag);
}
} if( sscanf(params, "%d", &state) == 1 ) {
- if( state != maplist[m].misc_damage_rate ) {
+ if( state != map->list[m].misc_damage_rate ) {
sprintf(rflag,"misc_damage_rate\t%s",params);
map_zone_mf_cache_add(m,rflag);
}
}
} else if ( !strcmpi(flag,"short_damage_rate") ) {
if( !state ) {
- if( maplist[m].short_damage_rate != 100 ) {
- sprintf(rflag,"short_damage_rate\t%d",maplist[m].short_damage_rate);
+ if( map->list[m].short_damage_rate != 100 ) {
+ sprintf(rflag,"short_damage_rate\t%d",map->list[m].short_damage_rate);
map_zone_mf_cache_add(m,rflag);
}
} if( sscanf(params, "%d", &state) == 1 ) {
- if( state != maplist[m].short_damage_rate ) {
+ if( state != map->list[m].short_damage_rate ) {
sprintf(rflag,"short_damage_rate\t%s",params);
map_zone_mf_cache_add(m,rflag);
}
}
} else if ( !strcmpi(flag,"long_damage_rate") ) {
if( !state ) {
- if( maplist[m].long_damage_rate != 100 ) {
- sprintf(rflag,"long_damage_rate\t%d",maplist[m].long_damage_rate);
+ if( map->list[m].long_damage_rate != 100 ) {
+ sprintf(rflag,"long_damage_rate\t%d",map->list[m].long_damage_rate);
map_zone_mf_cache_add(m,rflag);
}
} if( sscanf(params, "%d", &state) == 1 ) {
- if( state != maplist[m].long_damage_rate ) {
+ if( state != map->list[m].long_damage_rate ) {
sprintf(rflag,"long_damage_rate\t%s",params);
map_zone_mf_cache_add(m,rflag);
}
@@ -4499,7 +4381,7 @@ void map_zone_apply(int m, struct map_zone_data *zone, const char* start, const
int i;
char empty[1] = "\0";
char flag[MAP_ZONE_MAPFLAG_LENGTH], params[MAP_ZONE_MAPFLAG_LENGTH];
- maplist[m].zone = zone;
+ map->list[m].zone = zone;
for(i = 0; i < zone->mapflags_count; i++) {
int len = strlen(zone->mapflags[i]);
int k;
@@ -4513,10 +4395,10 @@ void map_zone_apply(int m, struct map_zone_data *zone, const char* start, const
}
}
- if( map_zone_mf_cache(m,flag,params) )
+ if( map->zone_mf_cache(m,flag,params) )
continue;
- npc->parse_mapflag(maplist[m].name,empty,flag,params,start,buffer,filepath);
+ npc->parse_mapflag(map->list[m].name,empty,flag,params,start,buffer,filepath);
}
}
/* used on npc load and reload to apply all "Normal" and "PK Mode" zones */
@@ -4526,7 +4408,7 @@ void map_zone_init(void) {
char empty[1] = "\0";
int i,k,j;
- zone = &map_zone_all;
+ zone = &map->zone_all;
for(i = 0; i < zone->mapflags_count; i++) {
int len = strlen(zone->mapflags[i]);
@@ -4540,17 +4422,17 @@ void map_zone_init(void) {
}
}
- for(j = 0; j < map->map_num; j++) {
- if( maplist[j].zone == zone ) {
- if( map_zone_mf_cache(j,flag,params) )
+ for(j = 0; j < map->count; j++) {
+ if( map->list[j].zone == zone ) {
+ if( map->zone_mf_cache(j,flag,params) )
break;
- npc->parse_mapflag(maplist[j].name,empty,flag,params,empty,empty,empty);
+ npc->parse_mapflag(map->list[j].name,empty,flag,params,empty,empty,empty);
}
}
}
if( battle_config.pk_mode ) {
- zone = &map_zone_pk;
+ zone = &map->zone_pk;
for(i = 0; i < zone->mapflags_count; i++) {
int len = strlen(zone->mapflags[i]);
params[0] = '\0';
@@ -4562,11 +4444,11 @@ void map_zone_init(void) {
break;
}
}
- for(j = 0; j < map->map_num; j++) {
- if( maplist[j].zone == zone ) {
- if( map_zone_mf_cache(j,flag,params) )
+ for(j = 0; j < map->count; j++) {
+ if( map->list[j].zone == zone ) {
+ if( map->zone_mf_cache(j,flag,params) )
break;
- npc->parse_mapflag(maplist[j].name,empty,flag,params,empty,empty,empty);
+ npc->parse_mapflag(map->list[j].name,empty,flag,params,empty,empty,empty);
}
}
}
@@ -4694,7 +4576,7 @@ void read_map_zone_db(void) {
continue;
}
- if( strdb_exists(zone_db, zonename) ) {
+ if( strdb_exists(map->zone_db, zonename) ) {
ShowError("map_zone_db: duplicate zone name '%s', skipping...\n",zonename);
config_setting_remove_elem(zones,i);/* remove from the tree */
--zone_count;
@@ -4704,10 +4586,10 @@ void read_map_zone_db(void) {
/* is this the global template? */
if( strncmpi(zonename,MAP_ZONE_NORMAL_NAME,MAP_ZONE_NAME_LENGTH) == 0 ) {
- zone = &map_zone_all;
+ zone = &map->zone_all;
is_all = true;
} else if( strncmpi(zonename,MAP_ZONE_PK_NAME,MAP_ZONE_NAME_LENGTH) == 0 ) {
- zone = &map_zone_pk;
+ zone = &map->zone_pk;
is_all = true;
} else {
CREATE( zone, struct map_zone_data, 1 );
@@ -4722,14 +4604,14 @@ void read_map_zone_db(void) {
for(h = 0; h < config_setting_length(skills); h++) {
config_setting_t *skillinfo = config_setting_get_elem(skills, h);
name = config_setting_name(skillinfo);
- if( !map_zone_str2skillid(name) ) {
+ if( !map->zone_str2skillid(name) ) {
ShowError("map_zone_db: unknown skill (%s) in disabled_skills for zone '%s', skipping skill...\n",name,zone->name);
config_setting_remove_elem(skills,h);
--disabled_skills_count;
--h;
continue;
}
- if( !map_zone_bl_type(config_setting_get_string_elem(skills,h),&subtype) )/* we dont remove it from the three due to inheritance */
+ if( !map->zone_bl_type(config_setting_get_string_elem(skills,h),&subtype) )/* we dont remove it from the three due to inheritance */
--disabled_skills_count;
}
/* all ok, process */
@@ -4740,10 +4622,10 @@ void read_map_zone_db(void) {
enum bl_type type;
name = config_setting_name(skillinfo);
- if( (type = map_zone_bl_type(config_setting_get_string_elem(skills,h),&subtype)) ) { /* only add if enabled */
+ if( (type = map->zone_bl_type(config_setting_get_string_elem(skills,h),&subtype)) ) { /* only add if enabled */
CREATE( entry, struct map_zone_disabled_skill_entry, 1 );
- entry->nameid = map_zone_str2skillid(name);
+ entry->nameid = map->zone_str2skillid(name);
entry->type = type;
entry->subtype = subtype;
@@ -4760,7 +4642,7 @@ void read_map_zone_db(void) {
for(h = 0; h < config_setting_length(items); h++) {
config_setting_t *item = config_setting_get_elem(items, h);
name = config_setting_name(item);
- if( !map_zone_str2itemid(name) ) {
+ if( !map->zone_str2itemid(name) ) {
ShowError("map_zone_db: unknown item (%s) in disabled_items for zone '%s', skipping item...\n",name,zone->name);
config_setting_remove_elem(items,h);
--disabled_items_count;
@@ -4777,7 +4659,7 @@ void read_map_zone_db(void) {
if( config_setting_get_bool(item) ) { /* only add if enabled */
name = config_setting_name(item);
- zone->disabled_items[v++] = map_zone_str2itemid(name);
+ zone->disabled_items[v++] = map->zone_str2itemid(name);
}
}
@@ -4841,14 +4723,14 @@ void read_map_zone_db(void) {
for(h = 0; h < config_setting_length(caps); h++) {
config_setting_t *cap = config_setting_get_elem(caps, h);
name = config_setting_name(cap);
- if( !map_zone_str2skillid(name) ) {
+ if( !map->zone_str2skillid(name) ) {
ShowError("map_zone_db: unknown skill (%s) in skill_damage_cap for zone '%s', skipping skill...\n",name,zone->name);
config_setting_remove_elem(caps,h);
--capped_skills_count;
--h;
continue;
}
- if( !map_zone_bl_type(config_setting_get_string_elem(cap,1),&subtype) )/* we dont remove it from the three due to inheritance */
+ if( !map->zone_bl_type(config_setting_get_string_elem(cap,1),&subtype) )/* we dont remove it from the three due to inheritance */
--capped_skills_count;
}
/* all ok, process */
@@ -4859,10 +4741,10 @@ void read_map_zone_db(void) {
enum bl_type type;
name = config_setting_name(cap);
- if( (type = map_zone_bl_type(config_setting_get_string_elem(cap,1),&subtype)) ) { /* only add if enabled */
+ if( (type = map->zone_bl_type(config_setting_get_string_elem(cap,1),&subtype)) ) { /* only add if enabled */
CREATE( entry, struct map_zone_skill_damage_cap_entry, 1 );
- entry->nameid = map_zone_str2skillid(name);
+ entry->nameid = map->zone_str2skillid(name);
entry->cap = config_setting_get_int_elem(cap,0);
entry->type = type;
entry->subtype = subtype;
@@ -4873,7 +4755,7 @@ void read_map_zone_db(void) {
}
if( !is_all ) /* global template doesn't go into db -- since it isn't a alloc'd piece of data */
- strdb_put(zone_db, zonename, zone);
+ strdb_put(map->zone_db, zonename, zone);
}
@@ -4913,17 +4795,17 @@ void read_map_zone_db(void) {
name = config_setting_get_string_elem(inherit_tree, h);
config_setting_lookup_string(zone_e, "name", &zonename);/* will succeed for we validated it earlier */
- if( !(izone = strdb_get(zone_db, name)) ) {
+ if( !(izone = strdb_get(map->zone_db, name)) ) {
ShowError("map_zone_db: Unknown zone '%s' being inherit by zone '%s', skipping...\n",name,zonename);
continue;
}
if( strncmpi(zonename,MAP_ZONE_NORMAL_NAME,MAP_ZONE_NAME_LENGTH) == 0 ) {
- zone = &map_zone_all;
+ zone = &map->zone_all;
} else if( strncmpi(zonename,MAP_ZONE_PK_NAME,MAP_ZONE_NAME_LENGTH) == 0 ) {
- zone = &map_zone_pk;
+ zone = &map->zone_pk;
} else
- zone = strdb_get(zone_db, zonename);/* will succeed for we just put it in here */
+ zone = strdb_get(map->zone_db, zonename);/* will succeed for we just put it in here */
disabled_skills_count_i = izone->disabled_skills_count;
disabled_items_count_i = izone->disabled_items_count;
@@ -4940,7 +4822,7 @@ void read_map_zone_db(void) {
int k;
for(k = 0; k < disabled_skills_count; k++) {
config_setting_t *skillinfo = config_setting_get_elem(skills, k);
- if( map_zone_str2skillid(config_setting_name(skillinfo)) == izone->disabled_skills[j]->nameid ) {
+ if( map->zone_str2skillid(config_setting_name(skillinfo)) == izone->disabled_skills[j]->nameid ) {
break;
}
}
@@ -4966,7 +4848,7 @@ void read_map_zone_db(void) {
name = config_setting_name(item);
- if( map_zone_str2itemid(name) == izone->disabled_items[j] ) {
+ if( map->zone_str2itemid(name) == izone->disabled_items[j] ) {
if( config_setting_get_bool(item) )
continue;
break;
@@ -5033,7 +4915,7 @@ void read_map_zone_db(void) {
int k;
for(k = 0; k < capped_skills_count; k++) {
config_setting_t *cap = config_setting_get_elem(caps, k);
- if( map_zone_str2skillid(config_setting_name(cap)) == izone->capped_skills[j]->nameid ) {
+ if( map->zone_str2skillid(config_setting_name(cap)) == izone->capped_skills[j]->nameid ) {
break;
}
}
@@ -5059,8 +4941,8 @@ void read_map_zone_db(void) {
}
/**
-* @see DBApply
-*/
+ * @see DBApply
+ */
int map_db_final(DBKey key, DBData *data, va_list ap) {
struct map_data_other_server *mdos = DB->data2ptr(data);
@@ -5071,8 +4953,8 @@ int map_db_final(DBKey key, DBData *data, va_list ap) {
}
/**
-* @see DBApply
-*/
+ * @see DBApply
+ */
int nick_db_final(DBKey key, DBData *data, va_list args)
{
struct charid2nick* p = DB->data2ptr(data);
@@ -5094,39 +4976,39 @@ int cleanup_sub(struct block_list *bl, va_list ap) {
nullpo_ret(bl);
switch(bl->type) {
- case BL_PC:
- map->quit((struct map_session_data *) bl);
- break;
- case BL_NPC:
- npc->unload((struct npc_data *)bl,false);
- break;
- case BL_MOB:
- unit->free(bl,CLR_OUTSIGHT);
- break;
- case BL_PET:
- //There is no need for this, the pet is removed together with the player. [Skotlex]
- break;
- case BL_ITEM:
- map->clearflooritem(bl);
- break;
- case BL_SKILL:
- skill->delunit((struct skill_unit *) bl);
- break;
+ case BL_PC:
+ map->quit((struct map_session_data *) bl);
+ break;
+ case BL_NPC:
+ npc->unload((struct npc_data *)bl,false);
+ break;
+ case BL_MOB:
+ unit->free(bl,CLR_OUTSIGHT);
+ break;
+ case BL_PET:
+ //There is no need for this, the pet is removed together with the player. [Skotlex]
+ break;
+ case BL_ITEM:
+ map->clearflooritem(bl);
+ break;
+ case BL_SKILL:
+ skill->delunit((struct skill_unit *) bl);
+ break;
}
return 1;
}
/**
-* @see DBApply
-*/
-static int cleanup_db_sub(DBKey key, DBData *data, va_list va) {
+ * @see DBApply
+ */
+int cleanup_db_sub(DBKey key, DBData *data, va_list va) {
return map->cleanup_sub(DB->data2ptr(data), va);
}
/*==========================================
-* map destructor
-*------------------------------------------*/
+ * map destructor
+ *------------------------------------------*/
void do_final(void)
{
int i;
@@ -5136,7 +5018,7 @@ void do_final(void)
ShowStatus("Terminating...\n");
hChSys.closing = true;
HPM->event(HPET_FINAL);
- if (cpsd) aFree(cpsd);
+ if (map->cpsd) aFree(map->cpsd);
//Ladies and babies first.
iter = mapit_getallusers();
@@ -5148,14 +5030,14 @@ void do_final(void)
npc->do_clear_npc();
// remove all objects on maps
- for (i = 0; i < map->map_num; i++) {
- ShowStatus("Cleaning up maps [%d/%d]: %s..."CL_CLL"\r", i+1, map->map_num, maplist[i].name);
- if (maplist[i].m >= 0)
+ for (i = 0; i < map->count; i++) {
+ ShowStatus("Cleaning up maps [%d/%d]: %s..."CL_CLL"\r", i+1, map->count, map->list[i].name);
+ if (map->list[i].m >= 0)
map->foreachinmap(map->cleanup_sub, i, BL_ALL);
}
- ShowStatus("Cleaned up %d maps."CL_CLL"\n", map->map_num);
+ ShowStatus("Cleaned up %d maps."CL_CLL"\n", map->count);
- id_db->foreach(id_db,cleanup_db_sub);
+ map->id_db->foreach(map->id_db,map->cleanup_db_sub);
chrif->char_reset_offline();
chrif->flush_fifo();
@@ -5182,37 +5064,36 @@ void do_final(void)
bg->final();
duel->final();
elemental->final();
- do_final_maps();
+ map->list_final();
vending->final();
- map_db->destroy(map_db, map_db_final);
+ map->map_db->destroy(map->map_db, map->db_final);
mapindex_final();
- if(enable_grf)
+ if(map->enable_grf)
grfio_final();
- id_db->destroy(id_db, NULL);
- pc_db->destroy(pc_db, NULL);
- mobid_db->destroy(mobid_db, NULL);
- bossid_db->destroy(bossid_db, NULL);
- nick_db->destroy(nick_db, nick_db_final);
- charid_db->destroy(charid_db, NULL);
- iwall_db->destroy(iwall_db, NULL);
- regen_db->destroy(regen_db, NULL);
+ db_destroy(map->id_db);
+ db_destroy(map->pc_db);
+ db_destroy(map->mobid_db);
+ db_destroy(map->bossid_db);
+ map->nick_db->destroy(map->nick_db, map->nick_db_final);
+ db_destroy(map->charid_db);
+ db_destroy(map->iwall_db);
+ db_destroy(map->regen_db);
- map_sql_close();
- ers_destroy(map_iterator_ers);
+ map->sql_close();
+ ers_destroy(map->iterator_ers);
- aFree(maplist);
+ aFree(map->list);
- if( !enable_grf )
- aFree(map_cache_buffer);
+ if( !map->enable_grf )
+ aFree(map->cache_buffer);
ShowStatus("Finished.\n");
}
-static int map_abort_sub(struct map_session_data* sd, va_list ap)
-{
+int map_abort_sub(struct map_session_data* sd, va_list ap) {
chrif->save(sd,1);
return 1;
}
@@ -5233,19 +5114,19 @@ void do_abort(void)
run = 1;
if (!chrif->isconnected())
{
- if (pc_db->size(pc_db))
- ShowFatalError("Server has crashed without a connection to the char-server, %u characters can't be saved!\n", pc_db->size(pc_db));
+ if (db_size(map->pc_db))
+ ShowFatalError("Server has crashed without a connection to the char-server, %u characters can't be saved!\n", db_size(map->pc_db));
return;
}
ShowError("Server received crash signal! Attempting to save all online characters!\n");
- map->map_foreachpc(map_abort_sub);
+ map->foreachpc(map->abort_sub);
chrif->flush_fifo();
}
/*======================================================
* Map-Server Version Screen [MC Cameri]
*------------------------------------------------------*/
-static void map_helpscreen(bool do_exit)
+void map_helpscreen(bool do_exit)
{
ShowInfo("Usage: %s [options]\n", SERVER_NAME);
ShowInfo("\n");
@@ -5266,9 +5147,9 @@ static void map_helpscreen(bool do_exit)
}
/*======================================================
-* Map-Server Version Screen [MC Cameri]
-*------------------------------------------------------*/
-static void map_versionscreen(bool do_exit) {
+ * Map-Server Version Screen [MC Cameri]
+ *------------------------------------------------------*/
+void map_versionscreen(bool do_exit) {
const char *svn = get_svn_revision();
const char *git = get_git_hash();
ShowInfo(CL_WHITE"Hercules version: %s" CL_RESET"\n", git[0] != HERC_UNKNOWN_VER ? git : svn[0] != HERC_UNKNOWN_VER ? svn : "Unknown");
@@ -5303,7 +5184,7 @@ void do_shutdown(void)
}
}
-static bool map_arg_next_value(const char* option, int i, int argc)
+bool map_arg_next_value(const char* option, int i, int argc)
{
if( i >= argc-1 ) {
ShowWarning("Missing value for option '%s'.\n", option);
@@ -5327,15 +5208,15 @@ CPCMD(gm_position) {
return;
}
- if( x < 0 || x >= maplist[m].xs || y < 0 || y >= maplist[m].ys ) {
+ if( x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys ) {
ShowError("gm:info '"CL_WHITE"%d %d"CL_RESET"' is out of '"CL_WHITE"%s"CL_RESET"' map bounds!\n",x,y,map_name);
return;
}
ShowInfo("HCP: updated console's game position to '"CL_WHITE"%d %d %s"CL_RESET"'\n",x,y,map_name);
- cpsd->bl.x = x;
- cpsd->bl.y = y;
- cpsd->bl.m = m;
+ map->cpsd->bl.x = x;
+ map->cpsd->bl.y = y;
+ map->cpsd->bl.m = m;
}
CPCMD(gm_use) {
@@ -5343,23 +5224,23 @@ CPCMD(gm_use) {
ShowError("gm:use invalid syntax. use '"CL_WHITE"gm:use @command <optional params>"CL_RESET"'\n");
return;
}
- cpsd->fd = -2;
- if( !atcommand->parse(cpsd->fd, cpsd, line, 0) )
+ map->cpsd->fd = -2;
+ if( !atcommand->parse(map->cpsd->fd, map->cpsd, line, 0) )
ShowInfo("HCP: '"CL_WHITE"%s"CL_RESET"' failed\n",line);
else
ShowInfo("HCP: '"CL_WHITE"%s"CL_RESET"' was used\n",line);
- cpsd->fd = 0;
+ map->cpsd->fd = 0;
}
/* Hercules Console Parser */
void map_cp_defaults(void) {
#ifdef CONSOLE_INPUT
/* default HCP data */
- cpsd = pc->get_dummy_sd();
- strcpy(cpsd->status.name, "Hercules Console");
- cpsd->bl.x = MAP_DEFAULT_X;
- cpsd->bl.y = MAP_DEFAULT_Y;
- cpsd->bl.m = map->mapname2mapid(MAP_DEFAULT);
+ map->cpsd = pc->get_dummy_sd();
+ strcpy(map->cpsd->status.name, "Hercules Console");
+ map->cpsd->bl.x = MAP_DEFAULT_X;
+ map->cpsd->bl.y = MAP_DEFAULT_Y;
+ map->cpsd->bl.m = map->mapname2mapid(MAP_DEFAULT);
console->addCommand("gm:info",CPCMD_A(gm_position));
console->addCommand("gm:use",CPCMD_A(gm_use));
@@ -5409,7 +5290,7 @@ void map_hp_symbols(void) {
/* partial */
HPM->share(mapit,"mapit");
/* sql link */
- HPM->share(mmysql_handle,"sql_handle");
+ HPM->share(map->mysql_handle,"sql_handle");
/* specific */
HPM->share(atcommand->create,"addCommand");
HPM->share(script->addScript,"addScript");
@@ -5417,7 +5298,7 @@ void map_hp_symbols(void) {
HPM->share(HPM_map_getFromMSD,"getFromMSD");
HPM->share(HPM_map_removeFromMSD,"removeFromMSD");
/* vars */
- HPM->share(maplist,"maplist");
+ HPM->share(map->list,"map->list");
}
void map_load_defaults(void) {
@@ -5470,44 +5351,6 @@ int do_init(int argc, char *argv[])
map_defaults();
- map->map_num = 0;
-
- sprintf(map->db_path ,"db");
- sprintf(map->help_txt ,"conf/help.txt");
- sprintf(map->help2_txt ,"conf/help2.txt");
- sprintf(map->charhelp_txt ,"conf/charhelp.txt");
-
- sprintf(map->wisp_server_name ,"Server"); // can be modified in char-server configuration file
-
- map->autosave_interval = DEFAULT_AUTOSAVE_INTERVAL;
- map->minsave_interval = 100;
- map->save_settings = 0xFFFF;
- map->agit_flag = 0;
- map->agit2_flag = 0;
- map->night_flag = 0; // 0=day, 1=night [Yor]
- map->enable_spy = 0; //To enable/disable @spy commands, which consume too much cpu time when sending packets. [Skotlex]
-
- map->db_use_sql_item_db = 0;
- map->db_use_sql_mob_db = 0;
- map->db_use_sql_mob_skill_db = 0;
-
- sprintf(map->item_db_db, "item_db");
- sprintf(map->item_db2_db, "item_db2");
- sprintf(map->item_db_re_db, "item_db_re");
- sprintf(map->mob_db_db, "mob_db");
- sprintf(map->mob_db2_db, "mob_db2");
- sprintf(map->mob_skill_db_db, "mob_skill_db");
- sprintf(map->mob_skill_db2_db, "mob_skill_db2");
- sprintf(map->interreg_db, "interreg");
-
- map->INTER_CONF_NAME="conf/inter-server.conf";
- map->LOG_CONF_NAME="conf/logs.conf";
- map->MAP_CONF_NAME = "conf/map-server.conf";
- map->BATTLE_CONF_FILENAME = "conf/battle.conf";
- map->ATCOMMAND_CONF_FILENAME = "conf/atcommand.conf";
- map->SCRIPT_CONF_NAME = "conf/script.conf";
- map->MSG_CONF_NAME = "conf/messages.conf";
- map->GRF_PATH_FILENAME = "conf/grf-files.txt";
rnd_init();
for( i = 1; i < argc ; i++ ) {
@@ -5520,32 +5363,32 @@ int do_init(int argc, char *argv[])
arg++;
if( strcmp(arg, "help") == 0 ) {
- map_helpscreen(true);
+ map->helpscreen(true);
} else if( strcmp(arg, "version") == 0 ) {
- map_versionscreen(true);
+ map->versionscreen(true);
} else if( strcmp(arg, "map-config") == 0 ) {
- if( map_arg_next_value(arg, i, argc) )
+ if( map->arg_next_value(arg, i, argc) )
map->MAP_CONF_NAME = argv[++i];
} else if( strcmp(arg, "battle-config") == 0 ) {
- if( map_arg_next_value(arg, i, argc) )
+ if( map->arg_next_value(arg, i, argc) )
map->BATTLE_CONF_FILENAME = argv[++i];
} else if( strcmp(arg, "atcommand-config") == 0 ) {
- if( map_arg_next_value(arg, i, argc) )
+ if( map->arg_next_value(arg, i, argc) )
map->ATCOMMAND_CONF_FILENAME = argv[++i];
} else if( strcmp(arg, "script-config") == 0 ) {
- if( map_arg_next_value(arg, i, argc) )
+ if( map->arg_next_value(arg, i, argc) )
map->SCRIPT_CONF_NAME = argv[++i];
} else if( strcmp(arg, "msg-config") == 0 ) {
- if( map_arg_next_value(arg, i, argc) )
+ if( map->arg_next_value(arg, i, argc) )
map->MSG_CONF_NAME = argv[++i];
} else if( strcmp(arg, "grf-path-file") == 0 ) {
- if( map_arg_next_value(arg, i, argc) )
+ if( map->arg_next_value(arg, i, argc) )
map->GRF_PATH_FILENAME = argv[++i];
} else if( strcmp(arg, "inter-config") == 0 ) {
- if( map_arg_next_value(arg, i, argc) )
+ if( map->arg_next_value(arg, i, argc) )
map->INTER_CONF_NAME = argv[++i];
} else if( strcmp(arg, "log-config") == 0 ) {
- if( map_arg_next_value(arg, i, argc) )
+ if( map->arg_next_value(arg, i, argc) )
map->LOG_CONF_NAME = argv[++i];
} else if( strcmp(arg, "run-once") == 0 ) { // close the map-server as soon as its done.. for testing [Celest]
runflag = CORE_ST_STOP;
@@ -5553,32 +5396,33 @@ int do_init(int argc, char *argv[])
ShowError("Unknown option '%s'.\n", argv[i]);
exit(EXIT_FAILURE);
}
- } else switch( arg[0] ) {// short option
- case '?':
- case 'h':
- map_helpscreen(true);
- break;
- case 'v':
- map_versionscreen(true);
- break;
- default:
- ShowError("Unknown option '%s'.\n", argv[i]);
- exit(EXIT_FAILURE);
+ } else {
+ switch( arg[0] ) {// short option
+ case '?':
+ case 'h':
+ map->helpscreen(true);
+ break;
+ case 'v':
+ map->versionscreen(true);
+ break;
+ default:
+ ShowError("Unknown option '%s'.\n", argv[i]);
+ exit(EXIT_FAILURE);
+ }
}
}
- memset(&index2mapid, -1, sizeof(index2mapid));
map_load_defaults();
- map_config_read(map->MAP_CONF_NAME);
- CREATE(maplist,struct map_data,map->map_num);
- map->map_num = 0;
- map_config_read_sub(map->MAP_CONF_NAME);
+ map->config_read(map->MAP_CONF_NAME);
+ CREATE(map->list,struct map_data,map->count);
+ map->count = 0;
+ map->config_read_sub(map->MAP_CONF_NAME);
// loads npcs
map->reloadnpc(false);
chrif->checkdefaultlogin();
- if (!map_ip_set || !char_ip_set) {
+ if (!map->ip_set || !map->char_ip_set) {
char ip_str[16];
ip2str(addr_[0], ip_str);
@@ -5591,46 +5435,45 @@ int do_init(int argc, char *argv[])
ShowInfo("Defaulting to %s as our IP address\n", ip_str);
- if (!map_ip_set)
+ if (!map->ip_set)
clif->setip(ip_str);
- if (!char_ip_set)
+ if (!map->char_ip_set)
chrif->setip(ip_str);
}
battle->config_read(map->BATTLE_CONF_FILENAME);
atcommand->msg_read(map->MSG_CONF_NAME);
script->config_read(map->SCRIPT_CONF_NAME);
- inter_config_read(map->INTER_CONF_NAME);
+ map->inter_config_read(map->INTER_CONF_NAME);
logs->config_read(map->LOG_CONF_NAME);
- id_db = idb_alloc(DB_OPT_BASE);
- pc_db = idb_alloc(DB_OPT_BASE); //Added for reliable map->id2sd() use. [Skotlex]
- mobid_db = idb_alloc(DB_OPT_BASE); //Added to lower the load of the lazy mob ai. [Skotlex]
- bossid_db = idb_alloc(DB_OPT_BASE); // Used for Convex Mirror quick MVP search
- map_db = uidb_alloc(DB_OPT_BASE);
- nick_db = idb_alloc(DB_OPT_BASE);
- charid_db = idb_alloc(DB_OPT_BASE);
- regen_db = idb_alloc(DB_OPT_BASE); // efficient status_natural_heal processing
+ map->id_db = idb_alloc(DB_OPT_BASE);
+ map->pc_db = idb_alloc(DB_OPT_BASE); //Added for reliable map->id2sd() use. [Skotlex]
+ map->mobid_db = idb_alloc(DB_OPT_BASE); //Added to lower the load of the lazy mob ai. [Skotlex]
+ map->bossid_db = idb_alloc(DB_OPT_BASE); // Used for Convex Mirror quick MVP search
+ map->map_db = uidb_alloc(DB_OPT_BASE);
+ map->nick_db = idb_alloc(DB_OPT_BASE);
+ map->charid_db = idb_alloc(DB_OPT_BASE);
+ map->regen_db = idb_alloc(DB_OPT_BASE); // efficient status_natural_heal processing
+ map->iwall_db = strdb_alloc(DB_OPT_RELEASE_DATA,2*NAME_LENGTH+2+1); // [Zephyrus] Invisible Walls
+ map->zone_db = strdb_alloc(DB_OPT_DUP_KEY|DB_OPT_RELEASE_DATA, MAP_ZONE_NAME_LENGTH);
- iwall_db = strdb_alloc(DB_OPT_RELEASE_DATA,2*NAME_LENGTH+2+1); // [Zephyrus] Invisible Walls
- zone_db = strdb_alloc(DB_OPT_DUP_KEY|DB_OPT_RELEASE_DATA, MAP_ZONE_NAME_LENGTH);
+ map->iterator_ers = ers_new(sizeof(struct s_mapiterator),"map.c::map_iterator_ers",ERS_OPT_NONE);
- map_iterator_ers = ers_new(sizeof(struct s_mapiterator),"map.c::map_iterator_ers",ERS_OPT_NONE);
-
- map_sql_init();
+ map->sql_init();
if (logs->config.sql_logs)
- log_sql_init();
+ logs->sql_init();
mapindex_init();
- if(enable_grf)
+ if(map->enable_grf)
grfio_init(map->GRF_PATH_FILENAME);
- map_readallmaps();
+ map->readallmaps();
- timer->add_func_list(map_freeblock_timer, "map_freeblock_timer");
- timer->add_func_list(map_clearflooritem_timer, "map_clearflooritem_timer");
- timer->add_func_list(map_removemobs_timer, "map_removemobs_timer");
- timer->add_interval(timer->gettick()+1000, map_freeblock_timer, 0, 0, 60*1000);
+ timer->add_func_list(map->freeblock_timer, "map_freeblock_timer");
+ timer->add_func_list(map->clearflooritem_timer, "map_clearflooritem_timer");
+ timer->add_func_list(map->removemobs_timer, "map_removemobs_timer");
+ timer->add_interval(timer->gettick()+1000, map->freeblock_timer, 0, 0, 60*1000);
HPM->load_sub = HPM_map_plugin_load_sub;
HPM->symbol_defaults_sub = map_hp_symbols;
@@ -5646,7 +5489,7 @@ int do_init(int argc, char *argv[])
script->init();
itemdb->init();
skill->init();
- read_map_zone_db();/* read after item and skill initalization */
+ map->read_zone_db();/* read after item and skill initalization */
mob->init();
pc->init();
status->init();
@@ -5669,13 +5512,13 @@ int do_init(int argc, char *argv[])
if (battle_config.pk_mode)
ShowNotice("Server is running on '"CL_WHITE"PK Mode"CL_RESET"'.\n");
- Sql_HerculesUpdateCheck(mmysql_handle);
+ Sql_HerculesUpdateCheck(map->mysql_handle);
#ifdef CONSOLE_INPUT
- console->setSQL(mmysql_handle);
+ console->setSQL(map->mysql_handle);
#endif
- ShowStatus("Server is '"CL_GREEN"ready"CL_RESET"' and listening on port '"CL_WHITE"%d"CL_RESET"'.\n\n", map_port);
+ ShowStatus("Server is '"CL_GREEN"ready"CL_RESET"' and listening on port '"CL_WHITE"%d"CL_RESET"'.\n\n", map->port);
if( runflag != CORE_ST_STOP ) {
shutdown_callback = map->do_shutdown;
@@ -5697,6 +5540,89 @@ int do_init(int argc, char *argv[])
void map_defaults(void) {
map = &map_s;
+ /* */
+ map->count = 0;
+
+ sprintf(map->db_path ,"db");
+ sprintf(map->help_txt ,"conf/help.txt");
+ sprintf(map->help2_txt ,"conf/help2.txt");
+ sprintf(map->charhelp_txt ,"conf/charhelp.txt");
+
+ sprintf(map->wisp_server_name ,"Server"); // can be modified in char-server configuration file
+
+ map->autosave_interval = DEFAULT_AUTOSAVE_INTERVAL;
+ map->minsave_interval = 100;
+ map->save_settings = 0xFFFF;
+ map->agit_flag = 0;
+ map->agit2_flag = 0;
+ map->night_flag = 0; // 0=day, 1=night [Yor]
+ map->enable_spy = 0; //To enable/disable @spy commands, which consume too much cpu time when sending packets. [Skotlex]
+
+ map->db_use_sql_item_db = 0;
+ map->db_use_sql_mob_db = 0;
+ map->db_use_sql_mob_skill_db = 0;
+
+ sprintf(map->item_db_db, "item_db");
+ sprintf(map->item_db2_db, "item_db2");
+ sprintf(map->item_db_re_db, "item_db_re");
+ sprintf(map->mob_db_db, "mob_db");
+ sprintf(map->mob_db2_db, "mob_db2");
+ sprintf(map->mob_skill_db_db, "mob_skill_db");
+ sprintf(map->mob_skill_db2_db, "mob_skill_db2");
+ sprintf(map->interreg_db, "interreg");
+
+ map->INTER_CONF_NAME="conf/inter-server.conf";
+ map->LOG_CONF_NAME="conf/logs.conf";
+ map->MAP_CONF_NAME = "conf/map-server.conf";
+ map->BATTLE_CONF_FILENAME = "conf/battle.conf";
+ map->ATCOMMAND_CONF_FILENAME = "conf/atcommand.conf";
+ map->SCRIPT_CONF_NAME = "conf/script.conf";
+ map->MSG_CONF_NAME = "conf/messages.conf";
+ map->GRF_PATH_FILENAME = "conf/grf-files.txt";
+
+ map->default_codepage[0] = '\0';
+ map->server_port = 3306;
+ sprintf(map->server_ip,"127.0.0.1");
+ sprintf(map->server_id,"ragnarok");
+ sprintf(map->server_pw,"ragnarok");
+ sprintf(map->server_db,"ragnarok");
+ map->mysql_handle = NULL;
+
+ map->port = 0;
+ map->users = 0;
+ map->ip_set = 0;
+ map->char_ip_set = 0;
+ map->enable_grf = 0;
+
+ memset(&map->index2mapid, -1, sizeof(map->index2mapid));
+
+ map->id_db = NULL;
+ map->pc_db = NULL;
+ map->mobid_db = NULL;
+ map->bossid_db = NULL;
+ map->map_db = NULL;
+ map->nick_db = NULL;
+ map->charid_db = NULL;
+ map->regen_db = NULL;
+ map->zone_db = NULL;
+ map->iwall_db = NULL;
+
+ //all in a big chunk, respects order
+ memset(map->block_free,0,sizeof(map->block_free)
+ + sizeof(map->block_free_count)
+ + sizeof(map->block_free_lock)
+ + sizeof(map->bl_list)
+ + sizeof(map->bl_list_count)
+ + sizeof(map->bl_head)
+ + sizeof(map->zone_all)
+ + sizeof(map->zone_pk)
+ );
+
+ map->cpsd = NULL;
+ map->list = NULL;
+
+ map->iterator_ers = NULL;
+ map->cache_buffer = NULL;
/* funcs */
map->zone_init = map_zone_init;
map->zone_remove = map_zone_remove;
@@ -5742,16 +5668,16 @@ void map_defaults(void) {
map->charid2nick = map_charid2nick;
map->charid2sd = map_charid2sd;
- map->vmap_foreachpc = map_vmap_foreachpc;
- map->map_foreachpc = map_map_foreachpc;
- map->vmap_foreachmob = map_vmap_foreachmob;
- map->map_foreachmob = map_map_foreachmob;
- map->vmap_foreachnpc = map_vmap_foreachnpc;
- map->map_foreachnpc = map_map_foreachnpc;
- map->vmap_foreachregen = map_vmap_foreachregen;
- map->map_foreachregen = map_map_foreachregen;
- map->vmap_foreachiddb = map_vmap_foreachiddb;
- map->map_foreachiddb = map_map_foreachiddb;
+ map->vforeachpc = map_vforeachpc;
+ map->foreachpc = map_foreachpc;
+ map->vforeachmob = map_vforeachmob;
+ map->foreachmob = map_foreachmob;
+ map->vforeachnpc = map_vforeachnpc;
+ map->foreachnpc = map_foreachnpc;
+ map->vforeachregen = map_vforeachregen;
+ map->foreachregen = map_foreachregen;
+ map->vforeachiddb = map_vforeachiddb;
+ map->foreachiddb = map_foreachiddb;
map->vforeachinrange = map_vforeachinrange;
map->foreachinrange = map_foreachinrange;
@@ -5819,7 +5745,57 @@ void map_defaults(void) {
map->do_shutdown = do_shutdown;
- /* FIXME: temporary until the map.c "Hercules Renewal Phase One" design is complete. [Ind] */
+ map->freeblock_timer = map_freeblock_timer;
+ map->searchrandfreecell = map_searchrandfreecell;
+ map->count_sub = map_count_sub;
+ map->create_charid2nick = create_charid2nick;
+ map->removemobs_sub = map_removemobs_sub;
+ map->gat2cell = map_gat2cell;
+ map->cell2gat = map_cell2gat;
+ map->getcellp = map_getcellp;
+ map->setcell = map_setcell;
+ map->sub_getcellp = map_sub_getcellp;
+ map->sub_setcell = map_sub_setcell;
+ map->iwall_nextxy = map_iwall_nextxy;
+ map->create_map_data_other_server = create_map_data_other_server;
+ map->eraseallipport_sub = map_eraseallipport_sub;
+ map->init_mapcache = map_init_mapcache;
+ map->readfromcache = map_readfromcache;
+ map->addmap = map_addmap;
+ map->delmapid = map_delmapid;
+ map->zone_db_clear = map_zone_db_clear;
+ map->list_final = do_final_maps;
+ map->waterheight = map_waterheight;
+ map->readgat = map_readgat;
+ map->readallmaps = map_readallmaps;
+ map->config_read = map_config_read;
+ map->config_read_sub = map_config_read_sub;
+ map->reloadnpc_sub = map_reloadnpc_sub;
+ map->inter_config_read = inter_config_read;
+ map->sql_init = map_sql_init;
+ map->sql_close = map_sql_close;
+ map->zone_mf_cache = map_zone_mf_cache;
+ map->zone_str2itemid = map_zone_str2itemid;
+ map->zone_str2skillid = map_zone_str2skillid;
+ map->zone_bl_type = map_zone_bl_type;
+ map->read_zone_db = read_map_zone_db;
+ map->db_final = map_db_final;
+ map->nick_db_final = nick_db_final;
+ map->cleanup_db_sub = cleanup_db_sub;
+ map->abort_sub = map_abort_sub;
+ map->helpscreen = map_helpscreen;
+ map->versionscreen = map_versionscreen;
+ map->arg_next_value = map_arg_next_value;
+
+#ifdef CELL_NOSTACK
+ map->addblcell = map_addblcell;
+ map->delblcell = map_delblcell;
+#endif
+
+ /**
+ * mapit interface
+ **/
+
mapit = &mapit_s;
mapit->alloc = mapit_alloc;
diff --git a/src/map/map.h b/src/map/map.h
index 69152ec57..67fdfcf96 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -11,6 +11,7 @@
#include "../common/mapindex.h"
#include "../common/db.h"
#include "../config/core.h"
+#include "../common/sql.h"
#include "atcommand.h"
#include <stdarg.h>
@@ -40,6 +41,11 @@ enum E_MAPSERVER_ST {
#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
+
+
// Added definitions for WoESE objects. [L0ne_W0lf]
enum MOBID {
MOBID_EMPERIUM = 1288,
@@ -67,10 +73,12 @@ enum MOBID {
#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
#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.
@@ -215,13 +223,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) (maplist[m].flag.pvp || maplist[m].flag.gvg_dungeon || maplist[m].flag.gvg || ((map->agit_flag || map->agit2_flag) && maplist[m].flag.gvg_castle) || maplist[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) (maplist[m].flag.gvg || ((map->agit_flag || map->agit2_flag) && maplist[m].flag.gvg_castle))
+#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) (maplist[m].flag.gvg || maplist[m].flag.gvg_castle)
+#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) (maplist[m].flag.town || maplist[m].flag.pvp || maplist[m].flag.gvg || maplist[m].flag.battleground)
+#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)
//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]
@@ -460,19 +468,19 @@ typedef enum {
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.
@@ -525,9 +533,6 @@ struct map_zone_skill_damage_cap_entry {
#define MAP_ZONE_PK_NAME "PK Mode"
#define MAP_ZONE_MAPFLAG_LENGTH 50
-//TODO place it in the map interface
-DBMap *zone_db;/* string => struct map_zone_data */
-
struct map_zone_data {
char name[MAP_ZONE_NAME_LENGTH];/* 20'd */
struct map_zone_disabled_skill_entry **disabled_skills;
@@ -542,9 +547,6 @@ struct map_zone_data {
int capped_skills_count;
};
-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) */
-
struct map_drop_list {
int drop_id;
int drop_type;
@@ -696,10 +698,7 @@ struct map_data_other_server {
uint16 port;
};
-
-struct map_data *maplist;
-
-#define map_id2index(id) maplist[(id)].index
+#define map_id2index(id) map->list[(id)].index
/// Bitfield of flags for the iterator.
enum e_mapitflags {
@@ -718,7 +717,7 @@ struct mapit_interface {
struct block_list* (*next) (struct s_mapiterator* iter);
struct block_list* (*prev) (struct s_mapiterator* iter);
bool (*exists) (struct s_mapiterator* iter);
-} mapit_s;
+};
struct mapit_interface *mapit;
@@ -743,11 +742,29 @@ typedef struct elemental_data TBL_ELEM;
#define BL_CAST(type_, bl) \
( ((bl) == (struct block_list*)NULL || (bl)->type != (type_)) ? (T ## type_ *)NULL : (T ## type_ *)(bl) )
-#include "../common/sql.h"
+struct charid_request {
+ struct charid_request* next;
+ int charid;// who want to be notified of the nick
+};
+struct charid2nick {
+ char nick[NAME_LENGTH];
+ 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];
+ int16 xs;
+ int16 ys;
+ int32 len;
+};
-extern Sql* mmysql_handle;
-extern Sql* logmysql_handle;
/*=====================================
* Interface : map.h
@@ -757,7 +774,7 @@ extern Sql* logmysql_handle;
struct map_interface {
/* vars */
- int map_num;
+ int count;
int autosave_interval;
int minsave_interval;
@@ -796,6 +813,47 @@ struct map_interface {
char mob_skill_db2_db[32];
char interreg_db[32];
+ char default_codepage[32];
+
+ int server_port;
+ char server_ip[32];
+ char server_id[32];
+ char server_pw[32];
+ char server_db[32];
+ Sql* mysql_handle;
+
+ int port;
+ int users;
+ int enable_grf; //To enable/disable reading maps from GRF files, bypassing mapcache [blackhole89]
+ int ip_set;
+ int char_ip_set;
+
+ int16 index2mapid[MAX_MAPINDEX];
+ /* */
+ DBMap* id_db; // int id -> struct block_list*
+ DBMap* pc_db; // int id -> struct map_session_data*
+ DBMap* mobid_db; // int id -> struct mob_data*
+ DBMap* bossid_db; // int id -> struct mob_data* (MVP db)
+ DBMap* map_db; // unsigned int mapindex -> struct map_data_other_server*
+ DBMap* nick_db; // int char_id -> struct charid2nick* (requested names of offline characters)
+ DBMap* charid_db; // int char_id -> struct map_session_data*
+ 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[block_free_max];
+ int block_free_count, block_free_lock;
+ struct block_list *bl_list[BL_LIST_MAX];
+ int bl_list_count;
+ 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) */
+ struct map_session_data *cpsd;
+ 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
/* funcs */
void (*zone_init) (void);
void (*zone_remove) (int m);
@@ -818,17 +876,17 @@ struct map_interface {
// blocklist manipulation
int (*addblock) (struct block_list* bl);
int (*delblock) (struct block_list* bl);
- int (*moveblock) (struct block_list *, int, int, unsigned int);
+ int (*moveblock) (struct block_list *bl, int x1, int y1, unsigned int tick);
//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);
+ struct skill_unit * (*find_skill_unit_oncell) (struct block_list* target,int16 x,int16 y,uint16 skill_id,struct skill_unit* out_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 *);
+ int (*quit) (struct map_session_data *sd);
// npc
- bool (*addnpc) (int16 m,struct npc_data *);
+ bool (*addnpc) (int16 m,struct npc_data *nd);
// 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);
@@ -841,16 +899,16 @@ struct map_interface {
const char* (*charid2nick) (int charid);
struct map_session_data* (*charid2sd) (int charid);
- void (*vmap_foreachpc) (int (*func)(struct map_session_data* sd, va_list args), va_list args);
- void (*map_foreachpc) (int (*func)(struct map_session_data* sd, va_list args), ...);
- void (*vmap_foreachmob) (int (*func)(struct mob_data* md, va_list args), va_list args);
- void (*map_foreachmob) (int (*func)(struct mob_data* md, va_list args), ...);
- void (*vmap_foreachnpc) (int (*func)(struct npc_data* nd, va_list args), va_list args);
- void (*map_foreachnpc) (int (*func)(struct npc_data* nd, va_list args), ...);
- void (*vmap_foreachregen) (int (*func)(struct block_list* bl, va_list args), va_list args);
- void (*map_foreachregen) (int (*func)(struct block_list* bl, va_list args), ...);
- void (*vmap_foreachiddb) (int (*func)(struct block_list* bl, va_list args), va_list args);
- void (*map_foreachiddb) (int (*func)(struct block_list* bl, va_list args), ...);
+ void (*vforeachpc) (int (*func)(struct map_session_data* sd, va_list args), va_list args);
+ void (*foreachpc) (int (*func)(struct map_session_data* sd, va_list args), ...);
+ void (*vforeachmob) (int (*func)(struct mob_data* md, va_list args), va_list args);
+ void (*foreachmob) (int (*func)(struct mob_data* md, va_list args), ...);
+ void (*vforeachnpc) (int (*func)(struct npc_data* nd, va_list args), va_list args);
+ void (*foreachnpc) (int (*func)(struct npc_data* nd, va_list args), ...);
+ void (*vforeachregen) (int (*func)(struct block_list* bl, va_list args), va_list args);
+ void (*foreachregen) (int (*func)(struct block_list* bl, va_list args), ...);
+ void (*vforeachiddb) (int (*func)(struct block_list* bl, va_list args), va_list args);
+ void (*foreachiddb) (int (*func)(struct block_list* bl, va_list args), ...);
int (*vforeachinrange) (int (*func)(struct block_list*,va_list), struct block_list* center, int16 range, int type, va_list ap);
int (*foreachinrange) (int (*func)(struct block_list*,va_list), struct block_list* center, int16 range, int type, ...);
@@ -887,10 +945,10 @@ struct map_interface {
int (*setipport) (unsigned short mapindex, uint32 ip, uint16 port);
int (*eraseipport) (unsigned short mapindex, uint32 ip, uint16 port);
int (*eraseallipport) (void);
- void (*addiddb) (struct block_list *);
+ void (*addiddb) (struct block_list *bl);
void (*deliddb) (struct block_list *bl);
/* */
- struct map_session_data * (*nick2sd) (const char*);
+ struct map_session_data * (*nick2sd) (const char *nick);
struct mob_data * (*getmob_boss) (int16 m);
struct mob_data * (*id2boss) (int id);
// reload config file looking only for npcs
@@ -918,6 +976,52 @@ struct map_interface {
void (*clean) (int i);
void (*do_shutdown) (void);
+
+ int (*freeblock_timer) (int tid, unsigned int tick, int id, intptr_t data);
+ int (*searchrandfreecell) (int16 m, 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);
+ 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);
+ 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);
+ int (*eraseallipport_sub) (DBKey key, DBData *data, va_list va);
+ char* (*init_mapcache) (FILE *fp);
+ int (*readfromcache) (struct map_data *m, char *buffer);
+ int (*addmap) (char *mapname);
+ void (*delmapid) (int id);
+ void (*zone_db_clear) (void);
+ void (*list_final) (void);
+ 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);
+ 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);
+ 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);
+ int (*db_final) (DBKey key, DBData *data, va_list ap);
+ int (*nick_db_final) (DBKey key, DBData *data, va_list args);
+ int (*cleanup_db_sub) (DBKey key, DBData *data, va_list va);
+ int (*abort_sub) (struct map_session_data *sd, va_list ap);
+ void (*helpscreen) (bool do_exit);
+ void (*versionscreen) (bool do_exit);
+ bool (*arg_next_value) (const char *option, int i, int argc);
+#ifdef CELL_NOSTACK
+ void (*addblcell) (struct block_list *bl);
+ void (*delblcell) (struct block_list *bl);
+#endif
};
struct map_interface *map;
diff --git a/src/map/mapreg_sql.c b/src/map/mapreg_sql.c
index 0a0b8f75f..902b7c39b 100644
--- a/src/map/mapreg_sql.c
+++ b/src/map/mapreg_sql.c
@@ -10,7 +10,7 @@
#include "../common/sql.h"
#include "../common/strlib.h"
#include "../common/timer.h"
-#include "map.h" // mmysql_handle
+#include "map.h" // map->mysql_handle
#include "script.h"
#include "mapreg.h"
#include <stdlib.h>
@@ -55,9 +55,9 @@ bool mapreg_setreg(int uid, int val) {
if(name[1] != '@') {// write new variable to database
char tmp_str[32*2+1];
- SQL->EscapeStringLen(mmysql_handle, tmp_str, name, strnlen(name, 32));
- if( SQL_ERROR == SQL->Query(mmysql_handle, "INSERT INTO `%s`(`varname`,`index`,`value`) VALUES ('%s','%d','%d')", mapreg->table, tmp_str, i, val) )
- Sql_ShowDebug(mmysql_handle);
+ SQL->EscapeStringLen(map->mysql_handle, tmp_str, name, strnlen(name, 32));
+ if( SQL_ERROR == SQL->Query(map->mysql_handle, "INSERT INTO `%s`(`varname`,`index`,`value`) VALUES ('%s','%d','%d')", mapreg->table, tmp_str, i, val) )
+ Sql_ShowDebug(map->mysql_handle);
}
idb_put(mapreg->db, uid, m);
}
@@ -68,8 +68,8 @@ bool mapreg_setreg(int uid, int val) {
idb_remove(mapreg->db,uid);
if( name[1] != '@' ) {// Remove from database because it is unused.
- if( SQL_ERROR == SQL->Query(mmysql_handle, "DELETE FROM `%s` WHERE `varname`='%s' AND `index`='%d'", mapreg->table, name, i) )
- Sql_ShowDebug(mmysql_handle);
+ if( SQL_ERROR == SQL->Query(map->mysql_handle, "DELETE FROM `%s` WHERE `varname`='%s' AND `index`='%d'", mapreg->table, name, i) )
+ Sql_ShowDebug(map->mysql_handle);
}
}
@@ -85,8 +85,8 @@ bool mapreg_setregstr(int uid, const char* str) {
if( str == NULL || *str == 0 ) {
if(name[1] != '@') {
- if( SQL_ERROR == SQL->Query(mmysql_handle, "DELETE FROM `%s` WHERE `varname`='%s' AND `index`='%d'", mapreg->table, name, i) )
- Sql_ShowDebug(mmysql_handle);
+ if( SQL_ERROR == SQL->Query(map->mysql_handle, "DELETE FROM `%s` WHERE `varname`='%s' AND `index`='%d'", mapreg->table, name, i) )
+ Sql_ShowDebug(map->mysql_handle);
}
if( (m = idb_get(mapreg->str_db,uid)) ) {
if( m->u.str != NULL )
@@ -113,10 +113,10 @@ bool mapreg_setregstr(int uid, const char* str) {
if(name[1] != '@') { //put returned null, so we must insert.
char tmp_str[32*2+1];
char tmp_str2[255*2+1];
- SQL->EscapeStringLen(mmysql_handle, tmp_str, name, strnlen(name, 32));
- SQL->EscapeStringLen(mmysql_handle, tmp_str2, str, strnlen(str, 255));
- if( SQL_ERROR == SQL->Query(mmysql_handle, "INSERT INTO `%s`(`varname`,`index`,`value`) VALUES ('%s','%d','%s')", mapreg->table, tmp_str, i, tmp_str2) )
- Sql_ShowDebug(mmysql_handle);
+ SQL->EscapeStringLen(map->mysql_handle, tmp_str, name, strnlen(name, 32));
+ SQL->EscapeStringLen(map->mysql_handle, tmp_str2, str, strnlen(str, 255));
+ if( SQL_ERROR == SQL->Query(map->mysql_handle, "INSERT INTO `%s`(`varname`,`index`,`value`) VALUES ('%s','%d','%s')", mapreg->table, tmp_str, i, tmp_str2) )
+ Sql_ShowDebug(map->mysql_handle);
}
idb_put(mapreg->str_db, uid, m);
}
@@ -133,7 +133,7 @@ void script_load_mapreg(void) {
| varname | index | value |
+-------------------------+
*/
- SqlStmt* stmt = SQL->StmtMalloc(mmysql_handle);
+ SqlStmt* stmt = SQL->StmtMalloc(map->mysql_handle);
char varname[32+1];
int index;
char value[255+1];
@@ -199,8 +199,8 @@ void script_save_mapreg(void) {
int i = (m->uid & 0xff000000) >> 24;
const char* name = script->get_str(num);
- if( SQL_ERROR == SQL->Query(mmysql_handle, "UPDATE `%s` SET `value`='%d' WHERE `varname`='%s' AND `index`='%d' LIMIT 1", mapreg->table, m->u.i, name, i) )
- Sql_ShowDebug(mmysql_handle);
+ if( SQL_ERROR == SQL->Query(map->mysql_handle, "UPDATE `%s` SET `value`='%d' WHERE `varname`='%s' AND `index`='%d' LIMIT 1", mapreg->table, m->u.i, name, i) )
+ Sql_ShowDebug(map->mysql_handle);
m->save = false;
}
}
@@ -217,9 +217,9 @@ void script_save_mapreg(void) {
const char* name = script->get_str(num);
char tmp_str2[2*255+1];
- SQL->EscapeStringLen(mmysql_handle, tmp_str2, m->u.str, safestrnlen(m->u.str, 255));
- if( SQL_ERROR == SQL->Query(mmysql_handle, "UPDATE `%s` SET `value`='%s' WHERE `varname`='%s' AND `index`='%d' LIMIT 1", mapreg->table, tmp_str2, name, i) )
- Sql_ShowDebug(mmysql_handle);
+ SQL->EscapeStringLen(map->mysql_handle, tmp_str2, m->u.str, safestrnlen(m->u.str, 255));
+ if( SQL_ERROR == SQL->Query(map->mysql_handle, "UPDATE `%s` SET `value`='%s' WHERE `varname`='%s' AND `index`='%d' LIMIT 1", mapreg->table, tmp_str2, name, i) )
+ Sql_ShowDebug(map->mysql_handle);
m->save = false;
}
}
diff --git a/src/map/mob.c b/src/map/mob.c
index 7d04937e7..7023bcb9d 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -173,11 +173,11 @@ void mvptomb_destroy(struct mob_data *md) {
map->delblock(&nd->bl);
- ARR_FIND( 0, maplist[m].npc_num, i, maplist[m].npc[i] == nd );
- if( !(i == maplist[m].npc_num) ) {
- maplist[m].npc_num--;
- maplist[m].npc[i] = maplist[m].npc[maplist[m].npc_num];
- maplist[m].npc[maplist[m].npc_num] = NULL;
+ ARR_FIND( 0, map->list[m].npc_num, i, map->list[m].npc[i] == nd );
+ if( !(i == map->list[m].npc_num) ) {
+ map->list[m].npc_num--;
+ map->list[m].npc[i] = map->list[m].npc[map->list[m].npc_num];
+ map->list[m].npc[map->list[m].npc_num] = NULL;
}
map->deliddb(&nd->bl);
@@ -363,7 +363,7 @@ bool mob_ksprotected (struct block_list *src, struct block_list *target)
t_sd = BL_CAST(BL_PC,s_bl);
do {
- if( maplist[md->bl.m].flag.allowks || map_flag_ks(md->bl.m) )
+ if( map->list[md->bl.m].flag.allowks || map_flag_ks(md->bl.m) )
return false; // Ignores GVG, PVP and AllowKS map flags
if( md->db->mexp || md->master_id )
@@ -638,12 +638,12 @@ int mob_spawn_guardian(const char* mapname, short x, short y, const char* mobnam
if( !has_index ) {
guardian = -1;
} else if( guardian < 0 || guardian >= MAX_GUARDIANS ) {
- ShowError("mob_spawn_guardian: Invalid guardian index %d for guardian %d (castle map %s)\n", guardian, class_, maplist[m].name);
+ ShowError("mob_spawn_guardian: Invalid guardian index %d for guardian %d (castle map %s)\n", guardian, class_, map->list[m].name);
return 0;
}
if((x<=0 || y<=0) && !map->search_freecell(NULL, m, &x, &y, -1,-1, 1)) {
- ShowWarning("mob_spawn_guardian: Couldn't locate a spawn cell for guardian class %d (index %d) at castle map %s\n",class_, guardian, maplist[m].name);
+ ShowWarning("mob_spawn_guardian: Couldn't locate a spawn cell for guardian class %d (index %d) at castle map %s\n",class_, guardian, map->list[m].name);
return 0;
}
data.x = x;
@@ -653,13 +653,13 @@ int mob_spawn_guardian(const char* mapname, short x, short y, const char* mobnam
if (!mob->parse_dataset(&data))
return 0;
- gc=guild->mapname2gc(maplist[m].name);
+ gc=guild->mapname2gc(map->list[m].name);
if (gc == NULL) {
- ShowError("mob_spawn_guardian: No castle set at map %s\n", maplist[m].name);
+ ShowError("mob_spawn_guardian: No castle set at map %s\n", map->list[m].name);
return 0;
}
if (!gc->guild_id)
- ShowWarning("mob_spawn_guardian: Spawning guardian %d on a castle with no guild (castle map %s)\n", class_, maplist[m].name);
+ ShowWarning("mob_spawn_guardian: Spawning guardian %d on a castle with no guild (castle map %s)\n", class_, map->list[m].name);
else
g = guild->search(gc->guild_id);
@@ -670,7 +670,7 @@ int mob_spawn_guardian(const char* mapname, short x, short y, const char* mobnam
&& md2->guardian_data
&& md2->guardian_data->number == guardian
) {
- ShowError("mob_spawn_guardian: Attempted to spawn guardian in position %d which already has a guardian (castle map %s)\n", guardian, maplist[m].name);
+ ShowError("mob_spawn_guardian: Attempted to spawn guardian in position %d which already has a guardian (castle map %s)\n", guardian, map->list[m].name);
return 0;
}
}
@@ -732,7 +732,7 @@ int mob_spawn_bg(const char* mapname, short x, short y, const char* mobname, int
data.class_ = class_;
if( (x <= 0 || y <= 0) && !map->search_freecell(NULL, m, &x, &y, -1,-1, 1) ) {
- ShowWarning("mob_spawn_bg: Couldn't locate a spawn cell for guardian class %d (bg_id %d) at map %s\n",class_, bg_id, maplist[m].name);
+ ShowWarning("mob_spawn_bg: Couldn't locate a spawn cell for guardian class %d (bg_id %d) at map %s\n",class_, bg_id, map->list[m].name);
return 0;
}
@@ -963,7 +963,7 @@ int mob_spawn (struct mob_data *md)
mob->mvptomb_destroy(md);
map->addblock(&md->bl);
- if( maplist[md->bl.m].users )
+ if( map->list[md->bl.m].users )
clif->spawn(&md->bl);
skill->unit_move(&md->bl,tick,1);
mob->skill_use(md, tick, MSC_SPAWN);
@@ -1068,7 +1068,7 @@ int mob_ai_sub_hard_activesearch(struct block_list *bl,va_list ap)
battle->check_range(&md->bl,bl,md->db->range2)
) { //Pick closest target?
- if( maplist[bl->m].icewall_num &&
+ if( map->list[bl->m].icewall_num &&
!path->search_long(NULL,bl->m,md->bl.x,md->bl.y,bl->x,bl->y,CELL_CHKICEWALL) ) {
if( !check_distance_bl(&md->bl, bl, status_get_range(&md->bl) ) )
@@ -1337,7 +1337,7 @@ int mob_randomwalk(struct mob_data *md,unsigned int tick)
if(i==retrycount){
md->move_fail_count++;
if(md->move_fail_count>1000){
- ShowWarning("MOB can't move. random spawn %d, class = %d, at %s (%d,%d)\n",md->bl.id,md->class_,maplist[md->bl.m].name, md->bl.x, md->bl.y);
+ ShowWarning("MOB can't move. random spawn %d, class = %d, at %s (%d,%d)\n",md->bl.id,md->class_,map->list[md->bl.m].name, md->bl.x, md->bl.y);
md->move_fail_count=0;
mob->spawn(md);
}
@@ -1683,7 +1683,7 @@ int mob_ai_sub_lazy(struct mob_data *md, va_list args)
tick = va_arg(args,unsigned int);
- if (battle_config.mob_ai&0x20 && maplist[md->bl.m].users>0)
+ if (battle_config.mob_ai&0x20 && map->list[md->bl.m].users>0)
return (int)mob->ai_sub_hard(md, tick);
if (md->bl.prev==NULL || md->status.hp == 0)
@@ -1720,7 +1720,7 @@ int mob_ai_sub_lazy(struct mob_data *md, va_list args)
}
if( DIFF_TICK(md->next_walktime,tick) < 0 && (status_get_mode(&md->bl)&MD_CANMOVE) && unit->can_move(&md->bl) ) {
- if( maplist[md->bl.m].users > 0 )
+ if( map->list[md->bl.m].users > 0 )
{
if( rnd()%1000 < MOB_LAZYMOVEPERC(md) )
mob->randomwalk(md, tick);
@@ -1741,7 +1741,7 @@ int mob_ai_sub_lazy(struct mob_data *md, va_list args)
* Negligent processing for mob outside PC field of view (interval timer function)
*------------------------------------------*/
int mob_ai_lazy(int tid, unsigned int tick, int id, intptr_t data) {
- map->map_foreachmob(mob->ai_sub_lazy,tick);
+ map->foreachmob(mob->ai_sub_lazy,tick);
return 0;
}
@@ -1751,9 +1751,9 @@ int mob_ai_lazy(int tid, unsigned int tick, int id, intptr_t data) {
int mob_ai_hard(int tid, unsigned int tick, int id, intptr_t data) {
if (battle_config.mob_ai&0x20)
- map->map_foreachmob(mob->ai_sub_lazy,tick);
+ map->foreachmob(mob->ai_sub_lazy,tick);
else
- map->map_foreachpc(mob->ai_sub_foreachclient,tick);
+ map->foreachpc(mob->ai_sub_foreachclient,tick);
return 0;
}
@@ -2145,9 +2145,9 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) {
}
if( !(type&2) //No exp
- && (!maplist[m].flag.pvp || battle_config.pvp_exp) //Pvp no exp rule [MouseJstr]
+ && (!map->list[m].flag.pvp || battle_config.pvp_exp) //Pvp no exp rule [MouseJstr]
&& (!md->master_id || !md->special_state.ai) //Only player-summoned mobs do not give exp. [Skotlex]
- && (!maplist[m].flag.nobaseexp || !maplist[m].flag.nojobexp) //Gives Exp
+ && (!map->list[m].flag.nobaseexp || !map->list[m].flag.nojobexp) //Gives Exp
) { //Experience calculation.
int bonus = 100; //Bonus on top of your share (common to all attackers).
if (md->sc.data[SC_RICHMANKIM])
@@ -2209,15 +2209,15 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) {
zeny*=rnd()%250;
}
- if (maplist[m].flag.nobaseexp || !md->db->base_exp)
+ if (map->list[m].flag.nobaseexp || !md->db->base_exp)
base_exp = 0;
else
- base_exp = (unsigned int)cap_value(md->db->base_exp * per * bonus/100. * maplist[m].bexp/100., 1, UINT_MAX);
+ base_exp = (unsigned int)cap_value(md->db->base_exp * per * bonus/100. * map->list[m].bexp/100., 1, UINT_MAX);
- if (maplist[m].flag.nojobexp || !md->db->job_exp || md->dmglog[i].flag == MDLF_HOMUN) //Homun earned job-exp is always lost.
+ if (map->list[m].flag.nojobexp || !md->db->job_exp || md->dmglog[i].flag == MDLF_HOMUN) //Homun earned job-exp is always lost.
job_exp = 0;
else
- job_exp = (unsigned int)cap_value(md->db->job_exp * per * bonus/100. * maplist[m].jexp/100., 1, UINT_MAX);
+ job_exp = (unsigned int)cap_value(md->db->job_exp * per * bonus/100. * map->list[m].jexp/100., 1, UINT_MAX);
if ( (temp = tmpsd[i]->status.party_id) > 0 ) {
int j;
@@ -2271,7 +2271,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) {
} //End EXP giving.
- if( !(type&1) && !maplist[m].flag.nomobloot && !md->state.rebirth && (
+ if( !(type&1) && !map->list[m].flag.nomobloot && !md->state.rebirth && (
!md->special_state.ai || //Non special mob
battle_config.alchemist_summon_reward == 2 || //All summoned give drops
(md->special_state.ai==2 && battle_config.alchemist_summon_reward == 1) //Marine Sphere Drops items.
@@ -2439,7 +2439,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) {
double exp;
//mapflag: noexp check [Lorky]
- if (maplist[m].flag.nobaseexp || type&2)
+ if (map->list[m].flag.nobaseexp || type&2)
exp =1;
else {
exp = md->db->mexp;
@@ -2454,7 +2454,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) {
pc->gainexp(mvp_sd, &md->bl, mexp,0, false);
log_mvp[1] = mexp;
- if( !(maplist[m].flag.nomvploot || type&1) ) {
+ if( !(map->list[m].flag.nomvploot || type&1) ) {
/* pose them randomly in the list -- so on 100% drop servers it wont always drop the same item */
int mdrop_id[MAX_MVP_DROP];
int mdrop_p[MAX_MVP_DROP];
@@ -2598,7 +2598,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) {
return 5; // Note: Actually, it's 4. Oh well...
// MvP tomb [GreenBox]
- if (battle_config.mvp_tomb_enabled && md->spawn->state.boss && maplist[md->bl.m].flag.notomb != 1)
+ if (battle_config.mvp_tomb_enabled && md->spawn->state.boss && map->list[md->bl.m].flag.notomb != 1)
mob->mvptomb_create(md, mvp_sd ? mvp_sd->status.name : NULL, time(NULL));
if( !rebirth ) {
@@ -3354,12 +3354,12 @@ int mob_clone_spawn(struct map_session_data *sd, int16 m, int16 x, int16 y, cons
(skill->db[idx].inf2&(INF2_WEDDING_SKILL|INF2_GUILD_SKILL))
)
continue;
- for(h = 0; h < maplist[sd->bl.m].zone->disabled_skills_count; h++) {
- if( skill_id == maplist[sd->bl.m].zone->disabled_skills[h]->nameid && maplist[sd->bl.m].zone->disabled_skills[h]->subtype == MZS_CLONE ) {
+ for(h = 0; h < map->list[sd->bl.m].zone->disabled_skills_count; h++) {
+ if( skill_id == map->list[sd->bl.m].zone->disabled_skills[h]->nameid && map->list[sd->bl.m].zone->disabled_skills[h]->subtype == MZS_CLONE ) {
break;
}
}
- if( h < maplist[sd->bl.m].zone->disabled_skills_count )
+ if( h < map->list[sd->bl.m].zone->disabled_skills_count )
continue;
//Normal aggressive mob, disable skills that cannot help them fight
//against players (those with flags UF_NOMOB and UF_NOPC are specific
@@ -3890,13 +3890,13 @@ int mob_read_sqldb(void) {
uint32 lines = 0, count = 0;
// retrieve all rows from the mob database
- if( SQL_ERROR == SQL->Query(mmysql_handle, "SELECT * FROM `%s`", mob_db_name[fi]) ) {
- Sql_ShowDebug(mmysql_handle);
+ if( SQL_ERROR == SQL->Query(map->mysql_handle, "SELECT * FROM `%s`", mob_db_name[fi]) ) {
+ Sql_ShowDebug(map->mysql_handle);
continue;
}
// process rows one by one
- while( SQL_SUCCESS == SQL->NextRow(mmysql_handle) ) {
+ while( SQL_SUCCESS == SQL->NextRow(map->mysql_handle) ) {
// wrap the result into a TXT-compatible format
char line[1024];
char* str[31+2*MAX_MVP_DROP+2*MAX_MOB_DROP];
@@ -3908,7 +3908,7 @@ int mob_read_sqldb(void) {
{
char* data;
size_t len;
- SQL->GetData(mmysql_handle, i, &data, &len);
+ SQL->GetData(map->mysql_handle, i, &data, &len);
strcpy(p, data);
str[i] = p;
@@ -3922,7 +3922,7 @@ int mob_read_sqldb(void) {
}
// free the query result
- SQL->FreeResult(mmysql_handle);
+ SQL->FreeResult(map->mysql_handle);
ShowStatus("Done reading '"CL_WHITE"%lu"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, mob_db_name[fi]);
}
@@ -4454,13 +4454,13 @@ int mob_read_sqlskilldb(void) {
uint32 lines = 0, count = 0;
// retrieve all rows from the mob skill database
- if( SQL_ERROR == SQL->Query(mmysql_handle, "SELECT * FROM `%s`", mob_skill_db_name[fi]) ) {
- Sql_ShowDebug(mmysql_handle);
+ if( SQL_ERROR == SQL->Query(map->mysql_handle, "SELECT * FROM `%s`", mob_skill_db_name[fi]) ) {
+ Sql_ShowDebug(map->mysql_handle);
continue;
}
// process rows one by one
- while( SQL_SUCCESS == SQL->NextRow(mmysql_handle) ) {
+ while( SQL_SUCCESS == SQL->NextRow(map->mysql_handle) ) {
// wrap the result into a TXT-compatible format
char* str[19];
char* dummy = "";
@@ -4468,7 +4468,7 @@ int mob_read_sqlskilldb(void) {
++lines;
for( i = 0; i < 19; ++i )
{
- SQL->GetData(mmysql_handle, i, &str[i], NULL);
+ SQL->GetData(map->mysql_handle, i, &str[i], NULL);
if( str[i] == NULL ) str[i] = dummy; // get rid of NULL columns
}
@@ -4479,7 +4479,7 @@ int mob_read_sqlskilldb(void) {
}
// free the query result
- SQL->FreeResult(mmysql_handle);
+ SQL->FreeResult(map->mysql_handle);
ShowStatus("Done reading '"CL_WHITE"%lu"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, mob_skill_db_name[fi]);
}
diff --git a/src/map/mob.h b/src/map/mob.h
index f4cbd77c6..210983675 100644
--- a/src/map/mob.h
+++ b/src/map/mob.h
@@ -245,8 +245,8 @@ struct item_drop_list {
#define mob_stop_walking(md, type) unit->stop_walking(&(md)->bl, type)
#define mob_stop_attack(md) unit->stop_attack(&(md)->bl)
-#define mob_is_battleground(md) ( maplist[(md)->bl.m].flag.battleground && ((md)->class_ == MOBID_BARRICADE2 || ((md)->class_ >= MOBID_FOOD_STOR && (md)->class_ <= MOBID_PINK_CRYST)) )
-#define mob_is_gvg(md) (maplist[(md)->bl.m].flag.gvg_castle && ( (md)->class_ == MOBID_EMPERIUM || (md)->class_ == MOBID_BARRICADE1 || (md)->class_ == MOBID_GUARIDAN_STONE1 || (md)->class_ == MOBID_GUARIDAN_STONE2) )
+#define mob_is_battleground(md) ( map->list[(md)->bl.m].flag.battleground && ((md)->class_ == MOBID_BARRICADE2 || ((md)->class_ >= MOBID_FOOD_STOR && (md)->class_ <= MOBID_PINK_CRYST)) )
+#define mob_is_gvg(md) (map->list[(md)->bl.m].flag.gvg_castle && ( (md)->class_ == MOBID_EMPERIUM || (md)->class_ == MOBID_BARRICADE1 || (md)->class_ == MOBID_GUARIDAN_STONE1 || (md)->class_ == MOBID_GUARIDAN_STONE2) )
#define mob_is_treasure(md) (((md)->class_ >= MOBID_TREAS01 && (md)->class_ <= MOBID_TREAS40) || ((md)->class_ >= MOBID_TREAS41 && (md)->class_ <= MOBID_TREAS49))
struct mob_interface {
diff --git a/src/map/npc.c b/src/map/npc.c
index 21e4221da..a28724238 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -881,53 +881,53 @@ int npc_touch_areanpc(struct map_session_data* sd, int16 m, int16 x, int16 y)
//if(sd->npc_id)
// return 1;
- for(i=0;i<maplist[m].npc_num;i++) {
- if (maplist[m].npc[i]->option&OPTION_INVISIBLE) {
+ for(i=0;i<map->list[m].npc_num;i++) {
+ if (map->list[m].npc[i]->option&OPTION_INVISIBLE) {
f=0; // a npc was found, but it is disabled; don't print warning
continue;
}
- switch(maplist[m].npc[i]->subtype) {
+ switch(map->list[m].npc[i]->subtype) {
case WARP:
- xs=maplist[m].npc[i]->u.warp.xs;
- ys=maplist[m].npc[i]->u.warp.ys;
+ xs=map->list[m].npc[i]->u.warp.xs;
+ ys=map->list[m].npc[i]->u.warp.ys;
break;
case SCRIPT:
- xs=maplist[m].npc[i]->u.scr.xs;
- ys=maplist[m].npc[i]->u.scr.ys;
+ xs=map->list[m].npc[i]->u.scr.xs;
+ ys=map->list[m].npc[i]->u.scr.ys;
break;
default:
continue;
}
- if( x >= maplist[m].npc[i]->bl.x-xs && x <= maplist[m].npc[i]->bl.x+xs
- && y >= maplist[m].npc[i]->bl.y-ys && y <= maplist[m].npc[i]->bl.y+ys )
+ if( x >= map->list[m].npc[i]->bl.x-xs && x <= map->list[m].npc[i]->bl.x+xs
+ && y >= map->list[m].npc[i]->bl.y-ys && y <= map->list[m].npc[i]->bl.y+ys )
break;
}
- if( i == maplist[m].npc_num ) {
+ if( i == map->list[m].npc_num ) {
if( f == 1 ) // no npc found
- ShowError("npc_touch_areanpc : stray NPC cell/NPC not found in the block on coordinates '%s',%d,%d\n", maplist[m].name, x, y);
+ ShowError("npc_touch_areanpc : stray NPC cell/NPC not found in the block on coordinates '%s',%d,%d\n", map->list[m].name, x, y);
return 1;
}
- switch(maplist[m].npc[i]->subtype) {
+ switch(map->list[m].npc[i]->subtype) {
case WARP:
if( pc_ishiding(sd) || (sd->sc.count && sd->sc.data[SC_CAMOUFLAGE]) )
break; // hidden chars cannot use warps
- pc->setpos(sd,maplist[m].npc[i]->u.warp.mapindex,maplist[m].npc[i]->u.warp.x,maplist[m].npc[i]->u.warp.y,CLR_OUTSIGHT);
+ pc->setpos(sd,map->list[m].npc[i]->u.warp.mapindex,map->list[m].npc[i]->u.warp.x,map->list[m].npc[i]->u.warp.y,CLR_OUTSIGHT);
break;
case SCRIPT:
- for (j = i; j < maplist[m].npc_num; j++) {
- if (maplist[m].npc[j]->subtype != WARP) {
+ for (j = i; j < map->list[m].npc_num; j++) {
+ if (map->list[m].npc[j]->subtype != WARP) {
continue;
}
- if ((sd->bl.x >= (maplist[m].npc[j]->bl.x - maplist[m].npc[j]->u.warp.xs)
- && sd->bl.x <= (maplist[m].npc[j]->bl.x + maplist[m].npc[j]->u.warp.xs))
- && (sd->bl.y >= (maplist[m].npc[j]->bl.y - maplist[m].npc[j]->u.warp.ys)
- && sd->bl.y <= (maplist[m].npc[j]->bl.y + maplist[m].npc[j]->u.warp.ys))
+ if ((sd->bl.x >= (map->list[m].npc[j]->bl.x - map->list[m].npc[j]->u.warp.xs)
+ && sd->bl.x <= (map->list[m].npc[j]->bl.x + map->list[m].npc[j]->u.warp.xs))
+ && (sd->bl.y >= (map->list[m].npc[j]->bl.y - map->list[m].npc[j]->u.warp.ys)
+ && sd->bl.y <= (map->list[m].npc[j]->bl.y + map->list[m].npc[j]->u.warp.ys))
) {
if( pc_ishiding(sd) || (sd->sc.count && sd->sc.data[SC_CAMOUFLAGE]) )
break; // hidden chars cannot use warps
- pc->setpos(sd,maplist[m].npc[j]->u.warp.mapindex,maplist[m].npc[j]->u.warp.x,maplist[m].npc[j]->u.warp.y,CLR_OUTSIGHT);
+ pc->setpos(sd,map->list[m].npc[j]->u.warp.mapindex,map->list[m].npc[j]->u.warp.x,map->list[m].npc[j]->u.warp.y,CLR_OUTSIGHT);
found_warp = 1;
break;
}
@@ -937,7 +937,7 @@ int npc_touch_areanpc(struct map_session_data* sd, int16 m, int16 x, int16 y)
break;
}
- if( npc->ontouch_event(sd,maplist[m].npc[i]) > 0 && npc->ontouch2_event(sd,maplist[m].npc[i]) > 0 )
+ if( npc->ontouch_event(sd,map->list[m].npc[i]) > 0 && npc->ontouch2_event(sd,map->list[m].npc[i]) > 0 )
{ // failed to run OnTouch event, so just click the npc
struct unit_data *ud = unit->bl2ud(&sd->bl);
if( ud && ud->walkpath.path_pos < ud->walkpath.path_len )
@@ -945,8 +945,8 @@ int npc_touch_areanpc(struct map_session_data* sd, int16 m, int16 x, int16 y)
clif->fixpos(&sd->bl);
ud->walkpath.path_pos = ud->walkpath.path_len;
}
- sd->areanpc_id = maplist[m].npc[i]->bl.id;
- npc->click(sd,maplist[m].npc[i]);
+ sd->areanpc_id = map->list[m].npc[i]->bl.id;
+ npc->click(sd,map->list[m].npc[i]);
}
break;
}
@@ -962,42 +962,42 @@ int npc_touch_areanpc2(struct mob_data *md)
struct event_data* ev;
int xs, ys;
- for( i = 0; i < maplist[m].npc_num; i++ ) {
- if( maplist[m].npc[i]->option&OPTION_INVISIBLE )
+ for( i = 0; i < map->list[m].npc_num; i++ ) {
+ if( map->list[m].npc[i]->option&OPTION_INVISIBLE )
continue;
- switch( maplist[m].npc[i]->subtype ) {
+ switch( map->list[m].npc[i]->subtype ) {
case WARP:
if( !( battle_config.mob_warp&1 ) )
continue;
- xs = maplist[m].npc[i]->u.warp.xs;
- ys = maplist[m].npc[i]->u.warp.ys;
+ xs = map->list[m].npc[i]->u.warp.xs;
+ ys = map->list[m].npc[i]->u.warp.ys;
break;
case SCRIPT:
- xs = maplist[m].npc[i]->u.scr.xs;
- ys = maplist[m].npc[i]->u.scr.ys;
+ xs = map->list[m].npc[i]->u.scr.xs;
+ ys = map->list[m].npc[i]->u.scr.ys;
break;
default:
continue; // Keep Searching
}
- if( x >= maplist[m].npc[i]->bl.x-xs && x <= maplist[m].npc[i]->bl.x+xs && y >= maplist[m].npc[i]->bl.y-ys && y <= maplist[m].npc[i]->bl.y+ys ) {
+ if( x >= map->list[m].npc[i]->bl.x-xs && x <= map->list[m].npc[i]->bl.x+xs && y >= map->list[m].npc[i]->bl.y-ys && y <= map->list[m].npc[i]->bl.y+ys ) {
// In the npc touch area
- switch( maplist[m].npc[i]->subtype ) {
+ switch( map->list[m].npc[i]->subtype ) {
case WARP:
- xs = map->mapindex2mapid(maplist[m].npc[i]->u.warp.mapindex);
+ xs = map->mapindex2mapid(map->list[m].npc[i]->u.warp.mapindex);
if( m < 0 )
break; // Cannot Warp between map servers
- if( unit->warp(&md->bl, xs, maplist[m].npc[i]->u.warp.x, maplist[m].npc[i]->u.warp.y, CLR_OUTSIGHT) == 0 )
+ if( unit->warp(&md->bl, xs, map->list[m].npc[i]->u.warp.x, map->list[m].npc[i]->u.warp.y, CLR_OUTSIGHT) == 0 )
return 1; // Warped
break;
case SCRIPT:
- if( maplist[m].npc[i]->bl.id == md->areanpc_id )
+ if( map->list[m].npc[i]->bl.id == md->areanpc_id )
break; // Already touch this NPC
- snprintf(eventname, ARRAYLENGTH(eventname), "%s::OnTouchNPC", maplist[m].npc[i]->exname);
+ snprintf(eventname, ARRAYLENGTH(eventname), "%s::OnTouchNPC", map->list[m].npc[i]->exname);
if( (ev = (struct event_data*)strdb_get(npc->ev_db, eventname)) == NULL || ev->nd == NULL )
break; // No OnTouchNPC Event
- md->areanpc_id = maplist[m].npc[i]->bl.id;
+ md->areanpc_id = map->list[m].npc[i]->bl.id;
id = md->bl.id; // Stores Unique ID
script->run(ev->nd->u.scr.script, ev->pos, md->bl.id, ev->nd->bl.id);
if( map->id2md(id) == NULL ) return 1; // Not Warped, but killed
@@ -1023,8 +1023,8 @@ int npc_check_areanpc(int flag, int16 m, int16 x, int16 y, int16 range) {
if (range < 0) return 0;
x0 = max(x-range, 0);
y0 = max(y-range, 0);
- x1 = min(x+range, maplist[m].xs-1);
- y1 = min(y+range, maplist[m].ys-1);
+ x1 = min(x+range, map->list[m].xs-1);
+ y1 = min(y+range, map->list[m].ys-1);
//First check for npc_cells on the range given
i = 0;
@@ -1037,35 +1037,35 @@ int npc_check_areanpc(int flag, int16 m, int16 x, int16 y, int16 range) {
if (!i) return 0; //No NPC_CELLs.
//Now check for the actual NPC on said range.
- for(i=0;i<maplist[m].npc_num;i++) {
- if (maplist[m].npc[i]->option&OPTION_INVISIBLE)
+ for(i=0;i<map->list[m].npc_num;i++) {
+ if (map->list[m].npc[i]->option&OPTION_INVISIBLE)
continue;
- switch(maplist[m].npc[i]->subtype) {
+ switch(map->list[m].npc[i]->subtype) {
case WARP:
if (!(flag&1))
continue;
- xs=maplist[m].npc[i]->u.warp.xs;
- ys=maplist[m].npc[i]->u.warp.ys;
+ xs=map->list[m].npc[i]->u.warp.xs;
+ ys=map->list[m].npc[i]->u.warp.ys;
break;
case SCRIPT:
if (!(flag&2))
continue;
- xs=maplist[m].npc[i]->u.scr.xs;
- ys=maplist[m].npc[i]->u.scr.ys;
+ xs=map->list[m].npc[i]->u.scr.xs;
+ ys=map->list[m].npc[i]->u.scr.ys;
break;
default:
continue;
}
- if( x1 >= maplist[m].npc[i]->bl.x-xs && x0 <= maplist[m].npc[i]->bl.x+xs
- && y1 >= maplist[m].npc[i]->bl.y-ys && y0 <= maplist[m].npc[i]->bl.y+ys )
+ if( x1 >= map->list[m].npc[i]->bl.x-xs && x0 <= map->list[m].npc[i]->bl.x+xs
+ && y1 >= map->list[m].npc[i]->bl.y-ys && y0 <= map->list[m].npc[i]->bl.y+ys )
break; // found a npc
}
- if (i==maplist[m].npc_num)
+ if (i==map->list[m].npc_num)
return 0;
- return (maplist[m].npc[i]->bl.id);
+ return (map->list[m].npc[i]->bl.id);
}
/*==========================================
@@ -1410,7 +1410,7 @@ int npc_cashshop_buy(struct map_session_data *sd, int nameid, int amount, int po
if( (double)nd->u.shop.shop_item[i].value * amount > INT_MAX ) {
ShowWarning("npc_cashshop_buy: Item '%s' (%d) price overflow attempt!\n", item->name, nameid);
ShowDebug("(NPC:'%s' (%s,%d,%d), player:'%s' (%d/%d), value:%d, amount:%d)\n",
- nd->exname, maplist[nd->bl.m].name, nd->bl.x, nd->bl.y,
+ nd->exname, map->list[nd->bl.m].name, nd->bl.x, nd->bl.y,
sd->status.name, sd->status.account_id, sd->status.char_id,
nd->u.shop.shop_item[i].value, amount);
return 5;
@@ -1707,13 +1707,13 @@ int npc_remove_map(struct npc_data* nd) {
clif->clearunit_area(&nd->bl,CLR_RESPAWN);
npc->unsetcells(nd);
map->delblock(&nd->bl);
- //Remove npc from maplist[].npc list. [Skotlex]
- ARR_FIND( 0, maplist[m].npc_num, i, maplist[m].npc[i] == nd );
- if( i == maplist[m].npc_num ) return 2; //failed to find it?
+ //Remove npc from map->list[].npc list. [Skotlex]
+ ARR_FIND( 0, map->list[m].npc_num, i, map->list[m].npc[i] == nd );
+ if( i == map->list[m].npc_num ) return 2; //failed to find it?
- maplist[m].npc_num--;
- maplist[m].npc[i] = maplist[m].npc[maplist[m].npc_num];
- maplist[m].npc[maplist[m].npc_num] = NULL;
+ map->list[m].npc_num--;
+ map->list[m].npc[i] = map->list[m].npc[map->list[m].npc_num];
+ map->list[m].npc[map->list[m].npc_num] = NULL;
return 0;
}
@@ -1759,7 +1759,7 @@ int npc_unload_dup_sub(struct npc_data* nd, va_list args)
//Removes all npcs that are duplicates of the passed one. [Skotlex]
void npc_unload_duplicates(struct npc_data* nd) {
- map->map_foreachnpc(npc->unload_dup_sub,nd->bl.id);
+ map->foreachnpc(npc->unload_dup_sub,nd->bl.id);
}
//Removes an npc from map and db.
@@ -2054,7 +2054,7 @@ struct npc_data* npc_add_warp(char* name, short from_mapid, short from_x, short
map->addblock(&nd->bl);
status->set_viewdata(&nd->bl, nd->class_);
nd->ud = &npc->base_ud;
- if( maplist[nd->bl.m].users )
+ if( map->list[nd->bl.m].users )
clif->spawn(&nd->bl);
strdb_put(npc->name_db, nd->exname, nd);
@@ -2086,8 +2086,8 @@ const char* npc_parse_warp(char* w1, char* w2, char* w3, char* w4, const char* s
return strchr(start,'\n');// skip and continue
}
- if( m != -1 && ( x < 0 || x >= maplist[m].xs || y < 0 || y >= maplist[m].ys ) ) {
- ShowError("npc_parse_warp: out-of-bounds coordinates (\"%s\",%d,%d), map is %dx%d, in file '%s', line '%d'\n", maplist[m].name, x, y, maplist[m].xs, maplist[m].ys,filepath,strline(buffer,start-buffer));
+ if( m != -1 && ( x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys ) ) {
+ ShowError("npc_parse_warp: out-of-bounds coordinates (\"%s\",%d,%d), map is %dx%d, in file '%s', line '%d'\n", map->list[m].name, x, y, map->list[m].xs, map->list[m].ys,filepath,strline(buffer,start-buffer));
return strchr(start,'\n');;//try next
}
@@ -2119,7 +2119,7 @@ const char* npc_parse_warp(char* w1, char* w2, char* w3, char* w4, const char* s
map->addblock(&nd->bl);
status->set_viewdata(&nd->bl, nd->class_);
nd->ud = &npc->base_ud;
- if( maplist[nd->bl.m].users )
+ if( map->list[nd->bl.m].users )
clif->spawn(&nd->bl);
strdb_put(npc->name_db, nd->exname, nd);
@@ -2152,8 +2152,8 @@ const char* npc_parse_shop(char* w1, char* w2, char* w3, char* w4, const char* s
m = map->mapname2mapid(mapname);
}
- if( m != -1 && ( x < 0 || x >= maplist[m].xs || y < 0 || y >= maplist[m].ys ) ) {
- ShowError("npc_parse_shop: out-of-bounds coordinates (\"%s\",%d,%d), map is %dx%d, in file '%s', line '%d'\n", maplist[m].name, x, y, maplist[m].xs, maplist[m].ys,filepath,strline(buffer,start-buffer));
+ if( m != -1 && ( x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys ) ) {
+ ShowError("npc_parse_shop: out-of-bounds coordinates (\"%s\",%d,%d), map is %dx%d, in file '%s', line '%d'\n", map->list[m].name, x, y, map->list[m].xs, map->list[m].ys,filepath,strline(buffer,start-buffer));
return strchr(start,'\n');;//try next
}
@@ -2232,7 +2232,7 @@ const char* npc_parse_shop(char* w1, char* w2, char* w3, char* w4, const char* s
status->set_viewdata(&nd->bl, nd->class_);
nd->ud = &npc->base_ud;
nd->dir = dir;
- if( maplist[nd->bl.m].users )
+ if( map->list[nd->bl.m].users )
clif->spawn(&nd->bl);
} else {// 'floating' shop?
map->addiddb(&nd->bl);
@@ -2419,7 +2419,7 @@ const char* npc_parse_script(char* w1, char* w2, char* w3, char* w4, const char*
map->addblock(&nd->bl);
if( class_ >= 0 ) {
status->set_viewdata(&nd->bl, nd->class_);
- if( maplist[nd->bl.m].users )
+ if( map->list[nd->bl.m].users )
clif->spawn(&nd->bl);
}
} else {
@@ -2509,8 +2509,8 @@ const char* npc_parse_duplicate(char* w1, char* w2, char* w3, char* w4, const ch
m = map->mapname2mapid(mapname);
}
- if( m != -1 && ( x < 0 || x >= maplist[m].xs || y < 0 || y >= maplist[m].ys ) ) {
- ShowError("npc_parse_duplicate: out-of-bounds coordinates (\"%s\",%d,%d), map is %dx%d, in file '%s', line '%d'\n", maplist[m].name, x, y, maplist[m].xs, maplist[m].ys,filepath,strline(buffer,start-buffer));
+ if( m != -1 && ( x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys ) ) {
+ ShowError("npc_parse_duplicate: out-of-bounds coordinates (\"%s\",%d,%d), map is %dx%d, in file '%s', line '%d'\n", map->list[m].name, x, y, map->list[m].xs, map->list[m].ys,filepath,strline(buffer,start-buffer));
return end;//try next
}
@@ -2575,7 +2575,7 @@ const char* npc_parse_duplicate(char* w1, char* w2, char* w3, char* w4, const ch
map->addblock(&nd->bl);
if( class_ >= 0 ) {
status->set_viewdata(&nd->bl, nd->class_);
- if( maplist[nd->bl.m].users )
+ if( map->list[nd->bl.m].users )
clif->spawn(&nd->bl);
}
} else {
@@ -2605,12 +2605,12 @@ const char* npc_parse_duplicate(char* w1, char* w2, char* w3, char* w4, const ch
int npc_duplicate4instance(struct npc_data *snd, int16 m) {
char newname[NAME_LENGTH];
- if( m == -1 || maplist[m].instance_id == -1 )
+ if( m == -1 || map->list[m].instance_id == -1 )
return 1;
- snprintf(newname, ARRAYLENGTH(newname), "dup_%d_%d", maplist[m].instance_id, snd->bl.id);
+ snprintf(newname, ARRAYLENGTH(newname), "dup_%d_%d", map->list[m].instance_id, snd->bl.id);
if( npc->name2id(newname) != NULL ) { // Name already in use
- ShowError("npc_duplicate4instance: the npcname (%s) is already in use while trying to duplicate npc %s in instance %d.\n", newname, snd->exname, maplist[m].instance_id);
+ ShowError("npc_duplicate4instance: the npcname (%s) is already in use while trying to duplicate npc %s in instance %d.\n", newname, snd->exname, map->list[m].instance_id);
return 1;
}
@@ -2619,8 +2619,8 @@ int npc_duplicate4instance(struct npc_data *snd, int16 m) {
int dm = map->mapindex2mapid(snd->u.warp.mapindex), im;
if( dm < 0 ) return 1;
- if( ( im = instance->mapid2imapid(dm, maplist[m].instance_id) ) == -1 ) {
- ShowError("npc_duplicate4instance: warp (%s) leading to instanced map (%s), but instance map is not attached to current instance.\n", maplist[dm].name, snd->exname);
+ if( ( im = instance->mapid2imapid(dm, map->list[m].instance_id) ) == -1 ) {
+ ShowError("npc_duplicate4instance: warp (%s) leading to instanced map (%s), but instance map is not attached to current instance.\n", map->list[dm].name, snd->exname);
return 1;
}
@@ -2646,14 +2646,14 @@ int npc_duplicate4instance(struct npc_data *snd, int16 m) {
map->addblock(&wnd->bl);
status->set_viewdata(&wnd->bl, wnd->class_);
wnd->ud = &npc->base_ud;
- if( maplist[wnd->bl.m].users )
+ if( map->list[wnd->bl.m].users )
clif->spawn(&wnd->bl);
strdb_put(npc->name_db, wnd->exname, wnd);
} else {
static char w1[50], w2[50], w3[50], w4[50];
const char* stat_buf = "- call from instancing subsystem -\n";
- snprintf(w1, sizeof(w1), "%s,%d,%d,%d", maplist[m].name, snd->bl.x, snd->bl.y, snd->dir);
+ snprintf(w1, sizeof(w1), "%s,%d,%d,%d", map->list[m].name, snd->bl.x, snd->bl.y, snd->dir);
snprintf(w2, sizeof(w2), "duplicate(%s)", snd->exname);
snprintf(w3, sizeof(w3), "%s::%s", snd->name, newname);
@@ -2686,14 +2686,14 @@ void npc_setcells(struct npc_data* nd) {
return; // Other types doesn't have touch area
}
- if (m < 0 || xs < 0 || ys < 0 || maplist[m].cell == (struct mapcell *)0xdeadbeaf) //invalid range or map
+ if (m < 0 || xs < 0 || ys < 0 || map->list[m].cell == (struct mapcell *)0xdeadbeaf) //invalid range or map
return;
for (i = y-ys; i <= y+ys; i++) {
for (j = x-xs; j <= x+xs; j++) {
if (map->getcell(m, j, i, CELL_CHKNOPASS))
continue;
- maplist[m].setcell(m, j, i, CELL_NPC, true);
+ map->list[m].setcell(m, j, i, CELL_NPC, true);
}
}
}
@@ -2718,20 +2718,20 @@ void npc_unsetcells(struct npc_data* nd) {
ys = nd->u.scr.ys;
}
- if (m < 0 || xs < 0 || ys < 0 || maplist[m].cell == (struct mapcell *)0xdeadbeaf)
+ if (m < 0 || xs < 0 || ys < 0 || map->list[m].cell == (struct mapcell *)0xdeadbeaf)
return;
//Locate max range on which we can locate npc cells
//FIXME: does this really do what it's supposed to do? [ultramage]
for(x0 = x-xs; x0 > 0 && map->getcell(m, x0, y, CELL_CHKNPC); x0--);
- for(x1 = x+xs; x1 < maplist[m].xs-1 && map->getcell(m, x1, y, CELL_CHKNPC); x1++);
+ for(x1 = x+xs; x1 < map->list[m].xs-1 && map->getcell(m, x1, y, CELL_CHKNPC); x1++);
for(y0 = y-ys; y0 > 0 && map->getcell(m, x, y0, CELL_CHKNPC); y0--);
- for(y1 = y+ys; y1 < maplist[m].ys-1 && map->getcell(m, x, y1, CELL_CHKNPC); y1++);
+ for(y1 = y+ys; y1 < map->list[m].ys-1 && map->getcell(m, x, y1, CELL_CHKNPC); y1++);
//Erase this npc's cells
for (i = y-ys; i <= y+ys; i++)
for (j = x-xs; j <= x+xs; j++)
- maplist[m].setcell(m, j, i, CELL_NPC, false);
+ map->list[m].setcell(m, j, i, CELL_NPC, false);
//Re-deploy NPC cells for other nearby npcs.
map->foreachinarea( npc->unsetcells_sub, m, x0, y0, x1, y1, BL_NPC, nd->bl.id );
@@ -2742,8 +2742,8 @@ void npc_movenpc(struct npc_data* nd, int16 x, int16 y)
const int16 m = nd->bl.m;
if (m < 0 || nd->bl.prev == NULL) return; //Not on a map.
- x = cap_value(x, 0, maplist[m].xs-1);
- y = cap_value(y, 0, maplist[m].ys-1);
+ x = cap_value(x, 0, map->list[m].xs-1);
+ y = cap_value(y, 0, map->list[m].ys-1);
map->foreachinrange(clif->outsight, &nd->bl, AREA_SIZE, BL_PC, &nd->bl);
map->moveblock(&nd->bl, x, y, timer->gettick());
@@ -2759,7 +2759,7 @@ void npc_setdisplayname(struct npc_data* nd, const char* newname)
nullpo_retv(nd);
safestrncpy(nd->name, newname, sizeof(nd->name));
- if( maplist[nd->bl.m].users )
+ if( map->list[nd->bl.m].users )
clif->charnameack(0, &nd->bl);
}
@@ -2773,11 +2773,11 @@ void npc_setclass(struct npc_data* nd, short class_) {
if( nd->class_ == class_ )
return;
- if( maplist[nd->bl.m].users )
+ if( map->list[nd->bl.m].users )
clif->clearunit_area(&nd->bl, CLR_OUTSIGHT);// fade out
nd->class_ = class_;
status->set_viewdata(&nd->bl, class_);
- if( maplist[nd->bl.m].users )
+ if( map->list[nd->bl.m].users )
clif->spawn(&nd->bl);// fade in
}
@@ -2931,8 +2931,8 @@ const char* npc_parse_mob(char* w1, char* w2, char* w3, char* w4, const char* st
return strchr(start,'\n');// skip and continue
mobspawn.m = (unsigned short)m;
- if( x < 0 || x >= maplist[mobspawn.m].xs || y < 0 || y >= maplist[mobspawn.m].ys ) {
- ShowError("npc_parse_mob: Spawn coordinates out of range: %s (%d,%d), map size is (%d,%d) - %s %s (file '%s', line '%d').\n", maplist[mobspawn.m].name, x, y, (maplist[mobspawn.m].xs-1), (maplist[mobspawn.m].ys-1), w1, w3, filepath, strline(buffer,start-buffer));
+ if( x < 0 || x >= map->list[mobspawn.m].xs || y < 0 || y >= map->list[mobspawn.m].ys ) {
+ ShowError("npc_parse_mob: Spawn coordinates out of range: %s (%d,%d), map size is (%d,%d) - %s %s (file '%s', line '%d').\n", map->list[mobspawn.m].name, x, y, (map->list[mobspawn.m].xs-1), (map->list[mobspawn.m].ys-1), w1, w3, filepath, strline(buffer,start-buffer));
return strchr(start,'\n');// skip and continue
}
@@ -3044,7 +3044,7 @@ const char* npc_parse_mob(char* w1, char* w2, char* w3, char* w4, const char* st
// check if target map has players
// (usually shouldn't occur when map server is just starting,
// but not the case when we do @reloadscript
- if( maplist[data->m].users > 0 ) {
+ if( map->list[data->m].users > 0 ) {
npc->parse_mob2(data);
}
} else {
@@ -3088,68 +3088,68 @@ const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, const char
if (state == 0)
; //Map flag disabled.
else if (!strcmpi(w4, "SavePoint")) {
- maplist[m].save.map = 0;
- maplist[m].save.x = -1;
- maplist[m].save.y = -1;
+ map->list[m].save.map = 0;
+ map->list[m].save.x = -1;
+ map->list[m].save.y = -1;
} else if (sscanf(w4, "%31[^,],%d,%d", savemap, &savex, &savey) == 3) {
- maplist[m].save.map = mapindex_name2id(savemap);
- maplist[m].save.x = savex;
- maplist[m].save.y = savey;
- if (!maplist[m].save.map) {
+ map->list[m].save.map = mapindex_name2id(savemap);
+ map->list[m].save.x = savex;
+ map->list[m].save.y = savey;
+ if (!map->list[m].save.map) {
ShowWarning("npc_parse_mapflag: Specified save point map '%s' for mapflag 'nosave' not found (file '%s', line '%d'), using 'SavePoint'.\n * w1=%s\n * w2=%s\n * w3=%s\n * w4=%s\n", savemap, filepath, strline(buffer,start-buffer), w1, w2, w3, w4);
- maplist[m].save.x = -1;
- maplist[m].save.y = -1;
+ map->list[m].save.x = -1;
+ map->list[m].save.y = -1;
}
}
- maplist[m].flag.nosave = state;
+ map->list[m].flag.nosave = state;
}
else if (!strcmpi(w3,"autotrade"))
- maplist[m].flag.autotrade=state;
+ map->list[m].flag.autotrade=state;
else if (!strcmpi(w3,"allowks"))
- maplist[m].flag.allowks=state; // [Kill Steal Protection]
+ map->list[m].flag.allowks=state; // [Kill Steal Protection]
else if (!strcmpi(w3,"town"))
- maplist[m].flag.town=state;
+ map->list[m].flag.town=state;
else if (!strcmpi(w3,"nomemo"))
- maplist[m].flag.nomemo=state;
+ map->list[m].flag.nomemo=state;
else if (!strcmpi(w3,"noteleport"))
- maplist[m].flag.noteleport=state;
+ map->list[m].flag.noteleport=state;
else if (!strcmpi(w3,"nowarp"))
- maplist[m].flag.nowarp=state;
+ map->list[m].flag.nowarp=state;
else if (!strcmpi(w3,"nowarpto"))
- maplist[m].flag.nowarpto=state;
+ map->list[m].flag.nowarpto=state;
else if (!strcmpi(w3,"noreturn"))
- maplist[m].flag.noreturn=state;
+ map->list[m].flag.noreturn=state;
else if (!strcmpi(w3,"monster_noteleport"))
- maplist[m].flag.monster_noteleport=state;
+ map->list[m].flag.monster_noteleport=state;
else if (!strcmpi(w3,"nobranch"))
- maplist[m].flag.nobranch=state;
+ map->list[m].flag.nobranch=state;
else if (!strcmpi(w3,"nopenalty")) {
- maplist[m].flag.noexppenalty=state;
- maplist[m].flag.nozenypenalty=state;
+ map->list[m].flag.noexppenalty=state;
+ map->list[m].flag.nozenypenalty=state;
}
else if (!strcmpi(w3,"pvp")) {
struct map_zone_data *zone;
- maplist[m].flag.pvp = state;
- if( state && (maplist[m].flag.gvg || maplist[m].flag.gvg_dungeon || maplist[m].flag.gvg_castle) ) {
- maplist[m].flag.gvg = 0;
- maplist[m].flag.gvg_dungeon = 0;
- maplist[m].flag.gvg_castle = 0;
- ShowWarning("npc_parse_mapflag: You can't set PvP and GvG flags for the same map! Removing GvG flags from %s (file '%s', line '%d').\n", maplist[m].name, filepath, strline(buffer,start-buffer));
- }
- if( state && maplist[m].flag.battleground ) {
- maplist[m].flag.battleground = 0;
- ShowWarning("npc_parse_mapflag: You can't set PvP and BattleGround flags for the same map! Removing BattleGround flag from %s (file '%s', line '%d').\n", maplist[m].name, filepath, strline(buffer,start-buffer));
- }
- if( state && (zone = strdb_get(zone_db, MAP_ZONE_PVP_NAME)) && maplist[m].zone != zone ) {
+ map->list[m].flag.pvp = state;
+ if( state && (map->list[m].flag.gvg || map->list[m].flag.gvg_dungeon || map->list[m].flag.gvg_castle) ) {
+ map->list[m].flag.gvg = 0;
+ map->list[m].flag.gvg_dungeon = 0;
+ map->list[m].flag.gvg_castle = 0;
+ ShowWarning("npc_parse_mapflag: You can't set PvP and GvG flags for the same map! Removing GvG flags from %s (file '%s', line '%d').\n", map->list[m].name, filepath, strline(buffer,start-buffer));
+ }
+ if( state && map->list[m].flag.battleground ) {
+ map->list[m].flag.battleground = 0;
+ ShowWarning("npc_parse_mapflag: You can't set PvP and BattleGround flags for the same map! Removing BattleGround flag from %s (file '%s', line '%d').\n", map->list[m].name, filepath, strline(buffer,start-buffer));
+ }
+ if( state && (zone = strdb_get(map->zone_db, MAP_ZONE_PVP_NAME)) && map->list[m].zone != zone ) {
map->zone_change(m,zone,start,buffer,filepath);
} else if ( !state ) {
- maplist[m].zone = &map_zone_pk;
+ map->list[m].zone = &map->zone_pk;
}
}
else if (!strcmpi(w3,"pvp_noparty"))
- maplist[m].flag.pvp_noparty=state;
+ map->list[m].flag.pvp_noparty=state;
else if (!strcmpi(w3,"pvp_noguild"))
- maplist[m].flag.pvp_noguild=state;
+ map->list[m].flag.pvp_noguild=state;
else if (!strcmpi(w3, "pvp_nightmaredrop")) {
char drop_arg1[16], drop_arg2[16];
int drop_per = 0;
@@ -3167,145 +3167,145 @@ const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, const char
drop_type = 3;
if (drop_id != 0) {
- RECREATE(maplist[m].drop_list, struct map_drop_list, ++maplist[m].drop_list_count);
- maplist[m].drop_list[maplist[m].drop_list_count-1].drop_id = drop_id;
- maplist[m].drop_list[maplist[m].drop_list_count-1].drop_type = drop_type;
- maplist[m].drop_list[maplist[m].drop_list_count-1].drop_per = drop_per;
- maplist[m].flag.pvp_nightmaredrop = 1;
+ RECREATE(map->list[m].drop_list, struct map_drop_list, ++map->list[m].drop_list_count);
+ map->list[m].drop_list[map->list[m].drop_list_count-1].drop_id = drop_id;
+ map->list[m].drop_list[map->list[m].drop_list_count-1].drop_type = drop_type;
+ map->list[m].drop_list[map->list[m].drop_list_count-1].drop_per = drop_per;
+ map->list[m].flag.pvp_nightmaredrop = 1;
}
} else if (!state) //Disable
- maplist[m].flag.pvp_nightmaredrop = 0;
+ map->list[m].flag.pvp_nightmaredrop = 0;
}
else if (!strcmpi(w3,"pvp_nocalcrank"))
- maplist[m].flag.pvp_nocalcrank=state;
+ map->list[m].flag.pvp_nocalcrank=state;
else if (!strcmpi(w3,"gvg")) {
struct map_zone_data *zone;
- maplist[m].flag.gvg = state;
- if( state && maplist[m].flag.pvp ) {
- maplist[m].flag.pvp = 0;
- ShowWarning("npc_parse_mapflag: You can't set PvP and GvG flags for the same map! Removing PvP flag from %s (file '%s', line '%d').\n", maplist[m].name, filepath, strline(buffer,start-buffer));
+ map->list[m].flag.gvg = state;
+ if( state && map->list[m].flag.pvp ) {
+ map->list[m].flag.pvp = 0;
+ ShowWarning("npc_parse_mapflag: You can't set PvP and GvG flags for the same map! Removing PvP flag from %s (file '%s', line '%d').\n", map->list[m].name, filepath, strline(buffer,start-buffer));
}
- if( state && maplist[m].flag.battleground ) {
- maplist[m].flag.battleground = 0;
- ShowWarning("npc_parse_mapflag: You can't set GvG and BattleGround flags for the same map! Removing BattleGround flag from %s (file '%s', line '%d').\n", maplist[m].name, filepath, strline(buffer,start-buffer));
+ if( state && map->list[m].flag.battleground ) {
+ map->list[m].flag.battleground = 0;
+ ShowWarning("npc_parse_mapflag: You can't set GvG and BattleGround flags for the same map! Removing BattleGround flag from %s (file '%s', line '%d').\n", map->list[m].name, filepath, strline(buffer,start-buffer));
}
- if( state && (zone = strdb_get(zone_db, MAP_ZONE_GVG_NAME)) && maplist[m].zone != zone ) {
+ if( state && (zone = strdb_get(map->zone_db, MAP_ZONE_GVG_NAME)) && map->list[m].zone != zone ) {
map->zone_change(m,zone,start,buffer,filepath);
}
}
else if (!strcmpi(w3,"gvg_noparty"))
- maplist[m].flag.gvg_noparty=state;
+ map->list[m].flag.gvg_noparty=state;
else if (!strcmpi(w3,"gvg_dungeon")) {
- maplist[m].flag.gvg_dungeon=state;
- if (state) maplist[m].flag.pvp=0;
+ map->list[m].flag.gvg_dungeon=state;
+ if (state) map->list[m].flag.pvp=0;
}
else if (!strcmpi(w3,"gvg_castle")) {
- maplist[m].flag.gvg_castle=state;
- if (state) maplist[m].flag.pvp=0;
+ map->list[m].flag.gvg_castle=state;
+ if (state) map->list[m].flag.pvp=0;
}
else if (!strcmpi(w3,"battleground")) {
struct map_zone_data *zone;
if( state ) {
if( sscanf(w4, "%d", &state) == 1 )
- maplist[m].flag.battleground = state;
+ map->list[m].flag.battleground = state;
else
- maplist[m].flag.battleground = 1; // Default value
+ map->list[m].flag.battleground = 1; // Default value
} else
- maplist[m].flag.battleground = 0;
+ map->list[m].flag.battleground = 0;
- if( maplist[m].flag.battleground && maplist[m].flag.pvp ) {
- maplist[m].flag.pvp = 0;
- ShowWarning("npc_parse_mapflag: You can't set PvP and BattleGround flags for the same map! Removing PvP flag from %s (file '%s', line '%d').\n", maplist[m].name, filepath, strline(buffer,start-buffer));
+ if( map->list[m].flag.battleground && map->list[m].flag.pvp ) {
+ map->list[m].flag.pvp = 0;
+ ShowWarning("npc_parse_mapflag: You can't set PvP and BattleGround flags for the same map! Removing PvP flag from %s (file '%s', line '%d').\n", map->list[m].name, filepath, strline(buffer,start-buffer));
}
- if( maplist[m].flag.battleground && (maplist[m].flag.gvg || maplist[m].flag.gvg_dungeon || maplist[m].flag.gvg_castle) ) {
- maplist[m].flag.gvg = 0;
- maplist[m].flag.gvg_dungeon = 0;
- maplist[m].flag.gvg_castle = 0;
- ShowWarning("npc_parse_mapflag: You can't set GvG and BattleGround flags for the same map! Removing GvG flag from %s (file '%s', line '%d').\n", maplist[m].name, filepath, strline(buffer,start-buffer));
+ if( map->list[m].flag.battleground && (map->list[m].flag.gvg || map->list[m].flag.gvg_dungeon || map->list[m].flag.gvg_castle) ) {
+ map->list[m].flag.gvg = 0;
+ map->list[m].flag.gvg_dungeon = 0;
+ map->list[m].flag.gvg_castle = 0;
+ ShowWarning("npc_parse_mapflag: You can't set GvG and BattleGround flags for the same map! Removing GvG flag from %s (file '%s', line '%d').\n", map->list[m].name, filepath, strline(buffer,start-buffer));
}
- if( state && (zone = strdb_get(zone_db, MAP_ZONE_BG_NAME)) && maplist[m].zone != zone ) {
+ if( state && (zone = strdb_get(map->zone_db, MAP_ZONE_BG_NAME)) && map->list[m].zone != zone ) {
map->zone_change(m,zone,start,buffer,filepath);
}
}
else if (!strcmpi(w3,"noexppenalty"))
- maplist[m].flag.noexppenalty=state;
+ map->list[m].flag.noexppenalty=state;
else if (!strcmpi(w3,"nozenypenalty"))
- maplist[m].flag.nozenypenalty=state;
+ map->list[m].flag.nozenypenalty=state;
else if (!strcmpi(w3,"notrade"))
- maplist[m].flag.notrade=state;
+ map->list[m].flag.notrade=state;
else if (!strcmpi(w3,"novending"))
- maplist[m].flag.novending=state;
+ map->list[m].flag.novending=state;
else if (!strcmpi(w3,"nodrop"))
- maplist[m].flag.nodrop=state;
+ map->list[m].flag.nodrop=state;
else if (!strcmpi(w3,"noskill"))
- maplist[m].flag.noskill=state;
+ map->list[m].flag.noskill=state;
else if (!strcmpi(w3,"noicewall"))
- maplist[m].flag.noicewall=state;
+ map->list[m].flag.noicewall=state;
else if (!strcmpi(w3,"snow"))
- maplist[m].flag.snow=state;
+ map->list[m].flag.snow=state;
else if (!strcmpi(w3,"clouds"))
- maplist[m].flag.clouds=state;
+ map->list[m].flag.clouds=state;
else if (!strcmpi(w3,"clouds2"))
- maplist[m].flag.clouds2=state;
+ map->list[m].flag.clouds2=state;
else if (!strcmpi(w3,"fog"))
- maplist[m].flag.fog=state;
+ map->list[m].flag.fog=state;
else if (!strcmpi(w3,"fireworks"))
- maplist[m].flag.fireworks=state;
+ map->list[m].flag.fireworks=state;
else if (!strcmpi(w3,"sakura"))
- maplist[m].flag.sakura=state;
+ map->list[m].flag.sakura=state;
else if (!strcmpi(w3,"leaves"))
- maplist[m].flag.leaves=state;
+ map->list[m].flag.leaves=state;
else if (!strcmpi(w3,"nightenabled"))
- maplist[m].flag.nightenabled=state;
+ map->list[m].flag.nightenabled=state;
else if (!strcmpi(w3,"noexp")) {
- maplist[m].flag.nobaseexp=state;
- maplist[m].flag.nojobexp=state;
+ map->list[m].flag.nobaseexp=state;
+ map->list[m].flag.nojobexp=state;
}
else if (!strcmpi(w3,"nobaseexp"))
- maplist[m].flag.nobaseexp=state;
+ map->list[m].flag.nobaseexp=state;
else if (!strcmpi(w3,"nojobexp"))
- maplist[m].flag.nojobexp=state;
+ map->list[m].flag.nojobexp=state;
else if (!strcmpi(w3,"noloot")) {
- maplist[m].flag.nomobloot=state;
- maplist[m].flag.nomvploot=state;
+ map->list[m].flag.nomobloot=state;
+ map->list[m].flag.nomvploot=state;
}
else if (!strcmpi(w3,"nomobloot"))
- maplist[m].flag.nomobloot=state;
+ map->list[m].flag.nomobloot=state;
else if (!strcmpi(w3,"nomvploot"))
- maplist[m].flag.nomvploot=state;
+ map->list[m].flag.nomvploot=state;
else if (!strcmpi(w3,"nocommand")) {
if (state) {
if (sscanf(w4, "%d", &state) == 1)
- maplist[m].nocommand =state;
+ map->list[m].nocommand =state;
else //No level specified, block everyone.
- maplist[m].nocommand =100;
+ map->list[m].nocommand =100;
} else
- maplist[m].nocommand=0;
+ map->list[m].nocommand=0;
}
else if (!strcmpi(w3,"jexp")) {
- maplist[m].jexp = (state) ? atoi(w4) : 100;
- if( maplist[m].jexp < 0 ) maplist[m].jexp = 100;
- maplist[m].flag.nojobexp = (maplist[m].jexp==0)?1:0;
+ map->list[m].jexp = (state) ? atoi(w4) : 100;
+ if( map->list[m].jexp < 0 ) map->list[m].jexp = 100;
+ map->list[m].flag.nojobexp = (map->list[m].jexp==0)?1:0;
}
else if (!strcmpi(w3,"bexp")) {
- maplist[m].bexp = (state) ? atoi(w4) : 100;
- if( maplist[m].bexp < 0 ) maplist[m].bexp = 100;
- maplist[m].flag.nobaseexp = (maplist[m].bexp==0)?1:0;
+ map->list[m].bexp = (state) ? atoi(w4) : 100;
+ if( map->list[m].bexp < 0 ) map->list[m].bexp = 100;
+ map->list[m].flag.nobaseexp = (map->list[m].bexp==0)?1:0;
}
else if (!strcmpi(w3,"loadevent"))
- maplist[m].flag.loadevent=state;
+ map->list[m].flag.loadevent=state;
else if (!strcmpi(w3,"nochat"))
- maplist[m].flag.nochat=state;
+ map->list[m].flag.nochat=state;
else if (!strcmpi(w3,"partylock"))
- maplist[m].flag.partylock=state;
+ map->list[m].flag.partylock=state;
else if (!strcmpi(w3,"guildlock"))
- maplist[m].flag.guildlock=state;
+ map->list[m].flag.guildlock=state;
else if (!strcmpi(w3,"reset"))
- maplist[m].flag.reset=state;
+ map->list[m].flag.reset=state;
else if (!strcmpi(w3,"notomb"))
- maplist[m].flag.notomb=state;
+ map->list[m].flag.notomb=state;
else if (!strcmpi(w3,"adjust_unit_duration")) {
int skill_id, k;
char skill_name[MAP_ZONE_MAPFLAG_LENGTH], modifier[MAP_ZONE_MAPFLAG_LENGTH];
@@ -3323,41 +3323,41 @@ const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, const char
}
if( modifier[0] == '\0' ) {
- ShowWarning("npc_parse_mapflag: Missing 5th param for 'adjust_unit_duration' flag! removing flag from %s (file '%s', line '%d').\n", maplist[m].name, filepath, strline(buffer,start-buffer));
+ ShowWarning("npc_parse_mapflag: Missing 5th param for 'adjust_unit_duration' flag! removing flag from %s (file '%s', line '%d').\n", map->list[m].name, filepath, strline(buffer,start-buffer));
} else if( !( skill_id = skill->name2id(skill_name) ) || !skill->get_unit_id( skill->name2id(skill_name), 0) ) {
- ShowWarning("npc_parse_mapflag: Unknown skill (%s) for 'adjust_unit_duration' flag! removing flag from %s (file '%s', line '%d').\n",skill_name, maplist[m].name, filepath, strline(buffer,start-buffer));
+ ShowWarning("npc_parse_mapflag: Unknown skill (%s) for 'adjust_unit_duration' flag! removing flag from %s (file '%s', line '%d').\n",skill_name, map->list[m].name, filepath, strline(buffer,start-buffer));
} else if ( atoi(modifier) < 1 || atoi(modifier) > USHRT_MAX ) {
- ShowWarning("npc_parse_mapflag: Invalid modifier '%d' for skill '%s' for 'adjust_unit_duration' flag! removing flag from %s (file '%s', line '%d').\n", atoi(modifier), skill_name, maplist[m].name, filepath, strline(buffer,start-buffer));
+ ShowWarning("npc_parse_mapflag: Invalid modifier '%d' for skill '%s' for 'adjust_unit_duration' flag! removing flag from %s (file '%s', line '%d').\n", atoi(modifier), skill_name, map->list[m].name, filepath, strline(buffer,start-buffer));
} else {
- int idx = maplist[m].unit_count;
+ int idx = map->list[m].unit_count;
- ARR_FIND(0, idx, k, maplist[m].units[k]->skill_id == skill_id);
+ ARR_FIND(0, idx, k, map->list[m].units[k]->skill_id == skill_id);
if( k < idx ) {
if( atoi(modifier) != 100 )
- maplist[m].units[k]->modifier = (unsigned short)atoi(modifier);
+ map->list[m].units[k]->modifier = (unsigned short)atoi(modifier);
else { /* remove */
int cursor = 0;
- aFree(maplist[m].units[k]);
- maplist[m].units[k] = NULL;
+ aFree(map->list[m].units[k]);
+ map->list[m].units[k] = NULL;
for( k = 0; k < idx; k++ ) {
- if( maplist[m].units[k] == NULL )
+ if( map->list[m].units[k] == NULL )
continue;
- maplist[m].units[cursor] = maplist[m].units[k];
+ map->list[m].units[cursor] = map->list[m].units[k];
cursor++;
}
- if( !( maplist[m].unit_count = cursor ) ) {
- aFree(maplist[m].units);
- maplist[m].units = NULL;
+ if( !( map->list[m].unit_count = cursor ) ) {
+ aFree(map->list[m].units);
+ map->list[m].units = NULL;
}
}
} else if( atoi(modifier) != 100 ) {
- RECREATE(maplist[m].units, struct mapflag_skill_adjust*, ++maplist[m].unit_count);
- CREATE(maplist[m].units[idx],struct mapflag_skill_adjust,1);
- maplist[m].units[idx]->skill_id = (unsigned short)skill_id;
- maplist[m].units[idx]->modifier = (unsigned short)atoi(modifier);
+ RECREATE(map->list[m].units, struct mapflag_skill_adjust*, ++map->list[m].unit_count);
+ CREATE(map->list[m].units[idx],struct mapflag_skill_adjust,1);
+ map->list[m].units[idx]->skill_id = (unsigned short)skill_id;
+ map->list[m].units[idx]->modifier = (unsigned short)atoi(modifier);
}
}
} else if (!strcmpi(w3,"adjust_skill_damage")) {
@@ -3377,68 +3377,68 @@ const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, const char
}
if( modifier[0] == '\0' ) {
- ShowWarning("npc_parse_mapflag: Missing 5th param for 'adjust_skill_damage' flag! removing flag from %s (file '%s', line '%d').\n", maplist[m].name, filepath, strline(buffer,start-buffer));
+ ShowWarning("npc_parse_mapflag: Missing 5th param for 'adjust_skill_damage' flag! removing flag from %s (file '%s', line '%d').\n", map->list[m].name, filepath, strline(buffer,start-buffer));
} else if( !( skill_id = skill->name2id(skill_name) ) ) {
- ShowWarning("npc_parse_mapflag: Unknown skill (%s) for 'adjust_skill_damage' flag! removing flag from %s (file '%s', line '%d').\n", skill_name, maplist[m].name, filepath, strline(buffer,start-buffer));
+ ShowWarning("npc_parse_mapflag: Unknown skill (%s) for 'adjust_skill_damage' flag! removing flag from %s (file '%s', line '%d').\n", skill_name, map->list[m].name, filepath, strline(buffer,start-buffer));
} else if ( atoi(modifier) < 1 || atoi(modifier) > USHRT_MAX ) {
- ShowWarning("npc_parse_mapflag: Invalid modifier '%d' for skill '%s' for 'adjust_skill_damage' flag! removing flag from %s (file '%s', line '%d').\n", atoi(modifier), skill_name, maplist[m].name, filepath, strline(buffer,start-buffer));
+ ShowWarning("npc_parse_mapflag: Invalid modifier '%d' for skill '%s' for 'adjust_skill_damage' flag! removing flag from %s (file '%s', line '%d').\n", atoi(modifier), skill_name, map->list[m].name, filepath, strline(buffer,start-buffer));
} else {
- int idx = maplist[m].skill_count;
+ int idx = map->list[m].skill_count;
- ARR_FIND(0, idx, k, maplist[m].skills[k]->skill_id == skill_id);
+ ARR_FIND(0, idx, k, map->list[m].skills[k]->skill_id == skill_id);
if( k < idx ) {
if( atoi(modifier) != 100 )
- maplist[m].skills[k]->modifier = (unsigned short)atoi(modifier);
+ map->list[m].skills[k]->modifier = (unsigned short)atoi(modifier);
else { /* remove */
int cursor = 0;
- aFree(maplist[m].skills[k]);
- maplist[m].skills[k] = NULL;
+ aFree(map->list[m].skills[k]);
+ map->list[m].skills[k] = NULL;
for( k = 0; k < idx; k++ ) {
- if( maplist[m].skills[k] == NULL )
+ if( map->list[m].skills[k] == NULL )
continue;
- maplist[m].skills[cursor] = maplist[m].skills[k];
+ map->list[m].skills[cursor] = map->list[m].skills[k];
cursor++;
}
- if( !( maplist[m].skill_count = cursor ) ) {
- aFree(maplist[m].skills);
- maplist[m].skills = NULL;
+ if( !( map->list[m].skill_count = cursor ) ) {
+ aFree(map->list[m].skills);
+ map->list[m].skills = NULL;
}
}
} else if( atoi(modifier) != 100 ) {
- RECREATE(maplist[m].skills, struct mapflag_skill_adjust*, ++maplist[m].skill_count);
- CREATE(maplist[m].skills[idx],struct mapflag_skill_adjust,1);
- maplist[m].skills[idx]->skill_id = (unsigned short)skill_id;
- maplist[m].skills[idx]->modifier = (unsigned short)atoi(modifier);
+ RECREATE(map->list[m].skills, struct mapflag_skill_adjust*, ++map->list[m].skill_count);
+ CREATE(map->list[m].skills[idx],struct mapflag_skill_adjust,1);
+ map->list[m].skills[idx]->skill_id = (unsigned short)skill_id;
+ map->list[m].skills[idx]->modifier = (unsigned short)atoi(modifier);
}
}
} else if (!strcmpi(w3,"zone")) {
struct map_zone_data *zone;
- if( !(zone = strdb_get(zone_db, w4)) ) {
- ShowWarning("npc_parse_mapflag: Invalid zone '%s'! removing flag from %s (file '%s', line '%d').\n", w4, maplist[m].name, filepath, strline(buffer,start-buffer));
- } else if( maplist[m].zone != zone ) {
+ if( !(zone = strdb_get(map->zone_db, w4)) ) {
+ ShowWarning("npc_parse_mapflag: Invalid zone '%s'! removing flag from %s (file '%s', line '%d').\n", w4, map->list[m].name, filepath, strline(buffer,start-buffer));
+ } else if( map->list[m].zone != zone ) {
map->zone_change(m,zone,start,buffer,filepath);
}
} else if ( !strcmpi(w3,"nomapchannelautojoin") ) {
- maplist[m].flag.chsysnolocalaj = state;
+ map->list[m].flag.chsysnolocalaj = state;
} else if ( !strcmpi(w3,"invincible_time_inc") ) {
- maplist[m].invincible_time_inc = (state) ? atoi(w4) : 0;
+ map->list[m].invincible_time_inc = (state) ? atoi(w4) : 0;
} else if ( !strcmpi(w3,"noknockback") ) {
- maplist[m].flag.noknockback = state;
+ map->list[m].flag.noknockback = state;
} else if ( !strcmpi(w3,"weapon_damage_rate") ) {
- maplist[m].weapon_damage_rate = (state) ? atoi(w4) : 100;
+ map->list[m].weapon_damage_rate = (state) ? atoi(w4) : 100;
} else if ( !strcmpi(w3,"magic_damage_rate") ) {
- maplist[m].magic_damage_rate = (state) ? atoi(w4) : 100;
+ map->list[m].magic_damage_rate = (state) ? atoi(w4) : 100;
} else if ( !strcmpi(w3,"misc_damage_rate") ) {
- maplist[m].misc_damage_rate = (state) ? atoi(w4) : 100;
+ map->list[m].misc_damage_rate = (state) ? atoi(w4) : 100;
} else if ( !strcmpi(w3,"short_damage_rate") ) {
- maplist[m].short_damage_rate = (state) ? atoi(w4) : 100;
+ map->list[m].short_damage_rate = (state) ? atoi(w4) : 100;
} else if ( !strcmpi(w3,"long_damage_rate") ) {
- maplist[m].long_damage_rate = (state) ? atoi(w4) : 100;
+ map->list[m].long_damage_rate = (state) ? atoi(w4) : 100;
} else
ShowError("npc_parse_mapflag: unrecognized mapflag '%s' (file '%s', line '%d').\n", w3, filepath, strline(buffer,start-buffer));
@@ -3560,7 +3560,7 @@ void npc_parsesrcfile(const char* filepath, bool runOnInit)
p = strchr(p,'\n');// next line
continue;
}
- if (x < 0 || x >= maplist[m].xs || y < 0 || y >= maplist[m].ys) {
+ if (x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys) {
ShowError("npc_parsesrcfile: Unknown coordinates ('%d', '%d') for map '%s' in file '%s', line '%d'. Skipping line...\n", x, y, mapname, filepath, strline(buffer,p-buffer));
if( strcasecmp(w2,"script") == 0 && count > 3 )
{
@@ -3742,20 +3742,20 @@ int npc_reload(void) {
mapit->free(iter);
if(battle_config.dynamic_mobs) {// dynamic check by [random]
- for (m = 0; m < map->map_num; m++) {
+ for (m = 0; m < map->count; m++) {
for (i = 0; i < MAX_MOB_LIST_PER_MAP; i++) {
- if (maplist[m].moblist[i] != NULL) {
- aFree(maplist[m].moblist[i]);
- maplist[m].moblist[i] = NULL;
+ if (map->list[m].moblist[i] != NULL) {
+ aFree(map->list[m].moblist[i]);
+ map->list[m].moblist[i] = NULL;
}
- if( maplist[m].mob_delete_timer != INVALID_TIMER )
+ if( map->list[m].mob_delete_timer != INVALID_TIMER )
{ // Mobs were removed anyway,so delete the timer [Inkfish]
- timer->delete(maplist[m].mob_delete_timer, map->removemobs_timer);
- maplist[m].mob_delete_timer = INVALID_TIMER;
+ timer->delete(map->list[m].mob_delete_timer, map->removemobs_timer);
+ map->list[m].mob_delete_timer = INVALID_TIMER;
}
}
- if (maplist[m].npc_num > 0)
- ShowWarning("npc_reload: %d npcs weren't removed at map %s!\n", maplist[m].npc_num, maplist[m].name);
+ if (map->list[m].npc_num > 0)
+ ShowWarning("npc_reload: %d npcs weren't removed at map %s!\n", map->list[m].npc_num, map->list[m].name);
}
}
@@ -3865,24 +3865,24 @@ void npc_debug_warps_sub(struct npc_data* nd) {
if (map->getcell(m, nd->u.warp.x, nd->u.warp.y, CELL_CHKNPC)) {
ShowWarning("Warp %s at %s(%d,%d) warps directly on top of an area npc at %s(%d,%d)\n",
nd->name,
- maplist[nd->bl.m].name, nd->bl.x, nd->bl.y,
- maplist[m].name, nd->u.warp.x, nd->u.warp.y
+ map->list[nd->bl.m].name, nd->bl.x, nd->bl.y,
+ map->list[m].name, nd->u.warp.x, nd->u.warp.y
);
}
if (map->getcell(m, nd->u.warp.x, nd->u.warp.y, CELL_CHKNOPASS)) {
ShowWarning("Warp %s at %s(%d,%d) warps to a non-walkable tile at %s(%d,%d)\n",
nd->name,
- maplist[nd->bl.m].name, nd->bl.x, nd->bl.y,
- maplist[m].name, nd->u.warp.x, nd->u.warp.y
+ map->list[nd->bl.m].name, nd->bl.x, nd->bl.y,
+ map->list[m].name, nd->u.warp.x, nd->u.warp.y
);
}
}
static void npc_debug_warps(void) {
int16 m, i;
- for (m = 0; m < map->map_num; m++)
- for (i = 0; i < maplist[m].npc_num; i++)
- npc->debug_warps_sub(maplist[m].npc[i]);
+ for (m = 0; m < map->count; m++)
+ for (i = 0; i < map->list[m].npc_num; i++)
+ npc->debug_warps_sub(map->list[m].npc[i]);
}
/*==========================================
diff --git a/src/map/packets.h b/src/map/packets.h
index 326d436a8..3ae52cba8 100644
--- a/src/map/packets.h
+++ b/src/map/packets.h
@@ -2118,7 +2118,11 @@ packet(0x020d,-1);
packet(0x035F,6,clif->pReqClickBuyingStore,2);
packet(0x0886,2,clif->pReqCloseBuyingStore,0);
packet(0x0938,-1,clif->pReqOpenBuyingStore,2,4,8,9,89);
+#ifdef PACKETVER_RE
packet(0x085D,41,clif->pPartyBookingRegisterReq,2,4);
+#else // not PACKETVER_RE
+ packet(0x085D,18,clif->pPartyBookingRegisterReq,2,4);
+#endif // PACKETVER_RE
//packet(0x095A,8); // unknown usage
packet(0x0868,-1,clif->pItemListWindowSelected,2,4,8);
packet(0x0888,19,clif->pWantToConnection,2,6,10,14,18);
@@ -2159,7 +2163,11 @@ packet(0x020d,-1);
packet(0x0360,6,clif->pReqClickBuyingStore,2);
packet(0x0817,2,clif->pReqCloseBuyingStore,0);
packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89);
+#ifdef PACKETVER_RE
packet(0x092D,41,clif->pPartyBookingRegisterReq,2,4);
+#else // not PACKETVER_RE
+ packet(0x092D,18,clif->pPartyBookingRegisterReq,2,4);
+#endif // PACKETVER_RE
//packet(0x08AA,8); // CZ_JOIN_BATTLE_FIELD
packet(0x0963,-1,clif->pItemListWindowSelected,2,4,8);
packet(0x0943,19,clif->pWantToConnection,2,6,10,14,18);
@@ -2194,7 +2202,11 @@ packet(0x020d,-1);
packet(0x0368,6,clif->pReqClickBuyingStore,2);
packet(0x086E,2,clif->pReqCloseBuyingStore,0);
packet(0x0874,-1,clif->pReqOpenBuyingStore,2,4,8,9,89);
+#ifdef PACKETVER_RE
packet(0x089B,41,clif->pPartyBookingRegisterReq,2,4);
+#else // not PACKETVER_RE
+ packet(0x089B,18,clif->pPartyBookingRegisterReq,2,4);
+#endif // PACKETVER_RE
//packet(0x0965,8); // CZ_JOIN_BATTLE_FIELD
packet(0x086A,-1,clif->pItemListWindowSelected,2,4,8);
packet(0x08A9,19,clif->pWantToConnection,2,6,10,14,18);
@@ -2228,7 +2240,11 @@ packet(0x020d,-1);
packet(0x0892,6,clif->pReqClickBuyingStore,2);
packet(0x0964,2,clif->pReqCloseBuyingStore,0);
packet(0x0869,-1,clif->pReqOpenBuyingStore,2,4,8,9,89);
+#ifdef PACKETVER_RE
packet(0x0874,41,clif->pPartyBookingRegisterReq,2,4);
+#else // not PACKETVER_RE
+ packet(0x0874,18,clif->pPartyBookingRegisterReq,2,4);
+#endif // PACKETVER_RE
// packet(0x088E,8); // CZ_JOIN_BATTLE_FIELD
packet(0x0958,-1,clif->pItemListWindowSelected,2,4,8);
packet(0x0919,19,clif->pWantToConnection,2,6,10,14,18);
@@ -2261,7 +2277,11 @@ packet(0x020d,-1);
packet(0x0360,6,clif->pReqClickBuyingStore,2);
packet(0x0817,2,clif->pReqCloseBuyingStore,0);
packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89);
+#ifdef PACKETVER_RE
packet(0x0365,41,clif->pPartyBookingRegisterReq,2,4);
+#else // not PACKETVER_RE
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4);
+#endif // PACKETVER_RE
// packet(0x0363,8); // CZ_JOIN_BATTLE_FIELD
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8);
packet(0x022D,19,clif->pWantToConnection,2,6,10,14,18);
@@ -2303,7 +2323,11 @@ packet(0x020d,-1);
packet(0x0862,6,clif->pReqClickBuyingStore,2);
packet(0x085A,2,clif->pReqCloseBuyingStore,0);
packet(0x0932,-1,clif->pReqOpenBuyingStore,2,4,8,9,89);
+#ifdef PACKETVER_RE
packet(0x08A7,41,clif->pPartyBookingRegisterReq,2,4);
+#else // not PACKETVER_RE
+ packet(0x08A7,18,clif->pPartyBookingRegisterReq,2,4);
+#endif // PACKETVER_RE
// packet(0x087A,8); // CZ_JOIN_BATTLE_FIELD
packet(0x0942,-1,clif->pItemListWindowSelected,2,4,8);
packet(0x095B,19,clif->pWantToConnection,2,6,10,14,18);
@@ -2336,7 +2360,11 @@ packet(0x020d,-1);
packet(0x0360,6,clif->pReqClickBuyingStore,2);
packet(0x0365,2,clif->pReqCloseBuyingStore,0);
packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89);
+#ifdef PACKETVER_RE
packet(0x0894,41,clif->pPartyBookingRegisterReq,2,4);
+#else // not PACKETVER_RE
+ packet(0x0894,18,clif->pPartyBookingRegisterReq,2,4);
+#endif // PACKETVER_RE
// packet(0x0860,8); // CZ_JOIN_BATTLE_FIELD
packet(0x08A5,-1,clif->pItemListWindowSelected,2,4,8);
packet(0x088C,19,clif->pWantToConnection,2,6,10,14,18);
@@ -2357,7 +2385,11 @@ packet(0x020d,-1);
packet(0x0202,6,clif->pReqClickBuyingStore,2);
packet(0x0817,2,clif->pReqCloseBuyingStore,0);
packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89);
+#ifdef PACKETVER_RE
packet(0x0365,41,clif->pPartyBookingRegisterReq,2,4);
+#else // not PACKETVER_RE
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4);
+#endif // PACKETVER_RE
// packet(0x0363,8); // CZ_JOIN_BATTLE_FIELD
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8);
packet(0x022D,19,clif->pWantToConnection,2,6,10,14,18);
@@ -2391,7 +2423,11 @@ packet(0x020d,-1);
packet(0x0360,6,clif->pReqClickBuyingStore,2);
packet(0x0817,2,clif->pReqCloseBuyingStore,0);
packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89);
+#ifdef PACKETVER_RE
packet(0x0365,41,clif->pPartyBookingRegisterReq,2,4);
+#else // not PACKETVER_RE
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4);
+#endif // PACKETVER_RE
// packet(0x0363,8); // CZ_JOIN_BATTLE_FIELD
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8);
packet(0x022D,19,clif->pWantToConnection,2,6,10,14,18);
diff --git a/src/map/party.c b/src/map/party.c
index a3fd5019f..1694adf2c 100644
--- a/src/map/party.c
+++ b/src/map/party.c
@@ -630,7 +630,7 @@ bool party_changeleader(struct map_session_data *sd, struct map_session_data *ts
return false;
}
- if( maplist[sd->bl.m].flag.partylock ) {
+ if( map->list[sd->bl.m].flag.partylock ) {
clif->message(sd->fd, msg_txt(287));
return false;
}
diff --git a/src/map/path.c b/src/map/path.c
index 79e004601..a47677cf5 100644
--- a/src/map/path.c
+++ b/src/map/path.c
@@ -68,9 +68,9 @@ int path_blownpos(int16 m,int16 x0,int16 y0,int16 dx,int16 dy,int count)
{
struct map_data *md;
- if( !maplist[m].cell )
+ if( !map->list[m].cell )
return -1;
- md = &maplist[m];
+ md = &map->list[m];
if( count>25 ){ //Cap to prevent too much processing...?
ShowWarning("path_blownpos: count too many %d !\n",count);
@@ -121,9 +121,9 @@ bool path_search_long(struct shootpath_data *spd,int16 m,int16 x0,int16 y0,int16
if( spd == NULL )
spd = &s_spd; // use dummy output variable
- if (!maplist[m].cell)
+ if (!map->list[m].cell)
return false;
- md = &maplist[m];
+ md = &map->list[m];
dx = (x1 - x0);
if (dx < 0) {
@@ -255,9 +255,9 @@ bool path_search(struct walkpath_data *wpd, int16 m, int16 x0, int16 y0, int16 x
if (wpd == NULL)
wpd = &s_wpd; // use dummy output variable
- if (!maplist[m].cell)
+ if (!map->list[m].cell)
return false;
- md = &maplist[m];
+ md = &map->list[m];
#ifdef CELL_NOSTACK
//Do not check starting cell as that would get you stuck.
diff --git a/src/map/pc.c b/src/map/pc.c
index 17734dfe8..58972a204 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -136,7 +136,7 @@ int pc_invincible_timer(int tid, unsigned int tick, int id, intptr_t data) {
void pc_setinvincibletimer(struct map_session_data* sd, int val) {
nullpo_retv(sd);
- val += maplist[sd->bl.m].invincible_time_inc;
+ val += map->list[sd->bl.m].invincible_time_inc;
if( sd->invincible_timer != INVALID_TIMER )
timer->delete(sd->invincible_timer,pc->invincible_timer);
@@ -547,8 +547,8 @@ int pc_makesavestatus(struct map_session_data *sd)
sd->status.last_point.y = sd->bl.y;
}
- if(maplist[sd->bl.m].flag.nosave || maplist[sd->bl.m].instance_id >= 0) {
- struct map_data *m=&maplist[sd->bl.m];
+ if(map->list[sd->bl.m].flag.nosave || map->list[sd->bl.m].instance_id >= 0) {
+ struct map_data *m=&map->list[sd->bl.m];
if(m->save.map)
memcpy(&sd->status.last_point,&m->save,sizeof(sd->status.last_point));
else
@@ -1273,9 +1273,9 @@ int pc_reg_received(struct map_session_data *sd)
sd->vd.class_ = INVISIBLE_CLASS;
clif->message(sd->fd, msg_txt(11)); // Invisible: On
// decrement the number of pvp players on the map
- maplist[sd->bl.m].users_pvp--;
+ map->list[sd->bl.m].users_pvp--;
- if( maplist[sd->bl.m].flag.pvp && !maplist[sd->bl.m].flag.pvp_nocalcrank && sd->pvp_timer != INVALID_TIMER ) {// unregister the player for ranking
+ if( map->list[sd->bl.m].flag.pvp && !map->list[sd->bl.m].flag.pvp_nocalcrank && sd->pvp_timer != INVALID_TIMER ) {// unregister the player for ranking
timer->delete( sd->pvp_timer, pc->calc_pvprank_timer );
sd->pvp_timer = INVALID_TIMER;
}
@@ -3998,7 +3998,7 @@ int pc_dropitem(struct map_session_data *sd,int n,int amount)
)
return 0;
- if( maplist[sd->bl.m].flag.nodrop ) {
+ if( map->list[sd->bl.m].flag.nodrop ) {
clif->message (sd->fd, msg_txt(271));
return 0; //Can't drop items in nodrop mapflag maps.
}
@@ -4126,7 +4126,7 @@ int pc_isUseitem(struct map_session_data *sd,int n)
break;
case 601: // Fly Wing
case 12212: // Giant Fly Wing
- if( maplist[sd->bl.m].flag.noteleport || map_flag_gvg2(sd->bl.m) ) {
+ if( map->list[sd->bl.m].flag.noteleport || map_flag_gvg2(sd->bl.m) ) {
clif->skill_mapinfomessage(sd,0);
return 0;
}
@@ -4143,14 +4143,14 @@ int pc_isUseitem(struct map_session_data *sd,int n)
clif->message(sd->fd, msg_txt(663));
return 0;
}
- if( nameid != 601 && nameid != 12212 && maplist[sd->bl.m].flag.noreturn )
+ if( nameid != 601 && nameid != 12212 && map->list[sd->bl.m].flag.noreturn )
return 0;
break;
case 604: // Dead Branch
case 12024: // Red Pouch
case 12103: // Bloody Branch
case 12109: // Poring Box
- if( maplist[sd->bl.m].flag.nobranch || map_flag_gvg2(sd->bl.m) )
+ if( map->list[sd->bl.m].flag.nobranch || map_flag_gvg2(sd->bl.m) )
return 0;
break;
case 12210: // Bubble Gum
@@ -4191,7 +4191,7 @@ int pc_isUseitem(struct map_session_data *sd,int n)
break;
case 12213: //Neuralizer
- if( !maplist[sd->bl.m].flag.reset )
+ if( !map->list[sd->bl.m].flag.reset )
return 0;
break;
}
@@ -4365,8 +4365,8 @@ int pc_useitem(struct map_session_data *sd,int n) {
}
/* on restricted maps the item is consumed but the effect is not used */
- for(i = 0; i < maplist[sd->bl.m].zone->disabled_items_count; i++) {
- if( maplist[sd->bl.m].zone->disabled_items[i] == nameid ) {
+ for(i = 0; i < map->list[sd->bl.m].zone->disabled_items_count; i++) {
+ if( map->list[sd->bl.m].zone->disabled_items[i] == nameid ) {
clif->msg(sd, ITEM_CANT_USE_AREA); // This item cannot be used within this area
if( battle_config.item_restricted_consumption_type ) {
clif->useitemack(sd,n,sd->status.inventory[n].amount-1,true);
@@ -4636,7 +4636,7 @@ int pc_steal_item(struct map_session_data *sd,struct block_list *bl, uint16 skil
md_status= status->get_status_data(bl);
if( md->master_id || md_status->mode&MD_BOSS || mob_is_treasure(md) ||
- maplist[bl->m].flag.nomobloot || // check noloot map flag [Lorky]
+ map->list[bl->m].flag.nomobloot || // check noloot map flag [Lorky]
(battle_config.skill_steal_max_tries && //Reached limit of steal attempts. [Lupus]
md->state.steal_flag++ >= battle_config.skill_steal_max_tries)
) { //Can't steal from
@@ -4744,7 +4744,7 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y
pc->setrestartvalue(sd,1);
}
- if( maplist[m].flag.src4instance ) {
+ if( map->list[m].flag.src4instance ) {
struct party_data *p;
bool stop = false;
int i = 0, j = 0;
@@ -4752,7 +4752,7 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y
if( sd->instances ) {
for( i = 0; i < sd->instances; i++ ) {
if( sd->instance[i] >= 0 ) {
- ARR_FIND(0, instance->list[sd->instance[i]].num_map, j, maplist[instance->list[sd->instance[i]].map[j]].instance_src_map == m && !maplist[instance->list[sd->instance[i]].map[j]].custom_name);
+ ARR_FIND(0, instance->list[sd->instance[i]].num_map, j, map->list[instance->list[sd->instance[i]].map[j]].instance_src_map == m && !map->list[instance->list[sd->instance[i]].map[j]].custom_name);
if( j != instance->list[sd->instance[i]].num_map )
break;
}
@@ -4766,7 +4766,7 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y
if ( !stop && sd->status.party_id && (p = party->search(sd->status.party_id)) && p->instances ) {
for( i = 0; i < p->instances; i++ ) {
if( p->instance[i] >= 0 ) {
- ARR_FIND(0, instance->list[p->instance[i]].num_map, j, maplist[instance->list[p->instance[i]].map[j]].instance_src_map == m && !maplist[instance->list[p->instance[i]].map[j]].custom_name);
+ ARR_FIND(0, instance->list[p->instance[i]].num_map, j, map->list[instance->list[p->instance[i]].map[j]].instance_src_map == m && !map->list[instance->list[p->instance[i]].map[j]].custom_name);
if( j != instance->list[p->instance[i]].num_map )
break;
}
@@ -4780,7 +4780,7 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y
if ( !stop && sd->status.guild_id && sd->guild && sd->guild->instances ) {
for( i = 0; i < sd->guild->instances; i++ ) {
if( sd->guild->instance[i] >= 0 ) {
- ARR_FIND(0, instance->list[sd->guild->instance[i]].num_map, j, maplist[instance->list[sd->guild->instance[i]].map[j]].instance_src_map == m && !maplist[instance->list[sd->guild->instance[i]].map[j]].custom_name);
+ ARR_FIND(0, instance->list[sd->guild->instance[i]].num_map, j, map->list[instance->list[sd->guild->instance[i]].map[j]].instance_src_map == m && !map->list[instance->list[sd->guild->instance[i]].map[j]].custom_name);
if( j != instance->list[sd->guild->instance[i]].num_map )
break;
}
@@ -4803,13 +4803,13 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y
for( i = 0; i < sd->queues_count; i++ ) {
struct hQueue *queue;
if( (queue = script->queue(sd->queues[i])) && queue->onMapChange[0] != '\0' ) {
- pc->setregstr(sd, script->add_str("QMapChangeTo"), maplist[m].name);
+ pc->setregstr(sd, script->add_str("QMapChangeTo"), map->list[m].name);
npc->event(sd, queue->onMapChange, 0);
}
}
- if( maplist[m].cell == (struct mapcell *)0xdeadbeaf )
- map->cellfromcache(&maplist[m]);
+ if( map->list[m].cell == (struct mapcell *)0xdeadbeaf )
+ map->cellfromcache(&map->list[m]);
if (sd->sc.count) { // Cancel some map related stuff.
if (sd->sc.data[SC_JAILED])
return 1; //You may not get out!
@@ -4842,13 +4842,13 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y
if (sd->regen.state.gc)
sd->regen.state.gc = 0;
// make sure vending is allowed here
- if (sd->state.vending && maplist[m].flag.novending) {
+ if (sd->state.vending && map->list[m].flag.novending) {
clif->message (sd->fd, msg_txt(276)); // "You can't open a shop on this map"
vending->close(sd);
}
- if( hChSys.local && maplist[sd->bl.m].channel && idb_exists(maplist[sd->bl.m].channel->users, sd->status.char_id) ) {
- clif->chsys_left(maplist[sd->bl.m].channel,sd);
+ if( hChSys.local && map->list[sd->bl.m].channel && idb_exists(map->list[sd->bl.m].channel->users, sd->status.char_id) ) {
+ clif->chsys_left(map->list[sd->bl.m].channel,sd);
}
}
@@ -4877,15 +4877,15 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y
return 0;
}
- if( x < 0 || x >= maplist[m].xs || y < 0 || y >= maplist[m].ys ) {
+ if( x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys ) {
ShowError("pc_setpos: attempt to place player %s (%d:%d) on invalid coordinates (%s-%d,%d)\n", sd->status.name, sd->status.account_id, sd->status.char_id, mapindex_id2name(mapindex),x,y);
x = y = 0; // make it random
}
if( x == 0 && y == 0 ) {// pick a random walkable cell
do {
- x=rnd()%(maplist[m].xs-2)+1;
- y=rnd()%(maplist[m].ys-2)+1;
+ x=rnd()%(map->list[m].xs-2)+1;
+ y=rnd()%(map->list[m].ys-2)+1;
} while(map->getcell(m,x,y,CELL_CHKNOPASS));
}
@@ -4906,7 +4906,7 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y
sd->bl.x = sd->ud.to_x = x;
sd->bl.y = sd->ud.to_y = y;
- if( sd->status.guild_id > 0 && maplist[m].flag.gvg_castle ) { // Increased guild castle regen [Valaris]
+ if( sd->status.guild_id > 0 && map->list[m].flag.gvg_castle ) { // Increased guild castle regen [Valaris]
struct guild_castle *gc = guild->mapindex2gc(sd->mapindex);
if(gc && gc->guild_id == sd->status.guild_id)
sd->regen.state.gc = 1;
@@ -4951,12 +4951,12 @@ int pc_randomwarp(struct map_session_data *sd, clr_type type) {
m=sd->bl.m;
- if (maplist[sd->bl.m].flag.noteleport) //Teleport forbidden
+ if (map->list[sd->bl.m].flag.noteleport) //Teleport forbidden
return 0;
do {
- x=rnd()%(maplist[m].xs-2)+1;
- y=rnd()%(maplist[m].ys-2)+1;
+ x=rnd()%(map->list[m].xs-2)+1;
+ y=rnd()%(map->list[m].ys-2)+1;
} while( map->getcell(m,x,y,CELL_CHKNOPASS) && (i++) < 1000 );
if (i < 1000)
@@ -4975,7 +4975,7 @@ int pc_memo(struct map_session_data* sd, int pos) {
nullpo_ret(sd);
// check mapflags
- if( sd->bl.m >= 0 && (maplist[sd->bl.m].flag.nomemo || maplist[sd->bl.m].flag.nowarpto) && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE) ) {
+ if( sd->bl.m >= 0 && (map->list[sd->bl.m].flag.nomemo || map->list[sd->bl.m].flag.nowarpto) && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE) ) {
clif->skill_mapinfomessage(sd, 1); // "Saved point cannot be memorized."
return 0;
}
@@ -5833,7 +5833,7 @@ int pc_gainexp(struct map_session_data *sd, struct block_list *src, unsigned int
if(sd->bl.prev == NULL || pc_isdead(sd))
return 0;
- if(!battle_config.pvp_exp && maplist[sd->bl.m].flag.pvp) // [MouseJstr]
+ if(!battle_config.pvp_exp && map->list[sd->bl.m].flag.pvp) // [MouseJstr]
return 0; // no exp on pvp maps
if(sd->status.guild_id>0)
@@ -6651,7 +6651,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) {
if(sd->status.pet_id > 0 && sd->pd) {
struct pet_data *pd = sd->pd;
- if( !maplist[sd->bl.m].flag.noexppenalty ) {
+ if( !map->list[sd->bl.m].flag.noexppenalty ) {
pet->set_intimate(pd, pd->pet.intimate - pd->petDB->die);
if( pd->pet.intimate < 0 )
pd->pet.intimate = 0;
@@ -6809,7 +6809,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) {
}
if( battle_config.bone_drop==2
- || (battle_config.bone_drop==1 && maplist[sd->bl.m].flag.pvp)
+ || (battle_config.bone_drop==1 && map->list[sd->bl.m].flag.pvp)
) {
struct item item_tmp;
memset(&item_tmp,0,sizeof(item_tmp));
@@ -6843,7 +6843,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) {
// changed penalty options, added death by player if pk_mode [Valaris]
if( battle_config.death_penalty_type
&& (sd->class_&MAPID_UPPERMASK) != MAPID_NOVICE // only novices will receive no penalty
- && !maplist[sd->bl.m].flag.noexppenalty && !map_flag_gvg2(sd->bl.m)
+ && !map->list[sd->bl.m].flag.noexppenalty && !map_flag_gvg2(sd->bl.m)
&& !sd->sc.data[SC_BABY] && !sd->sc.data[SC_CASH_DEATHPENALTY]
) {
unsigned int base_penalty =0;
@@ -6881,7 +6881,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) {
clif->updatestatus(sd,SP_JOBEXP);
}
}
- if(battle_config.zeny_penalty > 0 && !maplist[sd->bl.m].flag.nozenypenalty)
+ if(battle_config.zeny_penalty > 0 && !map->list[sd->bl.m].flag.nozenypenalty)
{
base_penalty = (unsigned int)((double)sd->status.zeny * (double)battle_config.zeny_penalty / 10000.);
if(base_penalty)
@@ -6889,12 +6889,12 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) {
}
}
- if(maplist[sd->bl.m].flag.pvp_nightmaredrop) {
+ if(map->list[sd->bl.m].flag.pvp_nightmaredrop) {
// Moved this outside so it works when PVP isn't enabled and during pk mode [Ancyker]
- for(j=0;j<maplist[sd->bl.m].drop_list_count;j++){
- int id = maplist[sd->bl.m].drop_list[j].drop_id;
- int type = maplist[sd->bl.m].drop_list[j].drop_type;
- int per = maplist[sd->bl.m].drop_list[j].drop_per;
+ for(j=0;j<map->list[sd->bl.m].drop_list_count;j++){
+ int id = map->list[sd->bl.m].drop_list[j].drop_id;
+ int type = map->list[sd->bl.m].drop_list[j].drop_type;
+ int per = map->list[sd->bl.m].drop_list[j].drop_per;
if(id == 0)
continue;
if(id == -1){
@@ -6940,7 +6940,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) {
}
// pvp
// disable certain pvp functions on pk_mode [Valaris]
- if( maplist[sd->bl.m].flag.pvp && !battle_config.pk_mode && !maplist[sd->bl.m].flag.pvp_nocalcrank ) {
+ if( map->list[sd->bl.m].flag.pvp && !battle_config.pk_mode && !map->list[sd->bl.m].flag.pvp_nocalcrank ) {
sd->pvp_point -= 5;
sd->pvp_lost++;
if( src && src->type == BL_PC )
@@ -8992,7 +8992,7 @@ int pc_calc_pvprank_sub(struct block_list *bl,va_list ap)
int pc_calc_pvprank(struct map_session_data *sd) {
int old;
struct map_data *m;
- m=&maplist[sd->bl.m];
+ m=&map->list[sd->bl.m];
old=sd->pvp_rank;
sd->pvp_rank=1;
map->foreachinmap(pc_calc_pvprank_sub,sd->bl.m,BL_PC,sd);
@@ -9259,7 +9259,7 @@ int pc_autosave(int tid, unsigned int tick, int id, intptr_t data)
}
int pc_daynight_timer_sub(struct map_session_data *sd,va_list ap) {
- if (sd->state.night != map->night_flag && maplist[sd->bl.m].flag.nightenabled) { //Night/day state does not match.
+ if (sd->state.night != map->night_flag && map->list[sd->bl.m].flag.nightenabled) { //Night/day state does not match.
clif->status_change(&sd->bl, SI_SKE, map->night_flag, 0, 0, 0, 0); //New night effect by dynamix [Skotlex]
sd->state.night = map->night_flag;
return 1;
@@ -9280,7 +9280,7 @@ int map_day_timer(int tid, unsigned int tick, int id, intptr_t data) {
return 0; //Already day.
map->night_flag = 0; // 0=day, 1=night [Yor]
- map->map_foreachpc(pc->daynight_timer_sub);
+ map->foreachpc(pc->daynight_timer_sub);
strcpy(tmp_soutput, (data == 0) ? msg_txt(502) : msg_txt(60)); // The day has arrived!
intif->broadcast(tmp_soutput, strlen(tmp_soutput) + 1, BC_DEFAULT);
return 0;
@@ -9300,7 +9300,7 @@ int map_night_timer(int tid, unsigned int tick, int id, intptr_t data) {
return 0; //Already nigth.
map->night_flag = 1; // 0=day, 1=night [Yor]
- map->map_foreachpc(pc->daynight_timer_sub);
+ map->foreachpc(pc->daynight_timer_sub);
strcpy(tmp_soutput, (data == 0) ? msg_txt(503) : msg_txt(59)); // The night has fallen...
intif->broadcast(tmp_soutput, strlen(tmp_soutput) + 1, BC_DEFAULT);
return 0;
diff --git a/src/map/pc.h b/src/map/pc.h
index d2866b9a9..bf2f9d7c5 100644
--- a/src/map/pc.h
+++ b/src/map/pc.h
@@ -524,56 +524,6 @@ struct map_session_data {
};
-//Total number of classes (for data storage)
-#define CLASS_COUNT (JOB_MAX - JOB_NOVICE_HIGH + JOB_MAX_BASIC)
-
-enum weapon_type {
- W_FIST, //Bare hands
- W_DAGGER, //1
- W_1HSWORD, //2
- W_2HSWORD, //3
- W_1HSPEAR, //4
- W_2HSPEAR, //5
- W_1HAXE, //6
- W_2HAXE, //7
- W_MACE, //8
- W_2HMACE, //9 (unused)
- W_STAFF, //10
- W_BOW, //11
- W_KNUCKLE, //12
- W_MUSICAL, //13
- W_WHIP, //14
- W_BOOK, //15
- W_KATAR, //16
- W_REVOLVER, //17
- W_RIFLE, //18
- W_GATLING, //19
- W_SHOTGUN, //20
- W_GRENADE, //21
- W_HUUMA, //22
- W_2HSTAFF, //23
- MAX_WEAPON_TYPE,
- // dual-wield constants
- W_DOUBLE_DD, // 2 daggers
- W_DOUBLE_SS, // 2 swords
- W_DOUBLE_AA, // 2 axes
- W_DOUBLE_DS, // dagger + sword
- W_DOUBLE_DA, // dagger + axe
- W_DOUBLE_SA, // sword + axe
-};
-
-enum ammo_type {
- A_ARROW = 1,
- A_DAGGER, //2
- A_BULLET, //3
- A_SHELL, //4
- A_GRENADE, //5
- A_SHURIKEN, //6
- A_KUNAI, //7
- A_CANNONBALL, //8
- A_THROWWEAPON //9
-};
-
//Equip position constants
enum equip_pos {
EQP_HEAD_LOW = 0x0001,
diff --git a/src/map/pet.c b/src/map/pet.c
index 811ac9f09..023059a6b 100644
--- a/src/map/pet.c
+++ b/src/map/pet.c
@@ -934,7 +934,7 @@ int pet_ai_sub_foreachclient(struct map_session_data *sd,va_list ap)
}
int pet_ai_hard(int tid, unsigned int tick, int id, intptr_t data) {
- map->map_foreachpc(pet->ai_sub_foreachclient,tick);
+ map->foreachpc(pet->ai_sub_foreachclient,tick);
return 0;
}
diff --git a/src/map/script.c b/src/map/script.c
index 875ecd841..879ca8c84 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -172,13 +172,13 @@ void script_reportsrc(struct script_state *st) {
switch( bl->type ) {
case BL_NPC:
if( bl->m >= 0 )
- ShowDebug("Source (NPC): %s at %s (%d,%d)\n", ((struct npc_data *)bl)->name, maplist[bl->m].name, bl->x, bl->y);
+ ShowDebug("Source (NPC): %s at %s (%d,%d)\n", ((struct npc_data *)bl)->name, map->list[bl->m].name, bl->x, bl->y);
else
ShowDebug("Source (NPC): %s (invisible/not on a map)\n", ((struct npc_data *)bl)->name);
break;
default:
if( bl->m >= 0 )
- ShowDebug("Source (Non-NPC type %d): name %s at %s (%d,%d)\n", bl->type, status->get_name(bl), maplist[bl->m].name, bl->x, bl->y);
+ ShowDebug("Source (Non-NPC type %d): name %s at %s (%d,%d)\n", bl->type, status->get_name(bl), map->list[bl->m].name, bl->x, bl->y);
else
ShowDebug("Source (Non-NPC type %d): name %s (invisible/not on a map)\n", bl->type, status->get_name(bl));
break;
@@ -3285,7 +3285,7 @@ void run_script_main(struct script_state *st) {
nd = map->id2nd(st->oid);
if( nd && nd->bl.m >= 0 )
- st->instance_id = maplist[nd->bl.m].instance_id;
+ st->instance_id = map->list[nd->bl.m].instance_id;
else
st->instance_id = -1;
@@ -4623,7 +4623,7 @@ BUILDIN(warpparty)
if( !(pl_sd = p->data[i].sd) || pl_sd->status.party_id != p_id )
continue;
- if( str2 && strcmp(str2, maplist[pl_sd->bl.m].name) != 0 )
+ if( str2 && strcmp(str2, map->list[pl_sd->bl.m].name) != 0 )
continue;
if( pc_isdead(pl_sd) )
@@ -4632,20 +4632,20 @@ BUILDIN(warpparty)
switch( type )
{
case 0: // Random
- if(!maplist[pl_sd->bl.m].flag.nowarp)
+ if(!map->list[pl_sd->bl.m].flag.nowarp)
pc->randomwarp(pl_sd,CLR_TELEPORT);
break;
case 1: // SavePointAll
- if(!maplist[pl_sd->bl.m].flag.noreturn)
+ if(!map->list[pl_sd->bl.m].flag.noreturn)
pc->setpos(pl_sd,pl_sd->status.save_point.map,pl_sd->status.save_point.x,pl_sd->status.save_point.y,CLR_TELEPORT);
break;
case 2: // SavePoint
- if(!maplist[pl_sd->bl.m].flag.noreturn)
+ if(!map->list[pl_sd->bl.m].flag.noreturn)
pc->setpos(pl_sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,CLR_TELEPORT);
break;
case 3: // Leader
case 4: // m,x,y
- if(!maplist[pl_sd->bl.m].flag.noreturn && !maplist[pl_sd->bl.m].flag.nowarp)
+ if(!map->list[pl_sd->bl.m].flag.noreturn && !map->list[pl_sd->bl.m].flag.nowarp)
pc->setpos(pl_sd,mapindex,x,y,CLR_TELEPORT);
break;
}
@@ -4693,19 +4693,19 @@ BUILDIN(warpguild)
switch( type )
{
case 0: // Random
- if(!maplist[pl_sd->bl.m].flag.nowarp)
+ if(!map->list[pl_sd->bl.m].flag.nowarp)
pc->randomwarp(pl_sd,CLR_TELEPORT);
break;
case 1: // SavePointAll
- if(!maplist[pl_sd->bl.m].flag.noreturn)
+ if(!map->list[pl_sd->bl.m].flag.noreturn)
pc->setpos(pl_sd,pl_sd->status.save_point.map,pl_sd->status.save_point.x,pl_sd->status.save_point.y,CLR_TELEPORT);
break;
case 2: // SavePoint
- if(!maplist[pl_sd->bl.m].flag.noreturn)
+ if(!map->list[pl_sd->bl.m].flag.noreturn)
pc->setpos(pl_sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,CLR_TELEPORT);
break;
case 3: // m,x,y
- if(!maplist[pl_sd->bl.m].flag.noreturn && !maplist[pl_sd->bl.m].flag.nowarp)
+ if(!map->list[pl_sd->bl.m].flag.noreturn && !map->list[pl_sd->bl.m].flag.nowarp)
pc->setpos(pl_sd,mapindex_name2id(str),x,y,CLR_TELEPORT);
break;
}
@@ -6715,7 +6715,7 @@ BUILDIN(strcharinfo)
}
break;
case 3:
- script_pushconststr(st,maplist[sd->bl.m].name);
+ script_pushconststr(st,map->list[sd->bl.m].name);
break;
default:
ShowWarning("buildin_strcharinfo: unknown parameter.\n");
@@ -6767,7 +6767,7 @@ BUILDIN(strnpcinfo) {
name = aStrdup(nd->exname);
break;
case 4: // map name
- name = aStrdup(maplist[nd->bl.m].name);
+ name = aStrdup(map->list[nd->bl.m].name);
break;
}
@@ -8314,7 +8314,7 @@ BUILDIN(monster)
return false;
}
- if (maplist[m].flag.src4instance && st->instance_id >= 0) { // Try to redirect to the instance map, not the src map
+ if (map->list[m].flag.src4instance && st->instance_id >= 0) { // Try to redirect to the instance map, not the src map
if ((m = instance->mapid2imapid(m, st->instance_id)) < 0) {
ShowError("buildin_monster: Trying to spawn monster (%d) on instance map (%s) without instance attached.\n", class_, mapn);
return false;
@@ -8412,7 +8412,7 @@ BUILDIN(areamonster)
ShowWarning("buildin_areamonster: Attempted to spawn monster class %d on non-existing map '%s'\n",class_, mapn);
return false;
}
- if (maplist[m].flag.src4instance && st->instance_id >= 0) { // Try to redirect to the instance map, not the src map
+ if (map->list[m].flag.src4instance && st->instance_id >= 0) { // Try to redirect to the instance map, not the src map
if ((m = instance->mapid2imapid(m, st->instance_id)) < 0) {
ShowError("buildin_areamonster: Trying to spawn monster (%d) on instance map (%s) without instance attached.\n", class_, mapn);
return false;
@@ -8474,7 +8474,7 @@ BUILDIN(killmonster) {
if( (m=map->mapname2mapid(mapname))<0 )
return true;
- if( maplist[m].flag.src4instance && st->instance_id >= 0 && (m = instance->mapid2imapid(m, st->instance_id)) < 0 )
+ if( map->list[m].flag.src4instance && st->instance_id >= 0 && (m = instance->mapid2imapid(m, st->instance_id)) < 0 )
return true;
if( script_hasdata(st,4) ) {
@@ -8514,7 +8514,7 @@ BUILDIN(killmonsterall) {
if( (m = map->mapname2mapid(mapname))<0 )
return true;
- if( maplist[m].flag.src4instance && st->instance_id >= 0 && (m = instance->mapid2imapid(m, st->instance_id)) < 0 )
+ if( map->list[m].flag.src4instance && st->instance_id >= 0 && (m = instance->mapid2imapid(m, st->instance_id)) < 0 )
return true;
if( script_hasdata(st,3) ) {
@@ -9085,7 +9085,7 @@ BUILDIN(getusers) {
}
if(bl) {
- val = maplist[bl->m].users;
+ val = map->list[bl->m].users;
}
break;
case 1:
@@ -9168,7 +9168,7 @@ BUILDIN(getmapusers) {
script_pushint(st,-1);
return true;
}
- script_pushint(st,maplist[m].users);
+ script_pushint(st,map->list[m].users);
return true;
}
/*==========================================
@@ -9988,7 +9988,7 @@ BUILDIN(warpwaitingpc) {
for( i = 0; i < n && cd->users > 0; i++ ) {
sd = cd->usersd[0];
- if( strcmp(map_name,"SavePoint") == 0 && maplist[sd->bl.m].flag.noteleport ) {
+ if( strcmp(map_name,"SavePoint") == 0 && map->list[sd->bl.m].flag.noteleport ) {
// can't teleport on this map
break;
}
@@ -10082,10 +10082,10 @@ BUILDIN(setmapflagnosave) {
mapindex = mapindex_name2id(str2);
if(m >= 0 && mapindex) {
- maplist[m].flag.nosave=1;
- maplist[m].save.map=mapindex;
- maplist[m].save.x=x;
- maplist[m].save.y=y;
+ map->list[m].flag.nosave=1;
+ map->list[m].save.map=mapindex;
+ map->list[m].save.x=x;
+ map->list[m].save.y=y;
}
return true;
@@ -10102,56 +10102,56 @@ BUILDIN(getmapflag)
m = map->mapname2mapid(str);
if(m >= 0) {
switch(i) {
- case MF_NOMEMO: script_pushint(st,maplist[m].flag.nomemo); break;
- case MF_NOTELEPORT: script_pushint(st,maplist[m].flag.noteleport); break;
- case MF_NOSAVE: script_pushint(st,maplist[m].flag.nosave); break;
- case MF_NOBRANCH: script_pushint(st,maplist[m].flag.nobranch); break;
- case MF_NOPENALTY: script_pushint(st,maplist[m].flag.noexppenalty); break;
- case MF_NOZENYPENALTY: script_pushint(st,maplist[m].flag.nozenypenalty); break;
- case MF_PVP: script_pushint(st,maplist[m].flag.pvp); break;
- case MF_PVP_NOPARTY: script_pushint(st,maplist[m].flag.pvp_noparty); break;
- case MF_PVP_NOGUILD: script_pushint(st,maplist[m].flag.pvp_noguild); break;
- case MF_GVG: script_pushint(st,maplist[m].flag.gvg); break;
- case MF_GVG_NOPARTY: script_pushint(st,maplist[m].flag.gvg_noparty); break;
- case MF_NOTRADE: script_pushint(st,maplist[m].flag.notrade); break;
- case MF_NOSKILL: script_pushint(st,maplist[m].flag.noskill); break;
- case MF_NOWARP: script_pushint(st,maplist[m].flag.nowarp); break;
- case MF_PARTYLOCK: script_pushint(st,maplist[m].flag.partylock); break;
- case MF_NOICEWALL: script_pushint(st,maplist[m].flag.noicewall); break;
- case MF_SNOW: script_pushint(st,maplist[m].flag.snow); break;
- case MF_FOG: script_pushint(st,maplist[m].flag.fog); break;
- case MF_SAKURA: script_pushint(st,maplist[m].flag.sakura); break;
- case MF_LEAVES: script_pushint(st,maplist[m].flag.leaves); break;
- case MF_CLOUDS: script_pushint(st,maplist[m].flag.clouds); break;
- case MF_CLOUDS2: script_pushint(st,maplist[m].flag.clouds2); break;
- case MF_FIREWORKS: script_pushint(st,maplist[m].flag.fireworks); break;
- case MF_GVG_CASTLE: script_pushint(st,maplist[m].flag.gvg_castle); break;
- case MF_GVG_DUNGEON: script_pushint(st,maplist[m].flag.gvg_dungeon); break;
- case MF_NIGHTENABLED: script_pushint(st,maplist[m].flag.nightenabled); break;
- case MF_NOBASEEXP: script_pushint(st,maplist[m].flag.nobaseexp); break;
- case MF_NOJOBEXP: script_pushint(st,maplist[m].flag.nojobexp); break;
- case MF_NOMOBLOOT: script_pushint(st,maplist[m].flag.nomobloot); break;
- case MF_NOMVPLOOT: script_pushint(st,maplist[m].flag.nomvploot); break;
- case MF_NORETURN: script_pushint(st,maplist[m].flag.noreturn); break;
- case MF_NOWARPTO: script_pushint(st,maplist[m].flag.nowarpto); break;
- case MF_NIGHTMAREDROP: script_pushint(st,maplist[m].flag.pvp_nightmaredrop); break;
- case MF_NOCOMMAND: script_pushint(st,maplist[m].nocommand); break;
- case MF_NODROP: script_pushint(st,maplist[m].flag.nodrop); break;
- case MF_JEXP: script_pushint(st,maplist[m].jexp); break;
- case MF_BEXP: script_pushint(st,maplist[m].bexp); break;
- case MF_NOVENDING: script_pushint(st,maplist[m].flag.novending); break;
- case MF_LOADEVENT: script_pushint(st,maplist[m].flag.loadevent); break;
- case MF_NOCHAT: script_pushint(st,maplist[m].flag.nochat); break;
- case MF_NOEXPPENALTY: script_pushint(st,maplist[m].flag.noexppenalty ); break;
- case MF_GUILDLOCK: script_pushint(st,maplist[m].flag.guildlock); break;
- case MF_TOWN: script_pushint(st,maplist[m].flag.town); break;
- case MF_AUTOTRADE: script_pushint(st,maplist[m].flag.autotrade); break;
- case MF_ALLOWKS: script_pushint(st,maplist[m].flag.allowks); break;
- case MF_MONSTER_NOTELEPORT: script_pushint(st,maplist[m].flag.monster_noteleport); break;
- case MF_PVP_NOCALCRANK: script_pushint(st,maplist[m].flag.pvp_nocalcrank); break;
- case MF_BATTLEGROUND: script_pushint(st,maplist[m].flag.battleground); break;
- case MF_RESET: script_pushint(st,maplist[m].flag.reset); break;
- case MF_NOTOMB: script_pushint(st,maplist[m].flag.notomb); break;
+ case MF_NOMEMO: script_pushint(st,map->list[m].flag.nomemo); break;
+ case MF_NOTELEPORT: script_pushint(st,map->list[m].flag.noteleport); break;
+ case MF_NOSAVE: script_pushint(st,map->list[m].flag.nosave); break;
+ case MF_NOBRANCH: script_pushint(st,map->list[m].flag.nobranch); break;
+ case MF_NOPENALTY: script_pushint(st,map->list[m].flag.noexppenalty); break;
+ case MF_NOZENYPENALTY: script_pushint(st,map->list[m].flag.nozenypenalty); break;
+ case MF_PVP: script_pushint(st,map->list[m].flag.pvp); break;
+ case MF_PVP_NOPARTY: script_pushint(st,map->list[m].flag.pvp_noparty); break;
+ case MF_PVP_NOGUILD: script_pushint(st,map->list[m].flag.pvp_noguild); break;
+ case MF_GVG: script_pushint(st,map->list[m].flag.gvg); break;
+ case MF_GVG_NOPARTY: script_pushint(st,map->list[m].flag.gvg_noparty); break;
+ case MF_NOTRADE: script_pushint(st,map->list[m].flag.notrade); break;
+ case MF_NOSKILL: script_pushint(st,map->list[m].flag.noskill); break;
+ case MF_NOWARP: script_pushint(st,map->list[m].flag.nowarp); break;
+ case MF_PARTYLOCK: script_pushint(st,map->list[m].flag.partylock); break;
+ case MF_NOICEWALL: script_pushint(st,map->list[m].flag.noicewall); break;
+ case MF_SNOW: script_pushint(st,map->list[m].flag.snow); break;
+ case MF_FOG: script_pushint(st,map->list[m].flag.fog); break;
+ case MF_SAKURA: script_pushint(st,map->list[m].flag.sakura); break;
+ case MF_LEAVES: script_pushint(st,map->list[m].flag.leaves); break;
+ case MF_CLOUDS: script_pushint(st,map->list[m].flag.clouds); break;
+ case MF_CLOUDS2: script_pushint(st,map->list[m].flag.clouds2); break;
+ case MF_FIREWORKS: script_pushint(st,map->list[m].flag.fireworks); break;
+ case MF_GVG_CASTLE: script_pushint(st,map->list[m].flag.gvg_castle); break;
+ case MF_GVG_DUNGEON: script_pushint(st,map->list[m].flag.gvg_dungeon); break;
+ case MF_NIGHTENABLED: script_pushint(st,map->list[m].flag.nightenabled); break;
+ case MF_NOBASEEXP: script_pushint(st,map->list[m].flag.nobaseexp); break;
+ case MF_NOJOBEXP: script_pushint(st,map->list[m].flag.nojobexp); break;
+ case MF_NOMOBLOOT: script_pushint(st,map->list[m].flag.nomobloot); break;
+ case MF_NOMVPLOOT: script_pushint(st,map->list[m].flag.nomvploot); break;
+ case MF_NORETURN: script_pushint(st,map->list[m].flag.noreturn); break;
+ case MF_NOWARPTO: script_pushint(st,map->list[m].flag.nowarpto); break;
+ case MF_NIGHTMAREDROP: script_pushint(st,map->list[m].flag.pvp_nightmaredrop); break;
+ case MF_NOCOMMAND: script_pushint(st,map->list[m].nocommand); break;
+ case MF_NODROP: script_pushint(st,map->list[m].flag.nodrop); break;
+ case MF_JEXP: script_pushint(st,map->list[m].jexp); break;
+ case MF_BEXP: script_pushint(st,map->list[m].bexp); break;
+ case MF_NOVENDING: script_pushint(st,map->list[m].flag.novending); break;
+ case MF_LOADEVENT: script_pushint(st,map->list[m].flag.loadevent); break;
+ case MF_NOCHAT: script_pushint(st,map->list[m].flag.nochat); break;
+ case MF_NOEXPPENALTY: script_pushint(st,map->list[m].flag.noexppenalty ); break;
+ case MF_GUILDLOCK: script_pushint(st,map->list[m].flag.guildlock); break;
+ case MF_TOWN: script_pushint(st,map->list[m].flag.town); break;
+ case MF_AUTOTRADE: script_pushint(st,map->list[m].flag.autotrade); break;
+ case MF_ALLOWKS: script_pushint(st,map->list[m].flag.allowks); break;
+ case MF_MONSTER_NOTELEPORT: script_pushint(st,map->list[m].flag.monster_noteleport); break;
+ case MF_PVP_NOCALCRANK: script_pushint(st,map->list[m].flag.pvp_nocalcrank); break;
+ case MF_BATTLEGROUND: script_pushint(st,map->list[m].flag.battleground); break;
+ case MF_RESET: script_pushint(st,map->list[m].flag.reset); break;
+ case MF_NOTOMB: script_pushint(st,map->list[m].flag.notomb); break;
}
}
@@ -10197,77 +10197,77 @@ BUILDIN(setmapflag) {
if(m >= 0) {
switch(i) {
- case MF_NOMEMO: maplist[m].flag.nomemo = 1; break;
- case MF_NOTELEPORT: maplist[m].flag.noteleport = 1; break;
- case MF_NOSAVE: maplist[m].flag.nosave = 1; break;
- case MF_NOBRANCH: maplist[m].flag.nobranch = 1; break;
- case MF_NOPENALTY: maplist[m].flag.noexppenalty = 1; maplist[m].flag.nozenypenalty = 1; break;
- case MF_NOZENYPENALTY: maplist[m].flag.nozenypenalty = 1; break;
+ case MF_NOMEMO: map->list[m].flag.nomemo = 1; break;
+ case MF_NOTELEPORT: map->list[m].flag.noteleport = 1; break;
+ case MF_NOSAVE: map->list[m].flag.nosave = 1; break;
+ case MF_NOBRANCH: map->list[m].flag.nobranch = 1; break;
+ case MF_NOPENALTY: map->list[m].flag.noexppenalty = 1; map->list[m].flag.nozenypenalty = 1; break;
+ case MF_NOZENYPENALTY: map->list[m].flag.nozenypenalty = 1; break;
case MF_PVP:
- maplist[m].flag.pvp = 1;
+ map->list[m].flag.pvp = 1;
if( !battle_config.pk_mode ) {
map->foreachinmap(script->mapflag_pvp_sub,m,BL_PC);
}
break;
- case MF_PVP_NOPARTY: maplist[m].flag.pvp_noparty = 1; break;
- case MF_PVP_NOGUILD: maplist[m].flag.pvp_noguild = 1; break;
+ case MF_PVP_NOPARTY: map->list[m].flag.pvp_noparty = 1; break;
+ case MF_PVP_NOGUILD: map->list[m].flag.pvp_noguild = 1; break;
case MF_GVG: {
struct block_list bl;
- maplist[m].flag.gvg = 1;
+ map->list[m].flag.gvg = 1;
clif->map_property_mapall(m, MAPPROPERTY_AGITZONE);
bl.type = BL_NUL;
bl.m = m;
clif->maptypeproperty2(&bl,ALL_SAMEMAP);
}
break;
- case MF_GVG_NOPARTY: maplist[m].flag.gvg_noparty = 1; break;
- case MF_NOTRADE: maplist[m].flag.notrade = 1; break;
- case MF_NOSKILL: maplist[m].flag.noskill = 1; break;
- case MF_NOWARP: maplist[m].flag.nowarp = 1; break;
- case MF_PARTYLOCK: maplist[m].flag.partylock = 1; break;
- case MF_NOICEWALL: maplist[m].flag.noicewall = 1; break;
- case MF_SNOW: maplist[m].flag.snow = 1; break;
- case MF_FOG: maplist[m].flag.fog = 1; break;
- case MF_SAKURA: maplist[m].flag.sakura = 1; break;
- case MF_LEAVES: maplist[m].flag.leaves = 1; break;
- case MF_CLOUDS: maplist[m].flag.clouds = 1; break;
- case MF_CLOUDS2: maplist[m].flag.clouds2 = 1; break;
- case MF_FIREWORKS: maplist[m].flag.fireworks = 1; break;
- case MF_GVG_CASTLE: maplist[m].flag.gvg_castle = 1; break;
- case MF_GVG_DUNGEON: maplist[m].flag.gvg_dungeon = 1; break;
- case MF_NIGHTENABLED: maplist[m].flag.nightenabled = 1; break;
- case MF_NOBASEEXP: maplist[m].flag.nobaseexp = 1; break;
- case MF_NOJOBEXP: maplist[m].flag.nojobexp = 1; break;
- case MF_NOMOBLOOT: maplist[m].flag.nomobloot = 1; break;
- case MF_NOMVPLOOT: maplist[m].flag.nomvploot = 1; break;
- case MF_NORETURN: maplist[m].flag.noreturn = 1; break;
- case MF_NOWARPTO: maplist[m].flag.nowarpto = 1; break;
- case MF_NIGHTMAREDROP: maplist[m].flag.pvp_nightmaredrop = 1; break;
+ case MF_GVG_NOPARTY: map->list[m].flag.gvg_noparty = 1; break;
+ case MF_NOTRADE: map->list[m].flag.notrade = 1; break;
+ case MF_NOSKILL: map->list[m].flag.noskill = 1; break;
+ case MF_NOWARP: map->list[m].flag.nowarp = 1; break;
+ case MF_PARTYLOCK: map->list[m].flag.partylock = 1; break;
+ case MF_NOICEWALL: map->list[m].flag.noicewall = 1; break;
+ case MF_SNOW: map->list[m].flag.snow = 1; break;
+ case MF_FOG: map->list[m].flag.fog = 1; break;
+ case MF_SAKURA: map->list[m].flag.sakura = 1; break;
+ case MF_LEAVES: map->list[m].flag.leaves = 1; break;
+ case MF_CLOUDS: map->list[m].flag.clouds = 1; break;
+ case MF_CLOUDS2: map->list[m].flag.clouds2 = 1; break;
+ case MF_FIREWORKS: map->list[m].flag.fireworks = 1; break;
+ case MF_GVG_CASTLE: map->list[m].flag.gvg_castle = 1; break;
+ case MF_GVG_DUNGEON: map->list[m].flag.gvg_dungeon = 1; break;
+ case MF_NIGHTENABLED: map->list[m].flag.nightenabled = 1; break;
+ case MF_NOBASEEXP: map->list[m].flag.nobaseexp = 1; break;
+ case MF_NOJOBEXP: map->list[m].flag.nojobexp = 1; break;
+ case MF_NOMOBLOOT: map->list[m].flag.nomobloot = 1; break;
+ case MF_NOMVPLOOT: map->list[m].flag.nomvploot = 1; break;
+ case MF_NORETURN: map->list[m].flag.noreturn = 1; break;
+ case MF_NOWARPTO: map->list[m].flag.nowarpto = 1; break;
+ case MF_NIGHTMAREDROP: map->list[m].flag.pvp_nightmaredrop = 1; break;
case MF_ZONE: {
char zone[6] = "zone\0";
char empty[1] = "\0";
char params[MAP_ZONE_MAPFLAG_LENGTH];
memcpy(params, val2, MAP_ZONE_MAPFLAG_LENGTH);
- npc->parse_mapflag(maplist[m].name, empty, zone, params, empty, empty, empty);
+ npc->parse_mapflag(map->list[m].name, empty, zone, params, empty, empty, empty);
}
break;
- case MF_NOCOMMAND: maplist[m].nocommand = (val <= 0) ? 100 : val; break;
- case MF_NODROP: maplist[m].flag.nodrop = 1; break;
- case MF_JEXP: maplist[m].jexp = (val <= 0) ? 100 : val; break;
- case MF_BEXP: maplist[m].bexp = (val <= 0) ? 100 : val; break;
- case MF_NOVENDING: maplist[m].flag.novending = 1; break;
- case MF_LOADEVENT: maplist[m].flag.loadevent = 1; break;
- case MF_NOCHAT: maplist[m].flag.nochat = 1; break;
- case MF_NOEXPPENALTY: maplist[m].flag.noexppenalty = 1; break;
- case MF_GUILDLOCK: maplist[m].flag.guildlock = 1; break;
- case MF_TOWN: maplist[m].flag.town = 1; break;
- case MF_AUTOTRADE: maplist[m].flag.autotrade = 1; break;
- case MF_ALLOWKS: maplist[m].flag.allowks = 1; break;
- case MF_MONSTER_NOTELEPORT: maplist[m].flag.monster_noteleport = 1; break;
- case MF_PVP_NOCALCRANK: maplist[m].flag.pvp_nocalcrank = 1; break;
- case MF_BATTLEGROUND: maplist[m].flag.battleground = (val <= 0 || val > 2) ? 1 : val; break;
- case MF_RESET: maplist[m].flag.reset = 1; break;
- case MF_NOTOMB: maplist[m].flag.notomb = 1; break;
+ case MF_NOCOMMAND: map->list[m].nocommand = (val <= 0) ? 100 : val; break;
+ case MF_NODROP: map->list[m].flag.nodrop = 1; break;
+ case MF_JEXP: map->list[m].jexp = (val <= 0) ? 100 : val; break;
+ case MF_BEXP: map->list[m].bexp = (val <= 0) ? 100 : val; break;
+ case MF_NOVENDING: map->list[m].flag.novending = 1; break;
+ case MF_LOADEVENT: map->list[m].flag.loadevent = 1; break;
+ case MF_NOCHAT: map->list[m].flag.nochat = 1; break;
+ case MF_NOEXPPENALTY: map->list[m].flag.noexppenalty = 1; break;
+ case MF_GUILDLOCK: map->list[m].flag.guildlock = 1; break;
+ case MF_TOWN: map->list[m].flag.town = 1; break;
+ case MF_AUTOTRADE: map->list[m].flag.autotrade = 1; break;
+ case MF_ALLOWKS: map->list[m].flag.allowks = 1; break;
+ case MF_MONSTER_NOTELEPORT: map->list[m].flag.monster_noteleport = 1; break;
+ case MF_PVP_NOCALCRANK: map->list[m].flag.pvp_nocalcrank = 1; break;
+ case MF_BATTLEGROUND: map->list[m].flag.battleground = (val <= 0 || val > 2) ? 1 : val; break;
+ case MF_RESET: map->list[m].flag.reset = 1; break;
+ case MF_NOTOMB: map->list[m].flag.notomb = 1; break;
}
}
@@ -10284,75 +10284,75 @@ BUILDIN(removemapflag) {
m = map->mapname2mapid(str);
if(m >= 0) {
switch(i) {
- case MF_NOMEMO: maplist[m].flag.nomemo = 0; break;
- case MF_NOTELEPORT: maplist[m].flag.noteleport = 0; break;
- case MF_NOSAVE: maplist[m].flag.nosave = 0; break;
- case MF_NOBRANCH: maplist[m].flag.nobranch = 0; break;
- case MF_NOPENALTY: maplist[m].flag.noexppenalty = 0; maplist[m].flag.nozenypenalty = 0; break;
- case MF_NOZENYPENALTY: maplist[m].flag.nozenypenalty = 0; break;
+ case MF_NOMEMO: map->list[m].flag.nomemo = 0; break;
+ case MF_NOTELEPORT: map->list[m].flag.noteleport = 0; break;
+ case MF_NOSAVE: map->list[m].flag.nosave = 0; break;
+ case MF_NOBRANCH: map->list[m].flag.nobranch = 0; break;
+ case MF_NOPENALTY: map->list[m].flag.noexppenalty = 0; map->list[m].flag.nozenypenalty = 0; break;
+ case MF_NOZENYPENALTY: map->list[m].flag.nozenypenalty = 0; break;
case MF_PVP: {
struct block_list bl;
bl.type = BL_NUL;
bl.m = m;
- maplist[m].flag.pvp = 0;
+ map->list[m].flag.pvp = 0;
clif->map_property_mapall(m, MAPPROPERTY_NOTHING);
clif->maptypeproperty2(&bl,ALL_SAMEMAP);
}
break;
- case MF_PVP_NOPARTY: maplist[m].flag.pvp_noparty = 0; break;
- case MF_PVP_NOGUILD: maplist[m].flag.pvp_noguild = 0; break;
+ case MF_PVP_NOPARTY: map->list[m].flag.pvp_noparty = 0; break;
+ case MF_PVP_NOGUILD: map->list[m].flag.pvp_noguild = 0; break;
case MF_GVG: {
struct block_list bl;
bl.type = BL_NUL;
bl.m = m;
- maplist[m].flag.gvg = 0;
+ map->list[m].flag.gvg = 0;
clif->map_property_mapall(m, MAPPROPERTY_NOTHING);
clif->maptypeproperty2(&bl,ALL_SAMEMAP);
}
break;
- case MF_GVG_NOPARTY: maplist[m].flag.gvg_noparty = 0; break;
- case MF_NOTRADE: maplist[m].flag.notrade = 0; break;
- case MF_NOSKILL: maplist[m].flag.noskill = 0; break;
- case MF_NOWARP: maplist[m].flag.nowarp = 0; break;
- case MF_PARTYLOCK: maplist[m].flag.partylock = 0; break;
- case MF_NOICEWALL: maplist[m].flag.noicewall = 0; break;
- case MF_SNOW: maplist[m].flag.snow = 0; break;
- case MF_FOG: maplist[m].flag.fog = 0; break;
- case MF_SAKURA: maplist[m].flag.sakura = 0; break;
- case MF_LEAVES: maplist[m].flag.leaves = 0; break;
- case MF_CLOUDS: maplist[m].flag.clouds = 0; break;
- case MF_CLOUDS2: maplist[m].flag.clouds2 = 0; break;
- case MF_FIREWORKS: maplist[m].flag.fireworks = 0; break;
- case MF_GVG_CASTLE: maplist[m].flag.gvg_castle = 0; break;
- case MF_GVG_DUNGEON: maplist[m].flag.gvg_dungeon = 0; break;
- case MF_NIGHTENABLED: maplist[m].flag.nightenabled = 0; break;
- case MF_NOBASEEXP: maplist[m].flag.nobaseexp = 0; break;
- case MF_NOJOBEXP: maplist[m].flag.nojobexp = 0; break;
- case MF_NOMOBLOOT: maplist[m].flag.nomobloot = 0; break;
- case MF_NOMVPLOOT: maplist[m].flag.nomvploot = 0; break;
- case MF_NORETURN: maplist[m].flag.noreturn = 0; break;
- case MF_NOWARPTO: maplist[m].flag.nowarpto = 0; break;
- case MF_NIGHTMAREDROP: maplist[m].flag.pvp_nightmaredrop = 0; break;
+ case MF_GVG_NOPARTY: map->list[m].flag.gvg_noparty = 0; break;
+ case MF_NOTRADE: map->list[m].flag.notrade = 0; break;
+ case MF_NOSKILL: map->list[m].flag.noskill = 0; break;
+ case MF_NOWARP: map->list[m].flag.nowarp = 0; break;
+ case MF_PARTYLOCK: map->list[m].flag.partylock = 0; break;
+ case MF_NOICEWALL: map->list[m].flag.noicewall = 0; break;
+ case MF_SNOW: map->list[m].flag.snow = 0; break;
+ case MF_FOG: map->list[m].flag.fog = 0; break;
+ case MF_SAKURA: map->list[m].flag.sakura = 0; break;
+ case MF_LEAVES: map->list[m].flag.leaves = 0; break;
+ case MF_CLOUDS: map->list[m].flag.clouds = 0; break;
+ case MF_CLOUDS2: map->list[m].flag.clouds2 = 0; break;
+ case MF_FIREWORKS: map->list[m].flag.fireworks = 0; break;
+ case MF_GVG_CASTLE: map->list[m].flag.gvg_castle = 0; break;
+ case MF_GVG_DUNGEON: map->list[m].flag.gvg_dungeon = 0; break;
+ case MF_NIGHTENABLED: map->list[m].flag.nightenabled = 0; break;
+ case MF_NOBASEEXP: map->list[m].flag.nobaseexp = 0; break;
+ case MF_NOJOBEXP: map->list[m].flag.nojobexp = 0; break;
+ case MF_NOMOBLOOT: map->list[m].flag.nomobloot = 0; break;
+ case MF_NOMVPLOOT: map->list[m].flag.nomvploot = 0; break;
+ case MF_NORETURN: map->list[m].flag.noreturn = 0; break;
+ case MF_NOWARPTO: map->list[m].flag.nowarpto = 0; break;
+ case MF_NIGHTMAREDROP: map->list[m].flag.pvp_nightmaredrop = 0; break;
case MF_ZONE:
- map->zone_change2(m, maplist[m].prev_zone);
+ map->zone_change2(m, map->list[m].prev_zone);
break;
- case MF_NOCOMMAND: maplist[m].nocommand = 0; break;
- case MF_NODROP: maplist[m].flag.nodrop = 0; break;
- case MF_JEXP: maplist[m].jexp = 0; break;
- case MF_BEXP: maplist[m].bexp = 0; break;
- case MF_NOVENDING: maplist[m].flag.novending = 0; break;
- case MF_LOADEVENT: maplist[m].flag.loadevent = 0; break;
- case MF_NOCHAT: maplist[m].flag.nochat = 0; break;
- case MF_NOEXPPENALTY: maplist[m].flag.noexppenalty = 0; break;
- case MF_GUILDLOCK: maplist[m].flag.guildlock = 0; break;
- case MF_TOWN: maplist[m].flag.town = 0; break;
- case MF_AUTOTRADE: maplist[m].flag.autotrade = 0; break;
- case MF_ALLOWKS: maplist[m].flag.allowks = 0; break;
- case MF_MONSTER_NOTELEPORT: maplist[m].flag.monster_noteleport = 0; break;
- case MF_PVP_NOCALCRANK: maplist[m].flag.pvp_nocalcrank = 0; break;
- case MF_BATTLEGROUND: maplist[m].flag.battleground = 0; break;
- case MF_RESET: maplist[m].flag.reset = 0; break;
- case MF_NOTOMB: maplist[m].flag.notomb = 0; break;
+ case MF_NOCOMMAND: map->list[m].nocommand = 0; break;
+ case MF_NODROP: map->list[m].flag.nodrop = 0; break;
+ case MF_JEXP: map->list[m].jexp = 0; break;
+ case MF_BEXP: map->list[m].bexp = 0; break;
+ case MF_NOVENDING: map->list[m].flag.novending = 0; break;
+ case MF_LOADEVENT: map->list[m].flag.loadevent = 0; break;
+ case MF_NOCHAT: map->list[m].flag.nochat = 0; break;
+ case MF_NOEXPPENALTY: map->list[m].flag.noexppenalty = 0; break;
+ case MF_GUILDLOCK: map->list[m].flag.guildlock = 0; break;
+ case MF_TOWN: map->list[m].flag.town = 0; break;
+ case MF_AUTOTRADE: map->list[m].flag.autotrade = 0; break;
+ case MF_ALLOWKS: map->list[m].flag.allowks = 0; break;
+ case MF_MONSTER_NOTELEPORT: map->list[m].flag.monster_noteleport = 0; break;
+ case MF_PVP_NOCALCRANK: map->list[m].flag.pvp_nocalcrank = 0; break;
+ case MF_BATTLEGROUND: map->list[m].flag.battleground = 0; break;
+ case MF_RESET: map->list[m].flag.reset = 0; break;
+ case MF_NOTOMB: map->list[m].flag.notomb = 0; break;
}
}
@@ -10368,11 +10368,16 @@ BUILDIN(pvpon) {
str = script_getstr(st,2);
m = map->mapname2mapid(str);
- if( m < 0 || maplist[m].flag.pvp )
+ if( m < 0 || map->list[m].flag.pvp )
return true; // nothing to do
- map->zone_change2(m, strdb_get(zone_db, MAP_ZONE_PVP_NAME));
- maplist[m].flag.pvp = 1;
+ if( !strdb_exists(map->zone_db,MAP_ZONE_PVP_NAME) ) {
+ ShowError("buildin_pvpon: zone_db missing '%s'\n",MAP_ZONE_PVP_NAME);
+ return true;
+ }
+
+ map->zone_change2(m, strdb_get(map->zone_db, MAP_ZONE_PVP_NAME));
+ map->list[m].flag.pvp = 1;
clif->map_property_mapall(m, MAPPROPERTY_FREEPVPZONE);
bl.type = BL_NUL;
bl.m = m;
@@ -10418,11 +10423,11 @@ BUILDIN(pvpoff) {
str=script_getstr(st,2);
m = map->mapname2mapid(str);
- if(m < 0 || !maplist[m].flag.pvp)
+ if(m < 0 || !map->list[m].flag.pvp)
return true; //fixed Lupus
- map->zone_change2(m, maplist[m].prev_zone);
- maplist[m].flag.pvp = 0;
+ map->zone_change2(m, map->list[m].prev_zone);
+ map->list[m].flag.pvp = 0;
clif->map_property_mapall(m, MAPPROPERTY_NOTHING);
bl.type = BL_NUL;
bl.m = m;
@@ -10441,10 +10446,16 @@ BUILDIN(gvgon) {
str=script_getstr(st,2);
m = map->mapname2mapid(str);
- if(m >= 0 && !maplist[m].flag.gvg) {
+ if(m >= 0 && !map->list[m].flag.gvg) {
struct block_list bl;
- map->zone_change2(m, strdb_get(zone_db, MAP_ZONE_GVG_NAME));
- maplist[m].flag.gvg = 1;
+
+ if( !strdb_exists(map->zone_db,MAP_ZONE_GVG_NAME) ) {
+ ShowError("buildin_gvgon: zone_db missing '%s'\n",MAP_ZONE_GVG_NAME);
+ return true;
+ }
+
+ map->zone_change2(m, strdb_get(map->zone_db, MAP_ZONE_GVG_NAME));
+ map->list[m].flag.gvg = 1;
clif->map_property_mapall(m, MAPPROPERTY_AGITZONE);
bl.type = BL_NUL;
bl.m = m;
@@ -10459,10 +10470,10 @@ BUILDIN(gvgoff) {
str=script_getstr(st,2);
m = map->mapname2mapid(str);
- if(m >= 0 && maplist[m].flag.gvg) {
+ if(m >= 0 && map->list[m].flag.gvg) {
struct block_list bl;
- map->zone_change2(m, maplist[m].prev_zone);
- maplist[m].flag.gvg = 0;
+ map->zone_change2(m, map->list[m].prev_zone);
+ map->list[m].flag.gvg = 0;
clif->map_property_mapall(m, MAPPROPERTY_NOTHING);
bl.type = BL_NUL;
bl.m = m;
@@ -10542,7 +10553,7 @@ BUILDIN(maprespawnguildid) {
return true;
//Catch ALL players (in case some are 'between maps' on execution time)
- map->map_foreachpc(script->buildin_maprespawnguildid_sub_pc,m,g_id,flag);
+ map->foreachpc(script->buildin_maprespawnguildid_sub_pc,m,g_id,flag);
if (flag&4) //Remove script mobs.
map->foreachinmap(script->buildin_maprespawnguildid_sub_mob,m,BL_MOB);
return true;
@@ -10969,7 +10980,7 @@ BUILDIN(mobcount) {
return true;
}
- if( maplist[m].flag.src4instance && maplist[m].instance_id == -1 && st->instance_id >= 0 && (m = instance->mapid2imapid(m, st->instance_id)) < 0 ) {
+ if( map->list[m].flag.src4instance && map->list[m].instance_id == -1 && st->instance_id >= 0 && (m = instance->mapid2imapid(m, st->instance_id)) < 0 ) {
script_pushint(st,-1);
return true;
}
@@ -11690,7 +11701,7 @@ BUILDIN(playBGMall) {
map->foreachinmap(script->playBGM_sub, m, BL_PC, name);
} else {
// entire server
- map->map_foreachpc(script->playBGM_foreachpc_sub, name);
+ map->foreachpc(script->playBGM_foreachpc_sub, name);
}
return true;
@@ -12565,7 +12576,7 @@ BUILDIN(getmapxy)
x= bl->x;
y= bl->y;
- safestrncpy(mapname, maplist[bl->m].name, MAP_NAME_LENGTH);
+ safestrncpy(mapname, map->list[bl->m].name, MAP_NAME_LENGTH);
//Set MapName$
num=st->stack->stack_data[st->start+2].u.num;
@@ -14003,16 +14014,16 @@ int buildin_query_sql_sub(struct script_state* st, Sql* handle)
return true;
}
BUILDIN(query_sql) {
- return script->buildin_query_sql_sub(st, mmysql_handle);
+ return script->buildin_query_sql_sub(st, map->mysql_handle);
}
BUILDIN(query_logsql) {
- if( !logs->config.sql_logs ) {// logmysql_handle == NULL
+ if( !logs->config.sql_logs ) {// logs->mysql_handle == NULL
ShowWarning("buildin_query_logsql: SQL logs are disabled, query '%s' will not be executed.\n", script_getstr(st,2));
script_pushint(st,-1);
return false;
}
- return script->buildin_query_sql_sub(st, logmysql_handle);
+ return script->buildin_query_sql_sub(st, logs->mysql_handle);
}
//Allows escaping of a given string.
@@ -14025,7 +14036,7 @@ BUILDIN(escape_sql)
str = script_getstr(st,2);
len = strlen(str);
esc_str = (char*)aMalloc(len*2+1);
- SQL->EscapeStringLen(mmysql_handle, esc_str, str, len);
+ SQL->EscapeStringLen(map->mysql_handle, esc_str, str, len);
script_pushstr(st, esc_str);
return true;
}
@@ -15125,7 +15136,7 @@ BUILDIN(setcell) {
for( y = y1; y <= y2; ++y )
for( x = x1; x <= x2; ++x )
- maplist[m].setcell(m, x, y, type, flag);
+ map->list[m].setcell(m, x, y, type, flag);
return true;
}
@@ -15597,8 +15608,8 @@ BUILDIN(bg_updatescore) {
if( (m = map->mapname2mapid(str)) < 0 )
return true;
- maplist[m].bgscore_lion = script_getnum(st,3);
- maplist[m].bgscore_eagle = script_getnum(st,4);
+ map->list[m].bgscore_lion = script_getnum(st,3);
+ map->list[m].bgscore_eagle = script_getnum(st,4);
clif->bg_updatescore(m);
return true;
@@ -15704,7 +15715,7 @@ BUILDIN(instance_attachmap) {
script_pushconststr(st, "");
return true;
}
- script_pushconststr(st, maplist[m].name);
+ script_pushconststr(st, map->list[m].name);
return true;
}
@@ -15859,7 +15870,7 @@ BUILDIN(has_instance) {
if( sd->instances ) {
for( i = 0; i < sd->instances; i++ ) {
if( sd->instance[i] >= 0 ) {
- ARR_FIND(0, instance->list[sd->instance[i]].num_map, j, maplist[instance->list[sd->instance[i]].map[j]].instance_src_map == m);
+ ARR_FIND(0, instance->list[sd->instance[i]].num_map, j, map->list[instance->list[sd->instance[i]].map[j]].instance_src_map == m);
if( j != instance->list[sd->instance[i]].num_map )
break;
}
@@ -15870,7 +15881,7 @@ BUILDIN(has_instance) {
if( instance_id == -1 && sd->status.party_id && (p = party->search(sd->status.party_id)) && p->instances ) {
for( i = 0; i < p->instances; i++ ) {
if( p->instance[i] >= 0 ) {
- ARR_FIND(0, instance->list[p->instance[i]].num_map, j, maplist[instance->list[p->instance[i]].map[j]].instance_src_map == m);
+ ARR_FIND(0, instance->list[p->instance[i]].num_map, j, map->list[instance->list[p->instance[i]].map[j]].instance_src_map == m);
if( j != instance->list[p->instance[i]].num_map )
break;
}
@@ -15881,7 +15892,7 @@ BUILDIN(has_instance) {
if( instance_id == -1 && sd->guild && sd->guild->instances ) {
for( i = 0; i < sd->guild->instances; i++ ) {
if( sd->guild->instance[i] >= 0 ) {
- ARR_FIND(0, instance->list[sd->guild->instance[i]].num_map, j, maplist[instance->list[sd->guild->instance[i]].map[j]].instance_src_map == m);
+ ARR_FIND(0, instance->list[sd->guild->instance[i]].num_map, j, map->list[instance->list[sd->guild->instance[i]].map[j]].instance_src_map == m);
if( j != instance->list[sd->guild->instance[i]].num_map )
break;
}
@@ -15896,7 +15907,7 @@ BUILDIN(has_instance) {
return true;
}
- script_pushconststr(st, maplist[m].name);
+ script_pushconststr(st, map->list[m].name);
return true;
}
int buildin_instance_warpall_sub(struct block_list *bl,va_list ap) {
@@ -15927,7 +15938,7 @@ BUILDIN(instance_warpall) {
else
return true;
- if( (m = map->mapname2mapid(mapn)) < 0 || (maplist[m].flag.src4instance && (m = instance->mapid2imapid(m, instance_id)) < 0) )
+ if( (m = map->mapname2mapid(mapn)) < 0 || (map->list[m].flag.src4instance && (m = instance->mapid2imapid(m, instance_id)) < 0) )
return true;
mapindex = map_id2index(m);
@@ -16065,7 +16076,7 @@ BUILDIN(areamobuseskill) {
return true;
}
- if( maplist[m].flag.src4instance && st->instance_id >= 0 && (m = instance->mapid2imapid(m, st->instance_id)) < 0 )
+ if( map->list[m].flag.src4instance && st->instance_id >= 0 && (m = instance->mapid2imapid(m, st->instance_id)) < 0 )
return true;
center.m = m;
diff --git a/src/map/skill.c b/src/map/skill.c
index 148f2bccf..82480cc46 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -475,7 +475,7 @@ int skillnotok (uint16 skill_id, struct map_session_data *sd)
case AL_WARP:
case RETURN_TO_ELDICASTES:
case ALL_GUARDIAN_RECALL:
- if(maplist[m].flag.nowarp) {
+ if(map->list[m].flag.nowarp) {
clif->skill_mapinfomessage(sd,0);
return 1;
}
@@ -483,7 +483,7 @@ int skillnotok (uint16 skill_id, struct map_session_data *sd)
case AL_TELEPORT:
case SC_FATALMENACE:
case SC_DIMENSIONDOOR:
- if(maplist[m].flag.noteleport) {
+ if(map->list[m].flag.noteleport) {
clif->skill_mapinfomessage(sd,0);
return 1;
}
@@ -491,7 +491,7 @@ int skillnotok (uint16 skill_id, struct map_session_data *sd)
case WE_CALLPARTNER:
case WE_CALLPARENT:
case WE_CALLBABY:
- if (maplist[m].flag.nomemo) {
+ if (map->list[m].flag.nomemo) {
clif->skill_mapinfomessage(sd,1);
return 1;
}
@@ -510,7 +510,7 @@ int skillnotok (uint16 skill_id, struct map_session_data *sd)
return 0; // always allowed
case WZ_ICEWALL:
// noicewall flag [Valaris]
- if (maplist[m].flag.noicewall) {
+ if (map->list[m].flag.noicewall) {
clif->skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
return 1;
}
@@ -523,8 +523,8 @@ int skillnotok (uint16 skill_id, struct map_session_data *sd)
break;
case GD_EMERGENCYCALL:
if( !(battle_config.emergency_call&((map->agit_flag || map->agit2_flag)?2:1))
- || !(battle_config.emergency_call&(maplist[m].flag.gvg || maplist[m].flag.gvg_castle?8:4))
- || (battle_config.emergency_call&16 && maplist[m].flag.nowarpto && !maplist[m].flag.gvg_castle)
+ || !(battle_config.emergency_call&(map->list[m].flag.gvg || map->list[m].flag.gvg_castle?8:4))
+ || (battle_config.emergency_call&16 && map->list[m].flag.nowarpto && !map->list[m].flag.gvg_castle)
) {
clif->skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
return 1;
@@ -560,7 +560,7 @@ int skillnotok (uint16 skill_id, struct map_session_data *sd)
break;
}
- return (maplist[m].flag.noskill);
+ return (map->list[m].flag.noskill);
}
int skillnotok_hom(uint16 skill_id, struct homun_data *hd)
@@ -2015,7 +2015,7 @@ int skill_blown(struct block_list* src, struct block_list* target, int count, in
nullpo_ret(src);
- if (src != target && maplist[src->m].flag.noknockback)
+ if (src != target && map->list[src->m].flag.noknockback)
return 0; //No knocking
if (count == 0)
return 0; //Actual knockback distance is 0.
@@ -3526,7 +3526,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
uint8 dir = map->calc_dir(bl, src->x, src->y);
// teleport to target (if not on WoE grounds)
- if( !map_flag_gvg2(src->m) && !maplist[src->m].flag.battleground && unit->movepos(src, bl->x, bl->y, 0, 1) )
+ if( !map_flag_gvg2(src->m) && !map->list[src->m].flag.battleground && unit->movepos(src, bl->x, bl->y, 0, 1) )
clif->slide(src, bl->x, bl->y);
// cause damage and knockback if the path to target was a straight one
@@ -3634,7 +3634,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
if( dir > 2 && dir < 6 ) y = -i;
else if( dir == 7 || dir < 2 ) y = i;
else y = 0;
- if( (mbl == src || (!map_flag_gvg2(src->m) && !maplist[src->m].flag.battleground) ) // only NJ_ISSEN don't have slide effect in GVG
+ if( (mbl == src || (!map_flag_gvg2(src->m) && !map->list[src->m].flag.battleground) ) // only NJ_ISSEN don't have slide effect in GVG
&& unit->movepos(src, mbl->x+x, mbl->y+y, 1, 1)
) {
clif->slide(src, src->x, src->y);
@@ -4011,7 +4011,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
sc_start(src,SC_HIDING,100,skill_lv,skill->get_time(skill_id,skill_lv));
break;
case NJ_KIRIKAGE:
- if( !map_flag_gvg2(src->m) && !maplist[src->m].flag.battleground ) {
+ if( !map_flag_gvg2(src->m) && !map->list[src->m].flag.battleground ) {
//You don't move on GVG grounds.
short x, y;
map->search_freecell(bl, 0, &x, &y, 1, 1, 0);
@@ -4284,7 +4284,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
}
break;
case LG_PINPOINTATTACK:
- if( !map_flag_gvg2(src->m) && !maplist[src->m].flag.battleground && unit->movepos(src, bl->x, bl->y, 1, 1) )
+ if( !map_flag_gvg2(src->m) && !map->list[src->m].flag.battleground && unit->movepos(src, bl->x, bl->y, 1, 1) )
clif->slide(src,bl->x,bl->y);
skill->attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
break;
@@ -4309,7 +4309,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
break;
case SR_KNUCKLEARROW:
- if( !map_flag_gvg2(src->m) && !maplist[src->m].flag.battleground && unit->movepos(src, bl->x, bl->y, 1, 1) ) {
+ if( !map_flag_gvg2(src->m) && !map->list[src->m].flag.battleground && unit->movepos(src, bl->x, bl->y, 1, 1) ) {
clif->slide(src,bl->x,bl->y);
clif->fixpos(src); // Aegis send this packet too.
}
@@ -5044,7 +5044,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
break;
}
skill->area_temp[0] = 5 - skill->area_temp[0]; // The actual penalty...
- if (skill->area_temp[0] > 0 && !maplist[src->m].flag.noexppenalty) { //Apply penalty
+ if (skill->area_temp[0] > 0 && !map->list[src->m].flag.noexppenalty) { //Apply penalty
sd->status.base_exp -= min(sd->status.base_exp, pc->nextbaseexp(sd) * skill->area_temp[0] * 2/1000); //0.2% penalty per each.
sd->status.job_exp -= min(sd->status.job_exp, pc->nextjobexp(sd) * skill->area_temp[0] * 2/1000);
clif->updatestatus(sd,SP_BASEEXP);
@@ -5060,7 +5060,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
break;
case ALL_RESURRECTION:
- if(sd && (map_flag_gvg2(bl->m) || maplist[bl->m].flag.battleground)) {
+ if(sd && (map_flag_gvg2(bl->m) || map->list[bl->m].flag.battleground)) {
//No reviving in WoE grounds!
clif->skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
break;
@@ -5072,7 +5072,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
if (tsc && tsc->data[SC_HELLPOWER])
break;
- if (maplist[bl->m].flag.pvp && dstsd && dstsd->pvp_point < 0)
+ if (map->list[bl->m].flag.pvp && dstsd && dstsd->pvp_point < 0)
break;
switch(skill_lv){
@@ -6258,7 +6258,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
case AL_TELEPORT:
if(sd) {
- if (maplist[bl->m].flag.noteleport && skill_lv <= 2) {
+ if (map->list[bl->m].flag.noteleport && skill_lv <= 2) {
clif->skill_mapinfomessage(sd,0);
break;
}
@@ -6631,8 +6631,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
int x,y, dir = unit->getdir(src);
//Fails on noteleport maps, except for GvG and BG maps [Skotlex]
- if( maplist[src->m].flag.noteleport
- && !(maplist[src->m].flag.battleground || map_flag_gvg2(src->m))
+ if( map->list[src->m].flag.noteleport
+ && !(map->list[src->m].flag.battleground || map_flag_gvg2(src->m))
) {
x = src->x;
y = src->y;
@@ -7442,7 +7442,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
for(i = 0; i < g->max_member; i++, j++) {
if (j>8) j=0;
if ((dstsd = g->member[i].sd) != NULL && sd != dstsd && !dstsd->state.autotrade && !pc_isdead(dstsd)) {
- if (maplist[dstsd->bl.m].flag.nowarp && !map_flag_gvg2(dstsd->bl.m))
+ if (map->list[dstsd->bl.m].flag.nowarp && !map_flag_gvg2(dstsd->bl.m))
continue;
if(map->getcell(src->m,src->x+dx[j],src->y+dy[j],CELL_CHKNOREACH))
dx[j] = dy[j] = 0;
@@ -8452,7 +8452,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
}
break;
case LG_INSPIRATION:
- if( sd && !maplist[sd->bl.m].flag.noexppenalty && sd->status.base_level != MAX_LEVEL ) {
+ if( sd && !map->list[sd->bl.m].flag.noexppenalty && sd->status.base_level != MAX_LEVEL ) {
sd->status.base_exp -= min(sd->status.base_exp, pc->nextbaseexp(sd) * 1 / 100); // 1% penalty.
sd->status.job_exp -= min(sd->status.job_exp, pc->nextjobexp(sd) * 1 / 100);
clif->updatestatus(sd,SP_BASEEXP);
@@ -9892,7 +9892,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
}
break;
case NJ_SHADOWJUMP:
- if( !map_flag_gvg2(src->m) && !maplist[src->m].flag.battleground ) { //You don't move on GVG grounds.
+ if( !map_flag_gvg2(src->m) && !map->list[src->m].flag.battleground ) { //You don't move on GVG grounds.
unit->movepos(src, x, y, 1, 0);
clif->slide(src,x,y);
}
@@ -10427,11 +10427,11 @@ struct skill_unit_group* skill_unitsetting(struct block_list *src, uint16 skill_
unit_flag = skill->get_unit_flag(skill_id);
layout = skill->get_unit_layout(skill_id,skill_lv,src,x,y);
- if( maplist[src->m].unit_count ) {
- ARR_FIND(0, maplist[src->m].unit_count, i, maplist[src->m].units[i]->skill_id == skill_id );
+ if( map->list[src->m].unit_count ) {
+ ARR_FIND(0, map->list[src->m].unit_count, i, map->list[src->m].units[i]->skill_id == skill_id );
- if( i < maplist[src->m].unit_count ) {
- limit = limit * maplist[src->m].units[i]->modifier / 100;
+ if( i < map->list[src->m].unit_count ) {
+ limit = limit * map->list[src->m].units[i]->modifier / 100;
}
}
@@ -10528,7 +10528,7 @@ struct skill_unit_group* skill_unitsetting(struct block_list *src, uint16 skill_
ARR_FIND(0, MAX_SKILL_ITEM_REQUIRE, i, req.itemid[i] && (req.itemid[i] == ITEMID_TRAP || req.itemid[i] == ITEMID_TRAP_ALLOY));
if( req.itemid[i] )
req_item = req.itemid[i];
- if( map_flag_gvg2(src->m) || maplist[src->m].flag.battleground )
+ if( map_flag_gvg2(src->m) || map->list[src->m].flag.battleground )
limit *= 4; // longer trap times in WOE [celest]
if( battle_config.vs_traps_bctall && map_flag_vs(src->m) && (src->type&battle_config.vs_traps_bctall) )
target = BCT_ALL;
@@ -11618,7 +11618,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
break;
case UNT_DIMENSIONDOOR:
- if( tsd && !maplist[bl->m].flag.noteleport )
+ if( tsd && !map->list[bl->m].flag.noteleport )
pc->randomwarp(tsd,3);
else if( bl->type == BL_MOB && battle_config.mob_warp&8 )
unit->warp(bl,-1,-1,-1,3);
@@ -13981,7 +13981,7 @@ int skill_delay_fix (struct block_list *bl, uint16 skill_id, uint16 skill_lv) {
time /= 2;
break;
case AS_SONICBLOW:
- if (!map_flag_gvg2(bl->m) && !maplist[bl->m].flag.battleground && sc->data[SC_SOULLINK]->val2 == SL_ASSASIN)
+ if (!map_flag_gvg2(bl->m) && !map->list[bl->m].flag.battleground && sc->data[SC_SOULLINK]->val2 == SL_ASSASIN)
time /= 2;
break;
}
@@ -14509,7 +14509,7 @@ void skill_unitsetmapcell (struct skill_unit *src, uint16 skill_id, uint16 skill
for( y = src->bl.y - range; y <= src->bl.y + range; ++y )
for( x = src->bl.x - range; x <= src->bl.x + range; ++x )
- maplist[src->bl.m].setcell(src->bl.m, x, y, cell, flag);
+ map->list[src->bl.m].setcell(src->bl.m, x, y, cell, flag);
}
/*==========================================
@@ -15063,7 +15063,7 @@ struct skill_unit *skill_initunit (struct skill_unit_group *group, int idx, int
map->setgatcell(su->bl.m,su->bl.x,su->bl.y,5);
clif->changemapcell(0,su->bl.m,su->bl.x,su->bl.y,5,AREA);
skill->unitsetmapcell(su,WZ_ICEWALL,group->skill_lv,CELL_ICEWALL,true);
- maplist[su->bl.m].icewall_num++;
+ map->list[su->bl.m].icewall_num++;
break;
case SA_LANDPROTECTOR:
skill->unitsetmapcell(su,SA_LANDPROTECTOR,group->skill_lv,CELL_LANDPROTECTOR,true);
@@ -15118,7 +15118,7 @@ int skill_delunit (struct skill_unit* su) {
map->setgatcell(su->bl.m,su->bl.x,su->bl.y,su->val2);
clif->changemapcell(0,su->bl.m,su->bl.x,su->bl.y,su->val2,ALL_SAMEMAP); // hack to avoid clientside cell bug
skill->unitsetmapcell(su,WZ_ICEWALL,group->skill_lv,CELL_ICEWALL,false);
- maplist[su->bl.m].icewall_num--;
+ map->list[su->bl.m].icewall_num--;
break;
case SA_LANDPROTECTOR:
skill->unitsetmapcell(su,SA_LANDPROTECTOR,group->skill_lv,CELL_LANDPROTECTOR,false);
@@ -15543,13 +15543,13 @@ int skill_unit_timer_sub(DBKey key, DBData *data, va_list ap) {
if(group->val1) {
sd = map->charid2sd(group->val1);
group->val1 = 0;
- if (sd && !maplist[sd->bl.m].flag.nowarp)
+ if (sd && !map->list[sd->bl.m].flag.nowarp)
pc->setpos(sd,map_id2index(su->bl.m),su->bl.x,su->bl.y,CLR_TELEPORT);
}
if(group->val2) {
sd = map->charid2sd(group->val2);
group->val2 = 0;
- if (sd && !maplist[sd->bl.m].flag.nowarp)
+ if (sd && !map->list[sd->bl.m].flag.nowarp)
pc->setpos(sd,map_id2index(su->bl.m),su->bl.x,su->bl.y,CLR_TELEPORT);
}
skill->delunit(su);
diff --git a/src/map/status.c b/src/map/status.c
index bb2efb505..28699d06a 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -40,39 +40,7 @@
#include <string.h>
#include <math.h>
-//Regen related flags.
-enum e_regen
-{
- RGN_HP = 0x01,
- RGN_SP = 0x02,
- RGN_SHP = 0x04,
- RGN_SSP = 0x08,
-};
-
-static int max_weight_base[CLASS_COUNT];
-static int hp_coefficient[CLASS_COUNT];
-static int hp_coefficient2[CLASS_COUNT];
-static int hp_sigma_val[CLASS_COUNT][MAX_LEVEL+1];
-static int sp_coefficient[CLASS_COUNT];
-#ifdef RENEWAL_ASPD
-static int aspd_base[CLASS_COUNT][MAX_WEAPON_TYPE+1];
-#else
-static int aspd_base[CLASS_COUNT][MAX_WEAPON_TYPE]; //[blackhole89]
-#endif
-
-// bonus values and upgrade chances for refining equipment
-static struct {
- int chance[MAX_REFINE]; // success chance
- int bonus[MAX_REFINE]; // cumulative fixed bonus damage
- int randombonus_max[MAX_REFINE]; // cumulative maximum random bonus damage
-} refine_info[REFINE_TYPE_MAX];
-
-static int atkmods[3][MAX_WEAPON_TYPE]; //ATK weapon modification for size (size_fix.txt)
-static char job_bonus[CLASS_COUNT][MAX_LEVEL];
-static sc_conf_type sc_conf[SC_MAX];
-
-static struct eri *sc_data_ers; //For sc_data entries
-static struct status_data dummy_status;
+struct status_interface status_s;
/**
* Returns the status change associated with a skill.
@@ -85,7 +53,7 @@ sc_type status_skill2sc(int skill_id) {
ShowError("status_skill2sc: Unsupported skill id %d\n", skill_id);
return SC_NONE;
}
- return SkillStatusChangeTable[idx];
+ return status->Skill2SCTable[idx];
}
/**
@@ -101,7 +69,7 @@ int status_sc2skill(sc_type sc)
return 0;
}
- return StatusSkillChangeTable[sc];
+ return status->SkillChangeTable[sc];
}
/**
@@ -116,7 +84,7 @@ unsigned int status_sc2scb_flag(sc_type sc)
return SCB_NONE;
}
- return StatusChangeFlagTable[sc];
+ return status->ChangeFlagTable[sc];
}
/**
@@ -131,12 +99,12 @@ int status_type2relevant_bl_types(int type)
return SI_BLANK;
}
- return StatusRelevantBLTypes[type];
+ return status->RelevantBLTypes[type];
}
#define add_sc(skill,sc) set_sc(skill,sc,SI_BLANK,SCB_NONE)
// indicates that the status displays a visual effect for the affected unit, and should be sent to the client for all supported units
-#define set_sc_with_vfx(skill, sc, icon, flag) set_sc((skill), (sc), (icon), (flag)); if((icon) < SI_MAX) StatusRelevantBLTypes[(icon)] |= BL_SCEFFECT
+#define set_sc_with_vfx(skill, sc, icon, flag) set_sc((skill), (sc), (icon), (flag)); if((icon) < SI_MAX) status->RelevantBLTypes[(icon)] |= BL_SCEFFECT
static void set_sc(uint16 skill_id, sc_type sc, int icon, unsigned int flag) {
uint16 idx;
@@ -149,31 +117,31 @@ static void set_sc(uint16 skill_id, sc_type sc, int icon, unsigned int flag) {
return;
}
- if( StatusSkillChangeTable[sc] == 0 )
- StatusSkillChangeTable[sc] = skill_id;
- if( StatusIconChangeTable[sc] == SI_BLANK )
- StatusIconChangeTable[sc] = icon;
- StatusChangeFlagTable[sc] |= flag;
+ if( status->SkillChangeTable[sc] == 0 )
+ status->SkillChangeTable[sc] = skill_id;
+ if( status->IconChangeTable[sc] == SI_BLANK )
+ status->IconChangeTable[sc] = icon;
+ status->ChangeFlagTable[sc] |= flag;
- if( SkillStatusChangeTable[idx] == SC_NONE )
- SkillStatusChangeTable[idx] = sc;
+ if( status->Skill2SCTable[idx] == SC_NONE )
+ status->Skill2SCTable[idx] = sc;
}
void initChangeTables(void) {
int i;
for (i = 0; i < SC_MAX; i++)
- StatusIconChangeTable[i] = SI_BLANK;
+ status->IconChangeTable[i] = SI_BLANK;
for (i = 0; i < MAX_SKILL; i++)
- SkillStatusChangeTable[i] = SC_NONE;
+ status->Skill2SCTable[i] = SC_NONE;
for (i = 0; i < SI_MAX; i++)
- StatusRelevantBLTypes[i] = BL_PC;
+ status->RelevantBLTypes[i] = BL_PC;
- memset(StatusSkillChangeTable, 0, sizeof(StatusSkillChangeTable));
- memset(StatusChangeFlagTable, 0, sizeof(StatusChangeFlagTable));
- memset(StatusDisplayType, 0, sizeof(StatusDisplayType));
+ memset(status->SkillChangeTable, 0, sizeof(status->SkillChangeTable));
+ memset(status->ChangeFlagTable, 0, sizeof(status->ChangeFlagTable));
+ memset(status->DisplayType, 0, sizeof(status->DisplayType));
//First we define the skill for common ailments. These are used in skill_additional_effect through sc cards. [Skotlex]
set_sc( NPC_PETRIFYATTACK , SC_STONE , SI_BLANK , SCB_DEF_ELE|SCB_DEF|SCB_MDEF );
@@ -780,303 +748,303 @@ void initChangeTables(void) {
set_sc_with_vfx( GN_ILLUSIONDOPING , SC_ILLUSIONDOPING , SI_ILLUSIONDOPING , SCB_HIT );
// Storing the target job rather than simply SC_SOULLINK simplifies code later on.
- SkillStatusChangeTable[SL_ALCHEMIST] = (sc_type)MAPID_ALCHEMIST,
- SkillStatusChangeTable[SL_MONK] = (sc_type)MAPID_MONK,
- SkillStatusChangeTable[SL_STAR] = (sc_type)MAPID_STAR_GLADIATOR,
- SkillStatusChangeTable[SL_SAGE] = (sc_type)MAPID_SAGE,
- SkillStatusChangeTable[SL_CRUSADER] = (sc_type)MAPID_CRUSADER,
- SkillStatusChangeTable[SL_SUPERNOVICE] = (sc_type)MAPID_SUPER_NOVICE,
- SkillStatusChangeTable[SL_KNIGHT] = (sc_type)MAPID_KNIGHT,
- SkillStatusChangeTable[SL_WIZARD] = (sc_type)MAPID_WIZARD,
- SkillStatusChangeTable[SL_PRIEST] = (sc_type)MAPID_PRIEST,
- SkillStatusChangeTable[SL_BARDDANCER] = (sc_type)MAPID_BARDDANCER,
- SkillStatusChangeTable[SL_ROGUE] = (sc_type)MAPID_ROGUE,
- SkillStatusChangeTable[SL_ASSASIN] = (sc_type)MAPID_ASSASSIN,
- SkillStatusChangeTable[SL_BLACKSMITH] = (sc_type)MAPID_BLACKSMITH,
- SkillStatusChangeTable[SL_HUNTER] = (sc_type)MAPID_HUNTER,
- SkillStatusChangeTable[SL_SOULLINKER] = (sc_type)MAPID_SOUL_LINKER,
-
- //Status that don't have a skill associated.
- StatusIconChangeTable[SC_WEIGHTOVER50] = SI_WEIGHTOVER50;
- StatusIconChangeTable[SC_WEIGHTOVER90] = SI_WEIGHTOVER90;
- StatusIconChangeTable[SC_ATTHASTE_POTION1] = SI_ATTHASTE_POTION1;
- StatusIconChangeTable[SC_ATTHASTE_POTION2] = SI_ATTHASTE_POTION2;
- StatusIconChangeTable[SC_ATTHASTE_POTION3] = SI_ATTHASTE_POTION3;
- StatusIconChangeTable[SC_ATTHASTE_INFINITY] = SI_ATTHASTE_INFINITY;
- StatusIconChangeTable[SC_MOVHASTE_HORSE] = SI_MOVHASTE_HORSE;
- StatusIconChangeTable[SC_MOVHASTE_INFINITY] = SI_MOVHASTE_INFINITY;
- StatusIconChangeTable[SC_CHASEWALK2] = SI_INCSTR;
- StatusIconChangeTable[SC_MIRACLE] = SI_SOULLINK;
- StatusIconChangeTable[SC_CLAIRVOYANCE] = SI_CLAIRVOYANCE;
- StatusIconChangeTable[SC_FOOD_STR] = SI_FOOD_STR;
- StatusIconChangeTable[SC_FOOD_AGI] = SI_FOOD_AGI;
- StatusIconChangeTable[SC_FOOD_VIT] = SI_FOOD_VIT;
- StatusIconChangeTable[SC_FOOD_INT] = SI_FOOD_INT;
- StatusIconChangeTable[SC_FOOD_DEX] = SI_FOOD_DEX;
- StatusIconChangeTable[SC_FOOD_LUK] = SI_FOOD_LUK;
- StatusIconChangeTable[SC_FOOD_BASICAVOIDANCE]= SI_FOOD_BASICAVOIDANCE;
- StatusIconChangeTable[SC_FOOD_BASICHIT] = SI_FOOD_BASICHIT;
- StatusIconChangeTable[SC_MANU_ATK] = SI_MANU_ATK;
- StatusIconChangeTable[SC_MANU_DEF] = SI_MANU_DEF;
- StatusIconChangeTable[SC_SPL_ATK] = SI_SPL_ATK;
- StatusIconChangeTable[SC_SPL_DEF] = SI_SPL_DEF;
- StatusIconChangeTable[SC_MANU_MATK] = SI_MANU_MATK;
- StatusIconChangeTable[SC_SPL_MATK] = SI_SPL_MATK;
- StatusIconChangeTable[SC_PLUSATTACKPOWER] = SI_PLUSATTACKPOWER;
- StatusIconChangeTable[SC_PLUSMAGICPOWER] = SI_PLUSMAGICPOWER;
+ status->Skill2SCTable[SL_ALCHEMIST] = (sc_type)MAPID_ALCHEMIST,
+ status->Skill2SCTable[SL_MONK] = (sc_type)MAPID_MONK,
+ status->Skill2SCTable[SL_STAR] = (sc_type)MAPID_STAR_GLADIATOR,
+ status->Skill2SCTable[SL_SAGE] = (sc_type)MAPID_SAGE,
+ status->Skill2SCTable[SL_CRUSADER] = (sc_type)MAPID_CRUSADER,
+ status->Skill2SCTable[SL_SUPERNOVICE] = (sc_type)MAPID_SUPER_NOVICE,
+ status->Skill2SCTable[SL_KNIGHT] = (sc_type)MAPID_KNIGHT,
+ status->Skill2SCTable[SL_WIZARD] = (sc_type)MAPID_WIZARD,
+ status->Skill2SCTable[SL_PRIEST] = (sc_type)MAPID_PRIEST,
+ status->Skill2SCTable[SL_BARDDANCER] = (sc_type)MAPID_BARDDANCER,
+ status->Skill2SCTable[SL_ROGUE] = (sc_type)MAPID_ROGUE,
+ status->Skill2SCTable[SL_ASSASIN] = (sc_type)MAPID_ASSASSIN,
+ status->Skill2SCTable[SL_BLACKSMITH] = (sc_type)MAPID_BLACKSMITH,
+ status->Skill2SCTable[SL_HUNTER] = (sc_type)MAPID_HUNTER,
+ status->Skill2SCTable[SL_SOULLINKER] = (sc_type)MAPID_SOUL_LINKER,
+
+ //Status that don't have a skill associated.
+ status->IconChangeTable[SC_WEIGHTOVER50] = SI_WEIGHTOVER50;
+ status->IconChangeTable[SC_WEIGHTOVER90] = SI_WEIGHTOVER90;
+ status->IconChangeTable[SC_ATTHASTE_POTION1] = SI_ATTHASTE_POTION1;
+ status->IconChangeTable[SC_ATTHASTE_POTION2] = SI_ATTHASTE_POTION2;
+ status->IconChangeTable[SC_ATTHASTE_POTION3] = SI_ATTHASTE_POTION3;
+ status->IconChangeTable[SC_ATTHASTE_INFINITY] = SI_ATTHASTE_INFINITY;
+ status->IconChangeTable[SC_MOVHASTE_HORSE] = SI_MOVHASTE_HORSE;
+ status->IconChangeTable[SC_MOVHASTE_INFINITY] = SI_MOVHASTE_INFINITY;
+ status->IconChangeTable[SC_CHASEWALK2] = SI_INCSTR;
+ status->IconChangeTable[SC_MIRACLE] = SI_SOULLINK;
+ status->IconChangeTable[SC_CLAIRVOYANCE] = SI_CLAIRVOYANCE;
+ status->IconChangeTable[SC_FOOD_STR] = SI_FOOD_STR;
+ status->IconChangeTable[SC_FOOD_AGI] = SI_FOOD_AGI;
+ status->IconChangeTable[SC_FOOD_VIT] = SI_FOOD_VIT;
+ status->IconChangeTable[SC_FOOD_INT] = SI_FOOD_INT;
+ status->IconChangeTable[SC_FOOD_DEX] = SI_FOOD_DEX;
+ status->IconChangeTable[SC_FOOD_LUK] = SI_FOOD_LUK;
+ status->IconChangeTable[SC_FOOD_BASICAVOIDANCE]= SI_FOOD_BASICAVOIDANCE;
+ status->IconChangeTable[SC_FOOD_BASICHIT] = SI_FOOD_BASICHIT;
+ status->IconChangeTable[SC_MANU_ATK] = SI_MANU_ATK;
+ status->IconChangeTable[SC_MANU_DEF] = SI_MANU_DEF;
+ status->IconChangeTable[SC_SPL_ATK] = SI_SPL_ATK;
+ status->IconChangeTable[SC_SPL_DEF] = SI_SPL_DEF;
+ status->IconChangeTable[SC_MANU_MATK] = SI_MANU_MATK;
+ status->IconChangeTable[SC_SPL_MATK] = SI_SPL_MATK;
+ status->IconChangeTable[SC_PLUSATTACKPOWER] = SI_PLUSATTACKPOWER;
+ status->IconChangeTable[SC_PLUSMAGICPOWER] = SI_PLUSMAGICPOWER;
//Cash Items
- StatusIconChangeTable[SC_FOOD_STR_CASH] = SI_FOOD_STR_CASH;
- StatusIconChangeTable[SC_FOOD_AGI_CASH] = SI_FOOD_AGI_CASH;
- StatusIconChangeTable[SC_FOOD_VIT_CASH] = SI_FOOD_VIT_CASH;
- StatusIconChangeTable[SC_FOOD_DEX_CASH] = SI_FOOD_DEX_CASH;
- StatusIconChangeTable[SC_FOOD_INT_CASH] = SI_FOOD_INT_CASH;
- StatusIconChangeTable[SC_FOOD_LUK_CASH] = SI_FOOD_LUK_CASH;
- StatusIconChangeTable[SC_CASH_PLUSEXP] = SI_CASH_PLUSEXP;
- StatusIconChangeTable[SC_CASH_RECEIVEITEM] = SI_CASH_RECEIVEITEM;
- StatusIconChangeTable[SC_CASH_PLUSONLYJOBEXP] = SI_CASH_PLUSONLYJOBEXP;
- StatusIconChangeTable[SC_CASH_DEATHPENALTY] = SI_CASH_DEATHPENALTY;
- StatusIconChangeTable[SC_CASH_BOSS_ALARM] = SI_CASH_BOSS_ALARM;
- StatusIconChangeTable[SC_PROTECT_DEF] = SI_PROTECT_DEF;
- StatusIconChangeTable[SC_PROTECT_MDEF] = SI_PROTECT_MDEF;
- StatusIconChangeTable[SC_CRITICALPERCENT] = SI_CRITICALPERCENT;
- StatusIconChangeTable[SC_PLUSAVOIDVALUE] = SI_PLUSAVOIDVALUE;
- StatusIconChangeTable[SC_HEALPLUS] = SI_HEALPLUS;
- StatusIconChangeTable[SC_S_LIFEPOTION] = SI_S_LIFEPOTION;
- StatusIconChangeTable[SC_L_LIFEPOTION] = SI_L_LIFEPOTION;
- StatusIconChangeTable[SC_ATKER_BLOOD] = SI_ATKER_BLOOD;
- StatusIconChangeTable[SC_TARGET_BLOOD] = SI_TARGET_BLOOD;
+ status->IconChangeTable[SC_FOOD_STR_CASH] = SI_FOOD_STR_CASH;
+ status->IconChangeTable[SC_FOOD_AGI_CASH] = SI_FOOD_AGI_CASH;
+ status->IconChangeTable[SC_FOOD_VIT_CASH] = SI_FOOD_VIT_CASH;
+ status->IconChangeTable[SC_FOOD_DEX_CASH] = SI_FOOD_DEX_CASH;
+ status->IconChangeTable[SC_FOOD_INT_CASH] = SI_FOOD_INT_CASH;
+ status->IconChangeTable[SC_FOOD_LUK_CASH] = SI_FOOD_LUK_CASH;
+ status->IconChangeTable[SC_CASH_PLUSEXP] = SI_CASH_PLUSEXP;
+ status->IconChangeTable[SC_CASH_RECEIVEITEM] = SI_CASH_RECEIVEITEM;
+ status->IconChangeTable[SC_CASH_PLUSONLYJOBEXP] = SI_CASH_PLUSONLYJOBEXP;
+ status->IconChangeTable[SC_CASH_DEATHPENALTY] = SI_CASH_DEATHPENALTY;
+ status->IconChangeTable[SC_CASH_BOSS_ALARM] = SI_CASH_BOSS_ALARM;
+ status->IconChangeTable[SC_PROTECT_DEF] = SI_PROTECT_DEF;
+ status->IconChangeTable[SC_PROTECT_MDEF] = SI_PROTECT_MDEF;
+ status->IconChangeTable[SC_CRITICALPERCENT] = SI_CRITICALPERCENT;
+ status->IconChangeTable[SC_PLUSAVOIDVALUE] = SI_PLUSAVOIDVALUE;
+ status->IconChangeTable[SC_HEALPLUS] = SI_HEALPLUS;
+ status->IconChangeTable[SC_S_LIFEPOTION] = SI_S_LIFEPOTION;
+ status->IconChangeTable[SC_L_LIFEPOTION] = SI_L_LIFEPOTION;
+ status->IconChangeTable[SC_ATKER_BLOOD] = SI_ATKER_BLOOD;
+ status->IconChangeTable[SC_TARGET_BLOOD] = SI_TARGET_BLOOD;
// Mercenary Bonus Effects
- StatusIconChangeTable[SC_MER_FLEE] = SI_MER_FLEE;
- StatusIconChangeTable[SC_MER_ATK] = SI_MER_ATK;
- StatusIconChangeTable[SC_MER_HP] = SI_MER_HP;
- StatusIconChangeTable[SC_MER_SP] = SI_MER_SP;
- StatusIconChangeTable[SC_MER_HIT] = SI_MER_HIT;
+ status->IconChangeTable[SC_MER_FLEE] = SI_MER_FLEE;
+ status->IconChangeTable[SC_MER_ATK] = SI_MER_ATK;
+ status->IconChangeTable[SC_MER_HP] = SI_MER_HP;
+ status->IconChangeTable[SC_MER_SP] = SI_MER_SP;
+ status->IconChangeTable[SC_MER_HIT] = SI_MER_HIT;
// Warlock Spheres
- StatusIconChangeTable[SC_SUMMON1] = SI_SPHERE_1;
- StatusIconChangeTable[SC_SUMMON2] = SI_SPHERE_2;
- StatusIconChangeTable[SC_SUMMON3] = SI_SPHERE_3;
- StatusIconChangeTable[SC_SUMMON4] = SI_SPHERE_4;
- StatusIconChangeTable[SC_SUMMON5] = SI_SPHERE_5;
+ status->IconChangeTable[SC_SUMMON1] = SI_SPHERE_1;
+ status->IconChangeTable[SC_SUMMON2] = SI_SPHERE_2;
+ status->IconChangeTable[SC_SUMMON3] = SI_SPHERE_3;
+ status->IconChangeTable[SC_SUMMON4] = SI_SPHERE_4;
+ status->IconChangeTable[SC_SUMMON5] = SI_SPHERE_5;
// Warlock Preserved spells
- StatusIconChangeTable[SC_SPELLBOOK1] = SI_SPELLBOOK1;
- StatusIconChangeTable[SC_SPELLBOOK2] = SI_SPELLBOOK2;
- StatusIconChangeTable[SC_SPELLBOOK3] = SI_SPELLBOOK3;
- StatusIconChangeTable[SC_SPELLBOOK4] = SI_SPELLBOOK4;
- StatusIconChangeTable[SC_SPELLBOOK5] = SI_SPELLBOOK5;
- StatusIconChangeTable[SC_SPELLBOOK6] = SI_SPELLBOOK6;
- StatusIconChangeTable[SC_SPELLBOOK7] = SI_SPELLBOOK7;
-
- StatusIconChangeTable[SC_NEUTRALBARRIER_MASTER] = SI_NEUTRALBARRIER_MASTER;
- StatusIconChangeTable[SC_STEALTHFIELD_MASTER] = SI_STEALTHFIELD_MASTER;
- StatusIconChangeTable[SC_OVERHEAT] = SI_OVERHEAT;
- StatusIconChangeTable[SC_OVERHEAT_LIMITPOINT] = SI_OVERHEAT_LIMITPOINT;
-
- StatusIconChangeTable[SC_HALLUCINATIONWALK_POSTDELAY] = SI_HALLUCINATIONWALK_POSTDELAY;
- StatusIconChangeTable[SC_TOXIN] = SI_TOXIN;
- StatusIconChangeTable[SC_PARALYSE] = SI_PARALYSE;
- StatusIconChangeTable[SC_VENOMBLEED] = SI_VENOMBLEED;
- StatusIconChangeTable[SC_MAGICMUSHROOM] = SI_MAGICMUSHROOM;
- StatusIconChangeTable[SC_DEATHHURT] = SI_DEATHHURT;
- StatusIconChangeTable[SC_PYREXIA] = SI_PYREXIA;
- StatusIconChangeTable[SC_OBLIVIONCURSE] = SI_OBLIVIONCURSE;
- StatusIconChangeTable[SC_LEECHESEND] = SI_LEECHESEND;
-
- StatusIconChangeTable[SC_SHIELDSPELL_DEF] = SI_SHIELDSPELL_DEF;
- StatusIconChangeTable[SC_SHIELDSPELL_MDEF] = SI_SHIELDSPELL_MDEF;
- StatusIconChangeTable[SC_SHIELDSPELL_REF] = SI_SHIELDSPELL_REF;
- StatusIconChangeTable[SC_BANDING_DEFENCE] = SI_BANDING_DEFENCE;
-
- StatusIconChangeTable[SC_GLOOMYDAY_SK] = SI_GLOOMYDAY;
-
- StatusIconChangeTable[SC_CURSEDCIRCLE_ATKER] = SI_CURSEDCIRCLE_ATKER;
-
- StatusIconChangeTable[SC_STOMACHACHE] = SI_STOMACHACHE;
- StatusIconChangeTable[SC_MYSTERIOUS_POWDER] = SI_MYSTERIOUS_POWDER;
- StatusIconChangeTable[SC_MELON_BOMB] = SI_MELON_BOMB;
- StatusIconChangeTable[SC_BANANA_BOMB] = SI_BANANA_BOMB;
- StatusIconChangeTable[SC_BANANA_BOMB_SITDOWN_POSTDELAY] = SI_BANANA_BOMB_SITDOWN_POSTDELAY;
+ status->IconChangeTable[SC_SPELLBOOK1] = SI_SPELLBOOK1;
+ status->IconChangeTable[SC_SPELLBOOK2] = SI_SPELLBOOK2;
+ status->IconChangeTable[SC_SPELLBOOK3] = SI_SPELLBOOK3;
+ status->IconChangeTable[SC_SPELLBOOK4] = SI_SPELLBOOK4;
+ status->IconChangeTable[SC_SPELLBOOK5] = SI_SPELLBOOK5;
+ status->IconChangeTable[SC_SPELLBOOK6] = SI_SPELLBOOK6;
+ status->IconChangeTable[SC_SPELLBOOK7] = SI_SPELLBOOK7;
+
+ status->IconChangeTable[SC_NEUTRALBARRIER_MASTER] = SI_NEUTRALBARRIER_MASTER;
+ status->IconChangeTable[SC_STEALTHFIELD_MASTER] = SI_STEALTHFIELD_MASTER;
+ status->IconChangeTable[SC_OVERHEAT] = SI_OVERHEAT;
+ status->IconChangeTable[SC_OVERHEAT_LIMITPOINT] = SI_OVERHEAT_LIMITPOINT;
+
+ status->IconChangeTable[SC_HALLUCINATIONWALK_POSTDELAY] = SI_HALLUCINATIONWALK_POSTDELAY;
+ status->IconChangeTable[SC_TOXIN] = SI_TOXIN;
+ status->IconChangeTable[SC_PARALYSE] = SI_PARALYSE;
+ status->IconChangeTable[SC_VENOMBLEED] = SI_VENOMBLEED;
+ status->IconChangeTable[SC_MAGICMUSHROOM] = SI_MAGICMUSHROOM;
+ status->IconChangeTable[SC_DEATHHURT] = SI_DEATHHURT;
+ status->IconChangeTable[SC_PYREXIA] = SI_PYREXIA;
+ status->IconChangeTable[SC_OBLIVIONCURSE] = SI_OBLIVIONCURSE;
+ status->IconChangeTable[SC_LEECHESEND] = SI_LEECHESEND;
+
+ status->IconChangeTable[SC_SHIELDSPELL_DEF] = SI_SHIELDSPELL_DEF;
+ status->IconChangeTable[SC_SHIELDSPELL_MDEF] = SI_SHIELDSPELL_MDEF;
+ status->IconChangeTable[SC_SHIELDSPELL_REF] = SI_SHIELDSPELL_REF;
+ status->IconChangeTable[SC_BANDING_DEFENCE] = SI_BANDING_DEFENCE;
+
+ status->IconChangeTable[SC_GLOOMYDAY_SK] = SI_GLOOMYDAY;
+
+ status->IconChangeTable[SC_CURSEDCIRCLE_ATKER] = SI_CURSEDCIRCLE_ATKER;
+
+ status->IconChangeTable[SC_STOMACHACHE] = SI_STOMACHACHE;
+ status->IconChangeTable[SC_MYSTERIOUS_POWDER] = SI_MYSTERIOUS_POWDER;
+ status->IconChangeTable[SC_MELON_BOMB] = SI_MELON_BOMB;
+ status->IconChangeTable[SC_BANANA_BOMB] = SI_BANANA_BOMB;
+ status->IconChangeTable[SC_BANANA_BOMB_SITDOWN_POSTDELAY] = SI_BANANA_BOMB_SITDOWN_POSTDELAY;
//Genetics New Food Items Status Icons
- StatusIconChangeTable[SC_SAVAGE_STEAK] = SI_SAVAGE_STEAK;
- StatusIconChangeTable[SC_COCKTAIL_WARG_BLOOD] = SI_COCKTAIL_WARG_BLOOD;
- StatusIconChangeTable[SC_MINOR_BBQ] = SI_MINOR_BBQ;
- StatusIconChangeTable[SC_SIROMA_ICE_TEA] = SI_SIROMA_ICE_TEA;
- StatusIconChangeTable[SC_DROCERA_HERB_STEAMED] = SI_DROCERA_HERB_STEAMED;
- StatusIconChangeTable[SC_PUTTI_TAILS_NOODLES] = SI_PUTTI_TAILS_NOODLES;
-
- StatusIconChangeTable[SC_BOOST500] |= SI_BOOST500;
- StatusIconChangeTable[SC_FULL_SWING_K] |= SI_FULL_SWING_K;
- StatusIconChangeTable[SC_MANA_PLUS] |= SI_MANA_PLUS;
- StatusIconChangeTable[SC_MUSTLE_M] |= SI_MUSTLE_M;
- StatusIconChangeTable[SC_LIFE_FORCE_F] |= SI_LIFE_FORCE_F;
- StatusIconChangeTable[SC_EXTRACT_WHITE_POTION_Z] |= SI_EXTRACT_WHITE_POTION_Z;
- StatusIconChangeTable[SC_VITATA_500] |= SI_VITATA_500;
- StatusIconChangeTable[SC_EXTRACT_SALAMINE_JUICE] |= SI_EXTRACT_SALAMINE_JUICE;
+ status->IconChangeTable[SC_SAVAGE_STEAK] = SI_SAVAGE_STEAK;
+ status->IconChangeTable[SC_COCKTAIL_WARG_BLOOD] = SI_COCKTAIL_WARG_BLOOD;
+ status->IconChangeTable[SC_MINOR_BBQ] = SI_MINOR_BBQ;
+ status->IconChangeTable[SC_SIROMA_ICE_TEA] = SI_SIROMA_ICE_TEA;
+ status->IconChangeTable[SC_DROCERA_HERB_STEAMED] = SI_DROCERA_HERB_STEAMED;
+ status->IconChangeTable[SC_PUTTI_TAILS_NOODLES] = SI_PUTTI_TAILS_NOODLES;
+
+ status->IconChangeTable[SC_BOOST500] |= SI_BOOST500;
+ status->IconChangeTable[SC_FULL_SWING_K] |= SI_FULL_SWING_K;
+ status->IconChangeTable[SC_MANA_PLUS] |= SI_MANA_PLUS;
+ status->IconChangeTable[SC_MUSTLE_M] |= SI_MUSTLE_M;
+ status->IconChangeTable[SC_LIFE_FORCE_F] |= SI_LIFE_FORCE_F;
+ status->IconChangeTable[SC_EXTRACT_WHITE_POTION_Z] |= SI_EXTRACT_WHITE_POTION_Z;
+ status->IconChangeTable[SC_VITATA_500] |= SI_VITATA_500;
+ status->IconChangeTable[SC_EXTRACT_SALAMINE_JUICE] |= SI_EXTRACT_SALAMINE_JUICE;
// Elemental Spirit's 'side' status change icons.
- StatusIconChangeTable[SC_CIRCLE_OF_FIRE] = SI_CIRCLE_OF_FIRE;
- StatusIconChangeTable[SC_FIRE_CLOAK] = SI_FIRE_CLOAK;
- StatusIconChangeTable[SC_WATER_SCREEN] = SI_WATER_SCREEN;
- StatusIconChangeTable[SC_WATER_DROP] = SI_WATER_DROP;
- StatusIconChangeTable[SC_WIND_STEP] = SI_WIND_STEP;
- StatusIconChangeTable[SC_WIND_CURTAIN] = SI_WIND_CURTAIN;
- StatusIconChangeTable[SC_SOLID_SKIN] = SI_SOLID_SKIN;
- StatusIconChangeTable[SC_STONE_SHIELD] = SI_STONE_SHIELD;
- StatusIconChangeTable[SC_PYROTECHNIC] = SI_PYROTECHNIC;
- StatusIconChangeTable[SC_HEATER] = SI_HEATER;
- StatusIconChangeTable[SC_TROPIC] = SI_TROPIC;
- StatusIconChangeTable[SC_AQUAPLAY] = SI_AQUAPLAY;
- StatusIconChangeTable[SC_COOLER] = SI_COOLER;
- StatusIconChangeTable[SC_CHILLY_AIR] = SI_CHILLY_AIR;
- StatusIconChangeTable[SC_GUST] = SI_GUST;
- StatusIconChangeTable[SC_BLAST] = SI_BLAST;
- StatusIconChangeTable[SC_WILD_STORM] = SI_WILD_STORM;
- StatusIconChangeTable[SC_PETROLOGY] = SI_PETROLOGY;
- StatusIconChangeTable[SC_CURSED_SOIL] = SI_CURSED_SOIL;
- StatusIconChangeTable[SC_UPHEAVAL] = SI_UPHEAVAL;
- StatusIconChangeTable[SC_PUSH_CART] = SI_ON_PUSH_CART;
- StatusIconChangeTable[SC_REBOUND] = SI_REBOUND;
- StatusIconChangeTable[SC_ALL_RIDING] = SI_ALL_RIDING;
- StatusIconChangeTable[SC_MONSTER_TRANSFORM] = SI_MONSTER_TRANSFORM;
+ status->IconChangeTable[SC_CIRCLE_OF_FIRE] = SI_CIRCLE_OF_FIRE;
+ status->IconChangeTable[SC_FIRE_CLOAK] = SI_FIRE_CLOAK;
+ status->IconChangeTable[SC_WATER_SCREEN] = SI_WATER_SCREEN;
+ status->IconChangeTable[SC_WATER_DROP] = SI_WATER_DROP;
+ status->IconChangeTable[SC_WIND_STEP] = SI_WIND_STEP;
+ status->IconChangeTable[SC_WIND_CURTAIN] = SI_WIND_CURTAIN;
+ status->IconChangeTable[SC_SOLID_SKIN] = SI_SOLID_SKIN;
+ status->IconChangeTable[SC_STONE_SHIELD] = SI_STONE_SHIELD;
+ status->IconChangeTable[SC_PYROTECHNIC] = SI_PYROTECHNIC;
+ status->IconChangeTable[SC_HEATER] = SI_HEATER;
+ status->IconChangeTable[SC_TROPIC] = SI_TROPIC;
+ status->IconChangeTable[SC_AQUAPLAY] = SI_AQUAPLAY;
+ status->IconChangeTable[SC_COOLER] = SI_COOLER;
+ status->IconChangeTable[SC_CHILLY_AIR] = SI_CHILLY_AIR;
+ status->IconChangeTable[SC_GUST] = SI_GUST;
+ status->IconChangeTable[SC_BLAST] = SI_BLAST;
+ status->IconChangeTable[SC_WILD_STORM] = SI_WILD_STORM;
+ status->IconChangeTable[SC_PETROLOGY] = SI_PETROLOGY;
+ status->IconChangeTable[SC_CURSED_SOIL] = SI_CURSED_SOIL;
+ status->IconChangeTable[SC_UPHEAVAL] = SI_UPHEAVAL;
+ status->IconChangeTable[SC_PUSH_CART] = SI_ON_PUSH_CART;
+ status->IconChangeTable[SC_REBOUND] = SI_REBOUND;
+ status->IconChangeTable[SC_ALL_RIDING] = SI_ALL_RIDING;
+ status->IconChangeTable[SC_MONSTER_TRANSFORM] = SI_MONSTER_TRANSFORM;
//Other SC which are not necessarily associated to skills.
- StatusChangeFlagTable[SC_ATTHASTE_POTION1] = SCB_ASPD;
- StatusChangeFlagTable[SC_ATTHASTE_POTION2] = SCB_ASPD;
- StatusChangeFlagTable[SC_ATTHASTE_POTION3] = SCB_ASPD;
- StatusChangeFlagTable[SC_ATTHASTE_INFINITY] = SCB_ASPD;
- StatusChangeFlagTable[SC_MOVHASTE_HORSE] = SCB_SPEED;
- StatusChangeFlagTable[SC_MOVHASTE_INFINITY] = SCB_SPEED;
- StatusChangeFlagTable[SC_PLUSATTACKPOWER] = SCB_BATK;
- StatusChangeFlagTable[SC_PLUSMAGICPOWER] = SCB_MATK;
- StatusChangeFlagTable[SC_INCALLSTATUS] |= SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK;
- StatusChangeFlagTable[SC_CHASEWALK2] |= SCB_STR;
- StatusChangeFlagTable[SC_INCAGI] |= SCB_AGI;
- StatusChangeFlagTable[SC_INCVIT] |= SCB_VIT;
- StatusChangeFlagTable[SC_INCINT] |= SCB_INT;
- StatusChangeFlagTable[SC_INCDEX] |= SCB_DEX;
- StatusChangeFlagTable[SC_INCLUK] |= SCB_LUK;
- StatusChangeFlagTable[SC_INCHIT] |= SCB_HIT;
- StatusChangeFlagTable[SC_INCHITRATE] |= SCB_HIT;
- StatusChangeFlagTable[SC_INCFLEE] |= SCB_FLEE;
- StatusChangeFlagTable[SC_INCFLEERATE] |= SCB_FLEE;
- StatusChangeFlagTable[SC_CRITICALPERCENT] |= SCB_CRI;
- StatusChangeFlagTable[SC_INCASPDRATE] |= SCB_ASPD;
- StatusChangeFlagTable[SC_PLUSAVOIDVALUE] |= SCB_FLEE2;
- StatusChangeFlagTable[SC_INCMHPRATE] |= SCB_MAXHP;
- StatusChangeFlagTable[SC_INCMSPRATE] |= SCB_MAXSP;
- StatusChangeFlagTable[SC_INCMHP] |= SCB_MAXHP;
- StatusChangeFlagTable[SC_INCMSP] |= SCB_MAXSP;
- StatusChangeFlagTable[SC_INCATKRATE] |= SCB_BATK|SCB_WATK;
- StatusChangeFlagTable[SC_INCMATKRATE] |= SCB_MATK;
- StatusChangeFlagTable[SC_INCDEFRATE] |= SCB_DEF;
- StatusChangeFlagTable[SC_FOOD_STR] |= SCB_STR;
- StatusChangeFlagTable[SC_FOOD_AGI] |= SCB_AGI;
- StatusChangeFlagTable[SC_FOOD_VIT] |= SCB_VIT;
- StatusChangeFlagTable[SC_FOOD_INT] |= SCB_INT;
- StatusChangeFlagTable[SC_FOOD_DEX] |= SCB_DEX;
- StatusChangeFlagTable[SC_FOOD_LUK] |= SCB_LUK;
- StatusChangeFlagTable[SC_FOOD_BASICHIT] |= SCB_HIT;
- StatusChangeFlagTable[SC_FOOD_BASICAVOIDANCE] |= SCB_FLEE;
- StatusChangeFlagTable[SC_BATKFOOD] |= SCB_BATK;
- StatusChangeFlagTable[SC_WATKFOOD] |= SCB_WATK;
- StatusChangeFlagTable[SC_MATKFOOD] |= SCB_MATK;
- StatusChangeFlagTable[SC_ARMORPROPERTY] |= SCB_ALL;
- StatusChangeFlagTable[SC_ARMOR_RESIST] |= SCB_ALL;
- StatusChangeFlagTable[SC_ATKER_BLOOD] |= SCB_ALL;
- StatusChangeFlagTable[SC_WALKSPEED] |= SCB_SPEED;
- StatusChangeFlagTable[SC_ITEMSCRIPT] |= SCB_ALL;
+ status->ChangeFlagTable[SC_ATTHASTE_POTION1] = SCB_ASPD;
+ status->ChangeFlagTable[SC_ATTHASTE_POTION2] = SCB_ASPD;
+ status->ChangeFlagTable[SC_ATTHASTE_POTION3] = SCB_ASPD;
+ status->ChangeFlagTable[SC_ATTHASTE_INFINITY] = SCB_ASPD;
+ status->ChangeFlagTable[SC_MOVHASTE_HORSE] = SCB_SPEED;
+ status->ChangeFlagTable[SC_MOVHASTE_INFINITY] = SCB_SPEED;
+ status->ChangeFlagTable[SC_PLUSATTACKPOWER] = SCB_BATK;
+ status->ChangeFlagTable[SC_PLUSMAGICPOWER] = SCB_MATK;
+ status->ChangeFlagTable[SC_INCALLSTATUS] |= SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK;
+ status->ChangeFlagTable[SC_CHASEWALK2] |= SCB_STR;
+ status->ChangeFlagTable[SC_INCAGI] |= SCB_AGI;
+ status->ChangeFlagTable[SC_INCVIT] |= SCB_VIT;
+ status->ChangeFlagTable[SC_INCINT] |= SCB_INT;
+ status->ChangeFlagTable[SC_INCDEX] |= SCB_DEX;
+ status->ChangeFlagTable[SC_INCLUK] |= SCB_LUK;
+ status->ChangeFlagTable[SC_INCHIT] |= SCB_HIT;
+ status->ChangeFlagTable[SC_INCHITRATE] |= SCB_HIT;
+ status->ChangeFlagTable[SC_INCFLEE] |= SCB_FLEE;
+ status->ChangeFlagTable[SC_INCFLEERATE] |= SCB_FLEE;
+ status->ChangeFlagTable[SC_CRITICALPERCENT] |= SCB_CRI;
+ status->ChangeFlagTable[SC_INCASPDRATE] |= SCB_ASPD;
+ status->ChangeFlagTable[SC_PLUSAVOIDVALUE] |= SCB_FLEE2;
+ status->ChangeFlagTable[SC_INCMHPRATE] |= SCB_MAXHP;
+ status->ChangeFlagTable[SC_INCMSPRATE] |= SCB_MAXSP;
+ status->ChangeFlagTable[SC_INCMHP] |= SCB_MAXHP;
+ status->ChangeFlagTable[SC_INCMSP] |= SCB_MAXSP;
+ status->ChangeFlagTable[SC_INCATKRATE] |= SCB_BATK|SCB_WATK;
+ status->ChangeFlagTable[SC_INCMATKRATE] |= SCB_MATK;
+ status->ChangeFlagTable[SC_INCDEFRATE] |= SCB_DEF;
+ status->ChangeFlagTable[SC_FOOD_STR] |= SCB_STR;
+ status->ChangeFlagTable[SC_FOOD_AGI] |= SCB_AGI;
+ status->ChangeFlagTable[SC_FOOD_VIT] |= SCB_VIT;
+ status->ChangeFlagTable[SC_FOOD_INT] |= SCB_INT;
+ status->ChangeFlagTable[SC_FOOD_DEX] |= SCB_DEX;
+ status->ChangeFlagTable[SC_FOOD_LUK] |= SCB_LUK;
+ status->ChangeFlagTable[SC_FOOD_BASICHIT] |= SCB_HIT;
+ status->ChangeFlagTable[SC_FOOD_BASICAVOIDANCE] |= SCB_FLEE;
+ status->ChangeFlagTable[SC_BATKFOOD] |= SCB_BATK;
+ status->ChangeFlagTable[SC_WATKFOOD] |= SCB_WATK;
+ status->ChangeFlagTable[SC_MATKFOOD] |= SCB_MATK;
+ status->ChangeFlagTable[SC_ARMORPROPERTY] |= SCB_ALL;
+ status->ChangeFlagTable[SC_ARMOR_RESIST] |= SCB_ALL;
+ status->ChangeFlagTable[SC_ATKER_BLOOD] |= SCB_ALL;
+ status->ChangeFlagTable[SC_WALKSPEED] |= SCB_SPEED;
+ status->ChangeFlagTable[SC_ITEMSCRIPT] |= SCB_ALL;
// Cash Items
- StatusChangeFlagTable[SC_FOOD_STR_CASH] = SCB_STR;
- StatusChangeFlagTable[SC_FOOD_AGI_CASH] = SCB_AGI;
- StatusChangeFlagTable[SC_FOOD_VIT_CASH] = SCB_VIT;
- StatusChangeFlagTable[SC_FOOD_DEX_CASH] = SCB_DEX;
- StatusChangeFlagTable[SC_FOOD_INT_CASH] = SCB_INT;
- StatusChangeFlagTable[SC_FOOD_LUK_CASH] = SCB_LUK;
+ status->ChangeFlagTable[SC_FOOD_STR_CASH] = SCB_STR;
+ status->ChangeFlagTable[SC_FOOD_AGI_CASH] = SCB_AGI;
+ status->ChangeFlagTable[SC_FOOD_VIT_CASH] = SCB_VIT;
+ status->ChangeFlagTable[SC_FOOD_DEX_CASH] = SCB_DEX;
+ status->ChangeFlagTable[SC_FOOD_INT_CASH] = SCB_INT;
+ status->ChangeFlagTable[SC_FOOD_LUK_CASH] = SCB_LUK;
// Mercenary Bonus Effects
- StatusChangeFlagTable[SC_MER_FLEE] |= SCB_FLEE;
- StatusChangeFlagTable[SC_MER_ATK] |= SCB_WATK;
- StatusChangeFlagTable[SC_MER_HP] |= SCB_MAXHP;
- StatusChangeFlagTable[SC_MER_SP] |= SCB_MAXSP;
- StatusChangeFlagTable[SC_MER_HIT] |= SCB_HIT;
+ status->ChangeFlagTable[SC_MER_FLEE] |= SCB_FLEE;
+ status->ChangeFlagTable[SC_MER_ATK] |= SCB_WATK;
+ status->ChangeFlagTable[SC_MER_HP] |= SCB_MAXHP;
+ status->ChangeFlagTable[SC_MER_SP] |= SCB_MAXSP;
+ status->ChangeFlagTable[SC_MER_HIT] |= SCB_HIT;
// Guillotine Cross Poison Effects
- StatusChangeFlagTable[SC_PARALYSE] |= SCB_ASPD|SCB_FLEE|SCB_SPEED;
- StatusChangeFlagTable[SC_DEATHHURT] |= SCB_REGEN;
- StatusChangeFlagTable[SC_VENOMBLEED] |= SCB_MAXHP;
- StatusChangeFlagTable[SC_OBLIVIONCURSE] |= SCB_REGEN;
-
- StatusChangeFlagTable[SC_SAVAGE_STEAK] |= SCB_STR;
- StatusChangeFlagTable[SC_COCKTAIL_WARG_BLOOD] |= SCB_INT;
- StatusChangeFlagTable[SC_MINOR_BBQ] |= SCB_VIT;
- StatusChangeFlagTable[SC_SIROMA_ICE_TEA] |= SCB_DEX;
- StatusChangeFlagTable[SC_DROCERA_HERB_STEAMED] |= SCB_AGI;
- StatusChangeFlagTable[SC_PUTTI_TAILS_NOODLES] |= SCB_LUK;
- StatusChangeFlagTable[SC_BOOST500] |= SCB_ASPD;
- StatusChangeFlagTable[SC_FULL_SWING_K] |= SCB_BATK;
- StatusChangeFlagTable[SC_MANA_PLUS] |= SCB_MATK;
- StatusChangeFlagTable[SC_MUSTLE_M] |= SCB_MAXHP;
- StatusChangeFlagTable[SC_LIFE_FORCE_F] |= SCB_MAXSP;
- StatusChangeFlagTable[SC_EXTRACT_WHITE_POTION_Z] |= SCB_REGEN;
- StatusChangeFlagTable[SC_VITATA_500] |= SCB_REGEN;
- StatusChangeFlagTable[SC_EXTRACT_SALAMINE_JUICE] |= SCB_ASPD;
- StatusChangeFlagTable[SC_REBOUND] |= SCB_SPEED|SCB_REGEN;
-
- StatusChangeFlagTable[SC_ALL_RIDING] = SCB_SPEED;
- StatusChangeFlagTable[SC_WEDDING] = SCB_SPEED;
-
-
- /* StatusDisplayType Table [Ind/Hercules] */
- StatusDisplayType[SC_ALL_RIDING] = true;
- StatusDisplayType[SC_PUSH_CART] = true;
- StatusDisplayType[SC_SUMMON1] = true;
- StatusDisplayType[SC_SUMMON2] = true;
- StatusDisplayType[SC_SUMMON3] = true;
- StatusDisplayType[SC_SUMMON4] = true;
- StatusDisplayType[SC_SUMMON5] = true;
- StatusDisplayType[SC_CAMOUFLAGE] = true;
- StatusDisplayType[SC_DUPLELIGHT] = true;
- StatusDisplayType[SC_ORATIO] = true;
- StatusDisplayType[SC_FROSTMISTY] = true;
- StatusDisplayType[SC_VENOMIMPRESS] = true;
- StatusDisplayType[SC_HALLUCINATIONWALK] = true;
- StatusDisplayType[SC_ROLLINGCUTTER] = true;
- StatusDisplayType[SC_BANDING] = true;
- StatusDisplayType[SC_COLD] = true;
- StatusDisplayType[SC_DEEP_SLEEP] = true;
- StatusDisplayType[SC_CURSEDCIRCLE_ATKER]= true;
- StatusDisplayType[SC_CURSEDCIRCLE_TARGET]= true;
- StatusDisplayType[SC_BLOOD_SUCKER] = true;
- StatusDisplayType[SC__SHADOWFORM] = true;
- StatusDisplayType[SC__MANHOLE] = true;
- StatusDisplayType[SC_MONSTER_TRANSFORM] = true;
+ status->ChangeFlagTable[SC_PARALYSE] |= SCB_ASPD|SCB_FLEE|SCB_SPEED;
+ status->ChangeFlagTable[SC_DEATHHURT] |= SCB_REGEN;
+ status->ChangeFlagTable[SC_VENOMBLEED] |= SCB_MAXHP;
+ status->ChangeFlagTable[SC_OBLIVIONCURSE] |= SCB_REGEN;
+
+ status->ChangeFlagTable[SC_SAVAGE_STEAK] |= SCB_STR;
+ status->ChangeFlagTable[SC_COCKTAIL_WARG_BLOOD] |= SCB_INT;
+ status->ChangeFlagTable[SC_MINOR_BBQ] |= SCB_VIT;
+ status->ChangeFlagTable[SC_SIROMA_ICE_TEA] |= SCB_DEX;
+ status->ChangeFlagTable[SC_DROCERA_HERB_STEAMED] |= SCB_AGI;
+ status->ChangeFlagTable[SC_PUTTI_TAILS_NOODLES] |= SCB_LUK;
+ status->ChangeFlagTable[SC_BOOST500] |= SCB_ASPD;
+ status->ChangeFlagTable[SC_FULL_SWING_K] |= SCB_BATK;
+ status->ChangeFlagTable[SC_MANA_PLUS] |= SCB_MATK;
+ status->ChangeFlagTable[SC_MUSTLE_M] |= SCB_MAXHP;
+ status->ChangeFlagTable[SC_LIFE_FORCE_F] |= SCB_MAXSP;
+ status->ChangeFlagTable[SC_EXTRACT_WHITE_POTION_Z] |= SCB_REGEN;
+ status->ChangeFlagTable[SC_VITATA_500] |= SCB_REGEN;
+ status->ChangeFlagTable[SC_EXTRACT_SALAMINE_JUICE] |= SCB_ASPD;
+ status->ChangeFlagTable[SC_REBOUND] |= SCB_SPEED|SCB_REGEN;
+
+ status->ChangeFlagTable[SC_ALL_RIDING] = SCB_SPEED;
+ status->ChangeFlagTable[SC_WEDDING] = SCB_SPEED;
+
+
+ /* status->DisplayType Table [Ind/Hercules] */
+ status->DisplayType[SC_ALL_RIDING] = true;
+ status->DisplayType[SC_PUSH_CART] = true;
+ status->DisplayType[SC_SUMMON1] = true;
+ status->DisplayType[SC_SUMMON2] = true;
+ status->DisplayType[SC_SUMMON3] = true;
+ status->DisplayType[SC_SUMMON4] = true;
+ status->DisplayType[SC_SUMMON5] = true;
+ status->DisplayType[SC_CAMOUFLAGE] = true;
+ status->DisplayType[SC_DUPLELIGHT] = true;
+ status->DisplayType[SC_ORATIO] = true;
+ status->DisplayType[SC_FROSTMISTY] = true;
+ status->DisplayType[SC_VENOMIMPRESS] = true;
+ status->DisplayType[SC_HALLUCINATIONWALK] = true;
+ status->DisplayType[SC_ROLLINGCUTTER] = true;
+ status->DisplayType[SC_BANDING] = true;
+ status->DisplayType[SC_COLD] = true;
+ status->DisplayType[SC_DEEP_SLEEP] = true;
+ status->DisplayType[SC_CURSEDCIRCLE_ATKER]= true;
+ status->DisplayType[SC_CURSEDCIRCLE_TARGET]= true;
+ status->DisplayType[SC_BLOOD_SUCKER] = true;
+ status->DisplayType[SC__SHADOWFORM] = true;
+ status->DisplayType[SC__MANHOLE] = true;
+ status->DisplayType[SC_MONSTER_TRANSFORM] = true;
#ifdef RENEWAL_EDP
// renewal EDP increases your weapon atk
- StatusChangeFlagTable[SC_EDP] |= SCB_WATK;
+ status->ChangeFlagTable[SC_EDP] |= SCB_WATK;
#endif
if( !battle_config.display_hallucination ) //Disable Hallucination.
- StatusIconChangeTable[SC_ILLUSION] = SI_BLANK;
+ status->IconChangeTable[SC_ILLUSION] = SI_BLANK;
}
-static void initDummyData(void)
+void initDummyData(void)
{
- memset(&dummy_status, 0, sizeof(dummy_status));
- dummy_status.hp =
- dummy_status.max_hp =
- dummy_status.max_sp =
- dummy_status.str =
- dummy_status.agi =
- dummy_status.vit =
- dummy_status.int_ =
- dummy_status.dex =
- dummy_status.luk =
- dummy_status.hit = 1;
- dummy_status.speed = 2000;
- dummy_status.adelay = 4000;
- dummy_status.amotion = 2000;
- dummy_status.dmotion = 2000;
- dummy_status.ele_lv = 1; //Min elemental level.
- dummy_status.mode = MD_CANMOVE;
+ memset(&status->dummy, 0, sizeof(status->dummy));
+ status->dummy.hp =
+ status->dummy.max_hp =
+ status->dummy.max_sp =
+ status->dummy.str =
+ status->dummy.agi =
+ status->dummy.vit =
+ status->dummy.int_ =
+ status->dummy.dex =
+ status->dummy.luk =
+ status->dummy.hit = 1;
+ status->dummy.speed = 2000;
+ status->dummy.adelay = 4000;
+ status->dummy.amotion = 2000;
+ status->dummy.dmotion = 2000;
+ status->dummy.ele_lv = 1; //Min elemental level.
+ status->dummy.mode = MD_CANMOVE;
}
@@ -1093,7 +1061,7 @@ int status_set_hp(struct block_list *bl, unsigned int hp, int flag) {
struct status_data *st;
if (hp < 1) return 0;
st = status->get_status_data(bl);
- if (st == &dummy_status)
+ if (st == &status->dummy)
return 0;
if (hp > st->max_hp) hp = st->max_hp;
@@ -1110,7 +1078,7 @@ int status_set_sp(struct block_list *bl, unsigned int sp, int flag) {
struct status_data *st;
st = status->get_status_data(bl);
- if (st == &dummy_status)
+ if (st == &status->dummy)
return 0;
if (sp > st->max_sp) sp = st->max_sp;
@@ -1157,7 +1125,7 @@ int status_damage(struct block_list *src,struct block_list *target,int64 in_hp,
return skill->unit_ondamaged((struct skill_unit *)target, src, hp, timer->gettick());
st = status->get_status_data(target);
- if( st == &dummy_status )
+ if( st == &status->dummy )
return 0;
if ((unsigned int)hp >= st->hp) {
@@ -1204,7 +1172,7 @@ int status_damage(struct block_list *src,struct block_list *target,int64 in_hp,
if ((sce=sc->data[SC_ENDURE]) && !sce->val4 && !sc->data[SC_LKCONCENTRATION]) {
//Endure count is only reduced by non-players on non-gvg maps.
//val4 signals infinite endure. [Skotlex]
- if (src && src->type != BL_PC && !map_flag_gvg2(target->m) && !maplist[target->m].flag.battleground && --(sce->val2) < 0)
+ if (src && src->type != BL_PC && !map_flag_gvg2(target->m) && !map->list[target->m].flag.battleground && --(sce->val2) < 0)
status_change_end(target, SC_ENDURE, INVALID_TIMER);
}
if ((sce=sc->data[SC_GRAVITATION]) && sce->val3 == BCT_SELF) {
@@ -1361,7 +1329,7 @@ int status_heal(struct block_list *bl,int64 in_hp,int64 in_sp, int flag) {
st = status->get_status_data(bl);
- if (st == &dummy_status || !st->hp)
+ if (st == &status->dummy || !st->hp)
return 0;
/* here onwards we consider it a 32-type, the client does not support higher and from here onwards the value doesn't get thru percentage modifiers */
@@ -1496,7 +1464,7 @@ int status_revive(struct block_list *bl, unsigned char per_hp, unsigned char per
if (!status->isdead(bl)) return 0;
st = status->get_status_data(bl);
- if (st == &dummy_status)
+ if (st == &status->dummy)
return 0; //Invalid target.
hp = (int64)st->max_hp * per_hp/100;
@@ -1543,7 +1511,7 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, uin
struct status_change *sc=NULL, *tsc;
int hide_flag;
- st = src ? status->get_status_data(src) : &dummy_status;
+ st = src ? status->get_status_data(src) : &status->dummy;
if (src && src->type != BL_PC && status->isdead(src))
return 0;
@@ -1564,12 +1532,12 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, uin
if( src && !(src->type == BL_PC && ((TBL_PC*)src)->skillitem)) { // Items that cast skills using 'itemskill' will not be handled by map_zone_db.
int i;
- for(i = 0; i < maplist[src->m].zone->disabled_skills_count; i++) {
- if( skill_id == maplist[src->m].zone->disabled_skills[i]->nameid && (maplist[src->m].zone->disabled_skills[i]->type&src->type) ) {
+ for(i = 0; i < map->list[src->m].zone->disabled_skills_count; i++) {
+ if( skill_id == map->list[src->m].zone->disabled_skills[i]->nameid && (map->list[src->m].zone->disabled_skills[i]->type&src->type) ) {
if( src->type == BL_PC )
clif->msg((TBL_PC*)src, SKILL_CANT_USE_AREA); // This skill cannot be used within this area
- else if( src->type == BL_MOB && maplist[src->m].zone->disabled_skills[i]->subtype != MZS_NONE ) {
- if( (st->mode&MD_BOSS) && !(maplist[src->m].zone->disabled_skills[i]->subtype&MZS_BOSS) )
+ else if( src->type == BL_MOB && map->list[src->m].zone->disabled_skills[i]->subtype != MZS_NONE ) {
+ if( (st->mode&MD_BOSS) && !(map->list[src->m].zone->disabled_skills[i]->subtype&MZS_BOSS) )
break;
}
return 0;
@@ -1864,21 +1832,21 @@ int status_base_amotion_pc(struct map_session_data *sd, struct status_data *st)
}
amotion = ( sd->status.weapon < MAX_WEAPON_TYPE && mod < 0 )
- ? (aspd_base[pc->class2idx(sd->status.class_)][sd->status.weapon]) // single weapon
- : ((aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype2] // dual-wield
- + aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype2]) * 6 / 10 + 10 * mod
- - aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype2]
- + aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype1]);
+ ? (status->aspd_base[pc->class2idx(sd->status.class_)][sd->status.weapon]) // single weapon
+ : ((status->aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype2] // dual-wield
+ + status->aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype2]) * 6 / 10 + 10 * mod
+ - status->aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype2]
+ + status->aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype1]);
if ( sd->status.shield )
- amotion += ( 2000 - aspd_base[pc->class2idx(sd->status.class_)][W_FIST] ) +
- ( aspd_base[pc->class2idx(sd->status.class_)][MAX_WEAPON_TYPE] - 2000 );
+ amotion += ( 2000 - status->aspd_base[pc->class2idx(sd->status.class_)][W_FIST] ) +
+ ( status->aspd_base[pc->class2idx(sd->status.class_)][MAX_WEAPON_TYPE] - 2000 );
#else
// base weapon delay
amotion = (sd->status.weapon < MAX_WEAPON_TYPE)
- ? (aspd_base[pc->class2idx(sd->status.class_)][sd->status.weapon]) // single weapon
- : (aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype1] + aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype2])*7/10; // dual-wield
+ ? (status->aspd_base[pc->class2idx(sd->status.class_)][sd->status.weapon]) // single weapon
+ : (status->aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype1] + status->aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype2])*7/10; // dual-wield
// percentual delay reduction from stats
amotion -= amotion * (4*st->agi + st->dex)/1000;
@@ -1889,7 +1857,7 @@ int status_base_amotion_pc(struct map_session_data *sd, struct status_data *st)
return amotion;
}
-static unsigned short status_base_atk(const struct block_list *bl, const struct status_data *st) {
+unsigned short status_base_atk(const struct block_list *bl, const struct status_data *st) {
int flag = 0, str, dex,
#ifdef RENEWAL
rstr,
@@ -1982,10 +1950,10 @@ void status_calc_misc(struct block_list *bl, struct status_data *st, int level)
st->flee2 = 0;
if (st->batk) {
- int temp = st->batk + status_base_atk(bl, st);
+ int temp = st->batk + status->base_atk(bl, st);
st->batk = cap_value(temp, 0, USHRT_MAX);
} else
- st->batk = status_base_atk(bl, st);
+ st->batk = status->base_atk(bl, st);
if (st->cri)
switch (bl->type) {
case BL_MOB:
@@ -2152,9 +2120,9 @@ int status_calc_mob_(struct mob_data* md, bool first) {
if(flag&4)
{ // Strengthen Guardians - custom value +10% / lv
struct guild_castle *gc;
- gc=guild->mapname2gc(maplist[md->bl.m].name);
+ gc=guild->mapname2gc(map->list[md->bl.m].name);
if (!gc)
- ShowError("status_calc_mob: No castle set at map %s\n", maplist[md->bl.m].name);
+ ShowError("status_calc_mob: No castle set at map %s\n", map->list[md->bl.m].name);
else
if(gc->castle_id < 24 || md->class_ == MOBID_EMPERIUM) {
#ifdef RENEWAL
@@ -2249,23 +2217,23 @@ int status_calc_pet_(struct pet_data *pd, bool first)
}
/// Helper function for status_base_pc_maxhp(), used to pre-calculate the hp_sigma_val[] array
-static void status_calc_sigma(void)
+void status_calc_sigma(void)
{
int i,j;
for(i = 0; i < CLASS_COUNT; i++)
{
unsigned int k = 0;
- hp_sigma_val[i][0] = hp_sigma_val[i][1] = 0;
+ status->hp_sigma_val[i][0] = status->hp_sigma_val[i][1] = 0;
for(j = 2; j <= MAX_LEVEL; j++)
{
- k += (hp_coefficient[i]*j + 50) / 100;
- hp_sigma_val[i][j] = k;
+ k += (status->hp_coefficient[i]*j + 50) / 100;
+ status->hp_sigma_val[i][j] = k;
if (k >= INT_MAX)
break; //Overflow protection. [Skotlex]
}
for(; j <= MAX_LEVEL; j++)
- hp_sigma_val[i][j] = INT_MAX;
+ status->hp_sigma_val[i][j] = INT_MAX;
}
}
@@ -2274,9 +2242,9 @@ static void status_calc_sigma(void)
/// f(0) = 35 | f(x+1) = f(x) + A + (x + B)*C/D
/// which reduces to something close to
/// f(x) = 35 + x*(A + B*C/D) + sum(i=2..x){ i*C/D }
-static unsigned int status_base_pc_maxhp(struct map_session_data *sd, struct status_data *st) {
+unsigned int status_base_pc_maxhp(struct map_session_data *sd, struct status_data *st) {
uint64 val = pc->class2idx(sd->status.class_);
- val = 35 + sd->status.base_level*(int64)hp_coefficient2[val]/100 + hp_sigma_val[val][sd->status.base_level];
+ val = 35 + sd->status.base_level*(int64)status->hp_coefficient2[val]/100 + status->hp_sigma_val[val][sd->status.base_level];
if((sd->class_&MAPID_UPPERMASK) == MAPID_NINJA || (sd->class_&MAPID_UPPERMASK) == MAPID_GUNSLINGER || (sd->class_&MAPID_UPPERMASK) == MAPID_REBELLION)
val += 100; //Since their HP can't be approximated well enough without this.
@@ -2291,13 +2259,13 @@ static unsigned int status_base_pc_maxhp(struct map_session_data *sd, struct sta
val += val * 25/100; //Trans classes get a 25% hp bonus
else if (sd->class_&JOBL_BABY)
val -= val * 30/100; //Baby classes get a 30% hp penalty
- return (unsigned int)val;
+ return (unsigned int)cap_value(val,0,UINT_MAX);
}
-static unsigned int status_base_pc_maxsp(struct map_session_data* sd, struct status_data *st) {
+unsigned int status_base_pc_maxsp(struct map_session_data* sd, struct status_data *st) {
uint64 val;
- val = 10 + sd->status.base_level*(int64)sp_coefficient[pc->class2idx(sd->status.class_)]/100;
+ val = 10 + sd->status.base_level*(int64)status->sp_coefficient[pc->class2idx(sd->status.class_)]/100;
val += val * st->int_/100;
if (sd->class_&JOBL_UPPER)
@@ -2307,7 +2275,7 @@ static unsigned int status_base_pc_maxsp(struct map_session_data* sd, struct sta
if ((sd->class_&MAPID_UPPERMASK) == MAPID_TAEKWON && sd->status.base_level >= 90 && pc->famerank(sd->status.char_id, MAPID_TAEKWON))
val *= 3; //Triple max SP for top ranking Taekwons over level 90.
- return (unsigned int)val;
+ return (unsigned int)cap_value(val,0,UINT_MAX);
}
//Calculates player data from scratch without counting SC adjustments.
@@ -2332,7 +2300,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first) {
pc->calc_skilltree(sd); // SkillTree calculation
- sd->max_weight = max_weight_base[pc->class2idx(sd->status.class_)]+sd->status.str*300;
+ sd->max_weight = status->max_weight_base[pc->class2idx(sd->status.class_)]+sd->status.str*300;
if(first) {
//Load Hp/SP from char-received data.
@@ -2482,13 +2450,13 @@ int status_calc_pc_(struct map_session_data* sd, bool first) {
if(!sd->inventory_data[index])
continue;
- for(k = 0; k < maplist[sd->bl.m].zone->disabled_items_count; k++) {
- if( maplist[sd->bl.m].zone->disabled_items[k] == sd->inventory_data[index]->nameid ) {
+ for(k = 0; k < map->list[sd->bl.m].zone->disabled_items_count; k++) {
+ if( map->list[sd->bl.m].zone->disabled_items[k] == sd->inventory_data[index]->nameid ) {
break;
}
}
- if( k < maplist[sd->bl.m].zone->disabled_items_count )
+ if( k < map->list[sd->bl.m].zone->disabled_items_count )
continue;
bstatus->def += sd->inventory_data[index]->def;
@@ -2519,18 +2487,18 @@ int status_calc_pc_(struct map_session_data* sd, bool first) {
}
wa->atk += sd->inventory_data[index]->atk;
if ( (r = sd->status.inventory[index].refine) )
- wa->atk2 = refine_info[wlv].bonus[r-1] / 100;
+ wa->atk2 = status->refine_info[wlv].bonus[r-1] / 100;
#ifdef RENEWAL
wa->matk += sd->inventory_data[index]->matk;
wa->wlv = wlv;
if( r && sd->weapontype1 != W_BOW ) // renewal magic attack refine bonus
- wa->matk += refine_info[wlv].bonus[r-1] / 100;
+ wa->matk += status->refine_info[wlv].bonus[r-1] / 100;
#endif
//Overrefine bonus.
if (r)
- wd->overrefine = refine_info[wlv].randombonus_max[r-1] / 100;
+ wd->overrefine = status->refine_info[wlv].randombonus_max[r-1] / 100;
wa->range += sd->inventory_data[index]->range;
if(sd->inventory_data[index]->script) {
@@ -2558,7 +2526,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first) {
else if(sd->inventory_data[index]->type == IT_ARMOR) {
int r;
if ( (r = sd->status.inventory[index].refine) )
- refinedef += refine_info[REFINE_TYPE_ARMOR].bonus[r-1];
+ refinedef += status->refine_info[REFINE_TYPE_ARMOR].bonus[r-1];
if(sd->inventory_data[index]->script) {
if( i == EQI_HAND_L ) //Shield
sd->state.lr_flag = 3;
@@ -2627,13 +2595,13 @@ int status_calc_pc_(struct map_session_data* sd, bool first) {
if(!data)
continue;
- for(k = 0; k < maplist[sd->bl.m].zone->disabled_items_count; k++) {
- if( maplist[sd->bl.m].zone->disabled_items[k] == data->nameid ) {
+ for(k = 0; k < map->list[sd->bl.m].zone->disabled_items_count; k++) {
+ if( map->list[sd->bl.m].zone->disabled_items[k] == data->nameid ) {
break;
}
}
- if( k < maplist[sd->bl.m].zone->disabled_items_count )
+ if( k < map->list[sd->bl.m].zone->disabled_items_count )
continue;
if(first && data->equip_script) {//Execute equip-script on login
@@ -2682,12 +2650,12 @@ int status_calc_pc_(struct map_session_data* sd, bool first) {
sd->bonus.splash_range += sd->bonus.splash_add_range;
// Damage modifiers from weapon type
- sd->right_weapon.atkmods[0] = atkmods[0][sd->weapontype1];
- sd->right_weapon.atkmods[1] = atkmods[1][sd->weapontype1];
- sd->right_weapon.atkmods[2] = atkmods[2][sd->weapontype1];
- sd->left_weapon.atkmods[0] = atkmods[0][sd->weapontype2];
- sd->left_weapon.atkmods[1] = atkmods[1][sd->weapontype2];
- sd->left_weapon.atkmods[2] = atkmods[2][sd->weapontype2];
+ sd->right_weapon.atkmods[0] = status->atkmods[0][sd->weapontype1];
+ sd->right_weapon.atkmods[1] = status->atkmods[1][sd->weapontype1];
+ sd->right_weapon.atkmods[2] = status->atkmods[2][sd->weapontype1];
+ sd->left_weapon.atkmods[0] = status->atkmods[0][sd->weapontype2];
+ sd->left_weapon.atkmods[1] = status->atkmods[1][sd->weapontype2];
+ sd->left_weapon.atkmods[2] = status->atkmods[2][sd->weapontype2];
if( (pc_isriding(sd) || pc_isridingdragon(sd)) &&
(sd->status.weapon==W_1HSPEAR || sd->status.weapon==W_2HSPEAR))
@@ -2702,15 +2670,15 @@ int status_calc_pc_(struct map_session_data* sd, bool first) {
// Job bonuses
index = pc->class2idx(sd->status.class_);
for(i=0;i<(int)sd->status.job_level && i<MAX_LEVEL;i++){
- if(!job_bonus[index][i])
+ if(!status->job_bonus[index][i])
continue;
- switch(job_bonus[index][i]) {
- case 1: bstatus->str++; break;
- case 2: bstatus->agi++; break;
- case 3: bstatus->vit++; break;
- case 4: bstatus->int_++; break;
- case 5: bstatus->dex++; break;
- case 6: bstatus->luk++; break;
+ switch(status->job_bonus[index][i]) {
+ case 1: bstatus->str++; break;
+ case 2: bstatus->agi++; break;
+ case 3: bstatus->vit++; break;
+ case 4: bstatus->int_++; break;
+ case 5: bstatus->dex++; break;
+ case 6: bstatus->luk++; break;
}
}
@@ -2764,7 +2732,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first) {
// Basic MaxHP value
//We hold the standard Max HP here to make it faster to recalculate on vit changes.
- sd->status.max_hp = status_base_pc_maxhp(sd,bstatus);
+ sd->status.max_hp = status->base_pc_maxhp(sd,bstatus);
//This is done to handle underflows from negative Max HP bonuses
i64 = sd->status.max_hp + (int)bstatus->max_hp;
bstatus->max_hp = (unsigned int)cap_value(i64, 0, INT_MAX);
@@ -2789,7 +2757,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first) {
// ----- SP MAX CALCULATION -----
// Basic MaxSP value
- sd->status.max_sp = status_base_pc_maxsp(sd,bstatus);
+ sd->status.max_sp = status->base_pc_maxsp(sd,bstatus);
//This is done to handle underflows from negative Max SP bonuses
i64 = sd->status.max_sp + (int)bstatus->max_sp;
bstatus->max_sp = (unsigned int)cap_value(i64, 0, INT_MAX);
@@ -2952,7 +2920,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first) {
// Unlike other stats, ASPD rate modifiers from skills/SCs/items/etc are first all added together, then the final modifier is applied
// Basic ASPD value
- i = status_base_amotion_pc(sd,bstatus);
+ i = status->base_amotion_pc(sd,bstatus);
bstatus->amotion = cap_value(i,((sd->class_&JOBL_THIRD) ? battle_config.max_third_aspd : battle_config.max_aspd),2000);
// Relative modifiers from passive skills
@@ -3313,35 +3281,6 @@ int status_calc_npc_(struct npc_data *nd, bool first) {
return 0;
}
-static unsigned short status_calc_str(struct block_list *,struct status_change *,int);
-static unsigned short status_calc_agi(struct block_list *,struct status_change *,int);
-static unsigned short status_calc_vit(struct block_list *,struct status_change *,int);
-static unsigned short status_calc_int(struct block_list *,struct status_change *,int);
-static unsigned short status_calc_dex(struct block_list *,struct status_change *,int);
-static unsigned short status_calc_luk(struct block_list *,struct status_change *,int);
-static unsigned short status_calc_watk(struct block_list *,struct status_change *,int,bool);
-static unsigned short status_calc_matk(struct block_list *,struct status_change *,int,bool);
-static signed short status_calc_hit(struct block_list *,struct status_change *,int,bool);
-static signed short status_calc_critical(struct block_list *,struct status_change *,int,bool);
-static signed short status_calc_flee(struct block_list *,struct status_change *,int,bool);
-static signed short status_calc_flee2(struct block_list *,struct status_change *,int,bool);
-static unsigned short status_calc_speed(struct block_list *,struct status_change *,int);
-static short status_calc_aspd_rate(struct block_list *,struct status_change *,int);
-static unsigned short status_calc_dmotion(struct block_list *bl, struct status_change *sc, int dmotion);
-#ifdef RENEWAL_ASPD
-static short status_calc_aspd(struct block_list *bl, struct status_change *sc, short flag);
-#endif
-static short status_calc_fix_aspd(struct block_list *bl, struct status_change *sc, int);
-static unsigned int status_calc_maxhp(struct block_list *,struct status_change *, uint64);
-static unsigned int status_calc_maxsp(struct block_list *,struct status_change *,unsigned int);
-static unsigned char status_calc_element(struct block_list *bl, struct status_change *sc, int element);
-static unsigned char status_calc_element_lv(struct block_list *bl, struct status_change *sc, int lv);
-static unsigned short status_calc_mode(struct block_list *bl, struct status_change *sc, int mode);
-#ifdef RENEWAL
-static unsigned short status_calc_ematk(struct block_list *,struct status_change *,int);
-#else
-static unsigned short status_calc_batk(struct block_list *,struct status_change *,int,bool);
-#endif
//Calculates base regen values.
void status_calc_regen(struct block_list *bl, struct status_data *st, struct regen_data *regen) {
@@ -3543,14 +3482,14 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
}
if(flag&SCB_STR) {
- st->str = status_calc_str(bl, sc, bst->str);
+ st->str = status->calc_str(bl, sc, bst->str);
flag|=SCB_BATK;
if( bl->type&BL_HOM )
flag |= SCB_WATK;
}
if(flag&SCB_AGI) {
- st->agi = status_calc_agi(bl, sc, bst->agi);
+ st->agi = status->calc_agi(bl, sc, bst->agi);
flag|=SCB_FLEE
#ifdef RENEWAL
|SCB_DEF2
@@ -3561,7 +3500,7 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
}
if(flag&SCB_VIT) {
- st->vit = status_calc_vit(bl, sc, bst->vit);
+ st->vit = status->calc_vit(bl, sc, bst->vit);
flag|=SCB_DEF2|SCB_MDEF2;
if( bl->type&(BL_PC|BL_HOM|BL_MER|BL_ELEM) )
flag |= SCB_MAXHP;
@@ -3570,7 +3509,7 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
}
if(flag&SCB_INT) {
- st->int_ = status_calc_int(bl, sc, bst->int_);
+ st->int_ = status->calc_int(bl, sc, bst->int_);
flag|=SCB_MATK|SCB_MDEF2;
if( bl->type&(BL_PC|BL_HOM|BL_MER|BL_ELEM) )
flag |= SCB_MAXSP;
@@ -3579,7 +3518,7 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
}
if(flag&SCB_DEX) {
- st->dex = status_calc_dex(bl, sc, bst->dex);
+ st->dex = status->calc_dex(bl, sc, bst->dex);
flag|=SCB_BATK|SCB_HIT
#ifdef RENEWAL
|SCB_MATK|SCB_MDEF2
@@ -3592,7 +3531,7 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
}
if(flag&SCB_LUK) {
- st->luk = status_calc_luk(bl, sc, bst->luk);
+ st->luk = status->calc_luk(bl, sc, bst->luk);
flag|=SCB_BATK|SCB_CRI|SCB_FLEE2
#ifdef RENEWAL
|SCB_MATK|SCB_HIT|SCB_FLEE
@@ -3601,8 +3540,8 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
}
if(flag&SCB_BATK && bst->batk) {
- st->batk = status_base_atk(bl,st);
- temp = bst->batk - status_base_atk(bl,bst);
+ st->batk = status->base_atk(bl,st);
+ temp = bst->batk - status->base_atk(bl,bst);
if (temp) {
temp += st->batk;
st->batk = cap_value(temp, 0, USHRT_MAX);
@@ -3611,18 +3550,18 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
}
if(flag&SCB_WATK) {
- st->rhw.atk = status_calc_watk(bl, sc, bst->rhw.atk, true);
+ st->rhw.atk = status->calc_watk(bl, sc, bst->rhw.atk, true);
if (!sd) //Should not affect weapon refine bonus
- st->rhw.atk2 = status_calc_watk(bl, sc, bst->rhw.atk2, true);
+ st->rhw.atk2 = status->calc_watk(bl, sc, bst->rhw.atk2, true);
if(bst->lhw.atk) {
if (sd) {
sd->state.lr_flag = 1;
- st->lhw.atk = status_calc_watk(bl, sc, bst->lhw.atk, true);
+ st->lhw.atk = status->calc_watk(bl, sc, bst->lhw.atk, true);
sd->state.lr_flag = 0;
} else {
- st->lhw.atk = status_calc_watk(bl, sc, bst->lhw.atk, true);
- st->lhw.atk2 = status_calc_watk(bl, sc, bst->lhw.atk2, true);
+ st->lhw.atk = status->calc_watk(bl, sc, bst->lhw.atk, true);
+ st->lhw.atk2 = status->calc_watk(bl, sc, bst->lhw.atk2, true);
}
}
@@ -3640,9 +3579,9 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
&& st->luk == bst->luk
#endif
)
- st->hit = status_calc_hit(bl, sc, bst->hit, true);
+ st->hit = status->calc_hit(bl, sc, bst->hit, true);
else
- st->hit = status_calc_hit(bl, sc, bst->hit + (st->dex - bst->dex)
+ st->hit = status->calc_hit(bl, sc, bst->hit + (st->dex - bst->dex)
#ifdef RENEWAL
+ (st->luk/3 - bst->luk/3)
#endif
@@ -3655,9 +3594,9 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
&& st->luk == bst->luk
#endif
)
- st->flee = status_calc_flee(bl, sc, bst->flee, true);
+ st->flee = status->calc_flee(bl, sc, bst->flee, true);
else
- st->flee = status_calc_flee(bl, sc, bst->flee +(st->agi - bst->agi)
+ st->flee = status->calc_flee(bl, sc, bst->flee +(st->agi - bst->agi)
#ifdef RENEWAL
+ (st->luk/5 - bst->luk/5)
#endif
@@ -3714,7 +3653,7 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
if(flag&SCB_SPEED) {
struct unit_data *ud = unit->bl2ud(bl);
- st->speed = status_calc_speed(bl, sc, bst->speed);
+ st->speed = status->calc_speed(bl, sc, bst->speed);
//Re-walk to adjust speed (we do not check if walktimer != INVALID_TIMER
//because if you step on something while walking, the moment this
@@ -3733,9 +3672,9 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
if(flag&SCB_CRI && bst->cri) {
if (st->luk == bst->luk)
- st->cri = status_calc_critical(bl, sc, bst->cri, true);
+ st->cri = status->calc_critical(bl, sc, bst->cri, true);
else
- st->cri = status_calc_critical(bl, sc, bst->cri + 3*(st->luk - bst->luk), true);
+ st->cri = status->calc_critical(bl, sc, bst->cri + 3*(st->luk - bst->luk), true);
/**
* after status_calc_critical so the bonus is applied despite if you have or not a sc bugreport:5240
**/
@@ -3746,9 +3685,9 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
if(flag&SCB_FLEE2 && bst->flee2) {
if (st->luk == bst->luk)
- st->flee2 = status_calc_flee2(bl, sc, bst->flee2, true);
+ st->flee2 = status->calc_flee2(bl, sc, bst->flee2, true);
else
- st->flee2 = status_calc_flee2(bl, sc, bst->flee2 +(st->luk - bst->luk), true);
+ st->flee2 = status->calc_flee2(bl, sc, bst->flee2 +(st->luk - bst->luk), true);
}
if(flag&SCB_ATK_ELE) {
@@ -3759,12 +3698,12 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
}
if(flag&SCB_DEF_ELE) {
- st->def_ele = status_calc_element(bl, sc, bst->def_ele);
- st->ele_lv = status_calc_element_lv(bl, sc, bst->ele_lv);
+ st->def_ele = status->calc_element(bl, sc, bst->def_ele);
+ st->ele_lv = status->calc_element_lv(bl, sc, bst->ele_lv);
}
if(flag&SCB_MODE) {
- st->mode = status_calc_mode(bl, sc, bst->mode);
+ st->mode = status->calc_mode(bl, sc, bst->mode);
//Since mode changed, reset their state.
if (!(st->mode&MD_CANATTACK))
unit->stop_attack(bl);
@@ -3779,15 +3718,15 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
if(flag&SCB_MAXHP) {
if( bl->type&BL_PC ) {
- st->max_hp = status_base_pc_maxhp(sd,st);
+ st->max_hp = status->base_pc_maxhp(sd,st);
st->max_hp += bst->max_hp - sd->status.max_hp;
- st->max_hp = status_calc_maxhp(bl, sc, st->max_hp);
+ st->max_hp = status->calc_maxhp(bl, sc, st->max_hp);
if( st->max_hp > (unsigned int)battle_config.max_hp )
st->max_hp = (unsigned int)battle_config.max_hp;
} else {
- st->max_hp = status_calc_maxhp(bl, sc, bst->max_hp);
+ st->max_hp = status->calc_maxhp(bl, sc, bst->max_hp);
}
if( st->hp > st->max_hp ) {
@@ -3799,15 +3738,15 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
if(flag&SCB_MAXSP) {
if( bl->type&BL_PC ) {
- st->max_sp = status_base_pc_maxsp(sd,st);
+ st->max_sp = status->base_pc_maxsp(sd,st);
st->max_sp += bst->max_sp - sd->status.max_sp;
- st->max_sp = status_calc_maxsp(&sd->bl, &sd->sc, st->max_sp);
+ st->max_sp = status->calc_maxsp(&sd->bl, &sd->sc, st->max_sp);
if( st->max_sp > (unsigned int)battle_config.max_sp )
st->max_sp = (unsigned int)battle_config.max_sp;
} else {
- st->max_sp = status_calc_maxsp(bl, sc, bst->max_sp);
+ st->max_sp = status->calc_maxsp(bl, sc, bst->max_sp);
}
if( st->sp > st->max_sp ) {
@@ -3823,46 +3762,46 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
if(flag&SCB_ASPD) {
int amotion;
if( bl->type&BL_PC ) {
- amotion = status_base_amotion_pc(sd,st);
+ amotion = status->base_amotion_pc(sd,st);
#ifndef RENEWAL_ASPD
- st->aspd_rate = status_calc_aspd_rate(bl, sc, bst->aspd_rate);
+ st->aspd_rate = status->calc_aspd_rate(bl, sc, bst->aspd_rate);
if(st->aspd_rate != 1000)
amotion = amotion*st->aspd_rate/1000;
#else
// aspd = baseaspd + floor(sqrt((agi^2/2) + (dex^2/5))/4 + (potskillbonus*agi/200))
- amotion -= (int)(sqrt( (pow(st->agi, 2) / 2) + (pow(st->dex, 2) / 5) ) / 4 + ((float)status_calc_aspd(bl, sc, 1) * st->agi / 200)) * 10;
+ amotion -= (int)(sqrt( (pow(st->agi, 2) / 2) + (pow(st->dex, 2) / 5) ) / 4 + ((float)status->calc_aspd(bl, sc, 1) * st->agi / 200)) * 10;
- if( (status_calc_aspd(bl, sc, 2) + st->aspd_rate2) != 0 ) // RE ASPD percertage modifier
+ if( (status->calc_aspd(bl, sc, 2) + st->aspd_rate2) != 0 ) // RE ASPD percertage modifier
amotion -= (( amotion - ((sd->class_&JOBL_THIRD) ? battle_config.max_third_aspd : battle_config.max_aspd) )
- * (status_calc_aspd(bl, sc, 2) + st->aspd_rate2) / 10 + 5) / 10;
+ * (status->calc_aspd(bl, sc, 2) + st->aspd_rate2) / 10 + 5) / 10;
if(st->aspd_rate != 1000) // absolute percentage modifier
amotion = ( 200 - (200-amotion/10) * st->aspd_rate / 1000 ) * 10;
#endif
- amotion = status_calc_fix_aspd(bl, sc, amotion);
+ amotion = status->calc_fix_aspd(bl, sc, amotion);
st->amotion = cap_value(amotion,((sd->class_&JOBL_THIRD) ? battle_config.max_third_aspd : battle_config.max_aspd),2000);
st->adelay = 2*st->amotion;
} else if( bl->type&BL_HOM ) {
amotion = (1000 - 4*st->agi - st->dex) * ((TBL_HOM*)bl)->homunculusDB->baseASPD/1000;
- st->aspd_rate = status_calc_aspd_rate(bl, sc, bst->aspd_rate);
+ st->aspd_rate = status->calc_aspd_rate(bl, sc, bst->aspd_rate);
if(st->aspd_rate != 1000)
amotion = amotion*st->aspd_rate/1000;
- amotion = status_calc_fix_aspd(bl, sc, amotion);
+ amotion = status->calc_fix_aspd(bl, sc, amotion);
st->amotion = cap_value(amotion,battle_config.max_aspd,2000);
st->adelay = st->amotion;
} else { // mercenary and mobs
amotion = bst->amotion;
- st->aspd_rate = status_calc_aspd_rate(bl, sc, bst->aspd_rate);
+ st->aspd_rate = status->calc_aspd_rate(bl, sc, bst->aspd_rate);
if(st->aspd_rate != 1000)
amotion = amotion*st->aspd_rate/1000;
- amotion = status_calc_fix_aspd(bl, sc, amotion);
+ amotion = status->calc_fix_aspd(bl, sc, amotion);
st->amotion = cap_value(amotion, battle_config.monster_max_aspd, 2000);
temp = bst->adelay*st->aspd_rate/1000;
@@ -3874,21 +3813,21 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
int dmotion;
if( bl->type&BL_PC ) {
if (bst->agi == st->agi)
- st->dmotion = status_calc_dmotion(bl, sc, bst->dmotion);
+ st->dmotion = status->calc_dmotion(bl, sc, bst->dmotion);
else {
dmotion = 800-st->agi*4;
st->dmotion = cap_value(dmotion, 400, 800);
if(battle_config.pc_damage_delay_rate != 100)
st->dmotion = st->dmotion*battle_config.pc_damage_delay_rate/100;
//It's safe to ignore bst->dmotion since no bonus affects it.
- st->dmotion = status_calc_dmotion(bl, sc, st->dmotion);
+ st->dmotion = status->calc_dmotion(bl, sc, st->dmotion);
}
} else if( bl->type&BL_HOM ) {
dmotion = 800-st->agi*4;
st->dmotion = cap_value(dmotion, 400, 800);
- st->dmotion = status_calc_dmotion(bl, sc, bst->dmotion);
+ st->dmotion = status->calc_dmotion(bl, sc, bst->dmotion);
} else { // mercenary and mobs
- st->dmotion = status_calc_dmotion(bl, sc, bst->dmotion);
+ st->dmotion = status->calc_dmotion(bl, sc, bst->dmotion);
}
}
@@ -3923,7 +3862,7 @@ void status_calc_bl_(struct block_list *bl, enum scb_flag flag, bool first) {
case BL_HOM: status->calc_homunculus_(BL_CAST(BL_HOM,bl), first); break;
case BL_MER: status->calc_mercenary_(BL_CAST(BL_MER,bl), first); break;
case BL_ELEM: status->calc_elemental_(BL_CAST(BL_ELEM,bl), first); break;
- case BL_NPC: status_calc_npc_(BL_CAST(BL_NPC,bl), first); break;
+ case BL_NPC: status->calc_npc_(BL_CAST(BL_NPC,bl), first); break;
}
}
@@ -3933,7 +3872,7 @@ void status_calc_bl_(struct block_list *bl, enum scb_flag flag, bool first) {
if( first && bl->type == BL_MOB )
return; // assume there will be no statuses active
- status_calc_bl_main(bl, flag);
+ status->calc_bl_main(bl, flag);
if( first && bl->type == BL_HOM )
return; // client update handled by caller
@@ -4076,7 +4015,7 @@ void status_calc_bl_(struct block_list *bl, enum scb_flag flag, bool first) {
/*==========================================
* Apply shared stat mods from status changes [DracoRPG]
*------------------------------------------*/
-static unsigned short status_calc_str(struct block_list *bl, struct status_change *sc, int str)
+unsigned short status_calc_str(struct block_list *bl, struct status_change *sc, int str)
{
if(!sc || !sc->count)
return cap_value(str,0,USHRT_MAX);
@@ -4133,7 +4072,7 @@ static unsigned short status_calc_str(struct block_list *bl, struct status_chang
return (unsigned short)cap_value(str,0,USHRT_MAX);
}
-static unsigned short status_calc_agi(struct block_list *bl, struct status_change *sc, int agi)
+unsigned short status_calc_agi(struct block_list *bl, struct status_change *sc, int agi)
{
if(!sc || !sc->count)
return cap_value(agi,0,USHRT_MAX);
@@ -4191,7 +4130,7 @@ static unsigned short status_calc_agi(struct block_list *bl, struct status_chang
return (unsigned short)cap_value(agi,0,USHRT_MAX);
}
-static unsigned short status_calc_vit(struct block_list *bl, struct status_change *sc, int vit)
+unsigned short status_calc_vit(struct block_list *bl, struct status_change *sc, int vit)
{
if(!sc || !sc->count)
return cap_value(vit,0,USHRT_MAX);
@@ -4239,7 +4178,7 @@ static unsigned short status_calc_vit(struct block_list *bl, struct status_chang
return (unsigned short)cap_value(vit,0,USHRT_MAX);
}
-static unsigned short status_calc_int(struct block_list *bl, struct status_change *sc, int int_)
+unsigned short status_calc_int(struct block_list *bl, struct status_change *sc, int int_)
{
if(!sc || !sc->count)
return cap_value(int_,0,USHRT_MAX);
@@ -4297,7 +4236,7 @@ static unsigned short status_calc_int(struct block_list *bl, struct status_chang
return (unsigned short)cap_value(int_,0,USHRT_MAX);
}
-static unsigned short status_calc_dex(struct block_list *bl, struct status_change *sc, int dex)
+unsigned short status_calc_dex(struct block_list *bl, struct status_change *sc, int dex)
{
if(!sc || !sc->count)
return cap_value(dex,0,USHRT_MAX);
@@ -4357,7 +4296,7 @@ static unsigned short status_calc_dex(struct block_list *bl, struct status_chang
return (unsigned short)cap_value(dex,0,USHRT_MAX);
}
-static unsigned short status_calc_luk(struct block_list *bl, struct status_change *sc, int luk)
+unsigned short status_calc_luk(struct block_list *bl, struct status_change *sc, int luk)
{
if(!sc || !sc->count)
return cap_value(luk,0,USHRT_MAX);
@@ -4406,11 +4345,7 @@ static unsigned short status_calc_luk(struct block_list *bl, struct status_chang
return (unsigned short)cap_value(luk,0,USHRT_MAX);
}
-#ifdef RENEWAL
unsigned short status_calc_batk(struct block_list *bl, struct status_change *sc, int batk, bool viewable)
-#else
-static unsigned short status_calc_batk(struct block_list *bl, struct status_change *sc, int batk, bool viewable)
-#endif
{
if(!sc || !sc->count)
return cap_value(batk,0,USHRT_MAX);
@@ -4490,7 +4425,7 @@ static unsigned short status_calc_batk(struct block_list *bl, struct status_chan
return (unsigned short)cap_value(batk,0,USHRT_MAX);
}
-static unsigned short status_calc_watk(struct block_list *bl, struct status_change *sc, int watk, bool viewable)
+unsigned short status_calc_watk(struct block_list *bl, struct status_change *sc, int watk, bool viewable)
{
if(!sc || !sc->count)
return cap_value(watk,0,USHRT_MAX);
@@ -4580,7 +4515,7 @@ static unsigned short status_calc_watk(struct block_list *bl, struct status_chan
return (unsigned short)cap_value(watk,0,USHRT_MAX);
}
#ifdef RENEWAL
-static unsigned short status_calc_ematk(struct block_list *bl, struct status_change *sc, int matk)
+unsigned short status_calc_ematk(struct block_list *bl, struct status_change *sc, int matk)
{
if (!sc || !sc->count)
@@ -4606,7 +4541,7 @@ static unsigned short status_calc_ematk(struct block_list *bl, struct status_cha
return (unsigned short)cap_value(matk,0,USHRT_MAX);
}
#endif
-static unsigned short status_calc_matk(struct block_list *bl, struct status_change *sc, int matk, bool viewable)
+unsigned short status_calc_matk(struct block_list *bl, struct status_change *sc, int matk, bool viewable)
{
if(!sc || !sc->count)
return cap_value(matk,0,USHRT_MAX);
@@ -4655,7 +4590,7 @@ static unsigned short status_calc_matk(struct block_list *bl, struct status_chan
return (unsigned short)cap_value(matk,0,USHRT_MAX);
}
-static signed short status_calc_critical(struct block_list *bl, struct status_change *sc, int critical, bool viewable) {
+signed short status_calc_critical(struct block_list *bl, struct status_change *sc, int critical, bool viewable) {
if(!sc || !sc->count)
return cap_value(critical,10,SHRT_MAX);
@@ -4690,7 +4625,7 @@ static signed short status_calc_critical(struct block_list *bl, struct status_ch
return (short)cap_value(critical,10,SHRT_MAX);
}
-static signed short status_calc_hit(struct block_list *bl, struct status_change *sc, int hit, bool viewable)
+signed short status_calc_hit(struct block_list *bl, struct status_change *sc, int hit, bool viewable)
{
if(!sc || !sc->count)
@@ -4736,11 +4671,11 @@ static signed short status_calc_hit(struct block_list *bl, struct status_change
return (short)cap_value(hit,1,SHRT_MAX);
}
-static signed short status_calc_flee(struct block_list *bl, struct status_change *sc, int flee, bool viewable) {
+signed short status_calc_flee(struct block_list *bl, struct status_change *sc, int flee, bool viewable) {
if( bl->type == BL_PC ) {
if( map_flag_gvg2(bl->m) )
flee -= flee * battle_config.gvg_flee_penalty/100;
- else if( maplist[bl->m].flag.battleground )
+ else if( map->list[bl->m].flag.battleground )
flee -= flee * battle_config.bg_flee_penalty/100;
}
@@ -4821,7 +4756,7 @@ static signed short status_calc_flee(struct block_list *bl, struct status_change
return (short)cap_value(flee,1,SHRT_MAX);
}
-static signed short status_calc_flee2(struct block_list *bl, struct status_change *sc, int flee2, bool viewable)
+signed short status_calc_flee2(struct block_list *bl, struct status_change *sc, int flee2, bool viewable)
{
if(!sc || !sc->count)
return cap_value(flee2,10,SHRT_MAX);
@@ -5082,7 +5017,7 @@ signed short status_calc_mdef2(struct block_list *bl, struct status_change *sc,
#endif
}
-static unsigned short status_calc_speed(struct block_list *bl, struct status_change *sc, int speed)
+unsigned short status_calc_speed(struct block_list *bl, struct status_change *sc, int speed)
{
TBL_PC* sd = BL_CAST(BL_PC, bl);
int speed_rate;
@@ -5270,7 +5205,7 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha
#ifdef RENEWAL_ASPD
// flag&1 - fixed value [malufett]
// flag&2 - percentage value
-static short status_calc_aspd(struct block_list *bl, struct status_change *sc, short flag)
+short status_calc_aspd(struct block_list *bl, struct status_change *sc, short flag)
{
int i, pots = 0, skills1 = 0, skills2 = 0;
@@ -5386,7 +5321,7 @@ static short status_calc_aspd(struct block_list *bl, struct status_change *sc, s
}
#endif
-static short status_calc_fix_aspd(struct block_list *bl, struct status_change *sc, int aspd) {
+short status_calc_fix_aspd(struct block_list *bl, struct status_change *sc, int aspd) {
if (!sc || !sc->count)
return cap_value(aspd, 0, 2000);
@@ -5406,7 +5341,7 @@ static short status_calc_fix_aspd(struct block_list *bl, struct status_change *s
/// Calculates an object's ASPD modifier (alters the base amotion value).
/// Note that the scale of aspd_rate is 1000 = 100%.
-static short status_calc_aspd_rate(struct block_list *bl, struct status_change *sc, int aspd_rate)
+short status_calc_aspd_rate(struct block_list *bl, struct status_change *sc, int aspd_rate)
{
int i;
@@ -5543,8 +5478,8 @@ static short status_calc_aspd_rate(struct block_list *bl, struct status_change *
return (short)cap_value(aspd_rate,0,SHRT_MAX);
}
-static unsigned short status_calc_dmotion(struct block_list *bl, struct status_change *sc, int dmotion) {
- if( !sc || !sc->count || map_flag_gvg2(bl->m) || maplist[bl->m].flag.battleground )
+unsigned short status_calc_dmotion(struct block_list *bl, struct status_change *sc, int dmotion) {
+ if( !sc || !sc->count || map_flag_gvg2(bl->m) || map->list[bl->m].flag.battleground )
return cap_value(dmotion,0,USHRT_MAX);
/**
* It has been confirmed on official servers that MvP mobs have no dmotion even without endure
@@ -5557,7 +5492,7 @@ static unsigned short status_calc_dmotion(struct block_list *bl, struct status_c
return (unsigned short)cap_value(dmotion,0,USHRT_MAX);
}
-static unsigned int status_calc_maxhp(struct block_list *bl, struct status_change *sc, uint64 maxhp)
+unsigned int status_calc_maxhp(struct block_list *bl, struct status_change *sc, uint64 maxhp)
{
if(!sc || !sc->count)
return (unsigned int)cap_value(maxhp,1,UINT_MAX);
@@ -5618,7 +5553,7 @@ static unsigned int status_calc_maxhp(struct block_list *bl, struct status_chang
return (unsigned int)cap_value(maxhp,1,UINT_MAX);
}
-static unsigned int status_calc_maxsp(struct block_list *bl, struct status_change *sc, unsigned int maxsp)
+unsigned int status_calc_maxsp(struct block_list *bl, struct status_change *sc, unsigned int maxsp)
{
if(!sc || !sc->count)
return cap_value(maxsp,1,UINT_MAX);
@@ -5641,7 +5576,7 @@ static unsigned int status_calc_maxsp(struct block_list *bl, struct status_chang
return cap_value(maxsp,1,UINT_MAX);
}
-static unsigned char status_calc_element(struct block_list *bl, struct status_change *sc, int element)
+unsigned char status_calc_element(struct block_list *bl, struct status_change *sc, int element)
{
if(!sc || !sc->count)
return element;
@@ -5662,7 +5597,7 @@ static unsigned char status_calc_element(struct block_list *bl, struct status_ch
return (unsigned char)cap_value(element,0,UCHAR_MAX);
}
-static unsigned char status_calc_element_lv(struct block_list *bl, struct status_change *sc, int lv)
+unsigned char status_calc_element_lv(struct block_list *bl, struct status_change *sc, int lv)
{
if(!sc || !sc->count)
return lv;
@@ -5719,7 +5654,7 @@ unsigned char status_calc_attack_element(struct block_list *bl, struct status_ch
return (unsigned char)cap_value(element,0,UCHAR_MAX);
}
-static unsigned short status_calc_mode(struct block_list *bl, struct status_change *sc, int mode)
+unsigned short status_calc_mode(struct block_list *bl, struct status_change *sc, int mode)
{
if(!sc || !sc->count)
return mode;
@@ -5737,11 +5672,11 @@ static unsigned short status_calc_mode(struct block_list *bl, struct status_chan
const char* status_get_name(struct block_list *bl) {
nullpo_ret(bl);
switch (bl->type) {
- case BL_PC: return ((TBL_PC *)bl)->fakename[0] != '\0' ? ((TBL_PC*)bl)->fakename : ((TBL_PC*)bl)->status.name;
- case BL_MOB: return ((TBL_MOB*)bl)->name;
- case BL_PET: return ((TBL_PET*)bl)->pet.name;
- case BL_HOM: return ((TBL_HOM*)bl)->homunculus.name;
- case BL_NPC: return ((TBL_NPC*)bl)->name;
+ case BL_PC: return ((TBL_PC *)bl)->fakename[0] != '\0' ? ((TBL_PC*)bl)->fakename : ((TBL_PC*)bl)->status.name;
+ case BL_MOB: return ((TBL_MOB*)bl)->name;
+ case BL_PET: return ((TBL_PET*)bl)->pet.name;
+ case BL_HOM: return ((TBL_HOM*)bl)->homunculus.name;
+ case BL_NPC: return ((TBL_NPC*)bl)->name;
}
return "Unknown";
}
@@ -5755,13 +5690,13 @@ const char* status_get_name(struct block_list *bl) {
int status_get_class(struct block_list *bl) {
nullpo_ret(bl);
switch( bl->type ) {
- case BL_PC: return ((TBL_PC*)bl)->status.class_;
- case BL_MOB: return ((TBL_MOB*)bl)->vd->class_; //Class used on all code should be the view class of the mob.
- case BL_PET: return ((TBL_PET*)bl)->pet.class_;
- case BL_HOM: return ((TBL_HOM*)bl)->homunculus.class_;
- case BL_MER: return ((TBL_MER*)bl)->mercenary.class_;
- case BL_NPC: return ((TBL_NPC*)bl)->class_;
- case BL_ELEM: return ((TBL_ELEM*)bl)->elemental.class_;
+ case BL_PC: return ((TBL_PC*)bl)->status.class_;
+ case BL_MOB: return ((TBL_MOB*)bl)->vd->class_; //Class used on all code should be the view class of the mob.
+ case BL_PET: return ((TBL_PET*)bl)->pet.class_;
+ case BL_HOM: return ((TBL_HOM*)bl)->homunculus.class_;
+ case BL_MER: return ((TBL_MER*)bl)->mercenary.class_;
+ case BL_NPC: return ((TBL_NPC*)bl)->class_;
+ case BL_ELEM: return ((TBL_ELEM*)bl)->elemental.class_;
}
return 0;
}
@@ -5774,13 +5709,13 @@ int status_get_class(struct block_list *bl) {
int status_get_lv(struct block_list *bl) {
nullpo_ret(bl);
switch (bl->type) {
- case BL_PC: return ((TBL_PC*)bl)->status.base_level;
- case BL_MOB: return ((TBL_MOB*)bl)->level;
- case BL_PET: return ((TBL_PET*)bl)->pet.level;
- case BL_HOM: return ((TBL_HOM*)bl)->homunculus.level;
- case BL_MER: return ((TBL_MER*)bl)->db->lv;
- case BL_ELEM: return ((TBL_ELEM*)bl)->db->lv;
- case BL_NPC: return ((TBL_NPC*)bl)->level;
+ case BL_PC: return ((TBL_PC*)bl)->status.base_level;
+ case BL_MOB: return ((TBL_MOB*)bl)->level;
+ case BL_PET: return ((TBL_PET*)bl)->pet.level;
+ case BL_HOM: return ((TBL_HOM*)bl)->homunculus.level;
+ case BL_MER: return ((TBL_MER*)bl)->db->lv;
+ case BL_ELEM: return ((TBL_ELEM*)bl)->db->lv;
+ case BL_NPC: return ((TBL_NPC*)bl)->level;
}
return 1;
}
@@ -5789,29 +5724,29 @@ struct regen_data *status_get_regen_data(struct block_list *bl)
{
nullpo_retr(NULL, bl);
switch (bl->type) {
- case BL_PC: return &((TBL_PC*)bl)->regen;
- case BL_HOM: return &((TBL_HOM*)bl)->regen;
- case BL_MER: return &((TBL_MER*)bl)->regen;
- case BL_ELEM: return &((TBL_ELEM*)bl)->regen;
- default:
- return NULL;
+ case BL_PC: return &((TBL_PC*)bl)->regen;
+ case BL_HOM: return &((TBL_HOM*)bl)->regen;
+ case BL_MER: return &((TBL_MER*)bl)->regen;
+ case BL_ELEM: return &((TBL_ELEM*)bl)->regen;
+ default:
+ return NULL;
}
}
struct status_data *status_get_status_data(struct block_list *bl)
{
- nullpo_retr(&dummy_status, bl);
+ nullpo_retr(&status->dummy, bl);
switch (bl->type) {
- case BL_PC: return &((TBL_PC*)bl)->battle_status;
- case BL_MOB: return &((TBL_MOB*)bl)->status;
- case BL_PET: return &((TBL_PET*)bl)->status;
- case BL_HOM: return &((TBL_HOM*)bl)->battle_status;
- case BL_MER: return &((TBL_MER*)bl)->battle_status;
- case BL_ELEM: return &((TBL_ELEM*)bl)->battle_status;
- case BL_NPC: return ((mob->db_checkid(((TBL_NPC*)bl)->class_) == 0) ? &((TBL_NPC*)bl)->status : &dummy_status);
- default:
- return &dummy_status;
+ case BL_PC: return &((TBL_PC*)bl)->battle_status;
+ case BL_MOB: return &((TBL_MOB*)bl)->status;
+ case BL_PET: return &((TBL_PET*)bl)->status;
+ case BL_HOM: return &((TBL_HOM*)bl)->battle_status;
+ case BL_MER: return &((TBL_MER*)bl)->battle_status;
+ case BL_ELEM: return &((TBL_ELEM*)bl)->battle_status;
+ case BL_NPC: return ((mob->db_checkid(((TBL_NPC*)bl)->class_) == 0) ? &((TBL_NPC*)bl)->status : &status->dummy);
+ default:
+ return &status->dummy;
}
}
@@ -5819,15 +5754,15 @@ struct status_data *status_get_base_status(struct block_list *bl)
{
nullpo_retr(NULL, bl);
switch (bl->type) {
- case BL_PC: return &((TBL_PC*)bl)->base_status;
- case BL_MOB: return ((TBL_MOB*)bl)->base_status ? ((TBL_MOB*)bl)->base_status : &((TBL_MOB*)bl)->db->status;
- case BL_PET: return &((TBL_PET*)bl)->db->status;
- case BL_HOM: return &((TBL_HOM*)bl)->base_status;
- case BL_MER: return &((TBL_MER*)bl)->base_status;
- case BL_ELEM: return &((TBL_ELEM*)bl)->base_status;
- case BL_NPC: return ((mob->db_checkid(((TBL_NPC*)bl)->class_) == 0) ? &((TBL_NPC*)bl)->status : NULL);
- default:
- return NULL;
+ case BL_PC: return &((TBL_PC*)bl)->base_status;
+ case BL_MOB: return ((TBL_MOB*)bl)->base_status ? ((TBL_MOB*)bl)->base_status : &((TBL_MOB*)bl)->db->status;
+ case BL_PET: return &((TBL_PET*)bl)->db->status;
+ case BL_HOM: return &((TBL_HOM*)bl)->base_status;
+ case BL_MER: return &((TBL_MER*)bl)->base_status;
+ case BL_ELEM: return &((TBL_ELEM*)bl)->base_status;
+ case BL_NPC: return ((mob->db_checkid(((TBL_NPC*)bl)->class_) == 0) ? &((TBL_NPC*)bl)->status : NULL);
+ default:
+ return NULL;
}
}
defType status_get_def(struct block_list *bl) {
@@ -6004,13 +5939,13 @@ struct view_data* status_get_viewdata(struct block_list *bl)
{
nullpo_retr(NULL, bl);
switch (bl->type) {
- case BL_PC: return &((TBL_PC*)bl)->vd;
- case BL_MOB: return ((TBL_MOB*)bl)->vd;
- case BL_PET: return &((TBL_PET*)bl)->vd;
- case BL_NPC: return ((TBL_NPC*)bl)->vd;
- case BL_HOM: return ((TBL_HOM*)bl)->vd;
- case BL_MER: return ((TBL_MER*)bl)->vd;
- case BL_ELEM: return ((TBL_ELEM*)bl)->vd;
+ case BL_PC: return &((TBL_PC*)bl)->vd;
+ case BL_MOB: return ((TBL_MOB*)bl)->vd;
+ case BL_PET: return &((TBL_PET*)bl)->vd;
+ case BL_NPC: return ((TBL_NPC*)bl)->vd;
+ case BL_HOM: return ((TBL_HOM*)bl)->vd;
+ case BL_MER: return ((TBL_MER*)bl)->vd;
+ case BL_ELEM: return ((TBL_ELEM*)bl)->vd;
}
return NULL;
}
@@ -6039,24 +5974,24 @@ void status_set_viewdata(struct block_list *bl, int class_)
if (pcdb_checkid(class_)) {
if (sd->sc.option&OPTION_RIDING) {
switch (class_) { //Adapt class to a Mounted one.
- case JOB_KNIGHT:
- class_ = JOB_KNIGHT2;
- break;
- case JOB_CRUSADER:
- class_ = JOB_CRUSADER2;
- break;
- case JOB_LORD_KNIGHT:
- class_ = JOB_LORD_KNIGHT2;
- break;
- case JOB_PALADIN:
- class_ = JOB_PALADIN2;
- break;
- case JOB_BABY_KNIGHT:
- class_ = JOB_BABY_KNIGHT2;
- break;
- case JOB_BABY_CRUSADER:
- class_ = JOB_BABY_CRUSADER2;
- break;
+ case JOB_KNIGHT:
+ class_ = JOB_KNIGHT2;
+ break;
+ case JOB_CRUSADER:
+ class_ = JOB_CRUSADER2;
+ break;
+ case JOB_LORD_KNIGHT:
+ class_ = JOB_LORD_KNIGHT2;
+ break;
+ case JOB_PALADIN:
+ class_ = JOB_PALADIN2;
+ break;
+ case JOB_BABY_KNIGHT:
+ class_ = JOB_BABY_KNIGHT2;
+ break;
+ case JOB_BABY_CRUSADER:
+ class_ = JOB_BABY_CRUSADER2;
+ break;
}
}
sd->vd.class_ = class_;
@@ -7274,7 +7209,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
}
vd = status->get_viewdata(bl);
- calc_flag = StatusChangeFlagTable[type];
+ calc_flag = status->ChangeFlagTable[type];
if(!(flag&4)) { //&4 - Do not parse val settings when loading SCs
switch(type) {
case SC_DEC_AGI:
@@ -7283,7 +7218,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
break;
case SC_ENDURE:
val2 = 7; // Hit-count [Celest]
- if( !(flag&1) && (bl->type&(BL_PC|BL_MER)) && !map_flag_gvg(bl->m) && !maplist[bl->m].flag.battleground && !val4 ) {
+ if( !(flag&1) && (bl->type&(BL_PC|BL_MER)) && !map_flag_gvg(bl->m) && !map->list[bl->m].flag.battleground && !val4 ) {
struct map_session_data *tsd;
if( sd ) {
int i;
@@ -7578,7 +7513,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
if (sc->data[SC_SOULLINK] && sc->data[SC_SOULLINK]->val2 == SL_ROGUE)
val3 -= 40;
val4 = 10+val1*2; //SP cost.
- if (map_flag_gvg(bl->m) || maplist[bl->m].flag.battleground) val4 *= 5;
+ if (map_flag_gvg(bl->m) || map->list[bl->m].flag.battleground) val4 *= 5;
break;
case SC_CLOAKING:
if (!sd) //Monsters should be able to walk with no penalties. [Skotlex]
@@ -7776,7 +7711,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
// Inherits Status From Source
const enum sc_type types[] = { SC_AUTOGUARD, SC_DEFENDER, SC_REFLECTSHIELD, SC_ENDURE };
enum sc_type type2;
- int i = (map_flag_gvg(bl->m) || maplist[bl->m].flag.battleground)?2:3;
+ int i = (map_flag_gvg(bl->m) || map->list[bl->m].flag.battleground)?2:3;
while( i >= 0 ) {
type2 = types[i];
if( d_sc->data[type2] )
@@ -8729,7 +8664,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
val_flag |= 1;
break;
default:
- if( calc_flag == SCB_NONE && StatusSkillChangeTable[type] == 0 && StatusIconChangeTable[type] == 0 )
+ if( calc_flag == SCB_NONE && status->SkillChangeTable[type] == 0 && status->IconChangeTable[type] == 0 )
{ //Status change with no calc, no icon, and no skill associated...?
ShowError("UnknownStatusChange [%d]\n", type);
return 0;
@@ -8765,7 +8700,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
}
/* [Ind/Hercules] */
- if( sd && StatusDisplayType[type] ) {
+ if( sd && status->DisplayType[type] ) {
int dval1 = 0, dval2 = 0, dval3 = 0;
switch( type ) {
case SC_ALL_RIDING:
@@ -8775,7 +8710,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
dval1 = val1;
break;
}
- status_display_add(sd,type,dval1,dval2,dval3);
+ status->display_add(sd,type,dval1,dval2,dval3);
}
//Those that make you stop attacking/walking....
@@ -9033,8 +8968,8 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
calc_flag&=~SCB_DYE;
}
- if( !(flag&4 && StatusDisplayType[type]) )
- clif->status_change(bl,StatusIconChangeTable[type],1,tick,(val_flag&1)?val1:1,(val_flag&2)?val2:0,(val_flag&4)?val3:0);
+ if( !(flag&4 && status->DisplayType[type]) )
+ clif->status_change(bl,status->IconChangeTable[type],1,tick,(val_flag&1)?val1:1,(val_flag&2)?val2:0,(val_flag&4)?val3:0);
/**
* used as temporary storage for scs with interval ticks, so that the actual duration is sent to the client first.
@@ -9048,7 +8983,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
timer->delete(sce->timer, status->change_timer);
} else {// new sc
++(sc->count);
- sce = sc->data[type] = ers_alloc(sc_data_ers, struct status_change_entry);
+ sce = sc->data[type] = ers_alloc(status->data_ers, struct status_change_entry);
}
sce->val1 = val1;
sce->val2 = val2;
@@ -9201,7 +9136,7 @@ int status_change_clear(struct block_list* bl, int type) {
(sc->count)--;
if (sc->data[i]->timer != INVALID_TIMER)
timer->delete(sc->data[i]->timer, status->change_timer);
- ers_free(sc_data_ers, sc->data[i]);
+ ers_free(status->data_ers, sc->data[i]);
sc->data[i] = NULL;
}
}
@@ -9275,12 +9210,12 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
sc->data[type] = NULL;
- if( sd && StatusDisplayType[type] ) {
- status_display_remove(sd,type);
+ if( sd && status->DisplayType[type] ) {
+ status->display_remove(sd,type);
}
vd = status->get_viewdata(bl);
- calc_flag = StatusChangeFlagTable[type];
+ calc_flag = status->ChangeFlagTable[type];
switch(type) {
case SC_GRANITIC_ARMOR:
{
@@ -9883,7 +9818,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
}
//On Aegis, when turning off a status change, first goes the sc packet, then the option packet.
- clif->sc_end(bl,bl->id,AREA,StatusIconChangeTable[type]);
+ clif->sc_end(bl,bl->id,AREA,status->IconChangeTable[type]);
if( opt_flag&8 ) //bugreport:681
clif->changeoption2(bl);
@@ -9907,7 +9842,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
if(opt_flag&2 && sd && map->getcell(bl->m,bl->x,bl->y,CELL_CHKNPC))
npc->touch_areanpc(sd,bl->m,bl->x,bl->y); //Trigger on-touch event.
- ers_free(sc_data_ers, sce);
+ ers_free(status->data_ers, sce);
return 1;
}
@@ -10056,7 +9991,7 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data) {
sc->opt1 = OPT1_STONE;
clif->changeoption(bl);
sc_timer_next(1000+tick, status->change_timer, bl->id, data );
- status_calc_bl(bl, StatusChangeFlagTable[type]);
+ status_calc_bl(bl, status->ChangeFlagTable[type]);
return 0;
}
if(--(sce->val3) > 0) {
@@ -10862,7 +10797,7 @@ int status_get_weapon_atk(struct block_list *bl, struct weapon_atk *watk, int fl
if( bl->type == BL_PC && ((TBL_PC*)bl)->right_weapon.overrefine > 0 && !(flag&2) )
max += rnd()%((TBL_PC*)bl)->right_weapon.overrefine + 1;
- max = status_calc_watk(bl, sc, max, false);
+ max = status->calc_watk(bl, sc, max, false);
return max;
}
@@ -10908,7 +10843,7 @@ int status_get_matk(struct block_list *bl, int flag) {
if( sd && sd->bonus.ematk > 0 && flag != 3 )
st->matk_min += sd->bonus.ematk;
if( flag != 3 )
- st->matk_min = status_calc_ematk(bl, sc, st->matk_min);
+ st->matk_min = status->calc_ematk(bl, sc, st->matk_min);
st->matk_max = st->matk_min;
@@ -10946,8 +10881,8 @@ int status_get_matk(struct block_list *bl, int flag) {
if( flag ) // get unmodified from sc matk
GETRANDMATK(st);
- st->matk_min = status_calc_matk(bl, sc, st->matk_min, true);
- st->matk_max = status_calc_matk(bl, sc, st->matk_max, true);
+ st->matk_min = status->calc_matk(bl, sc, st->matk_min, true);
+ st->matk_max = status->calc_matk(bl, sc, st->matk_max, true);
return 0;
}
@@ -11103,8 +11038,7 @@ int status_change_spread( struct block_list *src, struct block_list *bl ) {
}
//Natural regen related stuff.
-static unsigned int natural_heal_prev_tick,natural_heal_diff_tick;
-static int status_natural_heal(struct block_list* bl, va_list args) {
+int status_natural_heal(struct block_list* bl, va_list args) {
struct regen_data *regen;
struct status_data *st;
struct status_change *sc;
@@ -11137,9 +11071,9 @@ static int status_natural_heal(struct block_list* bl, va_list args) {
if (sd) {
if (sd->hp_loss.value || sd->sp_loss.value)
- pc->bleeding(sd, natural_heal_diff_tick);
+ pc->bleeding(sd, status->natural_heal_diff_tick);
if (sd->hp_regen.value || sd->sp_regen.value)
- pc->regen(sd, natural_heal_diff_tick);
+ pc->regen(sd, status->natural_heal_diff_tick);
}
if (flag&(RGN_SHP|RGN_SSP)
@@ -11151,7 +11085,7 @@ static int status_natural_heal(struct block_list* bl, va_list args) {
sregen = regen->ssregen;
if(flag&(RGN_SHP)) {
//Sitting HP regen
- val = natural_heal_diff_tick * sregen->rate.hp;
+ val = status->natural_heal_diff_tick * sregen->rate.hp;
if (regen->state.overweight)
val>>=1; //Half as fast when overweight.
sregen->tick.hp += val;
@@ -11166,7 +11100,7 @@ static int status_natural_heal(struct block_list* bl, va_list args) {
}
if(flag&(RGN_SSP)) {
//Sitting SP regen
- val = natural_heal_diff_tick * sregen->rate.sp;
+ val = status->natural_heal_diff_tick * sregen->rate.sp;
if (regen->state.overweight)
val>>=1; //Half as fast when overweight.
sregen->tick.sp += val;
@@ -11205,7 +11139,7 @@ static int status_natural_heal(struct block_list* bl, va_list args) {
//Natural Hp regen
if (flag&RGN_HP) {
- rate = natural_heal_diff_tick*(regen->rate.hp+bonus);
+ rate = status->natural_heal_diff_tick*(regen->rate.hp+bonus);
if (ud && ud->walktimer != INVALID_TIMER)
rate/=2;
// Homun HP regen fix (they should regen as if they were sitting (twice as fast)
@@ -11226,7 +11160,7 @@ static int status_natural_heal(struct block_list* bl, va_list args) {
//Natural SP regen
if(flag&RGN_SP) {
- rate = natural_heal_diff_tick*(regen->rate.sp+bonus);
+ rate = status->natural_heal_diff_tick*(regen->rate.sp+bonus);
// Homun SP regen fix (they should regen as if they were sitting (twice as fast)
if(bl->type==BL_HOM) rate *=2;
@@ -11251,7 +11185,7 @@ static int status_natural_heal(struct block_list* bl, va_list args) {
if(flag&RGN_SHP) {
//Skill HP regen
- sregen->tick.hp += natural_heal_diff_tick * sregen->rate.hp;
+ sregen->tick.hp += status->natural_heal_diff_tick * sregen->rate.hp;
while(sregen->tick.hp >= (unsigned int)battle_config.natural_heal_skill_interval) {
sregen->tick.hp -= battle_config.natural_heal_skill_interval;
@@ -11261,7 +11195,7 @@ static int status_natural_heal(struct block_list* bl, va_list args) {
}
if(flag&RGN_SSP) {
//Skill SP regen
- sregen->tick.sp += natural_heal_diff_tick * sregen->rate.sp;
+ sregen->tick.sp += status->natural_heal_diff_tick * sregen->rate.sp;
while(sregen->tick.sp >= (unsigned int)battle_config.natural_heal_skill_interval) {
val = sregen->sp;
if (sd && sd->state.doridori) {
@@ -11288,10 +11222,10 @@ static int status_natural_heal(struct block_list* bl, va_list args) {
}
//Natural heal main timer.
-static int status_natural_heal_timer(int tid, unsigned int tick, int id, intptr_t data) {
- natural_heal_diff_tick = DIFF_TICK(tick,natural_heal_prev_tick);
- map->map_foreachregen(status_natural_heal);
- natural_heal_prev_tick = tick;
+int status_natural_heal_timer(int tid, unsigned int tick, int id, intptr_t data) {
+ status->natural_heal_diff_tick = DIFF_TICK(tick,status->natural_heal_prev_tick);
+ map->foreachregen(status->natural_heal);
+ status->natural_heal_prev_tick = tick;
return 0;
}
@@ -11306,7 +11240,7 @@ int status_get_refine_chance(enum refine_type wlv, int refine) {
if ( refine < 0 || refine >= MAX_REFINE)
return 0;
- return refine_info[wlv].chance[refine];
+ return status->refine_info[wlv].chance[refine];
}
int status_get_sc_type(sc_type type) {
@@ -11314,7 +11248,7 @@ int status_get_sc_type(sc_type type) {
if( type <= SC_NONE || type >= SC_MAX )
return 0;
- return sc_conf[type];
+ return status->sc_conf[type];
}
/*------------------------------------------
@@ -11324,7 +11258,7 @@ int status_get_sc_type(sc_type type) {
* size_fix.txt - size adjustment table for weapons
* refine_db.txt - refining data table
*------------------------------------------*/
-static bool status_readdb_job1(char* fields[], int columns, int current)
+bool status_readdb_job1(char* fields[], int columns, int current)
{// Job-specific values (weight, HP, SP, ASPD)
int idx, class_;
unsigned int i;
@@ -11338,22 +11272,22 @@ static bool status_readdb_job1(char* fields[], int columns, int current)
}
idx = pc->class2idx(class_);
- max_weight_base[idx] = atoi(fields[1]);
- hp_coefficient[idx] = atoi(fields[2]);
- hp_coefficient2[idx] = atoi(fields[3]);
- sp_coefficient[idx] = atoi(fields[4]);
+ status->max_weight_base[idx] = atoi(fields[1]);
+ status->hp_coefficient[idx] = atoi(fields[2]);
+ status->hp_coefficient2[idx] = atoi(fields[3]);
+ status->sp_coefficient[idx] = atoi(fields[4]);
#ifdef RENEWAL_ASPD
for(i = 0; i <= MAX_WEAPON_TYPE; i++)
#else
for(i = 0; i < MAX_WEAPON_TYPE; i++)
#endif
{
- aspd_base[idx][i] = atoi(fields[i+5]);
+ status->aspd_base[idx][i] = atoi(fields[i+5]);
}
return true;
}
-static bool status_readdb_job2(char* fields[], int columns, int current)
+bool status_readdb_job2(char* fields[], int columns, int current)
{
int idx, class_, i;
@@ -11368,23 +11302,23 @@ static bool status_readdb_job2(char* fields[], int columns, int current)
for(i = 1; i < columns; i++)
{
- job_bonus[idx][i-1] = atoi(fields[i]);
+ status->job_bonus[idx][i-1] = atoi(fields[i]);
}
return true;
}
-static bool status_readdb_sizefix(char* fields[], int columns, int current)
+bool status_readdb_sizefix(char* fields[], int columns, int current)
{
unsigned int i;
for(i = 0; i < MAX_WEAPON_TYPE; i++)
{
- atkmods[current][i] = atoi(fields[i]);
+ status->atkmods[current][i] = atoi(fields[i]);
}
return true;
}
-static bool status_readdb_refine(char* fields[], int columns, int current)
+bool status_readdb_refine(char* fields[], int columns, int current)
{
int i, bonus_per_level, random_bonus, random_bonus_start_level;
@@ -11406,19 +11340,19 @@ static bool status_readdb_refine(char* fields[], int columns, int current)
*delim = '\0';
- refine_info[current].chance[i] = atoi(fields[4+i]);
+ status->refine_info[current].chance[i] = atoi(fields[4+i]);
if (i >= random_bonus_start_level - 1)
- refine_info[current].randombonus_max[i] = random_bonus * (i - random_bonus_start_level + 2);
+ status->refine_info[current].randombonus_max[i] = random_bonus * (i - random_bonus_start_level + 2);
- refine_info[current].bonus[i] = bonus_per_level + atoi(delim+1);
+ status->refine_info[current].bonus[i] = bonus_per_level + atoi(delim+1);
if (i > 0)
- refine_info[current].bonus[i] += refine_info[current].bonus[i-1];
+ status->refine_info[current].bonus[i] += status->refine_info[current].bonus[i-1];
}
return true;
}
-static bool status_readdb_scconfig(char* fields[], int columns, int current) {
+bool status_readdb_scconfig(char* fields[], int columns, int current) {
int val = 0;
char* type = fields[0];
@@ -11427,46 +11361,44 @@ static bool status_readdb_scconfig(char* fields[], int columns, int current) {
return false;
}
- sc_conf[val] = (int)strtol(fields[1], NULL, 0);
+ status->sc_conf[val] = (int)strtol(fields[1], NULL, 0);
return true;
}
-/*
-* Read status db
-* job1.txt
-* job2.txt
-* size_fixe.txt
-* refine_db.txt
-*/
+/**
+ * Read status db
+ * job1.txt
+ * job2.txt
+ * size_fixe.txt
+ * refine_db.txt
+ **/
int status_readdb(void)
{
int i, j;
// initialize databases to default
//
-
- // reset job_db1.txt data
- memset(max_weight_base, 0, sizeof(max_weight_base));
- memset(hp_coefficient, 0, sizeof(hp_coefficient));
- memset(hp_coefficient2, 0, sizeof(hp_coefficient2));
- memset(sp_coefficient, 0, sizeof(sp_coefficient));
- memset(aspd_base, 0, sizeof(aspd_base));
- // reset job_db2.txt data
- memset(job_bonus,0,sizeof(job_bonus)); // Job-specific stats bonus
-
+ if( runflag == MAPSERVER_ST_RUNNING ) {//not necessary during boot
+ // reset job_db1.txt data
+ memset(status->max_weight_base, 0, sizeof(status->max_weight_base));
+ memset(status->hp_coefficient, 0, sizeof(status->hp_coefficient));
+ memset(status->hp_coefficient2, 0, sizeof(status->hp_coefficient2));
+ memset(status->sp_coefficient, 0, sizeof(status->sp_coefficient));
+ memset(status->aspd_base, 0, sizeof(status->aspd_base));
+ // reset job_db2.txt data
+ memset(status->job_bonus,0,sizeof(status->job_bonus)); // Job-specific stats bonus
+ }
// size_fix.txt
- for(i=0;i<ARRAYLENGTH(atkmods);i++)
- for(j=0;j<MAX_WEAPON_TYPE;j++)
- atkmods[i][j]=100;
+ for(i = 0; i < ARRAYLENGTH(status->atkmods); i++)
+ for(j = 0; j < MAX_WEAPON_TYPE; j++)
+ status->atkmods[i][j] = 100;
// refine_db.txt
- for(i=0;i<ARRAYLENGTH(refine_info);i++)
- {
- for(j=0;j<MAX_REFINE; j++)
- {
- refine_info[i].chance[j] = 100;
- refine_info[i].bonus[j] = 0;
- refine_info[i].randombonus_max[j] = 0;
+ for(i=0;i<ARRAYLENGTH(status->refine_info);i++) {
+ for(j=0;j<MAX_REFINE; j++) {
+ status->refine_info[i].chance[j] = 100;
+ status->refine_info[i].bonus[j] = 0;
+ status->refine_info[i].randombonus_max[j] = 0;
}
}
@@ -11475,14 +11407,14 @@ int status_readdb(void)
#ifdef RENEWAL_ASPD
- sv->readdb(map->db_path, "re/job_db1.txt", ',', 6+MAX_WEAPON_TYPE, 6+MAX_WEAPON_TYPE, -1, &status_readdb_job1);
+ sv->readdb(map->db_path, "re/job_db1.txt", ',', 6+MAX_WEAPON_TYPE, 6+MAX_WEAPON_TYPE, -1, status->readdb_job1);
#else
- sv->readdb(map->db_path, "pre-re/job_db1.txt", ',', 5+MAX_WEAPON_TYPE, 5+MAX_WEAPON_TYPE, -1, &status_readdb_job1);
+ sv->readdb(map->db_path, "pre-re/job_db1.txt", ',', 5+MAX_WEAPON_TYPE, 5+MAX_WEAPON_TYPE, -1, status->readdb_job1);
#endif
- sv->readdb(map->db_path, "job_db2.txt", ',', 1, 1+MAX_LEVEL, -1, &status_readdb_job2);
- sv->readdb(map->db_path, "size_fix.txt", ',', MAX_WEAPON_TYPE, MAX_WEAPON_TYPE, ARRAYLENGTH(atkmods), &status_readdb_sizefix);
- sv->readdb(map->db_path, DBPATH"refine_db.txt", ',', 4+MAX_REFINE, 4+MAX_REFINE, ARRAYLENGTH(refine_info), &status_readdb_refine);
- sv->readdb(map->db_path, "sc_config.txt", ',', 2, 2, SC_MAX, &status_readdb_scconfig);
+ sv->readdb(map->db_path, "job_db2.txt", ',', 1, 1+MAX_LEVEL, -1, status->readdb_job2);
+ sv->readdb(map->db_path, "size_fix.txt", ',', MAX_WEAPON_TYPE, MAX_WEAPON_TYPE, ARRAYLENGTH(status->atkmods), status->readdb_sizefix);
+ sv->readdb(map->db_path, DBPATH"refine_db.txt", ',', 4+MAX_REFINE, 4+MAX_REFINE, ARRAYLENGTH(status->refine_info), status->readdb_refine);
+ sv->readdb(map->db_path, "sc_config.txt", ',', 2, 2, SC_MAX, status->readdb_scconfig);
return 0;
}
@@ -11492,19 +11424,19 @@ int status_readdb(void)
*------------------------------------------*/
int do_init_status(void) {
timer->add_func_list(status->change_timer,"status_change_timer");
- timer->add_func_list(kaahi_heal_timer,"kaahi_heal_timer");
- timer->add_func_list(status_natural_heal_timer,"status_natural_heal_timer");
- initChangeTables();
- initDummyData();
+ timer->add_func_list(status->kaahi_heal_timer,"status_kaahi_heal_timer");
+ timer->add_func_list(status->natural_heal_timer,"status_natural_heal_timer");
+ status->initChangeTables();
+ status->initDummyData();
status->readdb();
- status_calc_sigma();
- natural_heal_prev_tick = timer->gettick();
- sc_data_ers = ers_new(sizeof(struct status_change_entry),"status.c::sc_data_ers",ERS_OPT_NONE);
- timer->add_interval(natural_heal_prev_tick + NATURAL_HEAL_INTERVAL, status_natural_heal_timer, 0, 0, NATURAL_HEAL_INTERVAL);
+ status->calc_sigma();
+ status->natural_heal_prev_tick = timer->gettick();
+ status->data_ers = ers_new(sizeof(struct status_change_entry),"status.c::data_ers",ERS_OPT_NONE);
+ timer->add_interval(status->natural_heal_prev_tick + NATURAL_HEAL_INTERVAL, status->natural_heal_timer, 0, 0, NATURAL_HEAL_INTERVAL);
return 0;
}
void do_final_status(void) {
- ers_destroy(sc_data_ers);
+ ers_destroy(status->data_ers);
}
/*=====================================
@@ -11516,14 +11448,34 @@ void status_defaults(void) {
status = &status_s;
/* vars */
-
- status->current_equip_item_index = 0; //Contains inventory index of an equipped item. To pass it into the EQUP_SCRIPT [Lupus]
- status->current_equip_card_id = 0; //To prevent card-stacking (from jA) [Skotlex]
//we need it for new cards 15 Feb 2005, to check if the combo cards are insrerted into the CURRENT weapon only
//to avoid cards exploits
+ status->current_equip_item_index = 0; //Contains inventory index of an equipped item. To pass it into the EQUP_SCRIPT [Lupus]
+ status->current_equip_card_id = 0; //To prevent card-stacking (from jA) [Skotlex]
+ memset(status->max_weight_base,0,sizeof(status->max_weight_base)
+ + sizeof(status->hp_coefficient)
+ + sizeof(status->hp_coefficient2)
+ + sizeof(status->hp_sigma_val)
+ + sizeof(status->sp_coefficient)
+ + sizeof(status->aspd_base)
+ + sizeof(status->Skill2SCTable)
+ + sizeof(status->IconChangeTable)
+ + sizeof(status->ChangeFlagTable)
+ + sizeof(status->SkillChangeTable)
+ + sizeof(status->RelevantBLTypes)
+ + sizeof(status->DisplayType)
+ + sizeof(status->refine_info)
+ + sizeof(status->atkmods)
+ + sizeof(status->job_bonus)
+ + sizeof(status->sc_conf)
+ );
+
+ status->data_ers = NULL;
+ memset(&status->dummy, 0, sizeof(status->dummy));
+ status->natural_heal_prev_tick = 0;
+ status->natural_heal_diff_tick = 0;
/* funcs */
-
status->get_refine_chance = status_get_refine_chance;
// for looking up associated data
status->skill2sc = status_skill2sc;
@@ -11609,4 +11561,50 @@ void status_defaults(void) {
status->readdb = status_readdb;
status->init = do_init_status;
status->final = do_final_status;
+
+ status->initChangeTables = initChangeTables;
+ status->initDummyData = initDummyData;
+ status->base_amotion_pc = status_base_amotion_pc;
+ status->base_atk = status_base_atk;
+ status->calc_sigma = status_calc_sigma;
+ status->base_pc_maxhp = status_base_pc_maxhp;
+ status->base_pc_maxsp = status_base_pc_maxsp;
+ status->calc_npc_ = status_calc_npc_;
+ status->calc_str = status_calc_str;
+ status->calc_agi = status_calc_agi;
+ status->calc_vit = status_calc_vit;
+ status->calc_int = status_calc_int;
+ status->calc_dex = status_calc_dex;
+ status->calc_luk = status_calc_luk;
+ status->calc_watk = status_calc_watk;
+ status->calc_matk = status_calc_matk;
+ status->calc_hit = status_calc_hit;
+ status->calc_critical = status_calc_critical;
+ status->calc_flee = status_calc_flee;
+ status->calc_flee2 = status_calc_flee2;
+ status->calc_speed = status_calc_speed;
+ status->calc_aspd_rate = status_calc_aspd_rate;
+ status->calc_dmotion = status_calc_dmotion;
+#ifdef RENEWAL_ASPD
+ status->calc_aspd = status_calc_aspd;
+#endif
+ status->calc_fix_aspd = status_calc_fix_aspd;
+ status->calc_maxhp = status_calc_maxhp;
+ status->calc_maxsp = status_calc_maxsp;
+ status->calc_element = status_calc_element;
+ status->calc_element_lv = status_calc_element_lv;
+ status->calc_mode = status_calc_mode;
+#ifdef RENEWAL
+ status->calc_ematk = status_calc_ematk;
+#endif
+ status->calc_bl_main = status_calc_bl_main;
+ status->display_add = status_display_add;
+ status->display_remove = status_display_remove;
+ status->natural_heal = status_natural_heal;
+ status->natural_heal_timer = status_natural_heal_timer;
+ status->readdb_job1 = status_readdb_job1;
+ status->readdb_job2 = status_readdb_job2;
+ status->readdb_sizefix = status_readdb_sizefix;
+ status->readdb_refine = status_readdb_refine;
+ status->readdb_scconfig = status_readdb_scconfig;
}
diff --git a/src/map/status.h b/src/map/status.h
index 16a9be081..d1e78b0b7 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -1,8 +1,12 @@
-// Copyright (c) Athena Dev Teams - Licensed under GNU GPL
-// For more information, see LICENCE in the main folder
+// Copyright (c) Hercules Dev Team, licensed under GNU GPL.
+// See the LICENSE file
+// Portions Copyright (c) Athena Dev Teams
+
#ifndef _STATUS_H_
#define _STATUS_H_
+#include "../common/mmo.h"
+
struct block_list;
struct mob_data;
struct pet_data;
@@ -1580,6 +1584,14 @@ enum scb_flag
SCB_ALL = 0x3FFFFFFF
};
+//Regen related flags.
+enum e_regen {
+ RGN_HP = 0x01,
+ RGN_SP = 0x02,
+ RGN_SHP = 0x04,
+ RGN_SSP = 0x08,
+};
+
//Define to determine who gets HP/SP consumed on doing skills/etc. [Skotlex]
#define BL_CONSUME (BL_PC|BL_HOM|BL_MER|BL_ELEM)
//Define to determine who has regen
@@ -1598,15 +1610,7 @@ typedef struct weapon_atk {
unsigned short matk;
unsigned char wlv;
#endif
-}weapon_atk;
-
-sc_type SkillStatusChangeTable[MAX_SKILL]; // skill -> status
-int StatusIconChangeTable[SC_MAX]; // status -> "icon" (icon is a bit of a misnomer, since there exist values with no icon associated)
-unsigned int StatusChangeFlagTable[SC_MAX]; // status -> flags
-int StatusSkillChangeTable[SC_MAX]; // status -> skill
-int StatusRelevantBLTypes[SI_MAX]; // "icon" -> enum bl_type (for clif->status_change to identify for which bl types to send packets)
-bool StatusDisplayType[SC_MAX];
-
+} weapon_atk;
//For holding basic status (which can be modified by status changes)
struct status_data {
@@ -1780,6 +1784,13 @@ struct status_change {
#define status_calc_elemental(ed, first) status->calc_bl_(&(ed)->bl, SCB_ALL, first)
#define status_calc_npc(nd, first) status->calc_bl_(&(nd)->bl, SCB_ALL, first)
+// bonus values and upgrade chances for refining equipment
+struct s_refine_info {
+ int chance[MAX_REFINE]; // success chance
+ int bonus[MAX_REFINE]; // cumulative fixed bonus damage
+ int randombonus_max[MAX_REFINE]; // cumulative maximum random bonus damage
+};
+
/*=====================================
* Interface : status.h
* Generated by HerculesInterfaceMaker
@@ -1788,12 +1799,38 @@ struct status_change {
struct status_interface {
/* vars */
-
int current_equip_item_index;
int current_equip_card_id;
-
+ /* */
+ int max_weight_base[CLASS_COUNT];
+ int hp_coefficient[CLASS_COUNT];
+ int hp_coefficient2[CLASS_COUNT];
+ int hp_sigma_val[CLASS_COUNT][MAX_LEVEL+1];
+ int sp_coefficient[CLASS_COUNT];
+#ifdef RENEWAL_ASPD
+ int aspd_base[CLASS_COUNT][MAX_WEAPON_TYPE+1];
+#else
+ int aspd_base[CLASS_COUNT][MAX_WEAPON_TYPE]; //[blackhole89]
+#endif
+ sc_type Skill2SCTable[MAX_SKILL]; // skill -> status
+ int IconChangeTable[SC_MAX]; // status -> "icon" (icon is a bit of a misnomer, since there exist values with no icon associated)
+ unsigned int ChangeFlagTable[SC_MAX]; // status -> flags
+ int SkillChangeTable[SC_MAX]; // status -> skill
+ int RelevantBLTypes[SI_MAX]; // "icon" -> enum bl_type (for clif->status_change to identify for which bl types to send packets)
+ bool DisplayType[SC_MAX];
+ /* */
+ struct s_refine_info refine_info[REFINE_TYPE_MAX];
+ /* */
+ int atkmods[3][MAX_WEAPON_TYPE];//ATK weapon modification for size (size_fix.txt)
+ char job_bonus[CLASS_COUNT][MAX_LEVEL];
+ sc_conf_type sc_conf[SC_MAX];
+ struct eri *data_ers; //For sc_data entries
+ struct status_data dummy;
+ unsigned int natural_heal_prev_tick,natural_heal_diff_tick;
+ /* */
+ int (*init) (void);
+ void (*final) (void);
/* funcs */
-
int (*get_refine_chance) (enum refine_type wlv, int refine);
// for looking up associated data
sc_type (*skill2sc) (int skill_id);
@@ -1801,7 +1838,6 @@ struct status_interface {
unsigned int (*sc2scb_flag) (sc_type sc);
int (*type2relevant_bl_types) (int type);
int (*get_sc_type) (sc_type idx);
-
int (*damage) (struct block_list *src,struct block_list *target,int64 hp,int64 sp, int walkdelay, int flag);
//Define for standard HP/SP skill-related cost triggers (mobs require no HP/SP to use skills)
int (*charge) (struct block_list* bl, int64 hp, int64 sp);
@@ -1811,7 +1847,6 @@ struct status_interface {
int (*set_sp) (struct block_list *bl, unsigned int sp, int flag);
int (*heal) (struct block_list *bl,int64 hp,int64 sp, int flag);
int (*revive) (struct block_list *bl, unsigned char per_hp, unsigned char per_sp);
-
struct regen_data * (*get_regen_data) (struct block_list *bl);
struct status_data * (*get_status_data) (struct block_list *bl);
struct status_data * (*get_base_status) (struct block_list *bl);
@@ -1826,17 +1861,13 @@ struct status_interface {
int (*get_emblem_id) (struct block_list *bl);
int (*get_mexp) (struct block_list *bl);
int (*get_race2) (struct block_list *bl);
-
struct view_data * (*get_viewdata) (struct block_list *bl);
void (*set_viewdata) (struct block_list *bl, int class_);
void (*change_init) (struct block_list *bl);
struct status_change * (*get_sc) (struct block_list *bl);
-
int (*isdead) (struct block_list *bl);
int (*isimmune) (struct block_list *bl);
-
int (*get_sc_def) (struct block_list *bl, enum sc_type type, int rate, int tick, int flag);
-
int (*change_start) (struct block_list* bl,enum sc_type type,int rate,int val1,int val2,int val3,int val4,int tick,int flag);
int (*change_end_) (struct block_list* bl, enum sc_type type, int tid, const char* file, int line);
int (*kaahi_heal_timer) (int tid, unsigned int tick, int id, intptr_t data);
@@ -1844,7 +1875,6 @@ struct status_interface {
int (*change_timer_sub) (struct block_list* bl, va_list ap);
int (*change_clear) (struct block_list* bl, int type);
int (*change_clear_buffs) (struct block_list* bl, int type);
-
void (*calc_bl_) (struct block_list *bl, enum scb_flag flag, bool first);
int (*calc_mob_) (struct mob_data* md, bool first);
int (*calc_pet_) (struct pet_data* pd, bool first);
@@ -1852,35 +1882,72 @@ struct status_interface {
int (*calc_homunculus_) (struct homun_data *hd, bool first);
int (*calc_mercenary_) (struct mercenary_data *md, bool first);
int (*calc_elemental_) (struct elemental_data *ed, bool first);
-
void (*calc_misc) (struct block_list *bl, struct status_data *status, int level);
void (*calc_regen) (struct block_list *bl, struct status_data *st, struct regen_data *regen);
void (*calc_regen_rate) (struct block_list *bl, struct regen_data *regen, struct status_change *sc);
-
int (*check_skilluse) (struct block_list *src, struct block_list *target, uint16 skill_id, int flag); // [Skotlex]
int (*check_visibility) (struct block_list *src, struct block_list *target); //[Skotlex]
-
int (*change_spread) (struct block_list *src, struct block_list *bl);
-
- defType (*calc_def) (struct block_list *bl, struct status_change *sc, int, bool);
- short (*calc_def2) (struct block_list *, struct status_change *, int, bool);
- defType (*calc_mdef) (struct block_list *bl, struct status_change *sc, int, bool);
- short (*calc_mdef2) (struct block_list *, struct status_change *, int, bool);
- unsigned short (*calc_batk) (struct block_list *, struct status_change *, int, bool);
-
+ defType (*calc_def) (struct block_list *bl, struct status_change *sc, int def, bool viewable);
+ short (*calc_def2) (struct block_list *bl, struct status_change *sc, int def2, bool viewable);
+ defType (*calc_mdef) (struct block_list *bl, struct status_change *sc, int mdef, bool viewable);
+ short (*calc_mdef2) (struct block_list *bl, struct status_change *sc, int mdef2, bool viewable);
+ unsigned short (*calc_batk)(struct block_list *bl, struct status_change *sc, int batk, bool viewable);
#ifdef RENEWAL
unsigned short (*base_matk) (const struct status_data *st, int level);
int (*get_weapon_atk) (struct block_list *src, struct weapon_atk *watk, int flag);
#endif
int (*get_total_mdef) (struct block_list *src);
int (*get_total_def) (struct block_list *src);
-
int (*get_matk) (struct block_list *src, int flag);
-
int (*readdb) (void);
- int (*init) (void);
- void (*final) (void);
-} status_s;
+
+ void (*initChangeTables) (void);
+ void (*initDummyData) (void);
+ int (*base_amotion_pc) (struct map_session_data *sd, struct status_data *st);
+ unsigned short (*base_atk) (const struct block_list *bl, const struct status_data *st);
+ void (*calc_sigma) (void);
+ unsigned int (*base_pc_maxhp) (struct map_session_data *sd, struct status_data *st);
+ unsigned int (*base_pc_maxsp) (struct map_session_data *sd, struct status_data *st);
+ int (*calc_npc_) (struct npc_data *nd, bool first);
+ unsigned short (*calc_str) (struct block_list *bl, struct status_change *sc, int str);
+ unsigned short (*calc_agi) (struct block_list *bl, struct status_change *sc, int agi);
+ unsigned short (*calc_vit) (struct block_list *bl, struct status_change *sc, int vit);
+ unsigned short (*calc_int) (struct block_list *bl, struct status_change *sc, int int_);
+ unsigned short (*calc_dex) (struct block_list *bl, struct status_change *sc, int dex);
+ unsigned short (*calc_luk) (struct block_list *bl, struct status_change *sc, int luk);
+ unsigned short (*calc_watk) (struct block_list *bl, struct status_change *sc, int watk, bool viewable);
+ unsigned short (*calc_matk) (struct block_list *bl, struct status_change *sc, int matk, bool viewable);
+ signed short (*calc_hit) (struct block_list *bl, struct status_change *sc, int hit, bool viewable);
+ signed short (*calc_critical) (struct block_list *bl, struct status_change *sc, int critical, bool viewable);
+ signed short (*calc_flee) (struct block_list *bl, struct status_change *sc, int flee, bool viewable);
+ signed short (*calc_flee2) (struct block_list *bl, struct status_change *sc, int flee2, bool viewable);
+ unsigned short (*calc_speed) (struct block_list *bl, struct status_change *sc, int speed);
+ short (*calc_aspd_rate) (struct block_list *bl, struct status_change *sc, int aspd_rate);
+ unsigned short (*calc_dmotion) (struct block_list *bl, struct status_change *sc, int dmotion);
+#ifdef RENEWAL_ASPD
+ short (*calc_aspd) (struct block_list *bl, struct status_change *sc, short flag);
+#endif
+ short (*calc_fix_aspd) (struct block_list *bl, struct status_change *sc, int aspd);
+ unsigned int (*calc_maxhp) (struct block_list *bl, struct status_change *sc, uint64 maxhp);
+ unsigned int (*calc_maxsp) (struct block_list *bl, struct status_change *sc, unsigned int maxsp);
+ unsigned char (*calc_element) (struct block_list *bl, struct status_change *sc, int element);
+ unsigned char (*calc_element_lv) (struct block_list *bl, struct status_change *sc, int lv);
+ unsigned short (*calc_mode) (struct block_list *bl, struct status_change *sc, int mode);
+#ifdef RENEWAL
+ unsigned short (*calc_ematk) (struct block_list *bl, struct status_change *sc, int matk);
+#endif
+ void (*calc_bl_main) (struct block_list *bl, int flag);
+ void (*display_add) (struct map_session_data *sd, enum sc_type type, int dval1, int dval2, int dval3);
+ void (*display_remove) (struct map_session_data *sd, enum sc_type type);
+ int (*natural_heal) (struct block_list *bl, va_list args);
+ int (*natural_heal_timer) (int tid, unsigned int tick, int id, intptr_t data);
+ bool (*readdb_job1) (char *fields[], int columns, int current);
+ bool (*readdb_job2) (char *fields[], int columns, int current);
+ bool (*readdb_sizefix) (char *fields[], int columns, int current);
+ bool (*readdb_refine) (char *fields[], int columns, int current);
+ bool (*readdb_scconfig) (char *fields[], int columns, int current);
+};
struct status_interface *status;
diff --git a/src/map/trade.c b/src/map/trade.c
index b3082515a..8dd30371b 100644
--- a/src/map/trade.c
+++ b/src/map/trade.c
@@ -31,7 +31,7 @@ void trade_traderequest(struct map_session_data *sd, struct map_session_data *ta
{
nullpo_retv(sd);
- if (maplist[sd->bl.m].flag.notrade) {
+ if (map->list[sd->bl.m].flag.notrade) {
clif->message (sd->fd, msg_txt(272));
return; //Can't trade in notrade mapflag maps.
}
diff --git a/src/map/unit.c b/src/map/unit.c
index 85d00515c..a7aca10b9 100644
--- a/src/map/unit.c
+++ b/src/map/unit.c
@@ -792,13 +792,13 @@ int unit_warp(struct block_list *bl,short m,short x,short y,clr_type type)
switch (bl->type) {
case BL_MOB:
- if (maplist[bl->m].flag.monster_noteleport && ((TBL_MOB*)bl)->master_id == 0)
+ if (map->list[bl->m].flag.monster_noteleport && ((TBL_MOB*)bl)->master_id == 0)
return 1;
- if (m != bl->m && maplist[m].flag.nobranch && battle_config.mob_warp&4 && !(((TBL_MOB *)bl)->master_id))
+ if (m != bl->m && map->list[m].flag.nobranch && battle_config.mob_warp&4 && !(((TBL_MOB *)bl)->master_id))
return 1;
break;
case BL_PC:
- if (maplist[bl->m].flag.noteleport)
+ if (map->list[bl->m].flag.noteleport)
return 1;
break;
}
@@ -806,17 +806,17 @@ int unit_warp(struct block_list *bl,short m,short x,short y,clr_type type)
if (x<0 || y<0) {
//Random map position.
if (!map->search_freecell(NULL, m, &x, &y, -1, -1, 1)) {
- ShowWarning("unit_warp failed. Unit Id:%d/Type:%d, target position map %d (%s) at [%d,%d]\n", bl->id, bl->type, m, maplist[m].name, x, y);
+ ShowWarning("unit_warp failed. Unit Id:%d/Type:%d, target position map %d (%s) at [%d,%d]\n", bl->id, bl->type, m, map->list[m].name, x, y);
return 2;
}
} else if (map->getcell(m,x,y,CELL_CHKNOREACH)) {
//Invalid target cell
- ShowWarning("unit_warp: Specified non-walkable target cell: %d (%s) at [%d,%d]\n", m, maplist[m].name, x,y);
+ ShowWarning("unit_warp: Specified non-walkable target cell: %d (%s) at [%d,%d]\n", m, map->list[m].name, x,y);
if (!map->search_freecell(NULL, m, &x, &y, 4, 4, 1)) {
//Can't find a nearby cell
- ShowWarning("unit_warp failed. Unit Id:%d/Type:%d, target position map %d (%s) at [%d,%d]\n", bl->id, bl->type, m, maplist[m].name, x, y);
+ ShowWarning("unit_warp failed. Unit Id:%d/Type:%d, target position map %d (%s) at [%d,%d]\n", bl->id, bl->type, m, map->list[m].name, x, y);
return 2;
}
}
@@ -1955,7 +1955,7 @@ int unit_skillcastcancel(struct block_list *bl,int type)
return 0;
if (sd && (sd->special_state.no_castcancel2 ||
- ((sd->sc.data[SC_UNLIMITED_HUMMING_VOICE] || sd->special_state.no_castcancel) && !map_flag_gvg(bl->m) && !maplist[bl->m].flag.battleground))) //fixed flags being read the wrong way around [blackhole89]
+ ((sd->sc.data[SC_UNLIMITED_HUMMING_VOICE] || sd->special_state.no_castcancel) && !map_flag_gvg(bl->m) && !map->list[bl->m].flag.battleground))) //fixed flags being read the wrong way around [blackhole89]
return 0;
}
@@ -2174,7 +2174,7 @@ int unit_remove_map(struct block_list *bl, clr_type clrtype, const char* file, i
guild->send_dot_remove(sd);
bg->send_dot_remove(sd);
- if( maplist[bl->m].users <= 0 || sd->state.debug_remove_map ) {
+ if( map->list[bl->m].users <= 0 || sd->state.debug_remove_map ) {
// this is only place where map users is decreased, if the mobs were removed too soon then this function was executed too many times [FlavioJS]
if( sd->debug_file == NULL || !(sd->state.debug_remove_map) ) {
sd->debug_file = "";
@@ -2188,17 +2188,17 @@ int unit_remove_map(struct block_list *bl, clr_type clrtype, const char* file, i
" Please report this!!!\n",
sd->status.account_id, sd->status.char_id,
sd->state.active, sd->state.connect_new, sd->state.rewarp, sd->state.changemap, sd->state.debug_remove_map,
- maplist[bl->m].name, maplist[bl->m].users,
+ map->list[bl->m].name, map->list[bl->m].users,
sd->debug_file, sd->debug_line, sd->debug_func, file, line, func);
- } else if (--maplist[bl->m].users == 0 && battle_config.dynamic_mobs) //[Skotlex]
+ } else if (--map->list[bl->m].users == 0 && battle_config.dynamic_mobs) //[Skotlex]
map->removemobs(bl->m);
if( !(sd->sc.option&OPTION_INVISIBLE) ) {
// decrement the number of active pvp players on the map
- --maplist[bl->m].users_pvp;
+ --map->list[bl->m].users_pvp;
}
- if( maplist[bl->m].instance_id >= 0 ) {
- instance->list[maplist[bl->m].instance_id].users--;
- instance->check_idle(maplist[bl->m].instance_id);
+ if( map->list[bl->m].instance_id >= 0 ) {
+ instance->list[map->list[bl->m].instance_id].users--;
+ instance->check_idle(map->list[bl->m].instance_id);
}
sd->state.debug_remove_map = 1; // temporary state to track double remove_map's [FlavioJS]
sd->debug_file = file;
@@ -2340,7 +2340,7 @@ int unit_free(struct block_list *bl, clr_type clrtype) {
duel->reject(sd->duel_invite, sd);
// Notify friends that this char logged out. [Skotlex]
- map->map_foreachpc(clif->friendslist_toggle_sub, sd->status.account_id, sd->status.char_id, 0);
+ map->foreachpc(clif->friendslist_toggle_sub, sd->status.account_id, sd->status.char_id, 0);
party->send_logout(sd);
guild->send_memberinfoshort(sd,0);
pc->cleareventtimer(sd);