summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/char/char.c69
-rw-r--r--src/char/int_guild.c4
-rw-r--r--src/common/HPMDataCheck.h22
-rw-r--r--src/common/Makefile.in16
-rw-r--r--src/common/cbasetypes.h6
-rw-r--r--src/common/console.c23
-rw-r--r--src/common/core.c42
-rw-r--r--src/common/memmgr.h5
-rw-r--r--src/common/mmo.h34
-rw-r--r--src/common/socket.c27
-rw-r--r--src/common/strlib.h21
-rw-r--r--src/config/const.h5
-rw-r--r--src/map/Makefile.in12
-rw-r--r--src/map/achievement.c77
-rw-r--r--src/map/achievement.h4
-rw-r--r--src/map/atcommand.c125
-rw-r--r--src/map/battle.c44
-rw-r--r--src/map/battle.h8
-rw-r--r--src/map/battleground.c18
-rw-r--r--src/map/channel.c19
-rw-r--r--src/map/channel.h1
-rw-r--r--src/map/clif.c684
-rw-r--r--src/map/clif.h48
-rw-r--r--src/map/duel.c4
-rw-r--r--src/map/guild.c13
-rw-r--r--src/map/instance.c61
-rw-r--r--src/map/instance.h1
-rw-r--r--src/map/intif.c11
-rw-r--r--src/map/intif.h2
-rw-r--r--src/map/map.c63
-rw-r--r--src/map/map.h12
-rw-r--r--src/map/mapreg_sql.c2
-rw-r--r--src/map/messages.h4
-rw-r--r--src/map/messages_ad.h7310
-rw-r--r--src/map/messages_main.h149
-rw-r--r--src/map/messages_re.h149
-rw-r--r--src/map/messages_sak.h8267
-rw-r--r--src/map/messages_zero.h104
-rw-r--r--src/map/mob.c9
-rw-r--r--src/map/npc.c7
-rw-r--r--src/map/npc.h2
-rw-r--r--src/map/packets.h188
-rw-r--r--src/map/packets_keys_main.h859
-rw-r--r--src/map/packets_keys_zero.h14
-rw-r--r--src/map/packets_shuffle_main.h17
-rw-r--r--src/map/packets_shuffle_re.h15
-rw-r--r--src/map/packets_shuffle_zero.h14
-rw-r--r--src/map/packets_struct.h282
-rw-r--r--src/map/pc.c134
-rw-r--r--src/map/pc.h2
-rw-r--r--src/map/pet.c2
-rw-r--r--src/map/quest.c53
-rw-r--r--src/map/quest.h1
-rw-r--r--src/map/script.c811
-rw-r--r--src/map/script.h8
-rw-r--r--src/map/skill.c186
-rw-r--r--src/map/skill.h1
-rw-r--r--src/map/status.c201
-rw-r--r--src/map/status.h20
-rw-r--r--src/map/storage.c10
-rw-r--r--src/plugins/HPMHooking/HPMHooking.Defs.inc106
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc148
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc37
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.Hooks.inc889
-rw-r--r--src/plugins/db2sql.c330
-rw-r--r--src/tool/Makefile.in88
66 files changed, 20280 insertions, 1620 deletions
diff --git a/src/char/char.c b/src/char/char.c
index 54f6ca7d1..8c3618887 100644
--- a/src/char/char.c
+++ b/src/char/char.c
@@ -139,6 +139,7 @@ char char_name_letters[1024] = ""; // list of letters/symbols allowed (or not) i
static int char_del_level = 0; ///< From which level you can delete character [Lupus]
static int char_del_delay = 86400;
static bool char_aegis_delete = false; ///< Verify if char is in guild/party or char and reacts as Aegis does (disallow deletion), @see chr->delete2_req.
+static bool char_aegis_rename = false; // whether or not the player can be renamed while in party/guild
static int max_connect_user = -1;
static int gm_allow_group = -1;
@@ -1514,6 +1515,14 @@ static int char_rename_char_sql(struct char_session_data *sd, int char_id)
if( char_dat.rename == 0 )
return 1;
+ if (char_aegis_rename) {
+ if (char_dat.guild_id > 0) {
+ return 5; // MSG_FAILED_RENAME_BELONGS_TO_GUILD
+ } else if (char_dat.party_id > 0) {
+ return 6; // MSG_FAILED_RENAME_BELONGS_TO_PARTY
+ }
+ }
+
SQL->EscapeStringLen(inter->sql_handle, esc_name, sd->new_name, strnlen(sd->new_name, NAME_LENGTH));
// check if the char exist
@@ -1539,9 +1548,20 @@ static int char_rename_char_sql(struct char_session_data *sd, int char_id)
// log change
if (chr->enable_logs) {
if (SQL_ERROR == SQL->Query(inter->sql_handle,
- "INSERT INTO `%s` (`time`, `char_msg`,`account_id`,`char_id`,`char_num`,`name`,`str`,`agi`,`vit`,`int`,`dex`,`luk`,`hair`,`hair_color`)"
- "VALUES (NOW(), '%s', '%d', '%d', '%d', '%s', '0', '0', '0', '0', '0', '0', '0', '0')",
- charlog_db, "change char name", sd->account_id, char_dat.char_id, char_dat.slot, esc_name))
+ "INSERT INTO `%s` ("
+ " `time`, `char_msg`, `account_id`, `char_id`, `char_num`, `class`, `name`,"
+ " `str`, `agi`, `vit`, `int`, `dex`, `luk`,"
+ " `hair`, `hair_color`"
+ ") VALUES ("
+ " NOW(), 'change char name', '%d', '%d', '%d', '%d', '%s',"
+ " '%d', '%d', '%d', '%d', '%d', '%d',"
+ " '%d', '%d'"
+ ")",
+ charlog_db,
+ sd->account_id, char_dat.char_id, char_dat.slot, char_dat.class, esc_name,
+ char_dat.str, char_dat.agi, char_dat.vit, char_dat.int_, char_dat.dex, char_dat.luk,
+ char_dat.hair, char_dat.hair_color
+ ))
Sql_ShowDebug(inter->sql_handle);
}
@@ -2132,17 +2152,20 @@ static void char_mmo_char_send_ban_list(int fd, struct char_session_data *sd)
//----------------------------------------
static void char_mmo_char_send_slots_info(int fd, struct char_session_data *sd)
{
+// also probably supported client 2013-02-15aRagexe but not 2013-02-15bRagexe [4144]
+#if PACKETVER_MAIN_NUM >= 20130612 || PACKETVER_RE_NUM >= 20130115 || defined(PACKETVER_ZERO)
nullpo_retv(sd);
- WFIFOHEAD(fd,29);
- WFIFOW(fd,0) = 0x82d;
- WFIFOW(fd,2) = 29;
- WFIFOB(fd,4) = sd->char_slots;
- WFIFOB(fd,5) = MAX_CHARS - sd->char_slots;
- WFIFOB(fd,6) = 0;
- WFIFOB(fd,7) = sd->char_slots;
- WFIFOB(fd,8) = sd->char_slots;
- memset(WFIFOP(fd,9), 0, 20); // unused bytes
- WFIFOSET(fd,29);
+ WFIFOHEAD(fd, 29);
+ WFIFOW(fd, 0) = 0x82d;
+ WFIFOW(fd, 2) = 29;
+ WFIFOB(fd, 4) = sd->char_slots;
+ WFIFOB(fd, 5) = MAX_CHARS - sd->char_slots;
+ WFIFOB(fd, 6) = 0;
+ WFIFOB(fd, 7) = sd->char_slots;
+ WFIFOB(fd, 8) = sd->char_slots;
+ memset(WFIFOP(fd, 9), 0, 20); // unused bytes
+ WFIFOSET(fd, 29);
+#endif
}
//----------------------------------------
// Function to send characters to a player
@@ -2409,12 +2432,8 @@ static void char_parse_fromlogin_account_data(int fd)
chr->auth_error(i, 0);
} else {
// send characters to player
- #if PACKETVER >= 20130000
chr->mmo_char_send_slots_info(i, sd);
chr->mmo_char_send_characters(i, sd);
- #else
- chr->mmo_char_send_characters(i, sd);
- #endif
#if PACKETVER >= 20060819
chr->mmo_char_send_ban_list(i, sd);
#endif
@@ -4558,8 +4577,19 @@ static void char_parse_char_select(int fd, struct char_session_data *sd, uint32
// FIXME: Why are we re-escaping the name if it was already escaped in rename/make_new_char? [Panikon]
SQL->EscapeStringLen(inter->sql_handle, esc_name, char_dat.name, strnlen(char_dat.name, NAME_LENGTH));
if (SQL_ERROR == SQL->Query(inter->sql_handle,
- "INSERT INTO `%s`(`time`, `account_id`, `char_id`, `char_num`, `name`) VALUES (NOW(), '%d', '%d', '%d', '%s')",
- charlog_db, sd->account_id, cd->char_id, slot, esc_name))
+ "INSERT INTO `%s`("
+ " `time`, `char_msg`, `account_id`, `char_id`, `char_num`, `class`, `name`,"
+ " `str`, `agi`, `vit`, `int`, `dex`, `luk`,"
+ " `hair`, `hair_color`"
+ ") VALUES ("
+ " NOW(), 'char select', '%d', '%d', '%d', '%d', '%s',"
+ " '%d', '%d', '%d', '%d', '%d', '%d',"
+ " '%d', '%d')",
+ charlog_db,
+ sd->account_id, cd->char_id, slot, char_dat.class, esc_name,
+ char_dat.str, char_dat.agi, char_dat.vit, char_dat.int_, char_dat.dex, char_dat.luk,
+ char_dat.hair, char_dat.hair_color
+ ))
Sql_ShowDebug(inter->sql_handle);
}
ShowInfo("Selected char: (Account %d: %d - %s)\n", sd->account_id, slot, char_dat.name);
@@ -5848,6 +5878,7 @@ static bool char_config_read_player_name(const char *filename, const struct conf
libconfig->setting_lookup_mutable_string(setting, "name_letters", char_name_letters, sizeof(char_name_letters));
libconfig->setting_lookup_int(setting, "name_option", &char_name_option);
libconfig->setting_lookup_bool_real(setting, "name_ignoring_case", &name_ignoring_case);
+ libconfig->setting_lookup_bool_real(setting, "use_aegis_rename", &char_aegis_rename);
return true;
}
diff --git a/src/char/int_guild.c b/src/char/int_guild.c
index e03278fad..56e1c1ba3 100644
--- a/src/char/int_guild.c
+++ b/src/char/int_guild.c
@@ -443,7 +443,9 @@ static struct guild *inter_guild_fromsql(int guild_id)
if( m->position >= MAX_GUILDPOSITION ) // Fix reduction of MAX_GUILDPOSITION [PoW]
m->position = MAX_GUILDPOSITION - 1;
SQL->GetData(inter->sql_handle, 11, &data, &len); memcpy(m->name, data, min(len, NAME_LENGTH));
- SQL->GetData(inter->sql_handle, 12, &data, NULL); m->last_login = atoi(data);
+ SQL->GetData(inter->sql_handle, 12, &data, NULL);
+ if (data != NULL)
+ m->last_login = atoi(data);
m->modified = GS_MEMBER_UNMODIFIED;
}
diff --git a/src/common/HPMDataCheck.h b/src/common/HPMDataCheck.h
index 28c6e3b1d..ecdc83740 100644
--- a/src/common/HPMDataCheck.h
+++ b/src/common/HPMDataCheck.h
@@ -557,6 +557,7 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "mapflag_skill_adjust", sizeof(struct mapflag_skill_adjust), SERVER_TYPE_MAP },
{ "mapit_interface", sizeof(struct mapit_interface), SERVER_TYPE_MAP },
{ "questinfo", sizeof(struct questinfo), SERVER_TYPE_MAP },
+ { "questinfo_itemreq", sizeof(struct questinfo_itemreq), SERVER_TYPE_MAP },
{ "questinfo_qreq", sizeof(struct questinfo_qreq), SERVER_TYPE_MAP },
{ "spawn_data", sizeof(struct spawn_data), SERVER_TYPE_MAP },
#else
@@ -606,6 +607,7 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "NORMALITEM_INFO", sizeof(struct NORMALITEM_INFO), SERVER_TYPE_MAP },
{ "PACKET_CZ_ADD_ITEM_TO_MAIL", sizeof(struct PACKET_CZ_ADD_ITEM_TO_MAIL), SERVER_TYPE_MAP },
{ "PACKET_CZ_CHECKNAME", sizeof(struct PACKET_CZ_CHECKNAME), SERVER_TYPE_MAP },
+ { "PACKET_CZ_MEMORIALDUNGEON_COMMAND", sizeof(struct PACKET_CZ_MEMORIALDUNGEON_COMMAND), SERVER_TYPE_MAP },
{ "PACKET_CZ_OPEN_UI", sizeof(struct PACKET_CZ_OPEN_UI), SERVER_TYPE_MAP },
{ "PACKET_CZ_PC_BUY_CASH_POINT_ITEM", sizeof(struct PACKET_CZ_PC_BUY_CASH_POINT_ITEM), SERVER_TYPE_MAP },
{ "PACKET_CZ_PC_BUY_CASH_POINT_ITEM_sub", sizeof(struct PACKET_CZ_PC_BUY_CASH_POINT_ITEM_sub), SERVER_TYPE_MAP },
@@ -626,6 +628,7 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "PACKET_CZ_REQ_REFRESH_MAIL_LIST", sizeof(struct PACKET_CZ_REQ_REFRESH_MAIL_LIST), SERVER_TYPE_MAP },
{ "PACKET_CZ_REQ_REMOVE_ITEM_MAIL", sizeof(struct PACKET_CZ_REQ_REMOVE_ITEM_MAIL), SERVER_TYPE_MAP },
{ "PACKET_CZ_REQ_STYLE_CHANGE", sizeof(struct PACKET_CZ_REQ_STYLE_CHANGE), SERVER_TYPE_MAP },
+ { "PACKET_CZ_REQ_STYLE_CHANGE2", sizeof(struct PACKET_CZ_REQ_STYLE_CHANGE2), SERVER_TYPE_MAP },
{ "PACKET_CZ_REQ_TRADE_BUYING_STORE", sizeof(struct PACKET_CZ_REQ_TRADE_BUYING_STORE), SERVER_TYPE_MAP },
{ "PACKET_CZ_REQ_TRADE_BUYING_STORE_sub", sizeof(struct PACKET_CZ_REQ_TRADE_BUYING_STORE_sub), SERVER_TYPE_MAP },
{ "PACKET_CZ_REQ_ZENY_FROM_MAIL", sizeof(struct PACKET_CZ_REQ_ZENY_FROM_MAIL), SERVER_TYPE_MAP },
@@ -634,11 +637,16 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "PACKET_CZ_SEARCH_STORE_INFO_item", sizeof(struct PACKET_CZ_SEARCH_STORE_INFO_item), SERVER_TYPE_MAP },
{ "PACKET_CZ_SEND_MAIL", sizeof(struct PACKET_CZ_SEND_MAIL), SERVER_TYPE_MAP },
{ "PACKET_CZ_SSILIST_ITEM_CLICK", sizeof(struct PACKET_CZ_SSILIST_ITEM_CLICK), SERVER_TYPE_MAP },
+ { "PACKET_ZC_ACK_BAN_GUILD1", sizeof(struct PACKET_ZC_ACK_BAN_GUILD1), SERVER_TYPE_MAP },
+ { "PACKET_ZC_ACK_BAN_GUILD2", sizeof(struct PACKET_ZC_ACK_BAN_GUILD2), SERVER_TYPE_MAP },
+ { "PACKET_ZC_ACK_BAN_GUILD3", sizeof(struct PACKET_ZC_ACK_BAN_GUILD3), SERVER_TYPE_MAP },
{ "PACKET_ZC_ACK_CLAN_LEAVE", sizeof(struct PACKET_ZC_ACK_CLAN_LEAVE), SERVER_TYPE_MAP },
{ "PACKET_ZC_ACK_DELETE_MAIL", sizeof(struct PACKET_ZC_ACK_DELETE_MAIL), SERVER_TYPE_MAP },
{ "PACKET_ZC_ACK_ITEM_FROM_MAIL", sizeof(struct PACKET_ZC_ACK_ITEM_FROM_MAIL), SERVER_TYPE_MAP },
{ "PACKET_ZC_ACK_ITEMLIST_BUYING_STORE", sizeof(struct PACKET_ZC_ACK_ITEMLIST_BUYING_STORE), SERVER_TYPE_MAP },
{ "PACKET_ZC_ACK_ITEMLIST_BUYING_STORE_sub", sizeof(struct PACKET_ZC_ACK_ITEMLIST_BUYING_STORE_sub), SERVER_TYPE_MAP },
+ { "PACKET_ZC_ACK_LEAVE_GUILD1", sizeof(struct PACKET_ZC_ACK_LEAVE_GUILD1), SERVER_TYPE_MAP },
+ { "PACKET_ZC_ACK_LEAVE_GUILD2", sizeof(struct PACKET_ZC_ACK_LEAVE_GUILD2), SERVER_TYPE_MAP },
{ "PACKET_ZC_ACK_OPEN_WRITE_MAIL", sizeof(struct PACKET_ZC_ACK_OPEN_WRITE_MAIL), SERVER_TYPE_MAP },
{ "PACKET_ZC_ACK_REMOVE_ITEM_MAIL", sizeof(struct PACKET_ZC_ACK_REMOVE_ITEM_MAIL), SERVER_TYPE_MAP },
{ "PACKET_ZC_ACK_REQMAKINGITEM", sizeof(struct PACKET_ZC_ACK_REQMAKINGITEM), SERVER_TYPE_MAP },
@@ -652,6 +660,9 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "PACKET_ZC_ADD_ITEM_TO_MAIL", sizeof(struct PACKET_ZC_ADD_ITEM_TO_MAIL), SERVER_TYPE_MAP },
{ "PACKET_ZC_ADD_ITEM_TO_STORE", sizeof(struct PACKET_ZC_ADD_ITEM_TO_STORE), SERVER_TYPE_MAP },
{ "PACKET_ZC_ADD_MEMBER_TO_GROUP", sizeof(struct PACKET_ZC_ADD_MEMBER_TO_GROUP), SERVER_TYPE_MAP },
+ { "PACKET_ZC_AUTOSPELLLIST1", sizeof(struct PACKET_ZC_AUTOSPELLLIST1), SERVER_TYPE_MAP },
+ { "PACKET_ZC_AUTOSPELLLIST2", sizeof(struct PACKET_ZC_AUTOSPELLLIST2), SERVER_TYPE_MAP },
+ { "PACKET_ZC_CAMERA_INFO", sizeof(struct PACKET_ZC_CAMERA_INFO), SERVER_TYPE_MAP },
{ "PACKET_ZC_CASH_ITEM_DELETE", sizeof(struct PACKET_ZC_CASH_ITEM_DELETE), SERVER_TYPE_MAP },
{ "PACKET_ZC_CASH_TIME_COUNTER", sizeof(struct PACKET_ZC_CASH_TIME_COUNTER), SERVER_TYPE_MAP },
{ "PACKET_ZC_CHECKNAME", sizeof(struct PACKET_ZC_CHECKNAME), SERVER_TYPE_MAP },
@@ -660,11 +671,15 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "PACKET_ZC_FEED_MER", sizeof(struct PACKET_ZC_FEED_MER), SERVER_TYPE_MAP },
{ "PACKET_ZC_FEED_PET", sizeof(struct PACKET_ZC_FEED_PET), SERVER_TYPE_MAP },
{ "PACKET_ZC_FORMATSTRING_MSG", sizeof(struct PACKET_ZC_FORMATSTRING_MSG), SERVER_TYPE_MAP },
+ { "PACKET_ZC_FORMATSTRING_MSG_COLOR", sizeof(struct PACKET_ZC_FORMATSTRING_MSG_COLOR), SERVER_TYPE_MAP },
{ "PACKET_ZC_GROUP_ISALIVE", sizeof(struct PACKET_ZC_GROUP_ISALIVE), SERVER_TYPE_MAP },
{ "PACKET_ZC_GROUP_LIST", sizeof(struct PACKET_ZC_GROUP_LIST), SERVER_TYPE_MAP },
{ "PACKET_ZC_GROUP_LIST_SUB", sizeof(struct PACKET_ZC_GROUP_LIST_SUB), SERVER_TYPE_MAP },
+ { "PACKET_ZC_GUILD_POSITION", sizeof(struct PACKET_ZC_GUILD_POSITION), SERVER_TYPE_MAP },
+ { "PACKET_ZC_INVENTORY_MOVE_FAILED", sizeof(struct PACKET_ZC_INVENTORY_MOVE_FAILED), SERVER_TYPE_MAP },
{ "PACKET_ZC_ITEM_ENTRY", sizeof(struct PACKET_ZC_ITEM_ENTRY), SERVER_TYPE_MAP },
{ "PACKET_ZC_ITEM_PICKUP_PARTY", sizeof(struct PACKET_ZC_ITEM_PICKUP_PARTY), SERVER_TYPE_MAP },
+ { "PACKET_ZC_ITEM_PREVIEW", sizeof(struct PACKET_ZC_ITEM_PREVIEW), SERVER_TYPE_MAP },
{ "PACKET_ZC_MAIL_LIST", sizeof(struct PACKET_ZC_MAIL_LIST), SERVER_TYPE_MAP },
{ "PACKET_ZC_MAKABLEITEMLIST", sizeof(struct PACKET_ZC_MAKABLEITEMLIST), SERVER_TYPE_MAP },
{ "PACKET_ZC_MAKABLEITEMLIST_sub", sizeof(struct PACKET_ZC_MAKABLEITEMLIST_sub), SERVER_TYPE_MAP },
@@ -696,6 +711,7 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "PACKET_ZC_PRIVATE_AIRSHIP_RESPONSE", sizeof(struct PACKET_ZC_PRIVATE_AIRSHIP_RESPONSE), SERVER_TYPE_MAP },
{ "PACKET_ZC_PROPERTY_HOMUN", sizeof(struct PACKET_ZC_PROPERTY_HOMUN), SERVER_TYPE_MAP },
{ "PACKET_ZC_READ_MAIL", sizeof(struct PACKET_ZC_READ_MAIL), SERVER_TYPE_MAP },
+ { "PACKET_ZC_REMOVE_EFFECT", sizeof(struct PACKET_ZC_REMOVE_EFFECT), SERVER_TYPE_MAP },
{ "PACKET_ZC_REPAIRITEMLIST", sizeof(struct PACKET_ZC_REPAIRITEMLIST), SERVER_TYPE_MAP },
{ "PACKET_ZC_REPAIRITEMLIST_sub", sizeof(struct PACKET_ZC_REPAIRITEMLIST_sub), SERVER_TYPE_MAP },
{ "PACKET_ZC_SEARCH_STORE_INFO_ACK", sizeof(struct PACKET_ZC_SEARCH_STORE_INFO_ACK), SERVER_TYPE_MAP },
@@ -709,7 +725,11 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "PACKET_ZC_WARPLIST", sizeof(struct PACKET_ZC_WARPLIST), SERVER_TYPE_MAP },
{ "PACKET_ZC_WARPLIST_sub", sizeof(struct PACKET_ZC_WARPLIST_sub), SERVER_TYPE_MAP },
{ "PACKET_ZC_WRITE_MAIL_RESULT", sizeof(struct PACKET_ZC_WRITE_MAIL_RESULT), SERVER_TYPE_MAP },
+ { "ZC_INVENTORY_END", sizeof(struct ZC_INVENTORY_END), SERVER_TYPE_MAP },
+ { "ZC_INVENTORY_START", sizeof(struct ZC_INVENTORY_START), SERVER_TYPE_MAP },
{ "ZC_PROGRESS_ACTOR", sizeof(struct ZC_PROGRESS_ACTOR), SERVER_TYPE_MAP },
+ { "ZC_STORE_ITEMLIST_EQUIP", sizeof(struct ZC_STORE_ITEMLIST_EQUIP), SERVER_TYPE_MAP },
+ { "ZC_STORE_ITEMLIST_NORMAL", sizeof(struct ZC_STORE_ITEMLIST_NORMAL), SERVER_TYPE_MAP },
{ "ach_list_info", sizeof(struct ach_list_info), SERVER_TYPE_MAP },
{ "mail_item", sizeof(struct mail_item), SERVER_TYPE_MAP },
{ "maillistinfo", sizeof(struct maillistinfo), SERVER_TYPE_MAP },
@@ -780,8 +800,6 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "packet_status_change", sizeof(struct packet_status_change), SERVER_TYPE_MAP },
{ "packet_status_change2", sizeof(struct packet_status_change2), SERVER_TYPE_MAP },
{ "packet_status_change_end", sizeof(struct packet_status_change_end), SERVER_TYPE_MAP },
- { "packet_storelist_equip", sizeof(struct packet_storelist_equip), SERVER_TYPE_MAP },
- { "packet_storelist_normal", sizeof(struct packet_storelist_normal), SERVER_TYPE_MAP },
{ "packet_unequipitem_ack", sizeof(struct packet_unequipitem_ack), SERVER_TYPE_MAP },
{ "packet_unit_walking", sizeof(struct packet_unit_walking), SERVER_TYPE_MAP },
{ "packet_viewequip_ack", sizeof(struct packet_viewequip_ack), SERVER_TYPE_MAP },
diff --git a/src/common/Makefile.in b/src/common/Makefile.in
index f65138521..67fe9c0d4 100644
--- a/src/common/Makefile.in
+++ b/src/common/Makefile.in
@@ -44,8 +44,6 @@ COMMON_C = $(COMMON_SHARED_C)
COMMON_SHARED_OBJ = $(patsubst %.c,%.o,$(COMMON_SHARED_C))
COMMON_OBJ = $(addprefix obj_all/, $(COMMON_SHARED_OBJ) \
console.o core.o memmgr.o socket.o)
-COMMON_MINI_OBJ = $(addprefix obj_all/, $(COMMON_SHARED_OBJ) \
- miniconsole.o minicore.o minimemmgr.o minisocket.o)
COMMON_C += console.c core.c memmgr.c socket.c
COMMON_H = atomic.h cbasetypes.h conf.h console.h core.h db.h des.h ers.h \
grfio.h hercules.h HPM.h HPMi.h memmgr.h mapindex.h md5calc.h \
@@ -61,7 +59,7 @@ SYSINFO_INC = sysinfo.inc
HAVE_MYSQL=@HAVE_MYSQL@
ifeq ($(HAVE_MYSQL),yes)
- SQL_DEPENDS=common common_sql common_mini
+ SQL_DEPENDS=common common_sql
else
SQL_DEPENDS=needs_mysql
endif
@@ -72,7 +70,7 @@ CC = @CC@
export CC
#####################################################################
-.PHONY: all sql common common_sql common_mini clean buildclean help
+.PHONY: all sql common common_sql clean buildclean help
all: sql
@@ -119,18 +117,12 @@ obj_all/common.a: $(COMMON_OBJ) Makefile
@echo " AR $@"
@@AR@ rcs obj_all/common.a $(COMMON_OBJ)
-obj_all/common_mini.a: $(COMMON_MINI_OBJ) Makefile
- @echo " AR $@"
- @@AR@ rcs obj_all/common_mini.a $(COMMON_MINI_OBJ)
-
obj_sql/common_sql.a: $(COMMON_SQL_OBJ) Makefile
@echo " AR $@"
@@AR@ rcs obj_sql/common_sql.a $(COMMON_SQL_OBJ)
common: $(COMMON_OBJ) $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) obj_all/common.a Makefile
-common_mini: $(COMMON_MINI_OBJ) $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) obj_all/common_mini.a Makefile
-
common_sql: $(COMMON_SQL_OBJ) obj_sql/common_sql.a Makefile
# missing object files
@@ -150,10 +142,6 @@ obj_all/%.o: %.c $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) | $(SYSIN
@echo " CC $<"
@$(CC) @CFLAGS@ @DEFS@ $(COMMON_INCLUDE) $(THIRDPARTY_INCLUDE) @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
-obj_all/mini%.o: %.c $$(filter %.p.h, $(COMMON_PH)) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) | $(SYSINFO_INC) obj_all
- @echo " CC $<"
- @$(CC) @CFLAGS@ @DEFS@ $(COMMON_INCLUDE) $(THIRDPARTY_INCLUDE) -DMINICORE @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
-
obj_sql/%.o: %.c $$(filter %.p.h, $(COMMON_PH)) $(COMMON_H) $(COMMON_SQL_H) $(CONFIG_H) $(LIBCONFIG_H) | $(SYSINFO_INC) obj_sql
@echo " CC $<"
@$(CC) @CFLAGS@ @DEFS@ $(COMMON_INCLUDE) $(THIRDPARTY_INCLUDE) @MYSQL_CFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
diff --git a/src/common/cbasetypes.h b/src/common/cbasetypes.h
index 3fc41bb23..89f7f8588 100644
--- a/src/common/cbasetypes.h
+++ b/src/common/cbasetypes.h
@@ -460,12 +460,6 @@ typedef char bool;
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
// C11 version
#define STATIC_ASSERT(ex, msg) _Static_assert(ex, msg)
-#elif __has_feature(c_static_assert)
-// Clang support (as per http://clang.llvm.org/docs/LanguageExtensions.html)
-#define STATIC_ASSERT(ex, msg) _Static_assert(ex, msg)
-#elif defined(__GNUC__) && GCC_VERSION >= 40700
-// GCC >= 4.7 is known to support it
-#define STATIC_ASSERT(ex, msg) _Static_assert(ex, msg)
#elif defined(_MSC_VER)
// MSVC doesn't support it, but it accepts the C++ style version
#define STATIC_ASSERT(ex, msg) static_assert(ex, msg)
diff --git a/src/common/console.c b/src/common/console.c
index 55a9815f5..a990d86b3 100644
--- a/src/common/console.c
+++ b/src/common/console.c
@@ -23,23 +23,21 @@
#include "config/core.h" // CONSOLE_INPUT, MAX_CONSOLE_INPUT
#include "console.h"
+#include "common/atomic.h"
#include "common/cbasetypes.h"
#include "common/core.h"
+#include "common/ers.h"
+#include "common/memmgr.h"
+#include "common/mmo.h"
+#include "common/mutex.h"
#include "common/nullpo.h"
#include "common/showmsg.h"
+#include "common/spinlock.h"
+#include "common/sql.h"
+#include "common/strlib.h"
#include "common/sysinfo.h"
-
-#ifndef MINICORE
-# include "common/atomic.h"
-# include "common/ers.h"
-# include "common/memmgr.h"
-# include "common/mutex.h"
-# include "common/spinlock.h"
-# include "common/sql.h"
-# include "common/strlib.h"
-# include "common/thread.h"
-# include "common/timer.h"
-#endif
+#include "common/thread.h"
+#include "common/timer.h"
#include <stdio.h>
#include <stdlib.h>
@@ -93,6 +91,7 @@ static void display_title(void)
ShowInfo("Compiled with %s\n", sysinfo->compiler());
ShowInfo("Compile Flags: %s\n", sysinfo->cflags());
ShowInfo("Timer Function Type: %s\n", sysinfo->time());
+ ShowInfo("Packet version: %d " PACKETTYPE "\n", PACKETVER);
}
/**
diff --git a/src/common/core.c b/src/common/core.c
index 9fd33c4e0..1ecf1df83 100644
--- a/src/common/core.c
+++ b/src/common/core.c
@@ -23,32 +23,29 @@
#include "config/core.h"
#include "core.h"
+#include "common/HPM.h"
#include "common/cbasetypes.h"
+#include "common/conf.h"
#include "common/console.h"
#include "common/db.h"
#include "common/des.h"
+#include "common/ers.h"
#include "common/grfio.h"
+#include "common/md5calc.h"
#include "common/memmgr.h"
#include "common/mmo.h"
+#include "common/mutex.h"
#include "common/nullpo.h"
+#include "common/random.h"
#include "common/showmsg.h"
+#include "common/socket.h"
+#include "common/sql.h"
#include "common/strlib.h"
#include "common/sysinfo.h"
+#include "common/thread.h"
#include "common/timer.h"
#include "common/utils.h"
-#ifndef MINICORE
-# include "common/HPM.h"
-# include "common/conf.h"
-# include "common/ers.h"
-# include "common/md5calc.h"
-# include "common/mutex.h"
-# include "common/random.h"
-# include "common/socket.h"
-# include "common/sql.h"
-# include "common/thread.h"
-#endif
-
#ifndef _WIN32
# include <unistd.h>
#else
@@ -83,7 +80,6 @@
static struct core_interface core_s;
struct core_interface *core = &core_s;
-#ifndef MINICORE // minimalist Core
// Added by Gabuzomeu
//
// This is an implementation of signal() using sigaction() for portability.
@@ -196,7 +192,6 @@ static void signals_init(void)
compat_signal(SIGTRAP, SIG_DFL);
#endif
}
-#endif
/**
* Warns the user if executed as superuser (root)
@@ -250,10 +245,8 @@ static bool usercheck(void)
static void core_defaults(void)
{
nullpo_defaults();
-#ifndef MINICORE
hpm_defaults();
HCache_defaults();
-#endif
sysinfo_defaults();
console_defaults();
strlib_defaults();
@@ -262,7 +255,6 @@ static void core_defaults(void)
cmdline_defaults();
des_defaults();
grfio_defaults(); // Note: grfio is lazily loaded. grfio->init() and grfio->final() are not automatically called.
-#ifndef MINICORE
mutex_defaults();
libconfig_defaults();
sql_defaults();
@@ -272,7 +264,6 @@ static void core_defaults(void)
rnd_defaults();
md5_defaults();
thread_defaults();
-#endif
}
/**
@@ -280,12 +271,8 @@ static void core_defaults(void)
*/
static const char *cmdline_arg_source(struct CmdlineArgData *arg)
{
-#ifdef MINICORE
- return "core";
-#else // !MINICORE
nullpo_retr(NULL, arg);
return HPM->pid2name(arg->pluginID);
-#endif // MINICORE
}
/**
@@ -446,15 +433,9 @@ static int cmdline_exec(int argc, char **argv, unsigned int options)
*/
static void cmdline_init(void)
{
-#ifdef MINICORE
- // Minicore has no HPM. This value isn't used, but the arg_add function requires it, so we're (re)defining it here
-#define HPM_PID_CORE ((unsigned int)-1)
-#endif
CMDLINEARG_DEF(help, 'h', "Displays this help screen", CMDLINE_OPT_NORMAL);
CMDLINEARG_DEF(version, 'v', "Displays the server's version.", CMDLINE_OPT_NORMAL);
-#ifndef MINICORE
CMDLINEARG_DEF2(load-plugin, loadplugin, "Loads an additional plugin (can be repeated).", CMDLINE_OPT_PARAM|CMDLINE_OPT_PREINIT);
-#endif // !MINICORE
cmdline_args_init_local();
}
@@ -521,10 +502,6 @@ int main(int argc, char **argv)
if (!usercheck())
return EXIT_FAILURE;
-#ifdef MINICORE // minimalist Core
- do_init(argc,argv);
- do_final();
-#else// not MINICORE
set_server_type();
Sql_Init();
@@ -567,7 +544,6 @@ int main(int argc, char **argv)
thread->final();
ers_final();
rnd->final();
-#endif
cmdline->final();
//sysinfo->final(); Called by iMalloc->final()
diff --git a/src/common/memmgr.h b/src/common/memmgr.h
index 90c35f244..c7147cc5e 100644
--- a/src/common/memmgr.h
+++ b/src/common/memmgr.h
@@ -42,11 +42,6 @@
// Enable memory manager logging by default
#define LOG_MEMMGR
-// no logging for minicore
-#if defined(MINICORE) && defined(LOG_MEMMGR)
- #undef LOG_MEMMGR
-#endif
-
# define aMalloc(n) (iMalloc->malloc((n),ALC_MARK))
# define aCalloc(m,n) (iMalloc->calloc((m),(n),ALC_MARK))
# define aRealloc(p,n) (iMalloc->realloc((p),(n),ALC_MARK))
diff --git a/src/common/mmo.h b/src/common/mmo.h
index 7e0d915eb..9bcf82cc7 100644
--- a/src/common/mmo.h
+++ b/src/common/mmo.h
@@ -81,21 +81,50 @@
#undef ENABLE_PACKETVER_ZERO
#endif // DISABLE_PACKETVER_ZERO
-#if !defined(PACKETVER_RE) && !defined(PACKETVER_ZERO)
+//Uncomment the following line if your client is sakexe
+//#define ENABLE_PACKETVER_SAK
+#ifdef ENABLE_PACKETVER_SAK
+ #define PACKETVER_SAK
+ #undef ENABLE_PACKETVER_SAK
+#endif // DISABLE_PACKETVER_SAK
+
+//Uncomment the following line if your client is ragexeAD
+//#define ENABLE_PACKETVER_AD
+#ifdef ENABLE_PACKETVER_AD
+ #define PACKETVER_AD
+ #undef ENABLE_PACKETVER_AD
+#endif // DISABLE_PACKETVER_AD
+
+#if !defined(PACKETVER_RE) && !defined(PACKETVER_ZERO) && !defined(PACKETVER_SAK) && !defined(PACKETVER_AD)
#define PACKETVER_MAIN_NUM PACKETVER
+ #define PACKETTYPE "main"
#else
#define PACKETVER_MAIN_NUM 0
#endif
#ifdef PACKETVER_RE
#define PACKETVER_RE_NUM PACKETVER
+ #define PACKETTYPE "RE"
#else
#define PACKETVER_RE_NUM 0
#endif
#ifdef PACKETVER_ZERO
#define PACKETVER_ZERO_NUM PACKETVER
+ #define PACKETTYPE "zero"
#else
#define PACKETVER_ZERO_NUM 0
#endif
+#ifdef PACKETVER_SAK
+ #define PACKETVER_SAK_NUM PACKETVER
+ #define PACKETTYPE "sak"
+#else
+ #define PACKETVER_SAK_NUM 0
+#endif
+#ifdef PACKETVER_AD
+ #define PACKETVER_AD_NUM PACKETVER
+ #define PACKETTYPE "ad"
+#else
+ #define PACKETVER_AD_NUM 0
+#endif
// Client support for experimental RagexeRE UI present in 2012-04-10 and 2012-04-18
#if defined(PACKETVER_RE) && ( PACKETVER == 20120410 || PACKETVER == 20120418 )
@@ -1302,7 +1331,8 @@ enum questinfo_type {
QINFO_ITEM,
QINFO_HOMUN_LEVEL,
QINFO_HOMUN_TYPE,
- QINFO_QUEST
+ QINFO_QUEST,
+ QINFO_MERCENARY_CLASS
};
/* packet size constant for itemlist */
diff --git a/src/common/socket.c b/src/common/socket.c
index 290c7a1b3..fd86414d6 100644
--- a/src/common/socket.c
+++ b/src/common/socket.c
@@ -301,10 +301,8 @@ static uint32 send_shortlist_set[(FD_SETSIZE+31)/32];// to know if specific fd's
static int create_session(int fd, RecvFunc func_recv, SendFunc func_send, ParseFunc func_parse);
-#ifndef MINICORE
- static int ip_rules = 1;
- static int connect_check(uint32 ip);
-#endif // MINICORE
+static int ip_rules = 1;
+static int connect_check(uint32 ip);
static const char *error_msg(void)
{
@@ -556,12 +554,10 @@ static int connect_client(int listen_fd)
setsocketopts(fd,NULL);
sockt->set_nonblocking(fd, 1);
-#ifndef MINICORE
if( ip_rules && !connect_check(ntohl(client_address.sin_addr.s_addr)) ) {
sockt->close(fd);
return -1;
}
-#endif // MINICORE
#ifndef SOCKET_EPOLL
// Select Based Event Dispatcher
@@ -1065,9 +1061,6 @@ static int do_sockets(int next)
return 0;
}
-//////////////////////////////
-#ifndef MINICORE
-//////////////////////////////
// IP rules and DDoS protection
struct connect_history {
@@ -1326,11 +1319,6 @@ static bool access_list_add(struct config_setting_t *setting, const char *list_n
return true;
}
-//////////////////////////////
-#endif // MINICORE
-//////////////////////////////
-
-#ifndef MINICORE
/**
* Reads 'socket_configuration/ip_rules' and initializes required variables.
*
@@ -1387,9 +1375,7 @@ static bool socket_config_read_iprules(const char *filename, struct config_t *co
return true;
}
-#endif // ! MINICORE
-#ifndef MINICORE
/**
* Reads 'socket_configuration/ddos' and initializes required variables.
*
@@ -1419,7 +1405,6 @@ static bool socket_config_read_ddos(const char *filename, struct config_t *confi
return true;
}
-#endif // ! MINICORE
/**
* Reads 'socket_configuration' and initializes required variables.
@@ -1464,7 +1449,6 @@ static bool socket_config_read(const char *filename, bool imported)
}
#endif // SOCKET_EPOLL
-#ifndef MINICORE
{
uint32 ui32 = 0;
libconfig->setting_lookup_bool(setting, "debug", &access_debug);
@@ -1477,7 +1461,6 @@ static bool socket_config_read(const char *filename, bool imported)
retval = false;
if (!socket_config_read_ddos(filename, &config, imported))
retval = false;
-#endif // MINICORE
// import should overwrite any previous configuration, so it should be called last
if (libconfig->lookup_string(&config, "import", &import) == CONFIG_TRUE) {
@@ -1496,12 +1479,10 @@ static bool socket_config_read(const char *filename, bool imported)
static void socket_final(void)
{
int i;
-#ifndef MINICORE
if( connect_history )
db_destroy(connect_history);
VECTOR_CLEAR(access_allow);
VECTOR_CLEAR(access_deny);
-#endif // MINICORE
for( i = 1; i < sockt->fd_max; i++ )
if(sockt->session[i])
@@ -1686,10 +1667,8 @@ static void socket_init(void)
}
#endif // defined(HAVE_SETRLIMIT) && !defined(CYGWIN)
-#ifndef MINICORE
VECTOR_INIT(access_allow);
VECTOR_INIT(access_deny);
-#endif // ! MINICORE
// Get initial local ips
sockt->naddr_ = sockt->getips(sockt->addr_,16);
@@ -1729,12 +1708,10 @@ static void socket_init(void)
// should hold enough buffer (it is a vacuum so to speak) as it is never flushed. [Skotlex]
create_session(0, null_recv, null_send, null_parse);
-#ifndef MINICORE
// Delete old connection history every 5 minutes
connect_history = uidb_alloc(DB_OPT_RELEASE_DATA);
timer->add_func_list(connect_check_clear, "connect_check_clear");
timer->add_interval(timer->gettick()+1000, connect_check_clear, 0, 0, 5*60*1000);
-#endif // MINICORE
ShowInfo("Server supports up to '"CL_WHITE"%"PRIu64""CL_RESET"' concurrent connections.\n", rlim_cur);
}
diff --git a/src/common/strlib.h b/src/common/strlib.h
index 5ea4f4763..006bbd14b 100644
--- a/src/common/strlib.h
+++ b/src/common/strlib.h
@@ -49,6 +49,27 @@
#define safesnprintf(buf,sz,fmt,...) (strlib->safesnprintf_((buf),(sz),(fmt),##__VA_ARGS__))
#define strline(str,pos) (strlib->strline_((str),(pos)))
#define bin2hex(output,input,count) (strlib->bin2hex_((output),(input),(count)))
+#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L)
+#if defined(__GNUC__) && !defined(__clang__) && GCC_VERSION < 40900
+// _Generic is only supported starting with GCC 4.9
+#else
+#ifdef strchr
+#undef strchr
+#endif // strchr
+#define strchr(src, chr) _Generic((src), \
+ const char * : ((const char *)(strchr)((src), (chr))), \
+ char * : ((strchr)((src), (chr))) \
+ )
+#define strrchr(src, chr) _Generic((src), \
+ const char * : ((const char *)(strrchr)((src), (chr))), \
+ char * : ((strrchr)((src), (chr))) \
+ )
+#define strstr(haystack, needle) _Generic((haystack), \
+ const char * : ((const char *)(strstr)((haystack), (needle))), \
+ char * : ((strstr)((haystack), (needle))) \
+ )
+#endif
+#endif
/// Bitfield determining the behavior of sv_parse and sv_split.
typedef enum e_svopt {
diff --git a/src/config/const.h b/src/config/const.h
index 3b35e354e..4767b5721 100644
--- a/src/config/const.h
+++ b/src/config/const.h
@@ -114,11 +114,6 @@
} while(0)
#endif
-/* console_input doesn't go well with minicore */
-#ifdef MINICORE
- #undef CONSOLE_INPUT
-#endif
-
/**
* End of File
**/
diff --git a/src/map/Makefile.in b/src/map/Makefile.in
index 1bef380e1..3705fda0e 100644
--- a/src/map/Makefile.in
+++ b/src/map/Makefile.in
@@ -50,12 +50,12 @@ MAP_OBJ = $(addprefix obj_sql/, $(patsubst %c,%o,$(MAP_C)))
MAP_H = achievement.h atcommand.h battle.h battleground.h buyingstore.h channel.h chat.h \
chrif.h clan.h clif.h date.h duel.h elemental.h guild.h homunculus.h HPMmap.h \
instance.h intif.h irc-bot.h itemdb.h log.h mail.h map.h mapreg.h \
- mercenary.h messages.h messages_main.h messages_re.h messages_zero.h \
- mob.h npc.h packets.h packets_keys_main.h packets_keys_zero.h \
- packets_shuffle_main.h packets_shuffle_re.h packets_shuffle_zero.h \
- packets_struct.h party.h path.h pc.h pc_groups.h pet.h quest.h rodex.h \
- script.h searchstore.h skill.h status.h storage.h trade.h unit.h \
- vending.h
+ mercenary.h messages.h messages_ad.h messages_main.h messages_re.h \
+ messages_sak.h messages_zero.h mob.h npc.h packets.h packets_keys_main.h \
+ packets_keys_zero.h packets_shuffle_main.h packets_shuffle_re.h \
+ packets_shuffle_zero.h packets_struct.h party.h path.h pc.h pc_groups.h \
+ pet.h quest.h rodex.h script.h searchstore.h skill.h status.h storage.h \
+ trade.h unit.h vending.h
MAP_PH =
HAVE_MYSQL=@HAVE_MYSQL@
diff --git a/src/map/achievement.c b/src/map/achievement.c
index 6abdb74ee..7148acae8 100644
--- a/src/map/achievement.c
+++ b/src/map/achievement.c
@@ -733,7 +733,7 @@ static void achievement_validate_zeny(struct map_session_data *sd, int amount)
achievement->validate_type(sd, ACH_ZENY_GET_ONCE, &criteria, false);
achievement->validate_type(sd, ACH_ZENY_GET_TOTAL, &criteria, true);
} else {
- criteria.goal = amount;
+ criteria.goal = -amount;
achievement->validate_type(sd, ACH_ZENY_SPEND_ONCE, &criteria, false);
achievement->validate_type(sd, ACH_ZENY_SPEND_TOTAL, &criteria, true);
}
@@ -772,6 +772,10 @@ static void achievement_validate_refine(struct map_session_data *sd, unsigned in
criteria.goal = sd->status.inventory[idx].refine;
+ // achievement should not trigger if refine is 0
+ if (criteria.goal == 0)
+ return;
+
/* Universal */
achievement->validate_type(sd,
success ? ACH_EQUIP_REFINE_SUCCESS : ACH_EQUIP_REFINE_FAILURE,
@@ -1016,44 +1020,56 @@ static bool achievement_check_title(struct map_session_data *sd, int title_id) {
return false;
}
-/**
- * Achievement rewards are given to player
- * @param sd session data
- * @param ad achievement data
- */
-static void achievement_get_rewards(struct map_session_data *sd, const struct achievement_data *ad) {
- int i = 0;
- struct achievement *ach = NULL;
-
+static void achievement_get_rewards_buffs(struct map_session_data *sd, const struct achievement_data *ad)
+{
nullpo_retv(sd);
nullpo_retv(ad);
- if ((ach = achievement->ensure(sd, ad)) == NULL)
- return;
-
- /* Buff */
if (ad->rewards.bonus != NULL)
script->run(ad->rewards.bonus, 0, sd->bl.id, 0);
+}
- /* Give Items */
- for (i = 0; i < VECTOR_LENGTH(ad->rewards.item); i++) {
- struct item it = { 0 };
- int total = 0;
+// TODO: kro send items by rodex
+static void achievement_get_rewards_items(struct map_session_data *sd, const struct achievement_data *ad)
+{
+ nullpo_retv(sd);
+ nullpo_retv(ad);
- it.nameid = VECTOR_INDEX(ad->rewards.item, i).id;
- total = VECTOR_INDEX(ad->rewards.item, i).amount;
+ struct item it = { 0 };
+ it.identify = 1;
- it.identify = 1;
+ for (int i = 0; i < VECTOR_LENGTH(ad->rewards.item); i++) {
+ it.nameid = VECTOR_INDEX(ad->rewards.item, i).id;
+ int total = VECTOR_INDEX(ad->rewards.item, i).amount;
//Check if it's stackable.
if (!itemdb->isstackable(it.nameid)) {
- int j = 0;
- for (j = 0; j < total; ++j)
- pc->additem(sd, &it, (it.amount = 1), LOG_TYPE_SCRIPT);
+ it.amount = 1;
+ for (int j = 0; j < total; ++j)
+ pc->additem(sd, &it, 1, LOG_TYPE_SCRIPT);
} else {
- pc->additem(sd, &it, (it.amount = total), LOG_TYPE_SCRIPT);
+ it.amount = total;
+ pc->additem(sd, &it, total, LOG_TYPE_SCRIPT);
}
}
+}
+
+/**
+ * Achievement rewards are given to player
+ * @param sd session data
+ * @param ad achievement data
+ */
+static bool achievement_get_rewards(struct map_session_data *sd, const struct achievement_data *ad)
+{
+ nullpo_retr(false, sd);
+ nullpo_retr(false, ad);
+
+ struct achievement *ach = achievement->ensure(sd, ad);
+ if (ach == NULL)
+ return false;
+
+ /* Buff */
+ achievement->get_rewards_buffs(sd, ad);
ach->rewarded_at = time(NULL);
@@ -1062,9 +1078,14 @@ static void achievement_get_rewards(struct map_session_data *sd, const struct ac
VECTOR_PUSH(sd->title_ids, ad->rewards.title_id);
clif->achievement_send_list(sd->fd, sd);
} else {
- clif->achievement_reward_ack(sd->fd, sd, ad);
clif->achievement_send_update(sd->fd, sd, ad); // send update.
+ clif->achievement_reward_ack(sd->fd, sd, ad);
}
+
+ /* Give Items */
+ achievement->get_rewards_items(sd, ad);
+
+ return true;
}
/**
@@ -1088,7 +1109,7 @@ static void achievement_readdb_ranks(void)
}
while (entry < libconfig->setting_length(ardb) && entry < MAX_ACHIEVEMENT_RANKS) {
- char rank[8];
+ char rank[16];
if (!(conf = libconfig->setting_get_elem(ardb, entry))) {
ShowError("achievement_readdb_ranks: Could not read value for entry %d, skipping...\n", entry+1);
@@ -1977,4 +1998,6 @@ void achievement_defaults(void)
achievement->init_titles = achievement_init_titles;
achievement->check_title = achievement_check_title;
achievement->get_rewards = achievement_get_rewards;
+ achievement->get_rewards_buffs = achievement_get_rewards_buffs;
+ achievement->get_rewards_items = achievement_get_rewards_items;
}
diff --git a/src/map/achievement.h b/src/map/achievement.h
index beba120a2..de5eaa060 100644
--- a/src/map/achievement.h
+++ b/src/map/achievement.h
@@ -277,7 +277,9 @@ struct achievement_interface {
/* */
void (*init_titles) (struct map_session_data *sd);
bool (*check_title) (struct map_session_data *sd, int title_id);
- void (*get_rewards) (struct map_session_data *sd, const struct achievement_data *ad);
+ bool (*get_rewards) (struct map_session_data *sd, const struct achievement_data *ad);
+ void (*get_rewards_buffs) (struct map_session_data *sd, const struct achievement_data *ad);
+ void (*get_rewards_items) (struct map_session_data *sd, const struct achievement_data *ad);
};
#ifdef HERCULES_CORE
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index bedb58478..c8cca2aea 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -1131,7 +1131,7 @@ ACMD(heal)
}
if ( hp > 0 && sp >= 0 ) {
- if(!status->heal(&sd->bl, hp, sp, 0))
+ if (status->heal(&sd->bl, hp, sp, STATUS_HEAL_DEFAULT) == 0)
clif->message(fd, msg_fd(fd,157)); // HP and SP are already with the good value.
else
clif->message(fd, msg_fd(fd,17)); // HP, SP recovered.
@@ -1148,7 +1148,7 @@ ACMD(heal)
//Opposing signs.
if ( hp ) {
if (hp > 0)
- status->heal(&sd->bl, hp, 0, 0);
+ status->heal(&sd->bl, hp, 0, STATUS_HEAL_DEFAULT);
else {
status->damage(NULL, &sd->bl, -hp, 0, 0, 0);
clif->damage(&sd->bl,&sd->bl, 0, 0, -hp, 0, BDT_ENDURE, 0);
@@ -1157,7 +1157,7 @@ ACMD(heal)
if ( sp ) {
if (sp > 0)
- status->heal(&sd->bl, 0, sp, 0);
+ status->heal(&sd->bl, 0, sp, STATUS_HEAL_DEFAULT);
else
status->damage(NULL, &sd->bl, 0, -sp, 0, 0);
}
@@ -1776,18 +1776,7 @@ ACMD(bodystyle)
memset(atcmd_output, '\0', sizeof(atcmd_output));
- if ((sd->job & MAPID_THIRDMASK) != MAPID_GUILLOTINE_CROSS
- && (sd->job & MAPID_THIRDMASK) != MAPID_GENETIC
- && (sd->job & MAPID_THIRDMASK) != MAPID_MECHANIC
- && (sd->job & MAPID_THIRDMASK) != MAPID_ROYAL_GUARD
- && (sd->job & MAPID_THIRDMASK) != MAPID_ARCH_BISHOP
- && (sd->job & MAPID_THIRDMASK) != MAPID_RANGER
- && (sd->job & MAPID_THIRDMASK) != MAPID_WARLOCK
- && (sd->job & MAPID_THIRDMASK) != MAPID_SHADOW_CHASER
- && (sd->job & MAPID_THIRDMASK) != MAPID_MINSTRELWANDERER
- && (sd->job & MAPID_THIRDMASK) != MAPID_SORCERER
- && (sd->job & MAPID_THIRDMASK) != MAPID_SURA
- ) {
+ if (!pc->has_second_costume(sd)) {
clif->message(fd, msg_fd(fd, 35)); // This job has no alternate body styles.
return false;
}
@@ -1887,6 +1876,63 @@ ACMD(hair_color)
return true;
}
+ACMD(setzone)
+{
+ char zone_name[MAP_ZONE_MAPFLAG_LENGTH];
+ memset(zone_name, '\0', sizeof(zone_name));
+
+ char fmt_str[8] = "";
+ safesnprintf(fmt_str, 8, "%%%ds", MAP_ZONE_MAPFLAG_LENGTH - 1);
+
+ if (*message == '\0' || sscanf(message, fmt_str, zone_name) < 1) {
+ clif->message(fd, msg_fd(fd, 924)); // usage info
+ return false;
+ }
+
+ struct map_zone_data *zone = strdb_get(map->zone_db, zone_name);
+ const char *prev_zone_name = map->list[sd->bl.m].zone->name;
+
+ // handle special zones:
+ if (zone == NULL && strcmp(zone_name, MAP_ZONE_NORMAL_NAME) == 0) {
+ zone = &map->zone_all;
+ } else if (zone == NULL && strcmp(zone_name, MAP_ZONE_PK_NAME) == 0) {
+ zone = &map->zone_pk;
+ }
+
+ if (zone != NULL) {
+ if (map->list[sd->bl.m].zone != zone) {
+ if (strcmp(prev_zone_name, MAP_ZONE_PVP_NAME) == 0) {
+ atcommand_pvpoff(fd, sd, command, message, info);
+ } else if (strcmp(prev_zone_name, MAP_ZONE_GVG_NAME) == 0) {
+ atcommand_gvgoff(fd, sd, command, message, info);
+ } else if (strcmp(prev_zone_name, MAP_ZONE_CVC_NAME) == 0) {
+ atcommand_cvcoff(fd, sd, command, message, info);
+ }
+ } else {
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 925), zone_name);
+ clif->message(fd, atcmd_output); // nothing to do
+ return false;
+ }
+
+ if (strcmp(zone_name, MAP_ZONE_PVP_NAME) == 0) {
+ atcommand_pvpon(fd, sd, command, message, info);
+ } else if (strcmp(zone_name, MAP_ZONE_GVG_NAME) == 0) {
+ atcommand_gvgon(fd, sd, command, message, info);
+ } else if (strcmp(zone_name, MAP_ZONE_CVC_NAME) == 0) {
+ atcommand_cvcon(fd, sd, command, message, info);
+ } else {
+ map->zone_change2(sd->bl.m, zone);
+ }
+ } else {
+ clif->message(fd, msg_fd(fd, 926)); // zone not found
+ return false;
+ }
+
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 927), prev_zone_name, zone_name);
+ clif->message(fd, atcmd_output); // changed successfully
+ return true;
+}
+
/*==========================================
* @go [city_number or city_name] - Updated by Harbin
*------------------------------------------*/
@@ -4240,7 +4286,7 @@ ACMD(repairall)
if (count > 0) {
clif->misceffect(&sd->bl, 3);
- clif->equiplist(sd);
+ clif->equipList(sd);
clif->message(fd, msg_fd(fd,107)); // All items have been repaired.
} else {
clif->message(fd, msg_fd(fd,108)); // No item need to be repaired.
@@ -7688,7 +7734,7 @@ ACMD(mapflag)
CHECKFLAG(nojobexp); CHECKFLAG(nomobloot); CHECKFLAG(nomvploot); CHECKFLAG(nightenabled);
CHECKFLAG(nodrop); CHECKFLAG(novending); CHECKFLAG(loadevent);
CHECKFLAG(nochat); CHECKFLAG(partylock); CHECKFLAG(guildlock); CHECKFLAG(src4instance);
- CHECKFLAG(notomb); CHECKFLAG(nocashshop); CHECKFLAG(noviewid);
+ CHECKFLAG(notomb); CHECKFLAG(nocashshop); CHECKFLAG(noviewid); CHECKFLAG(town);
clif->message(sd->fd," ");
clif->message(sd->fd,msg_fd(fd,1312)); // Usage: "@mapflag monster_noteleport 1" (0=Off | 1=On)
clif->message(sd->fd,msg_fd(fd,1313)); // Type "@mapflag available" to list the available mapflags.
@@ -7730,6 +7776,7 @@ ACMD(mapflag)
SETFLAG(nomvploot); SETFLAG(nightenabled); SETFLAG(nodrop); SETFLAG(novending);
SETFLAG(loadevent); SETFLAG(nochat); SETFLAG(partylock); SETFLAG(guildlock);
SETFLAG(src4instance); SETFLAG(notomb); SETFLAG(nocashshop); SETFLAG(noviewid);
+ SETFLAG(town);
clif->message(sd->fd, msg_fd(fd, 1314)); // Invalid flag name or flag.
@@ -8680,19 +8727,19 @@ ACMD(set)
const char *str = NULL;
switch (reg[0]) {
case '@':
- str = pc->readregstr(sd, script->add_str(reg));
+ str = pc->readregstr(sd, script->add_variable(reg));
break;
case '$':
- str = mapreg->readregstr(script->add_str(reg));
+ str = mapreg->readregstr(script->add_variable(reg));
break;
case '#':
if (reg[1] == '#')
- str = pc_readaccountreg2str(sd, script->add_str(reg));// global
+ str = pc_readaccountreg2str(sd, script->add_variable(reg));// global
else
- str = pc_readaccountregstr(sd, script->add_str(reg));// local
+ str = pc_readaccountregstr(sd, script->add_variable(reg));// local
break;
default:
- str = pc_readglobalreg_str(sd, script->add_str(reg));
+ str = pc_readglobalreg_str(sd, script->add_variable(reg));
break;
}
if (str == NULL || str[0] == '\0') {
@@ -8708,19 +8755,19 @@ ACMD(set)
data->type = C_INT;
switch( reg[0] ) {
case '@':
- data->u.num = pc->readreg(sd, script->add_str(reg));
+ data->u.num = pc->readreg(sd, script->add_variable(reg));
break;
case '$':
- data->u.num = mapreg->readreg(script->add_str(reg));
+ data->u.num = mapreg->readreg(script->add_variable(reg));
break;
case '#':
if( reg[1] == '#' )
- data->u.num = pc_readaccountreg2(sd, script->add_str(reg));// global
+ data->u.num = pc_readaccountreg2(sd, script->add_variable(reg));// global
else
- data->u.num = pc_readaccountreg(sd, script->add_str(reg));// local
+ data->u.num = pc_readaccountreg(sd, script->add_variable(reg));// local
break;
default:
- data->u.num = pc_readglobalreg(sd, script->add_str(reg));
+ data->u.num = pc_readglobalreg(sd, script->add_variable(reg));
break;
}
}
@@ -9340,8 +9387,8 @@ ACMD(channel)
} else {
int v = atoi(sub3);
if (k == HCS_OPT_MSG_DELAY) {
- if (v < 0 || v > 10) {
- safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,1451), v, opt_str[k]);// value '%d' for option '%s' is out of range (limit is 0-10)
+ if (v < 0 || v > channel->config->channel_opt_msg_delay) {
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1451), v, opt_str[k], channel->config->channel_opt_msg_delay);// value '%d' for option '%s' is out of range (limit is 0-%d)
clif->message(fd, atcmd_output);
return false;
}
@@ -9752,6 +9799,24 @@ ACMD(reloadclans)
return true;
}
+// show camera window or change camera parameters
+ACMD(camerainfo)
+{
+ if (*message == '\0') {
+ clif->camera_showWindow(sd);
+ return true;
+ }
+ float range = 0;
+ float rotation = 0;
+ float latitude = 0;
+ if (sscanf(message, "%15f %15f %15f", &range, &rotation, &latitude) < 3) {
+ clif->message(fd, msg_fd(fd, 452)); // usage @camerainfo range rotation latitude
+ return false;
+ }
+ clif->camera_change(sd, range, rotation, latitude, SELF);
+ return true;
+}
+
/**
* Fills the reference of available commands in atcommand DBMap
**/
@@ -10033,6 +10098,8 @@ static void atcommand_basecommands(void)
ACMD_DEF(joinclan),
ACMD_DEF(leaveclan),
ACMD_DEF(reloadclans),
+ ACMD_DEF(setzone),
+ ACMD_DEF(camerainfo),
};
int i;
diff --git a/src/map/battle.c b/src/map/battle.c
index 8f5200e72..f51240810 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -2876,7 +2876,7 @@ static int64 battle_calc_damage(struct block_list *src, struct block_list *bl, s
if( sc->data[SC__MAELSTROM] && (flag&BF_MAGIC) && skill_id && (skill->get_inf(skill_id)&INF_GROUND_SKILL) ) {
// {(Maelstrom Skill LevelxAbsorbed Skill Level)+(Caster's Job/5)}/2
int sp = (sc->data[SC__MAELSTROM]->val1 * skill_lv + (t_sd ? t_sd->status.job_level / 5 : 0)) / 2;
- status->heal(bl, 0, sp, 3);
+ status->heal(bl, 0, sp, STATUS_HEAL_FORCED | STATUS_HEAL_SHOWEFFECT);
d->dmg_lv = ATK_BLOCK;
return 0;
}
@@ -3247,7 +3247,7 @@ static int64 battle_calc_damage(struct block_list *src, struct block_list *bl, s
//(since battle_drain is strictly for players currently)
if ((sce=sc->data[SC_HAMI_BLOODLUST]) && flag&BF_WEAPON && damage > 0 &&
rnd()%100 < sce->val3)
- status->heal(src, damage*sce->val4/100, 0, 3);
+ status->heal(src, damage*sce->val4/100, 0, STATUS_HEAL_FORCED | STATUS_HEAL_SHOWEFFECT);
if( (sce = sc->data[SC_FORCEOFVANGUARD]) && flag&BF_WEAPON
&& rnd()%100 < sce->val2 && sc->fv_counter <= sce->val3 )
@@ -4343,6 +4343,8 @@ static struct Damage battle_calc_misc_attack(struct block_list *src, struct bloc
}
break;
}
+
+ battle->reflect_trap(target, src, &md, skill_id);
return md;
}
@@ -6013,6 +6015,37 @@ static void battle_reflect_damage(struct block_list *target, struct block_list *
#undef NORMALIZE_RDAMAGE
}
+/**
+ * Reflects damage from certain traps, if battle_config.trap_reflect is true.
+ * @param target : Player who triggered the trap
+ * @param src : Player who set the trap
+ * @param md : Trap damage structure
+ * @param skill_id : Trap skill ID
+ */
+static void battle_reflect_trap(struct block_list *target, struct block_list *src, struct Damage *md, uint16 skill_id)
+{
+ if (battle_config.trap_reflect == true) {
+ if (src != target) { // Don't reflect your own damage
+ switch (skill_id) {
+ case HT_CLAYMORETRAP:
+ case HT_LANDMINE:
+ case HT_FREEZINGTRAP:
+ case HT_BLASTMINE:
+ // Needs official info
+ //case RA_CLUSTERBOMB:
+ //case RA_FIRINGTRAP:
+ //case RA_ICEBOUNDTRAP:
+ //case GN_THORNS_TRAP:
+ //case KO_MAKIBISHI:
+ case MA_LANDMINE:
+ case MA_FREEZINGTRAP:
+ battle->reflect_damage(target, src, md, skill_id);
+ break;
+ }
+ }
+ }
+}
+
static void battle_drain(struct map_session_data *sd, struct block_list *tbl, int64 rdamage, int64 ldamage, int race, int boss)
{
struct weapon_data *wd;
@@ -6066,7 +6099,7 @@ static void battle_drain(struct map_session_data *sd, struct block_list *tbl, in
if (!thp && !tsp) return;
- status->heal(&sd->bl, thp, tsp, battle_config.show_hp_sp_drain ? 3 : 1);
+ status->heal(&sd->bl, thp, tsp, STATUS_HEAL_FORCED | (battle_config.show_hp_sp_drain ? STATUS_HEAL_SHOWEFFECT : STATUS_HEAL_DEFAULT));
if (rhp || rsp)
status_zap(tbl, rhp, rsp);
@@ -7330,6 +7363,7 @@ static const struct battle_data {
* Hercules
**/
{ "skill_trap_type", &battle_config.skill_trap_type, 0, 0, 1, },
+ { "trap_reflect", &battle_config.trap_reflect, 1, 0, 1, },
{ "item_restricted_consumption_type", &battle_config.item_restricted_consumption_type,1, 0, 1, },
{ "unequip_restricted_equipment", &battle_config.unequip_restricted_equipment, 0, 0, 3, },
{ "max_walk_path", &battle_config.max_walk_path, 17, 1, MAX_WALKPATH, },
@@ -7376,6 +7410,9 @@ static const struct battle_data {
{ "storage_use_item", &battle_config.storage_use_item, 0, 0, 1, },
{ "features/enable_attendance_system", &battle_config.feature_enable_attendance_system,1, 0, 1, },
{ "features/feature_attendance_endtime",&battle_config.feature_attendance_endtime, 1, 0, 99999999, },
+ { "min_item_buy_price", &battle_config.min_item_buy_price, 1, 0, INT_MAX, },
+ { "min_item_sell_price", &battle_config.min_item_sell_price, 0, 0, INT_MAX, },
+ { "display_fake_hp_when_dead", &battle_config.display_fake_hp_when_dead, 1, 0, 1, },
};
static bool battle_set_value_sub(int index, int value)
@@ -7619,6 +7656,7 @@ void battle_defaults(void)
battle->delay_damage = battle_delay_damage;
battle->drain = battle_drain;
battle->reflect_damage = battle_reflect_damage;
+ battle->reflect_trap = battle_reflect_trap;
battle->attr_ratio = battle_attr_ratio;
battle->attr_fix = battle_attr_fix;
battle->calc_cardfix = battle_calc_cardfix;
diff --git a/src/map/battle.h b/src/map/battle.h
index 9f5207e95..750753c08 100644
--- a/src/map/battle.h
+++ b/src/map/battle.h
@@ -506,6 +506,7 @@ struct Battle_Config {
/** Hercules **/
int skill_trap_type;
+ int trap_reflect;
int item_restricted_consumption_type;
int unequip_restricted_equipment;
int max_walk_path;
@@ -570,6 +571,11 @@ struct Battle_Config {
int feature_enable_attendance_system;
int feature_attendance_endtime;
+
+ int min_item_buy_price;
+ int min_item_sell_price;
+
+ int display_fake_hp_when_dead;
};
/* criteria for battle_config.idletime_critera */
@@ -636,6 +642,8 @@ struct battle_interface {
void (*drain) (struct map_session_data *sd, struct block_list *tbl, int64 rdamage, int64 ldamage, int race, int boss);
/* damage reflect */
void (*reflect_damage) (struct block_list *target, struct block_list *src, struct Damage *wd,uint16 skill_id);
+ /* trap reflect */
+ void(*reflect_trap) (struct block_list *target, struct block_list *src, struct Damage *md, uint16 skill_id);
/* attribute rate */
int (*attr_ratio) (int atk_elem, int def_type, int def_lv);
/* applies attribute modifiers */
diff --git a/src/map/battleground.c b/src/map/battleground.c
index 4bedc2a00..c2772a2b9 100644
--- a/src/map/battleground.c
+++ b/src/map/battleground.c
@@ -615,7 +615,7 @@ static void bg_match_over(struct bg_arena *arena, bool canceled)
if (canceled)
clif->messagecolor_self(sd->fd, COLOR_RED, "BG Match Canceled: not enough players");
else
- pc_setglobalreg(sd, script->add_str(arena->delay_var), (unsigned int)time(NULL));
+ pc_setglobalreg(sd, script->add_variable(arena->delay_var), (unsigned int)time(NULL));
}
arena->begin_timer = INVALID_TIMER;
@@ -654,8 +654,8 @@ static void bg_begin(struct bg_arena *arena)
bg->afk_timer_id = timer->add(timer->gettick()+10000,bg->afk_timer,0,0);
/* TODO: make this a arena-independent var? or just .@? */
- mapreg->setreg(script->add_str("$@bg_queue_id"),arena->queue_id);
- mapreg->setregstr(script->add_str("$@bg_delay_var$"),bg->gdelay_var);
+ mapreg->setreg(script->add_variable("$@bg_queue_id"),arena->queue_id);
+ mapreg->setregstr(script->add_variable("$@bg_delay_var$"),bg->gdelay_var);
count = 0;
for (i = 0; i < VECTOR_LENGTH(queue->entries); i++) {
@@ -664,20 +664,20 @@ static void bg_begin(struct bg_arena *arena)
if (sd == NULL || sd->bg_queue.ready != 1)
continue;
- mapreg->setreg(reference_uid(script->add_str("$@bg_member"), count), sd->status.account_id);
- mapreg->setreg(reference_uid(script->add_str("$@bg_member_group"), count),
+ mapreg->setreg(reference_uid(script->add_variable("$@bg_member"), count), sd->status.account_id);
+ mapreg->setreg(reference_uid(script->add_variable("$@bg_member_group"), count),
sd->bg_queue.type == BGQT_GUILD ? sd->status.guild_id :
sd->bg_queue.type == BGQT_PARTY ? sd->status.party_id :
0
);
- mapreg->setreg(reference_uid(script->add_str("$@bg_member_type"), count),
+ mapreg->setreg(reference_uid(script->add_variable("$@bg_member_type"), count),
sd->bg_queue.type == BGQT_GUILD ? 1 :
sd->bg_queue.type == BGQT_PARTY ? 2 :
0
);
count++;
}
- mapreg->setreg(script->add_str("$@bg_member_size"),count);
+ mapreg->setreg(script->add_variable("$@bg_member_size"),count);
npc->event_do(arena->npc_event);
}
@@ -857,7 +857,7 @@ static enum BATTLEGROUNDS_QUEUE_ACK bg_canqueue(struct map_session_data *sd, str
tsec = (unsigned int)time(NULL);
- if ( ( tick = pc_readglobalreg(sd, script->add_str(bg->gdelay_var)) ) && tsec < tick ) {
+ if ( ( tick = pc_readglobalreg(sd, script->add_variable(bg->gdelay_var)) ) && tsec < tick ) {
char response[100];
if( (tick-tsec) > 60 )
sprintf(response, "You are a deserter! Wait %u minute(s) before you can apply again", (tick - tsec) / 60);
@@ -867,7 +867,7 @@ static enum BATTLEGROUNDS_QUEUE_ACK bg_canqueue(struct map_session_data *sd, str
return BGQA_FAIL_DESERTER;
}
- if ( ( tick = pc_readglobalreg(sd, script->add_str(arena->delay_var)) ) && tsec < tick ) {
+ if ( ( tick = pc_readglobalreg(sd, script->add_variable(arena->delay_var)) ) && tsec < tick ) {
char response[100];
if( (tick-tsec) > 60 )
sprintf(response, "You can't reapply to this arena so fast. Apply to the different arena or wait %u minute(s)", (tick - tsec) / 60);
diff --git a/src/map/channel.c b/src/map/channel.c
index 3bb2016d8..3ba56b100 100644
--- a/src/map/channel.c
+++ b/src/map/channel.c
@@ -276,7 +276,9 @@ static void channel_send(struct channel_data *chan, struct map_session_data *sd,
if (sd && chan->msg_delay != 0
&& DIFF_TICK(sd->hchsysch_tick + chan->msg_delay*1000, timer->gettick()) > 0
&& !pc_has_permission(sd, PC_PERM_HCHSYS_ADMIN)) {
- clif->messagecolor_self(sd->fd, COLOR_RED, msg_sd(sd,1455));
+ char output[CHAT_SIZE_MAX];
+ sprintf(output, msg_sd(sd, 1455), DIFF_TICK(sd->hchsysch_tick + chan->msg_delay * 1000, timer->gettick()) / 1000); // "You cannot send a message to this channel for another %d seconds."
+ clif->messagecolor_self(sd->fd, COLOR_RED, output);
return;
} else if (sd) {
int i;
@@ -290,7 +292,7 @@ static void channel_send(struct channel_data *chan, struct map_session_data *sd,
for (i = 0; i < MAX_EVENTQUEUE; i++) {
if (chan->handlers[i][0] != '\0') {
- pc->setregstr(sd, script->add_str("@channelmes$"), msg);
+ pc->setregstr(sd, script->add_variable("@channelmes$"), msg);
npc->event(sd, chan->handlers[i], 0);
}
}
@@ -622,7 +624,8 @@ static void read_channels_config(void)
irc_autojoin = 0,
irc_flood_protection_rate = 0,
irc_flood_protection_burst = 0,
- irc_flood_protection_enabled = 0;
+ irc_flood_protection_enabled = 0,
+ channel_opt_msg_delay = 10;
if( !libconfig->setting_lookup_string(settings, "map_local_channel_name", &local_name) )
local_name = "map";
@@ -818,6 +821,16 @@ static void read_channels_config(void)
}
}
+ libconfig->setting_lookup_int(settings, "channel_opt_msg_delay", &channel_opt_msg_delay);
+ if (channel_opt_msg_delay < 0) {
+ ShowWarning("channels.conf: channel_opt_msg_delay value '%d' must be from 0-255. Defaulting to 0...\n", channel_opt_msg_delay);
+ channel_opt_msg_delay = 0;
+ } else if (channel_opt_msg_delay > 255) {
+ ShowWarning("channels.conf: channel_opt_msg_delay value '%d' must be from 0-255. Defaulting to 255...\n", channel_opt_msg_delay);
+ channel_opt_msg_delay = 255;
+ }
+ channel->config->channel_opt_msg_delay = channel_opt_msg_delay;
+
ShowStatus("Done reading '"CL_WHITE"%u"CL_RESET"' channels in '"CL_WHITE"%s"CL_RESET"'.\n", db_size(channel->db), config_filename);
}
libconfig->destroy(&channels_conf);
diff --git a/src/map/channel.h b/src/map/channel.h
index 4ac3c6037..c56227c66 100644
--- a/src/map/channel.h
+++ b/src/map/channel.h
@@ -75,6 +75,7 @@ struct Channel_Config {
char irc_server[40], irc_channel[50], irc_nick[40], irc_nick_pw[30];
unsigned short irc_server_port;
bool irc_use_ghost;
+ int channel_opt_msg_delay;
};
struct channel_ban_entry {
diff --git a/src/map/clif.c b/src/map/clif.c
index 092ffe2c7..d1ff201ad 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -86,8 +86,8 @@ static struct s_packet_db packet_db[MAX_PACKET_DB + 1];
/* re-usable */
static struct packet_itemlist_normal itemlist_normal;
static struct packet_itemlist_equip itemlist_equip;
-static struct packet_storelist_normal storelist_normal;
-static struct packet_storelist_equip storelist_equip;
+static struct ZC_STORE_ITEMLIST_NORMAL storelist_normal;
+static struct ZC_STORE_ITEMLIST_EQUIP storelist_equip;
static struct packet_viewequip_ack viewequip_list;
#if PACKETVER >= 20131223
static struct packet_npc_market_result_ack npcmarket_result;
@@ -2633,6 +2633,22 @@ static void clif_dropitem(struct map_session_data *sd, int n, int amount)
WFIFOSET(fd,packet_len(0xaf));
}
+static void clif_item_movefailed(struct map_session_data *sd, int n)
+{
+#if PACKETVER_MAIN_NUM >= 20161214 || PACKETVER_RE_NUM >= 20161130 || defined(PACKETVER_ZERO)
+ int fd = sd->fd;
+ const int len = sizeof(struct PACKET_ZC_INVENTORY_MOVE_FAILED);
+ WFIFOHEAD(fd, len);
+ struct PACKET_ZC_INVENTORY_MOVE_FAILED *p = WFIFOP(fd, 0);
+ p->packetType = 0xaa7;
+ p->index = n + 2;
+ p->unknown = 1;
+ WFIFOSET(fd, len);
+#else
+ clif->dropitem(sd, n, 0);
+#endif
+}
+
/// Notifies the client, that an inventory item was deleted (ZC_DELETE_ITEM_FROM_BODY).
/// 07fa <delete type>.W <index>.W <amount>.W
/// delete type: @see enum delitem_reason
@@ -2771,7 +2787,18 @@ static void clif_item_normal(short idx, struct NORMALITEM_INFO *p, struct item *
#endif
}
-static void clif_inventorylist(struct map_session_data *sd)
+static void clif_inventoryList(struct map_session_data *sd)
+{
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ clif->inventoryStart(sd, INVTYPE_INVENTORY, "");
+#endif
+ clif->inventoryItems(sd, INVTYPE_INVENTORY);
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ clif->inventoryEnd(sd, INVTYPE_INVENTORY);
+#endif
+}
+
+static void clif_inventoryItems(struct map_session_data *sd, enum inventory_type type)
{
int i, normal = 0, equip = 0;
@@ -2786,9 +2813,12 @@ static void clif_inventorylist(struct map_session_data *sd)
clif->item_normal(i+2,&itemlist_normal.list[normal++],&sd->status.inventory[i],sd->inventory_data[i]);
}
- if( normal ) {
- itemlist_normal.PacketType = inventorylistnormalType;
- itemlist_normal.PacketLength = 4 + (sizeof(struct NORMALITEM_INFO) * normal);
+ if (normal) {
+ itemlist_normal.PacketType = inventorylistnormalType;
+ itemlist_normal.PacketLength = (sizeof(itemlist_normal) - sizeof(itemlist_normal.list)) + (sizeof(struct NORMALITEM_INFO) * normal);
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ itemlist_normal.invType = type;
+#endif
clif->send(&itemlist_normal, itemlist_normal.PacketLength, &sd->bl, SELF);
}
@@ -2798,7 +2828,10 @@ static void clif_inventorylist(struct map_session_data *sd)
if( equip ) {
itemlist_equip.PacketType = inventorylistequipType;
- itemlist_equip.PacketLength = 4 + (sizeof(struct EQUIPITEM_INFO) * equip);
+ itemlist_equip.PacketLength = (sizeof(itemlist_equip) - sizeof(itemlist_equip.list)) + (sizeof(struct EQUIPITEM_INFO) * equip);
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ itemlist_equip.invType = type;
+#endif
clif->send(&itemlist_equip, itemlist_equip.PacketLength, &sd->bl, SELF);
}
@@ -2814,8 +2847,20 @@ static void clif_inventorylist(struct map_session_data *sd)
#endif
}
+static void clif_equipList(struct map_session_data *sd)
+{
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ clif->inventoryStart(sd, INVTYPE_INVENTORY, "");
+ clif->inventoryItems(sd, INVTYPE_INVENTORY);
+ clif->inventoryEnd(sd, INVTYPE_INVENTORY);
+#else
+ // [4144] for old packet version it send only equipment. this is bug?
+ clif->equipItems(sd, INVTYPE_INVENTORY);
+#endif
+}
+
//Required when items break/get-repaired. Only sends equippable item list.
-static void clif_equiplist(struct map_session_data *sd)
+static void clif_equipItems(struct map_session_data *sd, enum inventory_type type)
{
int i, equip = 0;
@@ -2828,9 +2873,12 @@ static void clif_equiplist(struct map_session_data *sd)
clif->item_equip(i+2,&itemlist_equip.list[equip++],&sd->status.inventory[i],sd->inventory_data[i],pc->equippoint(sd,i));
}
- if( equip ) {
- itemlist_equip.PacketType = inventorylistequipType;
- itemlist_equip.PacketLength = 4 + (sizeof(struct EQUIPITEM_INFO) * equip);
+ if (equip) {
+ itemlist_equip.PacketType = inventorylistequipType;
+ itemlist_equip.PacketLength = (sizeof(itemlist_equip) - sizeof(itemlist_equip.list)) + (sizeof(struct EQUIPITEM_INFO) * equip);
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ itemlist_equip.invType = type;
+#endif
clif->send(&itemlist_equip, itemlist_equip.PacketLength, &sd->bl, SELF);
}
@@ -2847,13 +2895,74 @@ static void clif_equiplist(struct map_session_data *sd)
#endif
}
-static void clif_storagelist(struct map_session_data *sd, struct item *items, int items_length)
+static void clif_storageList(struct map_session_data *sd, struct item *items, int items_length)
{
- int i = 0;
- struct item_data *id;
+ nullpo_retv(sd);
+
+ clif->inventoryStart(sd, INVTYPE_STORAGE, "Storage");
+ if (sd->storage.aggregate > 0)
+ clif->storageItems(sd, INVTYPE_STORAGE, items, items_length);
+ clif->inventoryEnd(sd, INVTYPE_STORAGE);
+}
+
+static void clif_guildStorageList(struct map_session_data *sd, struct item *items, int items_length)
+{
+ clif->inventoryStart(sd, INVTYPE_GUILD_STORAGE, "Guild storage");
+ clif->storageItems(sd, INVTYPE_GUILD_STORAGE, items, items_length);
+ clif->inventoryEnd(sd, INVTYPE_GUILD_STORAGE);
+}
+static void clif_inventoryStart(struct map_session_data *sd, enum inventory_type type, const char *name)
+{
+#if PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ nullpo_retv(sd);
+ nullpo_retv(name);
+
+ char buf[sizeof(struct ZC_INVENTORY_START) + 24];
+ memset(buf, 0, sizeof(buf));
+ struct ZC_INVENTORY_START *p = (struct ZC_INVENTORY_START *)buf;
+ p->packetType = 0xb08;
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ p->invType = type;
+#endif
+#if PACKETVER_RE_NUM >= 20180919 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ int strLen = (int)safestrnlen(name, 24);
+ if (strLen > 24)
+ strLen = 24;
+ const int len = sizeof(struct ZC_INVENTORY_START) + strLen;
+ p->packetLength = len;
+ safestrncpy(p->name, name, strLen);
+#else
+ const int len = sizeof(struct ZC_INVENTORY_START);
+ safestrncpy(p->name, name, NAME_LENGTH);
+#endif
+ clif->send(p, len, &sd->bl, SELF);
+#endif
+}
+
+static void clif_inventoryEnd(struct map_session_data *sd, enum inventory_type type)
+{
+#if PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ nullpo_retv(sd);
+
+ struct ZC_INVENTORY_END p;
+ p.packetType = 0xb0b;
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ p.invType = type;
+#endif
+ p.flag = 0;
+ clif->send(&p, sizeof(p), &sd->bl, SELF);
+#endif
+}
+
+static void clif_storageItems(struct map_session_data *sd, enum inventory_type type, struct item *items, int items_length)
+{
nullpo_retv(sd);
nullpo_retv(items);
+
+ int i = 0;
+ struct item_data *id;
+
do {
int normal = 0, equip = 0, k = 0;
@@ -2871,10 +2980,13 @@ static void clif_storagelist(struct map_session_data *sd, struct item *items, in
}
if( normal ) {
- storelist_normal.PacketType = storagelistnormalType;
+ storelist_normal.PacketType = storageListNormalType;
storelist_normal.PacketLength = ( sizeof( storelist_normal ) - sizeof( storelist_normal.list ) ) + (sizeof(struct NORMALITEM_INFO) * normal);
-#if PACKETVER >= 20120925
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ storelist_normal.invType = type;
+#endif
+#if PACKETVER >= 20120925 && PACKETVER_RE_NUM < 20180829 && PACKETVER_ZERO_NUM < 20180919 && PACKETVER_MAIN_NUM < 20181002
safestrncpy(storelist_normal.name, "Storage", NAME_LENGTH);
#endif
@@ -2882,10 +2994,13 @@ static void clif_storagelist(struct map_session_data *sd, struct item *items, in
}
if( equip ) {
- storelist_equip.PacketType = storagelistequipType;
+ storelist_equip.PacketType = storageListEquipType;
storelist_equip.PacketLength = ( sizeof( storelist_equip ) - sizeof( storelist_equip.list ) ) + (sizeof(struct EQUIPITEM_INFO) * equip);
-#if PACKETVER >= 20120925
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ storelist_equip.invType = type;
+#endif
+#if PACKETVER >= 20120925 && PACKETVER_RE_NUM < 20180829 && PACKETVER_ZERO_NUM < 20180919 && PACKETVER_MAIN_NUM < 20181002
safestrncpy(storelist_equip.name, "Storage", NAME_LENGTH);
#endif
@@ -2896,7 +3011,18 @@ static void clif_storagelist(struct map_session_data *sd, struct item *items, in
}
-static void clif_cartlist(struct map_session_data *sd)
+static void clif_cartList(struct map_session_data *sd)
+{
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ clif->inventoryStart(sd, INVTYPE_CART, "");
+#endif
+ clif->cartItems(sd, INVTYPE_CART);
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ clif->inventoryEnd(sd, INVTYPE_CART);
+#endif
+}
+
+static void clif_cartItems(struct map_session_data *sd, enum inventory_type type)
{
int i, normal = 0, equip = 0;
struct item_data *id;
@@ -2914,16 +3040,22 @@ static void clif_cartlist(struct map_session_data *sd)
clif->item_normal(i+2,&itemlist_normal.list[normal++],&sd->status.cart[i],id);
}
- if( normal ) {
- itemlist_normal.PacketType = cartlistnormalType;
- itemlist_normal.PacketLength = 4 + (sizeof(struct NORMALITEM_INFO) * normal);
+ if (normal) {
+ itemlist_normal.PacketType = cartlistnormalType;
+ itemlist_normal.PacketLength = (sizeof(itemlist_normal) - sizeof(itemlist_normal.list)) + (sizeof(struct NORMALITEM_INFO) * normal);
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ itemlist_normal.invType = type;
+#endif
clif->send(&itemlist_normal, itemlist_normal.PacketLength, &sd->bl, SELF);
}
- if( equip ) {
- itemlist_equip.PacketType = cartlistequipType;
- itemlist_equip.PacketLength = 4 + (sizeof(struct EQUIPITEM_INFO) * equip);
+ if (equip) {
+ itemlist_equip.PacketType = cartlistequipType;
+ itemlist_equip.PacketLength = (sizeof(itemlist_equip) - sizeof(itemlist_equip.list)) + (sizeof(struct EQUIPITEM_INFO) * equip);
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ itemlist_equip.invType = type;
+#endif
clif->send(&itemlist_equip, itemlist_equip.PacketLength, &sd->bl, SELF);
}
@@ -3112,7 +3244,12 @@ static void clif_updatestatus(struct map_session_data *sd, int type)
WFIFOL(fd,4)=sd->battle_status.max_sp;
break;
case SP_HP:
- WFIFOL(fd,4)=sd->battle_status.hp;
+ if (sd->battle_status.hp == 0 && battle_config.display_fake_hp_when_dead) {
+ // On official servers, the HP displayed when dead is the HP that the character will have at respawn.
+ WFIFOL(fd, 4) = status->get_restart_hp(sd, &sd->battle_status);
+ } else {
+ WFIFOL(fd, 4) = sd->battle_status.hp;
+ }
break;
case SP_SP:
WFIFOL(fd,4)=sd->battle_status.sp;
@@ -3157,13 +3294,13 @@ static void clif_updatestatus(struct map_session_data *sd, int type)
WFIFOL(fd,4)=pc_leftside_matk(sd);
break;
case SP_ZENY:
-// [4144] possible send 64 bit value from PACKETVER_MAIN_NUM >= 20170906 || PACKETVER_RE_NUM >= 20170830 || defined(PACKETVER_ZERO_NUM)
+// [4144] possible send 64 bit value from PACKETVER_MAIN_NUM >= 20170906 || PACKETVER_RE_NUM >= 20170830 || defined(PACKETVER_ZERO)
// but kro sending 0xb1 packet only.
WFIFOW(fd,0)=0xb1;
WFIFOL(fd,4)=sd->status.zeny;
len = packet_len(0xb1);
break;
-#if PACKETVER_MAIN_NUM >= 20170906 || PACKETVER_RE_NUM >= 20170830 || defined(PACKETVER_ZERO_NUM)
+#if PACKETVER_MAIN_NUM >= 20170906 || PACKETVER_RE_NUM >= 20170830 || defined(PACKETVER_ZERO)
case SP_BASEEXP:
WFIFOW(fd, 0) = 0xacb;
WFIFOQ(fd, 4) = sd->status.base_exp;
@@ -6180,6 +6317,7 @@ static void clif_wis_message(int fd, const char *nick, const char *mes, int mes_
/// 1 = target character is not logged in
/// 2 = ignored by target
/// 3 = everyone ignored by target
+/// other = target character is not logged in
static void clif_wis_end(int fd, int flag)
{
struct map_session_data *sd = sockt->session_is_valid(fd) ? sockt->session[fd]->session_data : NULL;
@@ -6191,7 +6329,7 @@ static void clif_wis_end(int fd, int flag)
p.PacketType = wisendType;
p.result = (char)flag;
#if PACKETVER >= 20131223
- p.unknown = 0;
+ p.AID = sd->bl.id;
#endif
clif->send(&p, sizeof(p), &sd->bl, SELF);
@@ -7370,44 +7508,43 @@ static void clif_pet_food(struct map_session_data *sd, int foodid, int fail)
/// 01cd { <skill id>.L }*7
static void clif_autospell(struct map_session_data *sd, uint16 skill_lv)
{
- int fd;
-
nullpo_retv(sd);
- fd=sd->fd;
- WFIFOHEAD(fd,packet_len(0x1cd));
- WFIFOW(fd, 0)=0x1cd;
+ int fd = sd->fd;
+#if PACKETVER_RE_NUM >= 20181031
+ // reserve space for 7 skills
+ WFIFOHEAD(fd, sizeof(struct PACKET_ZC_AUTOSPELLLIST) + 4 * 7);
+#else
+ WFIFOHEAD(fd, sizeof(struct PACKET_ZC_AUTOSPELLLIST));
+#endif
+ struct PACKET_ZC_AUTOSPELLLIST *p = WFIFOP(fd, 0);
+ memset(p, 0, sizeof(struct PACKET_ZC_AUTOSPELLLIST));
+ p->packetType = autoSpellList;
+ int index = 0;
- if(skill_lv>0 && pc->checkskill(sd,MG_NAPALMBEAT)>0)
- WFIFOL(fd,2)= MG_NAPALMBEAT;
- else
- WFIFOL(fd,2)= 0x00000000;
- if(skill_lv>1 && pc->checkskill(sd,MG_COLDBOLT)>0)
- WFIFOL(fd,6)= MG_COLDBOLT;
- else
- WFIFOL(fd,6)= 0x00000000;
- if(skill_lv>1 && pc->checkskill(sd,MG_FIREBOLT)>0)
- WFIFOL(fd,10)= MG_FIREBOLT;
- else
- WFIFOL(fd,10)= 0x00000000;
- if(skill_lv>1 && pc->checkskill(sd,MG_LIGHTNINGBOLT)>0)
- WFIFOL(fd,14)= MG_LIGHTNINGBOLT;
- else
- WFIFOL(fd,14)= 0x00000000;
- if(skill_lv>4 && pc->checkskill(sd,MG_SOULSTRIKE)>0)
- WFIFOL(fd,18)= MG_SOULSTRIKE;
- else
- WFIFOL(fd,18)= 0x00000000;
- if(skill_lv>7 && pc->checkskill(sd,MG_FIREBALL)>0)
- WFIFOL(fd,22)= MG_FIREBALL;
- else
- WFIFOL(fd,22)= 0x00000000;
- if(skill_lv>9 && pc->checkskill(sd,MG_FROSTDIVER)>0)
- WFIFOL(fd,26)= MG_FROSTDIVER;
- else
- WFIFOL(fd,26)= 0x00000000;
+ if (skill_lv > 0 && pc->checkskill(sd, MG_NAPALMBEAT) > 0)
+ p->skills[index++] = MG_NAPALMBEAT;
+ if (skill_lv > 1 && pc->checkskill(sd, MG_COLDBOLT) > 0)
+ p->skills[index++] = MG_COLDBOLT;
+ if (skill_lv > 1 && pc->checkskill(sd, MG_FIREBOLT) > 0)
+ p->skills[index++] = MG_FIREBOLT;
+ if (skill_lv > 1 && pc->checkskill(sd, MG_LIGHTNINGBOLT) > 0)
+ p->skills[index++] = MG_LIGHTNINGBOLT;
+ if (skill_lv > 4 && pc->checkskill(sd, MG_SOULSTRIKE) > 0)
+ p->skills[index++] = MG_SOULSTRIKE;
+ if (skill_lv > 7 && pc->checkskill(sd, MG_FIREBALL) > 0)
+ p->skills[index++] = MG_FIREBALL;
+ if (skill_lv > 9 && pc->checkskill(sd, MG_FROSTDIVER) > 0)
+ p->skills[index++] = MG_FROSTDIVER;
+
+#if PACKETVER_RE_NUM >= 20181031
+ const int len = sizeof(struct PACKET_ZC_AUTOSPELLLIST) + index * 4;
+ p->packetLength = len;
+#else
+ const int len = sizeof(struct PACKET_ZC_AUTOSPELLLIST);
+#endif
+ WFIFOSET(fd, len);
- WFIFOSET(fd,packet_len(0x1cd));
sd->menuskill_id = SA_AUTOSPELL;
sd->menuskill_val = skill_lv;
}
@@ -7554,22 +7691,16 @@ static void clif_mvp_item(struct map_session_data *sd, int nameid)
/// 010b <exp>.L
static void clif_mvp_exp(struct map_session_data *sd, unsigned int exp)
{
-#if PACKETVER >= 20131223 // Kro removed this packet [Napster]
- if (battle_config.mvp_exp_reward_message) {
- char e_msg[CHAT_SIZE_MAX];
- sprintf(e_msg, msg_txt(855), exp);
- clif->messagecolor_self(sd->fd, COLOR_CYAN, e_msg); // Congratulations! You are the MVP! Your reward EXP Points are %u !!
- }
-#else
+#if PACKETVER_RE_NUM >= 20080827 || PACKETVER_MAIN_NUM >= 20090401 || defined(PACKETVER_ZERO)
int fd;
nullpo_retv(sd);
- fd=sd->fd;
- WFIFOHEAD(fd,packet_len(0x10b));
- WFIFOW(fd,0)=0x10b;
- WFIFOL(fd,2)=cap_value(exp,0,INT32_MAX);
- WFIFOSET(fd,packet_len(0x10b));
+ fd = sd->fd;
+ WFIFOHEAD(fd, packet_len(0x10b));
+ WFIFOW(fd, 0) = 0x10b;
+ WFIFOL(fd, 2) = cap_value(exp, 0, INT32_MAX);
+ WFIFOSET(fd, packet_len(0x10b));
#endif
}
@@ -7594,6 +7725,7 @@ static void clif_mvp_noitem(struct map_session_data *sd)
/// 1 = "You are already in a Guild."
/// 2 = "That Guild Name already exists."
/// 3 = "You need the necessary item to create a Guild."
+/// 4 = "Can't create a Guild in this area."
static void clif_guild_created(struct map_session_data *sd, int flag)
{
int fd;
@@ -7612,12 +7744,13 @@ static void clif_guild_created(struct map_session_data *sd, int flag)
/// mode: @see enum guild_permission
static void clif_guild_belonginfo(struct map_session_data *sd, struct guild *g)
{
- int ps,fd;
nullpo_retv(sd);
nullpo_retv(g);
- fd=sd->fd;
- ps=guild->getposition(g,sd);
+ int fd = sd->fd;
+ int ps = guild->getposition(g, sd);
+ Assert_retv(ps != -1);
+
WFIFOHEAD(fd,packet_len(0x16c));
WFIFOW(fd,0)=0x16c;
WFIFOL(fd,2)=g->guild_id;
@@ -8079,6 +8212,7 @@ static void clif_guild_invite(struct map_session_data *sd, struct guild *g)
/// 1 = Offer rejected.
/// 2 = Offer accepted.
/// 3 = Guild full.
+/// 4 = Offline or not exists
static void clif_guild_inviteack(struct map_session_data *sd, int flag)
{
int fd;
@@ -8094,41 +8228,45 @@ static void clif_guild_inviteack(struct map_session_data *sd, int flag)
/// Notifies clients of a guild of a leaving member (ZC_ACK_LEAVE_GUILD).
/// 015a <char name>.24B <reason>.40B
-static void clif_guild_leave(struct map_session_data *sd, const char *name, const char *mes)
+static void clif_guild_leave(struct map_session_data *sd, const char *name, int char_id, const char *mes)
{
- unsigned char buf[128];
-
nullpo_retv(sd);
+ nullpo_retv(name);
+ nullpo_retv(mes);
- WBUFW(buf, 0)=0x15a;
- memcpy(WBUFP(buf, 2),name,NAME_LENGTH);
- memcpy(WBUFP(buf,26),mes,40);
- clif->send(buf,packet_len(0x15a),&sd->bl,GUILD_NOBG);
+ struct PACKET_ZC_ACK_LEAVE_GUILD p;
+ p.packetType = guildLeave;
+#if PACKETVER_MAIN_NUM >= 20161019 || PACKETVER_RE_NUM >= 20160921 || defined(PACKETVER_ZERO)
+ p.GID = char_id;
+#else
+ safestrncpy(&p.name[0], name, NAME_LENGTH);
+#endif
+ safestrncpy(&p.reason[0], mes, 40);
+ clif->send(&p, sizeof(p), &sd->bl, GUILD_NOBG);
}
/// Notifies clients of a guild of an expelled member.
/// 015c <char name>.24B <reason>.40B <account name>.24B (ZC_ACK_BAN_GUILD)
/// 0839 <char name>.24B <reason>.40B (ZC_ACK_BAN_GUILD_SSO)
-static void clif_guild_expulsion(struct map_session_data *sd, const char *name, const char *mes, int account_id)
+static void clif_guild_expulsion(struct map_session_data *sd, const char *name, int char_id, const char *mes, int account_id)
{
- unsigned char buf[128];
-#if PACKETVER < 20100803
- const unsigned short cmd = 0x15c;
-#else
- const unsigned short cmd = 0x839;
-#endif
-
nullpo_retv(sd);
nullpo_retv(name);
nullpo_retv(mes);
- WBUFW(buf,0) = cmd;
- safestrncpy(WBUFP(buf,2), name, NAME_LENGTH);
- safestrncpy(WBUFP(buf,26), mes, 40);
+ struct PACKET_ZC_ACK_BAN_GUILD p;
+ p.packetType = guildExpulsion;
+#if PACKETVER_MAIN_NUM >= 20161019 || PACKETVER_RE_NUM >= 20160921 || defined(PACKETVER_ZERO)
+ p.GID = char_id;
+#else
+ safestrncpy(&p.name[0], name, NAME_LENGTH);
+#endif
+ safestrncpy(&p.reason[0], mes, 40);
+
#if PACKETVER < 20100803
- memset(WBUFP(buf,66), 0, NAME_LENGTH); // account name (not used for security reasons)
+ memset(&p.account_name, 0, NAME_LENGTH); // account name (not used for security reasons)
#endif
- clif->send(buf, packet_len(cmd), &sd->bl, GUILD_NOBG);
+ clif->send(&p, sizeof(p), &sd->bl, GUILD_NOBG);
}
/// Guild expulsion list (ZC_BAN_LIST).
@@ -8310,6 +8448,49 @@ static void clif_guild_broken(struct map_session_data *sd, int flag)
WFIFOSET(fd,packet_len(0x15e));
}
+static void clif_guild_position_selected(struct map_session_data *sd)
+{
+#if PACKETVER >= 20180801
+ clif->guild_set_position(sd);
+#else
+ clif->charnameupdate(sd);
+#endif
+}
+
+static void clif_guild_set_position(struct map_session_data *sd)
+{
+ nullpo_retv(sd);
+
+ int len = sizeof(struct PACKET_ZC_GUILD_POSITION);
+ const char *name = NULL;
+ if (sd->status.guild_id > 0) {
+ struct guild *g = sd->guild;
+
+ nullpo_retv(g);
+
+ int i = 0;
+ int ps = -1;
+ ARR_FIND(0, g->max_member, i, g->member[i].account_id == sd->status.account_id && g->member[i].char_id == sd->status.char_id);
+ if (i < g->max_member)
+ ps = g->member[i].position;
+
+ if (ps >= 0 && ps < MAX_GUILDPOSITION) {
+ len += 24;
+ name = g->position[ps].name;
+ }
+ }
+
+ unsigned char buf[sizeof(struct PACKET_ZC_GUILD_POSITION) + NAME_LENGTH];
+ struct PACKET_ZC_GUILD_POSITION *p = WBUFP(buf, 0);
+ p->packetType = 0xafd;
+ p->packetLength = len;
+ p->AID = sd->bl.id;
+ if (name != NULL)
+ memcpy(&p->position, name, 24);
+
+ clif->send(buf, len, &sd->bl, AREA);
+}
+
/// Displays emotion on an object (ZC_EMOTION).
/// 00c0 <id>.L <type>.B
/// type:
@@ -8688,6 +8869,45 @@ static void clif_specialeffect_value(struct block_list *bl, int effect_id, int n
clif->send(buf, packet_len(0x284), bl, SELF);
}
}
+
+/// Remove special effects (ZC_REMOVE_EFFECT).
+/// 0b0d <id>.L <effect id>.L
+/// effect id:
+/// @see doc/effect_list.txt
+static void clif_removeSpecialEffect(struct block_list *bl, int effectId, enum send_target target)
+{
+#if PACKETVER_MAIN_NUM >= 20181002 || PACKETVER_RE_NUM >= 20181002 || PACKETVER_ZERO_NUM >= 20181010
+ nullpo_retv(bl);
+
+ struct PACKET_ZC_REMOVE_EFFECT p;
+ p.packetType = 0xb0d;
+ p.aid = bl->id;
+ p.effectId = effectId;
+
+ clif->send(&p, sizeof(p), bl, target);
+
+ if (clif->isdisguised(bl)) {
+ p.aid = -bl->id;
+ clif->send(&p, sizeof(p), bl, SELF);
+ }
+#endif
+}
+
+static void clif_removeSpecialEffect_single(struct block_list *bl, int effectId, struct block_list *targetBl)
+{
+#if PACKETVER_MAIN_NUM >= 20181002 || PACKETVER_RE_NUM >= 20181002 || PACKETVER_ZERO_NUM >= 20181010
+ nullpo_retv(bl);
+ nullpo_retv(targetBl);
+
+ struct PACKET_ZC_REMOVE_EFFECT p;
+ p.packetType = 0xb0d;
+ p.aid = bl->id;
+ p.effectId = effectId;
+
+ clif->send(&p, sizeof(p), targetBl, SELF);
+#endif
+}
+
/**
* Modification of clif_messagecolor to send colored messages to players to chat log only (doesn't display overhead).
*
@@ -8760,8 +8980,8 @@ static void clif_refresh_storagewindow(struct map_session_data *sd)
if (sd->state.storage_flag == STORAGE_FLAG_NORMAL) {
if (sd->storage.aggregate > 0) {
storage->sortitem(VECTOR_DATA(sd->storage.item), VECTOR_LENGTH(sd->storage.item));
- clif->storagelist(sd, VECTOR_DATA(sd->storage.item), VECTOR_LENGTH(sd->storage.item));
}
+ clif->storageList(sd, VECTOR_DATA(sd->storage.item), VECTOR_LENGTH(sd->storage.item));
clif->updatestorageamount(sd, sd->storage.aggregate, MAX_STORAGE);
}
// Notify the client that the gstorage is open otherwise it will
@@ -8773,7 +8993,7 @@ static void clif_refresh_storagewindow(struct map_session_data *sd)
intif->request_guild_storage(sd->status.account_id,sd->status.guild_id);
} else {
storage->sortitem(gstor->items, ARRAYLENGTH(gstor->items));
- clif->storagelist(sd, gstor->items, ARRAYLENGTH(gstor->items));
+ clif->guildStorageList(sd, gstor->items, ARRAYLENGTH(gstor->items));
clif->updatestorageamount(sd, gstor->storage_amount, MAX_GUILD_STORAGE);
}
}
@@ -8785,9 +9005,9 @@ static void clif_refresh(struct map_session_data *sd)
nullpo_retv(sd);
clif->changemap(sd,sd->bl.m,sd->bl.x,sd->bl.y);
- clif->inventorylist(sd);
+ clif->inventoryList(sd);
if(pc_iscarton(sd)) {
- clif->cartlist(sd);
+ clif->cartList(sd);
clif->updatestatus(sd,SP_CARTINFO);
}
clif->updatestatus(sd,SP_WEIGHT);
@@ -9327,6 +9547,9 @@ static void clif_viewequip_ack(struct map_session_data *sd, struct map_session_d
#endif
viewequip_list.headpalette = tsd->vd.hair_color;
viewequip_list.bodypalette = tsd->vd.cloth_color;
+#if PACKETVER_MAIN_NUM >= 20180801 || PACKETVER_RE_NUM >= 20180801 || PACKETVER_ZERO_NUM >= 20180808
+ viewequip_list.body2 = tsd->vd.body_style;
+#endif
viewequip_list.sex = tsd->vd.sex;
clif->send(&viewequip_list, viewequip_list.PacketLength, &sd->bl, SELF);
@@ -9433,6 +9656,38 @@ static void clif_msgtable_str(struct map_session_data *sd, enum clif_messages ms
}
/**
+ * Displays a format string from msgstringtable.txt with a %s value and color (ZC_FORMATSTRING_MSG).
+ *
+ * @param sd The target character.
+ * @param msg_id msgstringtable message index, 0-based (@see enum clif_messages)
+ * @param value The value to fill %s.
+ * @param color The color to use
+ */
+static void clif_msgtable_str_color(struct map_session_data *sd, enum clif_messages msg_id, const char *value, uint32 color)
+{
+#if PACKETVER >= 20160330
+ nullpo_retv(sd);
+ nullpo_retv(value);
+
+ int message_len = (int)strlen(value) + 1;
+ const int len = sizeof(struct PACKET_ZC_FORMATSTRING_MSG_COLOR) + message_len + 1;
+ struct PACKET_ZC_FORMATSTRING_MSG_COLOR *p = (struct PACKET_ZC_FORMATSTRING_MSG_COLOR *)aMalloc(len);
+
+ p->PacketType = 0xa6f;
+ p->PacketLength = len;
+ p->messageId = msg_id;
+#if PACKETVER >= 20160406
+ p->color = color;
+#endif
+ safestrncpy(p->messageString, value, message_len);
+ p->messageString[message_len] = 0;
+
+ clif->send(p, p->PacketLength, &sd->bl, SELF);
+ aFree(p);
+#endif
+}
+
+/**
* Displays a format string from msgstringtable.txt with a color (ZC_MSG_COLOR).
*
* @param sd The target character.
@@ -9786,11 +10041,11 @@ static void clif_parse_LoadEndAck(int fd, struct map_session_data *sd)
// Send character inventory to the client.
// call this before pc->checkitem() so that the client isn't called to delete a non-existent item.
- clif->inventorylist(sd);
+ clif->inventoryList(sd);
// Send the cart inventory, counts & weight to the client.
if(pc_iscarton(sd)) {
- clif->cartlist(sd);
+ clif->cartList(sd);
clif->updatestatus(sd, SP_CARTINFO);
}
@@ -10793,7 +11048,7 @@ static void clif_parse_WisMessage(int fd, struct map_session_data *sd)
// Lordalfa - Paperboy - To whisper NPC commands //
//-------------------------------------------------------//
if (target[0] && (strncasecmp(target,"NPC:",4) == 0) && (strlen(target) > 4)) {
- const char *str = target+4; //Skip the NPC: string part.
+ char *str = target + 4; // Skip the NPC: string part.
struct npc_data *nd;
if ((nd = npc->name2id(str))) {
char split_data[NUM_WHISPER_VAR][CHAT_SIZE_MAX];
@@ -11485,7 +11740,7 @@ static void clif_parse_PutItemToCart(int fd, struct map_session_data *sd)
if (!pc_iscarton(sd))
return;
if ( (flag = pc->putitemtocart(sd,RFIFOW(fd,2)-2,RFIFOL(fd,4))) ) {
- clif->dropitem(sd, RFIFOW(fd,2)-2,0);
+ clif->item_movefailed(sd, RFIFOW(fd,2)-2);
clif->cart_additem_ack(sd,flag == 1?0x0:0x1);
}
}
@@ -12093,7 +12348,7 @@ static void clif_parse_NpcSelectMenu(int fd, struct map_session_data *sd)
int npc_id = RFIFOL(fd,2);
uint8 select = RFIFOB(fd,6);
- if( (select > sd->npc_menu && select != 0xff) || select == 0 ) {
+ if( (select > sd->npc_menu && select != MAX_MENU_OPTIONS) || select == 0 ) {
#ifdef SECURE_NPCTIMEOUT
if( sd->npc_idle_timer != INVALID_TIMER ) {
#endif
@@ -15195,7 +15450,7 @@ static void clif_parse_FeelSaveOk(int fd, struct map_session_data *sd)
sd->feel_map[i].index = map_id2index(sd->bl.m);
sd->feel_map[i].m = sd->bl.m;
- pc_setglobalreg(sd,script->add_str(pc->sg_info[i].feel_var),sd->feel_map[i].index);
+ pc_setglobalreg(sd,script->add_variable(pc->sg_info[i].feel_var),sd->feel_map[i].index);
#if 0 // Are these really needed? Shouldn't they show up automatically from the feel save packet?
clif_misceffect2(&sd->bl, 0x1b0);
@@ -16623,7 +16878,11 @@ static void clif_quest_send_list(struct map_session_data *sd)
real_len += sizeof(info->objectives[j]);
mob_data = mob->db(qi->objectives[j].mob);
-#if PACKETVER >= 20150513
+#if PACKETVER_ZERO_NUM >= 20181010 || PACKETVER >= 20181017
+ info->objectives[j].huntIdent = sd->quest_log[i].quest_id;
+ info->objectives[j].huntIdent2 = j;
+ info->objectives[j].mobType = 0; // Info Needed
+#elif PACKETVER >= 20150513
info->objectives[j].huntIdent = (sd->quest_log[i].quest_id * 1000) + j;
info->objectives[j].mobType = 0; // Info Needed
#endif
@@ -16712,7 +16971,11 @@ static void clif_quest_add(struct map_session_data *sd, struct quest *qd)
monster = mob->db(qi->objectives[i].mob);
-#if PACKETVER >= 20150513
+#if PACKETVER_ZERO_NUM >= 20181010 || PACKETVER >= 20181017
+ packet->objectives[i].huntIdent = qd->quest_id;
+ packet->objectives[i].huntIdent2 = i;
+ packet->objectives[i].mobType = 0; // Info Needed
+#elif PACKETVER >= 20150513
packet->objectives[i].huntIdent = (qd->quest_id * 1000) + i;
packet->objectives[i].mobType = 0; // Info Needed
#endif
@@ -16758,7 +17021,7 @@ static void clif_quest_update_objective(struct map_session_data *sd, struct ques
qi = quest->db(qd->quest_id);
Assert_retv(qi->objectives_count < MAX_QUEST_OBJECTIVES);
-
+
len = sizeof(struct packet_quest_update_header)
+ MAX_QUEST_OBJECTIVES * sizeof(struct packet_quest_update_hunt); // >= than the actual length
@@ -16771,9 +17034,12 @@ static void clif_quest_update_objective(struct map_session_data *sd, struct ques
for (i = 0; i < qi->objectives_count; i++) {
real_len += sizeof(packet->objectives[i]);
-
+
packet->objectives[i].questID = qd->quest_id;
-#if PACKETVER >= 20150513
+#if PACKETVER_ZERO_NUM >= 20181010 || PACKETVER >= 20181017
+ packet->objectives[i].huntIdent = qd->quest_id;
+ packet->objectives[i].huntIdent2 = i;
+#elif PACKETVER >= 20150513
packet->objectives[i].huntIdent = (qd->quest_id * 1000) + i;
#else
packet->objectives[i].mob_id = qi->objectives[i].mob;
@@ -16801,7 +17067,7 @@ static void clif_quest_notify_objective(struct map_session_data *sd, struct ques
qi = quest->db(qd->quest_id);
Assert_retv(qi->objectives_count < MAX_QUEST_OBJECTIVES);
-
+
len = sizeof(struct packet_quest_hunt_info)
+ MAX_QUEST_OBJECTIVES * sizeof(struct packet_quest_hunt_info_sub); // >= than the actual length
@@ -16813,7 +17079,7 @@ static void clif_quest_notify_objective(struct map_session_data *sd, struct ques
for (i = 0; i < qi->objectives_count; i++) {
real_len += sizeof(packet->info[i]);
-
+
packet->info[i].questID = qd->quest_id;
packet->info[i].mob_id = qi->objectives[i].mob;
packet->info[i].maxCount = qi->objectives[i].count;
@@ -17348,6 +17614,7 @@ static int clif_instance(int instance_id, int type, int flag)
case 2:
// S 0x2cc <Standby Position>.W
// To announce Instancing queue creation if no maps available
+ // flag is priority, negative value mean cancel reservation
WBUFW(buf,0) = 0x02CC;
WBUFW(buf,2) = flag;
clif->send(buf,packet_len(0x02CC),&sd->bl,target);
@@ -17450,7 +17717,7 @@ static void clif_displayexp(struct map_session_data *sd, uint64 exp, char type,
{
int fd;
-#if PACKETVER_MAIN_NUM >= 20170906 || PACKETVER_RE_NUM >= 20170830 || defined(PACKETVER_ZERO_NUM)
+#if PACKETVER_MAIN_NUM >= 20170906 || PACKETVER_RE_NUM >= 20170830 || defined(PACKETVER_ZERO)
const int cmd = 0xacc;
#else
const int cmd = 0x7f6;
@@ -17462,7 +17729,7 @@ static void clif_displayexp(struct map_session_data *sd, uint64 exp, char type,
WFIFOHEAD(fd, packet_len(cmd));
WFIFOW(fd, 0) = cmd;
WFIFOL(fd, 2) = sd->bl.id;
-#if PACKETVER_MAIN_NUM >= 20170906 || PACKETVER_RE_NUM >= 20170830 || defined(PACKETVER_ZERO_NUM)
+#if PACKETVER_MAIN_NUM >= 20170906 || PACKETVER_RE_NUM >= 20170830 || defined(PACKETVER_ZERO)
WFIFOQ(fd, 6) = exp;
WFIFOW(fd, 14) = type;
WFIFOW(fd, 16) = is_quest ? 1 : 0; // Normal exp is shown in yellow, quest exp is shown in purple.
@@ -18629,8 +18896,20 @@ static void clif_monster_hp_bar(struct mob_data *md, struct map_session_data *sd
}
/* [Ind/Hercules] placeholder for unsupported incoming packets (avoids server disconnecting client) */
-static void __attribute__ ((unused)) clif_parse_dull(int fd, struct map_session_data *sd)
+static void clif_parse_dull(int fd, struct map_session_data *sd)
{
+ const int cmd = clif->cmd;
+ Assert_retv(cmd <= MAX_PACKET_DB && cmd >= MIN_PACKET_DB);
+
+ int packet_len = packet_db[cmd].len;
+ if (packet_len == -1) { // variable-length packet
+ packet_len = RFIFOW(fd, 2);
+ }
+ if (sd) {
+ ShowWarning("Unhandled packet 0x%04X (length %d), %s session #%d, %d/%d (AID/CID)\n", (uint32)cmd, packet_len, sd->state.active ? "authed" : "unauthed", fd, sd->status.account_id, sd->status.char_id);
+ } else {
+ ShowWarning("Unhandled packet 0x%04X (length %d), session #%d\n", (uint32)cmd, packet_len, fd);
+ }
return;
}
@@ -18742,12 +19021,12 @@ static void clif_parse_CashShopBuy(int fd, struct map_session_data *sd)
struct item item_tmp;
int k, get_count;
int ret = 0;
-
+
get_count = qty;
if (!itemdb->isstackable2(data))
get_count = 1;
-
+
ret = pc->paycash(sd, clif->cs.data[tab][j]->price * qty, kafra_pay);// [Ryuuzaki] //changed Kafrapoints calculation. [Normynator]
if (ret < 0) {
ShowError("clif_parse_CashShopBuy: The return from pc->paycash was negative which is not allowed.\n");
@@ -19548,9 +19827,9 @@ static void clif_parse_RouletteOpen(int fd, struct map_session_data *sd)
p.Step = sd->roulette.stage - 1;
p.Idx = (char)sd->roulette.prizeIdx;
p.AdditionItemID = -1; /** TODO **/
- p.BronzePoint = pc_readglobalreg(sd, script->add_str("TmpRouletteBronze"));
- p.GoldPoint = pc_readglobalreg(sd, script->add_str("TmpRouletteGold"));
- p.SilverPoint = pc_readglobalreg(sd, script->add_str("TmpRouletteSilver"));
+ p.BronzePoint = pc_readglobalreg(sd, script->add_variable("TmpRouletteBronze"));
+ p.GoldPoint = pc_readglobalreg(sd, script->add_variable("TmpRouletteGold"));
+ p.SilverPoint = pc_readglobalreg(sd, script->add_variable("TmpRouletteSilver"));
clif->send(&p,sizeof(p), &sd->bl, SELF);
#endif
@@ -19569,7 +19848,7 @@ static void clif_parse_RouletteInfo(int fd, struct map_session_data *sd)
}
p.PacketType = rouletteinfoackType;
- p.PacketLength = 8 + (42 * 8);
+ p.PacketLength = sizeof(p);
p.RouletteSerial = 1;
for(i = 0; i < MAX_ROULETTE_LEVEL; i++) {
@@ -19617,21 +19896,21 @@ static void clif_parse_RouletteGenerate(int fd, struct map_session_data *sd)
stage = sd->roulette.stage = 0;
if( stage == 0 ) {
- if( pc_readglobalreg(sd, script->add_str("TmpRouletteBronze")) <= 0 &&
- pc_readglobalreg(sd, script->add_str("TmpRouletteSilver")) < 10 &&
- pc_readglobalreg(sd, script->add_str("TmpRouletteGold")) < 10 )
+ if( pc_readglobalreg(sd, script->add_variable("TmpRouletteBronze")) <= 0 &&
+ pc_readglobalreg(sd, script->add_variable("TmpRouletteSilver")) < 10 &&
+ pc_readglobalreg(sd, script->add_variable("TmpRouletteGold")) < 10 )
result = GENERATE_ROULETTE_NO_ENOUGH_POINT;
}
if( result == GENERATE_ROULETTE_SUCCESS ) {
if( stage == 0 ) {
- if( pc_readglobalreg(sd, script->add_str("TmpRouletteBronze")) > 0 ) {
- pc_setglobalreg(sd, script->add_str("TmpRouletteBronze"), pc_readglobalreg(sd, script->add_str("TmpRouletteBronze")) - 1);
- } else if( pc_readglobalreg(sd, script->add_str("TmpRouletteSilver")) > 9 ) {
- pc_setglobalreg(sd, script->add_str("TmpRouletteSilver"), pc_readglobalreg(sd, script->add_str("TmpRouletteSilver")) - 10);
+ if( pc_readglobalreg(sd, script->add_variable("TmpRouletteBronze")) > 0 ) {
+ pc_setglobalreg(sd, script->add_variable("TmpRouletteBronze"), pc_readglobalreg(sd, script->add_variable("TmpRouletteBronze")) - 1);
+ } else if( pc_readglobalreg(sd, script->add_variable("TmpRouletteSilver")) > 9 ) {
+ pc_setglobalreg(sd, script->add_variable("TmpRouletteSilver"), pc_readglobalreg(sd, script->add_variable("TmpRouletteSilver")) - 10);
stage = sd->roulette.stage = 2;
- } else if( pc_readglobalreg(sd, script->add_str("TmpRouletteGold")) > 9 ) {
- pc_setglobalreg(sd, script->add_str("TmpRouletteGold"), pc_readglobalreg(sd, script->add_str("TmpRouletteGold")) - 10);
+ } else if( pc_readglobalreg(sd, script->add_variable("TmpRouletteGold")) > 9 ) {
+ pc_setglobalreg(sd, script->add_variable("TmpRouletteGold"), pc_readglobalreg(sd, script->add_variable("TmpRouletteGold")) - 10);
stage = sd->roulette.stage = 4;
}
}
@@ -19813,9 +20092,9 @@ static void clif_roulette_generate_ack(struct map_session_data *sd, unsigned cha
p.Step = stage;
p.Idx = prizeIdx;
p.AdditionItemID = bonusItemID;
- p.RemainBronze = pc_readglobalreg(sd, script->add_str("TmpRouletteBronze"));
- p.RemainGold = pc_readglobalreg(sd, script->add_str("TmpRouletteGold"));
- p.RemainSilver = pc_readglobalreg(sd, script->add_str("TmpRouletteSilver"));
+ p.RemainBronze = pc_readglobalreg(sd, script->add_variable("TmpRouletteBronze"));
+ p.RemainGold = pc_readglobalreg(sd, script->add_variable("TmpRouletteGold"));
+ p.RemainSilver = pc_readglobalreg(sd, script->add_variable("TmpRouletteSilver"));
clif->send(&p,sizeof(p), &sd->bl, SELF);
#endif
@@ -20271,7 +20550,7 @@ static unsigned short clif_parse_cmd_optional(int fd, struct map_session_data *s
*/
static void clif_achievement_send_list(int fd, struct map_session_data *sd)
{
-#if PACKETVER >= 20141016
+#if PACKETVER_MAIN_NUM >= 20150225 || PACKETVER_RE_NUM >= 20141126 || defined(PACKETVER_ZERO)
int i = 0, count = 0, curr_exp_tmp = 0;
struct packet_achievement_list p = { 0 };
@@ -20334,7 +20613,7 @@ static void clif_achievement_send_list(int fd, struct map_session_data *sd)
*/
static void clif_achievement_send_update(int fd, struct map_session_data *sd, const struct achievement_data *ad)
{
-#if PACKETVER >= 20141016
+#if PACKETVER_MAIN_NUM >= 20150225 || PACKETVER_RE_NUM >= 20141126 || defined(PACKETVER_ZERO)
struct packet_achievement_update p = { 0 };
struct achievement *a = NULL;
int i = 0, points = 0, rank = 0, curr_rank_points = 0;
@@ -20388,7 +20667,6 @@ static void clif_achievement_send_update(int fd, struct map_session_data *sd, co
static void clif_parse_achievement_get_reward(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_achievement_get_reward(int fd, struct map_session_data *sd)
{
-#if PACKETVER >= 20141016
int ach_id = RFIFOL(fd, 2);
const struct achievement_data *ad = NULL;
struct achievement *ach = NULL;
@@ -20402,7 +20680,6 @@ static void clif_parse_achievement_get_reward(int fd, struct map_session_data *s
if (achievement->check_complete(sd, ad) && ach->completed_at && ach->rewarded_at == 0) {
achievement->get_rewards(sd, ad);
}
-#endif // PACKETVER >= 20141016
}
/**
@@ -20411,14 +20688,14 @@ static void clif_parse_achievement_get_reward(int fd, struct map_session_data *s
*/
static void clif_achievement_reward_ack(int fd, struct map_session_data *sd, const struct achievement_data *ad)
{
-#if PACKETVER >= 20141016
+#if PACKETVER_MAIN_NUM >= 20150225 || PACKETVER_RE_NUM >= 20141126 || defined(PACKETVER_ZERO)
struct packet_achievement_reward_ack p = { 0 };
nullpo_retv(sd);
nullpo_retv(ad);
p.packet_id = achievementRewardAckType;
- p.received = 1;
+ p.failed = 0;
p.ach_id = ad->id;
clif->send(&p, packet_len(achievementRewardAckType), &sd->bl, SELF);
@@ -20738,7 +21015,7 @@ static void clif_rodex_send_mails_all(int fd, struct map_session_data *sd, int64
nullpo_retv(sd);
mailsSize = VECTOR_LENGTH(sd->rodex.messages);
-
+
if (mail_id > 0)
ARR_FIND(0, VECTOR_LENGTH(sd->rodex.messages), j, (VECTOR_INDEX(sd->rodex.messages, j)).id == mail_id);
@@ -21360,8 +21637,8 @@ static void clif_parse_private_airship_request(int fd, struct map_session_data *
safestrncpy(evname, "private_airship::OnAirShipRequest", EVENT_NAME_LENGTH);
if ((ev = strdb_get(npc->ev_db, evname))) {
- pc->setregstr(sd, script->add_str("@mapname$"), p->mapName);
- pc->setreg(sd, script->add_str("@itemid"), p->ItemID);
+ pc->setregstr(sd, script->add_variable("@mapname$"), p->mapName);
+ pc->setreg(sd, script->add_variable("@itemid"), p->ItemID);
script->run_npc(ev->nd->u.scr.script, ev->pos, sd->bl.id, ev->nd->bl.id);
} else {
ShowError("clif_parse_private_airship_request: event '%s' not found, operation failed.\n", evname);
@@ -21548,13 +21825,32 @@ static void clif_parse_cz_req_style_change(int fd, struct map_session_data *sd)
clif->cz_req_style_change_sub(sd, LOOK_HEAD_MID, p->MidAccessory, true);
if (p->BottomAccessory > 0)
clif->cz_req_style_change_sub(sd, LOOK_HEAD_BOTTOM, p->BottomAccessory, true);
-#if PACKETVER_RE_NUM >= 20180718
+ clif->style_change_response(sd, STYLIST_SHOP_SUCCESS);
+ return;
+}
+
+static void clif_parse_cz_req_style_change2(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
+static void clif_parse_cz_req_style_change2(int fd, struct map_session_data *sd)
+{
+ const struct PACKET_CZ_REQ_STYLE_CHANGE2 *p = RP2PTR(fd);
+
+ if (p->HeadStyle > 0)
+ clif->cz_req_style_change_sub(sd, LOOK_HAIR, p->HeadStyle, false);
+ if (p->HeadPalette > 0)
+ clif->cz_req_style_change_sub(sd, LOOK_HAIR_COLOR, p->HeadPalette, false);
+ if (p->BodyPalette > 0)
+ clif->cz_req_style_change_sub(sd, LOOK_CLOTHES_COLOR, p->BodyPalette, false);
+ if (p->TopAccessory > 0)
+ clif->cz_req_style_change_sub(sd, LOOK_HEAD_TOP, p->TopAccessory, true);
+ if (p->MidAccessory > 0)
+ clif->cz_req_style_change_sub(sd, LOOK_HEAD_MID, p->MidAccessory, true);
+ if (p->BottomAccessory > 0)
+ clif->cz_req_style_change_sub(sd, LOOK_HEAD_BOTTOM, p->BottomAccessory, true);
if (p->BodyStyle > 0) {
if (pc->has_second_costume(sd)) {
clif->cz_req_style_change_sub(sd, LOOK_BODY2, p->BodyStyle, false);
}
}
-#endif
clif->style_change_response(sd, STYLIST_SHOP_SUCCESS);
return;
}
@@ -21632,6 +21928,65 @@ static void clif_party_dead_notification(struct map_session_data *sd)
#endif
}
+static void clif_parse_memorial_dungeon_command(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
+static void clif_parse_memorial_dungeon_command(int fd, struct map_session_data *sd)
+{
+ const struct PACKET_CZ_MEMORIALDUNGEON_COMMAND *p = RP2PTR(fd);
+
+ switch (p->command) {
+ case COMMAND_MEMORIALDUNGEON_DESTROY_FORCE:
+ instance->force_destroy(sd);
+ }
+}
+
+static void clif_camera_showWindow(struct map_session_data *sd)
+{
+#if PACKETVER >= 20160525
+ nullpo_retv(sd);
+ struct PACKET_ZC_CAMERA_INFO p;
+ p.packetType = 0xa78;
+ p.action = 1;
+ p.range = 0;
+ p.rotation = 0;
+ p.latitude = 0;
+ clif->send(&p, sizeof(p), &sd->bl, SELF);
+#endif
+}
+
+static void clif_camera_change(struct map_session_data *sd, float range, float rotation, float latitude, enum send_target target)
+{
+#if PACKETVER >= 20160525
+ nullpo_retv(sd);
+ struct PACKET_ZC_CAMERA_INFO p;
+ p.packetType = 0xa78;
+ p.action = 0;
+ p.range = range;
+ p.rotation = rotation;
+ p.latitude = latitude;
+ clif->send(&p, sizeof(p), &sd->bl, target);
+#endif
+}
+
+// show item preview in already opened preview window
+static void clif_item_preview(struct map_session_data *sd, int n)
+{
+#if PACKETVER_MAIN_NUM >= 20170726 || PACKETVER_RE_NUM >= 20170621 || defined(PACKETVER_ZERO)
+ nullpo_retv(sd);
+ Assert_retv(n >= 0 && n < MAX_INVENTORY);
+
+ struct PACKET_ZC_ITEM_PREVIEW p;
+ p.packetType = itemPreview;
+ p.index = n + 2;
+#if PACKETVER_MAIN_NUM >= 20181017 || PACKETVER_RE_NUM >= 20181017 || PACKETVER_ZERO_NUM >= 20181024
+ p.isDamaged = (sd->status.inventory[n].attribute & ATTR_BROKEN) != 0 ? 1 : 0;
+#endif
+ p.refiningLevel = sd->status.inventory[n].refine;
+ clif->addcards(&p.slot, &sd->status.inventory[n]);
+ clif->add_item_options(&p.option_data[0], &sd->status.inventory[n]);
+ clif->send(&p, sizeof(p), &sd->bl, SELF);
+#endif
+}
+
/*==========================================
* Main client packet processing function
*------------------------------------------*/
@@ -21683,6 +22038,7 @@ static int clif_parse(int fd)
parse_cmd_func = clif->parse_cmd;
cmd = parse_cmd_func(fd,sd);
+ clif->cmd = cmd;
if (VECTOR_LENGTH(HPM->packets[hpClif_Parse]) > 0) {
int result = HPM->parse_packets(fd,cmd,hpClif_Parse);
@@ -21746,8 +22102,8 @@ static int clif_parse(int fd)
else
packet_db[cmd].func(fd, sd);
}
-#ifdef DUMP_UNKNOWN_PACKET
else {
+#ifdef DUMP_UNKNOWN_PACKET
const char* packet_txt = "save/packet.txt";
FILE* fp;
@@ -21773,8 +22129,10 @@ static int clif_parse(int fd)
ShowDump(RFIFOP(fd,0), packet_len);
}
- }
+#else
+ clif->pDull(fd, sd);
#endif
+ }
RFIFOSKIP(fd, packet_len);
@@ -21946,6 +22304,7 @@ void clif_defaults(void)
clif->map_port = 5121;
clif->ally_only = false;
clif->delayed_damage_ers = NULL;
+ clif->cmd = -1;
/* core */
clif->init = do_init_clif;
clif->final = do_final_clif;
@@ -21973,6 +22332,7 @@ void clif_defaults(void)
clif->dropitem = clif_dropitem;
clif->delitem = clif_delitem;
clif->takeitem = clif_takeitem;
+ clif->item_movefailed = clif_item_movefailed;
clif->item_equip = clif_item_equip;
clif->item_normal = clif_item_normal;
clif->arrowequip = clif_arrowequip;
@@ -22081,9 +22441,12 @@ void clif_defaults(void)
clif->combo_delay = clif_combo_delay;
clif->status_change = clif_status_change;
clif->insert_card = clif_insert_card;
- clif->inventorylist = clif_inventorylist;
- clif->equiplist = clif_equiplist;
- clif->cartlist = clif_cartlist;
+ clif->inventoryList = clif_inventoryList;
+ clif->inventoryItems = clif_inventoryItems;
+ clif->equipList = clif_equipList;
+ clif->equipItems = clif_equipItems;
+ clif->cartList = clif_cartList;
+ clif->cartItems = clif_cartItems;
clif->favorite_item = clif_favorite_item;
clif->clearcart = clif_clearcart;
clif->item_identify_list = clif_item_identify_list;
@@ -22176,6 +22539,8 @@ void clif_defaults(void)
clif->specialeffect = clif_specialeffect;
clif->specialeffect_single = clif_specialeffect_single;
clif->specialeffect_value = clif_specialeffect_value;
+ clif->removeSpecialEffect = clif_removeSpecialEffect;
+ clif->removeSpecialEffect_single = clif_removeSpecialEffect_single;
clif->millenniumshield = clif_millenniumshield;
clif->spiritcharm = clif_charm;
clif->charm_single = clif_charm_single;
@@ -22209,6 +22574,7 @@ void clif_defaults(void)
clif->msgtable = clif_msgtable;
clif->msgtable_num = clif_msgtable_num;
clif->msgtable_str = clif_msgtable_str;
+ clif->msgtable_str_color = clif_msgtable_str_color;
clif->msgtable_color = clif_msgtable_color;
clif->message = clif_displaymessage;
clif->messageln = clif_displaymessage2;
@@ -22238,7 +22604,11 @@ void clif_defaults(void)
clif->openvendingAck = clif_openvendingAck;
clif->vendingreport = clif_vendingreport;
/* storage handling */
- clif->storagelist = clif_storagelist;
+ clif->storageList = clif_storageList;
+ clif->guildStorageList = clif_guildStorageList;
+ clif->storageItems = clif_storageItems;
+ clif->inventoryStart = clif_inventoryStart;
+ clif->inventoryEnd = clif_inventoryEnd;
clif->updatestorageamount = clif_updatestorageamount;
clif->storageitemadded = clif_storageitemadded;
clif->storageitemremoved = clif_storageitemremoved;
@@ -22297,6 +22667,8 @@ void clif_defaults(void)
clif->guild_positionnamelist = clif_guild_positionnamelist;
clif->guild_positioninfolist = clif_guild_positioninfolist;
clif->guild_expulsionlist = clif_guild_expulsionlist;
+ clif->guild_set_position = clif_guild_set_position;
+ clif->guild_position_selected = clif_guild_position_selected;
clif->validate_emblem = clif_validate_emblem;
/* battleground-specific */
clif->bg_hp = clif_bg_hp;
@@ -22775,11 +23147,17 @@ void clif_defaults(void)
clif->style_change_validate_requirements = clif_style_change_validate_requirements;
clif->stylist_send_rodexitem = clif_stylist_send_rodexitem;
clif->pReqStyleChange = clif_parse_cz_req_style_change;
+ clif->pReqStyleChange2 = clif_parse_cz_req_style_change2;
clif->cz_req_style_change_sub = clif_cz_req_style_change_sub;
clif->style_change_response = clif_style_change_response;
+ clif->camera_showWindow = clif_camera_showWindow;
+ clif->camera_change = clif_camera_change;
+ clif->item_preview = clif_item_preview;
+
// -- Pet Evolution
clif->pPetEvolution = clif_parse_pet_evolution;
clif->petEvolutionResult = clif_pet_evolution_result;
+ clif->pMemorialDungeonCommand = clif_parse_memorial_dungeon_command;
}
diff --git a/src/map/clif.h b/src/map/clif.h
index 3ed9b96ae..b76c5ed70 100644
--- a/src/map/clif.h
+++ b/src/map/clif.h
@@ -439,11 +439,13 @@ enum e_BANKING_DEPOSIT_ACK {
BDA_ERROR = 0x1,
BDA_NO_MONEY = 0x2,
BDA_OVERFLOW = 0x3,
+ BDA_PROHIBIT = 0x4,
};
enum e_BANKING_WITHDRAW_ACK {
BWA_SUCCESS = 0x0,
BWA_NO_MONEY = 0x1,
BWA_UNKNOWN_ERROR = 0x2,
+ BWA_PROHIBIT = 0x3,
};
/* because the client devs were replaced by monkeys. */
@@ -610,6 +612,16 @@ enum pet_evolution_result {
};
/**
+ * Inventory type for clients 2018-09-12 RE +
+ **/
+enum inventory_type {
+ INVTYPE_INVENTORY = 0,
+ INVTYPE_CART = 1,
+ INVTYPE_STORAGE = 2,
+ INVTYPE_GUILD_STORAGE = 3,
+};
+
+/**
* Structures
**/
typedef void (*pFunc)(int, struct map_session_data *); //cant help but put it first
@@ -658,6 +670,10 @@ enum stylist_shop {
STYLIST_SHOP_FAILURE
};
+enum memorial_dungeon_command {
+ COMMAND_MEMORIALDUNGEON_DESTROY_FORCE = 0x3,
+};
+
/**
* Clif.c Interface
**/
@@ -668,6 +684,7 @@ struct clif_interface {
uint16 map_port;
char map_ip_str[128];
int map_fd;
+ int cmd;
/* for clif_clearunit_delayed */
struct eri *delay_clearunit_ers;
/* Cash Shop [Ind/Hercules] */
@@ -716,6 +733,7 @@ struct clif_interface {
void (*dropitem) (struct map_session_data *sd,int n,int amount);
void (*delitem) (struct map_session_data *sd,int n,int amount, short reason);
void (*takeitem) (struct block_list* src, struct block_list* dst);
+ void (*item_movefailed) (struct map_session_data *sd, int n);
void (*item_equip) (short idx, struct EQUIPITEM_INFO *p, struct item *i, struct item_data *id, int eqp_pos);
void (*item_normal) (short idx, struct NORMALITEM_INFO *p, struct item *i, struct item_data *id);
void (*arrowequip) (struct map_session_data *sd,int val);
@@ -824,9 +842,12 @@ struct clif_interface {
void (*combo_delay) (struct block_list *bl,int wait);
void (*status_change) (struct block_list *bl,int type,int flag,int tick,int val1, int val2, int val3);
void (*insert_card) (struct map_session_data *sd,int idx_equip,int idx_card,int flag);
- void (*inventorylist) (struct map_session_data *sd);
- void (*equiplist) (struct map_session_data *sd);
- void (*cartlist) (struct map_session_data *sd);
+ void (*inventoryList) (struct map_session_data *sd);
+ void (*inventoryItems) (struct map_session_data *sd, enum inventory_type type);
+ void (*equipList) (struct map_session_data *sd);
+ void (*equipItems) (struct map_session_data *sd, enum inventory_type type);
+ void (*cartList) (struct map_session_data *sd);
+ void (*cartItems) (struct map_session_data *sd, enum inventory_type type);
void (*favorite_item) (struct map_session_data* sd, unsigned short index);
void (*clearcart) (int fd);
void (*item_identify_list) (struct map_session_data *sd);
@@ -919,6 +940,8 @@ struct clif_interface {
void (*specialeffect) (struct block_list* bl, int type, enum send_target target);
void (*specialeffect_single) (struct block_list* bl, int type, int fd);
void (*specialeffect_value) (struct block_list* bl, int effect_id, int num, send_target target);
+ void (*removeSpecialEffect) (struct block_list *bl, int effectId, enum send_target target);
+ void (*removeSpecialEffect_single) (struct block_list *bl, int effectId, struct block_list *targetBl);
void (*millenniumshield) (struct block_list *bl, short shields );
void (*spiritcharm) (struct map_session_data *sd);
void (*charm_single) (int fd, struct map_session_data *sd);
@@ -952,6 +975,7 @@ struct clif_interface {
void (*msgtable_num) (struct map_session_data *sd, enum clif_messages msg_id, int value);
void (*msgtable_skill) (struct map_session_data *sd, uint16 skill_id, enum clif_messages msg_id);
void (*msgtable_str) (struct map_session_data *sd, enum clif_messages, const char *value);
+ void (*msgtable_str_color) (struct map_session_data *sd, enum clif_messages, const char *value, uint32 color);
void (*msgtable_color) (struct map_session_data *sd, enum clif_messages, uint32 color);
void (*message) (const int fd, const char* mes);
void (*messageln) (const int fd, const char* mes);
@@ -982,7 +1006,11 @@ struct clif_interface {
void (*openvendingAck) (int fd, int result);
void (*vendingreport) (struct map_session_data* sd, int index, int amount, uint32 char_id, int zeny);
/* storage handling */
- void (*storagelist) (struct map_session_data* sd, struct item* items, int items_length);
+ void (*storageList) (struct map_session_data* sd, struct item* items, int items_length);
+ void (*guildStorageList) (struct map_session_data* sd, struct item* items, int items_length);
+ void (*storageItems) (struct map_session_data* sd, enum inventory_type type, struct item* items, int items_length);
+ void (*inventoryStart) (struct map_session_data* sd, enum inventory_type type, const char* name);
+ void (*inventoryEnd) (struct map_session_data* sd, enum inventory_type type);
void (*updatestorageamount) (struct map_session_data* sd, int amount, int max_amount);
void (*storageitemadded) (struct map_session_data* sd, struct item* i, int index, int amount);
void (*storageitemremoved) (struct map_session_data* sd, int index, int amount);
@@ -1022,8 +1050,8 @@ struct clif_interface {
void (*guild_memberlogin_notice) (struct guild *g,int idx,int flag);
void (*guild_invite) (struct map_session_data *sd,struct guild *g);
void (*guild_inviteack) (struct map_session_data *sd,int flag);
- void (*guild_leave) (struct map_session_data *sd,const char *name,const char *mes);
- void (*guild_expulsion) (struct map_session_data* sd, const char* name, const char* mes, int account_id);
+ void (*guild_leave) (struct map_session_data *sd, const char *name, int char_id, const char *mes);
+ void (*guild_expulsion) (struct map_session_data* sd, const char* name, int char_id, const char* mes, int account_id);
void (*guild_positionchanged) (struct guild *g,int idx);
void (*guild_memberpositionchanged) (struct guild *g,int idx);
void (*guild_emblem) (struct map_session_data *sd,struct guild *g);
@@ -1041,6 +1069,9 @@ struct clif_interface {
void (*guild_positionnamelist) (struct map_session_data *sd);
void (*guild_positioninfolist) (struct map_session_data *sd);
void (*guild_expulsionlist) (struct map_session_data* sd);
+ void (*guild_set_position) (struct map_session_data *sd);
+ void (*guild_position_selected) (struct map_session_data *sd);
+
bool (*validate_emblem) (const uint8* emblem, unsigned long emblem_len);
/* battleground-specific */
void (*bg_hp) (struct map_session_data *sd);
@@ -1514,11 +1545,16 @@ struct clif_interface {
bool (*style_change_validate_requirements) (struct map_session_data *sd, int type, int16 idx);
void (*stylist_send_rodexitem) (struct map_session_data *sd, int itemid);
void (*pReqStyleChange) (int fd, struct map_session_data *sd);
+ void (*pReqStyleChange2) (int fd, struct map_session_data *sd);
void (*cz_req_style_change_sub) (struct map_session_data *sd, int type, int16 idx, bool isitem);
void (*style_change_response) (struct map_session_data *sd, enum stylist_shop flag);
void (*pPetEvolution) (int fd, struct map_session_data *sd);
void (*petEvolutionResult) (int fd, enum pet_evolution_result result);
void (*party_dead_notification) (struct map_session_data *sd);
+ void (*pMemorialDungeonCommand) (int fd, struct map_session_data *sd);
+ void (*camera_showWindow) (struct map_session_data *sd);
+ void (*camera_change) (struct map_session_data *sd, float range, float rotation, float latitude, enum send_target target);
+ void (*item_preview) (struct map_session_data *sd, int n);
};
#ifdef HERCULES_CORE
diff --git a/src/map/duel.c b/src/map/duel.c
index 39e5b5253..c2c24e37b 100644
--- a/src/map/duel.c
+++ b/src/map/duel.c
@@ -47,7 +47,7 @@ static void duel_savetime(struct map_session_data *sd)
time(&clock);
t = localtime(&clock);
- pc_setglobalreg(sd, script->add_str("PC_LAST_DUEL_TIME"), t->tm_mday*24*60 + t->tm_hour*60 + t->tm_min);
+ pc_setglobalreg(sd, script->add_variable("PC_LAST_DUEL_TIME"), t->tm_mday*24*60 + t->tm_hour*60 + t->tm_min);
}
static int duel_checktime(struct map_session_data *sd)
@@ -59,7 +59,7 @@ static int duel_checktime(struct map_session_data *sd)
time(&clock);
t = localtime(&clock);
- diff = t->tm_mday*24*60 + t->tm_hour*60 + t->tm_min - pc_readglobalreg(sd, script->add_str("PC_LAST_DUEL_TIME") );
+ diff = t->tm_mday*24*60 + t->tm_hour*60 + t->tm_min - pc_readglobalreg(sd, script->add_variable("PC_LAST_DUEL_TIME") );
return !(diff >= 0 && diff < battle_config.duel_time_interval);
}
diff --git a/src/map/guild.c b/src/map/guild.c
index 28954edf1..757dbb445 100644
--- a/src/map/guild.c
+++ b/src/map/guild.c
@@ -721,7 +721,6 @@ static int guild_reply_invite(struct map_session_data *sd, int guild_id, int fla
}
else
{// accepted
- struct guild_member m;
struct guild* g;
int i;
@@ -741,8 +740,8 @@ static int guild_reply_invite(struct map_session_data *sd, int guild_id, int fla
return 0;
}
- guild->makemember(&m,sd);
- intif->guild_addmember(guild_id, &m);
+ guild->makemember(&g->member[i], sd);
+ intif->guild_addmember(guild_id, &g->member[i]);
//TODO: send a minimap update to this player
}
@@ -925,9 +924,9 @@ static int guild_member_withdraw(int guild_id, int account_id, int char_id, int
#endif
if(!flag)
- clif->guild_leave(online_member_sd, name, mes);
+ clif->guild_leave(online_member_sd, name, char_id, mes);
else
- clif->guild_expulsion(online_member_sd, name, mes, account_id);
+ clif->guild_expulsion(online_member_sd, name, char_id, mes, account_id);
// remove member from guild
memset(&g->member[i],0,sizeof(struct guild_member));
@@ -1129,7 +1128,7 @@ static int guild_memberposition_changed(struct guild *g, int idx, int pos)
// Update char position in client [LuzZza]
if(g->member[idx].sd != NULL)
- clif->charnameupdate(g->member[idx].sd);
+ clif->guild_position_selected(g->member[idx].sd);
return 0;
}
@@ -1165,7 +1164,7 @@ static int guild_position_changed(int guild_id, int idx, const struct guild_posi
// Update char name in client [LuzZza]
for(i=0;i<g->max_member;i++)
if(g->member[i].position == idx && g->member[i].sd != NULL)
- clif->charnameupdate(g->member[i].sd);
+ clif->guild_position_selected(g->member[i].sd);
return 0;
}
diff --git a/src/map/instance.c b/src/map/instance.c
index 8bd45ba50..1e83b0b76 100644
--- a/src/map/instance.c
+++ b/src/map/instance.c
@@ -727,6 +727,66 @@ static void instance_check_kick(struct map_session_data *sd)
}
}
+/**
+ * Look up existing memorial dungeon of the player and destroy it
+ *
+ * @param sd session data.
+ *
+ */
+static void instance_force_destroy(struct map_session_data *sd)
+{
+ nullpo_retv(sd);
+
+ for (int i = 0; i < instance->instances; ++i) {
+ switch (instance->list[i].owner_type) {
+ case IOT_CHAR:
+ {
+ if (instance->list[i].owner_id != sd->status.char_id)
+ continue;
+ break;
+ }
+ case IOT_PARTY:
+ {
+ int party_id = sd->status.party_id;
+ if (instance->list[i].owner_id != party_id)
+ continue;
+ int j = 0;
+ struct party_data *pt = party->search(party_id);
+ nullpo_retv(pt);
+
+ ARR_FIND(0, MAX_PARTY, j, pt->party.member[j].leader);
+ if (j == MAX_PARTY) {
+ ShowWarning("clif_parse_memorial_dungeon_command: trying to destroy a party instance, while the party has no leader.");
+ return;
+ }
+ if (pt->party.member[j].char_id != sd->status.char_id) {
+ ShowWarning("clif_parse_memorial_dungeon_command: trying to destroy a party instance, from a non party-leader player.");
+ return;
+ }
+ break;
+ }
+ case IOT_GUILD:
+ {
+ int guild_id = sd->status.guild_id;
+ if (instance->list[i].owner_id != guild_id)
+ continue;
+ struct guild *g = guild->search(guild_id);
+ nullpo_retv(g);
+
+ if (g->member[0].char_id != sd->status.char_id) {
+ ShowWarning("clif_parse_memorial_dungeon_command: trying to destroy a guild instance, from a non guild-master player.");
+ return;
+ }
+ break;
+ }
+ default:
+ continue;
+ }
+ instance->destroy(instance->list[i].id);
+ return;
+ }
+}
+
static void do_reload_instance(void)
{
struct s_mapiterator *iter;
@@ -810,4 +870,5 @@ void instance_defaults(void)
instance->set_timeout = instance_set_timeout;
instance->valid = instance_is_valid;
instance->destroy_timer = instance_destroy_timer;
+ instance->force_destroy = instance_force_destroy;
}
diff --git a/src/map/instance.h b/src/map/instance.h
index ff7e49a7f..91928bf40 100644
--- a/src/map/instance.h
+++ b/src/map/instance.h
@@ -96,6 +96,7 @@ struct instance_interface {
void (*set_timeout) (int instance_id, unsigned int progress_timeout, unsigned int idle_timeout);
bool (*valid) (int instance_id);
int (*destroy_timer) (int tid, int64 tick, int id, intptr_t data);
+ void (*force_destroy) (struct map_session_data *sd);
};
#ifdef HERCULES_CORE
diff --git a/src/map/intif.c b/src/map/intif.c
index 5fafc0913..ed4c0e2d2 100644
--- a/src/map/intif.c
+++ b/src/map/intif.c
@@ -513,7 +513,7 @@ static void intif_parse_account_storage(int fd)
* @packet 0x3011 [out] <packet_len>.W <account_id>.L <struct item[]>.P
* @param sd [in] pointer to session data.
*/
-static void intif_send_account_storage(const struct map_session_data *sd)
+static void intif_send_account_storage(struct map_session_data *sd)
{
int len = 0, i = 0, c = 0;
@@ -541,6 +541,8 @@ static void intif_send_account_storage(const struct map_session_data *sd)
}
WFIFOSET(inter_fd, len);
+
+ sd->storage.save = false; // Save request has been sent
}
/**
@@ -562,10 +564,9 @@ static void intif_parse_account_storage_save_ack(int fd)
if (saved == 0) {
ShowError("intif_parse_account_storage_save_ack: Storage has not been saved! (AID: %d)\n", account_id);
+ sd->storage.save = true; // Flag it as unsaved, to re-attempt later
return;
}
-
- sd->storage.save = false; // Storage has been saved.
}
//=================================================================
@@ -1324,7 +1325,7 @@ static void intif_parse_Registers(int fd)
safestrncpy(sval, RFIFOP(fd, cursor + 1), min((int)sizeof(sval), len));
cursor += len + 1;
- script->set_reg(NULL,sd,reference_uid(script->add_str(key), index), key, sval, NULL);
+ script->set_reg(NULL,sd,reference_uid(script->add_variable(key), index), key, sval, NULL);
}
/**
* Vessel!
@@ -1346,7 +1347,7 @@ static void intif_parse_Registers(int fd)
ival = RFIFOL(fd, cursor);
cursor += 4;
- script->set_reg(NULL,sd,reference_uid(script->add_str(key), index), key, (const void *)h64BPTRSIZE(ival), NULL);
+ script->set_reg(NULL,sd,reference_uid(script->add_variable(key), index), key, (const void *)h64BPTRSIZE(ival), NULL);
}
}
script->parser_current_file = NULL;/* reset */
diff --git a/src/map/intif.h b/src/map/intif.h
index 1e98d11f8..21f7a494c 100644
--- a/src/map/intif.h
+++ b/src/map/intif.h
@@ -68,7 +68,7 @@ struct intif_interface {
int (*saveregistry) (struct map_session_data *sd);
int (*request_registry) (struct map_session_data *sd, int flag);
void (*request_account_storage) (const struct map_session_data *sd);
- void (*send_account_storage) (const struct map_session_data *sd);
+ void (*send_account_storage) (struct map_session_data *sd);
int (*request_guild_storage) (int account_id, int guild_id);
int (*send_guild_storage) (int account_id, struct guild_storage *gstor);
int (*create_party) (struct party_member *member, const char *name, int item, int item2);
diff --git a/src/map/map.c b/src/map/map.c
index ce8f4cdf5..d4d6e3323 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -635,6 +635,18 @@ static int map_foreachinmap(int (*func)(struct block_list*, va_list), int16 m, i
return returnCount;
}
+static int map_forcountinmap(int (*func)(struct block_list*, va_list), int16 m, int count, int type, ...)
+{
+ int returnCount;
+ va_list ap;
+
+ va_start(ap, type);
+ returnCount = map->vforcountinarea(func, m, 0, 0, map->list[m].bxs, map->list[m].bys, count, type, ap);
+ va_end(ap);
+
+ return returnCount;
+}
+
/**
* Applies func to every block_list object of bl_type type on all maps
* of instance instance_id.
@@ -3690,6 +3702,33 @@ static void do_final_maps(void)
map->zone_db_clear();
}
+
+static void map_zonedb_reload(void)
+{
+ // first, reset maps to their initial zones:
+ for (int i = 0; i < map->count; i++) {
+ map->zone_remove_all(i);
+
+ if (battle_config.pk_mode) {
+ map->list[i].flag.pvp = 1;
+ map->list[i].zone = &map->zone_pk;
+ } else {
+ map->list[i].flag.pvp = 0;
+ map->list[i].zone = &map->zone_all;
+ }
+
+ map->list[i].prev_zone = map->list[i].zone;
+ }
+
+ // now it's safe to remove the zones:
+ map->zone_db_clear();
+
+ // then reload everything from scratch:
+ map->zone_db = strdb_alloc(DB_OPT_DUP_KEY | DB_OPT_RELEASE_DATA, MAP_ZONE_NAME_LENGTH);
+ map->read_zone_db();
+}
+
+
/// Initializes map flags and adjusts them depending on configuration.
static void map_flags_init(void)
{
@@ -4649,6 +4688,27 @@ static void map_zone_remove(int m)
map->list[m].zone_mf = NULL;
map->list[m].zone_mf_count = 0;
}
+// this one removes every flag, even if they were previously turned on before
+// the current zone was applied
+static void map_zone_remove_all(int m)
+{
+ Assert_retv(m >= 0 && m < map->count);
+
+ for (unsigned short k = 0; k < map->list[m].zone_mf_count; k++) {
+ char flag[MAP_ZONE_MAPFLAG_LENGTH];
+
+ memcpy(flag, map->list[m].zone_mf[k], MAP_ZONE_MAPFLAG_LENGTH);
+ strtok(flag, "\t");
+
+ npc->parse_mapflag(map->list[m].name, "", flag, "off", "", "", "", NULL);
+ aFree(map->list[m].zone_mf[k]);
+ map->list[m].zone_mf[k] = NULL;
+ }
+
+ 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)
{
Assert_retv(m >= 0 && m < map->count);
@@ -6801,9 +6861,11 @@ void map_defaults(void)
/* funcs */
map->zone_init = map_zone_init;
map->zone_remove = map_zone_remove;
+ map->zone_remove_all = map_zone_remove_all;
map->zone_apply = map_zone_apply;
map->zone_change = map_zone_change;
map->zone_change2 = map_zone_change2;
+ map->zone_reload = map_zonedb_reload;
map->getcell = map_getcell;
map->setgatcell = map_setgatcell;
@@ -6873,6 +6935,7 @@ void map_defaults(void)
map->foreachinpath = map_foreachinpath;
map->vforeachinmap = map_vforeachinmap;
map->foreachinmap = map_foreachinmap;
+ map->forcountinmap = map_forcountinmap;
map->vforeachininstance = map_vforeachininstance;
map->foreachininstance = map_foreachininstance;
diff --git a/src/map/map.h b/src/map/map.h
index 207fef2ce..4267c2c88 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -789,6 +789,12 @@ struct questinfo_qreq {
int state;
};
+struct questinfo_itemreq {
+ int nameid;
+ int min;
+ int max;
+};
+
struct questinfo {
struct npc_data *nd;
unsigned short icon;
@@ -805,10 +811,11 @@ struct questinfo {
int min;
int max;
} job_level;
- VECTOR_DECL(struct item) items;
+ VECTOR_DECL(struct questinfo_itemreq) items;
struct s_homunculus homunculus;
int homunculus_type;
VECTOR_DECL(struct questinfo_qreq) quest_requirement;
+ int mercenary_class;
};
@@ -1213,9 +1220,11 @@ END_ZEROED_BLOCK;
/* funcs */
void (*zone_init) (void);
void (*zone_remove) (int m);
+ void (*zone_remove_all) (int m);
void (*zone_apply) (int m, struct map_zone_data *zone, const char* start, const char* buffer, const char* filepath);
void (*zone_change) (int m, struct map_zone_data *zone, const char* start, const char* buffer, const char* filepath);
void (*zone_change2) (int m, struct map_zone_data *zone);
+ void (*zone_reload) (void);
int (*getcell) (int16 m, const struct block_list *bl, int16 x, int16 y, cell_chk cellchk);
void (*setgatcell) (int16 m, int16 x, int16 y, int gat);
@@ -1285,6 +1294,7 @@ END_ZEROED_BLOCK;
int (*foreachinpath) (int (*func)(struct block_list*,va_list), int16 m, int16 x0, int16 y0, int16 x1, int16 y1, int16 range, int length, int type, ...);
int (*vforeachinmap) (int (*func)(struct block_list*,va_list), int16 m, int type, va_list args);
int (*foreachinmap) (int (*func)(struct block_list*,va_list), int16 m, int type, ...);
+ int (*forcountinmap) (int (*func)(struct block_list*,va_list), int16 m, int count, int type, ...);
int (*vforeachininstance)(int (*func)(struct block_list*,va_list), int16 instance_id, int type, va_list ap);
int (*foreachininstance)(int (*func)(struct block_list*,va_list), int16 instance_id, int type,...);
diff --git a/src/map/mapreg_sql.c b/src/map/mapreg_sql.c
index 6e8b8f9b0..516be56cb 100644
--- a/src/map/mapreg_sql.c
+++ b/src/map/mapreg_sql.c
@@ -221,7 +221,7 @@ static void script_load_mapreg(void)
SQL->StmtBindColumn(stmt, 2, SQLDT_STRING, &value, sizeof value, NULL, NULL);
while ( SQL_SUCCESS == SQL->StmtNextRow(stmt) ) {
- int s = script->add_str(varname);
+ int s = script->add_variable(varname);
int i = index;
diff --git a/src/map/messages.h b/src/map/messages.h
index fa80b835f..5bfd476a2 100644
--- a/src/map/messages.h
+++ b/src/map/messages.h
@@ -25,6 +25,10 @@
#include "map/messages_zero.h"
#elif defined(PACKETVER_RE)
#include "map/messages_re.h"
+#elif defined(PACKETVER_SAK)
+#include "map/messages_sak.h"
+#elif defined(PACKETVER_AD)
+#include "map/messages_ad.h"
#else
#include "map/messages_main.h"
#endif
diff --git a/src/map/messages_ad.h b/src/map/messages_ad.h
new file mode 100644
index 000000000..4345e078a
--- /dev/null
+++ b/src/map/messages_ad.h
@@ -0,0 +1,7310 @@
+/**
+ * This file is part of Hercules.
+ * http://herc.ws - http://github.com/HerculesWS/Hercules
+ *
+ * Copyright (C) 2013-2018 Hercules Dev Team
+ *
+ * Hercules is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef MAP_MESSAGES_AD_H
+#define MAP_MESSAGES_AD_H
+
+/* This file is autogenerated, please do not commit manual changes
+
+Latest version: 20080701
+*/
+
+enum clif_messages {
+/*20040804 to latest
+동의 하십니까?
+Do you agree?
+*/
+ MSG_DO_YOU_AGREE = 0x0,
+/*20040804 to latest
+서버 연결 실패
+Failed to Connect to Server.
+*/
+ MSG_SERVER_CONNECTION_FAILED = 0x1,
+/*20040804 to latest
+서버와 연결이 끊어졌습니다.
+Disconnected from Server.
+*/
+ MSG_UNABLE_TO_CONNECT_SERVER = 0x2,
+/*20040804 to 20080617
+서버와 연결이 끊어졌습니다.
+Disconnected from Server.
+20080624 to latest
+서버와 연결이 끊어졌습니다!
+Disconnected from Server!
+*/
+ MSG_BANNED = 0x3,
+/*20040804 to latest
+서버 종료됨
+Server Closed.
+*/
+ MSG_SERVER_OFF = 0x4,
+/*20040804 to latest
+같은 계정으로 다른 사용자가 로그인 하였습니다.
+Someone has Logged in with this ID.
+*/
+ MSG_DOUBLE_LOGIN_PROHIBITED = 0x5,
+/*20040804 to latest
+등록되지 않은 계정입니다. 다시 확인 바랍니다.
+Unregistered ID. Please make sure you have a registered account and you have correctly typed in the user ID.
+*/
+ MSG_INCORRECT_USERID = 0x6,
+/*20040804 to 20070704
+비밀번호가 틀립니다
+20070710 to latest
+입력하신 비밀번호가 올바르지 않습니다.
+Incorrect User ID or Password. Please try again.
+*/
+ MSG_INCORRECT_PASSWORD = 0x7,
+/*20040804 to latest
+본 ID 는 사용기간이 만료 되었습니다
+This ID is expired.
+*/
+ MSG_ID_EXPIRED = 0x8,
+/*20040804 to latest
+서버 접근 거부
+Rejected from Server.
+*/
+ MSG_ACCESS_DENIED = 0x9,
+/*20040804 to latest
+같은 캐릭터 이름이 있습니다.
+Character Name already exists.
+*/
+ MSG_CHARACTER_NAME_ALREADY_EXISTS = 0xa,
+/*20040804 to latest
+캐릭터 생성 거부됨
+Character Creation is denied.
+*/
+ MSG_CHARACTER_CREATION_DENIED = 0xb,
+/*20040804 to latest
+캐릭터 삭제 거부
+Character Deletion is denied.
+*/
+ MSG_CANNOT_DELETE_CHARACTER = 0xc,
+/*20040804 to latest
+방제목를 입력하세요.
+Please Enter Room Title.
+*/
+ MSG_ENTER_ROOM_TITLE = 0xd,
+/*20040804 to latest
+불량단어가 검출되었습니다.
+Foul Language Detected.
+*/
+ MSG_BAD_SENTANGE = 0xe,
+/*20040804 to latest
+암호를 입력하세요.
+Please enter Password.
+*/
+ MSG_ENTER_PASSWORD = 0xf,
+/*20040804 to latest
+암호를 영문 4자 이상 입력하세요.
+Please enter Password. Passwords must be at least 4 characters long.
+*/
+ MSG_Enter_Password_more_than_4_char = 0x10,
+/*20040804 to latest
+종료 하시겠습니까?
+Are you sure that you want to quit?
+*/
+ MSG_DO_YOU_REALLY_WANT_TO_QUIT = 0x11,
+/*20040804 to latest
+4자 이상 입력해주세요. 사용자 계정이 없으신분들은 왼쪽 하단의 [신청] 버튼을 눌러 계정을 만드시기 바랍니다.
+Passwords are at least 4 characters long. Please try again.
+*/
+ MSG_NAME_MUST_EXCEED_4_CHAR = 0x12,
+/*20040804 to 20070704
+캐릭터를 삭제하겠습니까?
+20070618 to latest
+한 번 삭제된 캐릭터 및 관련 정보는 다시 복구되지 않습니다. 캐릭터를 삭제하시겠습니까?
+Are you sure that you want to delete this character?
+*/
+ MSG_DELETE_CHARACTER = 0x13,
+/*20040804 to latest
+불량단어가 검출되었습니다.
+Foul Language Detected.
+*/
+ MSG_BAD_NAME = 0x14,
+/*20040804 to latest
+이름을 입력해 주세요.(한글 2자 영문 4자 이상)
+Character Name must be at least 4 characters long.
+*/
+ MSG_ENTER_NAME_MORE_THAN_4_CHAR = 0x15,
+/*20040804 to latest
+명령어 일람: /h
+Command List: /h | /help
+*/
+ MSG_LIST_COMMAND = 0x16,
+/*20040804 to latest
+이펙트 On
+Effects On
+*/
+ MSG_EFFECT_ON = 0x17,
+/*20040804 to latest
+이펙트 Off
+Effects Off
+*/
+ MSG_EFFECT_OFF = 0x18,
+/*20040804 to latest
+사운드 볼륨
+Sound Volume
+*/
+ MSG_VOLUME_OF_SOUND = 0x19,
+/*20040804 to latest
+배경음악 볼륨
+BGM Volume
+*/
+ MSG_VOLUME_OF_BGM = 0x1a,
+/*20040804 to latest
+효과음 On
+Sound Effects On
+*/
+ MSG_SOUND_ON = 0x1b,
+/*20040804 to latest
+효과음 Off
+Sound Effects Off
+*/
+ MSG_SOUND_OFF = 0x1c,
+/*20040804 to latest
+프레임스킵 On
+Frame Skip On
+*/
+ MSG_FRAME_SKIP_ON = 0x1d,
+/*20040804 to latest
+프레임스킵 Off
+Frame Skip Off
+*/
+ MSG_FRAME_SKIP_OFF = 0x1e,
+/*20040804 to latest
+배경음악 On
+BGM On
+*/
+ MSG_BGM_ON = 0x1f,
+/*20040804 to latest
+배경음악 Off
+BGM Off
+*/
+ MSG_BGM_OFF = 0x20,
+/*20040804 to latest
+/h or /help: 명령어 일람
+/h or /help: Shows this Command Help List
+*/
+ MSG_EXPLAIN_HELP = 0x21,
+/*20040804 to latest
+/w or /who or /접속자 or /누구: 현재 접속자수 보기
+/w or /who or /player or /who: wiew current the number of player
+*/
+ MSG_EXPLAIN_WHO = 0x22,
+/*20040804 to latest
+/음악 : 배경음악 On Off
+/music: Turns BGM On or Off
+*/
+ MSG_EXPLAIN_MUSIC = 0x23,
+/*20040804 to latest
+/효과음 : 효과음 On Off
+/sound: Turns Sound Effects On or Off
+*/
+ MSG_EXPLAIN_SOUND = 0x24,
+/*20040804 to latest
+/이펙트 : 이펙트 On Off
+/effect: Effects On or Off
+*/
+ MSG_EXPLAIN_EFFECT = 0x25,
+/*20040804 to latest
+/좌표 or /장소: 현재 위치 표시
+/where: Shows your present location
+*/
+ MSG_EXPLAIN_POS = 0x26,
+/*20040804 to latest
+/skip : 프래임스킵 On Off
+/skip: Turns Frame Skip On or Off
+*/
+ MSG_EXPLAIN_FRAMESKIP = 0x27,
+/*20040804 to latest
+/v (0~127): 효과음 볼륨조정
+/v (0~127): Controls the volume of the Sound Effects
+*/
+ MSG_EXPLAIN_SOUNDVOLUME = 0x28,
+/*20040804 to latest
+/bv (0~127): 배경음악 볼륨조정
+/bv (0~127): Controls the volume of the BGM
+*/
+ MSG_EXPLAIN_BGMVOLUME = 0x29,
+/*20040804 to latest
+/ex (캐릭터이름) or /차단 (캐릭터이름) : 해당캐릭터에 대해 귓말차단
+/ex (Character Name): Blocks whispering from the Character
+*/
+ MSG_EXPLAIN_SAYISOLATION = 0x2a,
+/*20040804 to latest
+/ex or /차단 : 귓말차단 캐릭터 리스트
+/ex: View a list of Characters you have Blocked
+*/
+ MSG_EXPLAIN_LIST_SAYISOLATION_CHAR = 0x2b,
+/*20040804 to latest
+/in (캐릭터이름) or /해제 (캐릭터이름) : 해당캐릭터에 대해 귓말허용
+/in (Character Name): Allows whispering from the Character
+*/
+ MSG_EXPLAIN_SAY_PERMIT = 0x2c,
+/*20040804 to latest
+/inall or /해제전부 : 모두에게 귓말허용
+/inall: Allows whispers from anyone
+*/
+ MSG_EXPLAIN_SAY_PERMITALL = 0x2d,
+/*20040804 to latest
+/exall or /차단전부 : 모두에게 귓말차단
+/exall: Blocks whispers from everyone
+*/
+ MSG_EXPLAIN_SAY_ISOLATEALL = 0x2e,
+/*20040804 to latest
+다른유저 캐릭터를 마우스 오른버튼을 누르고 있는 상태에서 왼버튼으로 클릭하면 그캐릭터이름이 귓말콤보박스에 저장됩니다.
+Right click on a character and select [Register as a Friend] to add a person to your Friend List.
+*/
+ MSG_EXPLAIN_TIP1 = 0x2f,
+/*20040804 to latest
+단축아이탬창(F12) 소비장비 아이템을 드래그한후 사용하세요. 사용키(F1F2F3F4F5F6F7F8F9)
+F12 Brings up a Hotkey Window which allows you to drag and drop Recovery Items, Equipment and Skills into it for faster access.
+*/
+ MSG_EXPLAIN_TIP2 = 0x30,
+/*20040804 to latest
+같은말을 3번이상 연속해서 전송할 수 없습니다.
+You can't type the same word/phrase more than 3 times.
+*/
+ MSG_NO_SAME_SENTANCE = 0x31,
+/*20040804 to latest
+불량단어 검출로 전송이 중단 되었습니다.
+Chat Filter: Yeah, uh, I don't think so buddy...
+*/
+ MSG_NO_SEND_BECAUSE_INSULT = 0x32,
+/*20040804 to latest
+같은아이템은 한번만 올릴수 있습니다.
+You cannot overlap items on a window.
+*/
+ MSG_CAN_DRAG_ITEM_OLNY_ONETIME = 0x33,
+/*20040804 to latest
+무게가 초과하여 아이템을 가질 수 없습니다.
+You cannot carry more items because you are overweight.
+*/
+ MSG_CANT_GET_ITEM_BECAUSE_WEIGHT = 0x34,
+/*20040804 to latest
+아이템을 가질 수 없습니다.
+You cannot get the item.
+*/
+ MSG_CANT_GET_ITEM = 0x35,
+/*20040804 to latest
+거래가 잘 이루어졌습니다.
+The deal has successfully completed.
+*/
+ MSG_DEAL_SECCESS = 0x36,
+/*20040804 to latest
+돈이 부족합니다.
+You do not have enough zeny.
+*/
+ MSG_INSUFFICIENT_MONEY = 0x37,
+/*20040804 to latest
+무게가 초과 되었습니다.
+You are over your Weight Limit.
+*/
+ MSG_OVER_WEIGHT = 0x38,
+/*20040804 to latest
+거래가 실패 했습니다.
+The deal has failed.
+*/
+ MSG_DEAL_FAIL = 0x39,
+/*20040804 to latest
+모두에게 귓말거부상태로됨
+You've blocked whispers from everyone.
+*/
+ MSG_REFUSE_HEAR_ALL = 0x3a,
+/*20040804 to latest
+모두에게 귓말거부요청 실패함
+You've failed to block all whispers.
+*/
+ MSG_REQ_REFUSE_HEAR_ALL_FAIL = 0x3b,
+/*20040804 to latest
+모두에게 귓말가능상태가됨
+You've allowed whispers from everyone.
+*/
+ MSG_HEAR_ALL = 0x3c,
+/*20040804 to latest
+모두에게 귓말가능요청 실패함
+You've failed to allow all whispers.
+*/
+ MSG_REQ_HEAR_ALL_FAIL = 0x3d,
+/*20040804 to latest
+귓말 거부 리스트가 없습니다
+You have no Block List.
+*/
+ MSG_NO_REFUSE_HEAR_LIST = 0x3e,
+/*20040804 to latest
+-귓말 거부 리스트-
+[ Character Block List ]
+*/
+ MSG_REFUSE_HEAR_LIST = 0x3f,
+/*20040804 to latest
+방이 잘 만들어 졌습니다.
+Room has been successfully created.
+*/
+ MSG_ROOM_IS_MADE = 0x40,
+/*20040804 to latest
+방갯수가 허용갯수를 초과 하였습니다.
+Room Limit Exceeded.
+*/
+ MSG_TOO_MANY_ROOM = 0x41,
+/*20040804 to latest
+같은 방제목이 있습니다.
+Same Room exists.
+*/
+ MSG_SAME_ROOM_TITLE = 0x42,
+/*20040804 to latest
+인원초과로 방에 들어갈 수 없습니다.
+The Room is full.
+*/
+ MSG_TOO_MANY_PEOPLE_IN_ROOM = 0x43,
+/*20040804 to latest
+강제로 퇴장된 방입니다.
+You have been kicked out of this room.
+*/
+ MSG_YOU_HAVE_BANNED_FROM_THE_ROOM = 0x44,
+/*20040804 to latest
+교환요청을 거절 했습니다.
+The deal has been rejected.
+*/
+ MSG_REJECT_DEAL = 0x45,
+/*20040804 to latest
+교환가능거리를 벗어났습니다.
+You are too far away from the person to trade.
+*/
+ MSG_TOO_FAR_TO_DEAL = 0x46,
+/*20040804 to latest
+해당 캐릭터가 없습니다.
+The Character is not currently online or does not exist.
+*/
+ MSG_CHARACTER_IS_NOT_EXIST = 0x47,
+/*20040804 to latest
+다른캐릭터와 교환중입니다.
+The person is in another deal.
+*/
+ MSG_CHARACTER_IS_DEALING = 0x48,
+/*20040804 to latest
+상태캐릭터 중량초과로 올려놓을수가 없습니다.
+*/
+ MSG_CHARACTER_IS_OVER_WEIGHT = 0x49,
+/*20040804 to latest
+거래가 취소 되었습니다.
+The deal has been canceled.
+*/
+ MSG_DEAL_IS_CANCELED = 0x4a,
+/*20040804 to latest
+아이템 교환이 잘 되었습니다.
+The deal has successfully completed.
+*/
+ MSG_DEAL_SUCCESS = 0x4b,
+/*20040804 to latest
+아이템 교환이 실패 하였습니다.
+The deal has failed.
+*/
+ MSG_DEAL_FAILED = 0x4c,
+/*20040804 to latest
+파티가 만들어졌습니다.
+Party has successfully been organized.
+*/
+ MSG_PARTY_MAKE_SUCCEED = 0x4d,
+/*20040804 to latest
+같은 파티이름이 있습니다.
+That Party Name already exists.
+*/
+ MSG_SAME_PARTY_NAME = 0x4e,
+/*20040804 to latest
+이미 파티에 속해있습니다.
+The Character is already in a party.
+*/
+ MSG_YOU_ARE_ALREADY_IN_PARTY = 0x4f,
+/*20040804 to latest
+다른파티에 가입되어 있습니다.
+The Character already joined another party.
+*/
+ MSG_CHARACTER_IS_ALREADY_IN_PARTY = 0x50,
+/*20040804 to latest
+파티가입을 거부했습니다.
+Request for party rejected.
+*/
+ MSG_CHARACTER_REJECT_JOIN = 0x51,
+/*20040804 to latest
+파티가입을 수락했습니다.
+Request for party accepted.
+*/
+ MSG_CHARACTER_ACCEPT_JOIN = 0x52,
+/*20040804 to latest
+파티정원을 초과했습니다.
+Party Capacity exceeded.
+*/
+ MSG_TOO_MANY_PEOPLE_IN_PARTY = 0x53,
+/*20040804 to latest
+파티에서 탈퇴하였습니다.
+You left the party.
+*/
+ MSG_YOU_LEAVE_FROM_PARTY = 0x54,
+/*20040804 to latest
+전체에게 보냄
+Send to All
+*/
+ MSG_SEND_TO_ALL = 0x55,
+/*20040804 to latest
+파티에게 보냄
+Send to Party
+*/
+ MSG_SEND_TO_PARTY = 0x56,
+/*20040804 to latest
+님과의 거래요청
+Request a deal with %s
+*/
+ MSG_REQ_DEAL_WITH = 0x57,
+/*20040804 to latest
+님 파티에 가입요청
+Ask %s to join your party
+*/
+ MSG_REQ_JOIN_PARTY = 0x58,
+/*20040804 to latest
+비공개 :
+Pri:
+*/
+ MSG_ROOM_PRIVATE = 0x59,
+/*20040804 to latest
+공개 :
+Pub:
+*/
+ MSG_ROOM_PUBLIC = 0x5a,
+/*20040804 to latest
+마지막 체크지점부터 시작하려면 '재시작'을 캐릭터 선택으로 돌아가려면 '종료'를 눌러주세요.
+Click ''Restart'' to go back to your save point or click ''Exit'' to select another character.
+*/
+ MSG_RESTART_MSG = 0x5b,
+/*20040804 to latest
+원하는 거래를 선택하세요.
+Please select a Deal Type.
+*/
+ MSG_SELECT_DEAL_TYPE = 0x5c,
+/*20040804 to latest
+님이 거래를 요청했습니다.
+ requests a deal.
+*/
+ MSG_SUGGEST_DEAL = 0x5d,
+/*20040804 to latest
+ 파티에서 초청 메시지가 왔습니다. 합류하겠습니까?
+ Party has sent you an invitation. Would you like to join?
+*/
+ MSG_SUGGEST_JOIN_PARTY = 0x5e,
+/*20040804 to latest
+명령이 틀렸습니다.
+Invalid Command
+*/
+ MSG_INVALID_COMMAND = 0x5f,
+/*20040804 to latest
+탈퇴하기
+Leave party
+*/
+ MSG_LEAVE_PARTY = 0x60,
+/*20040804 to latest
+제명시키기
+Expel
+*/
+ MSG_EXPEL = 0x61,
+/*20040804 to latest
+쪽지보내기
+Send Message
+*/
+ MSG_MSG = 0x62,
+/*20040804 to latest
+1:1 대화
+1:1 Chat
+*/
+ MSG_1ON1 = 0x63,
+/*20040804 to latest
+정보
+Information
+*/
+ MSG_CHARACTER_INFO = 0x64,
+/*20040804 to latest
+파티설정
+Party Setup
+*/
+ MSG_PARTY_SETTING = 0x65,
+/*20040804 to latest
+친구
+Friend
+*/
+ MSG_FRIEND = 0x66,
+/*20040804 to latest
+파티
+Party
+*/
+ MSG_PARTY = 0x67,
+/*20040804 to latest
+장착아이템
+Equipment
+*/
+ MSG_EQUIPED_ITEM = 0x68,
+/*20040804 to latest
+스테이터스
+Status
+*/
+ MSG_STATUS_ = 0x69,
+/*20040804 to latest
+소지아이템
+Inventory
+*/
+ MSG_ITEM = 0x6a,
+/*20040804 to latest
+/결성 [파티이름] : 파티결성 /탈퇴 : 파티탈퇴
+/organize ''Party Name'' To organize a party. Type /leave To leave a Party.
+*/
+ MSG_EXPLAIN_PARTY = 0x6b,
+/*20040804 to latest
+자신이 파티리더일때 캐릭터를 오른버튼으로 클릭하면 파티에 가입요청하기 메뉴가 뜹니다.
+If you are the party master, you can invite someone into your party by right-clicking on a Character.
+*/
+ MSG_EXPLAIN_TIP3 = 0x6c,
+/*20040804 to latest
+회복
+Consumables
+*/
+ MSG_RESTORE = 0x6d,
+/*20040804 to latest
+공격
+Attack
+*/
+ MSG_ATTACK = 0x6e,
+/*20040804 to latest
+보조
+Support
+*/
+ MSG_SUPPORT = 0x6f,
+/*20040804 to latest
+전체
+All
+*/
+ MSG_ALL = 0x70,
+/*20040804 to latest
+무기
+Weapons
+*/
+ MSG_WEAPON = 0x71,
+/*20040804 to latest
+방어
+Defense
+*/
+ MSG_DEFENCE = 0x72,
+/*20040804 to latest
+수
+Water
+*/
+ MSG_WATER = 0x73,
+/*20040804 to latest
+지
+Earth
+*/
+ MSG_EARTH = 0x74,
+/*20040804 to latest
+화
+Fire
+*/
+ MSG_FIRE = 0x75,
+/*20040804 to latest
+풍
+Wind
+*/
+ MSG_WIND = 0x76,
+/*20040804 to latest
+같은종류의 장비아이템은 한번에 한개만 살 수 있습니다.
+Please avoid buying 2 of the same items at one time.
+*/
+ MSG_EQUIPITEM_OLNY_ONE = 0x77,
+/*20040804 to latest
+창모드에서 실행 할때는 16비트 컬러로 맞춰주세요.
+Please change your desktop Color Depth to 16-bit when running Ragnarok in windowed mode.
+*/
+ MSG_ONLY_16BIT_WHEN_WINDOWMODE = 0x78,
+/*20040804 to latest
+잠시만 기다려 주세요.
+Please wait...
+*/
+ MSG_PLEASE_BE_PATIENT = 0x79,
+/*20040804 to latest
+잠시만 기다려 주세요.
+Please wait...
+*/
+ MSG_WAITING_RESPONSE_FROM_SERVER = 0x7a,
+/*20040804 to latest
+잠시만 기다려 주세요.
+Please wait...
+*/
+ MSG_MAKING_CHARACTER = 0x7b,
+/*20040804 to latest
+잠시만 기다려 주세요.
+Please wait...
+*/
+ MSG_DELETING_CHARACTER = 0x7c,
+/*20040804 to latest
+방 만들기
+Make a Room
+*/
+ MSG_MAKING_ROOM = 0x7d,
+/*20040804 to latest
+방셋팅 바꾸기
+Room Setup
+*/
+ MSG_CHANGE_ROOM_SETTING = 0x7e,
+/*20040804 to latest
+강퇴시키기
+Kick Character Out
+*/
+ MSG_BAN = 0x7f,
+/*20040804 to latest
+방장권한 주기
+Give Master Authority
+*/
+ MSG_GIVE_GIVE_ROOM_POWER = 0x80,
+/*20040804 to latest
+정보보기
+View Information
+*/
+ MSG_SEE_INFORMATION_OF_CHARACTER = 0x81,
+/*20040804 to latest
+대화방
+Chat Room
+*/
+ MSG_CHAT_ROOM = 0x82,
+/*20040804 to latest
+명
+Ppl
+*/
+ MSG_COUNT_UNIT_OF_PEOPLE = 0x83,
+/*20040804 to latest
+/앉기 or /sit : 앉기. 앉아있을때 서기
+/sit: Sit command. If you are sitting, you will stand instead.
+*/
+ MSG_EXPLAIN_SIT = 0x84,
+/*20040804 to latest
+/서기 or /stand : 서기. 서있을때 앉기
+/stand: Stand command. If you are standing, you will sit instead.
+*/
+ MSG_EXPLAIN_STAND = 0x85,
+/*20040804 to latest
+/채팅방 or /chat : 채팅방 만들기창 띄우기
+/chat: Creates a Chat Room
+*/
+ MSG_EXPLAIN_MAKE_CHAT = 0x86,
+/*20040804 to latest
+/q : 채팅방 나가기.
+/q: Leaves a Chat Room
+*/
+ MSG_EXPLAIN_EXIT_CHAT_ROOM = 0x87,
+/*20040804 to latest
+/거래 [캐릭터이름] or /교환 [캐릭터이름] or /deal [캐릭터이름] : 해당 캐릭터와 거래요청
+/deal ''Character Name'' Requests a deal with a character
+*/
+ MSG_EXPLAIN_DEAL = 0x88,
+/*20040804 to latest
+/결성 [파티이름] or /organize [파티이름] : 파티결성
+/organize ''Party Name'' Organizes a party
+*/
+ MSG_EXPLAIN_ORGANIZE_PARTY = 0x89,
+/*20040804 to latest
+/탈퇴 or /leave : 파티 탈퇴
+/leave: Leaves a party
+*/
+ MSG_EXPLAIN_LEAVE_PARTY = 0x8a,
+/*20040804 to latest
+/제명 [캐릭터이름] or /expel [캐릭터이름] : 해당캐릭터를 파티에서 제명시킴
+/expel ''Character Name'' kicks a Character out of your party
+*/
+ MSG_EXPLAIN_EXPEL_PARTY_MEMBER = 0x8b,
+/*20040804 to latest
+[Alt] + [End] : 플레이어 hp/sp 게이지 On Off
+[Alt] + [End]: Turns HP/SP Bar On or Off
+*/
+ MSG_EXPLAIN_TIP4 = 0x8c,
+/*20040804 to latest
+[Alt] + [Home] : 지면 커서 표시 On Off
+[Alt] + [Home]: Turns Ground Cursor On or Off
+*/
+ MSG_EXPLAIN_TIP5 = 0x8d,
+/*20040804 to latest
+[Insert] : 앉기 서기
+[Insert]: Makes you sit or stand. (Hotkey to toggle between /sit and /stand)
+*/
+ MSG_EXPLAIN_TIP6 = 0x8e,
+/*20040804 to latest
+MVP가 되셨습니다!! MVP 아이템은
+Congratulations! You are the MVP! Your reward item is
+*/
+ MSG_YOU_RECEIVE_MVP_ITEM = 0x8f,
+/*20040804 to latest
+ !!
+!!
+*/
+ MSG_YOU_RECEIVE_MVP_ITEM2 = 0x90,
+/*20040804 to latest
+MVP가 되셨습니다!! 특별경험치
+Congratulations! You are the MVP! Your reward EXP Points are
+*/
+ MSG_YOU_RECEIVE_MVP_EXP = 0x91,
+/*20040804 to latest
+ 획득!!
+!!
+*/
+ MSG_YOU_RECEIVE_MVP_EXP2 = 0x92,
+/*20040804 to latest
+MVP가 되셨습니다만 무게초과로 MVP 아이템을 가질 수 없었습니다!!
+You are the MVP, but you can't take the reward because you are over your weight limit.
+*/
+ MSG_YOU_THROW_MVPITEM = 0x93,
+/*20040804 to latest
+ 없는 캐릭터 이름 입니다.
+There is no such character name or the user is offline.
+*/
+ MSG_NOT_EXIST_CHARACTER = 0x94,
+/*20040804 to latest
+ 수신 거부 상태입니다.
+ doesn't want to receive your messages.
+*/
+ MSG_NO_RECEIVE_MODE = 0x95,
+/*20040804 to latest
+ 모든 캐릭터에 대해 수신 거부 상태 입니다.
+ is not in the mood to talk with anyone.
+*/
+ MSG_NO_RECEIVE_MODE_FOR_ALL = 0x96,
+/*20040804 to latest
+캐릭터 접속끊기 성공.
+Killed/Disconnected User.
+*/
+ MSG_SUCCESS_DISCONNECT_CHARACTER = 0x97,
+/*20040804 to latest
+캐릭터 접속끊기 실패.
+Kill has failed.
+*/
+ MSG_FAIL_DISCONNECT_CHARACTER = 0x98,
+/*20040804 to latest
+%s %d 개 획득
+You got %s (%d).
+*/
+ MSG_GET_ITEM = 0x99,
+/*20040804 to latest
+[Alt] + [=] : 알파벳 간격이 넓어졌을때 되돌리기.
+[Alt] + [=]: Fix the interval error between letters.
+*/
+ MSG_EXPLAIN_TIP7 = 0x9a,
+/*20040804 to latest
+[F10] : 채팅창 크기조정 [Alt] + [F10] : 채팅창 On Off
+[F10]: To toggle Chat Window size; [Alt] + [F10]: Toggle Chat Window On or Off
+*/
+ MSG_EXPLAIN_TIP8 = 0x9b,
+/*20040804 to latest
+귓속말 하는법 : 채팅창 왼쪽 입력란에 캐릭터이름을 입력하고 오른쪽 입력란에 말을 입력하면 됩니다. TAB키로 두입력란 사이로 커서를 이동할 수 있습니다.
+How to Whisper: Enter a Character's Name on the left side of chat window and type your message on the right side. The Tab key helps you move between these boxes.
+*/
+ MSG_EXPLAIN_TIP9 = 0x9c,
+/*20040804 to latest
+/! /? /기쁨 /하트 /땀 /아하 /짜증 /화 /돈 /... /가위 /바위 /보 : Alt + (1~9) Ctrl + (-=\) 에 대응되는 명령어 입니다.
+/!,/?,/ho,/lv,/lv2,/swt,/ic,/an,/ag,/$,/….,/thx,/wah,/sry,/heh,/swt2,/hmm,/no1,/??,/omg,/oh,/X,/hp,/go,/sob,/gg,/kis,/kis2,/pif,/ok: Emotion icons corresponding to Alt + (1~9) Ctrl + (-=\\)
+*/
+ MSG_EXPLAIN_TIP10 = 0x9d,
+/*20040804 to latest
+파티원에게 말하는법 : 말의 제일앞에 '%'를 붙이면 파티원에게 말이 갑니다. (예: "%안녕")
+How to Speak to Party: Add % in front of every message.(Example: \%Hello\)
+*/
+ MSG_EXPLAIN_TIP11 = 0x9e,
+/*20040804 to latest
+스킬레벨이 부족합니다. 교환 불능.
+You haven't learned enough Basic Skills to Trade.
+*/
+ MSG_NOT_ENOUGH_SKILLLEVE1 = 0x9f,
+/*20040804 to latest
+스킬레벨이 부족합니다. 이모션 불능.
+You haven't learned enough Basic Skills to use Emotion icons.
+*/
+ MSG_NOT_ENOUGH_SKILLLEVE2 = 0xa0,
+/*20040804 to latest
+스킬레벨이 부족합니다. 앉기 불능.
+You haven't learned enough Basic Skills to Sit.
+*/
+ MSG_NOT_ENOUGH_SKILLLEVE3 = 0xa1,
+/*20040804 to latest
+스킬레벨이 부족합니다. 채팅방만들기 불능.
+You haven't learned enough Basic Skills to create a chat room.
+*/
+ MSG_NOT_ENOUGH_SKILLLEVE4 = 0xa2,
+/*20040804 to latest
+스킬레벨이 부족합니다. 파티만들기 불능
+You haven't learned enough Basic Skills to Party.
+*/
+ MSG_NOT_ENOUGH_SKILLLEVE5 = 0xa3,
+/*20040804 to latest
+스킬레벨이 부족합니다. 외치기 불능
+You haven't learned enough skills to Shout.
+*/
+ MSG_NOT_ENOUGH_SKILLLEVE6 = 0xa4,
+/*20040804 to latest
+스킬레벨이 부족합니다. pk 불능
+You haven't learned enough skills for Pking.
+*/
+ MSG_NOT_ENOUGH_SKILLLEVE7 = 0xa5,
+/*20040804 to latest
+사고자하는 품목
+Buying Items
+*/
+ MSG_ITEMS_FOR_BUY = 0xa6,
+/*20040804 to latest
+아이템 상점
+Item Shop
+*/
+ MSG_ITEM_STORE = 0xa7,
+/*20040804 to latest
+팔고자하는 품목
+Selling Items
+*/
+ MSG_ITEMS_FOR_SELL = 0xa8,
+/*20040804 to latest
+보관아이템
+Storage
+*/
+ MSG_ITEMS_THAT_IS_STORED = 0xa9,
+/*20040804 to latest
+ 장비가 장착 되었습니다.
+ is put on.
+*/
+ MSG_ITEM_IS_EQUIPED = 0xaa,
+/*20040804 to latest
+ 장비가 해제 되었습니다.
+ is taken off.
+*/
+ MSG_ITEM_IS_REMOVED = 0xab,
+/*20040804 to latest
+귓말리스트에 이름넣기
+To add names on the Whispering List
+*/
+ MSG_ADD_TO_WHISPER_CHAR_LIST = 0xac,
+/*20040804 to latest
+스크린샷 찍는법 : [Print Screen]키나 [Scroll Lock]키를 누르면 됩니다.
+How to Take Screen Shots: Press [Print Screen] or [Scroll Lock]
+*/
+ MSG_EXPLAIN_TIP12 = 0xad,
+/*20040804 to latest
+오늘의 팁
+Tip of the Day
+*/
+ MSG_TIPOFTHEDAY = 0xae,
+/*20040804 to latest
+^3850a0알고 계셨습니까... ^000000 //^709fed
+^3850a0Did you know...?^709fed
+*/
+ MSG_DIDYOUKNOW = 0xaf,
+/*20040804 to latest
+시작할때 열기
+Display at startup
+*/
+ MSG_SHOWTIPSATSTARTUP = 0xb0,
+/*20040804 to latest
+/tip : 오늘의팁 열기
+/tip: Opens ''Tip of the Day''
+*/
+ MSG_EXPLAIN_OPENTIP = 0xb1,
+/*20040804 to latest
+현재 접속자 %d명
+There are %d Players Currently Connected.
+*/
+ MSG_NUMPEOPLE = 0xb2,
+/*20040804 to latest
+(%s)님이 입장 하였습니다.
+(%s) has entered.
+*/
+ MSG_USERGETINTHEROOM = 0xb3,
+/*20040804 to latest
+(%s)님이 퇴장 하였습니다.
+(%s) has left.
+*/
+ MSG_USERGETOUTOFTHEROOM = 0xb4,
+/*20040804 to latest
+(%s)님이 강제 퇴장 되었습니다.
+(%s) was kicked out.
+*/
+ MSG_USERGETOUTOFTHEROOMBYFORCE = 0xb5,
+/*20040804 to latest
+ %d 개
+%d ea.
+*/
+ MSG_EA = 0xb6,
+/*20040804 to latest
+%s : %d 개
+%s: %d ea.
+*/
+ MSG_EA2 = 0xb7,
+/*20040804 to latest
+%s %s : %d 개
+%s %s: %d
+*/
+ MSG_EA3 = 0xb8,
+/*20040804 to latest
+팔 수 있는 품목
+Available Items to sell
+*/
+ MSG_ITEMSYOUCANSELL = 0xb9,
+/*20040804 to latest
+상점에서 파는 품목
+Shop Items
+*/
+ MSG_SHOPITEMS = 0xba,
+/*20040804 to latest
+알 수 없는곳
+Unknown Area
+*/
+ MSG_NOWHERE = 0xbb,
+/*20040804 to latest
+서버와 언어가 맞지 않습니다.
+Your Client language doesn't match the Server language.
+*/
+ MSG_CLIENTTYPEMISMATCH = 0xbc,
+/*20040804 to latest
+아이템을 버릴려면 장비창을 닫으세요.
+Please move your equipment to the inventory. And close the equipment window.
+*/
+ MSG_CLOSEEQUIPWND = 0xbd,
+/*20040804 to latest
+영어만 됩니다.
+This server provides English Text Characters Only.
+*/
+ MSG_ENGLISHONLY = 0xbe,
+/*20040804 to latest
+지금은 지원되지 않습니다.
+This is not implemented yet.
+*/
+ MSG_NOTSUPPORTEDYET = 0xbf,
+/*20040804 to latest
+귓말 리스트가 없습니다.
+No Whisper List.
+*/
+ MSG_NOWHISPERLIST = 0xc0,
+/*20040804 to latest
+ 에게 귓말거부상태로됨
+: Whispering Blocked.
+*/
+ MSG_WHISPERIGNORESUCCESS = 0xc1,
+/*20040804 to latest
+ 에게 귓말거부 요청실패함
+: Whispering Block has failed.
+*/
+ MSG_WHISPERIGNOREFAILED1 = 0xc2,
+/*20040804 to latest
+ 에게 귓말거부 요청실패함 (인원초과)
+: Whispering Block has failed. Block List is full.
+*/
+ MSG_WHISPERIGNOREFAILED2 = 0xc3,
+/*20040804 to latest
+ 에게 귓말가능상태로됨
+: Whispering accepted.
+*/
+ MSG_WHISPERNOIGNORESUCCESS = 0xc4,
+/*20040804 to latest
+ 에게 귓말가능 요청실패함
+: Command has failed.
+*/
+ MSG_WHISPERNOIGNOREFAILED1 = 0xc5,
+/*20040804 to latest
+ 에게 귓말가능 요청실패함 (인원초과)
+: Command has failed. Block List is full.
+*/
+ MSG_WHISPERNOIGNOREFAILED2 = 0xc6,
+/*20040804 to latest
+이름의 처음과 마지막에는 공백문자를 사용할 수 없습니다.
+You cannot put a space at the beginning or end of a name.
+*/
+ MSG_NO_SPACE_IN_NAME = 0xc7,
+/*20040804 to latest
+비공개
+Private
+*/
+ MSG_ROOM_PRIVATE2 = 0xc8,
+/*20040804 to latest
+공개
+Public
+*/
+ MSG_ROOM_PUBLIC2 = 0xc9,
+/*20040804 to latest
+SP가 부족합니다.
+Not Enough SP
+*/
+ MSG_USESKILL_FAIL_SP_INSUFFICIENT = 0xca,
+/*20040804 to latest
+HP가 부족합니다.
+Not Enough HP
+*/
+ MSG_USESKILL_FAIL_HP_INSUFFICIENT = 0xcb,
+/*20040804 to latest
+스킬사용 실패.
+Skill has failed.
+*/
+ MSG_NOT_ENOUGH_SKILLLEVE8 = 0xcc,
+/*20040804 to latest
+훔치기 실패.
+Steal has failed.
+*/
+ MSG_FAIL_STEAL = 0xcd,
+/*20040804 to latest
+교환창
+Trade
+*/
+ MSG_EXCHANGE = 0xce,
+/*20040804 to latest
+독걸기 실패.
+Envenom skill has failed.
+*/
+ MSG_FAIL_POISON = 0xcf,
+/*20040804 to latest
+이 아이디로는 이 서버에 접속할 수 없습니다.
+You cannot use this ID on this server.
+*/
+ MSG_ID_MISMATCH = 0xd0,
+/*20040804 to latest
+스피드가 향상되었습니다.
+Your Speed has increased.
+*/
+ MSG_SPEEDUP = 0xd1,
+/*20040804 to latest
+스피드가 감소되었습니다.
+Your Speed has decreased.
+*/
+ MSG_SPEEDDOWN = 0xd2,
+/*20040804 to latest
+/기억 : 워프할 장소 기억(워프 스킬이 있는경우)
+/memo: To memorize a place as Warp Point (If you are an Acolyte Class character)
+*/
+ MSG_EXPLAIN_TIP13 = 0xd3,
+/*20040804 to latest
+임의의 위치
+Random Area
+*/
+ MSG_RANDOM_POS = 0xd4,
+/*20040804 to latest
+워프 할 위치를 선택하세요.
+Select an Area to Warp
+*/
+ MSG_SELECTWHERETOWARP = 0xd5,
+/*20040804 to latest
+스킬레벨이 부족합니다.
+Skill Level is not high enough
+*/
+ MSG_NOTENOUGHSKILLLEVEL = 0xd6,
+/*20040804 to latest
+저장된 워프할 장소가 없습니다.
+There are no memorized locations (Memo Points).
+*/
+ MSG_NO_STORED_PLACE_TO_WARP = 0xd7,
+/*20040804 to latest
+워프 관련 스킬이 없습니다.
+You haven't learned Warp.
+*/
+ MSG_NOWARPSKILL = 0xd8,
+/*20040804 to latest
+워프 장소로 저장됨.
+Saved location as a Memo Point for Warp Skill.
+*/
+ MSG_WARPPOINTSTORED = 0xd9,
+/*20040804 to latest
+취소
+Cancel
+*/
+ MSG_CANCEL = 0xda,
+/*20040804 to latest
+스킬 사용후 시간이 충분히 지나지 않았습니다.
+There is a Delay after using a Skill.
+*/
+ MSG_SKILLINTERVAL = 0xdb,
+/*20040804 to latest
+한번에 가질 수 있는 아이템 종류수를 초과하여 아이템을 가질 수 없습니다.
+You can't have this item because you will exceed the weight limit.
+*/
+ MSG_CANT_GET_ITEM_BECAUSE_COUNT = 0xdc,
+/*20040804 to latest
+아이템 최대 종류수를 초과 하였습니다.
+Out of the maximum capacity
+*/
+ MSG_INSUFFICIENT_OVER_COUNT = 0xdd,
+/*20040804 to latest
+수레아이템
+Cart Items
+*/
+ MSG_MERCHANTITEM = 0xde,
+/*20040804 to latest
+수레 벗기
+Take off Cart
+*/
+ MSG_CARTOFF = 0xdf,
+/*20040804 to latest
+노점 개설
+Opening a stall
+*/
+ MSG_MERCHANTSHOPMAKER = 0xe0,
+/*20040804 to 20041207
+노점이름를 입력하세요.
+20041213 to latest
+노점이름을 입력하세요.
+Please Name your Shop.
+*/
+ MSG_ENTER_SHOP_TITLE = 0xe1,
+/*20040804 to latest
+나의 노점
+My Shop
+*/
+ MSG_ITEM_MY_STORE = 0xe2,
+/*20040804 to latest
+상인 아이템 상점
+Merchant Shop
+*/
+ MSG_ITEM_MERCHANT_STORE = 0xe3,
+/*20040804 to latest
+상인에게 사고자하는 품목
+Buying Items
+*/
+ MSG_ITEMS_FOR_BUY_FROM_MERCHANT = 0xe4,
+/*20040804 to latest
+%s 사기 실패 %s
+*/
+ MSG_FAIL_BUY_ITEM_FROM_MERCHANT = 0xe5,
+/*20040804 to latest
+재고 부족.
+Out of Stock
+*/
+ MSG_INSUFFICIENT_STOCK = 0xe6,
+/*20040804 to latest
+%s %d 개 팔림.
+%s %d sold.
+*/
+ MSG_ITEM_IS_SOLD = 0xe7,
+/*20040804 to latest
+노점에서 팔 수 있는 아이템
+Available Items for Vending
+*/
+ MSG_MERCHANTMIRRORITEM = 0xe8,
+/*20040804 to latest
+돈이 부족해서 스킬을 쓸 수 없습니다.
+*/
+ MSG_SKILL_FAIL_MONEY = 0xe9,
+/*20040804 to latest
+사용할 대상을 선택하세요
+Select a Target.
+*/
+ MSG_SELECTTARGET = 0xea,
+/*20040804 to latest
+/pk on : pk On /pk off : pk Off
+/pk on: Turns PK On. /pk off: Turns PK Off.
+*/
+ MSG_EXPLAIN_TIP14 = 0xeb,
+/*20040804 to latest
+노점
+Shop
+*/
+ MSG_STREETSHOP = 0xec,
+/*20040804 to latest
+수레 아이템 [Alt+W]
+Cart Items [Alt+W]
+*/
+ MSG_OPENCARTWINDOW = 0xed,
+/*20040804 to latest
+기본정보
+Basic Information
+*/
+ MSG_BASICINFOWND = 0xee,
+/*20040804 to latest
+이무기로는 이스킬을 사용할수 없습니다.
+The skill cannot be used with this weapon.
+*/
+ MSG_USESKILL_FAIL_NOT_SUITABLE_WEAPON = 0xef,
+/*20040804 to latest
+%s 사기 실패 재고 부족 현재 재고 %d 개.
+Buying %s has been failed. Out of Stock. Current Stock %d.
+*/
+ MSG_FAIL_BUY_ITEM_FROM_MERCHANT_NO_STOCK = 0xf0,
+/*20040804 to latest
+서버와 동기화가 틀려 연결이 끊어졌습니다.
+You've been disconnected due to a time gap between you and the server.
+*/
+ MSG_SPEEDHACK = 0xf1,
+/*20040804 to latest
+화살을 장착하세요
+Please equip the proper ammunition first.
+*/
+ MSG_ERR_ATTACK_ARROW = 0xf2,
+/*20040804 to latest
+중량과다로 공격이나 스킬을 사용할 수 없습니다.
+You can't attack or use skills because you've exceeded the Weight Limit.
+*/
+ MSG_ERR_ATTACK_WEIGHT = 0xf3,
+/*20040804 to latest
+중량과다로 스킬을 사용할 수 없습니다.
+You can't use skills because you've exceeded the Weight Limit.
+*/
+ MSG_ERR_SKILL_WEIGHT = 0xf4,
+/*20040804 to latest
+화살이 장착되었습니다.
+Ammunition has been equipped.
+*/
+ MSG_MSG_ARROW_EQUIPMENT_SUCCESS = 0xf5,
+/*20040804 to latest
+레드젬스톤이 필요합니다.
+Red Gemstone required.
+*/
+ MSG_NEED_REDJAMSTONE = 0xf6,
+/*20040804 to latest
+블루젬스톤이 필요합니다.
+Blue Gemstone required.
+*/
+ MSG_NEED_BLUEJAMSTONE = 0xf7,
+/*20040804 to latest
+힘 파라메터
+Strength
+*/
+ MSG_DESC_STR = 0xf8,
+/*20040804 to latest
+민첩성 파라메터
+Agility
+*/
+ MSG_DESC_AGI = 0xf9,
+/*20040804 to latest
+체력 파라메터
+Vitality
+*/
+ MSG_DESC_VIT = 0xfa,
+/*20040804 to latest
+지력 파라메터
+Intelligence
+*/
+ MSG_DESC_INT = 0xfb,
+/*20040804 to latest
+손재주 파라메터
+Dexterity
+*/
+ MSG_DESC_DEX = 0xfc,
+/*20040804 to latest
+운 파라메터
+Luck
+*/
+ MSG_DESC_LUK = 0xfd,
+/*20040804 to latest
+공격력
+Hit Point
+*/
+ MSG_DESC_ATK = 0xfe,
+/*20040804 to latest
+방어력
+Defence Rate
+*/
+ MSG_DESC_DEF = 0xff,
+/*20040804 to latest
+명중률
+Accuracy
+*/
+ MSG_DESC_HIT = 0x100,
+/*20040804 to latest
+필살공격률
+Critical Attack
+*/
+ MSG_DESC_CRI = 0x101,
+/*20040804 to latest
+소속길드
+Affiliated Guild
+*/
+ MSG_DESC_GUILD = 0x102,
+/*20040804 to latest
+각 파라메터 레벨업에 사용되는 포인트
+Points to level up each Parameter
+*/
+ MSG_DESC_POINT = 0x103,
+/*20040804 to latest
+마법공격력
+Magic Attack
+*/
+ MSG_DESC_MATK = 0x104,
+/*20040804 to latest
+마법방어력
+Magic Defense
+*/
+ MSG_DESC_MDEF = 0x105,
+/*20040804 to latest
+회피율
+Dodge
+*/
+ MSG_DESC_FLEE = 0x106,
+/*20040804 to latest
+공격스피드
+Attack Speed
+*/
+ MSG_DESC_ASPD = 0x107,
+/*20040804 to latest
+지역당 수용인원 초과로 접속할 수 없습니다.
+Server is jammed due to over population. Please try again shortly.
+*/
+ MSG_PC_OVERFLOW = 0x108,
+/*20040804 to latest
+옵션
+Option
+*/
+ MSG_OPTIONWND = 0x109,
+/*20040804 to latest
+E-MAIL 인증이 되지않았거나 블럭된 계정입니다.
+Account ID blocked by the Game Master Team.
+*/
+ MSG_ID_EMAIL_CONFIRM_NEEDED = 0x10a,
+/*20040804 to latest
+비밀번호가 틀립니다.
+Incorrect User ID or Password. Please try again.
+*/
+ MSG_INCORRECT_LOGIN_PASSWORD = 0x10b,
+/*20040804 to latest
+머리모양 선택
+Choose Hairstyle
+*/
+ MSG_SELECT_HAIR_STYLE = 0x10c,
+/*20040804 to latest
+공격력
+Hit Point
+*/
+ MSG_ATK = 0x10d,
+/*20040804 to latest
+방어력
+Defence Rate
+*/
+ MSG_DEF = 0x10e,
+/*20040804 to latest
+공격스냅 On
+Attack Snap On
+*/
+ MSG_ATTACK_SNAP_ON = 0x10f,
+/*20040804 to latest
+공격스냅 Off
+Attack Snap Off
+*/
+ MSG_ATTACK_SNAP_OFF = 0x110,
+/*20040804 to latest
+스킬스냅 On
+Skill Snap On
+*/
+ MSG_SKILL_SNAP_ON = 0x111,
+/*20040804 to latest
+스킬스냅 Off
+Skill Snap Off
+*/
+ MSG_SKILL_SNAP_OFF = 0x112,
+/*20040804 to latest
+/스냅 or /snap: 몬스터 공격시 스냅 On Off /스킬스냅 or /skillsnap: 스킬로 몬스터 공격시 스냅 On Off /아이템스냅 or /itemsnap: 아이템 주울때 스냅 On Off
+/snap: Turns snap On | Off for fights, /skillsnap: Turns snap On | Off for skills. /itemsnap: Turns snap On | Off for items on the grounds.
+*/
+ MSG_EXPLAIN_SNAP = 0x113,
+/*20040804 to latest
+아이템스냅 On
+Item Snap On
+*/
+ MSG_ITEM_SNAP_ON = 0x114,
+/*20040804 to latest
+아이템스냅 Off
+Item Snap Off
+*/
+ MSG_ITEM_SNAP_OFF = 0x115,
+/*20040804 to latest
+스냅
+Snap
+*/
+ MSG_SNAP = 0x116,
+/*20040804 to latest
+한가지 아이템을 3만개 이상 가질수 없습니다.
+You cannot carry more than 30,000 of one kind of item.
+*/
+ MSG_CANT_GET_ITEM_OVERCOUNT_ONEITEM = 0x117,
+/*20040804 to latest
+레벨 30이상의 캐릭터는 삭제할 수 없습니다. 삭제를 원하시면 관계자에게 문의 하세요.
+You cannot delete a Character with a level greater than 30. If you want to delete the character please contact a Game Master.
+*/
+ MSG_CANT_DELETE_CHARACTER_OVER_30_LEVEL = 0x118,
+/*20040804 to latest
+이이템 교환중에는 아이템을 사고 팔 수 없습니다.
+*/
+ MSG_FAIL_BUY_ITEM_ITEM_EXCHANGING = 0x119,
+/*20040804 to latest
+상점명
+Shop Name
+*/
+ MSG_STALL_NAME = 0x11a,
+/*20040804 to latest
+스킬목록
+Skill Tree
+*/
+ MSG_SKILLLIST = 0x11b,
+/*20040804 to latest
+스킬포인트 : %d
+Skill Point: %d
+*/
+ MSG_SKILLPOINT = 0x11c,
+/*20040804 to latest
+스킬사용 실패
+Skill has failed.
+*/
+ MSG_USESKILL_FAIL = 0x11d,
+/*20040804 to latest
+패시브
+Passive
+*/
+ MSG_PASSIVE = 0x11e,
+/*20040804 to latest
+각자 취득
+Individual
+*/
+ MSG_EXPDIV1 = 0x11f,
+/*20040804 to latest
+균등하게 분배
+Shared
+*/
+ MSG_EXPDIV2 = 0x120,
+/*20040804 to latest
+각자 취득
+Individual
+*/
+ MSG_ITEMCOLLECT1 = 0x121,
+/*20040804 to latest
+파티 전체 공유
+Party Share
+*/
+ MSG_ITEMCOLLECT2 = 0x122,
+/*20040804 to latest
+파티 설정
+Party Setup
+*/
+ MSG_PARTYSETTING = 0x123,
+/*20040804 to latest
+경험치 분배방식
+How to share EXP
+*/
+ MSG_HOWEXPDIV = 0x124,
+/*20040804 to latest
+아이템 수집방식
+How to share Items
+*/
+ MSG_HOWITEMCOLLECT = 0x125,
+/*20040804 to latest
+파티 리더만 설정할 수 있습니다.
+Only the Party Leader can change this setting.
+*/
+ MSG_ONLY_PARTYMASTER = 0x126,
+/*20040804 to latest
+아이템 갯수 안물어보기
+Toggle Item Amount.
+*/
+ MSG_NOQUESTION_ITEMCOUNT = 0x127,
+/*20040804 to latest
+^ff0000%d^000000 초 후에 캐릭터가 지워집니다. 취소 하려면 취소 버튼을 누르세요.
+Character will be deleted after ^ff0000%d^000000 seconds. Press Cancel to quit.
+*/
+ MSG_CHARARATER_DELETE_COUNT = 0x128,
+/*20040804 to latest
+교환할 수 있는 최대 아이템 갯수는 10가지 입니다.
+You cannot trade more than 10 types of items per trade.
+*/
+ MSG_MAXEXCHANGE_IS_10_KIND = 0x129,
+/*20040804 to latest
+이서버를 이용할 수 없는 나이입니다.
+You are underaged.
+*/
+ MSG_LIMIT_AGE = 0x12a,
+/*20040804 to latest
+이메일 주소를 입력하세요.
+Please enter the deletion password.
+*/
+ MSG_ENTER_EMAIL = 0x12b,
+/*20040804 to latest
+이메일 주소 입력하기
+E-mail Address (Case Sensitive).
+*/
+ MSG_ENTER_EMAIL_TOOLTIP = 0x12c,
+/*20040804 to latest
+이메일 주소가 틀려서 캐릭터가 삭제 되지 않았습니다.
+Character Deletion has failed because you have entered an incorrect e-mail address.
+*/
+ MSG_CANNOT_DELETE_CHARACTER_EMAIL = 0x12d,
+/*20040804 to 20070703
+주민등록번호 뒷자리를 입력하세요.
+20070618 to 20070622
+비밀번호를 한 번 더 입력해 주시기 바랍니다.
+20070704 to latest
+계정 비밀번호를 입력하세요.
+Enter Second Serial Cord of your Social Security number.
+*/
+ MSG_ENTER_PEOPLE_REG_NUMBER = 0x12e,
+/*20040804 to 20070703
+주민등록번호 뒷자리가 틀려서 캐릭터가 삭제 되지 않았습니다.
+20070618 to 20070622
+비밀번호가 맞지 않아 캐릭터가 삭제 되지 않았습니다.
+20070704 to latest
+비밀번호가 틀려서 캐릭터가 삭제 되지 않았습니다.
+Character Deletion has failed because you have entered an incorrect SSN.
+*/
+ MSG_CANNOT_DELETE_CHARACTER_PEOPLE_REG_NUMBER = 0x12f,
+/*20040804 to latest
+한번에 15가지 이상의 아이템을 팔 수 없습니다.
+You can't sell more than 15 types of Items at one time.
+*/
+ MSG_CANT_SELL_OVER_15 = 0x130,
+/*20040804 to latest
+나이제한 때문에 이계정으로 이서버에 접속할 수 없습니다.
+The age limit from commandment tables cannot connect to this server.
+*/
+ MSG_UNDER_AGE = 0x131,
+/*20040804 to latest
+무게가 50 퍼센트 이상일때는 HP SP가 자연적으로 회복이 되지 않습니다.
+HP/SP will not be restored when your carried weight is over 50% of the Weight Limit.
+*/
+ MSG_NO_RECOVER_OVERWEIGHT = 0x132,
+/*20040804 to latest
+무게가 90 퍼센트 이상일때는 공격과 스킬을 사용할 수 없습니다.
+You can't use Skills or Attack while your carried weight is over 90% of your Weight Limit.
+*/
+ MSG_NO_ATTACK_OVERWEIGHT = 0x133,
+/*20040804 to latest
+HP SP가 자연적으로 회복이 가능한 상태가 되었습니다.
+Your HP/SP are now being restored naturally.
+*/
+ MSG_NO_RECOVER_OVERWEIGHT_RELEASED = 0x134,
+/*20040804 to latest
+공격과 스킬이 가능한 상태가 되었습니다.
+Attack and Skills are now available.
+*/
+ MSG_NO_ATTACK_OVERWEIGHT_RELEASED = 0x135,
+/*20040804 to latest
+서버 점검중입니다.
+Your Game's Exe File is not the latest version.
+*/
+ MSG_INVALID_VERSION = 0x136,
+/*20040804 to latest
+아이템이 모두 팔렸습니다.
+Items are sold out.
+*/
+ MSG_ITEM_IS_SOLD_OUT = 0x137,
+/*20040804 to latest
+채팅내용 파일로 저장하기
+Save Chat as Text File
+*/
+ MSG_WRITE_CHAT_TO_FILE = 0x138,
+/*20040804 to latest
+/갈무리 or /savechat : 채팅 내용 파일로 저장하기.
+/savechat: Save a Chat Log
+*/
+ MSG_EXPLAIN_SAVE_CHAT = 0x139,
+/*20040804 to latest
+계정 만들기
+Register
+*/
+ MSG_MAKEACCOUNT = 0x13a,
+/*20040804 to latest
+수신거부하기
+Reject Whispering
+*/
+ MSG_REQ_EX_LIST = 0x13b,
+/*20040804 to latest
+수신거부해제하기
+Allow Whispering
+*/
+ MSG_REQ_IN = 0x13c,
+/*20040804 to latest
+미스표시 On
+Shows ''Miss''
+*/
+ MSG_MISS_EFFECT_ON = 0x13d,
+/*20040804 to latest
+미스표시 Off
+Shows ''Miss''
+*/
+ MSG_MISS_EFFECT_OFF = 0x13e,
+/*20040804 to latest
+카메라고정 On
+Camera Zooming On
+*/
+ MSG_FIXED_CAMERA_ON = 0x13f,
+/*20040804 to latest
+카메라고정 Off
+Camera Zooming Off
+*/
+ MSG_FIXED_CAMERA_OFF = 0x140,
+/*20040804 to latest
+/camera : 플레이어에게 카메라고정 On Off /miss : 미스이펙트 On Off
+/camera: Camera Zooming On or Off. /miss: Toggle ''Miss'' display
+*/
+ MSG_EXPLAIN_CAMERA_MISS = 0x141,
+/*20040804 to latest
+스킬정보보기
+View Skill Info
+*/
+ MSG_SEE_INFORMATION_OF_SKILL = 0x142,
+/*20040804 to latest
+스킬이름바꾸기
+Change Skill
+*/
+ MSG_CHANGE_SKILL_NAME = 0x143,
+/*20040804 to latest
+스프라이트 해상도
+Sprite Resolution
+*/
+ MSG_SPRITE_RESOLUTION = 0x144,
+/*20040804 to latest
+텍스쳐 해상도
+Texture Resolution
+*/
+ MSG_TEXTURE_RESOLUTION = 0x145,
+/*20040804 to latest
+디테일 조정
+Arrange Detail
+*/
+ MSG_DETAILLEVELWND = 0x146,
+/*20040804 to latest
+%s Zeny 획득
+You got %s Zeny
+*/
+ MSG_GET_ZENY = 0x147,
+/*20040804 to latest
+길드명
+Guild Name
+*/
+ MSG_GUILDNAME = 0x148,
+/*20040804 to latest
+길드레벨
+Guild lvl
+*/
+ MSG_GUILDLEVEL = 0x149,
+/*20040804 to latest
+마스터이름
+ClanMaster Name
+*/
+ MSG_GUILD_MASTER_NAME = 0x14a,
+/*20040804 to latest
+조합원수
+Number of Members
+*/
+ MSG_GUILD_NUM_MEMBER = 0x14b,
+/*20040804 to latest
+조합원 평균레벨
+Avg.lvl of Guildsmen
+*/
+ MSG_GUILD_AVG_MEMBER_LEVEL = 0x14c,
+/*20040804 to latest
+관리영지
+Castles Owned
+*/
+ MSG_GUILD_MANAGE_LAND = 0x14d,
+/*20040804 to latest
+성향
+Tendency
+*/
+ MSG_GUILD_FAIR = 0x14e,
+/*20040804 to latest
+경험치
+EXP
+*/
+ MSG_GUILD_EXP = 0x14f,
+/*20040804 to latest
+길드엠블렘
+Emblem
+*/
+ MSG_GUILD_EMBLEM = 0x150,
+/*20040804 to latest
+길드상납포인트
+Tax Point
+*/
+ MSG_GUILD_POINT = 0x151,
+/*20040804 to latest
+동맹길드
+Alliances
+*/
+ MSG_ALLY_GUILD = 0x152,
+/*20040804 to latest
+적대길드
+Antagonists
+*/
+ MSG_HOSTILITY_GUILD = 0x153,
+/*20040804 to latest
+길드정보
+Guild Info
+*/
+ MSG_GUILDINFOMANAGE = 0x154,
+/*20040804 to latest
+조합원정보
+Guildsmen Info
+*/
+ MSG_GUILDMEMBERMANAGE = 0x155,
+/*20040804 to latest
+직위설정
+Position
+*/
+ MSG_GUILDPOSITIONMANAGE = 0x156,
+/*20040804 to latest
+길드스킬
+Guild Skill
+*/
+ MSG_GUILDSKILL = 0x157,
+/*20040804 to latest
+추방자 리스트
+Expel History
+*/
+ MSG_GUILDBANISHEDMEMBER = 0x158,
+/*20040804 to latest
+공지사항
+Guild Notice
+*/
+ MSG_GUILDNOTICE = 0x159,
+/*20040804 to latest
+전체길드 리스트
+Entire Guild List
+*/
+ MSG_GUILDTOTALINFO = 0x15a,
+/*20040804 to latest
+귓말 리스트
+Whispering List
+*/
+ MSG_WHISPERLISTWND = 0x15b,
+/*20040804 to latest
+귓말창 열기
+Open Whispering Window
+*/
+ MSG_OPENWHISPERLISTWND = 0x15c,
+/*20040804 to latest
+귓말 리스트 창 여는법 : [Alt] + [H] 를 누르면 귓말 리스트 창이 열립니다.
+How to Open Whispering List: Press [Alt] + [H]
+*/
+ MSG_EXPLAIN_WHISPER_LIST_WND = 0x15d,
+/*20040804 to latest
+자동으로 귓말창 열기
+Open Whispering List Automatically
+*/
+ MSG_AUTOOPENWHISPERLISTWND = 0x15e,
+/*20040804 to latest
+지우기
+Delete
+*/
+ MSG_DELETE = 0x15f,
+/*20040804 to latest
+다음부터 열리지 않음
+Close since next
+*/
+ MSG_DONTOPEN = 0x160,
+/*20040804 to latest
+마지막으로 접속한 시간
+Last Log-in Time
+*/
+ MSG_LAST_LOGIN_TIME = 0x161,
+/*20040804 to latest
+마지막으로 접속한 IP
+Last Log-in IP
+*/
+ MSG_LAST_LOGIN_IP = 0x162,
+/*20040804 to latest
+친구 설정
+Friend Setup
+*/
+ MSG_FRIEND_SETTING = 0x163,
+/*20040804 to latest
+정말 지우시겠습니까?
+Are you sure that you want to delete?
+*/
+ MSG_DO_YOU_REALLY_WANT_DELETE = 0x164,
+/*20040804 to latest
+정말 탈퇴하시겠습니까?
+Are you sure that you want to leave?
+*/
+ MSG_DO_YOU_REALLY_WANT_LEAVE = 0x165,
+/*20040804 to latest
+친구로 등록하기
+Register as a Friend
+*/
+ MSG_ADD_TO_FRIEND_CHAR_LIST = 0x166,
+/*20040804 to latest
+친구일때 자동으로 1:1창 열기
+Open 1:1 Chat between Friends
+*/
+ MSG_AUTOOPENWHISPERLISTWND_FRIEND = 0x167,
+/*20040804 to latest
+1:1창 열기
+Open 1:1 Chat
+*/
+ MSG_OPEN_1ON1_WINDOW = 0x168,
+/*20040804 to latest
+친구가 아닐때 자동으로 1:1창 열기
+Open 1:1 Chat between Strangers
+*/
+ MSG_AUTOOPEN_1ON1_WINDOW = 0x169,
+/*20040804 to latest
+1:1창 열릴때 소리로 알림
+Alarm when you recieve a 1:1 Chat
+*/
+ MSG_WHISPER_OPEN_SOUND = 0x16a,
+/*20040804 to latest
+정말 제명시키시겠습니까?
+Are you sure that you want to expel?
+*/
+ MSG_DO_YOU_REALLY_WANT_EXPEL = 0x16b,
+/*20040804 to latest
+%s 님이 길드를 탈퇴했습니다.
+%s has withdrawn from the guild.
+*/
+ MSG_USER_LEFT_GUILD = 0x16c,
+/*20040804 to latest
+탈퇴사유 : %s
+Secession Reason: %s
+*/
+ MSG_REASON_LEAVE_GUILD = 0x16d,
+/*20040804 to latest
+길드 해체 실패
+*/
+ MSG_DISORGANIZE_GUILD_FAILURE = 0x16e,
+/*20040804 to latest
+길드해체사유 : %s
+Disband Reason: %s
+*/
+ MSG_DISORGANIZATION_REASON = 0x16f,
+/*20040804 to latest
+해당 계정은 삭제된 아이디 입니다.
+This ID has been removed.
+*/
+ MSG_DELETED_ACCOUNT = 0x170,
+/*20040804 to latest
+판매가 :
+Price:
+*/
+ MSG_SELLPRICE = 0x171,
+/*20040804 to latest
+%s 님이 길드에서 추방되었습니다.
+%s has been expelled from our guild.
+*/
+ MSG_BAN_GUILD = 0x172,
+/*20040804 to latest
+추방사유 : %s
+Expulsion Reason: %s
+*/
+ MSG_REASON_BAN_GUILD = 0x173,
+/*20040804 to latest
+아이템을 착용할 수 없습니다.
+You can't put this item on.
+*/
+ MSG_CAN_NOT_EQUIP_ITEM = 0x174,
+/*20040804 to latest
+파티설정을 변경할 수 없습니다.
+You can't modify Party Setup.
+*/
+ MSG_PARTYSETTING_CHANGE_IMPOSSIBLE = 0x175,
+/*20040804 to latest
+길드가 만들어 졌습니다.
+Guild has been Created.
+*/
+ MSG_GUILD_MAKE_SUCCESS = 0x176,
+/*20040804 to latest
+이미 길드에 속해있습니다.
+You are already in a Guild.
+*/
+ MSG_GUILD_MAKE_ALREADY_MEMBER = 0x177,
+/*20040804 to latest
+같은이름의 길드가 존재합니다.
+That Guild Name already exists.
+*/
+ MSG_GUILD_MAKE_GUILD_EXIST = 0x178,
+/*20040804 to latest
+ 길드에서 초청 메시지가 왔습니다. 가입하겠습니까?
+ Guild has sent you an invitation. Would you like to join this Guild?
+*/
+ MSG_SUGGEST_JOIN_GUILD = 0x179,
+/*20040804 to latest
+다른길드에 가입되어 있습니다.
+He/She is already in a Guild.
+*/
+ MSG_CHARACTER_IS_ALREADY_IN_GUILD = 0x17a,
+/*20040804 to latest
+길드가입을 거절 했습니다.
+Offer Rejected
+*/
+ MSG_CHARACTER_REJECT_JOIN_GUILD = 0x17b,
+/*20040804 to latest
+길드가입을 수락했습니다.
+Offer Accepted
+*/
+ MSG_CHARACTER_ACCEPT_JOIN_GUILD = 0x17c,
+/*20040804 to latest
+길드정원을 초과했습니다.
+Your Guild is Full.
+*/
+ MSG_TOO_MANY_PEOPLE_IN_GUILD = 0x17d,
+/*20040804 to latest
+(%s)님 길드에 가입요청
+Send (%s) a Guild invitation
+*/
+ MSG_REQ_JOIN_GUILD = 0x17e,
+/*20040804 to latest
+스킬 레벨이 모자라서 매너포인트를 줄 수 없습니다.
+You haven't learned enough skills for aligning.
+*/
+ MSG_NOT_ENOUGH_FOR_MANNER_POINT = 0x17f,
+/*20040804 to latest
+매너 포인트 주기 성공
+Aligning completed.
+*/
+ MSG_GIVING_MANNER_POINT_SUCCESS = 0x180,
+/*20040804 to latest
+오늘 이미 사용했습니다.
+You already spent your point for today.
+*/
+ MSG_YOU_USE_TODAY_ALREADY = 0x181,
+/*20040804 to latest
+이캐릭터에게 지급한지 한달이 지나지 않았습니다.
+Hasn't been a month yet since you aligned this person.
+*/
+ MSG_ONE_MONTH_NOT_PASSED = 0x182,
+/*20040804 to latest
+%s 님으로부터 플러스 매너 포인트를 받았습니다.
+Remember, Spamming isn't nice.
+*/
+ MSG_RECEIVE_PLUS_MANNER_POINT = 0x183,
+/*20040804 to latest
+%s 님으로부터 마이너스 매너 포인트를 받았습니다.
+Please refrain from ill-mannered conduct, thank you.
+*/
+ MSG_RECEIVE_MINUS_MANNER_POINT = 0x184,
+/*20040804 to latest
+채팅 금지 시간 줄이기(풀기)
+Align with a Good Point
+*/
+ MSG_GIVE_PLUS_MANNER_POINT = 0x185,
+/*20040804 to latest
+채팅 금지 시간 늘이기(걸기)
+Align with a Bad Point
+*/
+ MSG_GIVE_MINUS_MANNER_POINT = 0x186,
+/*20040804 to latest
+(%s)님과의 거래요청
+Request a deal with (%s)
+*/
+ MSG_REQ_DEAL_WITH2 = 0x187,
+/*20040804 to latest
+(%s)님 파티에 가입요청
+Ask (%s) to join your party
+*/
+ MSG_REQ_JOIN_PARTY2 = 0x188,
+/*20040804 to latest
+ 길드에서 동맹요청 메시지가 왔습니다. 동맹하겠습니까?
+ Guild is asking you to agree to an Alliance with them. Do you accept?
+*/
+ MSG_SUGGEST_ALLY_GUILD = 0x189,
+/*20040804 to latest
+이미 동맹되어 있습니다.
+This Guild is already your Ally.
+*/
+ MSG_REQALLYGUILD_ALREADY_ALLIED = 0x18a,
+/*20040804 to latest
+동맹을 거절 했습니다.
+You reject the offer
+*/
+ MSG_REQALLYGUILD_REJECT = 0x18b,
+/*20040804 to latest
+동맹을 수락 했습니다.
+You accept the offer
+*/
+ MSG_REQALLYGUILD_ACCEPT = 0x18c,
+/*20040804 to latest
+상대길드의 동맹길드의 수가 초과 되었습니다.
+They have too many Alliances.
+*/
+ MSG_REQALLYGUILD_OVERSIZE = 0x18d,
+/*20040804 to latest
+길드의 동맹길드의 수가 초과 되었습니다.
+You have too many Alliances.
+*/
+ MSG_REQALLYMYGUILD_OVERSIZE = 0x18e,
+/*20040804 to latest
+길드 동맹 요청
+Set this guild as an Alliance
+*/
+ MSG_REQ_ALLY_GUILD = 0x18f,
+/*20040804 to latest
+길드가 성공적으로 해체 되었습니다.
+Guild was successfully disbanded.
+*/
+ MSG_DISORGANIZE_GUILD_SUCCESS = 0x190,
+/*20040804 to latest
+주민등록번호가 틀려서 길드가 해체되지 않았습니다.
+You have failed to disband the guild due to your incorrect SSN.
+*/
+ MSG_DISORGANIZE_GUILD_INVALIDKEY = 0x191,
+/*20040804 to latest
+길드맴버가 존재해서 길드가 해체되지 않았습니다.
+You have failed to disband the guild because there are guildsmen still present.
+*/
+ MSG_DISORGANIZE_GUILD_MEMBEREXIST = 0x192,
+/*20040804 to latest
+길드 적대 요청
+Set this guild as an Antagonist
+*/
+ MSG_REQ_HOSTILE_GUILD = 0x193,
+/*20040804 to latest
+머리색깔 선택
+Choose Hair Color
+*/
+ MSG_SELECT_HAIR_COLOR = 0x194,
+/*20040804 to latest
+길드결성시 필요한 아이템이 없습니다.
+You don't have necessary item to create a Guild.
+*/
+ MSG_GUILD_MAKE_GUILD_NONE_ITEM = 0x195,
+/*20040804 to latest
+몬스터 정보
+Monster Info
+*/
+ MSG_MONSTER_INFO_WINDOW = 0x196,
+/*20040804 to latest
+이름
+Name
+*/
+ MSG_NAME = 0x197,
+/*20040804 to latest
+레벨
+Level
+*/
+ MSG_LEVEL = 0x198,
+/*20040804 to latest
+HP
+*/
+ MSG_HP = 0x199,
+/*20040804 to latest
+크기
+Size
+*/
+ MSG_SIZE = 0x19a,
+/*20040804 to latest
+종족
+Type
+*/
+ MSG_RACETYPE = 0x19b,
+/*20040804 to latest
+MDEF
+*/
+ MSG_MDEFPOWER = 0x19c,
+/*20040804 to latest
+속성
+Attribute
+*/
+ MSG_PROPERTY = 0x19d,
+/*20040804 to latest
+無
+Neutral
+*/
+ MSG_PROPERTY_NEUTURAL = 0x19e,
+/*20040804 to latest
+水
+Water
+*/
+ MSG_PROPERTY_WATER = 0x19f,
+/*20040804 to latest
+地
+Earth
+*/
+ MSG_PROPERTY_EARTH = 0x1a0,
+/*20040804 to latest
+火
+Fire
+*/
+ MSG_PROPERTY_FIRE = 0x1a1,
+/*20040804 to latest
+風
+Wind
+*/
+ MSG_PROPERTY_WIND = 0x1a2,
+/*20040804 to latest
+毒
+Poison
+*/
+ MSG_PROPERTY_POISON = 0x1a3,
+/*20040804 to latest
+聖
+Holy
+*/
+ MSG_PROPERTY_SAINT = 0x1a4,
+/*20040804 to latest
+暗
+Shadow
+*/
+ MSG_PROPERTY_DARK = 0x1a5,
+/*20040804 to latest
+念
+Ghost
+*/
+ MSG_PROPERTY_MENTAL = 0x1a6,
+/*20040804 to latest
+死
+Undead
+*/
+ MSG_PROPERTY_UNDEAD = 0x1a7,
+/*20040804 to latest
+현재는 아이템을 만들 수 없습니다.
+You can't create items yet.
+*/
+ MSG_CANT_MAKE_ITEM = 0x1a8,
+/*20040804 to latest
+제조 목록
+Item List you can craft
+*/
+ MSG_MAKE_LIST = 0x1a9,
+/*20040804 to latest
+ 만들기
+ Create
+*/
+ MSG_MAKE_TARGET = 0x1aa,
+/*20040804 to latest
+ 에 필요한 재료:
+'s materials
+*/
+ MSG_REQUIRE_FOR_MAKE_TARGET = 0x1ab,
+/*20040804 to latest
+ 만들기 실패
+ item creation failed.
+*/
+ MSG_MAKE_TARGET_FAIL = 0x1ac,
+/*20040804 to latest
+ 만들기 성공
+ item created successfully.
+*/
+ MSG_MAKE_TARGET_SUCCEESS = 0x1ad,
+/*20040804 to latest
+%s 만들기를 실패하였습니다.
+ item creation failed.
+*/
+ MSG_MAKE_TARGET_FAIL_MSG = 0x1ae,
+/*20040804 to latest
+%s 만들기를 성공했습니다.
+ item created successfully.
+*/
+ MSG_MAKE_TARGET_SUCCEESS_MSG = 0x1af,
+/*20040804 to latest
+레벨이 부족합니다.
+You are not the required lvl.
+*/
+ MSG_NOT_ENOUGH_LEVEL = 0x1b0,
+/*20040804 to latest
+레벨이 너무 높습니다.
+Too high lvl for this job.
+*/
+ MSG_TOO_HIGH_LEVEL = 0x1b1,
+/*20040804 to latest
+직업이 적합하지 않습니다.
+Not the suitable job for this type of work.
+*/
+ MSG_NOT_ACCEPTABLE_JOB = 0x1b2,
+/*20040804 to latest
+토키 박스 트랩 메세지
+Record a message in the Talkie Box
+*/
+ MSG_TALKBOX_WINDOW = 0x1b3,
+/*20040804 to latest
+기록할 메세지를 입력하시기 바랍니다.
+Please type a message for the Talkie Box
+*/
+ MSG_TALKBOX_WINDOW_MSG = 0x1b4,
+/*20040804 to latest
+길드에게 보냄
+Send to Guild
+*/
+ MSG_SEND_TO_GUILD = 0x1b5,
+/*20040804 to latest
+결제된 계정이 아닙니다. 결제 페이지로 이동하시겠습니까?
+You didn't pay for this ID. Would you like to pay for it now?
+*/
+ MSG_NOT_SETTLED = 0x1b6,
+/*20040804 to latest
+서버가 혼잡한 관계로 잠시후 다시 시도해 주시기 바랍니다.
+Server is jammed due to overpopulation. Please try again after few minutes.
+*/
+ MSG_ACCOUNT_BUSY = 0x1b7,
+/*20040804 to latest
+지난 접속 정보가 남아 있습니다. 30초정도 지난뒤에 다시 시도해 주시기 바랍니다.
+Server still recognizes your last log-in. Please try again after a few minutes.
+*/
+ MSG_INFORMATION_REMAINED = 0x1b8,
+/*20040804 to latest
+매 풀어주기
+Release Falcon
+*/
+ MSG_BIRDOFF = 0x1b9,
+/*20040804 to latest
+페코페코 내리기
+Dismount
+*/
+ MSG_CHIKENOFF = 0x1ba,
+/*20040804 to latest
+小
+Small
+*/
+ MSG_SIZE_SMALL = 0x1bb,
+/*20040804 to latest
+中
+Med
+*/
+ MSG_SIZE_MIDDLE = 0x1bc,
+/*20040804 to latest
+大
+Big
+*/
+ MSG_SIZE_BIG = 0x1bd,
+/*20040804 to latest
+더블
+Double
+*/
+ MSG_DOUBLE = 0x1be,
+/*20040804 to latest
+트리플
+Triple
+*/
+ MSG_TRIPLE = 0x1bf,
+/*20040804 to latest
+쿼드로플
+Quadruple
+*/
+ MSG_QUADROPLE = 0x1c0,
+/*20040804 to latest
+%s 까지 로그인을 금지하고 있습니다.
+You are prohibited to log in until %s.
+*/
+ MSG_LOGIN_REFUSE_BLOCKED_UNTIL = 0x1c1,
+/*20040804 to latest
+의
+'s
+*/
+ MSG_MANUFACTURED_NORMAL_ITEM = 0x1c2,
+/*20040804 to latest
+의 파이어
+'s Fire
+*/
+ MSG_MANUFACTURED_FIRE_ITEM = 0x1c3,
+/*20040804 to latest
+의 아이스
+'s Ice
+*/
+ MSG_MANUFACTURED_ICE_ITEM = 0x1c4,
+/*20040804 to latest
+의 윈드
+'s Wind
+*/
+ MSG_MANUFACTURED_WIND_ITEM = 0x1c5,
+/*20040804 to latest
+의 어스
+'s Earth
+*/
+ MSG_MANUFACTURED_EARTH_ITEM = 0x1c6,
+/*20040804 to latest
+211.239.161.246
+38.144.194.2
+*/
+ MSG_ACCOUNT_ADDRESS = 0x1c7,
+/*20040804 to latest
+6900
+*/
+ MSG_ACCOUNT_PORT = 0x1c8,
+/*20040804 to latest
+http://www.ragnarok.co.kr
+*/
+ MSG_REGISTRATION_WEB_URL = 0x1c9,
+/*20040804 to latest
+%s 사용자 강제 종료
+Kill %s
+*/
+ MSG_BAN_USER = 0x1ca,
+/*20040804 to latest
+무지쎈
+Very Strong
+*/
+ MSG_ONE_STARPIECE = 0x1cb,
+/*20040804 to latest
+무지무지쎈
+Very Very Strong
+*/
+ MSG_TWO_STARPIECE = 0x1cc,
+/*20040804 to latest
+무무무쎈
+Very Very Very Strong
+*/
+ MSG_THREE_STARPIECE = 0x1cd,
+/*20040804 to latest
+길드 추방 사유
+The Reason of Expulsion
+*/
+ MSG_GUILD_KICK_REASON = 0x1ce,
+/*20040804 to latest
+ 공격 속도가 증가했습니다.
+Attack Speed is up.
+*/
+ MSG_INCATTACKSPEED = 0x1cf,
+/*20040804 to latest
+ 공격 속도가 감소했습니다.
+Attack Speed is down.
+*/
+ MSG_DECATTACKSPEED = 0x1d0,
+/*20040804 to latest
+ 무기의 공격력이 향상되었습니다.
+Weapon Damage is improved.
+*/
+ MSG_INCWEAPONATTACK = 0x1d1,
+/*20040804 to latest
+ 무기의 공격력이 감소되었습니다.
+Weapon Damage is reduced.
+*/
+ MSG_DECWEAPONATTACK = 0x1d2,
+/*20040804 to latest
+ 시전 딜레이가 줄었습니다.
+Cast Delay is reduced.
+*/
+ MSG_FASTPREDELAY = 0x1d3,
+/*20040804 to latest
+ 시전 딜레이가 정상으로 되었습니다.
+Cast Delay has returned to normal.
+*/
+ MSG_NORMALPREDELAY = 0x1d4,
+/*20040804 to latest
+ 무기에 독속성이 부여되었습니다.
+Weapon is temporarily enchanted with Poison.
+*/
+ MSG_WEAPONPROPERTYPOISON = 0x1d5,
+/*20040804 to latest
+ 무기에 성속성이 부여되었습니다.
+Weapon is temporarily enchanted with an elemental property.
+*/
+ MSG_WEAPONPROPERTYSAINT = 0x1d6,
+/*20040804 to latest
+ 무기의 원래속성이 적용되었습니다.
+Weapon has changed back to normal.
+*/
+ MSG_WEAPONPROPERTYORIGINAL = 0x1d7,
+/*20040804 to latest
+ 방어구에 성속성이 부여되었습니다.
+Armor has been enchanted with the Holy Ghost.
+*/
+ MSG_ARMORPROPERTYSAINT = 0x1d8,
+/*20040804 to latest
+ 방어구의 원래속성이 적용되었습니다.
+Armor has changed back to normal.
+*/
+ MSG_ARMORPROPERTYORIGINAL = 0x1d9,
+/*20040804 to latest
+ 배리어 상태가 되었습니다.
+Barrier Formed.
+*/
+ MSG_BARRIOR = 0x1da,
+/*20040804 to latest
+ 배리어 상태가 해제 되었습니다.
+Barrier Canceled.
+*/
+ MSG_DISAPPEARBARRIOR = 0x1db,
+/*20040804 to latest
+ 소형, 중형, 대형 몬스터에게 100% 공격력을 줍니다.
+Weapon Perfection Initiated.
+*/
+ MSG_PERFECTDAMAGE = 0x1dc,
+/*20040804 to latest
+ 웨폰퍼펙션 모드가 해제 되었습니다.
+Weapon perfection Canceled.
+*/
+ MSG_DISAPPEARPERFECTDAMAGE = 0x1dd,
+/*20040804 to latest
+ 무기가 파괴될 가능성이 높아진 대신 무기의 공격력이 증가하였습니다.
+Power-Thrust Initiated.
+*/
+ MSG_OVERTHRUSTING = 0x1de,
+/*20040804 to 20050118
+ 오버트러스팅 상태가 해제 되었습니다.
+20050124 to latest
+ 오버트러스트 상태가 해제 되었습니다.
+Power-Thrust Canceled.
+*/
+ MSG_DISAPPEAROVERTHRUSTING = 0x1df,
+/*20040804 to latest
+ 무기의 최대 성능을 끌어냅니다.
+Maximize-Power Initiated.
+*/
+ MSG_MAXIMIZE = 0x1e0,
+/*20040804 to latest
+ 맥시마이즈 상태가 해제 되었습니다.
+Maximize-Power Canceled.
+*/
+ MSG_DISAPPEARMAXIMIZE = 0x1e1,
+/*20040804 to latest
+[신서버]
+[New Server]
+*/
+ MSG_SERVER_PROPERTY_NEW = 0x1e2,
+/*20040804 to latest
+(%d 명)
+(%d players)
+*/
+ MSG_SERVER_USER_COUNT = 0x1e3,
+/*20040804 to latest
+(점검중)
+(On the maintenance)
+*/
+ MSG_SERVER_INSPECTING = 0x1e4,
+/*20040804 to latest
+길드멤버 %s님이 접속하셨습니다.
+Guild member %s has connected.
+*/
+ MSG_GUILD_MEMBER_STATUS_ONLINE = 0x1e5,
+/*20040804 to latest
+길드멤버 %s님이 종료하셨습니다.
+Guild member %s has disconnected.
+*/
+ MSG_GUILD_MEMBER_STATUS_OFFLINE = 0x1e6,
+/*20040804 to latest
+경험치 %d 얻음
+You got %d Base EXP.
+*/
+ MSG_GOT_EXPERIENCE_POINT = 0x1e7,
+/*20040804 to latest
+잡경험치 %d 얻음
+You got %d Job EXP.
+*/
+ MSG_GOT_JOB_EXPERIENCE_POINT = 0x1e8,
+/*20040804 to latest
+길드에서 탈퇴 했습니다.
+You left the guild.
+*/
+ MSG_LEFT_GUILD = 0x1e9,
+/*20040804 to latest
+길드에서 추방 당했습니다.
+You have been expelled from the Guild.
+*/
+ MSG_BAN_FROM_GUILD = 0x1ea,
+/*20040804 to latest
+아이템 감정 성공
+Item Appraisal has completed successfully.
+*/
+ MSG_ITEM_IDENTIFY_SUCCEESS = 0x1eb,
+/*20040804 to latest
+아이템 감정 실패
+Item appraisal has failed.
+*/
+ MSG_ITEM_IDENTIFY_FAIL = 0x1ec,
+/*20040804 to latest
+아이템 조합 성공
+Compounding has completed successfully.
+*/
+ MSG_ITEM_COMPOUNDING_SUCCEESS = 0x1ed,
+/*20040804 to latest
+아이템 조합 실패
+Compounding has failed.
+*/
+ MSG_ITEM_COMPOUNDING_FAIL = 0x1ee,
+/*20040804 to latest
+길드 적대 성공
+Antagonist has been set.
+*/
+ MSG_HOSTILE_GUILD_SUCCEESS = 0x1ef,
+/*20040804 to latest
+적대 길드수 초과로 길드 적대 실패
+Guild has too many Antagonists.
+*/
+ MSG_TOO_MANY_HOSTILE_GUILD = 0x1f0,
+/*20040804 to latest
+이미 적대 길드 입니다
+Already set as an Antagonist
+*/
+ MSG_ALREADY_REGISTERED_HOSTILE_GUILD = 0x1f1,
+/*20040804 to latest
+제련이 성공적으로 되었습니다.
+Upgrade has been completed successfully.
+*/
+ MSG_ITEM_REFINING_SUCCEESS = 0x1f2,
+/*20040804 to latest
+제련이 실패하였습니다.
+Upgrade has failed.
+*/
+ MSG_ITEM_REFINING_FAIL = 0x1f3,
+/*20040804 to latest
+이곳에서는 순간이동이 불가능합니다.
+Unavailable Area to Teleport
+*/
+ MSG_IMPOSSIBLE_TELEPORT_AREA = 0x1f4,
+/*20040804 to latest
+이 장소는 기억할 수 없습니다.
+Unable to memorize this place as Warp Point
+*/
+ MSG_POSSIBLE_TELEPORT_AREA = 0x1f5,
+/*20040804 to latest
+지금은 종료할 수 없습니다.
+Please wait 10 seconds before trying to log out.
+*/
+ MSG_CANT_EXIT_NOW = 0x1f6,
+/*20040804 to latest
+직위
+Position
+*/
+ MSG_POSITION = 0x1f7,
+/*20040804 to latest
+직업
+Job
+*/
+ MSG_JOB = 0x1f8,
+/*20040804 to latest
+메모
+Note
+*/
+ MSG_MEMO = 0x1f9,
+/*20040804 to latest
+기여
+Devotion
+*/
+ MSG_CONTRIBUTION = 0x1fa,
+/*20040804 to latest
+상납경험치
+Tax Point
+*/
+ MSG_EXP_CONTIRIBUTION = 0x1fb,
+/*20040804 to latest
+길드탈퇴
+Leave Guild
+*/
+ MSG_LEAVE_GUILD = 0x1fc,
+/*20040804 to latest
+제명시키기
+Expel
+*/
+ MSG_EXPEL_GUILD = 0x1fd,
+/*20040804 to latest
+서열
+Rank
+*/
+ MSG_GRADE = 0x1fe,
+/*20040804 to latest
+직위명
+Position Title
+*/
+ MSG_POSITION_NAME = 0x1ff,
+/*20040804 to latest
+가입권한
+Invitation
+*/
+ MSG_JOIN_AUTHORITY = 0x200,
+/*20040804 to latest
+처벌권한
+Punish
+*/
+ MSG_PENALTY_AUTORITY = 0x201,
+/*20040804 to latest
+상납%
+Tax %
+*/
+ MSG_CONTRIBUTION_PERCENT = 0x202,
+/*20040804 to latest
+제목
+Title
+*/
+ MSG_TITLE = 0x203,
+/*20040804 to latest
+내용
+For
+*/
+ MSG_CONTENTS = 0x204,
+/*20040804 to latest
+길드이름
+Guild Name
+*/
+ MSG_GUILD_NAME = 0x205,
+/*20040804 to latest
+길드레벨
+Guild lvl
+*/
+ MSG_GUILD_LEVEL = 0x206,
+/*20040804 to latest
+조합원수
+Number of Members
+*/
+ MSG_GUILD_PEOPLE_COUNT = 0x207,
+/*20040804 to latest
+랭킹
+Ranking
+*/
+ MSG_RANKING = 0x208,
+/*20040804 to latest
+아이템 감정
+Item Appraisal
+*/
+ MSG_ITEM_IDENTIFY = 0x209,
+/*20040804 to latest
+아이템 조합
+Insert Card
+*/
+ MSG_ITEM_COMPOUNDING = 0x20a,
+/*20040804 to latest
+탈퇴 사유를 입력해주세요.
+Please enter the reason of Secession.
+*/
+ MSG_PLEASE_INPUT_WHY_LEAVING = 0x20b,
+/*20040804 to latest
+추방 사유를 입력해주세요.
+Please enter the reason of Expulsion.
+*/
+ MSG_PELASE_INPUT_WHY_EXPEL = 0x20c,
+/*20040804 to latest
+상점을 닫으세요.
+Please close Shop.
+*/
+ MSG_PLEASE_CLOSE_STORE = 0x20d,
+/*20040804 to latest
+스킬 이름
+Skill
+*/
+ MSG_SKILL_NAME = 0x20e,
+/*20040804 to latest
+아이템 이름
+Item Name
+*/
+ MSG_ITEM_NAME = 0x20f,
+/*20040804 to latest
+https://payment.ragnarok.co.kr
+https://pay.ragnarok.co.kr (Billing Web)
+*/
+ MSG_SETTLE_WEB_URL = 0x210,
+/*20040804 to latest
+게임방에서 사용가능한 IP개수가 모두 사용중입니다. 개인 계정으로 결제 하시겠습니까?
+IP capacity of this Internet Cafe is full. Would you like to pay the personal base?
+*/
+ MSG_BAN_IP_OVERFLOW = 0x211,
+/*20040804 to latest
+결제시간이 다되어 게임을 종료합니다.
+You are out of available paid playing time. Game will be shut down automatically.
+*/
+ MSG_BAN_PAY_OUT = 0x212,
+/*20040804 to latest
+이름이 너무 깁니다. 한글 11자 영문 23자 이내로 써주십시오.
+Name is too long. Please enter a name no greater than 23 english characters.
+*/
+ MSG_NAMELENGTH_TOO_LONG = 0x213,
+/*20040804 to latest
+deleted
+Character will be deleted in %d seconds.
+*/
+ MSG_DELETE_AFTER_10_SECOND = 0x214,
+/*20040804 to latest
+귀하는 개인 정액제 사용자입니다.
+You paid with the personal regular base.
+*/
+ MSG_BILLING_100 = 0x215,
+/*20040804 to latest
+귀하는 개인정량제 사용자입니다.
+You paid with the personal regular base. Available time is xx hrs xx mins xx secs.
+*/
+ MSG_BILLING_200 = 0x216,
+/*20040804 to latest
+귀하는 개인 무료 사용자입니다.
+You are free!
+*/
+ MSG_BILLING_300 = 0x217,
+/*20040804 to latest
+귀하는 개인 무료 허용기간 사용자입니다.
+You are free for the test, your available time is xx hrs xx mins xx secs.
+*/
+ MSG_BILLING_400 = 0x218,
+/*20040804 to latest
+귀하는 게임방 정액제 사용자입니다.
+You paid with the Internet Cafe regular base. Available time is xx hrs xx mins xx secs.
+*/
+ MSG_BILLING_500 = 0x219,
+/*20040804 to latest
+귀하는 게임방 정량제 사용자입니다.
+You paid with the Time Limit for Internet Cafe. Available time is xx hrs xx mins xx secs.
+*/
+ MSG_BILLING_501 = 0x21a,
+/*20040804 to latest
+귀하는 게임방 무료 허용기간 사용자입니다.
+You are free for the test of Internet Cafe version .
+*/
+ MSG_BILLING_600 = 0x21b,
+/*20040804 to latest
+귀하는 게임방 무료 사용자입니다.
+You are free for the Internet Cafe version.
+*/
+ MSG_BILLING_700 = 0x21c,
+/*20040804 to latest
+귀하는 종량제 사이트 이용자입니다.
+You paid on the Time Limit Website.
+*/
+ MSG_BILLING_800 = 0x21d,
+/*20040804 to latest
+이모션 목록
+Emotion icon List
+*/
+ MSG_EMOTION_LIST = 0x21e,
+/*20040804 to latest
+/이모션
+/emo
+*/
+ MSG_VIEW_EMOTION = 0x21f,
+/*20040804 to latest
+/!
+*/
+ MSG_EMOTION_SURPRISE = 0x220,
+/*20040804 to latest
+/?
+*/
+ MSG_EMOTION_QUESTION = 0x221,
+/*20040804 to latest
+/기쁨
+/ho
+*/
+ MSG_EMOTION_DELIGHT = 0x222,
+/*20040804 to latest
+/하트
+/lv
+*/
+ MSG_EMOTION_THROB = 0x223,
+/*20040804 to latest
+/왕하트
+/lv2
+*/
+ MSG_EMOTION_BIGTHROB = 0x224,
+/*20040804 to latest
+/땀
+/swt
+*/
+ MSG_EMOTION_SWEAT = 0x225,
+/*20040804 to latest
+/아하
+/ic
+*/
+ MSG_EMOTION_AHA = 0x226,
+/*20040804 to latest
+/짜증
+/an
+*/
+ MSG_EMOTION_FRET = 0x227,
+/*20040804 to latest
+/화
+/ag
+*/
+ MSG_EMOTION_ANGER = 0x228,
+/*20040804 to latest
+/돈
+/$
+*/
+ MSG_EMOTION_MONEY = 0x229,
+/*20040804 to latest
+/...
+*/
+ MSG_EMOTION_THINK = 0x22a,
+/*20040804 to latest
+/감사
+/thx
+*/
+ MSG_EMOTION_THANKS = 0x22b,
+/*20040804 to latest
+/꽥
+/wah
+*/
+ MSG_EMOTION_KEK = 0x22c,
+/*20040804 to latest
+/죄송
+/sry
+*/
+ MSG_EMOTION_SORRY = 0x22d,
+/*20040804 to latest
+/웃음
+/heh
+*/
+ MSG_EMOTION_SMILE = 0x22e,
+/*20040804 to latest
+/뻘뻘
+/swt2
+*/
+ MSG_EMOTION_PROFUSELY_SWEAT = 0x22f,
+/*20040804 to latest
+/긁적
+/hmm
+*/
+ MSG_EMOTION_SCRATCH = 0x230,
+/*20040804 to latest
+/최고
+/no1
+*/
+ MSG_EMOTION_BEST = 0x231,
+/*20040804 to latest
+/두리번
+/??
+*/
+ MSG_EMOTION_STARE_ABOUT = 0x232,
+/*20040804 to latest
+/헉
+/omg
+*/
+ MSG_EMOTION_HUK = 0x233,
+/*20040804 to latest
+/오
+/oh
+*/
+ MSG_EMOTION_O = 0x234,
+/*20040804 to latest
+/엑스
+/X
+*/
+ MSG_EMOTION_X = 0x235,
+/*20040804 to latest
+/헬프
+/hlp
+*/
+ MSG_EMOTION_HELP = 0x236,
+/*20040804 to latest
+/가
+/go
+*/
+ MSG_EMOTION_GO = 0x237,
+/*20040804 to latest
+/엉엉
+/sob
+*/
+ MSG_EMOTION_CRY = 0x238,
+/*20040804 to latest
+/킥킥
+/gg
+*/
+ MSG_EMOTION_KIK = 0x239,
+/*20040804 to latest
+/쪽
+/kis
+*/
+ MSG_EMOTION_CHUP = 0x23a,
+/*20040804 to latest
+/쪽쪽
+/kis2
+*/
+ MSG_EMOTION_CHUPCHUP = 0x23b,
+/*20040804 to latest
+/흥
+/pif
+*/
+ MSG_EMOTION_HNG = 0x23c,
+/*20040804 to latest
+/응
+/ok
+*/
+ MSG_EMOTION_OK = 0x23d,
+/*20040804 to latest
+단축키 목록
+Shortcut List
+*/
+ MSG_SHORTCUT_LIST = 0x23e,
+/*20040804 to latest
+귀하의 계정은 보류되었습니다.
+Your account is suspended.
+*/
+ MSG_BAN_PAY_SUSPEND = 0x23f,
+/*20040804 to latest
+과금 정책 변경으로 인해 일시 종료됩니다. 다시 접속하여 주시기 바랍니다.
+Your connection is terminated due to change in the billing policy. Please connect again.
+*/
+ MSG_BAN_PAY_CHANGE = 0x240,
+/*20040804 to latest
+어카운트 서버에 인증된 IP와 귀하의 IP가 달라 연결을 종료합니다.
+Your connection is terminated because your IP doesn't match the authorized IP from the account server.
+*/
+ MSG_BAN_PAY_WRONGIP = 0x241,
+/*20040804 to latest
+게임방 IP에서 개인 종량제 과금을 막기 위해 연결을 종료합니다. 개인 종량제 과금을 사용하기 위해서는 게임방IP로 등록이 되지 않은 IP를 사용해 주세요.
+Your connection is terminated to prevent charging from your account's play time.
+*/
+ MSG_BAN_PAY_PNGAMEROOM = 0x242,
+/*20040804 to latest
+귀하는 운영자에 의해 강제 종료 되었습니다.
+You have been forced to disconnect by the Game Master Team.
+*/
+ MSG_BAN_OP_FORCE = 0x243,
+/*20040804 to latest
+무게가 90%를 초과하여 스킬을 사용할 수 없습니다.
+You can't use this Skill because you are over your Weight Limit.
+*/
+ MSG_USESKILL_FAIL_WEIGHTOVER = 0x244,
+/*20040804 to latest
+무명
+Nameless
+*/
+ MSG_NAMELESS_USER = 0x245,
+/*20040804 to latest
+축하합니다. %s님의 현재 랭킹이 %d위로 상승하였습니다.
+Congratulations! %s ranking has gone up to %d.
+*/
+ MSG_RANK_IN_TEN = 0x246,
+/*20040804 to latest
+안타깝게도 %s님의 현재 랭킹이 %d위로 하락하였습니다.
+What a pity! %s ranking has gone down to %d.
+*/
+ MSG_RANK_OUT_TEN = 0x247,
+/*20040804 to latest
+Pet Info
+*/
+ MSG_PET_INFO = 0x248,
+/*20040804 to latest
+만복도
+Hunger
+*/
+ MSG_PET_HUNGRY = 0x249,
+/*20040804 to latest
+친밀도
+Intimacy
+*/
+ MSG_PET_FRIENDLY = 0x24a,
+/*20040804 to latest
+상점과 채팅방을 동시에 열수 없습니다.
+Please avoid opening a chatroom while vending.
+*/
+ MSG_CANT_OPEN_STORE_WHILE_CHAT = 0x24b,
+/*20040804 to latest
+개
+Total
+*/
+ MSG_EA4 = 0x24c,
+/*20040804 to latest
+%s 를 전투불능으로 만들었습니다.
+You have knocked down %s.
+*/
+ MSG_SLAIN = 0x24d,
+/*20040804 to latest
+%s 님에 의해 전투불능 상태가 되었습니다.
+You have been knocked down by %s.
+*/
+ MSG_SLAINBY = 0x24e,
+/*20040804 to latest
+먹이 - '%s' 아이템이 존재하지 않습니다..
+Feed - "%s" is not available.
+*/
+ MSG_NOT_EXIST_PET_FOOD = 0x24f,
+/*20040804 to latest
+먹이 주기
+Feed Pet
+*/
+ MSG_PET_FEEDING = 0x250,
+/*20040804 to latest
+퍼포먼스
+Performance
+*/
+ MSG_PET_PERFORMANCE = 0x251,
+/*20040804 to latest
+알로 되돌리기
+Return to Egg Shell
+*/
+ MSG_PET_RETURN_EGG = 0x252,
+/*20040804 to latest
+악세사리 해제
+Unequip Accessory
+*/
+ MSG_PET_ACC_OFF = 0x253,
+/*20040804 to latest
+Pet 상태 보기
+Check Pet Status
+*/
+ MSG_PET_SHOWINFO = 0x254,
+/*20040804 to latest
+악세사리
+Accessory
+*/
+ MSG_PET_ACCESSARY = 0x255,
+/*20040804 to latest
+장착됨
+Equipped
+*/
+ MSG_ITEM_EQUIPED = 0x256,
+/*20040804 to latest
+펫 리스트
+Pet List
+*/
+ MSG_PET_EGG_LIST = 0x257,
+/*20040804 to latest
+장착 안됨
+Unequipped
+*/
+ MSG_ITEM_UNEQUIPED = 0x258,
+/*20040804 to latest
+정말로 먹이를 주시겠습니까?
+Are you sure that you want to feed your pet?
+*/
+ MSG_SURE_TO_FEED_PET = 0x259,
+/*20040804 to latest
+가격을 쓰실땐 숫자(0~9)만 써주십시오.
+Only the numbers (0~9) are available.
+*/
+ MSG_CAN_INPUT_NUMBER_ONLY = 0x25a,
+/*20040804 to latest
+감정되지 않은 아이템은 판매할 수 없습니다.
+You cannot sell unidentified items.
+*/
+ MSG_CANT_SELL_UNIDENTIFIED_ITEM = 0x25b,
+/*20040804 to latest
+가격이 0 Zeny인 아이템이 존재합니다. 계속 하시겠습니까?
+Item at 0 Zeny exists. Do you wish to continue?
+*/
+ MSG_YOU_HAVE_FREE_ITEM_ON_SHOP = 0x25c,
+/*20040804 to latest
+[새로 추가된 이모션 리스트]
+[New Emotion List]
+*/
+ MSG_NEW_EMOTION_LIST = 0x25d,
+/*20040804 to latest
+일본쪽 베타 사용자들에게 전하는 메세지. -> 겅호에서 재가입 하세요.
+N/A
+*/
+ MSG_BAN_JAPAN_REFUSE1 = 0x25e,
+/*20040804 to latest
+일본쪽 과금이 종료된 사용자들에게 전하는 메세지. -> 돈내라. 두 번내라.
+N/A
+*/
+ MSG_BAN_JAPAN_REFUSE2 = 0x25f,
+/*20040804 to latest
+같은 계정의 캐릭터가 이미 가입되어있습니다.
+Character in the same account already joined.
+*/
+ MSG_ALREADY_SAME_AID_JOINED = 0x260,
+/*20040804 to latest
+(%d 명) - 만18세이상
+(%d ppl) - over the age 18
+*/
+ MSG_SERVER_PROPERTY_ADULT = 0x261,
+/*20040804 to latest
+ 프로보크 상태가 되었습니다.
+Provoke initiated.
+*/
+ MSG_ENST_PROVOKE = 0x262,
+/*20040804 to latest
+ 프로보크 상태가 해제되었습니다.
+Provoke canceled.
+*/
+ MSG_DSST_PROVOKE = 0x263,
+/*20040804 to latest
+ 인듀어 상태가 되었습니다.
+Endure initiated.
+*/
+ MSG_ENST_ENDURE = 0x264,
+/*20040804 to latest
+ 인듀어 상태가 해제되었습니다.
+Endure canceled.
+*/
+ MSG_DSST_ENDURE = 0x265,
+/*20040804 to latest
+ 집중력 향상 상태가 되었습니다.
+Improve Concentration initiated.
+*/
+ MSG_ENST_CONCENTRATION = 0x266,
+/*20040804 to latest
+ 집중력 향상 상태가 해제되었습니다.
+Improve Concentration canceled.
+*/
+ MSG_DSST_CONCENTRATION = 0x267,
+/*20040804 to latest
+ 하이딩 상태가 되었습니다.
+Hiding Initiated.
+*/
+ MSG_ENST_HIDING = 0x268,
+/*20040804 to latest
+ 하이딩 상태가 해제되었습니다.
+Hiding Canceled.
+*/
+ MSG_DSST_HIDING = 0x269,
+/*20040804 to latest
+ 클로킹 상태가 되었습니다.
+Cloaking initiated.
+*/
+ MSG_ENST_CLOAKING = 0x26a,
+/*20040804 to latest
+ 클로킹 상태가 해제되었습니다.
+Cloaking canceled.
+*/
+ MSG_DSST_CLOAKING = 0x26b,
+/*20040804 to latest
+ 독을 반사 할 수 있는 상태가 되었습니다.
+Poison React initiated.
+*/
+ MSG_ENST_POISONREACT = 0x26c,
+/*20040804 to latest
+ 포이즌 리액트 상태가 해제되었습니다.
+Poison React canceled.
+*/
+ MSG_DSST_POISONREACT = 0x26d,
+/*20040804 to latest
+ 이동속도가 감소하였습니다.
+Speed reduced.
+*/
+ MSG_ENST_QUAGMIRE = 0x26e,
+/*20040804 to latest
+ 콰그마이어 상태가 해제되었습니다.
+Quagmire canceled.
+*/
+ MSG_DSST_QUAGMIRE = 0x26f,
+/*20040804 to latest
+ 방어력이 증가되었습니다.
+Defense increased.
+*/
+ MSG_ENST_ANGELUS = 0x270,
+/*20040804 to latest
+ 안젤루스 상태가 해제되었습니다.
+Angelus canceled.
+*/
+ MSG_DSST_ANGELUS = 0x271,
+/*20040804 to latest
+ 힘과 지능, 덱스가 증가하였습니다.
+Blessing aligned.
+*/
+ MSG_ENST_BLESSING = 0x272,
+/*20040804 to latest
+ 블레싱 상태가 해제되었습니다.
+Blessing canceled.
+*/
+ MSG_DSST_BLESSING = 0x273,
+/*20040804 to latest
+ 시그넘 크루시스를 사용하였습니다.
+Signum Crusis initiated.
+*/
+ MSG_ENST_CRUCIS = 0x274,
+/*20040804 to latest
+ 시그넘 크루시스 상태가 해제되었습니다.
+Signum Crusis canceled.
+*/
+ MSG_DSST_CRUCIS = 0x275,
+/*20040804 to latest
+ 독이 퍼지는 속도가 느려졌습니다.
+Slow Poison initiated.
+*/
+ MSG_ENST_SLOWPOISON = 0x276,
+/*20040804 to latest
+ 슬로우 포이즌 상태가 해제되었습니다.
+Slow Poison Canceled.
+*/
+ MSG_DSST_SLOWPOISON = 0x277,
+/*20040804 to latest
+ SP의 회복 속도가 향상 되었습니다.
+HP/SP recovery increased.
+*/
+ MSG_ENST_MAGNIFICAT = 0x278,
+/*20040804 to latest
+ 마니피캇 상태가 해제되었습니다.
+Magnificat canceled.
+*/
+ MSG_DSST_MAGNIFICAT = 0x279,
+/*20040804 to latest
+ 행운이 향상되었습니다.
+Luck increased.
+*/
+ MSG_ENST_GLORIA = 0x27a,
+/*20040804 to latest
+ 글로리아 상태가 해제되었습니다.
+Gloria canceled.
+*/
+ MSG_DSST_GLORIA = 0x27b,
+/*20040804 to latest
+ 1회 공격에 두 배 데미지를 받는 상태가 되었습니다.
+You will received double damage from all attacking opponents.
+*/
+ MSG_ENST_LEXAETERNA = 0x27c,
+/*20040804 to latest
+ 렉스에테르나 상태가 해제되었습니다.
+Lex Eterna canceled.
+*/
+ MSG_DSST_LEXAETERNA = 0x27d,
+/*20040804 to latest
+ 공격속도가 증가하였습니다.
+Attack Speed increased.
+*/
+ MSG_ENST_ADRENALINE = 0x27e,
+/*20040804 to latest
+ 공격속도가 감소하였습니다.
+Attack Speed reduced.
+*/
+ MSG_DSST_ADRENALINE = 0x27f,
+/*20040804 to latest
+ 페코에 올라 탔습니다.
+You've just been on a Peco Peco.
+*/
+ MSG_ENST_RIDING = 0x280,
+/*20040804 to latest
+ 페코에서 내렸습니다.
+You've just got off of a Peco Peco.
+*/
+ MSG_DSST_RIDING = 0x281,
+/*20040804 to latest
+ 팔콘을 장착하였습니다.
+You've just carried a Falcon with.
+*/
+ MSG_ENST_FALCON = 0x282,
+/*20040804 to latest
+ 팔콘을 풀어주었습니다.
+You've just released a Falcon.
+*/
+ MSG_DSST_FALCON = 0x283,
+/*20040804 to latest
+ 죽은척하기 상태가 되었습니다.
+Play Dead initiated.
+*/
+ MSG_ENST_TRICKDEAD = 0x284,
+/*20040804 to latest
+ 죽은척하기 상태가 해제되었습니다.
+Play Dead canceled.
+*/
+ MSG_DSST_TRICKDEAD = 0x285,
+/*20040804 to latest
+ 힘이 강해졌습니다.
+STR improved.
+*/
+ MSG_ENST_SHOUT = 0x286,
+/*20040804 to latest
+ 힘이 원래대로 돌아왔습니다.
+STR turned back to normal.
+*/
+ MSG_DSST_SHOUT = 0x287,
+/*20040804 to latest
+ 에너지코트 상태가 되었습니다.
+Energy Coat initiated.
+*/
+ MSG_ENST_ENERGYCOAT = 0x288,
+/*20040804 to latest
+ 에너지코트 상태가 해제되었습니다.
+Energy Coat canceled.
+*/
+ MSG_DSST_ENERGYCOAT = 0x289,
+/*20040804 to latest
+ 방어구가 파괴되었습니다.
+Armor destroyed.
+*/
+ MSG_ENST_BROKENAMOR = 0x28a,
+/*20040804 to latest
+ ...
+Weapon has just been released from destroyed status.
+*/
+ MSG_DSST_BROKENAMOR = 0x28b,
+/*20040804 to latest
+ 무기가 파괴되었니다.
+Weapon destroyed.
+*/
+ MSG_ENST_BROKENWEAPON = 0x28c,
+/*20040804 to latest
+ ...
+Weapon has just been released from destroyed status.
+*/
+ MSG_DSST_BROKENWEAPON = 0x28d,
+/*20040804 to latest
+ 환영상태가 되었습니다.
+Invisibility initiated.
+*/
+ MSG_ENST_ILLUSION = 0x28e,
+/*20040804 to latest
+ 환영상태가 해제되었습니다.
+Invisibility canceled.
+*/
+ MSG_DSST_ILLUSION = 0x28f,
+/*20040804 to latest
+과금 정보 처리가 늦어지고 있어 접속이 지연되고 있습니다. 잠시 후에 다시 시도해 주시기 바랍니다.
+Sorry. It is delayed due to the process of payment. Please re-connect in a minute.
+*/
+ MSG_REFUSE_BLOCK_TEMPORARY = 0x290,
+/*20040804 to 20060403
+장착된 화살을 해제 하여야 합니다.
+20060410 to 20061009
+장착된 화살 또는 탄환을 해제 하여야 합니다.
+20061016 to latest
+장착된 화살/탄환/수리검 을 해제해야합니다.
+You must unequip ammunition first.
+*/
+ MSG_UNEQUIP_ARROW = 0x291,
+/*20040804 to latest
+화살 목록
+Arrow List
+*/
+ MSG_ARROW_LIST = 0x292,
+/*20040804 to latest
+카트 목록
+Cart List
+*/
+ MSG_CART_LIST = 0x293,
+/*20040804 to latest
+카트를 장착한 상태여야 합니다.
+You must have a Pushcart.
+*/
+ MSG_MUST_EQUIP_CART = 0x294,
+/*20040804 to latest
+채팅방을 개설 할 수 없습니다.
+You cannot open a Chat Window.
+*/
+ MSG_CANT_MAKE_CHAT_ROOM = 0x295,
+/*20040804 to latest
+라그나로크 홈페이지로 접속하여 계정을 만듭니다. 처음 계정을 만드시면 3일 동안은 무료로 이용하실 수 있습니다.
+Registering an account is the first step to accessing the game. Do you want to visit the registration page now?
+*/
+ MSG_3DAY_FREE = 0x296,
+/*20040804 to latest
+앉은 상태에서는 이 아이템을 사용할 수 없습니다.
+You cannot use this item while sitting.
+*/
+ MSG_CANT_USE_WHEN_SITDOWN = 0x297,
+/*20040804 to latest
+채팅, 스킬, 아이템 사용금지가 %d 분간 남아 있습니다.
+Your use of skills and chat will be blocked for the next %d minutes.
+*/
+ MSG_BAD_MANNER_REMAIN = 0x298,
+/*20040804 to latest
+채팅, 스킬, 아이템 사용금지가 해지 되었습니다.
+Your use of skills and chat have been reinstated.
+*/
+ MSG_BAD_MANNER_END = 0x299,
+/*20040804 to latest
+-[장착안됨]
+- [Not equipped]
+*/
+ MSG_REF_UNEQUIP = 0x29a,
+/*20040804 to latest
+배고픔
+Very Hungry
+*/
+ MSG_VERY_HUNGRY = 0x29b,
+/*20040804 to latest
+출출함
+Hungry
+*/
+ MSG_HUNGRY = 0x29c,
+/*20040804 to latest
+보통
+Normal
+*/
+ MSG_NORMAL = 0x29d,
+/*20040804 to latest
+배부름
+Satisfied
+*/
+ MSG_REPLETE = 0x29e,
+/*20040804 to latest
+아주 배부름
+Stuffed
+*/
+ MSG_VERY_REPLETE = 0x29f,
+/*20040804 to latest
+서먹서먹함
+Awkward
+*/
+ MSG_VERY_AWKWARD = 0x2a0,
+/*20040804 to latest
+어색함
+Shy
+*/
+ MSG_AWKWARD = 0x2a1,
+/*20040804 to latest
+친함
+Cordial
+*/
+ MSG_FRIENDLY = 0x2a2,
+/*20040804 to latest
+절친함
+Loyal
+*/
+ MSG_VERY_FRIENDLY = 0x2a3,
+/*20040804 to latest
+알수 없음
+Unknown
+*/
+ MSG_UNKNOWN = 0x2a4,
+/*20040804 to 20080513
+(태국)귀하는 앞으로 %일 %d시간 %d분 사용이 가능합니다.
+20080520 to latest
+귀하는 앞으로 %일 %d시간 %d분 사용이 가능합니다.
+Your account has play time of %d day %d hour %d minute.
+*/
+ MSG_BILLING_DAY_HOUR_MINUTES = 0x2a5,
+/*20040804 to 20080513
+(태국)이 계정은 이미 다른 어카운트 서버로 접속한 상태입니다.
+20080520 to latest
+이 계정은 이미 다른 어카운트 서버로 접속한 상태입니다.
+Your account is already connected to account server.
+*/
+ MSG_BAN_INFORMATION_REMAINED_ANOTHER_ACCOUNT = 0x2a6,
+/*20040804 to 20080513
+(태국)귀하는 앞으로 %d시간 %d분 사용이 가능합니다.
+20080520 to latest
+귀하는 앞으로 %d시간 %d분 사용이 가능합니다.
+Your account has play time of %d hour %d minute.
+*/
+ MSG_BILLING_HOUR_MINUTES = 0x2a7,
+/*20040804 to 20080513
+(태국)귀하는 무료 사용자 입니다.
+20080520 to latest
+귀하는 무료 사용자 입니다.
+Your account is a free account.
+*/
+ MSG_BILLING_FREE_USER = 0x2a8,
+/*20040804 to 20080513
+(태국)이 계정으로 사크라이에 접속할수 없습니다.
+20080520 to latest
+이 계정으로 사크라이에 접속할수 없습니다.
+This account can't connect the Sakray server.
+*/
+ MSG_REFUSE_NONSAKRAY_ID_BLOCKED = 0x2a9,
+/*20040804 to latest
+펫의 이름은 영문 23, 한글 11자 이내로 정해 주세요.
+Your pet name must be 23 characters or less.
+*/
+ MSG_PETNAME_IN23 = 0x2aa,
+/*20040804 to latest
+이름은 단 한번만 바꿀수 있습니다. 펫 이름을 ^0000ff^0000ff %s^000000^000000 로 수정합니다. 계속 하시겠습니까?
+You may change your pet's name only once. Your pet's name will be changed to ^0000ff^0000ff %s^000000^000000. Do you wish to continue?
+*/
+ MSG_PETNAME_CHANGE_ONLYONCE = 0x2ab,
+/*20040804 to latest
+/폰트
+/font
+*/
+ MSG_NAMEBALLOON_TYPE = 0x2ac,
+/*20040804 to latest
+길드에 남은 제니가 부족하여 작업이 실패하였습니다.
+Your guild lacks the funds to pay for this venture.
+*/
+ MSG_GUILDZENY_NOT_ENOUGH = 0x2ad,
+/*20040804 to latest
+길드가 소유할 수 있는 최대 금액을 초과하여 작업이 실패하였습니다.
+Your guild zeny limit prevents you from performing this action.
+*/
+ MSG_GUILDZENY_OVER = 0x2ae,
+/*20040804 to latest
+이펙트 간략화 On
+Simplified effects have been activated.
+*/
+ MSG_MINEFFECT_ON = 0x2af,
+/*20040804 to latest
+이펙트 간략화 Off
+Simplified effects have been deactivated.
+*/
+ MSG_MINEFFECT_OFF = 0x2b0,
+/*20040804 to latest
+자본금
+Required Fee
+*/
+ MSG_CAPITAL = 0x2b1,
+/*20040804 to latest
+아이템을 바닥에 버리려면, 아이템 창을 열어 주십시오.
+If you wish to drop an item, you must first open your Item Window (alt+e).
+*/
+ MSG_OPEN_ITEMWND_TO_THROW = 0x2b2,
+/*20040804 to latest
+PC방 요금이 종료하여 개인 요금제로 전환합니다. 개인 요금으로 게임을 계속 하시겠습니까?
+Internet Cafe Time Plan has been ended. Would you like to continue the game with your personal play time?
+*/
+ MSG_ASK_PNGAMEROOM = 0x2b3,
+/*20040804 to latest
+
+*/
+ MSG_REPLY_REMAINTIME = 0x2b4,
+/*20040804 to latest
+
+*/
+ MSG_INFO_REMAINTIME = 0x2b5,
+/*20040804 to latest
+돈이 모자라거나, 가질 수 있는 최대 금액을 초과하였습니다.
+Your lack of zeny or your zeny limit have prevented you from performing this action.
+*/
+ MSG_OVER_OR_LOW_MONEY = 0x2b6,
+/*20040804 to latest
+전투불능 상태가 되었습니다. esc키를 누르시면 선택창이 뜹니다.
+Your character has fainted. Push the ESC key to restart.
+*/
+ MSG_PRESS_ESC_TO_RESTART = 0x2b7,
+/*20040804 to latest
+ %d 개 획득
+- %d obtained.
+*/
+ MSG_EA_OBTAIN = 0x2b8,
+/*20040804 to latest
+스펠 리스트
+Spell List
+*/
+ MSG_SPELL_LIST = 0x2b9,
+/*20040804 to latest
+/최소화
+/minimize
+*/
+ MSG_MINEFFECT = 0x2ba,
+/*20040804 to latest
+이 아이템은 손상되어 있습니다..
+This item has been damaged.
+*/
+ MSG_DAMAGED_ITEM = 0x2bb,
+/*20040804 to latest
+/noshift : 쉬프트를 누르지않고 힐로 적을 공격할수있게됩니다 On Off
+/noshift: You may use your ''force heal'' ability without the Shift key. On | Off
+*/
+ MSG_EXPLAIN_NOSHIFT = 0x2bc,
+/*20040804 to latest
+시프트를 누르지 않고도 힐로 언데드를 공격할수 있습니다 [/ns ON]
+[no shift] option activated. [ON]
+*/
+ MSG_NOSHIFT_ON = 0x2bd,
+/*20040804 to latest
+시프트를 눌러야 힐로 언데드를 공격할수 있습니다 [/ns OFF]
+[no shift] option deactivated. [OFF]
+*/
+ MSG_NOSHIFT_OFF = 0x2be,
+/*20040804 to latest
+MSI_REFUSE_BAN_BY_DBA
+*/
+ MSG_REFUSE_BAN_BY_DBA = 0x2bf,
+/*20040804 to latest
+MSI_REFUSE_EMAIL_NOT_CONFIRMED
+*/
+ MSG_REFUSE_EMAIL_NOT_CONFIRMED = 0x2c0,
+/*20040804 to latest
+MSI_REFUSE_BAN_BY_GM
+*/
+ MSG_REFUSE_BAN_BY_GM = 0x2c1,
+/*20040804 to latest
+MSI_REFUSE_TEMP_BAN_FOR_DBWORK
+*/
+ MSG_REFUSE_TEMP_BAN_FOR_DBWORK = 0x2c2,
+/*20040804 to latest
+MSI_REFUSE_SELF_LOCK
+*/
+ MSG_REFUSE_SELF_LOCK = 0x2c3,
+/*20040804 to latest
+MSI_REFUSE_NOT_PERMITTED_GROUP
+*/
+ MSG_REFUSE_NOT_PERMITTED_GROUP = 0x2c4,
+/*20040804 to latest
+MSI_REFUSE_WAIT_FOR_SAKRAY_ACTIVE
+*/
+ MSG_REFUSE_WAIT_FOR_SAKRAY_ACTIVE = 0x2c5,
+/*20040804 to latest
+/aura : 오오라를 간략화 시킬수있습니다 On Off
+/aura: Simplify Aura effect On | Off
+*/
+ MSG_EXPLAIN_AURA = 0x2c6,
+/*20040804 to latest
+오오라가 정상적으로 표시됩니다 [오오라 ON]
+Turn On Aura [Aura ON]
+*/
+ MSG_AURA_ON = 0x2c7,
+/*20040804 to latest
+오오라가 간략화되서 표시됩니다 [오오라 OFF]
+Simplify Aura enabled. [ON]
+*/
+ MSG_AURA_OFF = 0x2c8,
+/*20040804 to latest
+채팅금지 기록 %d 회
+Chat block record %d times
+*/
+ MSG_PROHIBIT_LOG = 0x2c9,
+/*20040804 to latest
+채팅 금지 리스트
+Chat block list
+*/
+ MSG_PROHIBIT_LIST = 0x2ca,
+/*20040804 to latest
+/이름표시 or /showname : 캐릭터의 이름 표시 방식을 변경합니다.
+/showname: Change the name font type.
+*/
+ MSG_EXPLAIN_SHOWNAMETYPE = 0x2cb,
+/*20040804 to latest
+/noctrl : 콘트롤을 누르지않아도 자동공격이 됩니다. On Off
+/noctrl | /nc: Auto attack without pressing ctrl key. On | Off
+*/
+ MSG_EXPLAIN_NOCTRL = 0x2cc,
+/*20040804 to latest
+콘트롤을 누르지 않아도 자동공격을 합니다 [/nc ON]
+Use auto attack without Ctrl. [Auto attack ON]
+*/
+ MSG_NOCTRL_ON = 0x2cd,
+/*20040804 to latest
+콘트롤을 눌러야 자동공격을 합니다 [/nc OFF]
+Use auto attack with Ctrl. [Auto attack OFF]
+*/
+ MSG_NOCTRL_OFF = 0x2ce,
+/*20040804 to latest
+채팅 금지 주기
+Mute this player.
+*/
+ MSG_APPEND_PROHIBIT = 0x2cf,
+/*20040804 to latest
+채팅 금지 완전 풀기 & 로그 삭제
+Unmute player & Erase mute time.
+*/
+ MSG_ERASE_PROHIBIT = 0x2d0,
+/*20040804 to latest
+채팅 금지 시간 줄이기(로그 삭제 안됨)
+Decrease Player Mute time.
+*/
+ MSG_REDUCE_PROHIBIT = 0x2d1,
+/*20040804 to latest
+폰트가 정상적으로 바뀌었습니다 [이름표시방식 1]
+Normal Font Displayed. [showname type 1]
+*/
+ MSG_SHOWNAME_ON = 0x2d2,
+/*20040804 to latest
+폰트가 가늘게 바뀌면서 파티명도 표시됩니다 [이름표시방식 2]
+Font will be thin and party name will be shown [showname type 2]
+*/
+ MSG_SHOWNAME_OFF = 0x2d3,
+/*20040804 to latest
+/doridori : 연속해서 이 명령어를 쳐주면 캐릭터가 도리도리 ^^;;
+/doridori: Shake head
+*/
+ MSG_EXPLAIN_DORIDORI = 0x2d4,
+/*20040804 to latest
+인터넷 카페에서 과금을 하고 있습니다.
+Internet room is paying now.
+*/
+ MSG_BILLING_INTERNET_CAFE = 0x2d5,
+/*20040804 to latest
+정액제 과금은 %d일 %d시간 %d분이 남았습니다.
+종량제 과금은 %d시간 %d분이 남았습니다.
+Prepaid voucher validate until %d days %d hours %d minutes later.
+Time limit voucher validate untill %d hours %d minutes later.
+*/
+ MSG_BILLING_BOTH = 0x2d6,
+/*20040804 to latest
+/bingbing : 연속해서 이 명령어를 쳐주면 캐릭터가 빙글빙글 ^^;;
+/bingbing: Rotates player counter clockwise.
+*/
+ MSG_EXPLAIN_BINGBING = 0x2d7,
+/*20040804 to latest
+/bangbang : 연속해서 이 명령어를 쳐주면 캐릭터가 뱅글뱅글 ^^;;
+/bangbang: Rotates player clockwise.
+*/
+ MSG_EXPLAIN_BANGBANG = 0x2d8,
+/*20040804 to latest
+/skillfail : 빨간색의 스킬사용 실패 메세지를 표시하지 않습니다 On Off
+/skillfail: Display red font message when skill fails. On | Off
+*/
+ MSG_EXPLAIN_SKILLFAIL = 0x2d9,
+/*20040804 to latest
+스킬사용 실패 메세지를 표시합니다 [/sf ON]
+Skill fail messages will be displayed. [Display On]
+*/
+ MSG_SKILLFAIL_ON = 0x2da,
+/*20040804 to latest
+스킬사용 실패 메세지를 표시하지 않습니다 [/sf OFF]
+Skill fail messages will not be displayed. [Display OFF]
+*/
+ MSG_SKILLFAIL_OFF = 0x2db,
+/*20040804 to latest
+/notalkmsg : 채팅내용을 채팅창에 표시하지 않습니다 On Off
+/notalkmsg: Chat will not be displayed in chat window. On | Off
+*/
+ MSG_EXPLAIN_NOTALKMSG = 0x2dc,
+/*20040804 to latest
+채팅내용을 채팅창에 표시합니다 [/nm ON]
+Chat content will be displayed in the chat window. [Display ON]
+*/
+ MSG_NOTALKMSG_ON = 0x2dd,
+/*20040804 to latest
+채팅내용을 채팅창에 표시하지않습니다 [/nm OFF]
+Chat content will not be displayed in the chat window. [Display OFF]
+*/
+ MSG_NOTALKMSG_OFF = 0x2de,
+/*20040804 to latest
+/set1 : /nc + /showname + /sf + /wi, /set2 : + /q3
+/set1: /noctrl + /showname + /skillfail
+*/
+ MSG_EXPLAIN_SET1 = 0x2df,
+/*20040804 to latest
+/fog : FOG이펙트를 키거나 끌수있습니다 On Off
+/fog: Fog effect. On | Off
+*/
+ MSG_EXPLAIN_FOG = 0x2e0,
+/*20040804 to latest
+ 청혼을 해왔습니다. 승낙하시겠습니까?
+You have received a marriage proposal. Do you accept?
+*/
+ MSG_SUGGEST_COUPLE = 0x2e1,
+/*20040804 to latest
+아이템 분배 방식
+Item sharing type
+*/
+ MSG_HOWITEMDIV = 0x2e2,
+/*20040804 to latest
+각자 취득
+Individual
+*/
+ MSG_ITEMDIV1 = 0x2e3,
+/*20040804 to latest
+균등하게 분배
+Shared
+*/
+ MSG_ITEMDIV2 = 0x2e4,
+/*20040804 to latest
+nProtect KeyCrypt
+*/
+ MSG_KEYCRYPT = 0x2e5,
+/*20040804 to latest
+Keyboard Driver가 검출되었습니다.
+
+키보드 보안 입력을 위해 추가기능을 설치하시겠습니까?
+
+(추가기능 설치후, 시스템 reboot 필수)
+Keyboard Driver has been detected.
+
+Do you want to install a program for keyboard security?
+
+(After installation, System Reboot is required)
+*/
+ MSG_KEYCRYPT_INSTALL_KEYDRIVER = 0x2e6,
+/*20040804 to latest
+설치가 완료 되었습니다.
+
+시스템을 Reboot 합니다.
+Installation has been completed.
+
+System will be rebooted.
+*/
+ MSG_KEYCRYPT_REBOOT = 0x2e7,
+/*20040804 to latest
+설치 실패.
+Installation has been failed.
+*/
+ MSG_KEYCRYPT_INSTALLFAIL = 0x2e8,
+/*20040804 to latest
+키보드 보안을 적용하지 않고 계속합니다.
+Keyboard Security will be skipped.
+*/
+ MSG_KEYCRYPT_SKIPKEYCRYPT = 0x2e9,
+/*20040804 to latest
+키보드 보안에 필요한 파일이 존재하지 않습니다.
+
+(npkeyc.vxd, npkeyc.sys, npkeycs.sys)
+Required file for Keyboard Security is not existing.
+
+(npkeyc.vxd, npkeyc.sys, npkeycs.sys)
+*/
+ MSG_KEYCRYPT_NOKEYCRYPTFILE = 0x2ea,
+/*20040804 to latest
+USB Keyboard가 검출되었습니다.
+
+키보드 보안 입력을 위해 추가기능을 설치하시겠습니까?
+
+(추가기능 설치후, 시스템 reboot 필수)
+USB Keyboard has been detected.
+
+Do you want to install a program for keyboard security?
+
+(After installation, System Reboot is required)
+*/
+ MSG_KEYCRYPT_USBKEYBOARD = 0x2eb,
+/*20040804 to latest
+ftp://ragnarok.nefficient.co.kr/pub/ragnarok/ragnarok0526.exe
+*/
+ MSG_FINDHACK_PATH = 0x2ec,
+/*20040804 to latest
+FindHack이 정상적으로 설치가 되어있지 않습니다. ragnarok0226.exe 를 다운로드 하여 라그나로크가 설치된 폴더에 설치해 주시기 바랍니다.(%d).
+FindHack is not installed correctly. Please download ragnarok0226.exe and install it in RagnarokOnline directory.(%d).
+*/
+ MSG_FINDHACK_NOTINSTALLED = 0x2ed,
+/*20040804 to latest
+해킹툴이 존재하지만 치료가 정상적으로 되지 않았습니다. 라그나로크가 실행되지 않습니다.
+Hacking tool is existing but it hasn't been cleaned. Rangarok Online will not be executed.
+*/
+ MSG_FINDHACK_HACKTOOLEXIST = 0x2ee,
+/*20040804 to latest
+해킹툴 진단 프로그램이 정상적으로 다운로드 되지 않았습니다. ragnarok0226.exe 를 다운로드 하여 라그나로크가 설치된 폴더에 설치해 주시기 바랍니다.
+Hacking tool scan program has not been downloaded correctly. Please download ragnarok0226.exe and install it in RagnarokOnline directory.
+*/
+ MSG_FINDHACK_CANTDOWNLOAD = 0x2ef,
+/*20040804 to latest
+NPX.DLL 등록에러 이거나 FindHack 구동에 필요한 파일이 없습니다. ragnarok0226.exe 를 다운로드 하여 라그나로크가 설치된 폴더에 설치해 주시기 바랍니다.
+NPX.DLL register error or there is no necessary file to run FindHack. Please download ragnarok0226.exe and install it in RagnarokOnline directory.
+*/
+ MSG_FINDHACK_NOFILE = 0x2f0,
+/*20040804 to latest
+예외사항이 발생했습니다. (02-3281-0361)로 문의해주세요. 리턴값(%d)
+Exceptional Error. Please contact the customer support. Return Value: (%d)
+*/
+ MSG_FINDHACK_EXCEPTION = 0x2f1,
+/*20040804 to latest
+종료버튼을 클릭 하셨습니다.
+Exit button has been clicked.
+*/
+ MSG_FINDHACK_EXITPRESSED = 0x2f2,
+/*20040804 to latest
+Findhack 업데이트 서버접근 실패하였습니다. 잠시 후에 다시 시도해 주시거나 그라비티 운영팀으로 연락해주시기 바랍니다.
+Unable to connect Findhack Update Server. Please try again or contact the customer support.
+*/
+ MSG_FINDHACK_UPDATEFAILED = 0x2f3,
+/*20040804 to latest
+사랑받고있는
+Beloved
+*/
+ MSG_NAMED_PET = 0x2f4,
+/*20040804 to latest
+/report or /신고 : 신고용 갈무리 파일을 저장합니다.
+/report: Save a chat log file.
+*/
+ MSG_REPORTCOMMAND_EXPLANATION = 0x2f5,
+/*20040804 to latest
+이 파일은 (주)그라비티의 운영팀에서 게임내의 부정행위나 비매너 행위에 대한
+증거자료로 사용하게 됩니다.
+문서를 다른 문서 형식으로 저장하거나 내용을 변경하여 원본과 일치하지 않게
+ 될 경우 그 문서는 증거 효력을 상실하게 됩니다.
+Chat logs are not accepted as evidence for any ill-mannered violation on account of possible file modifications. However this feature is provided for players' personal reference.
+*/
+ MSG_REPORTTEXT_HEADER = 0x2f6,
+/*20040804 to latest
+당신을 사랑해요 ♡
+I love you.
+*/
+ MSG_LOVE_SKILL = 0x2f7,
+/*20040804 to latest
+화면 또는 이펙트가 밝아서 눈에 부담이 되시는분들은 모니터의 밝기를 조정해주시기바랍니다.
+Please adjust your monitor/video brightness if effects appear too bright.
+*/
+ MSG_EXPLAIN_BRIGHT = 0x2f8,
+/*20040804 to latest
+전체화면모드가 잘안되는 경우에 게임실행후 ALT+TAB으로 화면을 전환하면 잘되는 기종도 있습니다
+If full screen mode fails to work, it is suggested you alt+tab [or ctrl+esc] to inactivate and reactivate the Ragnarok Client.
+*/
+ MSG_EXPLAIN_ALTTAB = 0x2f9,
+/*20040804 to latest
+(%d 명) - 유료서버
+(%d players) - Pay to Play Server
+*/
+ MSG_SERVER_PROPERTY_PAY = 0x2fa,
+/*20040804 to latest
+(%d 명) - 무료서버
+(%d players) - Free Server
+*/
+ MSG_SERVER_PROPERTY_FREE = 0x2fb,
+/*20040804 to latest
+무료 회원은 유료 서버로 접속할 수 없습니다.
+Trial players can't connect Pay to Play Server.
+*/
+ MSG_CANT_CONNECT_TO_PAY_SERVER = 0x2fc,
+/*20040804 to latest
+마우스 우클릭으로 F9에 저장한 스킬을 쓸수있습니다 [/q1 ON]
+Right click menu skills for F9 are Enabled.[/q1 ON]
+*/
+ MSG_QUICKSPELL_ON = 0x2fd,
+/*20040804 to latest
+마우스 우클릭으로 스킬을 사용하지 못합니다 [/q1 OFF]
+Right click menu skills for F9 are Disabled.[/q1 OFF]
+*/
+ MSG_QUICKSPELL_OFF = 0x2fe,
+/*20040804 to latest
+/quickspell : 마우스 우클릭으로 F9에 저장한 스킬을 사용합니다 On Off
+/quickspell: Right-click menu enables you to use skills assigned to the F9 hotkey. On | Off
+*/
+ MSG_EXPLAIN_QUICKSPELL = 0x2ff,
+/*20040804 to latest
+마우스의 WHEEL을 사용해서 F7 과 F8에 저장한 스킬을 사용합니다 [/q2 ON]
+Mouse wheel skills for F7 and F8 are Enabled.[/q2 ON]
+*/
+ MSG_QUICKSPELL2_ON = 0x300,
+/*20040804 to latest
+마우스 WHEEL로 스킬을 사용하지 못합니다 [/q2 OFF]
+Mouse wheel skills for F7 and F8 are Disabled.[/q2 OFF]
+*/
+ MSG_QUICKSPELL2_OFF = 0x301,
+/*20040804 to latest
+/quickspell2 : 마우스 WHEEL을 위,아래로 굴려서 F7과F8에 저장한 스킬을 사용합니다 On Off
+/quickspell2: By rolling the mouse wheel up and down, you are able to use skills registered on F7 and F8 hotkeys. On | Off
+*/
+ MSG_EXPLAIN_QUICKSPELL2 = 0x302,
+/*20040804 to latest
+/q3 : /quickspell (/q1) + /quickspell2 (/q2)
+/q3: /quickspell (/q1) + /quickspell2 (/q2)
+*/
+ MSG_EXPLAIN_QUICKSPELL3 = 0x303,
+/*20040804 to latest
+/찌릿
+/bzz
+*/
+ MSG_EMOTION_STARE = 0x304,
+/*20040804 to latest
+/밥
+/rice
+*/
+ MSG_EMOTION_HUNGRY = 0x305,
+/*20040804 to latest
+/멋져
+/awsm
+*/
+ MSG_EMOTION_COOL = 0x306,
+/*20040804 to latest
+/메롱
+/meh
+*/
+ MSG_EMOTION_MERONG = 0x307,
+/*20040804 to latest
+/부끄
+/shy
+*/
+ MSG_EMOTION_SHY = 0x308,
+/*20040804 to latest
+/쓱쓱
+/pat
+*/
+ MSG_EMOTION_GOODBOY = 0x309,
+/*20040804 to latest
+/엠탐
+/mp
+*/
+ MSG_EMOTION_SPTIME = 0x30a,
+/*20040804 to latest
+/질질
+/slur
+*/
+ MSG_EMOTION_SEXY = 0x30b,
+/*20040804 to latest
+/컴온
+/com
+*/
+ MSG_EMOTION_COMEON = 0x30c,
+/*20040804 to latest
+/하품
+/yawn
+*/
+ MSG_EMOTION_SLEEPY = 0x30d,
+/*20040804 to latest
+/축하
+/grat
+*/
+ MSG_EMOTION_CONGRATULATION = 0x30e,
+/*20040804 to latest
+/피탐
+/hp
+*/
+ MSG_EMOTION_HPTIME = 0x30f,
+/*20040804 to latest
+/이모션 : 현재 사용가능한 이모션의 리스트를 보여줍니다.
+/emotion: views the emoticon list.
+*/
+ MSG_EXPLAIN_EMOTION = 0x310,
+/*20040804 to latest
+키보드를 이용해서 스킬단축창 1,2,3의 스킬들을 사용합니다. [/bm ON]
+Skills assigned to shortcut windows 1, 2, 3 are Enabled. [/bm ON]
+*/
+ MSG_BATTLE_ON = 0x311,
+/*20040804 to latest
+키보드를 이용해서 스킬단축창 1,2,3의 스킬들을 사용하지못합니다. [/bm OFF]
+Skills assigned to shortcut windows 1, 2, 3 are Disabled. [/bm OFF]
+*/
+ MSG_BATTLE_OFF = 0x312,
+/*20040804 to latest
+/battlemode : Q ~ O 를 누르면 스킬단축창2의 스킬들이 사용됩니다.
+/battlemode: allows you to use skills assigned to Shortcut Window 2 by pressing Q ~ O keys.
+*/
+ MSG_EXPLAIN_BATTLE = 0x313,
+/*20040804 to latest
+ A ~ L 을 누르면 스킬단축창3의 스킬들이 사용됩니다.
+A ~ L keys allow you to use skills assigned to Shortcut Window 3.
+*/
+ MSG_EXPLAIN_BATTLE2 = 0x314,
+/*20040804 to latest
+라그나로크를 실행하실때 다른 프로그램을 띄우시면 게임이 느려질수도있습니다.
+Please remember, programs running in the background while playing may affect the game's performance.
+*/
+ MSG_EXPLAIN_LAG = 0x315,
+/*20040804 to 20041130
+천사님 제 목소리 들리세여? ^^;
+20041206 to latest
+천사님 제 목소리 들리세요? ^^;
+Dear angel, can you hear my voice?
+*/
+ MSG_SUPERNOVICE1 = 0x316,
+/*20040804 to latest
+슈퍼노비스
+Super Novice
+*/
+ MSG_SUPERNOVICE2 = 0x317,
+/*20040804 to 20041130
+예여~
+20041206 to latest
+예요~
+Super Novice~
+*/
+ MSG_SUPERNOVICE3 = 0x318,
+/*20040804 to 20041130
+저 좀 도와주세여~ ㅠ_ㅠ
+20041206 to latest
+저 좀 도와주세요~ ㅠ_ㅠ
+Help me out~ Please~ T_T
+*/
+ MSG_SUPERNOVICE4 = 0x319,
+/*20040804 to 20041011
+ 입양을 요청해왔습니다. 승낙하시겠습니까?
+20041018 to latest
+님께서 당신을 입양시키고 싶어하십니다. 승낙하시겠습니까?
+ wishes to adopt you. Do you accept?
+*/
+ MSG_SUGGEST_BABY = 0x31a,
+/*20040804 to latest
+ Z ~ > 을 누르면 스킬단축창1의 스킬들이 사용됩니다. On Off
+Z ~ > keys allow you to use skills assigned on shortcut window 1. On | Off
+*/
+ MSG_EXPLAIN_BATTLE3 = 0x31b,
+/*20040804 to latest
+ Space를 한번 누른뒤에 글자를 입력하면 채팅을 할수있습니다.
+Press the space bar to Chat when in Battle mode [/battlemode | /bm].
+*/
+ MSG_EXPLAIN_BATTLE4 = 0x31c,
+/*20040804 to latest
+게임가드 파일이 없거나 변조되었습니다. 게임가드 셋업 파일을 설치해보시기 바랍니다.
+"Either there's no Game Guard installed on the program or Game Guard is cracked. Please, try to reinstall Game Guard from its setup file."
+*/
+ MSG_NPGAMEMON_ERROR_AUTH_GAMEGUARD = 0x31d,
+/*20040804 to latest
+윈도우의 일부 시스템 파일이 손상되었습니다. 인터넷 익스플로러(IE)를 다시 설치해보시기 바랍니다.
+Some of Windows system files have been damaged. Please re-install your Internet Explorer.
+*/
+ MSG_NPGAMEMON_ERROR_CRYPTOAPI = 0x31e,
+/*20040804 to latest
+게임가드 실행에 실패했습니다. 게임가드 셋업 파일을 다시 설치해보시기 바랍니다.
+"Failed to run Game Guard. Please, try to reinstall Game Guard from its setup file."
+*/
+ MSG_NPGAMEMON_ERROR_EXECUTE = 0x31f,
+/*20040804 to latest
+불법 프로그램이 발견되었습니다. 불필요한 프로그램을 종료한 후 다시 실행해보시기 바랍니다.
+"At least one hazardous program has been detected. Please, terminate all the unnecessary programs before executing Game Guard."
+*/
+ MSG_NPGAMEMON_ERROR_ILLEGAL_PRG = 0x320,
+/*20040804 to latest
+게임가드 업데이트를 취소하셨습니다. 접속이 계속 되지 않을 경우 인터넷 및 방화벽 상태를 점검해보시기 바랍니다.
+"Game Guard update is canceled. If the disconnection continues, please, check your internet or firewall settings."
+*/
+ MSG_NPGMUP_ERROR_ABORT = 0x321,
+/*20040804 to latest
+게임가드 업데이트 서버 접속에 실패하였습니다. 잠시 후 재시도 해보거나, 인터넷 및 방화벽 상태를 점검해 보시기 바랍니다.
+"Failed to connect to Game Guard update server. Try to connect again later, or try to check the internet or firewall settings."
+*/
+ MSG_NPGMUP_ERROR_CONNECT = 0x322,
+/*20040804 to latest
+게임가드 업데이트를 완료하지 못 했습니다. 바이러스 검사를 해보시거나, PC 관리 프로그램을 사용하시면 설정을 조정한 후 게임을 실행해 보시기 바랍니다.
+"Can't complete Game Guard update process. Please, try to execute a vaccine program to remove viruses. Or, please try to modify the settings of your PC managing tool if you are using any."
+*/
+ MSG_NPGMUP_ERROR_AUTH = 0x323,
+/*20040804 to latest
+/notrade : 거래신청을 자동으로 거절합니다 On Off
+/notrade: Declines trade offers automatically. On | Off
+*/
+ MSG_EXPLAIN_NOTRADE = 0x324,
+/*20040804 to 20040805
+거래신청을 자동으로 거절합니다 [/nt ON]
+20040809 to latest
+거래신청과 친구등록요청을 자동으로 거절합니다 [/nt ON]
+Auto decline trade offers has been Enabled. [/nt ON]
+*/
+ MSG_NOTRADE_ON = 0x325,
+/*20040804 to 20040805
+거래신청을 정상적으로 받습니다 [/nt OFF]
+20040809 to latest
+거래신청과 친구등록요청을 정상적으로 받습니다 [/nt OFF]
+Auto decline trade offers has been Disabled. [/nt OFF]
+*/
+ MSG_NOTRADE_OFF = 0x326,
+/*20040804 to latest
+같은 아이템은 한번에 30000개 이상은 살수 없습니다.
+You cannot buy more than 30,000ea items at once.
+*/
+ MSG_LIMIT_BUY_ITEM = 0x327,
+/*20040804 to latest
+재료가 충분하지 않습니다.
+You do not have enough ingredients.
+*/
+ MSG_NOT_ENOUGH_SOURCE = 0x328,
+/*20040804 to latest
+%s에 계정정보가 남아있습니다.
+Login information remains at %s.
+*/
+ MSG_ALREADY_CONNECT = 0x329,
+/*20040804 to 20040906
+해킹 관련 조사를 위해 로그인이 금지되 었습니다. 자세한 문의는 해킹관련 메일로 하여주시기 바랍니다.
+20040913 to latest
+계정도용 조사를 위해 로그인이 금지되었습니다. 자세한 문의는 계정도용 관련 문의 메일로 해주시기 바랍니다.
+Account has been locked for a hacking investigation. Please contact the GM Team for more information.
+*/
+ MSG_HACKING_INVESTIGATION = 0x32a,
+/*20040804 to latest
+귀하는 버그관련 조사중이므로 일시적으로 접속을 금합니다
+This account has been temporarily prohibited from login due to a bug-related investigation.
+*/
+ MSG_BUG_INVESTIGATION = 0x32b,
+/*20040804 to latest
+수리가능한 아이템
+Repairable items
+*/
+ MSG_REPAIRITEMLIST = 0x32c,
+/*20040804 to latest
+아이템 수리 성공
+Item has been successfully repaired.
+*/
+ MSG_ITEM_REPAIR_SUCCEESS = 0x32d,
+/*20040804 to latest
+아이템 수리 실패 (재료 또는 상대와의 거리등을 확인해주십시요)
+You have failed to repair this item. Please check the distance between you and opponent.
+*/
+ MSG_ITEM_REPAIR_FAIL = 0x32e,
+/*20040804 to latest
+시스템 상황을 지속적으로 체크 합니다.[운영자모드] [/sc ON]
+System process enabled [GM mode] [/sc ON]
+*/
+ MSG_SYSTEM_CHECK_ON = 0x32f,
+/*20040804 to latest
+시스템 상황을 지속적으로 체크 하지 않습니다.[운영자모드] [/sc OFF]
+System process disabled [GM mode] [/sc OFF]
+*/
+ MSG_SYSTEM_CHECK_OFF = 0x330,
+/*20040804 to latest
+/systemcheck : 시스템 상황을 지속적으로 체크 합니다.[운영자모드]
+/systemcheck: Check the system process [GM mode] On | Off
+*/
+ MSG_EXPLAIN_SYSTEM_CHECK = 0x331,
+/*20040804 to latest
+(%s)님이 친구 신청을 하셨습니다. 친구가 되시겠습니까?
+(%s) wishes to be friends with you. Would you like to accept?
+*/
+ MSG_SUGGEST_JOIN_FRIEND = 0x332,
+/*20040804 to latest
+더 이상 친구 등록을 하실수 없습니다.
+Your Friend List is full.
+*/
+ MSG_FRIEND_ADD_ME_OVERSIZE = 0x333,
+/*20040804 to latest
+(%s)님이 더 이상 친구 등록을 하실수 없습니다.
+(%s)'s Friend List is full.
+*/
+ MSG_FRIEND_ADD_OTHER_OVERSIZE = 0x334,
+/*20040804 to latest
+(%s)님과 친구가 되셨습니다.
+You have become friends with (%s).
+*/
+ MSG_FRIEND_ADD_SUCCEED = 0x335,
+/*20040804 to latest
+(%s)님이 친구 되기를 원하지 않습니다.
+(%s) does not want to be friends with you.
+*/
+ MSG_FRIEND_ADD_FALSE = 0x336,
+/*20040804 to latest
+이 캐릭터는 %s 까지 블럭되어있습니다.
+This character will be blocked to use until %s.
+*/
+ MSG_BLOCKED = 0x337,
+/*20040804 to latest
+천만제니 이상 입력하셔도 가격은 천만제니로 판매됩니다.
+Price will be fixed at 10,000,000 zeny, even if you enter higher price.
+*/
+ MSG_OVERPRICE = 0x338,
+/*20040804 to latest
+(적음)
+(Very low)
+*/
+ MSG_LITTLEUSER = 0x339,
+/*20040804 to latest
+(약간 적음)
+(Low)
+*/
+ MSG_ALITTLEUSER = 0x33a,
+/*20040804 to latest
+(보통)
+(Normal)
+*/
+ MSG_NORMLEUSER = 0x33b,
+/*20040804 to latest
+(많음)
+(High)
+*/
+ MSG_MANYUSER = 0x33c,
+/*20040804 to latest
+(매우 많음)
+(Very high)
+*/
+ MSG_VERYMANYUSER = 0x33d,
+/*20040804 to latest
+비매너에 의해 운영자로부터 채팅금지가 적용됩니다.
+You have been blocked from using chat and skills for %d minutes by the GM Team.
+*/
+ MSG_GM_BAD_MANNER_START = 0x33e,
+/*20040804 to latest
+GM에 의한 채팅금지가 %d 분 남아 있습니다.
+%d minutes remain until release from the GM penalty.
+*/
+ MSG_GM_BAD_MANNER_REMAIN = 0x33f,
+/*20040804 to latest
+GM에 의한 채팅금지가 해지 되었습니다.
+You have been released from the GM penalty.
+*/
+ MSG_GM_BAD_MANNER_END = 0x340,
+/*20040804 to latest
+도배 방지 시스템으로 인한 자동 채팅금지가 적용됩니다.
+You have been blocked from using chat and skills for %d as an automatic penalty.
+*/
+ MSG_AUTO_BAD_MANNER_START = 0x341,
+/*20040804 to latest
+도배 방지 시스템으로 인한 채팅금지가 %d 분 남아 있습니다.
+%d minutes remain until release from auto penalty.
+*/
+ MSG_AUTO_BAD_MANNER_REMAIN = 0x342,
+/*20040804 to latest
+도배 방지 시스템으로 인한 채팅금지가 해지되었습니다. 게임진행 시에는 도배에 대해서 주의하여 주시기 바랍니다.
+You have been released from the auto penalty. Please refrain from spamming in-game.
+*/
+ MSG_AUTO_BAD_MANNER_END = 0x343,
+/*20040804 to latest
+%s님과 %s님이 이혼하셨습니다.
+%s and %s have divorced from each other.
+*/
+ MSG_DIVORCE = 0x344,
+/*20040804 to 20041108
+星鬪士 %s의 태양의 장소로 %s 가 지정됐습니다.
+20041115 to latest
+拳聖 %s의 태양의 장소로 %s 가 지정됐습니다.
+%s has been designated as Gravity %s's Solar Space.
+20041220 to 20050816
+태양과 달과 별의 전사 %s의 태양의 장소로 %s 가 지정됐습니다.
+*/
+ MSG_STARPLACE1 = 0x345,
+/*20040804 to 20041108
+星鬪士 %s의 달의 장소로 %s 가 지정됐습니다.
+20041115 to latest
+拳聖 %s의 달의 장소로 %s 가 지정됐습니다.
+%s has been designated as Gravity %s's Luna Space.
+20041220 to 20050816
+태양과 달과 별의 전사 %s의 달의 장소로 %s 가 지정됐습니다.
+*/
+ MSG_STARPLACE2 = 0x346,
+/*20040804 to 20041108
+星鬪士 %s의 별의 장소로 %s 가 지정됐습니다.
+20041115 to latest
+拳聖 %s의 별의 장소로 %s 가 지정됐습니다.
+%s has been designated as Gravity %s's Stellar Space.
+20041220 to 20050816
+태양과 달과 별의 전사 %s의 별의 장소로 %s 가 지정됐습니다.
+*/
+ MSG_STARPLACE3 = 0x347,
+/*20040804 to 20041108
+星鬪士 %s의 태양의 장소는 %s 입니다
+20041115 to latest
+拳聖 %s의 태양의 장소는 %s 입니다
+Gravity %s's Solar Space: %s
+20041220 to 20050816
+태양과 달과 별의 전사 %s의 태양의 장소는 %s 입니다
+*/
+ MSG_STARPLACE4 = 0x348,
+/*20040804 to 20041108
+星鬪士 %s의 달의 장소는 %s 입니다
+20041115 to latest
+拳聖 %s의 달의 장소는 %s 입니다
+Gravity %s's Luna Space: %s
+20041220 to 20050816
+태양과 달과 별의 전사 %s의 달의 장소는 %s 입니다
+*/
+ MSG_STARPLACE5 = 0x349,
+/*20040804 to 20041108
+星鬪士 %s의 별의 장소는 %s 입니다
+20041115 to latest
+拳聖 %s의 별의 장소는 %s 입니다
+Gravity %s's Stellar Space: %s
+20041220 to 20050816
+태양과 달과 별의 전사 %s의 별의 장소는 %s 입니다
+*/
+ MSG_STARPLACE6 = 0x34a,
+/*20040804 to 20041108
+星鬪士 %s의 태양의 몬스터로 %s 가 지정됐습니다.
+20041115 to latest
+拳聖 %s의 태양의 몬스터로 %s 가 지정됐습니다.
+%s has been designated as Gravity %s's Solar Monster.
+20041220 to 20050816
+태양과 달과 별의 전사 %s의 태양의 몬스터로 %s 가 지정됐습니다.
+*/
+ MSG_STARMONSTER1 = 0x34b,
+/*20040804 to 20041108
+星鬪士 %s의 달의 몬스터로 %s 가 지정됐습니다.
+20041115 to latest
+拳聖 %s의 달의 몬스터로 %s 가 지정됐습니다.
+%s has been designated as Gravity %s's Luna Monster.
+20041220 to 20050816
+태양과 달과 별의 전사 %s의 달의 몬스터로 %s 가 지정됐습니다.
+*/
+ MSG_STARMONSTER2 = 0x34c,
+/*20040804 to 20041108
+星鬪士 %s의 별의 몬스터로 %s 가 지정됐습니다.
+20041115 to latest
+拳聖 %s의 별의 몬스터로 %s 가 지정됐습니다.
+%s has been designated as Gravity %s's Stellar Monster.
+20041220 to 20050816
+태양과 달과 별의 전사 %s의 별의 몬스터로 %s 가 지정됐습니다.
+*/
+ MSG_STARMONSTER3 = 0x34d,
+/*20040804 to 20041108
+星鬪士 %s의 태양의 몬스터는 %s 입니다
+20041115 to latest
+拳聖 %s의 태양의 몬스터는 %s 입니다
+Gravity %s's Solar Monster: %s
+20041220 to 20050816
+태양과 달과 별의 전사 %s의 태양의 몬스터는 %s 입니다
+*/
+ MSG_STARMONSTER4 = 0x34e,
+/*20040804 to 20041108
+星鬪士 %s의 달의 몬스터는 %s 입니다
+20041115 to latest
+拳聖 %s의 달의 몬스터는 %s 입니다
+Gravity %s's Luna Monster: %s
+20041220 to 20050816
+태양과 달과 별의 전사 %s의 달의 몬스터는 %s 입니다
+*/
+ MSG_STARMONSTER5 = 0x34f,
+/*20040804 to 20041108
+星鬪士 %s의 별의 몬스터는 %s 입니다
+20041115 to latest
+拳聖 %s의 별의 몬스터는 %s 입니다
+Gravity %s's Stellar Monster: %s
+20041220 to 20050816
+태양과 달과 별의 전사 %s의 별의 몬스터는 %s 입니다
+*/
+ MSG_STARMONSTER6 = 0x350,
+/*20040804 to latest
+/window : 창 위치 이동시 다른 창과 달라붙는 속성이 들어갑니다 On Off
+/window: Display windows will snap/dock together. On | Off
+*/
+ MSG_EXPLAIN_WINDOW = 0x351,
+/*20040804 to latest
+창 위치 이동시 다른 창과 잘 붙습니다 [/wi ON]
+Display window docking enabled. [/wi ON]
+*/
+ MSG_WINDOW_ON = 0x352,
+/*20040804 to latest
+창 위치 이동시 다른 창과 붙으려는 속성을 가지지 않습니다 [/wi OFF]
+Display window docking disabled. [/wi OFF]
+*/
+ MSG_WINDOW_OFF = 0x353,
+/*20040804 to latest
+/pvpinfo : 자신의 PVP 승패와 PVP 포인트를 알 수 있습니다.
+/pvpinfo: shows your PVP result and PVP points.
+*/
+ MSG_EXPLAIN_PVP_INFO = 0x354,
+/*20040804 to latest
+현재 %d승, %d패, PVP포인트는 %d입니다.
+You have won %d times and have lost %d times in PVP. Current points %d.
+*/
+ MSG_PVP_INFO = 0x355,
+/*20040804 to latest
+매너 포인트를 성공적으로 보냈습니다.
+A manner point has been successfully aligned.
+*/
+ MSG_SEND_MANNER_POINT = 0x356,
+#if PACKETVER >= 20040809
+/*20040809 to latest
+현재 이곳은 PK 가능 지역입니다. 불의의 공격에 유의 하시기 바랍니다.
+You are in a PK area. Please beware of sudden attack.
+*/
+ MSG_PKZONE = 0x357,
+#endif
+#if PACKETVER >= 20040817
+/*20040817 to latest
+게임가드 업데이트가 바이러스나 스파이웨어와의 충돌로 실패했습니다. 백신 프로그램/스파이웨어 제거 프로그램을 사용한 후 접속해 주십시기 바랍니다
+Game Guard update has been failed when either Virus or Spyware conflicted with. Please, Uninstall Spyware and Virus protection program before you log in.
+*/
+ MSG_NPGAMEMON_ERROR_100ERROR = 0x358,
+#endif
+#if PACKETVER >= 20040823
+/*20040823 to latest
+윈도우 호환성 문제로 프로그램을 종료합니다. 게임을 다시 실행해 주시기 바랍니다
+Program has encountered an error related to Windows compatibility. Please start the game again.
+*/
+ MSG_NPGAMEMON_XP_COMPATIBILITY = 0x359,
+#endif
+#if PACKETVER >= 20040906
+/*20040906 to latest
+채팅, 스킬, 아이템을 사용할수없게 되었습니다.
+You have been blocked from chatting, using skills and items.
+*/
+ MSG_PK_HONOR = 0x35a,
+/*20040906 to latest
+캐릭터 삭제 작업중이므로 접속이 일시적으로 제한됩니다.
+Login is temporarily unavailable while this character is being deleted.
+*/
+ MSG_DELETING_CHAR = 0x35b,
+/*20040906 to latest
+결혼 상대자의 캐릭터 삭제 작업중이므로 접속이 일시적으로 제한됩니다.
+Login is temporarily unavailable while your spouse character is being deleted.
+*/
+ MSG_DELETING_SPOUSE_CHAR = 0x35c,
+#endif
+#if PACKETVER >= 20040913
+/*20040913 to latest
+Novice
+*/
+ MSG_NOVICE = 0x35d,
+/*20040913 to latest
+Swordman
+*/
+ MSG_SWORDMAN = 0x35e,
+/*20040913 to latest
+Magician
+Mage
+*/
+ MSG_MAGICIAN = 0x35f,
+/*20040913 to latest
+Archer
+*/
+ MSG_ARCHER = 0x360,
+/*20040913 to latest
+Acolyte
+*/
+ MSG_ACOLYTE = 0x361,
+/*20040913 to latest
+Merchant
+*/
+ MSG_MERCHANT = 0x362,
+/*20040913 to latest
+Thief
+*/
+ MSG_THIEF = 0x363,
+/*20040913 to latest
+Knight
+*/
+ MSG_KNIGHT = 0x364,
+/*20040913 to latest
+Prieset
+Priest
+*/
+ MSG_PRIEST = 0x365,
+/*20040913 to latest
+Wizerd
+Wizard
+*/
+ MSG_WIZARD = 0x366,
+/*20040913 to latest
+Blacksmith
+*/
+ MSG_BLACKSMITH = 0x367,
+/*20040913 to latest
+Hunter
+*/
+ MSG_HUNTER = 0x368,
+/*20040913 to latest
+Assassin
+*/
+ MSG_ASSASSIN = 0x369,
+/*20040913 to latest
+Novice
+*/
+ MSG_NOVICE_W = 0x36a,
+/*20040913 to latest
+Swordman
+*/
+ MSG_SWORDMAN_W = 0x36b,
+/*20040913 to latest
+Magician
+Mage
+*/
+ MSG_MAGICIAN_W = 0x36c,
+/*20040913 to latest
+Archer
+*/
+ MSG_ARCHER_W = 0x36d,
+/*20040913 to latest
+Acolyte
+*/
+ MSG_ACOLYTE_W = 0x36e,
+/*20040913 to latest
+Merchant
+*/
+ MSG_MERCHANT_W = 0x36f,
+/*20040913 to latest
+Thief
+*/
+ MSG_THIEF_W = 0x370,
+/*20040913 to latest
+Knight
+*/
+ MSG_KNIGHT_W = 0x371,
+/*20040913 to latest
+Prieset
+Priest
+*/
+ MSG_PRIEST_W = 0x372,
+/*20040913 to latest
+Wizerd
+Wizard
+*/
+ MSG_WIZARD_W = 0x373,
+/*20040913 to latest
+Blacksmith
+*/
+ MSG_BLACKSMITH_W = 0x374,
+/*20040913 to latest
+Hunter
+*/
+ MSG_HUNTER_W = 0x375,
+/*20040913 to latest
+Assassin
+*/
+ MSG_ASSASSIN_W = 0x376,
+#endif
+#if PACKETVER >= 20041018
+/*20041018 to latest
+(%s)님을 아이로 입양신청
+Send an adoption request to %s
+*/
+ MSG_REQ_JOIN_BABY = 0x377,
+/*20041018 to 20041025
+아이가 되시면 전승을 하실수 없게 됩니다. 그래도 괜찮습니까?
+20041101 to latest
+아이가 되면 전승을 할수없고 스텟은 80이상 올릴수없게되며 HP와 SP가 줄어듭니다. 그래도 괜찮습니까?
+When you become a child, you will be unable to become a Transcendent Class character, all stats will be limited to a maximum of 80, and Max HP/SP will be reduced. Are you sure that you want to be adopted?
+*/
+ MSG_SUGGEST_BABY2 = 0x378,
+#endif
+#if PACKETVER >= 20041101
+/*20041101 to latest
+모든 나쁜 상태이상이 제거 되었습니다.
+All abnormal status effects have been removed.
+*/
+ MSG_GOSPEL1 = 0x379,
+/*20041101 to latest
+1분간 모든 상태이상에 대해 면역이 됩니다.
+You will be immune to abnormal status effects for the next minute.
+*/
+ MSG_GOSPEL2 = 0x37a,
+/*20041101 to latest
+1분간 최대 생명력이 크게 늘어납니다.
+Your Max HP will stay increased for the next minute.
+*/
+ MSG_GOSPEL3 = 0x37b,
+/*20041101 to latest
+1분간 최대 마법력이 크게 늘어납니다.
+Your Max SP will stay increased for the next minute.
+*/
+ MSG_GOSPEL4 = 0x37c,
+/*20041101 to latest
+1분간 모든 능력이 크게 상승합니다.
+All of your Stats will stay increased for the next minute.
+*/
+ MSG_GOSPEL5 = 0x37d,
+/*20041101 to latest
+1분간 사용하는 무기에 성스러운 속성이 부여됩니다.
+Your weapon will remain blessed with Holy power for the next minute.
+*/
+ MSG_GOSPEL6 = 0x37e,
+/*20041101 to latest
+1분간 사용하는 갑옷에 성스러운 속성이 부여됩니다.
+Your armor will remain blessed with Holy power for the next minute.
+*/
+ MSG_GOSPEL7 = 0x37f,
+/*20041101 to latest
+10초간 방어력이 크게 상승합니다.
+Your Defense will stay increased for the next 10 seconds.
+*/
+ MSG_GOSPEL8 = 0x380,
+/*20041101 to latest
+1분간 공격력이 크게 증가합니다.
+Your Attack strength will be increased for the next minute.
+*/
+ MSG_GOSPEL9 = 0x381,
+/*20041101 to latest
+1분간 명중률과 회피율이 크게 상승합니다.
+Your Accuracy and Flee Rate will be increased for the next minute.
+*/
+ MSG_GOSPEL10 = 0x382,
+#endif
+#if PACKETVER >= 20041108
+/*20041108 to latest
+아이를 한번 입양했던 부부는 추가 입양이 불가능합니다.
+You cannot adopt more than 1 child.
+*/
+ MSG_BABY1 = 0x383,
+/*20041108 to latest
+부부가 둘다 레벨70이 넘어야 아이를 입양할수있습니다.
+You must be at least character level 70 in order to adopt someone.
+*/
+ MSG_BABY2 = 0x384,
+/*20041108 to 20041108
+블랙스미스 랭킹포인트가 %d 상승해서 %d 포인트가 되었습니다.
+20041115 to latest
+[POINT] 블랙스미스 랭킹포인트가 %d 상승해서 %d 포인트가 되었습니다.
+[Point] You have been rewarded with %d Blacksmith rank points. Your point total is %d.
+*/
+ MSG_BLACKSMITH_POINT = 0x385,
+/*20041108 to 20041108
+알케미스트 랭킹포인트가 %d 상승해서 %d 포인트가 되었습니다.
+20041115 to latest
+[POINT] 알케미스트 랭킹포인트가 %d 상승해서 %d 포인트가 되었습니다.
+[Point] You have been rewarded with %d Alchemist rank points. Your point total is %d.
+*/
+ MSG_ALCHEMIST_POINT = 0x386,
+#endif
+#if PACKETVER >= 20041115
+/*20041115 to 20041130
+천사님 제 목소리 들리세요? ^^;
+Dear angel, can you hear my voice?
+20041206 to latest
+X
+Help me out~ Please~ T_T
+*/
+ MSG_SUPERNOVICE11 = 0x387,
+/*20041115 to 20041130
+슈퍼노비스
+Super Novice
+20041206 to latest
+X
+Help me out~ Please~ T_T
+*/
+ MSG_SUPERNOVICE12 = 0x388,
+/*20041115 to 20041130
+예요~
+Super Novice~
+20041206 to latest
+X
+Help me out~ Please~ T_T
+*/
+ MSG_SUPERNOVICE13 = 0x389,
+/*20041115 to 20041130
+저 좀 도와주세요~ ㅠ_ㅠ
+Help me out~ Please~ T_T
+20041206 to latest
+X
+Help me out~ Please~ T_T
+*/
+ MSG_SUPERNOVICE14 = 0x38a,
+/*20041115 to latest
+/notalkmsg2 : 채팅내용을 채팅창에 표시하지 않습니다 (길드말 포함) On Off
+/notalkmsg2: Hides chat messages(including guild chat). On Off
+*/
+ MSG_EXPLAIN_NOTALKMSG2 = 0x38b,
+/*20041115 to latest
+채팅내용을 채팅창에 표시합니다 [/nm2 ON]
+Show chat messages. [/nm2 ON]
+*/
+ MSG_NOTALKMSG2_ON = 0x38c,
+/*20041115 to latest
+채팅내용을 채팅창에 표시하지않습니다 (길드말 포함) [/nm2 OFF]
+Hide chat messages(including guild chat) [/nm2 OFF]
+*/
+ MSG_NOTALKMSG2_OFF = 0x38d,
+#endif
+#if PACKETVER >= 20041129
+/*20041129 to latest
+제련가능한 아이템
+Upgradable Weapons
+*/
+ MSG_REFINEITEMLIST = 0x38e,
+/*20041129 to latest
+제련한 무기 : %s
+Weapons upgraded: %s
+*/
+ MSG_ITEM_REFINE_SUCCEESS = 0x38f,
+/*20041129 to latest
+제련한 무기 : %s
+Weapons upgraded: %s
+*/
+ MSG_ITEM_REFINE_FAIL = 0x390,
+/*20041129 to latest
+무기제련스킬의 레벨이 부족해서 %s 제련을 할수없습니다.
+You cannot upgrade %s until you level up your Upgrade Weapon skill.
+*/
+ MSG_ITEM_REFINE_FAIL_LEVEL = 0x391,
+/*20041129 to latest
+제련에 필요한 아이템 (%s) 이 없으므로 제련할수없습니다.
+You lack a necessary item %s to upgrade this weapon.
+*/
+ MSG_ITEM_REFINE_FAIL_MATERIAL = 0x392,
+#endif
+#if PACKETVER >= 20041206
+/*20041206 to latest
+완벽하게 코팅되어있어서 풀스트립이 통하지 않습니다.
+Full Divestment cannot pierce the target. The target is fully shielded.
+*/
+ MSG_FULLSTRIP = 0x393,
+#endif
+#if PACKETVER >= 20041213
+/*20041213 to latest
+결혼한 캐릭터는 입양시킬수 없습니다.
+You cannot adopt a married person.
+*/
+ MSG_BABY3 = 0x394,
+#endif
+#if PACKETVER >= 20041220
+/*20041220 to latest
+친구로 등록된 이름과 비슷하지만 등록된 이름이 아닙니다. 아는사람인지 확인하십시요.
+This name is not registered in your Friend List. Please check the name again.
+*/
+ MSG_ID_WARNING = 0x395,
+/*20041220 to latest
+/hi 또는 /hi 문장 : 친구로 등록된 캐릭터들에게 인사를 합니다.
+/hi or /hi message: Send greetings to people who are online and registered on your Friend List.
+*/
+ MSG_EXPLAIN_HI = 0x396,
+#endif
+#if PACKETVER >= 20041227
+/*20041227 to latest
+길드원의 이름과 비슷하지만 길드원이 아닙니다. 길드원인지 확인하십시요.
+This character is not your guildsman. Please check the name again.
+*/
+ MSG_ID_WARNING_GUILD = 0x397,
+#endif
+#if PACKETVER >= 20050117
+/*20050117 to latest
+9999만제니 이상 입력하셔도 가격은 9999만제니로 판매됩니다.
+Please be aware that the maximum selling price is fixed as 2 Billion. You cannot sell an item higher than that.
+*/
+ MSG_OVERPRICE9999 = 0x398,
+#endif
+#if PACKETVER >= 20050131
+/*20050131 to latest
+친구의 귓속말은 [ Friend ] , 길드원은 [ Member ] 로 표시됩니다.
+Whispers from friends are displayed as [ Friend ], and ones from guildsmen are displayed as [ Member ].
+*/
+ MSG_EXPLAIN_SACHING1 = 0x399,
+/*20050131 to latest
+( From 캐릭터이름 : ) 이라고 표시 되는 귓속말은 친구나 길드원이 아닙니다.
+( From character name: ) is from an anonymous character who is neither your friend nor guildsman.
+*/
+ MSG_EXPLAIN_SACHING2 = 0x39a,
+#endif
+#if PACKETVER >= 20050214
+/*20050214 to 20050310
+블랙스미스의 상위 10위권 랭킹을 보여줍니다.
+20050314 to latest
+/blacksmith : 블랙스미스의 상위 10위권 랭킹을 보여줍니다.
+/blacksmith: Shows top 10 Blacksmiths in the server.
+*/
+ MSG_EXPLAIN_BLACKSMITH = 0x39b,
+/*20050214 to 20050310
+알케미스트의 상위 10위권 랭킹을 보여줍니다.
+20050314 to latest
+/alchemist : 알케미스트의 상위 10위권 랭킹을 보여줍니다.
+/alchemist: Shows top 10 Alchemists in the server.
+*/
+ MSG_EXPLAIN_ALCHEMIST = 0x39c,
+/*20050214 to latest
+ALT+Y : 여러가지 명령어를 쉽게 쓸수있는 윈도우가 열립니다.
+ALT+Y: Opens a window which allows you to use various commands with ease.
+*/
+ MSG_EXPLAIN_ALTY = 0x39d,
+#endif
+#if PACKETVER >= 20050328
+/*20050328 to latest
+[POINT] 태권미션 랭킹포인트가 %d 상승해서 %d 포인트가 되었습니다.
+[POINT] You have been rewarded with %d Tae-Kwon Mission rank points. Your point total is %d.
+*/
+ MSG_TAEKWON_POINT = 0x39e,
+#endif
+#if PACKETVER >= 20050404
+/*20050404 to latest
+[태권미션] Target Monster : %s (%d%%)
+[Taekwon Mission] Target Monster: %s (%d%%)
+*/
+ MSG_TAEKWON_MISSION = 0x39f,
+#endif
+#if PACKETVER >= 20050502
+/*20050502 to latest
+게임가드 초기화 에러 : %lu
+Error - Failed to initialize GameGuard: %lu
+*/
+ MSG_INIT_ERROR = 0x3a0,
+/*20050502 to latest
+스피드핵이 감지되었습니다.
+Speed Hack has been detected.
+*/
+ MSG_SPEEDHACK_DETECT = 0x3a1,
+/*20050502 to latest
+불법 프로그램 (%s) 가 발견되었습니다
+The illegal program, (%s) has been detected.
+*/
+ MSG_GAMEHACK_DETECT = 0x3a2,
+/*20050502 to latest
+게임이나 게임가드가 변조되었습니다.
+The Game or Gameguard has been cracked.
+*/
+ MSG_GAMEHACK_DOUBT = 0x3a3,
+/*20050502 to latest
+게임가드가 실행 중 입니다. 잠시 후에 다시 실행해보시기 바랍니다.
+GameGuard is currently running. Please wait for sometime and restart the game.
+*/
+ MSG_ERROR_EXIST = 0x3a4,
+/*20050502 to latest
+게임이 중복 실행되었거나 게임가드가 이미 실행 중 입니다. 게임 종료 후 다시 실행해보시기 바랍니다.
+The Game or GameGuard is already running. Please close the game and restart the game.
+*/
+ MSG_GAME_EXIST = 0x3a5,
+/*20050502 to latest
+게임가드 초기화 에러입니다. 재부팅 후 다시 실행해보거나 충돌할 수 있는 다른 프로그램들을 종료한 후 실행해 보시기 바랍니다.
+Failed to intialize GameGuard. Please try again after rebooting the system or closing other programs.
+*/
+ MSG_ERROR_INIT = 0x3a6,
+/*20050502 to latest
+바이러스 및 해킹툴 검사 모듈 로딩에 실패 했습니다. 메모리 부족이거나 바이러스에 의한 감염일 수 있습니다.
+Failed to load the scan module of virus and hacking tool. It's caused by lack of memory or PC virus infection.
+*/
+ MSG_ERROR_NPSCAN = 0x3a7,
+#endif
+#if PACKETVER >= 20050509
+/*20050509 to latest
+호문클루스 정보
+Homunculus Info
+*/
+ MSG_HOMUN_INFO = 0x3a8,
+#endif
+#if PACKETVER >= 20050523
+/*20050523 to latest
+호문클루스 스킬목록
+Homunculus Skill List
+*/
+ MSG_HOMUN_SKILLLIST = 0x3a9,
+/*20050523 to latest
+호문클루스의 이름은 영문 23, 한글 11자 이내로 정해 주세요.
+Please give your Homunculus a name no longer than 23 letters.
+*/
+ MSG_HOMUN_NAME_IN23 = 0x3aa,
+/*20050523 to latest
+이름은 단 한번만 바꿀수 있습니다. 호문클루스의 이름을 ^0000ff^0000ff %s^000000^000000 로 수정합니다. 계속 하시겠습니까?
+You can name a Homunculus only once. You have entered the name, ^0000ff%s^000000. Would you like to continue?
+*/
+ MSG_HOMUN_NAME_CHANGE_ONLYONCE = 0x3ab,
+/*20050523 to latest
+지금은 부재중~
+(Away)
+*/
+ MSG_AUTO_MSG = 0x3ac,
+/*20050523 to latest
+[자동응답]
+[Automated Message]
+*/
+ MSG_AUTO_MSG2 = 0x3ad,
+/*20050523 to latest
+부재시 타인의 귓말에 자동응답합니다.
+Send an automated message while you are away.
+*/
+ MSG_AUTO_MSG_ON = 0x3ae,
+/*20050523 to latest
+부재시 타인의 귓말에 자동응답하지 않습니다.
+Cancel automated away message.
+*/
+ MSG_AUTO_MSG_OFF = 0x3af,
+/*20050523 to latest
+자동 응답 메시지를 입력하세요.
+Please enter Away Message.
+*/
+ MSG_ENTER_AUTO_MSG = 0x3b0,
+#endif
+#if PACKETVER >= 20050530
+/*20050530 to latest
+/번쩍
+/fsh
+*/
+ MSG_EMOTION_SPARK = 0x3b1,
+/*20050530 to latest
+/빙빙
+/spin
+*/
+ MSG_EMOTION_CONFUSE = 0x3b2,
+/*20050530 to latest
+/하아
+/sigh
+*/
+ MSG_EMOTION_OHNO = 0x3b3,
+/*20050530 to latest
+/덤덤
+/dum
+*/
+ MSG_EMOTION_HUM = 0x3b4,
+/*20050530 to latest
+/시끌
+/crwd
+*/
+ MSG_EMOTION_BLABLA = 0x3b5,
+/*20050530 to latest
+/좌절
+/desp
+*/
+ MSG_EMOTION_OTL = 0x3b6,
+/*20050530 to latest
+/주사위
+/dice
+*/
+ MSG_EMOTION_DICE = 0x3b7,
+/*20050530 to latest
+/pk : 학살자의 상위 10위권 랭킹을 보여줍니다.
+/pk: Shows top 10 Slayers in the server.
+*/
+ MSG_EXPLAIN_KILLER_RANK = 0x3b8,
+/*20050530 to latest
+[POINT] 학살자 랭킹포인트가 %d 상승해서 %d 포인트가 되었습니다.
+[POINT] You have been rewarded with %d Slayer rank points. Your point total is %d.
+*/
+ MSG_KILLER_POINT = 0x3b9,
+#endif
+#if PACKETVER >= 20050608
+/*20050608 to latest
+진화 가능
+Evolution Available
+*/
+ MSG_HOMUN_EVOLVE = 0x3ba,
+/*20050608 to latest
+^ff0000^ff0000호문클루스를 삭제합니다.^000000^000000 삭제하실 경우 지금까지 키운 내역이 모두 삭제됩니다. 계속하시겠습니까?
+You have decided to delete this Homunculus ^ff0000^ff0000. When deleted, the homunculus and its history will be deleted and they cannot be restored in the future. Would you like to continue?
+*/
+ MSG_DELETE_HOMUN = 0x3bb,
+#endif
+#if PACKETVER >= 20050613
+/*20050613 to latest
+호문의 상태를 파일에 저장합니다.
+Save Homunculus status as a file.
+*/
+ MSG_TRACE_AI_ON = 0x3bc,
+/*20050613 to latest
+호문의 상태를 파일에 저장하지 않습니다.
+Do not save Homunculus status as a file.
+*/
+ MSG_TRACE_AI_OFF = 0x3bd,
+/*20050613 to latest
+Crusader
+*/
+ MSG_CRUSADER = 0x3be,
+/*20050613 to latest
+Monk
+*/
+ MSG_MONK = 0x3bf,
+/*20050613 to latest
+Sage
+*/
+ MSG_SAGE = 0x3c0,
+/*20050613 to latest
+Rouge
+Rogue
+*/
+ MSG_ROGUE = 0x3c1,
+/*20050613 to latest
+Alchemist
+*/
+ MSG_ALCHEMIST = 0x3c2,
+/*20050613 to latest
+Bard
+*/
+ MSG_BARD = 0x3c3,
+/*20050613 to latest
+Crusader_W
+Crusader
+*/
+ MSG_CRUSADER_W = 0x3c4,
+/*20050613 to latest
+Monk_W
+Monk
+*/
+ MSG_MONK_W = 0x3c5,
+/*20050613 to latest
+Sage_W
+Sage
+*/
+ MSG_SAGE_W = 0x3c6,
+/*20050613 to latest
+Rouge_W
+Rogue
+*/
+ MSG_ROGUE_W = 0x3c7,
+/*20050613 to latest
+Alchemist_W
+Alchemist
+*/
+ MSG_ALCHEMIST_W = 0x3c8,
+/*20050613 to latest
+Dancer
+*/
+ MSG_DANCER = 0x3c9,
+/*20050613 to latest
+Novice High
+High Novice
+*/
+ MSG_NOVICE_H = 0x3ca,
+/*20050613 to latest
+Swordman High
+High Swordman
+*/
+ MSG_SWORDMAN_H = 0x3cb,
+/*20050613 to latest
+Magician High
+High Mage
+*/
+ MSG_MAGICIAN_H = 0x3cc,
+/*20050613 to latest
+Archer High
+High Archer
+*/
+ MSG_ARCHER_H = 0x3cd,
+/*20050613 to latest
+Acolyte High
+High Acolyte
+*/
+ MSG_ACOLYTE_H = 0x3ce,
+/*20050613 to latest
+Merchant High
+High Merchant
+*/
+ MSG_MERCHANT_H = 0x3cf,
+/*20050613 to latest
+Thief High
+High Thief
+*/
+ MSG_THIEF_H = 0x3d0,
+/*20050613 to latest
+Novice High_W
+High Novice
+*/
+ MSG_NOVICE_H_W = 0x3d1,
+/*20050613 to latest
+Swordman High_W
+High Swordman
+*/
+ MSG_SWORDMAN_H_W = 0x3d2,
+/*20050613 to latest
+Magician High_W
+High Mage
+*/
+ MSG_MAGICIAN_H_W = 0x3d3,
+/*20050613 to latest
+Archer High_W
+High Archer
+*/
+ MSG_ARCHER_H_W = 0x3d4,
+/*20050613 to latest
+Acolyte High_W
+High Acolyte
+*/
+ MSG_ACOLYTE_H_W = 0x3d5,
+/*20050613 to latest
+Merchant High_W
+High Merchant
+*/
+ MSG_MERCHANT_H_W = 0x3d6,
+/*20050613 to latest
+Thief High_W
+High Thief
+*/
+ MSG_THIEF_H_W = 0x3d7,
+/*20050613 to latest
+Lord Knight
+*/
+ MSG_KNIGHT_H = 0x3d8,
+/*20050613 to latest
+High Priest
+*/
+ MSG_PRIEST_H = 0x3d9,
+/*20050613 to latest
+High Wizard
+*/
+ MSG_WIZARD_H = 0x3da,
+/*20050613 to latest
+White Smith
+WhiteSmith
+*/
+ MSG_BLACKSMITH_H = 0x3db,
+/*20050613 to latest
+Sniper
+*/
+ MSG_HUNTER_H = 0x3dc,
+/*20050613 to latest
+Saaassin Cross
+Assassin Cross
+*/
+ MSG_ASSASSIN_H = 0x3dd,
+/*20050613 to latest
+Lord Knight_W
+Lord Knight
+*/
+ MSG_KNIGHT_H_W = 0x3de,
+/*20050613 to latest
+High Priest_W
+High Priest
+*/
+ MSG_PRIEST_H_W = 0x3df,
+/*20050613 to latest
+High Wizard_W
+High Wizard
+*/
+ MSG_WIZARD_H_W = 0x3e0,
+/*20050613 to latest
+White Smith_W
+WhiteSmith
+*/
+ MSG_BLACKSMITH_H_W = 0x3e1,
+/*20050613 to latest
+Sniper_W
+Sniper
+*/
+ MSG_HUNTER_H_W = 0x3e2,
+/*20050613 to latest
+Saaassin Cross_W
+Assassin Cross
+*/
+ MSG_ASSASSIN_H_W = 0x3e3,
+/*20050613 to latest
+Paladin
+*/
+ MSG_CRUSADER_H = 0x3e4,
+/*20050613 to latest
+Champion
+*/
+ MSG_MONK_H = 0x3e5,
+/*20050613 to latest
+Professor
+Scholar
+*/
+ MSG_SAGE_H = 0x3e6,
+/*20050613 to latest
+Stalker
+*/
+ MSG_ROGUE_H = 0x3e7,
+/*20050613 to latest
+Creator
+Biochemist
+*/
+ MSG_ALCHEMIST_H = 0x3e8,
+/*20050613 to latest
+Clown
+Minstrel
+*/
+ MSG_BARD_H = 0x3e9,
+/*20050613 to latest
+Paladin_W
+Paladin
+*/
+ MSG_CRUSADER_H_W = 0x3ea,
+/*20050613 to latest
+Champion_W
+Champion
+*/
+ MSG_MONK_H_W = 0x3eb,
+/*20050613 to latest
+Professor_W
+Professor
+*/
+ MSG_SAGE_H_W = 0x3ec,
+/*20050613 to latest
+Stalker_W
+Stalker
+*/
+ MSG_ROGUE_H_W = 0x3ed,
+/*20050613 to latest
+Creator_W
+Creator
+*/
+ MSG_ALCHEMIST_H_W = 0x3ee,
+/*20050613 to latest
+Gypsy
+*/
+ MSG_DANCER_H = 0x3ef,
+/*20050613 to latest
+비밀번호가 지정되어 있지 않습니다. 새로운 비밀번호를 지정하시겠습니까?
+You have not set a password yet. Would you like to create one now?
+*/
+ MSG_STORE_PASSWORD_REQ = 0x3f0,
+/*20050613 to latest
+비밀번호를 3회 틀려셨습니다. 나중에 다시 시도해 주세요.
+You have incorrectly entered the password 3 times. Please try again later.
+*/
+ MSG_STORE_PASSWORD_PENALTY = 0x3f1,
+/*20050613 to latest
+비밀번호 변경이 실패하였습니다.
+Password creation has failed.
+*/
+ MSG_STORE_PASSWORD_CHANGE_NG = 0x3f2,
+/*20050613 to latest
+비밀번호는 4자리 이상 8자리이하여야만 합니다.
+Password must be 4~8 letters long.
+*/
+ MSG_STORE_PASSWORD_4_8 = 0x3f3,
+/*20050613 to latest
+비밀번호
+Password
+*/
+ MSG_STORE_PASSWORD = 0x3f4,
+/*20050613 to latest
+신규 비밀번호
+New Password
+*/
+ MSG_STORE_NEW_PASSWORD = 0x3f5,
+/*20050613 to latest
+확인 비밀번호
+Confirm Password
+*/
+ MSG_STORE_RENEW_PASSWORD = 0x3f6,
+/*20050613 to latest
+비밀번호 변경이 완료되었습니다.
+Password has been changed.
+*/
+ MSG_STORE_PASSWORD_CHANGE_OK = 0x3f7,
+/*20050613 to latest
+비밀번호가 서로 다릅니다.
+Password does not match.
+*/
+ MSG_STORE_PASSWORD_MISMATCH = 0x3f8,
+/*20050613 to latest
+비밀번호 입력
+Enter Password
+*/
+ MSG_STORE_PASSWORD_INPUT = 0x3f9,
+#endif
+#if PACKETVER >= 20050624
+/*20050624 to 20050624
+호문이 아사 직전입니다!!! 밥좀 주셈~!!
+20050628 to latest
+호문이 아사 직전입니다! 먹이를 주지 않으면 가출하게됩니다.
+Your Homunculus is starving. Please feed it, otherwise it will leave you.
+*/
+ MSG_HOMUN_HUNGRY = 0x3fa,
+/*20050624 to latest
+경험치
+EXP
+*/
+ MSG_HOMUN_EXP = 0x3fb,
+#endif
+#if PACKETVER >= 20050628
+/*20050628 to latest
+[EVENT] 이벤트에 당첨되셨습니다. 게임내에서 아이템을 지급받으십시요.
+*/
+ MSG_EVENT_RESULT = 0x3fc,
+#endif
+#if PACKETVER >= 20050704
+/*20050704 to latest
+싫어함
+Hate
+*/
+ MSG_HATE = 0x3fd,
+/*20050704 to 20050704
+매우 싫어함
+20050711 to latest
+매우싫어함
+Hate with a Passion
+*/
+ MSG_VERYHATE = 0x3fe,
+#endif
+#if PACKETVER >= 20050718
+/*20050718 to latest
+호문클루스가 사용자 인공지능으로 동작합니다.
+Homunculus has been customized.
+*/
+ MSG_HOMUN_USERAI_ON = 0x3ff,
+/*20050718 to latest
+호문클루스가 기본 인공지능으로 동작합니다.
+Homunculus has been activated with the basic AI.
+*/
+ MSG_HOMUN_USERAI_OFF = 0x400,
+#endif
+#if PACKETVER >= 20050808
+/*20050808 to latest
+편지목록
+Mail List
+*/
+ MSG_MAIL_LIST = 0x401,
+/*20050808 to latest
+편지쓰기
+Write Mail
+*/
+ MSG_MAIL_WRITE = 0x402,
+/*20050808 to latest
+편지읽기
+Read Mail
+*/
+ MSG_MAIL_READ = 0x403,
+#endif
+#if PACKETVER >= 20050822
+/*20050822 to latest
+한번 지정하시면 변경이 불가능합니다! 이 맵으로 지정하시겠습니까?
+You cannot change a map's designation once it is designated. Are you sure that you want to designate this map?
+*/
+ MSG_STARPLACE_ACCEPT = 0x404,
+/*20050822 to 20050822
+보내실 아이템이 추가 되었습니다.
+20050829 to 20051017
+아이템창에 아이템이 추가 되었습니다.
+20051024 to latest
+메일 아이템을 수령했습니다.
+Item has been added in the Item Window.
+*/
+ MSG_MAIL_ADD_ITEM_SUCCESS = 0x405,
+/*20050822 to 20050822
+보내실 아이템이 추가 되지 않았습니다.
+20050829 to 20051017
+아이템창에 아이템이 추가 되지 않았습니다.
+20051024 to latest
+메일 아이템을 수령하지 못했습니다.
+You have failed to add the item in the Item Window.
+*/
+ MSG_MAIL_ADD_ITEM_FAILURE = 0x406,
+/*20050822 to latest
+메일 보내기가 성공하였습니다.
+You have successfully mailed a message.
+*/
+ MSG_MAIL_SEND_SUCCESS = 0x407,
+/*20050822 to latest
+메일 보내기가 실패하였습니다. 받는 사람이 존재하지 않습니다.
+You have failed to mail a message. Recipient does not exist.
+*/
+ MSG_MAIL_USER_NOT_FOUND = 0x408,
+#endif
+#if PACKETVER >= 20050829
+/*20050829 to latest
+[태양과 달과 별의 천사] 지정했던 장소들과 몬스터들이 초기화됐습니다!
+[Solar, Lunar and Stellar Angel] Designated places and monsters have been reset.
+*/
+ MSG_STAR_ANGEL = 0x409,
+/*20050829 to latest
+경매 등록이 실패했습니다.
+The minimum starting bid for auctions is 10,000,000 zeny.
+*/
+ MSG_AUCTION_ADD_FALSE = 0x40a,
+/*20050829 to latest
+경매 등록이 성공했습니다.
+You have successfully started a new auction.
+*/
+ MSG_AUCTION_ADD_TRUE = 0x40b,
+/*20050829 to latest
+해당 경매가 취소되었습니다.
+The auction has been canceled.
+*/
+ MSG_AUCTION_ADD_CANCEL = 0x40c,
+/*20050829 to latest
+입찰자가 있는 경매는 취소할 수 없습니다.
+An auction with at least one bidder cannot be canceled.
+*/
+ MSG_AUCTION_ADD_CANCEL_FALSE = 0x40d,
+#endif
+#if PACKETVER >= 20050905
+/*20050905 to latest
+메일 삭제가 성공하였습니다.
+Mail has been successfully deleted.
+*/
+ MSG_MAIL_DELETE_SUCCESS = 0x40e,
+/*20050905 to latest
+메일 삭제가 실패하였습니다.
+You have failed to delete the mail.
+*/
+ MSG_MAIL_DELETE_FAILURE = 0x40f,
+#endif
+#if PACKETVER >= 20050912
+/*20050912 to latest
+던지는 단검이 장착되었습니다.
+You have equipped throwing daggers.
+*/
+ MSG_MSG_KNIFE_EQUIPMENT_SUCCESS = 0x410,
+#endif
+#if PACKETVER >= 20050926
+/*20050926 to latest
+%s 님이 로그인했습니다.
+%s has logged in.
+*/
+ MSG_LOGIN_FRIEND = 0x411,
+/*20050926 to latest
+%s 님이 로그아웃했습니다.
+%s has logged out.
+*/
+ MSG_LOGOUT_FRIEND = 0x412,
+#endif
+#if PACKETVER >= 20051004
+/*20051004 to latest
+/loginout : 길드원과 친구들의 접속관련 메세지를 보여줍니다. On Off
+/loginout: Shows guildsmen and friends online status. On Off
+*/
+ MSG_EXPLAIN_LOGINOUT = 0x413,
+/*20051004 to latest
+친구들의 접속관련 메세지를 대화창에 표시합니다. [/li ON]
+Display online status of friends in Chat Window. [/li ON]
+*/
+ MSG_LOGINOUT_ON = 0x414,
+/*20051004 to latest
+친구들의 접속관련 메세지를 대화창에 표시하지않습니다. [/li OFF]
+Do not display online status of friends in Chat Window. [/li OFF]
+*/
+ MSG_LOGINOUT_OFF = 0x415,
+/*20051004 to latest
+이미 실행중입니다.
+It is already running.
+*/
+ MSG_SGP_CODE_ALREADY_RUNNING = 0x416,
+/*20051004 to latest
+매크로 사용이 감지되었습니다.
+Use of Macro program has been detected.
+*/
+ MSG_SGP_CODE_DETECTED_MACRO = 0x417,
+/*20051004 to latest
+스피드해킹이 감지되었습니다.
+Use of Speed hack has been detected.
+*/
+ MSG_SGP_CODE_DETECTED_SPEEDHACK = 0x418,
+/*20051004 to latest
+API 후킹이 감지되었습니다.
+API Hooking has been detected.
+*/
+ MSG_SGP_CODE_DETECTED_APIHOOK = 0x419,
+/*20051004 to latest
+메시지 후킹이 감지되었습니다.
+Message Hooking has been detected.
+*/
+ MSG_SGP_CODE_DETECTED_MSGHOOK = 0x41a,
+/*20051004 to latest
+모듈이 변조 또는 손상되었거나 버전이 일치하지 않습니다.
+Module has been modified or damaged or its version does not match.
+*/
+ MSG_SGP_CODE_NOT_EQUALENCRYPTEDDATA = 0x41b,
+#endif
+#if PACKETVER >= 20051010
+/*20051010 to latest
+(태국)귀하는 게임방 과금으로 로그인 하셨습니다.
+(Thailand) You have logged in game with PC cafe payment.
+*/
+ MSG_BILLING_PCB = 0x41c,
+#endif
+#if PACKETVER >= 20051017
+/*20051017 to latest
+이전
+Prev
+*/
+ MSG_PREV_PAGE = 0x41d,
+/*20051017 to latest
+다음
+Next
+*/
+ MSG_NEXT_PAGE = 0x41e,
+/*20051017 to latest
+경매
+Auction
+*/
+ MSG_AUCTION = 0x41f,
+/*20051017 to latest
+물품보기
+Product List
+*/
+ MSG_AUCTION_VIEW = 0x420,
+/*20051017 to latest
+등록하기
+Register
+*/
+ MSG_AUCTION_ADD = 0x421,
+/*20051017 to latest
+판매 진행상태
+Sale Status
+*/
+ MSG_AUCTION_SELL = 0x422,
+/*20051017 to latest
+구매 진행상태
+Purchase Status
+*/
+ MSG_AUCTION_BUY = 0x423,
+/*20051017 to latest
+아이템
+Item
+*/
+ MSG_ITEM2 = 0x424,
+/*20051017 to latest
+아이템명
+Name
+*/
+ MSG_ITEM_NAME2 = 0x425,
+/*20051017 to latest
+가격 / 즉시구입가격
+Current Bid / Max Bid
+*/
+ MSG_ITEM_PRICE = 0x426,
+/*20051017 to latest
+판매자
+Seller
+*/
+ MSG_SELLER = 0x427,
+/*20051017 to latest
+구매자
+Buyer
+*/
+ MSG_BUYER = 0x428,
+/*20051017 to latest
+종료시간
+End Time
+*/
+ MSG_FINISH_TIME = 0x429,
+/*20051017 to latest
+%m월 %d일 %H시
+%m %d %H
+*/
+ MSG_TIME_TYPE = 0x42a,
+/*20051017 to latest
+시간설정
+Time (Hr)
+*/
+ MSG_SET_TIME = 0x42b,
+/*20051017 to latest
+수수료
+Fee
+*/
+ MSG_CHARGE = 0x42c,
+/*20051017 to latest
+검색 된 아이템이 없습니다.
+*/
+ MSG_NOTHING_SEARCH_ITEM = 0x42d,
+/*20051017 to latest
+현재 판매중인 아이템이 없습니다.
+Your Sale List is empty.
+*/
+ MSG_NOTHING_SEARCH_SELL_ITEM = 0x42e,
+/*20051017 to latest
+현재 구매중인 아이템이 없습니다.
+Your Purchase List is empty.
+*/
+ MSG_NOTHING_SEARCH_BUY_ITEM = 0x42f,
+/*20051017 to latest
+경매정보가 정확하지 않습니다.
+Auction Information is incorrect or incomplete.
+*/
+ MSG_ERROR_AUCTION_ITEM_INFO = 0x430,
+/*20051017 to latest
+경매에 등록할 아이템 정보가 없습니다.
+You must drag and drop an item from your Inventory into the Register Window to begin a new auction.
+*/
+ MSG_NOTHING_AUCTION_ITEM_INFO = 0x431,
+/*20051017 to latest
+이미 등록된 경매입니다.
+The auction has already been registered.
+*/
+ MSG_ERROR_ADD_AUCTION = 0x432,
+/*20051017 to latest
+제시가격
+Starting Bid
+*/
+ MSG_PRICE = 0x433,
+/*20051017 to latest
+구입희망가격
+Current Bid
+*/
+ MSG_PRICE2 = 0x434,
+/*20051017 to latest
+즉시구입가격
+Buy Now Price
+*/
+ MSG_PRICE3 = 0x435,
+/*20051017 to latest
+현재소지제니
+Your Current Zeny
+*/
+ MSG_PRICE4 = 0x436,
+/*20051017 to latest
+현재최고가격
+Highest Bid
+*/
+ MSG_PRICE5 = 0x437,
+/*20051017 to latest
+이전입찰가격
+Previous Bid
+*/
+ MSG_PRICE6 = 0x438,
+/*20051017 to latest
+추가입찰가격
+Next Bid
+*/
+ MSG_PRICE7 = 0x439,
+/*20051017 to latest
+구입하시겠습니까?
+Press buy to confirm.
+*/
+ MSG_BUY_ACTION_ITEM = 0x43a,
+/*20051017 to latest
+이 가격에 판매하시겠습니까?
+Would you like to sell this item?
+*/
+ MSG_SELL_ACTION_ITEM = 0x43b,
+/*20051017 to latest
+입찰하기
+Place Bid
+*/
+ MSG_BUY_AUCTION = 0x43c,
+/*20051017 to latest
+즉시구매하기
+Buy Now
+*/
+ MSG_BUY_AUCTION2 = 0x43d,
+/*20051017 to latest
+경매종료하기
+End the Auction
+*/
+ MSG_BUY_AUCTION3 = 0x43e,
+/*20051017 to latest
+재입찰하기
+Place another Bid
+*/
+ MSG_FINISH_AUCTION = 0x43f,
+/*20051017 to latest
+해당 경매에 대한 입찰이 성공했습니다.
+You have placed a bid.
+*/
+ MSG_RESULT_BUY_TRUE = 0x440,
+/*20051017 to latest
+해당 경매에 대한 입찰이 실패했습니다.
+You have failed to place a bid.
+*/
+ MSG_RESULT_BUY_FALSE = 0x441,
+/*20051017 to latest
+제니가 충분하지 않습니다.
+You do not have enough zeny.
+*/
+ MSG_RESULT_BUY_FALSE_MONEY = 0x442,
+#endif
+#if PACKETVER >= 20051024
+/*20051024 to latest
+방어구
+Armors
+*/
+ MSG_EQUIP = 0x443,
+/*20051024 to latest
+카드
+Card
+*/
+ MSG_CARD = 0x444,
+/*20051024 to latest
+기타
+Other
+*/
+ MSG_ETC = 0x445,
+/*20051024 to latest
+경매번호
+Bid
+*/
+ MSG_AUCTION_NUM = 0x446,
+/*20051024 to latest
+검색
+Search
+*/
+ MSG_AUCTION_SEARCH = 0x447,
+/*20051024 to latest
+해당 경매를 종료했습니다.
+You have ended the auction.
+*/
+ MSG_RESULT_MY_SELL_STOP_TRUE = 0x448,
+/*20051024 to latest
+해당 경매를 종료 할 수 없습니다.
+You cannot end the auction.
+*/
+ MSG_RESULT_MY_SELL_STOP_FALSE = 0x449,
+/*20051024 to latest
+경매 번호가 정확하지 않습니다.
+Bid Number is incorrect.
+*/
+ MSG_RESULT_AUCTION_ID_FALSE = 0x44a,
+/*20051024 to latest
+받는이
+To
+*/
+ MSG_SENDER = 0x44b,
+#endif
+#if PACKETVER >= 20051205
+/*20051205 to latest
+제 목
+Title
+*/
+ MSG_TITLE2 = 0x44c,
+/*20051205 to latest
+새 메일이 도착하였습니다.
+You have received a message in the mail.
+*/
+ MSG_NEW_MAIL = 0x44d,
+/*20051205 to latest
+검색중입니다.
+Searching...
+*/
+ MSG_SEARCHING_ITEM = 0x44e,
+/*20051205 to latest
+더 이상 경매 등록할 수 없습니다. 경매 등록은 최대 5개까지 가능합니다.
+You cannot register more than 5 items in an auction at a time.
+*/
+ MSG_AUCTION_ADD_OVER = 0x44f,
+/*20051205 to latest
+더 이상 경매 물품에 입찰할 수 없습니다. 경매 물품 입찰은 최대 5개까지 가능합니다.
+You cannot place more than 5 bids at a time.
+*/
+ MSG_RESULT_BUY_OVER = 0x450,
+/*20051205 to latest
+삭제하려는 메일에 수령하지 않은 아이템이 있습니다.
+Please accept all items from your mail before deleting.
+*/
+ MSG_MAIL_DELETE_ERROR = 0x451,
+/*20051205 to latest
+메일 제목을 입력하여 주십시오.
+Please enter a title.
+*/
+ MSG_MAIL_SEND_ERROR = 0x452,
+/*20051205 to latest
+/shopping : 클릭 한번으로 상점을 열고 상점이름 오른쪽 클릭으로 상점을 닫습니다 On Off
+/shopping: Enables you to open a shop with a single left-click and close your shop with a single right-click. On Off
+*/
+ MSG_EXPLAIN_SHOPPING = 0x453,
+/*20051205 to latest
+클릭 한번으로 상점을 열고 상점이름을 오른쪽 클릭해서 상점을 닫을수있습니다. [/sh ON]
+You can now open a shop with a single left-click and close your shop with a single right-click. [sh ON].
+*/
+ MSG_SHOPPING_ON = 0x454,
+/*20051205 to latest
+더블클릭 으로 상점을 열게됩니다. [/sh OFF]
+You can open a shop by double-clicking. [/sh OFF]
+*/
+ MSG_SHOPPING_OFF = 0x455,
+/*20051205 to latest
+메일을 보내려면, 제니 입력을 완료해야 합니다.
+Please enter zeny amount before sending mail.
+*/
+ MSG_MAIL_SEND_ERROR2 = 0x456,
+/*20051205 to latest
+경매 수수료가 부족합니다.
+You do not have enough zeny to pay the Auction Fee.
+*/
+ MSG_ADD_MONEY_FALSE = 0x457,
+/*20051205 to latest
+상태보기
+View Status
+*/
+ MSG_HOMUN_SHOWINFO = 0x458,
+/*20051205 to latest
+먹이주기
+Feed
+*/
+ MSG_HOMUN_FEEDING = 0x459,
+/*20051205 to latest
+대기
+Stand By
+*/
+ MSG_HOMUN_WAITING = 0x45a,
+/*20051205 to latest
+슈퍼노비스(남)
+Super Novice (Male)
+*/
+ MSG_JOB_SUPERNOVICE_M = 0x45b,
+/*20051205 to latest
+슈퍼노비스(여)
+Super Novice (Female)
+*/
+ MSG_JOB_SUPERNOVICE_F = 0x45c,
+/*20051205 to latest
+태권소년
+Taekwon Boy
+*/
+ MSG_JOB_TAEKWON_M = 0x45d,
+/*20051205 to latest
+태권소녀
+Taekwon Girl
+*/
+ MSG_JOB_TAEKWON_F = 0x45e,
+/*20051205 to latest
+권성(남)
+Taekwon Master (Male)
+*/
+ MSG_KWONSUNG_M = 0x45f,
+/*20051205 to latest
+권성(여)
+Taekwon Master (Female)
+*/
+ MSG_KWONSUNG_F = 0x460,
+/*20051205 to latest
+소울링커(남)
+Soul Linker (Male)
+*/
+ MSG_SOULLINGKER_M = 0x461,
+/*20051205 to latest
+소울링커(여)
+Soul Linker (Female)
+*/
+ MSG_SOULLINGKER_F = 0x462,
+/*20051205 to latest
+PC방요금제로 2개이상의 계정이 접속되고있습니다. 확인후 다시 사용하시기 바랍니다.
+Please check the connection, more than 2 accounts are connected with Internet Cafe Time Plan.
+*/
+ MSG_BAN_PC_IP_UNFAIR = 0x463,
+/*20051205 to latest
+귀하는 월정액 요금제 사용자 입니다. (남은기간 : %d일)
+Your account is using monthly payment. (Remaining day: %d day)
+*/
+ MSG_BILLING_1 = 0x464,
+/*20051205 to latest
+귀하는 정량 요금제 사용자 입니다. (남은시간 : %d시간 %분 %초)
+Your account is using time limited. (Remaining time: %d hour %d minute %d second)
+*/
+ MSG_BILLING_2 = 0x465,
+#endif
+#if PACKETVER >= 20051212
+/*20051212 to latest
+해당 아이템은 메일에 첨부 할수 없는 아이템입니다.
+This item cannot be mailed.
+*/
+ MSG_MAIL_ITEM_ADD_FAILED = 0x466,
+/*20051212 to latest
+더이상 아이템을 가질수 없습니다. 아이템은 메일로 보관하겠습니다.
+You cannot accept any more items. Please try again later.
+*/
+ MSG_MAIL_ADD_ITEM_OVER_FAILURE = 0x467,
+#endif
+#if PACKETVER >= 20060109
+/*20060109 to latest
+남성
+Male
+*/
+ MSG_PTSEX1 = 0x468,
+/*20060109 to latest
+여성
+Female
+*/
+ MSG_PTSEX2 = 0x469,
+/*20060109 to latest
+새로운 유저입니다
+New User.
+*/
+ MSG_PT_NEWUSER = 0x46a,
+/*20060109 to latest
+E-mail은 캐릭터를 지울때 필요합니다.
+E-mail address is required to delete a character.
+*/
+ MSG_PT_ACINFO = 0x46b,
+/*20060109 to latest
+정확한 형식으로 입력해 주세요.
+Please enter the correct information.
+*/
+ MSG_PT_ACINFO2 = 0x46c,
+/*20060109 to latest
+이 키를 사용하세요
+Please use this key.
+*/
+ MSG_PT_NEWKEYINFO = 0x46d,
+/*20060109 to latest
+정확한 카드 패스워드를 다시 입력해주세요
+Please enter the correct card password.
+*/
+ MSG_PT_FAIL_CARDPASS = 0x46e,
+/*20060109 to latest
+PT정보
+PT Info
+*/
+ MSG_PTID1 = 0x46f,
+/*20060109 to latest
+PT_ID는 %s
+PT_ID is %s
+*/
+ MSG_PTID2 = 0x470,
+/*20060109 to latest
+NUM_ID는 %s
+NUM_ID is %s
+*/
+ MSG_PTID3 = 0x471,
+/*20060109 to latest
+잊지않게 주의하세요
+Please don't forget this information.
+*/
+ MSG_PTID4 = 0x472,
+/*20060109 to latest
+1001
+*/
+ MSG_PT_ERROR_1001 = 0x473,
+/*20060109 to latest
+1002
+*/
+ MSG_PT_ERROR_1002 = 0x474,
+/*20060109 to latest
+1003
+*/
+ MSG_PT_ERROR_1003 = 0x475,
+/*20060109 to latest
+1004
+*/
+ MSG_PT_ERROR_1004 = 0x476,
+/*20060109 to latest
+1006
+*/
+ MSG_PT_ERROR_1006 = 0x477,
+/*20060109 to latest
+1007
+*/
+ MSG_PT_ERROR_1007 = 0x478,
+/*20060109 to latest
+1008
+*/
+ MSG_PT_ERROR_1008 = 0x479,
+/*20060109 to latest
+1009
+*/
+ MSG_PT_ERROR_1009 = 0x47a,
+/*20060109 to latest
+1012
+*/
+ MSG_PT_ERROR_1012 = 0x47b,
+/*20060109 to latest
+1013
+*/
+ MSG_PT_ERROR_1013 = 0x47c,
+/*20060109 to latest
+1014
+*/
+ MSG_PT_ERROR_1014 = 0x47d,
+/*20060109 to latest
+1015
+*/
+ MSG_PT_ERROR_1015 = 0x47e,
+/*20060109 to latest
+1019
+*/
+ MSG_PT_ERROR_1019 = 0x47f,
+/*20060109 to latest
+1020
+Navigation
+*/
+ MSG_PT_ERROR_1020 = 0x480,
+/*20060109 to latest
+1021
+*/
+ MSG_PT_ERROR_1021 = 0x481,
+/*20060109 to latest
+1023
+*/
+ MSG_PT_ERROR_1023 = 0x482,
+/*20060109 to latest
+1024
+*/
+ MSG_PT_ERROR_1024 = 0x483,
+/*20060109 to latest
+1025
+*/
+ MSG_PT_ERROR_1025 = 0x484,
+/*20060109 to latest
+1027
+*/
+ MSG_PT_ERROR_1027 = 0x485,
+/*20060109 to latest
+1028
+*/
+ MSG_PT_ERROR_1028 = 0x486,
+/*20060109 to latest
+10
+*/
+ MSG_PT_ERROR_10 = 0x487,
+/*20060109 to latest
+20
+*/
+ MSG_PT_ERROR_20 = 0x488,
+/*20060109 to latest
+40
+*/
+ MSG_PT_ERROR_40 = 0x489,
+/*20060109 to latest
+50
+*/
+ MSG_PT_ERROR_50 = 0x48a,
+/*20060109 to latest
+60
+*/
+ MSG_PT_ERROR_60 = 0x48b,
+/*20060109 to latest
+70
+*/
+ MSG_PT_ERROR_70 = 0x48c,
+/*20060109 to latest
+80
+*/
+ MSG_PT_ERROR_80 = 0x48d,
+/*20060109 to latest
+90
+*/
+ MSG_PT_ERROR_90 = 0x48e,
+/*20060109 to latest
+100
+*/
+ MSG_PT_ERROR_100 = 0x48f,
+/*20060109 to latest
+110
+*/
+ MSG_PT_ERROR_110 = 0x490,
+#endif
+#if PACKETVER >= 20060126
+/*20060126 to latest
+30포인트를 받으시겠습니까?
+Do you want to receive 30 points?
+*/
+ MSG_PT_POINT1 = 0x491,
+/*20060126 to latest
+30포인트(5시간)이 충전되었습니다
+30 points (5 hours) have been added.
+*/
+ MSG_PT_POINT2 = 0x492,
+#endif
+#if PACKETVER >= 20060213
+/*20060213 to latest
+감정되지 않은 아이템은 경매에 등록할 수 없습니다.
+You cannot register Unidentified Items in auctions.
+*/
+ MSG_AUCTION_ADD_ITEM_FAILURE = 0x493,
+/*20060213 to latest
+소비 아이템은 경매에 등록할 수 없습니다.
+You cannot register this Consumable Item in an auction.
+*/
+ MSG_AUCTION_ADD_ITEM_FAILURE2 = 0x494,
+#endif
+#if PACKETVER >= 20060306
+/*20060306 to latest
+메일창을 열려면 카트창을 닫아 주십시요.
+Please close the Cart Window to open the Mail Window.
+*/
+ MSG_CLOSE_MERCHANTITEMWND = 0x495,
+/*20060306 to latest
+카트창을 열려면 메일창을 닫아 주십시요.
+Please close the Mail Window to open the Cart Window.
+*/
+ MSG_CLOSE_MAILWND = 0x496,
+#endif
+#if PACKETVER >= 20060313
+/*20060313 to latest
+탄환이 장착되었습니다.
+Bullets have been equipped.
+*/
+ MSG_MSG_BULLET_EQUIPMENT_SUCCESS = 0x497,
+/*20060313 to latest
+메일이 반송되었습니다.
+The mail has been returned to sender.
+*/
+ MSG_MAIL_RETURN_SUCCESS = 0x498,
+/*20060313 to latest
+메일이 존재하지 않습니다.
+The mail no longer exists.
+*/
+ MSG_MAIL_RETURN_FAILURE = 0x499,
+#endif
+#if PACKETVER >= 20060522
+/*20060522 to 20060522
+한시간 동안, 동일한 IP로 접속한 유저가 60건 이상입니다. 확인후 다시 사용하시기 바랍니다.
+20060523 to latest
+한시간 동안, 동일한 IP로 접속한 유저가 30건 이상입니다. 확인후 다시 사용하시기 바랍니다.
+More than 30 players sharing the same IP have logged into the game for an hour. Please check this matter.
+*/
+ MSG_BAN_PC_IP_COUNT_ALL = 0x49a,
+/*20060522 to latest
+한시간 동안, 동일한 IP로 10번 이상 접속되었습니다. 확인후 다시 사용하시기 바랍니다.
+More than 10 connections sharing the same IP have logged into the game for an hour. Please check this matter.
+*/
+ MSG_BAN_PC_IP_COUNT = 0x49b,
+/*20060522 to latest
+게임을 재시작 하십시오
+Please restart the game.
+*/
+ MSG_GAMEGUARD_RESTART = 0x49c,
+#endif
+#if PACKETVER >= 20060703
+/*20060703 to latest
+용병정보 - 아쳐타입
+Mercenary: Archer
+*/
+ MSG_MER_INFO_TYPE_ARCHER = 0x49d,
+/*20060703 to latest
+용병정보 - 검사타입
+Mercenary: Swordman
+*/
+ MSG_MER_INFO_TYPE_SWORDMAN = 0x49e,
+/*20060703 to latest
+용병정보 - 창병타입
+Mercenary: Spearman
+*/
+ MSG_MER_INFO_TYPE_LANCER = 0x49f,
+/*20060703 to 20070109
+남은시간
+20070115 to latest
+삭제시간
+Expiration
+*/
+ MSG_LEFT_TIME = 0x4a0,
+/*20060703 to latest
+신뢰도
+Loyalty
+*/
+ MSG_MER_FRIENDLY = 0x4a1,
+/*20060703 to latest
+소환횟수
+Summons
+*/
+ MSG_MER_CALLCOUNT = 0x4a2,
+/*20060703 to latest
+Kill
+*/
+ MSG_MER_KILL = 0x4a3,
+#endif
+#if PACKETVER >= 20060904
+/*20060904 to latest
+펫이 배가 고파서 당신을 원망하고 있다는 느낌이 든다.
+You can feel hatred from your pet for neglecting to feed it.
+*/
+ MSG_PET_STARVING = 0x4a4,
+/*20060904 to latest
+[POINT] 테이밍미션 랭킹포인트가 %d 상승해서 %d 포인트가 되었습니다.
+[POINT] You earned %d Taming Mission Ranking Points, giving you a total of %d points.
+*/
+ MSG_GANGSI_POINT = 0x4a5,
+/*20060904 to latest
+[테이밍미션] Target Monster : %s
+[Taming Mission] Target Monster: %s
+*/
+ MSG_GANGSI_MISSION = 0x4a6,
+#endif
+#if PACKETVER >= 20060918
+/*20060918 to latest
+/hunting : 사냥 목록을 보여줍니다.
+/hunting: You can check the your hunting list.
+*/
+ MSG_EXPLAIN_HUNTING = 0x4a7,
+/*20060918 to latest
+[천사의질문] 소녀에게 가르쳐주시어요. %s는 몇 스킬 찍으셨나요?
+[Angel's Question] Please tell me, how many %s skills do you have?
+*/
+ MSG_DEATH_Q01 = 0x4a8,
+/*20060918 to latest
+[천사의질문] 소녀에게 가르쳐주시어요. 소지하시고있는 제니를 십만으로 나누면 얼마가 되시나요?
+[Angel's Question] Please tell me, how much zeny you'll have if you divide it by 100,000?
+*/
+ MSG_DEATH_Q02 = 0x4a9,
+/*20060918 to latest
+[천사의질문] 소녀에게 가르쳐주시어요. 오늘이 몇일이신지 아시나요?
+[Angel's Question] Please tell me, what is today's date?
+*/
+ MSG_DEATH_Q03 = 0x4aa,
+/*20060918 to latest
+[천사의질문] 소녀에게 가르쳐주시어요. %s은 지금 몇이신가요?
+[Angel's Question] Please tell me, how many %s do you have?
+*/
+ MSG_DEATH_Q04 = 0x4ab,
+/*20060918 to latest
+[천사의질문] A는 1이고 Z는 26이어요. 슈노, 태권계열, 무낙계열을 담당하고있는 SiYeon씨의 알파벳을 더하면 몇이 되나요?
+[Angel's Question] If A is 1, B is 2, and so on, and if Z is 26, what number do you get if you add the letters in SiYeon's name?
+*/
+ MSG_DEATH_Q05 = 0x4ac,
+/*20060918 to latest
+[천사의질문] A는 1이고 Z는 26이어요. 귀엽고 어여쁜 라그나로크의 히로인 Munak의 알파벳을 더하면 몇이 되나요?
+[Angel's Question] If A is 1, B is 2, and so on, and if Z is 26, what number do you get if you add the letters in Munak's name?
+*/
+ MSG_DEATH_Q06 = 0x4ad,
+/*20060918 to latest
+[천사의질문] A는 1이고 Z는 26이어요. 제가 어여뻐하는 Bongun의 알파벳을 더하면 몇이 되나요?
+[Angel's Question] If A is 1, B is 2, and so on, and if Z is 26, what number do you get if you add the letters in Bongun's name?
+*/
+ MSG_DEATH_Q07 = 0x4ae,
+/*20060918 to latest
+[천사의질문] A는 1이고 Z는 26이어요. 저희가 존재하는 온라인세계 Ragnarok의 알파벳을 더하면 몇이 되나요?
+[Angel's Question] If A is 1, B is 2, and so on, and if Z is 26, what number do you get if you add the letters in the word, Ragnarok?
+*/
+ MSG_DEATH_Q08 = 0x4af,
+/*20060918 to latest
+[천사의질문] A는 1이고 Z는 26이어요. 언제나 Online상태인 천사동료들은 큰힘이 되어주죠. Online의 알파벳을 더하면 몇이 되나요?
+[Angel's Question] If A is 1, B is 2, and so on, and if Z is 26, what number do you get if you add the letters in the word, online?
+*/
+ MSG_DEATH_Q09 = 0x4b0,
+/*20060918 to latest
+[천사의질문] A는 1이고 Z는 26이어요. 죽음도 두려워하지않는 기사들을 상징하는 단어인 Death의 알파벳을 더하면 몇이 되나요?
+[Angel's Question] If A is 1, B is 2, and so on, and if Z is 26, what number do you get if you add the letters in the word, death?
+*/
+ MSG_DEATH_Q10 = 0x4b1,
+/*20060918 to latest
+[천사의질문] A는 1이고 Z는 26이어요. 기사들은 너무 멋진다고 생각해요. Knight의 알파벳을 더하면 몇이 되나요?
+[Angel's Question] If A is 1, B is 2, and so on, and if Z is 26, what number do you get if you add the letters in the word, knight?
+*/
+ MSG_DEATH_Q11 = 0x4b2,
+/*20060918 to latest
+[천사의질문] A는 1이고 Z는 26이어요. 중력을 뜻하는 단어인 Gravity의 알파벳을 더하면 몇이 되나요?
+[Angel's Question] If A is 1, B is 2, and so on, and if Z is 26, what number do you get if you add the letters in the word, gravity?
+*/
+ MSG_DEATH_Q12 = 0x4b3,
+/*20060918 to latest
+[천사의질문] A는 1이고 Z는 26이어요. 어둠속에서도 밝게 사는게 중요하지요. Dark의 알파벳을 더하면 몇이 되나요?
+[Angel's Question] If A is 1, B is 2, and so on, and if Z is 26, what number do you get if you add the letters in the word, dark?
+*/
+ MSG_DEATH_Q13 = 0x4b4,
+/*20060918 to latest
+[천사의질문] A는 1이고 Z는 26이어요. 뭐든지 수집하는 Collector의 알파벳을 더하면 몇이 되나요?
+[Angel's Question] If A is 1, B is 2, and so on, and if Z is 26, what number do you get if you add the letters in the word, collecter?
+*/
+ MSG_DEATH_Q14 = 0x4b5,
+/*20060918 to latest
+[천사의대답] 소녀에게 정확한 사실을 가르쳐주셔서 감사하옵니다.
+[Angel's Answer] Thank you for letting me know~
+*/
+ MSG_DEATH_R01 = 0x4b6,
+/*20060918 to latest
+[천사의대답] 사랑스러우신 분이시군요. 소녀 감탄했사옵니다.
+[Angel's Answer] I'm very pleased with your answer. You are a splendid adventurer.
+*/
+ MSG_DEATH_R02 = 0x4b7,
+/*20060918 to latest
+[천사의대답] 소녀 실망했사옵니다.
+[Angel's Answer] You've disappointed me...
+*/
+ MSG_DEATH_R05 = 0x4b8,
+#endif
+#if PACKETVER >= 20060925
+/*20060925 to latest
+[POINT] 랭킹포인트가 %d 상승해서 %d 포인트가 되었습니다.
+[Point] You earned %d Ranking Points, giving you a total of %d Ranking Points.
+*/
+ MSG_DEATH_POINT = 0x4b9,
+#endif
+#if PACKETVER >= 20060927
+/*20060927 to 20070417
+[%s]의 소지 Point : %d Point
+20070423 to latest
+[%s]의 소지 캐시 : %d 캐시
+[%s]'s Points: %d Points
+*/
+ MSG_POINT_SHOP = 0x4ba,
+#endif
+#if PACKETVER >= 20061009
+/*20061009 to latest
+선택하지 않은 캐릭터는 삭제 됩니다. 완료하시겠습니까?
+Unselected Characters will be deleted. Continue?
+*/
+ MSG_CONFIRM_SELECT_CHARACTERS = 0x4bb,
+/*20061009 to latest
+9개 이상 선택하실 수 없습니다.
+You cannot select more than 8.
+*/
+ MSG_ERROR_SELECT_CHARACTERS = 0x4bc,
+#endif
+#if PACKETVER >= 20061016
+/*20061016 to latest
+캐릭터명을 '%s' (으)로 변경하시겠습니까?
+Do you want to change your name to '%s'?
+*/
+ MSG_CONFIRM_TO_CHANGE_NAME = 0x4bd,
+/*20061016 to latest
+캐릭터명이 성공적으로 변경되었습니다.
+Character Name has been changed successfully.
+*/
+ MSG_CHANGE_NAME_SUCCESS = 0x4be,
+/*20061016 to latest
+캐릭터명 변경이 실패하였습니다.
+You have failed to change this character's name.
+*/
+ MSG_CHANGE_NAME_FAILURE = 0x4bf,
+/*20061016 to latest
+한 번에 한 종류의 아이템만 구매할 수 있습니다.
+You can purchase only one kind of item at a time.
+*/
+ MSG_CAN_BUY_ONLY_ONEITEM = 0x4c0,
+#endif
+#if PACKETVER >= 20061023
+/*20061023 to latest
+캐릭터가 한개도 선택되지 않았습니다. 반드시 한개 이상의 캐릭터를 선택하여야 합니다.
+No characters were selected. You must select at least one character.
+*/
+ MSG_NO_SELECT_CHARACTERS = 0x4c1,
+/*20061023 to latest
+이미 캐릭터명을 변경한 적이 있습니다. 더 이상 변경 할 수 없습니다.
+This character's name has already been changed. You cannot change a character's name more than once.
+*/
+ MSG_ALREADY_CHANGED_NAME = 0x4c2,
+/*20061023 to latest
+사용자 정보가 정확하지 않습니다.
+User Information is not correct.
+*/
+ MSG_NOTREGISTED_USER = 0x4c3,
+/*20061023 to latest
+다른 사용자가 같은 캐릭터 명을 먼저 사용하였습니다. 다른 캐릭터명을 사용하여 주십시요.
+Another user is using this character name, so please select another one.
+*/
+ MSG_DUPLICATED_CHAR_NAME = 0x4c4,
+#endif
+#if PACKETVER >= 20061030
+/*20061030 to latest
+파티장 권한이 없어 파티원을 소환하지 못했습니다.
+The party member was not summoned because you are not the party leader.
+*/
+ MSG_CANNOT_PARTYCALL = 0x4c5,
+/*20061030 to latest
+현재 맵에는 소환될 파티원이 존재하지 않습니다.
+There is no party member to summon in the current map.
+*/
+ MSG_NO_PARTYMEM_ON_THISMAP = 0x4c6,
+/*20061030 to latest
+이 지역에선 보스몬스터의 흔적을 찾을 수가 없습니다.
+You cannot find any trace of a Boss Monster in this area.
+*/
+ MSG_NOTFIND_BOSSMON = 0x4c7,
+/*20061030 to 20070122
+보스 몬스터 '%s'의 등장 예정시간 %02d시:%02d분
+20070129 to 20071204
+보스 몬스터 '%s'(이)가 %d시 %d분 후에 등장합니다.
+20071211 to latest
+보스 몬스터 '%s'(이)가 %d시간 %d분 후에 등장합니다.
+Boss Monster, '%s' will appear in %02d hour(s) and %02d minute(s).
+*/
+ MSG_APPEARANCE_TIME_OF_BOSSMON = 0x4c8,
+/*20061030 to latest
+보스 몬스터 '%s'의 위치가 미니맵에 표시됩니다.
+The location of Boss Monster, '%s', will be displayed on your Mini-Map.
+*/
+ MSG_SHOW_POSITION_OF_BOSSMON = 0x4c9,
+#endif
+#if PACKETVER >= 20061106
+/*20061106 to 20061211
+%s를 개봉 하시겠습니까? 한번 개봉된 아이템은 창고 저장 외의 다른 이동은 불가하며 동일한 아이템을 중복 사용하더라도 효과가 중첩되지 않습니다.
+20061218 to 20070618
+'%s'를 개봉 하시겠습니까? 한번 개봉된 아이템은 창고 저장 외의 다른 이동은 불가하며 동일한 아이템을 중복 사용하더라도 효과가 중첩되지 않습니다.
+20070619 to 20071218
+'%s'를 개봉 하시겠습니까? 한번 개봉된 아이템은 창고 저장 외의 다른 이동은 불가하며 임대 아이템은 창고 저장도 불가합니다. 동일한 아이템을 중복 사용하더라도 효과가 중첩되지 않습니다.
+20080102 to latest
+'%s'를 개봉 하시겠습니까? 한번 개봉된 아이템은 창고 저장 외의 다른 이동은 불가하며 임대 아이템은 창고 저장도 불가합니다. 한정 아이템은 거래 및 이동이 가능 합니다. 동일한 아이템을 중복 사용하더라도 효과가 중첩되지 않습니다.
+*/
+ MSG_CONFIRM_TO_OPEN_CASH_ITEM = 0x4ca,
+/*20061106 to latest
+NPC가 존재하지 않아 구매가 실패하였습니다.
+The Purchase has failed because the NPC does not exist.
+*/
+ MSG_BUY_CASH_FAIL_NPC = 0x4cb,
+/*20061106 to latest
+부분 유료화 시스템이 정상 작동하지 않아 구매가 실패하였습니다.
+The Purchase has failed because the Kafra Shop System is not working correctly.
+*/
+ MSG_BUY_CASH_FAIL_SYSTEM = 0x4cc,
+/*20061106 to latest
+교환중에는 아이템을 구매 할 수 없습니다.
+You cannot purchase items while you are in a trade.
+*/
+ MSG_BUY_CASH_FAIL_EXCHANGE = 0x4cd,
+/*20061106 to latest
+아이템 정보가 정확하지 않아 구매가 실패하였습니다.
+The Purchase has failed because the Item Information was incorrect.
+*/
+ MSG_BUY_CASH_FAIL_ITEM_ID = 0x4ce,
+#endif
+#if PACKETVER >= 20061204
+/*20061204 to latest
+ STR이 향상되었습니다.
+STR has increased.
+*/
+ MSG_ENST_STR = 0x4cf,
+/*20061204 to latest
+ STR이 원래대로 돌아왔습니다.
+STR has returned to normal.
+*/
+ MSG_DSST_STR = 0x4d0,
+/*20061204 to latest
+ AGI이 향상되었습니다.
+AGI has increased.
+*/
+ MSG_ENST_AGI = 0x4d1,
+/*20061204 to latest
+ AGI이 원래대로 돌아왔습니다.
+AGI has returned to normal.
+*/
+ MSG_DSST_AGI = 0x4d2,
+/*20061204 to latest
+ VIT이 향상되었습니다.
+VIT has increased.
+*/
+ MSG_ENST_VIT = 0x4d3,
+/*20061204 to latest
+ VIT이 원래대로 돌아왔습니다.
+VIT has returned to normal.
+*/
+ MSG_DSST_VIT = 0x4d4,
+/*20061204 to latest
+ INT이 향상되었습니다.
+INT has increased.
+*/
+ MSG_ENST_INT = 0x4d5,
+/*20061204 to latest
+ INT이 원래대로 돌아왔습니다.
+INT has returned to normal.
+*/
+ MSG_DSST_INT = 0x4d6,
+/*20061204 to latest
+ DEX이 향상되었습니다.
+DEX has increased.
+*/
+ MSG_ENST_DEX = 0x4d7,
+/*20061204 to latest
+ DEX이 원래대로 돌아왔습니다.
+DEX has returned to normal.
+*/
+ MSG_DSST_DEX = 0x4d8,
+/*20061204 to latest
+ LUK이 향상되었습니다.
+LUK has increased.
+*/
+ MSG_ENST_LUK = 0x4d9,
+/*20061204 to latest
+ LUK이 원래대로 돌아왔습니다.
+LUK has returned to normal.
+*/
+ MSG_DSST_LUK = 0x4da,
+/*20061204 to latest
+ 회피율이 향상되었습니다.
+Flee Rate (Flee) has increased.
+*/
+ MSG_ENST_AVOIDANCE = 0x4db,
+/*20061204 to latest
+ 회피율이 원래대로 돌아왔습니다.
+Flee Rate has returned to normal.
+*/
+ MSG_DSST_AVOIDANCE = 0x4dc,
+/*20061204 to latest
+ 명중률이 향상되었습니다.
+Accuracy Rate (Hit) has increased.
+*/
+ MSG_ENST_HIT = 0x4dd,
+/*20061204 to latest
+ 명중률이 원래대로 돌아왔습니다.
+Accuracy Rate has returned to normal.
+*/
+ MSG_DSST_HIT = 0x4de,
+/*20061204 to latest
+ 크리티컬 확률이 향상되었습니다.
+Critical Attack (Critical) has increased.
+*/
+ MSG_ENST_CRITICALSUCCESSVALUE = 0x4df,
+/*20061204 to latest
+ 크리티컬 확률이 원래대로 돌아왔습니다.
+Critical Attack has returned to normal.
+*/
+ MSG_DSST_CRITICALSUCCESSVALUE = 0x4e0,
+/*20061204 to latest
+ 몬스터 사냥을 통해 얻을 수 있는 경험치가 30분간 1.5배로 증가합니다.
+*/
+ MSG_PLUSEXP = 0x4e1,
+/*20061204 to latest
+ 30분내 사망시 1회에 한해 경험치 감소가 일어나지 않습니다.
+This character will not receive any EXP penalty if killed within the next 30 minutes.
+*/
+ MSG_DDEATHPENALTY = 0x4e2,
+/*20061204 to latest
+ 몬스터 사냥을 통해 얻을 수 있는 기본 아이템의 드롭률이 30분간 2배로 증가합니다.
+Regular item drops from monsters will be doubled for the next 30 minutes.
+*/
+ MSG_RECEIVEITEM = 0x4e3,
+/*20061204 to latest
+ 10분간 맵 내에 출현 가능한 보스 몬스터에 대한 정보를 안내해 드립니다.
+Boss Monster Map Information for the next 10 minutes.
+*/
+ MSG_BOSS_ALARM = 0x4e4,
+/*20061204 to 20061211
+ 정말로 %s아이템을 구매하시겠습니까?, %d포인트가 차감됩니다.
+20061218 to 20070423
+ 정말로 '%s'아이템을 구매하시겠습니까?, %d포인트가 차감됩니다.
+20070423 to 20080603
+ 정말로 '%s'아이템을 구매하시겠습니까?, %d캐시가 차감됩니다.
+20080610 to latest
+ 본 아이템은 청약 철회나 환불 대상에서 제외되는 아이템입니다. 정말로 '%s'아이템을 구매하시겠습니까?, %d캐시가 차감됩니다.
+*/
+ MSG_BUY_RECONFIRM = 0x4e5,
+#endif
+#if PACKETVER >= 20061211
+/*20061211 to 20061211
+'%s'아이템의 사용시간이 %d분 남았습니다.
+20061218 to 20070423
+ 포인트가 부족합니다.
+20070423 to latest
+ 캐시가 부족합니다.
+ You do not have enough Kafra Credit Points.
+*/
+ MSG_BUY_CASH_FAIL_MONEY = 0x4e6,
+/*20061211 to 20061211
+1분 후, '%s'아이템이 인벤토리에서 삭제됩니다.
+20061218 to latest
+ ^ff0000파기일시: %s^000000
+ ^ff0000Expiration Date: %s^000000
+*/
+ MSG_NOTICE_TO_DELETE_TIME = 0x4e7,
+/*20061211 to 20061211
+'%s'아이템이 인벤토리에서 삭제되었습니다.
+20061218 to latest
+ '%s'아이템의 사용시간이 %d분 남았습니다.
+ The '%s' item will disappear in %d minutes.
+20070102 to 20070312
+ '%s'아이템의 사용시간이 %s 남았습니다.
+*/
+ MSG_NOTICE_TO_REMAIN_ITEMUSINGTIME = 0x4e8,
+#endif
+#if PACKETVER >= 20061218
+/*20061218 to latest
+ 1분 후, '%s'아이템이 인벤토리에서 삭제됩니다.
+ '%s' item will be deleted from the Inventory in 1 minute.
+*/
+ MSG_LAST_NOTICE_TO_REMAIN_ITEMUSINGTIME = 0x4e9,
+/*20061218 to latest
+ '%s'아이템이 인벤토리에서 삭제되었습니다.
+ '%s' item has been deleted from the Inventory.
+*/
+ MSG_NOTICE_TO_DELETE_ITEM = 0x4ea,
+#endif
+#if PACKETVER >= 20070102
+/*20070102 to latest
+Input Number
+*/
+ MSG_INPUT_NUMBER = 0x4eb,
+/*20070102 to latest
+%m월 %d일 %H시 %M분
+%m/%d %H:%M
+*/
+ MSG_TIME_TYPE2 = 0x4ec,
+#endif
+#if PACKETVER >= 20070129
+/*20070129 to 20071120
+보스 몬스터 '%s'(이)가 1분 이내에 등장합니다.
+20071127 to latest
+보스 몬스터 '%s'(이)가 잠시 후에 등장합니다.
+Boss Monster '%s' will appear within 1 minute.
+*/
+ MSG_APPEARANCE_TIME_OF_BOSSMON2 = 0x4ed,
+/*20070129 to latest
+용병 스킬목록
+Mercenary Soldier Skill List
+*/
+ MSG_MER_SKILLLIST = 0x4ee,
+/*20070129 to latest
+블랙젬스톤 1개와 백만제니를 소모하는 마법의 실행에 동의합니까?
+Do you agree to cast the magic spell that consumes 1 Black Gemstone and 1,000,000 Zeny?
+*/
+ MSG_DA_EXP_ACCEPT = 0x4ef,
+#endif
+#if PACKETVER >= 20070220
+/*20070220 to latest
+[POINT] 콜렉터랭킹 포인트가 %d 상승해서 %d 포인트가 되었습니다.
+[Point] You have gained %d Collector Rank Points; you now have a total of %d Collector Rank Points.
+*/
+ MSG_COLLECTOR_POINT = 0x4f0,
+/*20070220 to latest
+[콜렉터랭킹] Target Item : %s
+[Collector Rank] Target Item: %s
+*/
+ MSG_COLLECTOR_MISSION = 0x4f1,
+#endif
+#if PACKETVER >= 20070227
+/*20070227 to latest
+용병 사용시간이 만료되었습니다.
+The mercenary contract has expired.
+*/
+ MSG_MER_FINISH = 0x4f2,
+/*20070227 to latest
+용병이 사망하였습니다.
+The mercenary has died.
+*/
+ MSG_MER_DIE = 0x4f3,
+/*20070227 to latest
+용병이 해고되었습니다.
+You have released the mercenary.
+*/
+ MSG_MER_RETIRE = 0x4f4,
+/*20070227 to latest
+용병이 도망갔습니다.
+The mercenary has run away.
+*/
+ MSG_MER_RUNAWAY = 0x4f5,
+#endif
+#if PACKETVER >= 20070319
+/*20070319 to latest
+ '%s'아이템의 사용시간이 %d초 남았습니다.
+ The '%s' item will disappear in %d seconds.
+*/
+ MSG_NOTICE_TO_REMAIN_ITEMUSINGTIME2 = 0x4f6,
+#endif
+#if PACKETVER >= 20070326
+/*20070326 to 20070821
+PC방 이벤트 : 경험치 증가 %d%%, 죽을때 경험치 %d%%, 드롭율 증가 %d%%
+20070828 to latest
+PC방 프리미엄 서비스 : 경험치 %d%% 증가, 사망 페널티 %d%% 감소, 드롭율 %d%% 증가
+IP Bonus: EXP/JEXP %d%%, Death Penalty %d%%, Item Drop %d%%
+*/
+ MSG_PCBANG_EVENT = 0x4f7,
+#endif
+#if PACKETVER >= 20070402
+/*20070402 to latest
+24시간 이후에 시도하세요
+Symbols in Character Names are forbidden.
+*/
+ MSG_LIMIT_CHAR_DELETE = 0x4f8,
+#endif
+#if PACKETVER >= 20070416
+/*20070416 to latest
+용병이 사용자 인공지능으로 동작합니다.
+Mercenary will follow custom AI.
+*/
+ MSG_MER_USERAI_ON = 0x4f9,
+/*20070416 to latest
+용병이 기본 인공지능으로 동작합니다.
+Mercenary will follow basic AI.
+*/
+ MSG_MER_USERAI_OFF = 0x4fa,
+#endif
+#if PACKETVER >= 20070611
+/*20070611 to latest
+ %s님의
+ %s's
+*/
+ MSG_CHARACTER_NAME = 0x4fb,
+/*20070611 to 20070801
+%s님이 %s를 획득하셨습니다.
+20070807 to latest
+%s님이 %s 아이템을 획득하셨습니다.
+%s has acquired %s.
+*/
+ MSG_ITEM_PICKUP_PARTY = 0x4fc,
+/*20070611 to latest
+공개 채팅 메시지 표시
+Public Chat Display
+*/
+ MSG_VIEW_CHAT_MSG = 0x4fd,
+/*20070611 to latest
+귓속말 채팅 메시지 표시
+Whisper Display
+*/
+ MSG_VIEW_WHISPER_MSG = 0x4fe,
+/*20070611 to latest
+파티 채팅 메시지 표시
+Party Chat Display
+*/
+ MSG_VIEW_PARTY_MSG = 0x4ff,
+/*20070611 to latest
+길드 채팅 메시지 표시
+Guild Chat Display
+*/
+ MSG_VIEW_GUILD_MSG = 0x500,
+/*20070611 to latest
+아이템 획득/드롭 메시지 표시
+Item Get/Drop Message Display
+*/
+ MSG_VIEW_GET_ITEM_MSG = 0x501,
+/*20070611 to latest
+장비 장착/해제 메시지 표시
+Equipment On/Off Message Display
+*/
+ MSG_VIEW_EQUIP_MSG = 0x502,
+/*20070611 to latest
+상태이상 메시지 표시
+Abnormal Status Message Display
+*/
+ MSG_VIEW_CHANGE_STATUS_MSG = 0x503,
+/*20070611 to latest
+파티원의 주요 아이템 획득 메시지 표시
+Party Member's Obtained Item Message Display
+*/
+ MSG_VIEW_GET_ITEM_PARTY_MSG = 0x504,
+/*20070611 to latest
+파티원의 상태이상 메시지 표시
+Party Member's Abnormal Status Message Display
+*/
+ MSG_VIEW_CHANGE_STATUS_PARTY_MSG = 0x505,
+/*20070611 to latest
+스킬 사용 실패 메시지 표시
+Skill Failure Message Display
+*/
+ MSG_VIEW_FAIL_SKILL_MSG = 0x506,
+/*20070611 to latest
+파티 설정 메시지 표시
+Party Configuration Message Display
+*/
+ MSG_VIEW_PARTY_SETUP_MSG = 0x507,
+/*20070611 to latest
+장비 손상 메시지 표시
+Damaged Equipment Message Display
+*/
+ MSG_VIEW_DAMAGED_EQUIP_MSG = 0x508,
+/*20070611 to latest
+배틀 메시지 창 표시 정보
+Battle Message Window Display
+*/
+ MSG_BATTLE_CHAT_WND_OPTION = 0x509,
+/*20070611 to latest
+[%s]의 소지 한코인 : %d 한코인
+[%s]'s Han Coin: %d Han Coin
+*/
+ MSG_POINT_SHOP_NHN = 0x50a,
+#endif
+#if PACKETVER >= 20070618
+/*20070618 to latest
+일반 메시지
+Public Log
+*/
+ MSG_ST_CHAT = 0x50b,
+/*20070618 to latest
+배틀 메시지
+Battle Log
+*/
+ MSG_BT_CHAT = 0x50c,
+/*20070618 to latest
+휴대폰 인증.
+Mobile Authentication
+*/
+ MSG_PHONE_CONFIRM = 0x50d,
+/*20070618 to latest
+읽기
+Read
+*/
+ MSG_BOOK_READ = 0x50e,
+/*20070618 to latest
+자동낭독
+Auto Read
+*/
+ MSG_BOOK_AUTOREAD = 0x50f,
+/*20070618 to latest
+책갈피
+Bookmark
+*/
+ MSG_BOOK_KEEP = 0x510,
+/*20070618 to latest
+이전페이지
+Previous
+*/
+ MSG_BOOK_PREV = 0x511,
+/*20070618 to latest
+다음페이지
+Next
+*/
+ MSG_BOOK_NEXT = 0x512,
+/*20070618 to latest
+닫기
+Close
+*/
+ MSG_BOOK_CLOSE = 0x513,
+#endif
+#if PACKETVER >= 20070622
+/*20070622 to latest
+%s 장비가 손상되었습니다.
+%s's Equipment has been damaged.
+*/
+ MSG_DAMAGED_EQUIP = 0x514,
+/*20070622 to latest
+%s님의 %s 손상되었습니다.
+%s's %s was damaged.
+*/
+ MSG_DAMAGED_EQUIP_PARTY = 0x515,
+/*20070622 to latest
+무기가
+Weapon
+*/
+ MSG_DAMAGED_WEAPON = 0x516,
+/*20070622 to latest
+갑옷이
+Armor
+*/
+ MSG_DAMAGED_BODY = 0x517,
+/*20070622 to latest
+스킬레벨이 부족합니다. 파티가입 불능
+Insufficient Skill Level for joining a Party
+*/
+ MSG_NOT_ENOUGH_SKILLLEVE5_2 = 0x518,
+#endif
+#if PACKETVER >= 20070703
+/*20070703 to latest
+[%s]의 무료 캐시 : %d 캐시
+[%s]'s Free Cash: %d Cash
+*/
+ MSG_POINT_SHOP2 = 0x519,
+/*20070703 to latest
+무료 캐시 사용 :
+Use Free Cash:
+*/
+ MSG_USE_FREE_POINT = 0x51a,
+/*20070703 to latest
+캐시
+Cash
+*/
+ MSG_CASH = 0x51b,
+#endif
+#if PACKETVER >= 20070710
+/*20070710 to latest
+http://payment.ro.hangame.com/index.asp
+*/
+ MSG_SETTLE_WEB_URL_HANGAME = 0x51c,
+/*20070710 to latest
+그라비티 회원 정보동의를 하셔야 사용할수있습니다.
+*/
+ MSG_BAN_GRAVITY_MEM_AGREE = 0x51d,
+/*20070710 to latest
+이용약관에 동의를 하셔야 본 서비스를 이용하실 수 있습니다.
+You need to accept the User Agreement in order to use the service.
+*/
+ MSG_BAN_GAME_MEM_AGREE = 0x51e,
+/*20070710 to 20080513
+존재하지 않는 한게임 ID이거나 잘못된 ID입니다.
+20080520 to latest
+입력하신 아이디와 비밀번호가 등록된 정보와 일치하지 않습니다.
+Incorrect or nonexistent ID.
+*/
+ MSG_BAN_HAN_VALID = 0x51f,
+#endif
+#if PACKETVER >= 20070711
+/*20070711 to 20080603
+ 정말로 '%s'아이템을 구매하시겠습니까?, 일반 %d캐시, 무료 %d캐시가 차감됩니다.
+20080610 to latest
+ 본 아이템은 청약 철회나 환불 대상에서 제외되는 아이템입니다. 정말로 '%s'아이템을 구매하시겠습니까?, 일반 %d캐시, 무료 %d캐시가 차감됩니다.
+*/
+ MSG_BUY_RECONFIRM2 = 0x520,
+#endif
+#if PACKETVER >= 20070718
+/*20070718 to latest
+%d시간이 경과하였습니다.
+%d hour(s) has passed.
+*/
+ MSG_NOTIFY_PLAYTIME1 = 0x521,
+/*20070718 to latest
+%d시간 %d분이 경과하였습니다.
+%d hour(s) %d minute(s) has passed.
+*/
+ MSG_NOTIFY_PLAYTIME2 = 0x522,
+/*20070718 to latest
+게임을 종료하세요, 경험치 및 모든게 50%로 조정됩니다
+Please stop playing the game, and take a break. Exp and other features will be reduced to 50%.
+*/
+ MSG_WARNING_MSG1 = 0x523,
+/*20070718 to latest
+불건전 시간대에 접어들었습니다. 게임을 종료하세요, 경험치 및 모든게 0%로 조정됩니다
+Please stop playing the game since you'll need to rest. Exp and other features will be fixed to 0%.
+*/
+ MSG_WARNING_MSG2 = 0x524,
+#endif
+#if PACKETVER >= 20070724
+/*20070724 to latest
+퀘스트 목록
+Quest List
+*/
+ MSG_QUESTWIN = 0x525,
+#endif
+#if PACKETVER >= 20070807
+/*20070807 to latest
+RO SHOP
+RO Shop
+*/
+ MSG_RO_SHOP = 0x526,
+#endif
+#if PACKETVER >= 20070821
+/*20070821 to 20070904
+메모리얼던젼 '%s'이 예약되었습니다.
+20070911 to latest
+메모리얼던젼 '%s'의 예약이 알수없는 이유로 실패 하였습니다.
+Memorial Dungeon, '%s' is booked.
+*/
+ MSG_MDUNGEON_SUBSCRIPTION_ERROR_UNKNOWN = 0x527,
+/*20070821 to 20070904
+메모리얼던젼 '%s' 예약이 실패했습니다.
+20070911 to latest
+메모리얼던젼 '%s'의 예약이 예약중복으로 실패 하였습니다.
+Failed to book Memorial Dungeon, '%s'.
+*/
+ MSG_MDUNGEON_SUBSCRIPTION_ERROR_DUPLICATE = 0x528,
+/*20070821 to 20070904
+메모리얼던젼 '%s' 이미 예약중입니다.
+20070911 to latest
+메모리얼던젼 '%s'의 예약이 권한문제로 실패 하였습니다.
+Memorial Dungeon, '%s' is already booked.
+*/
+ MSG_MDUNGEON_SUBSCRIPTION_ERROR_RIGHT = 0x529,
+/*20070821 to 20070904
+메모리얼던젼 '%s'가 생성 되었습니다
+ 5분내에 입장하세요.
+20070911 to latest
+메모리얼던젼 '%s'의 예약이 중복생성요청으로 실패하였습니다.
+Memorial Dungeon, '%s' is created.
+ Please enter in 5 minutes.
+*/
+ MSG_MDUNGEON_SUBSCRIPTION_ERROR_EXIST = 0x52a,
+/*20070821 to 20070904
+메모리얼던젼 '%s' 생성에 실패했습니다.
+ 나중에 다시 시도하세요.
+20070911 to latest
+메모리얼던젼 '%s'의 예약취소가 실패 하였습니다.
+Failed to create Memorial Dungeon, '%s'.
+ Please try again.
+*/
+ MSG_MDUNGEON_SUBSCRIPTION_CANCEL_FAIL = 0x52b,
+/*20070821 to latest
+상대방이 파티 초대 거부 상태입니다.
+The character blocked the party invitation.
+*/
+ MSG_JOINMSG_REFUSE = 0x52c,
+#endif
+#if PACKETVER >= 20070828
+/*20070828 to latest
+모든 파티 초대를 거부합니다.
+Block all party invitations.
+*/
+ MSG_INVITE_PARTY_REFUSE = 0x52d,
+/*20070828 to latest
+모든 파티 초대를 수락합니다.
+Allow all party invitations.
+*/
+ MSG_INVITE_PARTY_ACCEPT = 0x52e,
+#endif
+#if PACKETVER >= 20070904
+/*20070904 to latest
+착용하시면 이 아이템은 영구 귀속됩니다. 착용하시겠습니까?
+This item will be permanently bound to this character once it is equipped. Do you really want to equip this item?
+*/
+ MSG_YOURITEM_EQUIP = 0x52f,
+/*20070904 to latest
+%s 아이템이 귀속되었습니다.
+%s is now permanently bound to this character.
+*/
+ MSG_YOURITEM_EQUIPED = 0x530,
+/*20070904 to latest
+캐시가 부족합니다. 무료 캐시 포인트를 입력해 주시기 바랍니다.
+You do not have enough Kafra Credit Points. Please enter whether you have free credit points.
+*/
+ MSG_BUY_TO_FREE_POINT = 0x531,
+/*20070904 to latest
+파티 가입요청
+Request to Join Party
+*/
+ MSG_REQ_JOIN_PARTY3 = 0x532,
+#endif
+#if PACKETVER >= 20070912
+/*20070912 to latest
+공성 정보 메시지 표시
+Display WOE Info
+*/
+ MSG_VIEW_SIEGE_INFO_MSG = 0x533,
+/*20070912 to latest
+메모리얼던젼 '%s'의 예약이 취소 되었습니다.
+Memorial Dungeon %s's reservation has been canceled.
+*/
+ MSG_MDUNGEON_SUBSCRIPTION_CANCEL_SUCCESS = 0x534,
+/*20070912 to latest
+메모리얼던젼 '%s' 생성에 실패하였습니다. 다시 시도 하세요.
+Failed to create Memorial Dungeon %s. Please try again.
+*/
+ MSG_MDUNGEON_CREATE_FAIL = 0x535,
+/*20070912 to latest
+이 장소에서는 사용할 수 없는 스킬입니다.
+This skill cannot be used within this area.
+*/
+ MSG_IMPOSSIBLE_SKILL_AREA = 0x536,
+/*20070912 to latest
+이 장소에서는 사용할 수 없는 아이템입니다.
+This item cannot be used within this area.
+*/
+ MSG_IMPOSSIBLE_USEITEM_AREA = 0x537,
+#endif
+#if PACKETVER >= 20070918
+/*20070918 to latest
+메모리얼 던전
+Memorial Dungeon
+*/
+ MSG_MEMORIAL_DUN = 0x538,
+/*20070918 to latest
+%s 대기중
+%s in Standby
+*/
+ MSG_MEMORIAL_DUN_WAITING = 0x539,
+/*20070918 to latest
+%s 입장 가능
+%s Available
+*/
+ MSG_MEMORIAL_DUN_READY = 0x53a,
+/*20070918 to 20071120
+%s 내부
+20071127 to latest
+%s 진행중
+%s in Progress
+*/
+ MSG_MEMORIAL_DUN_IN = 0x53b,
+/*20070918 to latest
+시간 안에 입장하지 않아 메모리얼 던전이 사라졌습니다.
+No one entered the Memorial Dungeon within its duration; the dungeon has disappeared.
+*/
+ MSG_MEMORIAL_DUN_OUT1 = 0x53c,
+/*20070918 to latest
+이용하시려면 이용 신청을 처음부터 다시 해주시기 바랍니다.
+Please apply for dungeon entry again to play in this dungeon.
+*/
+ MSG_MEMORIAL_DUN_OUT2 = 0x53d,
+/*20070918 to latest
+대기 순위 : ^ff0000%d^000000
+Your Standby Priority: ^ff0000%d^000000
+*/
+ MSG_MEMORIAL_DUN_PRIORITY = 0x53e,
+/*20070918 to latest
+^ff0000%s^000000 내에 입장하지 않을 경우 신청하신 던전이 삭제 됩니다.
+The requested dungeon will be removed if you do not enter within ^ff0000%s^000000.
+*/
+ MSG_MEMORIAL_DUN_NOTIFY = 0x53f,
+/*20070918 to latest
+던전 미션 제한 시간 :
+Dungeon Mission Time Limit:
+*/
+ MSG_MEMORIAL_DUN_NOTIFY2 = 0x540,
+/*20070918 to latest
+메모리얼 던전 예약이 취소되었습니다.
+The Memorial Dungeon reservation has been canceled.
+*/
+ MSG_MEMORIAL_DUN_CANCEL = 0x541,
+/*20070918 to latest
+메모리얼 던전이 유지 시간 제한에 의해 파괴되었습니다.
+The Memorial Dungeon duration expired; it has been destroyed.
+*/
+ MSG_MEMORIAL_DUN_LIVE_TIME_OUT = 0x542,
+/*20070918 to latest
+메모리얼 던전이 입장 시간 제한에 의해 파괴되었습니다.
+The Memorial Dungeon's entry time limit expired; it has been destroyed.
+*/
+ MSG_MEMORIAL_DUN_ENTER_TIME_OUT = 0x543,
+/*20070918 to latest
+메모리얼 던전이 삭제 되었습니다.
+The Memorial Dungeon has been removed.
+*/
+ MSG_MEMORIAL_DUN_DESTROY_REQUEST = 0x544,
+/*20070918 to latest
+메모리얼 던전에 시스템 오류가 발생하였습니다. 정상적인 게임 진행을 위해 재접속을 해주십시오.
+A system error has occurred in the Memorial Dungeon. Please relog in to the game to continue playing.
+*/
+ MSG_MEMORIAL_DUN_ERROR = 0x545,
+/*20070918 to latest
+사용할 수 없는 슬롯입니다.
+This slot is not usable.
+*/
+ MSG_FR_INVALID_SLOT = 0x546,
+/*20070918 to latest
+Base Level이 15를 넘었습니다.
+Your Base Level is over 15.
+*/
+ MSG_FR_BASELVL = 0x547,
+/*20070918 to latest
+Job Level이 15를 넘었습니다.
+Your Job Level is over 15.
+*/
+ MSG_FR_INVALID_JOBLV = 0x548,
+/*20070918 to latest
+해당슬롯 캐릭터에 직업군의 상인이므로 게임을 할 수 없습니다.
+You cannot play the Merchant class character in this slot.
+*/
+ MSG_FR_JOB = 0x549,
+/*20070918 to latest
+추후 사용예정
+Not Yet Implemented
+*/
+ MSG_FR_MAP = 0x54a,
+/*20070918 to latest
+만들수 있는 케릭터 슬롯이 아닙니다.
+You are not eligible to open the Character Slot.
+*/
+ MSG_FR_ERR_MKCHAR_INVALID_SLOT = 0x54b,
+/*20070918 to latest
+삭제할 수 없는 케릭터 입니다.
+This character cannot be deleted.
+*/
+ MSG_FR_ERR_DELCHAR_INVALID_SLOT = 0x54c,
+/*20070918 to latest
+상대방의 장비창이 공개되어 있지 않습니다.
+This character's equipment information is not open to the public.
+*/
+ MSG_OPEN_EQUIPEDITEM_REFUSED = 0x54d,
+/*20070918 to latest
+장비창을 공개하지 않습니다.
+Equipment information not open to the public.
+*/
+ MSG_OPEN_EQUIPEDITEM_REFUSE = 0x54e,
+/*20070918 to latest
+장비창을 공개합니다.
+Equipment information open to the public.
+*/
+ MSG_OPEN_EQUIPEDITEM_ACCEPT = 0x54f,
+/*20070918 to latest
+(%s)님 장비창 보기
+Check %s's Equipment Info
+*/
+ MSG_REQ_VIEW_OTHERUSER = 0x550,
+/*20070918 to latest
+%s의 장착아이템
+'%s's Equipment
+*/
+ MSG_OTHERUSER_EQUIPED_ITEM = 0x551,
+/*20070918 to latest
+장비창 공개
+Show Equip
+*/
+ MSG_OPEN_EQUIPED_ITEM = 0x552,
+#endif
+#if PACKETVER >= 20071002
+/*20071002 to latest
+프리미엄 서비스를 이용해 주시기 바랍니다.
+This service is only available for premium users.
+*/
+ MSG_NEED_PREMIUM_SERVICE = 0x553,
+/*20071002 to latest
+무료 사용자는 최대 50000제니까지 소유할 수 있습니다.
+Free Trial users can only hold up to 50,000 zeny.
+*/
+ MSG_FR_INVALID_MONEY = 0x554,
+#endif
+#if PACKETVER >= 20071009
+/*20071009 to latest
+전장채팅 상태가 되었습니다.
+Battlefield Chat has been activated.
+*/
+ MSG_BATTLECHAT_ON = 0x555,
+/*20071009 to latest
+전장채팅 상태가 해제되었습니다.
+Battlefield Chat has been deactivated.
+*/
+ MSG_BATTLECHAT_OFF = 0x556,
+#endif
+#if PACKETVER >= 20071017
+/*20071017 to latest
+용병정보 - 몬스터타입
+Mercenary Info - Monster Type
+*/
+ MSG_MER_INFO_TYPE_MONSTER = 0x557,
+#endif
+#if PACKETVER >= 20071106
+/*20071106 to latest
+전체 맵 보기
+World Map
+*/
+ MSG_RO_MAP = 0x558,
+#endif
+#if PACKETVER >= 20071127
+/*20071127 to latest
+메모리얼던젼이 CLOSE 상태입니다.
+The Memorial Dungeon is now closed.
+*/
+ MSG_MEMORIAL_DUN_CLOSE = 0x559,
+#endif
+#if PACKETVER >= 20071204
+/*20071204 to latest
+^ff0000^ff0000용병을 삭제합니다.^000000^000000 삭제하실 경우 지금까지 키운 내역이 모두 삭제됩니다. 계속하시겠습니까?
+^ff0000Deleting a Mercenary Soldier^000000 will also delete his growth history. Do you really want to proceed with the deletion?
+*/
+ MSG_DELETE_MER = 0x55a,
+#endif
+#if PACKETVER >= 20071211
+/*20071211 to latest
+메모리얼던젼이 OPEN 상태입니다.
+The Memorial Dungeon is now open.
+*/
+ MSG_MEMORIAL_DUN_OPEN = 0x55b,
+#endif
+#if PACKETVER >= 20080108
+/*20080108 to latest
+위의 계정은 아직 통신 안전 키에 연결되지 않았습니다. 먼저 안전 키를 해제하신 뒤 게임에 접속해 주십시오.
+This account has not been confirmed by connecting to the safe communication key. Please connect to the key first, and then log into the game.
+*/
+ MSG_PHONE_BLOCK = 0x55c,
+/*20080108 to latest
+한 아이피로 접속 가능한 유저수를 초과하였습니다.
+The number of accounts connected to this IP has exceeded the limit.
+*/
+ MSG_BAN_PC_IP_LIMIT_ACCESS = 0x55d,
+#endif
+#if PACKETVER >= 20080219
+/*20080219 to latest
+새로운 퀘스트를 받았습니다
+You have received a new quest.
+*/
+ MSG_QUESTGET = 0x55e,
+#endif
+#if PACKETVER >= 20080401
+/*20080401 to latest
+^777777습득조건 :
+^CC3399Requirement:
+*/
+ MSG_FINDTEXT_TO_SKILLDES = 0x55f,
+/*20080401 to latest
+스킬 설명 보기
+View Skill Info
+*/
+ MSG_VIEW_SKILL_DESCRIPT = 0x560,
+#endif
+#if PACKETVER >= 20080408
+/*20080408 to latest
+사용된 스킬 포인트는 다시 되돌릴 수 없습니다. 적용하시겠습니까?
+Once used, skill points cannot be re-allocated. Would you like to use the skill points?
+*/
+ MSG_APPLY_SKILL_UP = 0x561,
+/*20080408 to latest
+노비스·1차직업
+1st
+*/
+ MSG_1TABNAME_SKILLWND = 0x562,
+/*20080408 to latest
+2차·전승직업
+2nd
+*/
+ MSG_2TABNAME_SKILLWND = 0x563,
+/*20080408 to 20080513
+불법프로그램을 사용하였거나 혹은 해킹을 시도한 계정입니다. 블럭시간 : %s
+20080520 to latest
+불법프로그램을 사용하였거나 혹은 해킹을 시도한 계정입니다. 블럭종료시간 : %s
+This account has been used for illegal program or hacking program. Block Time: %s
+*/
+ MSG_RE17 = 0x564,
+/*20080408 to latest
+불법프로그램이 실행, 바이러스 감염, 또는 해킹툴이 설치되어 있을 가능성이 있습니다. 정상 클라이언트를 실행하여 주시기 바랍니다. 함께 만드는 밝은 라그나로크가 될 수 있도록 노력하고 있습니다.
+The possibility of exposure to illegal program, PC virus infection or Hacking Tool has been detected. Please execute licensed client. Our team is trying to make a best environment for Ro players.
+*/
+ MSG_RE18 = 0x565,
+#endif
+#if PACKETVER >= 20080415
+/*20080415 to latest
+당신은 지금 건강한 게임 시간 대에 있습니다, 즐거운 게임이 되시길 바랍니다
+You are currently playing in the best game environment. Please enjoy the Ragnarok.
+*/
+ MSG_WARNING_MSG3 = 0x566,
+/*20080415 to latest
+ 몬스터 사냥을 통해 얻을 수 있는 Job경험치가 30분간 1.5배로 증가합니다.
+*/
+ MSG_PLUSONLYJOBEXP = 0x567,
+/*20080415 to latest
+ 몬스터 사냥을 통해 얻을 수 있는 경험치가 30분간 1.25배로 증가합니다.
+*/
+ MSG_PLUSEXP14532 = 0x568,
+/*20080415 to latest
+ 몬스터 사냥을 통해 얻을 수 있는 경험치가 30분간 2배로 증가합니다.
+EXP points from hunting monsters are increased by 100%% for 30 minutes.
+*/
+ MSG_PLUSEXP14533 = 0x569,
+/*20080415 to latest
+ 몬스터 사냥을 통해 얻을 수 있는 경험치가 60분간 1.5배로 증가합니다.
+EXP points from hunting monsters are increased by 50% for 60 minutes.
+*/
+ MSG_PLUSEXP12312 = 0x56a,
+#endif
+#if PACKETVER >= 20080520
+/*20080520 to latest
+이 맵에서는 파티를 결성할 수 없습니다.
+Unable to organize a party in this map.
+*/
+ MSG_NOPARTY = 0x56b,
+/*20080520 to latest
+(%s)님은 파티에 참여할 수 없는 맵에 있습니다.
+(%s) are currently in restricted map to join a party.
+*/
+ MSG_NOPARTY2 = 0x56c,
+#endif
+#if PACKETVER >= 20080528
+/*20080528 to 20080603
+간편아이템샵.
+20080610 to latest
+간편아이템샵
+Simple Item Shop
+*/
+ MSG_SIMPLE_CASH_SHOP = 0x56d,
+/*20080528 to latest
+소지 한코인 : %d 한코인
+Han Coin: %d Han Coin
+*/
+ MSG_SIMPLE_POINT_SHOP_NHN = 0x56e,
+/*20080528 to latest
+소지 캐시 : %d 캐시
+RoK Point: %d RoK Point
+*/
+ MSG_SIMPLE_POINT_SHOP = 0x56f,
+/*20080528 to latest
+무료 캐시 : %d 캐시
+Free Cash: %d Cash
+*/
+ MSG_SIMPLE_POINT_SHOP2 = 0x570,
+#endif
+
+};
+#endif /* MAP_MESSAGES_AD_H */
diff --git a/src/map/messages_main.h b/src/map/messages_main.h
index 1d42ff2bb..4bef783ec 100644
--- a/src/map/messages_main.h
+++ b/src/map/messages_main.h
@@ -3,6 +3,7 @@
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
* Copyright (C) 2013-2018 Hercules Dev Team
+ * Copyright (C) 2018 Andrei Karas (4144)
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -23,7 +24,7 @@
/* This file is autogenerated, please do not commit manual changes
-Latest version: 20180718
+Latest version: 20181107
*/
enum clif_messages {
@@ -17569,9 +17570,11 @@ DEATH: %.1f%% (Basic 100.0%% VIP Bonus %.1f%% + %s %.1f%%)
MSG_ID_AFB = 0xafb,
#endif
#if PACKETVER >= 20150826
-/*20150826 to latest
+/*20150826 to 20180919
해당 태그는 이름으로 사용하실 수 없습니다.
Name with this tag cannot be used.
+20181002 to latest
+ 해당 내용은 이름으로 사용하실 수 없습니다.
*/
MSG_ID_AFC = 0xafc,
#endif
@@ -21267,6 +21270,148 @@ DEATH : %.1f%% ( basic 100.0%% %s %.1f%%)
*/
MSG_ID_DD1 = 0xdd1,
#endif
+#if PACKETVER >= 20180829
+/*20180829 to latest
+영문이나 러시아어 단독으로만 사용이 가능합니다.
+*/
+ MSG_ID_DD2 = 0xdd2,
+/*20180829 to latest
+you must have an AccessTicket to login
+*/
+ MSG_ID_DD3 = 0xdd3,
+/*20180829 to latest
+창고를 불러오는 중입니다.
+*/
+ MSG_ID_DD4 = 0xdd4,
+/*20180829 to latest
+NOW LOADING..
+*/
+ MSG_ID_DD5 = 0xdd5,
+#endif
+#if PACKETVER >= 20181002
+/*20181002 to latest
+삭제
+*/
+ MSG_ID_DD6 = 0xdd6,
+/*20181002 to latest
+답장
+*/
+ MSG_ID_DD7 = 0xdd7,
+/*20181002 to latest
+전송
+*/
+ MSG_ID_DD8 = 0xdd8,
+/*20181002 to latest
+이름확인
+*/
+ MSG_ID_DD9 = 0xdd9,
+/*20181002 to latest
+공지
+Notice
+*/
+ MSG_ID_DDA = 0xdda,
+/*20181002 to latest
+일반
+General
+*/
+ MSG_ID_DDB = 0xddb,
+/*20181002 to latest
+반송
+Clear
+*/
+ MSG_ID_DDC = 0xddc,
+/*20181002 to latest
+검색
+Search
+*/
+ MSG_ID_DDD = 0xddd,
+#endif
+#if PACKETVER >= 20181031
+/*20181031 to latest
+펫 먹이주기에 실패했습니다. 먹이를 줄 수 없는 상태입니다.
+*/
+ MSG_ID_DDE = 0xdde,
+/*20181031 to latest
+호문 먹이주기에 실패했습니다. 먹이를 줄 수 없는 상태입니다.
+*/
+ MSG_ID_DDF = 0xddf,
+/*20181031 to latest
+화폐
+*/
+ MSG_ID_DE0 = 0xde0,
+/*20181031 to latest
+%s %d개
+*/
+ MSG_ID_DE1 = 0xde1,
+/*20181031 to latest
+교환에 실패하였습니다.
+*/
+ MSG_ID_DE2 = 0xde2,
+/*20181031 to latest
+교환이 잘 이루어졌습니다.
+*/
+ MSG_ID_DE3 = 0xde3,
+/*20181031 to latest
+교환에 필요한 재화가 부족합니다.
+*/
+ MSG_ID_DE4 = 0xde4,
+/*20181031 to latest
+해당 아이템은 이미 판매되어 재고가 부족합니다.
+*/
+ MSG_ID_DE5 = 0xde5,
+/*20181031 to latest
+사망
+*/
+ MSG_ID_DE6 = 0xde6,
+/*20181031 to latest
+PvP
+*/
+ MSG_ID_DE7 = 0xde7,
+/*20181031 to latest
+아이템 소지 확장
+*/
+ MSG_ID_DE8 = 0xde8,
+/*20181031 to 20181031
+(^0000ff%s^000000)을 소모하여, 아이템 최대 소지 종류수를 확장하시겠습니까?
+(^0000ff%d^000000)에서 (^0000ff%d^000000)로 확장됩니다.
+^ff0000※ 소모된 아이템 및 확장된 최대 소지 종류수는 되돌릴 수 없습니다.^000000
+20181107 to latest
+^0000ff%s^000000을 소모하여, 아이템 최대 소지 종류수를 확장하시겠습니까?
+(^0000ff%d^000000)에서 (^0000ff%d^000000)로 확장됩니다.
+^ff0000※ 소모된 아이템 및 확장된 최대 소지 종류수는 되돌릴 수 없습니다.^000000
+*/
+ MSG_ID_DE9 = 0xde9,
+/*20181031 to 20181031
+아이템 소지 종류 수 확장에 실패하였습니다.
+20181107 to latest
+아이템 최대 소지 종류수 확장에 실패하였습니다.
+*/
+ MSG_ID_DEA = 0xdea,
+/*20181031 to 20181031
+아이템 소지 종류 수 확장을 위해, 다른 작업을 종료하여 주시기 바랍니다.
+20181107 to latest
+아이템 최대 소지 종류수 확장을 위해, 다른 작업을 종료하여 주시기 바랍니다.
+*/
+ MSG_ID_DEB = 0xdeb,
+/*20181031 to 20181031
+아이템 소지 확장에 필요한 아이템을 소지하고 있지 않습니다.
+20181107 to latest
+아이템 최대 소지 종류수 확장에 필요한 아이템을 소지하고 있지 않습니다.
+*/
+ MSG_ID_DEC = 0xdec,
+/*20181031 to 20181031
+이미 아이템 소지 종류 수 확장이 최대로 적용 중입니다.
+20181107 to latest
+더 이상 아이템 최대 소지 종류수를 확장 할 수 없습니다.
+*/
+ MSG_ID_DED = 0xded,
+/*20181031 to 20181031
+아이템 소지 확장에 성공하였습니다.
+20181107 to latest
+아이템 최대 소지 종류수 확장에 성공하였습니다.
+*/
+ MSG_ID_DEE = 0xdee,
+#endif
};
#endif /* MAP_MESSAGES_MAIN_H */
diff --git a/src/map/messages_re.h b/src/map/messages_re.h
index 899f0c708..ee1a05b93 100644
--- a/src/map/messages_re.h
+++ b/src/map/messages_re.h
@@ -3,6 +3,7 @@
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
* Copyright (C) 2013-2018 Hercules Dev Team
+ * Copyright (C) 2018 Andrei Karas (4144)
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -23,7 +24,7 @@
/* This file is autogenerated, please do not commit manual changes
-Latest version: 20180718
+Latest version: 20181107
*/
enum clif_messages {
@@ -17045,9 +17046,11 @@ DEATH: %.1f%% (Basic 100.0%% VIP Bonus %.1f%% + %s %.1f%%)
MSG_ID_AFB = 0xafb,
#endif
#if PACKETVER >= 20150826
-/*20150826 to latest
+/*20150826 to 20180919
해당 태그는 이름으로 사용하실 수 없습니다.
Name with this tag cannot be used.
+20181002 to latest
+ 해당 내용은 이름으로 사용하실 수 없습니다.
*/
MSG_ID_AFC = 0xafc,
#endif
@@ -20746,6 +20749,148 @@ DEATH : %.1f%% ( basic 100.0%% %s %.1f%%)
*/
MSG_ID_DD1 = 0xdd1,
#endif
+#if PACKETVER >= 20180829
+/*20180829 to latest
+영문이나 러시아어 단독으로만 사용이 가능합니다.
+*/
+ MSG_ID_DD2 = 0xdd2,
+/*20180829 to latest
+you must have an AccessTicket to login
+*/
+ MSG_ID_DD3 = 0xdd3,
+/*20180829 to latest
+창고를 불러오는 중입니다.
+*/
+ MSG_ID_DD4 = 0xdd4,
+/*20180829 to latest
+NOW LOADING..
+*/
+ MSG_ID_DD5 = 0xdd5,
+#endif
+#if PACKETVER >= 20180919
+/*20180919 to latest
+삭제
+*/
+ MSG_ID_DD6 = 0xdd6,
+/*20180919 to latest
+답장
+*/
+ MSG_ID_DD7 = 0xdd7,
+/*20180919 to latest
+전송
+*/
+ MSG_ID_DD8 = 0xdd8,
+/*20180919 to latest
+이름확인
+*/
+ MSG_ID_DD9 = 0xdd9,
+/*20180919 to latest
+공지
+Notice
+*/
+ MSG_ID_DDA = 0xdda,
+/*20180919 to latest
+일반
+General
+*/
+ MSG_ID_DDB = 0xddb,
+/*20180919 to latest
+반송
+Clear
+*/
+ MSG_ID_DDC = 0xddc,
+/*20180919 to latest
+검색
+Search
+*/
+ MSG_ID_DDD = 0xddd,
+#endif
+#if PACKETVER >= 20181031
+/*20181031 to latest
+펫 먹이주기에 실패했습니다. 먹이를 줄 수 없는 상태입니다.
+*/
+ MSG_ID_DDE = 0xdde,
+/*20181031 to latest
+호문 먹이주기에 실패했습니다. 먹이를 줄 수 없는 상태입니다.
+*/
+ MSG_ID_DDF = 0xddf,
+/*20181031 to latest
+화폐
+*/
+ MSG_ID_DE0 = 0xde0,
+/*20181031 to latest
+%s %d개
+*/
+ MSG_ID_DE1 = 0xde1,
+/*20181031 to latest
+교환에 실패하였습니다.
+*/
+ MSG_ID_DE2 = 0xde2,
+/*20181031 to latest
+교환이 잘 이루어졌습니다.
+*/
+ MSG_ID_DE3 = 0xde3,
+/*20181031 to latest
+교환에 필요한 재화가 부족합니다.
+*/
+ MSG_ID_DE4 = 0xde4,
+/*20181031 to latest
+해당 아이템은 이미 판매되어 재고가 부족합니다.
+*/
+ MSG_ID_DE5 = 0xde5,
+/*20181031 to latest
+사망
+*/
+ MSG_ID_DE6 = 0xde6,
+/*20181031 to latest
+PvP
+*/
+ MSG_ID_DE7 = 0xde7,
+/*20181031 to latest
+아이템 소지 확장
+*/
+ MSG_ID_DE8 = 0xde8,
+/*20181031 to 20181031
+(^0000ff%s^000000)을 소모하여, 아이템 최대 소지 종류수를 확장하시겠습니까?
+(^0000ff%d^000000)에서 (^0000ff%d^000000)로 확장됩니다.
+^ff0000※ 소모된 아이템 및 확장된 최대 소지 종류수는 되돌릴 수 없습니다.^000000
+20181107 to latest
+^0000ff%s^000000을 소모하여, 아이템 최대 소지 종류수를 확장하시겠습니까?
+(^0000ff%d^000000)에서 (^0000ff%d^000000)로 확장됩니다.
+^ff0000※ 소모된 아이템 및 확장된 최대 소지 종류수는 되돌릴 수 없습니다.^000000
+*/
+ MSG_ID_DE9 = 0xde9,
+/*20181031 to 20181031
+아이템 소지 종류 수 확장에 실패하였습니다.
+20181107 to latest
+아이템 최대 소지 종류수 확장에 실패하였습니다.
+*/
+ MSG_ID_DEA = 0xdea,
+/*20181031 to 20181031
+아이템 소지 종류 수 확장을 위해, 다른 작업을 종료하여 주시기 바랍니다.
+20181107 to latest
+아이템 최대 소지 종류수 확장을 위해, 다른 작업을 종료하여 주시기 바랍니다.
+*/
+ MSG_ID_DEB = 0xdeb,
+/*20181031 to 20181031
+아이템 소지 확장에 필요한 아이템을 소지하고 있지 않습니다.
+20181107 to latest
+아이템 최대 소지 종류수 확장에 필요한 아이템을 소지하고 있지 않습니다.
+*/
+ MSG_ID_DEC = 0xdec,
+/*20181031 to 20181031
+이미 아이템 소지 종류 수 확장이 최대로 적용 중입니다.
+20181107 to latest
+더 이상 아이템 최대 소지 종류수를 확장 할 수 없습니다.
+*/
+ MSG_ID_DED = 0xded,
+/*20181031 to 20181031
+아이템 소지 확장에 성공하였습니다.
+20181107 to latest
+아이템 최대 소지 종류수 확장에 성공하였습니다.
+*/
+ MSG_ID_DEE = 0xdee,
+#endif
};
#endif /* MAP_MESSAGES_RE_H */
diff --git a/src/map/messages_sak.h b/src/map/messages_sak.h
new file mode 100644
index 000000000..2cfe085c8
--- /dev/null
+++ b/src/map/messages_sak.h
@@ -0,0 +1,8267 @@
+/**
+ * This file is part of Hercules.
+ * http://herc.ws - http://github.com/HerculesWS/Hercules
+ *
+ * Copyright (C) 2013-2018 Hercules Dev Team
+ *
+ * Hercules is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef MAP_MESSAGES_SAK_H
+#define MAP_MESSAGES_SAK_H
+
+/* This file is autogenerated, please do not commit manual changes
+
+Latest version: 20090617
+*/
+
+enum clif_messages {
+/*20031029 to latest
+동의 하십니까?
+Do you agree?
+*/
+ MSG_DO_YOU_AGREE = 0x0,
+/*20031029 to latest
+서버 연결 실패
+Failed to Connect to Server.
+*/
+ MSG_SERVER_CONNECTION_FAILED = 0x1,
+/*20031029 to latest
+서버와 연결이 끊어졌습니다.
+Disconnected from Server.
+*/
+ MSG_UNABLE_TO_CONNECT_SERVER = 0x2,
+/*20031029 to 20080618
+서버와 연결이 끊어졌습니다.
+Disconnected from Server.
+20080624 to latest
+서버와 연결이 끊어졌습니다!
+Disconnected from Server!
+*/
+ MSG_BANNED = 0x3,
+/*20031029 to latest
+서버 종료됨
+Server Closed.
+*/
+ MSG_SERVER_OFF = 0x4,
+/*20031029 to latest
+같은 계정으로 다른 사용자가 로그인 하였습니다.
+Someone has Logged in with this ID.
+*/
+ MSG_DOUBLE_LOGIN_PROHIBITED = 0x5,
+/*20031029 to latest
+등록되지 않은 계정입니다. 다시 확인 바랍니다.
+Unregistered ID. Please make sure you have a registered account and you have correctly typed in the user ID.
+*/
+ MSG_INCORRECT_USERID = 0x6,
+/*20031029 to 20070704
+비밀번호가 틀립니다
+20070710 to latest
+입력하신 비밀번호가 올바르지 않습니다.
+Incorrect User ID or Password. Please try again.
+*/
+ MSG_INCORRECT_PASSWORD = 0x7,
+/*20031029 to latest
+본 ID 는 사용기간이 만료 되었습니다
+This ID is expired.
+*/
+ MSG_ID_EXPIRED = 0x8,
+/*20031029 to latest
+서버 접근 거부
+Rejected from Server.
+*/
+ MSG_ACCESS_DENIED = 0x9,
+/*20031029 to latest
+같은 캐릭터 이름이 있습니다.
+Character Name already exists.
+*/
+ MSG_CHARACTER_NAME_ALREADY_EXISTS = 0xa,
+/*20031029 to latest
+캐릭터 생성 거부됨
+Character Creation is denied.
+*/
+ MSG_CHARACTER_CREATION_DENIED = 0xb,
+/*20031029 to latest
+캐릭터 삭제 거부
+Character Deletion is denied.
+*/
+ MSG_CANNOT_DELETE_CHARACTER = 0xc,
+/*20031029 to latest
+방제목를 입력하세요.
+Please Enter Room Title.
+*/
+ MSG_ENTER_ROOM_TITLE = 0xd,
+/*20031029 to latest
+불량단어가 검출되었습니다.
+Foul Language Detected.
+*/
+ MSG_BAD_SENTANGE = 0xe,
+/*20031029 to latest
+암호를 입력하세요.
+Please enter Password.
+*/
+ MSG_ENTER_PASSWORD = 0xf,
+/*20031029 to latest
+암호를 영문 4자 이상 입력하세요.
+Please enter Password. Passwords must be at least 4 characters long.
+*/
+ MSG_Enter_Password_more_than_4_char = 0x10,
+/*20031029 to latest
+종료 하시겠습니까?
+Are you sure that you want to quit?
+*/
+ MSG_DO_YOU_REALLY_WANT_TO_QUIT = 0x11,
+/*20031029 to latest
+4자 이상 입력해주세요. 사용자 계정이 없으신분들은 왼쪽 하단의 [신청] 버튼을 눌러 계정을 만드시기 바랍니다.
+Passwords are at least 4 characters long. Please try again.
+*/
+ MSG_NAME_MUST_EXCEED_4_CHAR = 0x12,
+/*20031029 to 20070704
+캐릭터를 삭제하겠습니까?
+20070618 to latest
+한 번 삭제된 캐릭터 및 관련 정보는 다시 복구되지 않습니다. 캐릭터를 삭제하시겠습니까?
+Are you sure that you want to delete this character?
+*/
+ MSG_DELETE_CHARACTER = 0x13,
+/*20031029 to latest
+불량단어가 검출되었습니다.
+Foul Language Detected.
+*/
+ MSG_BAD_NAME = 0x14,
+/*20031029 to latest
+이름을 입력해 주세요.(한글 2자 영문 4자 이상)
+Character Name must be at least 4 characters long.
+*/
+ MSG_ENTER_NAME_MORE_THAN_4_CHAR = 0x15,
+/*20031029 to latest
+명령어 일람: /h
+Command List: /h | /help
+*/
+ MSG_LIST_COMMAND = 0x16,
+/*20031029 to latest
+이펙트 On
+Effects On
+*/
+ MSG_EFFECT_ON = 0x17,
+/*20031029 to latest
+이펙트 Off
+Effects Off
+*/
+ MSG_EFFECT_OFF = 0x18,
+/*20031029 to latest
+사운드 볼륨
+Sound Volume
+*/
+ MSG_VOLUME_OF_SOUND = 0x19,
+/*20031029 to latest
+배경음악 볼륨
+BGM Volume
+*/
+ MSG_VOLUME_OF_BGM = 0x1a,
+/*20031029 to latest
+효과음 On
+Sound Effects On
+*/
+ MSG_SOUND_ON = 0x1b,
+/*20031029 to latest
+효과음 Off
+Sound Effects Off
+*/
+ MSG_SOUND_OFF = 0x1c,
+/*20031029 to latest
+프레임스킵 On
+Frame Skip On
+*/
+ MSG_FRAME_SKIP_ON = 0x1d,
+/*20031029 to latest
+프레임스킵 Off
+Frame Skip Off
+*/
+ MSG_FRAME_SKIP_OFF = 0x1e,
+/*20031029 to latest
+배경음악 On
+BGM On
+*/
+ MSG_BGM_ON = 0x1f,
+/*20031029 to latest
+배경음악 Off
+BGM Off
+*/
+ MSG_BGM_OFF = 0x20,
+/*20031029 to latest
+/h or /help: 명령어 일람
+/h or /help: Shows this Command Help List
+*/
+ MSG_EXPLAIN_HELP = 0x21,
+/*20031029 to latest
+/w or /who or /접속자 or /누구: 현재 접속자수 보기
+/w or /who or /player or /who: wiew current the number of player
+*/
+ MSG_EXPLAIN_WHO = 0x22,
+/*20031029 to latest
+/음악 : 배경음악 On Off
+/music: Turns BGM On or Off
+*/
+ MSG_EXPLAIN_MUSIC = 0x23,
+/*20031029 to latest
+/효과음 : 효과음 On Off
+/sound: Turns Sound Effects On or Off
+*/
+ MSG_EXPLAIN_SOUND = 0x24,
+/*20031029 to latest
+/이펙트 : 이펙트 On Off
+/effect: Effects On or Off
+*/
+ MSG_EXPLAIN_EFFECT = 0x25,
+/*20031029 to latest
+/좌표 or /장소: 현재 위치 표시
+/where: Shows your present location
+*/
+ MSG_EXPLAIN_POS = 0x26,
+/*20031029 to latest
+/skip : 프래임스킵 On Off
+/skip: Turns Frame Skip On or Off
+*/
+ MSG_EXPLAIN_FRAMESKIP = 0x27,
+/*20031029 to latest
+/v (0~127): 효과음 볼륨조정
+/v (0~127): Controls the volume of the Sound Effects
+*/
+ MSG_EXPLAIN_SOUNDVOLUME = 0x28,
+/*20031029 to latest
+/bv (0~127): 배경음악 볼륨조정
+/bv (0~127): Controls the volume of the BGM
+*/
+ MSG_EXPLAIN_BGMVOLUME = 0x29,
+/*20031029 to latest
+/ex (캐릭터이름) or /차단 (캐릭터이름) : 해당캐릭터에 대해 귓말차단
+/ex (Character Name): Blocks whispering from the Character
+*/
+ MSG_EXPLAIN_SAYISOLATION = 0x2a,
+/*20031029 to latest
+/ex or /차단 : 귓말차단 캐릭터 리스트
+/ex: View a list of Characters you have Blocked
+*/
+ MSG_EXPLAIN_LIST_SAYISOLATION_CHAR = 0x2b,
+/*20031029 to latest
+/in (캐릭터이름) or /해제 (캐릭터이름) : 해당캐릭터에 대해 귓말허용
+/in (Character Name): Allows whispering from the Character
+*/
+ MSG_EXPLAIN_SAY_PERMIT = 0x2c,
+/*20031029 to latest
+/inall or /해제전부 : 모두에게 귓말허용
+/inall: Allows whispers from anyone
+*/
+ MSG_EXPLAIN_SAY_PERMITALL = 0x2d,
+/*20031029 to latest
+/exall or /차단전부 : 모두에게 귓말차단
+/exall: Blocks whispers from everyone
+*/
+ MSG_EXPLAIN_SAY_ISOLATEALL = 0x2e,
+/*20031029 to latest
+다른유저 캐릭터를 마우스 오른버튼을 누르고 있는 상태에서 왼버튼으로 클릭하면 그캐릭터이름이 귓말콤보박스에 저장됩니다.
+Right click on a character and select [Register as a Friend] to add a person to your Friend List.
+*/
+ MSG_EXPLAIN_TIP1 = 0x2f,
+/*20031029 to latest
+단축아이탬창(F12) 소비장비 아이템을 드래그한후 사용하세요. 사용키(F1F2F3F4F5F6F7F8F9)
+F12 Brings up a Hotkey Window which allows you to drag and drop Recovery Items, Equipment and Skills into it for faster access.
+*/
+ MSG_EXPLAIN_TIP2 = 0x30,
+/*20031029 to latest
+같은말을 3번이상 연속해서 전송할 수 없습니다.
+You can't type the same word/phrase more than 3 times.
+*/
+ MSG_NO_SAME_SENTANCE = 0x31,
+/*20031029 to latest
+불량단어 검출로 전송이 중단 되었습니다.
+Chat Filter: Yeah, uh, I don't think so buddy...
+*/
+ MSG_NO_SEND_BECAUSE_INSULT = 0x32,
+/*20031029 to latest
+같은아이템은 한번만 올릴수 있습니다.
+You cannot overlap items on a window.
+*/
+ MSG_CAN_DRAG_ITEM_OLNY_ONETIME = 0x33,
+/*20031029 to latest
+무게가 초과하여 아이템을 가질 수 없습니다.
+You cannot carry more items because you are overweight.
+*/
+ MSG_CANT_GET_ITEM_BECAUSE_WEIGHT = 0x34,
+/*20031029 to latest
+아이템을 가질 수 없습니다.
+You cannot get the item.
+*/
+ MSG_CANT_GET_ITEM = 0x35,
+/*20031029 to latest
+거래가 잘 이루어졌습니다.
+The deal has successfully completed.
+*/
+ MSG_DEAL_SECCESS = 0x36,
+/*20031029 to latest
+돈이 부족합니다.
+You do not have enough zeny.
+*/
+ MSG_INSUFFICIENT_MONEY = 0x37,
+/*20031029 to latest
+무게가 초과 되었습니다.
+You are over your Weight Limit.
+*/
+ MSG_OVER_WEIGHT = 0x38,
+/*20031029 to latest
+거래가 실패 했습니다.
+The deal has failed.
+*/
+ MSG_DEAL_FAIL = 0x39,
+/*20031029 to latest
+모두에게 귓말거부상태로됨
+You've blocked whispers from everyone.
+*/
+ MSG_REFUSE_HEAR_ALL = 0x3a,
+/*20031029 to latest
+모두에게 귓말거부요청 실패함
+You've failed to block all whispers.
+*/
+ MSG_REQ_REFUSE_HEAR_ALL_FAIL = 0x3b,
+/*20031029 to latest
+모두에게 귓말가능상태가됨
+You've allowed whispers from everyone.
+*/
+ MSG_HEAR_ALL = 0x3c,
+/*20031029 to latest
+모두에게 귓말가능요청 실패함
+You've failed to allow all whispers.
+*/
+ MSG_REQ_HEAR_ALL_FAIL = 0x3d,
+/*20031029 to latest
+귓말 거부 리스트가 없습니다
+You have no Block List.
+*/
+ MSG_NO_REFUSE_HEAR_LIST = 0x3e,
+/*20031029 to latest
+-귓말 거부 리스트-
+[ Character Block List ]
+*/
+ MSG_REFUSE_HEAR_LIST = 0x3f,
+/*20031029 to latest
+방이 잘 만들어 졌습니다.
+Room has been successfully created.
+*/
+ MSG_ROOM_IS_MADE = 0x40,
+/*20031029 to latest
+방갯수가 허용갯수를 초과 하였습니다.
+Room Limit Exceeded.
+*/
+ MSG_TOO_MANY_ROOM = 0x41,
+/*20031029 to latest
+같은 방제목이 있습니다.
+Same Room exists.
+*/
+ MSG_SAME_ROOM_TITLE = 0x42,
+/*20031029 to latest
+인원초과로 방에 들어갈 수 없습니다.
+The Room is full.
+*/
+ MSG_TOO_MANY_PEOPLE_IN_ROOM = 0x43,
+/*20031029 to latest
+강제로 퇴장된 방입니다.
+You have been kicked out of this room.
+*/
+ MSG_YOU_HAVE_BANNED_FROM_THE_ROOM = 0x44,
+/*20031029 to latest
+교환요청을 거절 했습니다.
+The deal has been rejected.
+*/
+ MSG_REJECT_DEAL = 0x45,
+/*20031029 to latest
+교환가능거리를 벗어났습니다.
+You are too far away from the person to trade.
+*/
+ MSG_TOO_FAR_TO_DEAL = 0x46,
+/*20031029 to latest
+해당 캐릭터가 없습니다.
+The Character is not currently online or does not exist.
+*/
+ MSG_CHARACTER_IS_NOT_EXIST = 0x47,
+/*20031029 to latest
+다른캐릭터와 교환중입니다.
+The person is in another deal.
+*/
+ MSG_CHARACTER_IS_DEALING = 0x48,
+/*20031029 to latest
+상태캐릭터 중량초과로 올려놓을수가 없습니다.
+*/
+ MSG_CHARACTER_IS_OVER_WEIGHT = 0x49,
+/*20031029 to latest
+거래가 취소 되었습니다.
+The deal has been canceled.
+*/
+ MSG_DEAL_IS_CANCELED = 0x4a,
+/*20031029 to latest
+아이템 교환이 잘 되었습니다.
+The deal has successfully completed.
+*/
+ MSG_DEAL_SUCCESS = 0x4b,
+/*20031029 to latest
+아이템 교환이 실패 하였습니다.
+The deal has failed.
+*/
+ MSG_DEAL_FAILED = 0x4c,
+/*20031029 to latest
+파티가 만들어졌습니다.
+Party has successfully been organized.
+*/
+ MSG_PARTY_MAKE_SUCCEED = 0x4d,
+/*20031029 to latest
+같은 파티이름이 있습니다.
+That Party Name already exists.
+*/
+ MSG_SAME_PARTY_NAME = 0x4e,
+/*20031029 to latest
+이미 파티에 속해있습니다.
+The Character is already in a party.
+*/
+ MSG_YOU_ARE_ALREADY_IN_PARTY = 0x4f,
+/*20031029 to latest
+다른파티에 가입되어 있습니다.
+The Character already joined another party.
+*/
+ MSG_CHARACTER_IS_ALREADY_IN_PARTY = 0x50,
+/*20031029 to latest
+파티가입을 거부했습니다.
+Request for party rejected.
+*/
+ MSG_CHARACTER_REJECT_JOIN = 0x51,
+/*20031029 to latest
+파티가입을 수락했습니다.
+Request for party accepted.
+*/
+ MSG_CHARACTER_ACCEPT_JOIN = 0x52,
+/*20031029 to latest
+파티정원을 초과했습니다.
+Party Capacity exceeded.
+*/
+ MSG_TOO_MANY_PEOPLE_IN_PARTY = 0x53,
+/*20031029 to latest
+파티에서 탈퇴하였습니다.
+You left the party.
+*/
+ MSG_YOU_LEAVE_FROM_PARTY = 0x54,
+/*20031029 to latest
+전체에게 보냄
+Send to All
+*/
+ MSG_SEND_TO_ALL = 0x55,
+/*20031029 to latest
+파티에게 보냄
+Send to Party
+*/
+ MSG_SEND_TO_PARTY = 0x56,
+/*20031029 to latest
+님과의 거래요청
+Request a deal with %s
+*/
+ MSG_REQ_DEAL_WITH = 0x57,
+/*20031029 to latest
+님 파티에 가입요청
+Ask %s to join your party
+*/
+ MSG_REQ_JOIN_PARTY = 0x58,
+/*20031029 to latest
+비공개 :
+Pri:
+*/
+ MSG_ROOM_PRIVATE = 0x59,
+/*20031029 to latest
+공개 :
+Pub:
+*/
+ MSG_ROOM_PUBLIC = 0x5a,
+/*20031029 to latest
+마지막 체크지점부터 시작하려면 '재시작'을 캐릭터 선택으로 돌아가려면 '종료'를 눌러주세요.
+Click ''Restart'' to go back to your save point or click ''Exit'' to select another character.
+*/
+ MSG_RESTART_MSG = 0x5b,
+/*20031029 to latest
+원하는 거래를 선택하세요.
+Please select a Deal Type.
+*/
+ MSG_SELECT_DEAL_TYPE = 0x5c,
+/*20031029 to latest
+님이 거래를 요청했습니다.
+ requests a deal.
+*/
+ MSG_SUGGEST_DEAL = 0x5d,
+/*20031029 to latest
+ 파티에서 초청 메시지가 왔습니다. 합류하겠습니까?
+ Party has sent you an invitation. Would you like to join?
+*/
+ MSG_SUGGEST_JOIN_PARTY = 0x5e,
+/*20031029 to latest
+명령이 틀렸습니다.
+Invalid Command
+*/
+ MSG_INVALID_COMMAND = 0x5f,
+/*20031029 to latest
+탈퇴하기
+Leave party
+*/
+ MSG_LEAVE_PARTY = 0x60,
+/*20031029 to latest
+제명시키기
+Expel
+*/
+ MSG_EXPEL = 0x61,
+/*20031029 to latest
+쪽지보내기
+Send Message
+*/
+ MSG_MSG = 0x62,
+/*20031029 to latest
+1:1 대화
+1:1 Chat
+*/
+ MSG_1ON1 = 0x63,
+/*20031029 to latest
+정보
+Information
+*/
+ MSG_CHARACTER_INFO = 0x64,
+/*20031029 to latest
+파티설정
+Party Setup
+*/
+ MSG_PARTY_SETTING = 0x65,
+/*20031029 to latest
+친구
+Friend
+*/
+ MSG_FRIEND = 0x66,
+/*20031029 to latest
+파티
+Party
+*/
+ MSG_PARTY = 0x67,
+/*20031029 to latest
+장착아이템
+Equipment
+*/
+ MSG_EQUIPED_ITEM = 0x68,
+/*20031029 to latest
+스테이터스
+Status
+*/
+ MSG_STATUS_ = 0x69,
+/*20031029 to latest
+소지아이템
+Inventory
+*/
+ MSG_ITEM = 0x6a,
+/*20031029 to latest
+/결성 [파티이름] : 파티결성 /탈퇴 : 파티탈퇴
+/organize ''Party Name'' To organize a party. Type /leave To leave a Party.
+*/
+ MSG_EXPLAIN_PARTY = 0x6b,
+/*20031029 to latest
+자신이 파티리더일때 캐릭터를 오른버튼으로 클릭하면 파티에 가입요청하기 메뉴가 뜹니다.
+If you are the party master, you can invite someone into your party by right-clicking on a Character.
+*/
+ MSG_EXPLAIN_TIP3 = 0x6c,
+/*20031029 to latest
+회복
+Consumables
+*/
+ MSG_RESTORE = 0x6d,
+/*20031029 to latest
+공격
+Attack
+*/
+ MSG_ATTACK = 0x6e,
+/*20031029 to latest
+보조
+Support
+*/
+ MSG_SUPPORT = 0x6f,
+/*20031029 to latest
+전체
+All
+*/
+ MSG_ALL = 0x70,
+/*20031029 to latest
+무기
+Weapons
+*/
+ MSG_WEAPON = 0x71,
+/*20031029 to latest
+방어
+Defense
+*/
+ MSG_DEFENCE = 0x72,
+/*20031029 to latest
+수
+Water
+*/
+ MSG_WATER = 0x73,
+/*20031029 to latest
+지
+Earth
+*/
+ MSG_EARTH = 0x74,
+/*20031029 to latest
+화
+Fire
+*/
+ MSG_FIRE = 0x75,
+/*20031029 to latest
+풍
+Wind
+*/
+ MSG_WIND = 0x76,
+/*20031029 to latest
+같은종류의 장비아이템은 한번에 한개만 살 수 있습니다.
+Please avoid buying 2 of the same items at one time.
+*/
+ MSG_EQUIPITEM_OLNY_ONE = 0x77,
+/*20031029 to latest
+창모드에서 실행 할때는 16비트 컬러로 맞춰주세요.
+Please change your desktop Color Depth to 16-bit when running Ragnarok in windowed mode.
+*/
+ MSG_ONLY_16BIT_WHEN_WINDOWMODE = 0x78,
+/*20031029 to latest
+잠시만 기다려 주세요.
+Please wait...
+*/
+ MSG_PLEASE_BE_PATIENT = 0x79,
+/*20031029 to latest
+잠시만 기다려 주세요.
+Please wait...
+*/
+ MSG_WAITING_RESPONSE_FROM_SERVER = 0x7a,
+/*20031029 to latest
+잠시만 기다려 주세요.
+Please wait...
+*/
+ MSG_MAKING_CHARACTER = 0x7b,
+/*20031029 to latest
+잠시만 기다려 주세요.
+Please wait...
+*/
+ MSG_DELETING_CHARACTER = 0x7c,
+/*20031029 to latest
+방 만들기
+Make a Room
+*/
+ MSG_MAKING_ROOM = 0x7d,
+/*20031029 to latest
+방셋팅 바꾸기
+Room Setup
+*/
+ MSG_CHANGE_ROOM_SETTING = 0x7e,
+/*20031029 to latest
+강퇴시키기
+Kick Character Out
+*/
+ MSG_BAN = 0x7f,
+/*20031029 to latest
+방장권한 주기
+Give Master Authority
+*/
+ MSG_GIVE_GIVE_ROOM_POWER = 0x80,
+/*20031029 to latest
+정보보기
+View Information
+*/
+ MSG_SEE_INFORMATION_OF_CHARACTER = 0x81,
+/*20031029 to latest
+대화방
+Chat Room
+*/
+ MSG_CHAT_ROOM = 0x82,
+/*20031029 to latest
+명
+Ppl
+*/
+ MSG_COUNT_UNIT_OF_PEOPLE = 0x83,
+/*20031029 to latest
+/앉기 or /sit : 앉기. 앉아있을때 서기
+/sit: Sit command. If you are sitting, you will stand instead.
+*/
+ MSG_EXPLAIN_SIT = 0x84,
+/*20031029 to latest
+/서기 or /stand : 서기. 서있을때 앉기
+/stand: Stand command. If you are standing, you will sit instead.
+*/
+ MSG_EXPLAIN_STAND = 0x85,
+/*20031029 to latest
+/채팅방 or /chat : 채팅방 만들기창 띄우기
+/chat: Creates a Chat Room
+*/
+ MSG_EXPLAIN_MAKE_CHAT = 0x86,
+/*20031029 to latest
+/q : 채팅방 나가기.
+/q: Leaves a Chat Room
+*/
+ MSG_EXPLAIN_EXIT_CHAT_ROOM = 0x87,
+/*20031029 to latest
+/거래 [캐릭터이름] or /교환 [캐릭터이름] or /deal [캐릭터이름] : 해당 캐릭터와 거래요청
+/deal ''Character Name'' Requests a deal with a character
+*/
+ MSG_EXPLAIN_DEAL = 0x88,
+/*20031029 to latest
+/결성 [파티이름] or /organize [파티이름] : 파티결성
+/organize ''Party Name'' Organizes a party
+*/
+ MSG_EXPLAIN_ORGANIZE_PARTY = 0x89,
+/*20031029 to latest
+/탈퇴 or /leave : 파티 탈퇴
+/leave: Leaves a party
+*/
+ MSG_EXPLAIN_LEAVE_PARTY = 0x8a,
+/*20031029 to latest
+/제명 [캐릭터이름] or /expel [캐릭터이름] : 해당캐릭터를 파티에서 제명시킴
+/expel ''Character Name'' kicks a Character out of your party
+*/
+ MSG_EXPLAIN_EXPEL_PARTY_MEMBER = 0x8b,
+/*20031029 to latest
+[Alt] + [End] : 플레이어 hp/sp 게이지 On Off
+[Alt] + [End]: Turns HP/SP Bar On or Off
+*/
+ MSG_EXPLAIN_TIP4 = 0x8c,
+/*20031029 to latest
+[Alt] + [Home] : 지면 커서 표시 On Off
+[Alt] + [Home]: Turns Ground Cursor On or Off
+*/
+ MSG_EXPLAIN_TIP5 = 0x8d,
+/*20031029 to latest
+[Insert] : 앉기 서기
+[Insert]: Makes you sit or stand. (Hotkey to toggle between /sit and /stand)
+*/
+ MSG_EXPLAIN_TIP6 = 0x8e,
+/*20031029 to latest
+MVP가 되셨습니다!! MVP 아이템은
+Congratulations! You are the MVP! Your reward item is
+*/
+ MSG_YOU_RECEIVE_MVP_ITEM = 0x8f,
+/*20031029 to latest
+ !!
+!!
+*/
+ MSG_YOU_RECEIVE_MVP_ITEM2 = 0x90,
+/*20031029 to latest
+MVP가 되셨습니다!! 특별경험치
+Congratulations! You are the MVP! Your reward EXP Points are
+*/
+ MSG_YOU_RECEIVE_MVP_EXP = 0x91,
+/*20031029 to latest
+ 획득!!
+!!
+*/
+ MSG_YOU_RECEIVE_MVP_EXP2 = 0x92,
+/*20031029 to latest
+MVP가 되셨습니다만 무게초과로 MVP 아이템을 가질 수 없었습니다!!
+You are the MVP, but you can't take the reward because you are over your weight limit.
+*/
+ MSG_YOU_THROW_MVPITEM = 0x93,
+/*20031029 to latest
+ 없는 캐릭터 이름 입니다.
+There is no such character name or the user is offline.
+*/
+ MSG_NOT_EXIST_CHARACTER = 0x94,
+/*20031029 to latest
+ 수신 거부 상태입니다.
+ doesn't want to receive your messages.
+*/
+ MSG_NO_RECEIVE_MODE = 0x95,
+/*20031029 to latest
+ 모든 캐릭터에 대해 수신 거부 상태 입니다.
+ is not in the mood to talk with anyone.
+*/
+ MSG_NO_RECEIVE_MODE_FOR_ALL = 0x96,
+/*20031029 to latest
+캐릭터 접속끊기 성공.
+Killed/Disconnected User.
+*/
+ MSG_SUCCESS_DISCONNECT_CHARACTER = 0x97,
+/*20031029 to latest
+캐릭터 접속끊기 실패.
+Kill has failed.
+*/
+ MSG_FAIL_DISCONNECT_CHARACTER = 0x98,
+/*20031029 to latest
+%s %d 개 획득
+You got %s (%d).
+*/
+ MSG_GET_ITEM = 0x99,
+/*20031029 to latest
+[Alt] + [=] : 알파벳 간격이 넓어졌을때 되돌리기.
+[Alt] + [=]: Fix the interval error between letters.
+*/
+ MSG_EXPLAIN_TIP7 = 0x9a,
+/*20031029 to latest
+[F10] : 채팅창 크기조정 [Alt] + [F10] : 채팅창 On Off
+[F10]: To toggle Chat Window size; [Alt] + [F10]: Toggle Chat Window On or Off
+*/
+ MSG_EXPLAIN_TIP8 = 0x9b,
+/*20031029 to latest
+귓속말 하는법 : 채팅창 왼쪽 입력란에 캐릭터이름을 입력하고 오른쪽 입력란에 말을 입력하면 됩니다. TAB키로 두입력란 사이로 커서를 이동할 수 있습니다.
+How to Whisper: Enter a Character's Name on the left side of chat window and type your message on the right side. The Tab key helps you move between these boxes.
+*/
+ MSG_EXPLAIN_TIP9 = 0x9c,
+/*20031029 to latest
+/! /? /기쁨 /하트 /땀 /아하 /짜증 /화 /돈 /... /가위 /바위 /보 : Alt + (1~9) Ctrl + (-=\) 에 대응되는 명령어 입니다.
+/!,/?,/ho,/lv,/lv2,/swt,/ic,/an,/ag,/$,/….,/thx,/wah,/sry,/heh,/swt2,/hmm,/no1,/??,/omg,/oh,/X,/hp,/go,/sob,/gg,/kis,/kis2,/pif,/ok: Emotion icons corresponding to Alt + (1~9) Ctrl + (-=\\)
+*/
+ MSG_EXPLAIN_TIP10 = 0x9d,
+/*20031029 to latest
+파티원에게 말하는법 : 말의 제일앞에 '%'를 붙이면 파티원에게 말이 갑니다. (예: "%안녕")
+How to Speak to Party: Add % in front of every message.(Example: \%Hello\)
+*/
+ MSG_EXPLAIN_TIP11 = 0x9e,
+/*20031029 to latest
+스킬레벨이 부족합니다. 교환 불능.
+You haven't learned enough Basic Skills to Trade.
+*/
+ MSG_NOT_ENOUGH_SKILLLEVE1 = 0x9f,
+/*20031029 to latest
+스킬레벨이 부족합니다. 이모션 불능.
+You haven't learned enough Basic Skills to use Emotion icons.
+*/
+ MSG_NOT_ENOUGH_SKILLLEVE2 = 0xa0,
+/*20031029 to latest
+스킬레벨이 부족합니다. 앉기 불능.
+You haven't learned enough Basic Skills to Sit.
+*/
+ MSG_NOT_ENOUGH_SKILLLEVE3 = 0xa1,
+/*20031029 to latest
+스킬레벨이 부족합니다. 채팅방만들기 불능.
+You haven't learned enough Basic Skills to create a chat room.
+*/
+ MSG_NOT_ENOUGH_SKILLLEVE4 = 0xa2,
+/*20031029 to latest
+스킬레벨이 부족합니다. 파티만들기 불능
+You haven't learned enough Basic Skills to Party.
+*/
+ MSG_NOT_ENOUGH_SKILLLEVE5 = 0xa3,
+/*20031029 to latest
+스킬레벨이 부족합니다. 외치기 불능
+You haven't learned enough skills to Shout.
+*/
+ MSG_NOT_ENOUGH_SKILLLEVE6 = 0xa4,
+/*20031029 to latest
+스킬레벨이 부족합니다. pk 불능
+You haven't learned enough skills for Pking.
+*/
+ MSG_NOT_ENOUGH_SKILLLEVE7 = 0xa5,
+/*20031029 to latest
+사고자하는 품목
+Buying Items
+*/
+ MSG_ITEMS_FOR_BUY = 0xa6,
+/*20031029 to latest
+아이템 상점
+Item Shop
+*/
+ MSG_ITEM_STORE = 0xa7,
+/*20031029 to latest
+팔고자하는 품목
+Selling Items
+*/
+ MSG_ITEMS_FOR_SELL = 0xa8,
+/*20031029 to latest
+보관아이템
+Storage
+*/
+ MSG_ITEMS_THAT_IS_STORED = 0xa9,
+/*20031029 to latest
+ 장비가 장착 되었습니다.
+ is put on.
+*/
+ MSG_ITEM_IS_EQUIPED = 0xaa,
+/*20031029 to latest
+ 장비가 해제 되었습니다.
+ is taken off.
+*/
+ MSG_ITEM_IS_REMOVED = 0xab,
+/*20031029 to latest
+귓말리스트에 이름넣기
+To add names on the Whispering List
+*/
+ MSG_ADD_TO_WHISPER_CHAR_LIST = 0xac,
+/*20031029 to latest
+스크린샷 찍는법 : [Print Screen]키나 [Scroll Lock]키를 누르면 됩니다.
+How to Take Screen Shots: Press [Print Screen] or [Scroll Lock]
+*/
+ MSG_EXPLAIN_TIP12 = 0xad,
+/*20031029 to latest
+오늘의 팁
+Tip of the Day
+*/
+ MSG_TIPOFTHEDAY = 0xae,
+/*20031029 to latest
+^3850a0알고 계셨습니까... ^000000 //^709fed
+^3850a0Did you know...?^709fed
+*/
+ MSG_DIDYOUKNOW = 0xaf,
+/*20031029 to latest
+시작할때 열기
+Display at startup
+*/
+ MSG_SHOWTIPSATSTARTUP = 0xb0,
+/*20031029 to latest
+/tip : 오늘의팁 열기
+/tip: Opens ''Tip of the Day''
+*/
+ MSG_EXPLAIN_OPENTIP = 0xb1,
+/*20031029 to latest
+현재 접속자 %d명
+There are %d Players Currently Connected.
+*/
+ MSG_NUMPEOPLE = 0xb2,
+/*20031029 to latest
+(%s)님이 입장 하였습니다.
+(%s) has entered.
+*/
+ MSG_USERGETINTHEROOM = 0xb3,
+/*20031029 to latest
+(%s)님이 퇴장 하였습니다.
+(%s) has left.
+*/
+ MSG_USERGETOUTOFTHEROOM = 0xb4,
+/*20031029 to latest
+(%s)님이 강제 퇴장 되었습니다.
+(%s) was kicked out.
+*/
+ MSG_USERGETOUTOFTHEROOMBYFORCE = 0xb5,
+/*20031029 to latest
+ %d 개
+%d ea.
+*/
+ MSG_EA = 0xb6,
+/*20031029 to latest
+%s : %d 개
+%s: %d ea.
+*/
+ MSG_EA2 = 0xb7,
+/*20031029 to latest
+%s %s : %d 개
+%s %s: %d
+*/
+ MSG_EA3 = 0xb8,
+/*20031029 to latest
+팔 수 있는 품목
+Available Items to sell
+*/
+ MSG_ITEMSYOUCANSELL = 0xb9,
+/*20031029 to latest
+상점에서 파는 품목
+Shop Items
+*/
+ MSG_SHOPITEMS = 0xba,
+/*20031029 to latest
+알 수 없는곳
+Unknown Area
+*/
+ MSG_NOWHERE = 0xbb,
+/*20031029 to latest
+서버와 언어가 맞지 않습니다.
+Your Client language doesn't match the Server language.
+*/
+ MSG_CLIENTTYPEMISMATCH = 0xbc,
+/*20031029 to latest
+아이템을 버릴려면 장비창을 닫으세요.
+Please move your equipment to the inventory. And close the equipment window.
+*/
+ MSG_CLOSEEQUIPWND = 0xbd,
+/*20031029 to latest
+영어만 됩니다.
+This server provides English Text Characters Only.
+*/
+ MSG_ENGLISHONLY = 0xbe,
+/*20031029 to latest
+지금은 지원되지 않습니다.
+This is not implemented yet.
+*/
+ MSG_NOTSUPPORTEDYET = 0xbf,
+/*20031029 to latest
+귓말 리스트가 없습니다.
+No Whisper List.
+*/
+ MSG_NOWHISPERLIST = 0xc0,
+/*20031029 to latest
+ 에게 귓말거부상태로됨
+: Whispering Blocked.
+*/
+ MSG_WHISPERIGNORESUCCESS = 0xc1,
+/*20031029 to latest
+ 에게 귓말거부 요청실패함
+: Whispering Block has failed.
+*/
+ MSG_WHISPERIGNOREFAILED1 = 0xc2,
+/*20031029 to latest
+ 에게 귓말거부 요청실패함 (인원초과)
+: Whispering Block has failed. Block List is full.
+*/
+ MSG_WHISPERIGNOREFAILED2 = 0xc3,
+/*20031029 to latest
+ 에게 귓말가능상태로됨
+: Whispering accepted.
+*/
+ MSG_WHISPERNOIGNORESUCCESS = 0xc4,
+/*20031029 to latest
+ 에게 귓말가능 요청실패함
+: Command has failed.
+*/
+ MSG_WHISPERNOIGNOREFAILED1 = 0xc5,
+/*20031029 to latest
+ 에게 귓말가능 요청실패함 (인원초과)
+: Command has failed. Block List is full.
+*/
+ MSG_WHISPERNOIGNOREFAILED2 = 0xc6,
+/*20031029 to latest
+이름의 처음과 마지막에는 공백문자를 사용할 수 없습니다.
+You cannot put a space at the beginning or end of a name.
+*/
+ MSG_NO_SPACE_IN_NAME = 0xc7,
+/*20031029 to latest
+비공개
+Private
+*/
+ MSG_ROOM_PRIVATE2 = 0xc8,
+/*20031029 to latest
+공개
+Public
+*/
+ MSG_ROOM_PUBLIC2 = 0xc9,
+/*20031029 to latest
+SP가 부족합니다.
+Not Enough SP
+*/
+ MSG_USESKILL_FAIL_SP_INSUFFICIENT = 0xca,
+/*20031029 to latest
+HP가 부족합니다.
+Not Enough HP
+*/
+ MSG_USESKILL_FAIL_HP_INSUFFICIENT = 0xcb,
+/*20031029 to latest
+스킬사용 실패.
+Skill has failed.
+*/
+ MSG_NOT_ENOUGH_SKILLLEVE8 = 0xcc,
+/*20031029 to latest
+훔치기 실패.
+Steal has failed.
+*/
+ MSG_FAIL_STEAL = 0xcd,
+/*20031029 to latest
+교환창
+Trade
+*/
+ MSG_EXCHANGE = 0xce,
+/*20031029 to latest
+독걸기 실패.
+Envenom skill has failed.
+*/
+ MSG_FAIL_POISON = 0xcf,
+/*20031029 to latest
+이 아이디로는 이 서버에 접속할 수 없습니다.
+You cannot use this ID on this server.
+*/
+ MSG_ID_MISMATCH = 0xd0,
+/*20031029 to latest
+스피드가 향상되었습니다.
+Your Speed has increased.
+*/
+ MSG_SPEEDUP = 0xd1,
+/*20031029 to latest
+스피드가 감소되었습니다.
+Your Speed has decreased.
+*/
+ MSG_SPEEDDOWN = 0xd2,
+/*20031029 to latest
+/기억 : 워프할 장소 기억(워프 스킬이 있는경우)
+/memo: To memorize a place as Warp Point (If you are an Acolyte Class character)
+*/
+ MSG_EXPLAIN_TIP13 = 0xd3,
+/*20031029 to latest
+임의의 위치
+Random Area
+*/
+ MSG_RANDOM_POS = 0xd4,
+/*20031029 to latest
+워프 할 위치를 선택하세요.
+Select an Area to Warp
+*/
+ MSG_SELECTWHERETOWARP = 0xd5,
+/*20031029 to latest
+스킬레벨이 부족합니다.
+Skill Level is not high enough
+*/
+ MSG_NOTENOUGHSKILLLEVEL = 0xd6,
+/*20031029 to latest
+저장된 워프할 장소가 없습니다.
+There are no memorized locations (Memo Points).
+*/
+ MSG_NO_STORED_PLACE_TO_WARP = 0xd7,
+/*20031029 to latest
+워프 관련 스킬이 없습니다.
+You haven't learned Warp.
+*/
+ MSG_NOWARPSKILL = 0xd8,
+/*20031029 to latest
+워프 장소로 저장됨.
+Saved location as a Memo Point for Warp Skill.
+*/
+ MSG_WARPPOINTSTORED = 0xd9,
+/*20031029 to latest
+취소
+Cancel
+*/
+ MSG_CANCEL = 0xda,
+/*20031029 to latest
+스킬 사용후 시간이 충분히 지나지 않았습니다.
+There is a Delay after using a Skill.
+*/
+ MSG_SKILLINTERVAL = 0xdb,
+/*20031029 to latest
+한번에 가질 수 있는 아이템 종류수를 초과하여 아이템을 가질 수 없습니다.
+You can't have this item because you will exceed the weight limit.
+*/
+ MSG_CANT_GET_ITEM_BECAUSE_COUNT = 0xdc,
+/*20031029 to latest
+아이템 최대 종류수를 초과 하였습니다.
+Out of the maximum capacity
+*/
+ MSG_INSUFFICIENT_OVER_COUNT = 0xdd,
+/*20031029 to latest
+수레아이템
+Cart Items
+*/
+ MSG_MERCHANTITEM = 0xde,
+/*20031029 to latest
+수레 벗기
+Take off Cart
+*/
+ MSG_CARTOFF = 0xdf,
+/*20031029 to latest
+노점 개설
+Opening a stall
+*/
+ MSG_MERCHANTSHOPMAKER = 0xe0,
+/*20031029 to 20041207
+노점이름를 입력하세요.
+20041213 to latest
+노점이름을 입력하세요.
+Please Name your Shop.
+*/
+ MSG_ENTER_SHOP_TITLE = 0xe1,
+/*20031029 to latest
+나의 노점
+My Shop
+*/
+ MSG_ITEM_MY_STORE = 0xe2,
+/*20031029 to latest
+상인 아이템 상점
+Merchant Shop
+*/
+ MSG_ITEM_MERCHANT_STORE = 0xe3,
+/*20031029 to latest
+상인에게 사고자하는 품목
+Buying Items
+*/
+ MSG_ITEMS_FOR_BUY_FROM_MERCHANT = 0xe4,
+/*20031029 to latest
+%s 사기 실패 %s
+*/
+ MSG_FAIL_BUY_ITEM_FROM_MERCHANT = 0xe5,
+/*20031029 to latest
+재고 부족.
+Out of Stock
+*/
+ MSG_INSUFFICIENT_STOCK = 0xe6,
+/*20031029 to latest
+%s %d 개 팔림.
+%s %d sold.
+*/
+ MSG_ITEM_IS_SOLD = 0xe7,
+/*20031029 to latest
+노점에서 팔 수 있는 아이템
+Available Items for Vending
+*/
+ MSG_MERCHANTMIRRORITEM = 0xe8,
+/*20031029 to latest
+돈이 부족해서 스킬을 쓸 수 없습니다.
+*/
+ MSG_SKILL_FAIL_MONEY = 0xe9,
+/*20031029 to latest
+사용할 대상을 선택하세요
+Select a Target.
+*/
+ MSG_SELECTTARGET = 0xea,
+/*20031029 to latest
+/pk on : pk On /pk off : pk Off
+/pk on: Turns PK On. /pk off: Turns PK Off.
+*/
+ MSG_EXPLAIN_TIP14 = 0xeb,
+/*20031029 to latest
+노점
+Shop
+*/
+ MSG_STREETSHOP = 0xec,
+/*20031029 to latest
+수레 아이템 [Alt+W]
+Cart Items [Alt+W]
+*/
+ MSG_OPENCARTWINDOW = 0xed,
+/*20031029 to latest
+기본정보
+Basic Information
+*/
+ MSG_BASICINFOWND = 0xee,
+/*20031029 to latest
+이무기로는 이스킬을 사용할수 없습니다.
+The skill cannot be used with this weapon.
+*/
+ MSG_USESKILL_FAIL_NOT_SUITABLE_WEAPON = 0xef,
+/*20031029 to latest
+%s 사기 실패 재고 부족 현재 재고 %d 개.
+Buying %s has been failed. Out of Stock. Current Stock %d.
+*/
+ MSG_FAIL_BUY_ITEM_FROM_MERCHANT_NO_STOCK = 0xf0,
+/*20031029 to latest
+서버와 동기화가 틀려 연결이 끊어졌습니다.
+You've been disconnected due to a time gap between you and the server.
+*/
+ MSG_SPEEDHACK = 0xf1,
+/*20031029 to latest
+화살을 장착하세요
+Please equip the proper ammunition first.
+*/
+ MSG_ERR_ATTACK_ARROW = 0xf2,
+/*20031029 to latest
+중량과다로 공격이나 스킬을 사용할 수 없습니다.
+You can't attack or use skills because you've exceeded the Weight Limit.
+*/
+ MSG_ERR_ATTACK_WEIGHT = 0xf3,
+/*20031029 to latest
+중량과다로 스킬을 사용할 수 없습니다.
+You can't use skills because you've exceeded the Weight Limit.
+*/
+ MSG_ERR_SKILL_WEIGHT = 0xf4,
+/*20031029 to latest
+화살이 장착되었습니다.
+Ammunition has been equipped.
+*/
+ MSG_MSG_ARROW_EQUIPMENT_SUCCESS = 0xf5,
+/*20031029 to latest
+레드젬스톤이 필요합니다.
+Red Gemstone required.
+*/
+ MSG_NEED_REDJAMSTONE = 0xf6,
+/*20031029 to latest
+블루젬스톤이 필요합니다.
+Blue Gemstone required.
+*/
+ MSG_NEED_BLUEJAMSTONE = 0xf7,
+/*20031029 to latest
+힘 파라메터
+Strength
+*/
+ MSG_DESC_STR = 0xf8,
+/*20031029 to latest
+민첩성 파라메터
+Agility
+*/
+ MSG_DESC_AGI = 0xf9,
+/*20031029 to latest
+체력 파라메터
+Vitality
+*/
+ MSG_DESC_VIT = 0xfa,
+/*20031029 to latest
+지력 파라메터
+Intelligence
+*/
+ MSG_DESC_INT = 0xfb,
+/*20031029 to latest
+손재주 파라메터
+Dexterity
+*/
+ MSG_DESC_DEX = 0xfc,
+/*20031029 to latest
+운 파라메터
+Luck
+*/
+ MSG_DESC_LUK = 0xfd,
+/*20031029 to latest
+공격력
+Hit Point
+*/
+ MSG_DESC_ATK = 0xfe,
+/*20031029 to latest
+방어력
+Defence Rate
+*/
+ MSG_DESC_DEF = 0xff,
+/*20031029 to latest
+명중률
+Accuracy
+*/
+ MSG_DESC_HIT = 0x100,
+/*20031029 to latest
+필살공격률
+Critical Attack
+*/
+ MSG_DESC_CRI = 0x101,
+/*20031029 to latest
+소속길드
+Affiliated Guild
+*/
+ MSG_DESC_GUILD = 0x102,
+/*20031029 to latest
+각 파라메터 레벨업에 사용되는 포인트
+Points to level up each Parameter
+*/
+ MSG_DESC_POINT = 0x103,
+/*20031029 to latest
+마법공격력
+Magic Attack
+*/
+ MSG_DESC_MATK = 0x104,
+/*20031029 to latest
+마법방어력
+Magic Defense
+*/
+ MSG_DESC_MDEF = 0x105,
+/*20031029 to latest
+회피율
+Dodge
+*/
+ MSG_DESC_FLEE = 0x106,
+/*20031029 to latest
+공격스피드
+Attack Speed
+*/
+ MSG_DESC_ASPD = 0x107,
+/*20031029 to latest
+지역당 수용인원 초과로 접속할 수 없습니다.
+Server is jammed due to over population. Please try again shortly.
+*/
+ MSG_PC_OVERFLOW = 0x108,
+/*20031029 to latest
+옵션
+Option
+*/
+ MSG_OPTIONWND = 0x109,
+/*20031029 to latest
+E-MAIL 인증이 되지않았거나 블럭된 계정입니다.
+Account ID blocked by the Game Master Team.
+*/
+ MSG_ID_EMAIL_CONFIRM_NEEDED = 0x10a,
+/*20031029 to latest
+비밀번호가 틀립니다.
+Incorrect User ID or Password. Please try again.
+*/
+ MSG_INCORRECT_LOGIN_PASSWORD = 0x10b,
+/*20031029 to latest
+머리모양 선택
+Choose Hairstyle
+*/
+ MSG_SELECT_HAIR_STYLE = 0x10c,
+/*20031029 to latest
+공격력
+Hit Point
+*/
+ MSG_ATK = 0x10d,
+/*20031029 to latest
+방어력
+Defence Rate
+*/
+ MSG_DEF = 0x10e,
+/*20031029 to latest
+공격스냅 On
+Attack Snap On
+*/
+ MSG_ATTACK_SNAP_ON = 0x10f,
+/*20031029 to latest
+공격스냅 Off
+Attack Snap Off
+*/
+ MSG_ATTACK_SNAP_OFF = 0x110,
+/*20031029 to latest
+스킬스냅 On
+Skill Snap On
+*/
+ MSG_SKILL_SNAP_ON = 0x111,
+/*20031029 to latest
+스킬스냅 Off
+Skill Snap Off
+*/
+ MSG_SKILL_SNAP_OFF = 0x112,
+/*20031029 to latest
+/스냅 or /snap: 몬스터 공격시 스냅 On Off /스킬스냅 or /skillsnap: 스킬로 몬스터 공격시 스냅 On Off /아이템스냅 or /itemsnap: 아이템 주울때 스냅 On Off
+/snap: Turns snap On | Off for fights, /skillsnap: Turns snap On | Off for skills. /itemsnap: Turns snap On | Off for items on the grounds.
+*/
+ MSG_EXPLAIN_SNAP = 0x113,
+/*20031029 to latest
+아이템스냅 On
+Item Snap On
+*/
+ MSG_ITEM_SNAP_ON = 0x114,
+/*20031029 to latest
+아이템스냅 Off
+Item Snap Off
+*/
+ MSG_ITEM_SNAP_OFF = 0x115,
+/*20031029 to latest
+스냅
+Snap
+*/
+ MSG_SNAP = 0x116,
+/*20031029 to latest
+한가지 아이템을 3만개 이상 가질수 없습니다.
+You cannot carry more than 30,000 of one kind of item.
+*/
+ MSG_CANT_GET_ITEM_OVERCOUNT_ONEITEM = 0x117,
+/*20031029 to latest
+레벨 30이상의 캐릭터는 삭제할 수 없습니다. 삭제를 원하시면 관계자에게 문의 하세요.
+You cannot delete a Character with a level greater than 30. If you want to delete the character please contact a Game Master.
+*/
+ MSG_CANT_DELETE_CHARACTER_OVER_30_LEVEL = 0x118,
+/*20031029 to latest
+이이템 교환중에는 아이템을 사고 팔 수 없습니다.
+*/
+ MSG_FAIL_BUY_ITEM_ITEM_EXCHANGING = 0x119,
+/*20031029 to latest
+상점명
+Shop Name
+*/
+ MSG_STALL_NAME = 0x11a,
+/*20031029 to latest
+스킬목록
+Skill Tree
+*/
+ MSG_SKILLLIST = 0x11b,
+/*20031029 to latest
+스킬포인트 : %d
+Skill Point: %d
+*/
+ MSG_SKILLPOINT = 0x11c,
+/*20031029 to latest
+스킬사용 실패
+Skill has failed.
+*/
+ MSG_USESKILL_FAIL = 0x11d,
+/*20031029 to latest
+패시브
+Passive
+*/
+ MSG_PASSIVE = 0x11e,
+/*20031029 to latest
+각자 취득
+Individual
+*/
+ MSG_EXPDIV1 = 0x11f,
+/*20031029 to latest
+균등하게 분배
+Shared
+*/
+ MSG_EXPDIV2 = 0x120,
+/*20031029 to latest
+각자 취득
+Individual
+*/
+ MSG_ITEMCOLLECT1 = 0x121,
+/*20031029 to latest
+파티 전체 공유
+Party Share
+*/
+ MSG_ITEMCOLLECT2 = 0x122,
+/*20031029 to latest
+파티 설정
+Party Setup
+*/
+ MSG_PARTYSETTING = 0x123,
+/*20031029 to latest
+경험치 분배방식
+How to share EXP
+*/
+ MSG_HOWEXPDIV = 0x124,
+/*20031029 to latest
+아이템 수집방식
+How to share Items
+*/
+ MSG_HOWITEMCOLLECT = 0x125,
+/*20031029 to latest
+파티 리더만 설정할 수 있습니다.
+Only the Party Leader can change this setting.
+*/
+ MSG_ONLY_PARTYMASTER = 0x126,
+/*20031029 to latest
+아이템 갯수 안물어보기
+Toggle Item Amount.
+*/
+ MSG_NOQUESTION_ITEMCOUNT = 0x127,
+/*20031029 to latest
+^ff0000%d^000000 초 후에 캐릭터가 지워집니다. 취소 하려면 취소 버튼을 누르세요.
+Character will be deleted after ^ff0000%d^000000 seconds. Press Cancel to quit.
+*/
+ MSG_CHARARATER_DELETE_COUNT = 0x128,
+/*20031029 to latest
+교환할 수 있는 최대 아이템 갯수는 10가지 입니다.
+You cannot trade more than 10 types of items per trade.
+*/
+ MSG_MAXEXCHANGE_IS_10_KIND = 0x129,
+/*20031029 to latest
+이서버를 이용할 수 없는 나이입니다.
+You are underaged.
+*/
+ MSG_LIMIT_AGE = 0x12a,
+/*20031029 to latest
+이메일 주소를 입력하세요.
+Please enter the deletion password.
+*/
+ MSG_ENTER_EMAIL = 0x12b,
+/*20031029 to latest
+이메일 주소 입력하기
+E-mail Address (Case Sensitive).
+*/
+ MSG_ENTER_EMAIL_TOOLTIP = 0x12c,
+/*20031029 to latest
+이메일 주소가 틀려서 캐릭터가 삭제 되지 않았습니다.
+Character Deletion has failed because you have entered an incorrect e-mail address.
+*/
+ MSG_CANNOT_DELETE_CHARACTER_EMAIL = 0x12d,
+/*20031029 to 20070703
+주민등록번호 뒷자리를 입력하세요.
+20070618 to 20070622
+비밀번호를 한 번 더 입력해 주시기 바랍니다.
+20070704 to latest
+계정 비밀번호를 입력하세요.
+Enter Second Serial Cord of your Social Security number.
+*/
+ MSG_ENTER_PEOPLE_REG_NUMBER = 0x12e,
+/*20031029 to 20070703
+주민등록번호 뒷자리가 틀려서 캐릭터가 삭제 되지 않았습니다.
+20070618 to 20070622
+비밀번호가 맞지 않아 캐릭터가 삭제 되지 않았습니다.
+20070704 to latest
+비밀번호가 틀려서 캐릭터가 삭제 되지 않았습니다.
+Character Deletion has failed because you have entered an incorrect SSN.
+*/
+ MSG_CANNOT_DELETE_CHARACTER_PEOPLE_REG_NUMBER = 0x12f,
+/*20031029 to latest
+한번에 15가지 이상의 아이템을 팔 수 없습니다.
+You can't sell more than 15 types of Items at one time.
+*/
+ MSG_CANT_SELL_OVER_15 = 0x130,
+/*20031029 to latest
+나이제한 때문에 이계정으로 이서버에 접속할 수 없습니다.
+The age limit from commandment tables cannot connect to this server.
+*/
+ MSG_UNDER_AGE = 0x131,
+/*20031029 to latest
+무게가 50 퍼센트 이상일때는 HP SP가 자연적으로 회복이 되지 않습니다.
+HP/SP will not be restored when your carried weight is over 50% of the Weight Limit.
+*/
+ MSG_NO_RECOVER_OVERWEIGHT = 0x132,
+/*20031029 to latest
+무게가 90 퍼센트 이상일때는 공격과 스킬을 사용할 수 없습니다.
+You can't use Skills or Attack while your carried weight is over 90% of your Weight Limit.
+*/
+ MSG_NO_ATTACK_OVERWEIGHT = 0x133,
+/*20031029 to latest
+HP SP가 자연적으로 회복이 가능한 상태가 되었습니다.
+Your HP/SP are now being restored naturally.
+*/
+ MSG_NO_RECOVER_OVERWEIGHT_RELEASED = 0x134,
+/*20031029 to latest
+공격과 스킬이 가능한 상태가 되었습니다.
+Attack and Skills are now available.
+*/
+ MSG_NO_ATTACK_OVERWEIGHT_RELEASED = 0x135,
+/*20031029 to latest
+서버 점검중입니다.
+Your Game's Exe File is not the latest version.
+*/
+ MSG_INVALID_VERSION = 0x136,
+/*20031029 to latest
+아이템이 모두 팔렸습니다.
+Items are sold out.
+*/
+ MSG_ITEM_IS_SOLD_OUT = 0x137,
+/*20031029 to latest
+채팅내용 파일로 저장하기
+Save Chat as Text File
+*/
+ MSG_WRITE_CHAT_TO_FILE = 0x138,
+/*20031029 to latest
+/갈무리 or /savechat : 채팅 내용 파일로 저장하기.
+/savechat: Save a Chat Log
+*/
+ MSG_EXPLAIN_SAVE_CHAT = 0x139,
+/*20031029 to latest
+계정 만들기
+Register
+*/
+ MSG_MAKEACCOUNT = 0x13a,
+/*20031029 to latest
+수신거부하기
+Reject Whispering
+*/
+ MSG_REQ_EX_LIST = 0x13b,
+/*20031029 to latest
+수신거부해제하기
+Allow Whispering
+*/
+ MSG_REQ_IN = 0x13c,
+/*20031029 to latest
+미스표시 On
+Shows ''Miss''
+*/
+ MSG_MISS_EFFECT_ON = 0x13d,
+/*20031029 to latest
+미스표시 Off
+Shows ''Miss''
+*/
+ MSG_MISS_EFFECT_OFF = 0x13e,
+/*20031029 to latest
+카메라고정 On
+Camera Zooming On
+*/
+ MSG_FIXED_CAMERA_ON = 0x13f,
+/*20031029 to latest
+카메라고정 Off
+Camera Zooming Off
+*/
+ MSG_FIXED_CAMERA_OFF = 0x140,
+/*20031029 to latest
+/camera : 플레이어에게 카메라고정 On Off /miss : 미스이펙트 On Off
+/camera: Camera Zooming On or Off. /miss: Toggle ''Miss'' display
+*/
+ MSG_EXPLAIN_CAMERA_MISS = 0x141,
+/*20031029 to latest
+스킬정보보기
+View Skill Info
+*/
+ MSG_SEE_INFORMATION_OF_SKILL = 0x142,
+/*20031029 to latest
+스킬이름바꾸기
+Change Skill
+*/
+ MSG_CHANGE_SKILL_NAME = 0x143,
+/*20031029 to latest
+스프라이트 해상도
+Sprite Resolution
+*/
+ MSG_SPRITE_RESOLUTION = 0x144,
+/*20031029 to latest
+텍스쳐 해상도
+Texture Resolution
+*/
+ MSG_TEXTURE_RESOLUTION = 0x145,
+/*20031029 to latest
+디테일 조정
+Arrange Detail
+*/
+ MSG_DETAILLEVELWND = 0x146,
+/*20031029 to latest
+%s Zeny 획득
+You got %s Zeny
+*/
+ MSG_GET_ZENY = 0x147,
+/*20031029 to latest
+길드명
+Guild Name
+*/
+ MSG_GUILDNAME = 0x148,
+/*20031029 to latest
+길드레벨
+Guild lvl
+*/
+ MSG_GUILDLEVEL = 0x149,
+/*20031029 to latest
+마스터이름
+ClanMaster Name
+*/
+ MSG_GUILD_MASTER_NAME = 0x14a,
+/*20031029 to latest
+조합원수
+Number of Members
+*/
+ MSG_GUILD_NUM_MEMBER = 0x14b,
+/*20031029 to latest
+조합원 평균레벨
+Avg.lvl of Guildsmen
+*/
+ MSG_GUILD_AVG_MEMBER_LEVEL = 0x14c,
+/*20031029 to latest
+관리영지
+Castles Owned
+*/
+ MSG_GUILD_MANAGE_LAND = 0x14d,
+/*20031029 to latest
+성향
+Tendency
+*/
+ MSG_GUILD_FAIR = 0x14e,
+/*20031029 to latest
+경험치
+EXP
+*/
+ MSG_GUILD_EXP = 0x14f,
+/*20031029 to latest
+길드엠블렘
+Emblem
+*/
+ MSG_GUILD_EMBLEM = 0x150,
+/*20031029 to latest
+길드상납포인트
+Tax Point
+*/
+ MSG_GUILD_POINT = 0x151,
+/*20031029 to latest
+동맹길드
+Alliances
+*/
+ MSG_ALLY_GUILD = 0x152,
+/*20031029 to latest
+적대길드
+Antagonists
+*/
+ MSG_HOSTILITY_GUILD = 0x153,
+/*20031029 to latest
+길드정보
+Guild Info
+*/
+ MSG_GUILDINFOMANAGE = 0x154,
+/*20031029 to latest
+조합원정보
+Guildsmen Info
+*/
+ MSG_GUILDMEMBERMANAGE = 0x155,
+/*20031029 to latest
+직위설정
+Position
+*/
+ MSG_GUILDPOSITIONMANAGE = 0x156,
+/*20031029 to latest
+길드스킬
+Guild Skill
+*/
+ MSG_GUILDSKILL = 0x157,
+/*20031029 to latest
+추방자 리스트
+Expel History
+*/
+ MSG_GUILDBANISHEDMEMBER = 0x158,
+/*20031029 to latest
+공지사항
+Guild Notice
+*/
+ MSG_GUILDNOTICE = 0x159,
+/*20031029 to latest
+전체길드 리스트
+Entire Guild List
+*/
+ MSG_GUILDTOTALINFO = 0x15a,
+/*20031029 to latest
+귓말 리스트
+Whispering List
+*/
+ MSG_WHISPERLISTWND = 0x15b,
+/*20031029 to latest
+귓말창 열기
+Open Whispering Window
+*/
+ MSG_OPENWHISPERLISTWND = 0x15c,
+/*20031029 to latest
+귓말 리스트 창 여는법 : [Alt] + [H] 를 누르면 귓말 리스트 창이 열립니다.
+How to Open Whispering List: Press [Alt] + [H]
+*/
+ MSG_EXPLAIN_WHISPER_LIST_WND = 0x15d,
+/*20031029 to latest
+자동으로 귓말창 열기
+Open Whispering List Automatically
+*/
+ MSG_AUTOOPENWHISPERLISTWND = 0x15e,
+/*20031029 to latest
+지우기
+Delete
+*/
+ MSG_DELETE = 0x15f,
+/*20031029 to latest
+다음부터 열리지 않음
+Close since next
+*/
+ MSG_DONTOPEN = 0x160,
+/*20031029 to latest
+마지막으로 접속한 시간
+Last Log-in Time
+*/
+ MSG_LAST_LOGIN_TIME = 0x161,
+/*20031029 to latest
+마지막으로 접속한 IP
+Last Log-in IP
+*/
+ MSG_LAST_LOGIN_IP = 0x162,
+/*20031029 to latest
+친구 설정
+Friend Setup
+*/
+ MSG_FRIEND_SETTING = 0x163,
+/*20031029 to latest
+정말 지우시겠습니까?
+Are you sure that you want to delete?
+*/
+ MSG_DO_YOU_REALLY_WANT_DELETE = 0x164,
+/*20031029 to latest
+정말 탈퇴하시겠습니까?
+Are you sure that you want to leave?
+*/
+ MSG_DO_YOU_REALLY_WANT_LEAVE = 0x165,
+/*20031029 to latest
+친구로 등록하기
+Register as a Friend
+*/
+ MSG_ADD_TO_FRIEND_CHAR_LIST = 0x166,
+/*20031029 to latest
+친구일때 자동으로 1:1창 열기
+Open 1:1 Chat between Friends
+*/
+ MSG_AUTOOPENWHISPERLISTWND_FRIEND = 0x167,
+/*20031029 to latest
+1:1창 열기
+Open 1:1 Chat
+*/
+ MSG_OPEN_1ON1_WINDOW = 0x168,
+/*20031029 to latest
+친구가 아닐때 자동으로 1:1창 열기
+Open 1:1 Chat between Strangers
+*/
+ MSG_AUTOOPEN_1ON1_WINDOW = 0x169,
+/*20031029 to latest
+1:1창 열릴때 소리로 알림
+Alarm when you recieve a 1:1 Chat
+*/
+ MSG_WHISPER_OPEN_SOUND = 0x16a,
+/*20031029 to latest
+정말 제명시키시겠습니까?
+Are you sure that you want to expel?
+*/
+ MSG_DO_YOU_REALLY_WANT_EXPEL = 0x16b,
+/*20031029 to latest
+%s 님이 길드를 탈퇴했습니다.
+%s has withdrawn from the guild.
+*/
+ MSG_USER_LEFT_GUILD = 0x16c,
+/*20031029 to latest
+탈퇴사유 : %s
+Secession Reason: %s
+*/
+ MSG_REASON_LEAVE_GUILD = 0x16d,
+/*20031029 to latest
+길드 해체 실패
+*/
+ MSG_DISORGANIZE_GUILD_FAILURE = 0x16e,
+/*20031029 to latest
+길드해체사유 : %s
+Disband Reason: %s
+*/
+ MSG_DISORGANIZATION_REASON = 0x16f,
+/*20031029 to latest
+해당 계정은 삭제된 아이디 입니다.
+This ID has been removed.
+*/
+ MSG_DELETED_ACCOUNT = 0x170,
+/*20031029 to latest
+판매가 :
+Price:
+*/
+ MSG_SELLPRICE = 0x171,
+/*20031029 to latest
+%s 님이 길드에서 추방되었습니다.
+%s has been expelled from our guild.
+*/
+ MSG_BAN_GUILD = 0x172,
+/*20031029 to latest
+추방사유 : %s
+Expulsion Reason: %s
+*/
+ MSG_REASON_BAN_GUILD = 0x173,
+/*20031029 to latest
+아이템을 착용할 수 없습니다.
+You can't put this item on.
+*/
+ MSG_CAN_NOT_EQUIP_ITEM = 0x174,
+/*20031029 to latest
+파티설정을 변경할 수 없습니다.
+You can't modify Party Setup.
+*/
+ MSG_PARTYSETTING_CHANGE_IMPOSSIBLE = 0x175,
+/*20031029 to latest
+길드가 만들어 졌습니다.
+Guild has been Created.
+*/
+ MSG_GUILD_MAKE_SUCCESS = 0x176,
+/*20031029 to latest
+이미 길드에 속해있습니다.
+You are already in a Guild.
+*/
+ MSG_GUILD_MAKE_ALREADY_MEMBER = 0x177,
+/*20031029 to latest
+같은이름의 길드가 존재합니다.
+That Guild Name already exists.
+*/
+ MSG_GUILD_MAKE_GUILD_EXIST = 0x178,
+/*20031029 to latest
+ 길드에서 초청 메시지가 왔습니다. 가입하겠습니까?
+ Guild has sent you an invitation. Would you like to join this Guild?
+*/
+ MSG_SUGGEST_JOIN_GUILD = 0x179,
+/*20031029 to latest
+다른길드에 가입되어 있습니다.
+He/She is already in a Guild.
+*/
+ MSG_CHARACTER_IS_ALREADY_IN_GUILD = 0x17a,
+/*20031029 to latest
+길드가입을 거절 했습니다.
+Offer Rejected
+*/
+ MSG_CHARACTER_REJECT_JOIN_GUILD = 0x17b,
+/*20031029 to latest
+길드가입을 수락했습니다.
+Offer Accepted
+*/
+ MSG_CHARACTER_ACCEPT_JOIN_GUILD = 0x17c,
+/*20031029 to latest
+길드정원을 초과했습니다.
+Your Guild is Full.
+*/
+ MSG_TOO_MANY_PEOPLE_IN_GUILD = 0x17d,
+/*20031029 to latest
+(%s)님 길드에 가입요청
+Send (%s) a Guild invitation
+*/
+ MSG_REQ_JOIN_GUILD = 0x17e,
+/*20031029 to latest
+스킬 레벨이 모자라서 매너포인트를 줄 수 없습니다.
+You haven't learned enough skills for aligning.
+*/
+ MSG_NOT_ENOUGH_FOR_MANNER_POINT = 0x17f,
+/*20031029 to latest
+매너 포인트 주기 성공
+Aligning completed.
+*/
+ MSG_GIVING_MANNER_POINT_SUCCESS = 0x180,
+/*20031029 to latest
+오늘 이미 사용했습니다.
+You already spent your point for today.
+*/
+ MSG_YOU_USE_TODAY_ALREADY = 0x181,
+/*20031029 to latest
+이캐릭터에게 지급한지 한달이 지나지 않았습니다.
+Hasn't been a month yet since you aligned this person.
+*/
+ MSG_ONE_MONTH_NOT_PASSED = 0x182,
+/*20031029 to latest
+%s 님으로부터 플러스 매너 포인트를 받았습니다.
+Remember, Spamming isn't nice.
+*/
+ MSG_RECEIVE_PLUS_MANNER_POINT = 0x183,
+/*20031029 to latest
+%s 님으로부터 마이너스 매너 포인트를 받았습니다.
+Please refrain from ill-mannered conduct, thank you.
+*/
+ MSG_RECEIVE_MINUS_MANNER_POINT = 0x184,
+/*20031029 to latest
+채팅 금지 시간 줄이기(풀기)
+Align with a Good Point
+*/
+ MSG_GIVE_PLUS_MANNER_POINT = 0x185,
+/*20031029 to latest
+채팅 금지 시간 늘이기(걸기)
+Align with a Bad Point
+*/
+ MSG_GIVE_MINUS_MANNER_POINT = 0x186,
+/*20031029 to latest
+(%s)님과의 거래요청
+Request a deal with (%s)
+*/
+ MSG_REQ_DEAL_WITH2 = 0x187,
+/*20031029 to latest
+(%s)님 파티에 가입요청
+Ask (%s) to join your party
+*/
+ MSG_REQ_JOIN_PARTY2 = 0x188,
+/*20031029 to latest
+ 길드에서 동맹요청 메시지가 왔습니다. 동맹하겠습니까?
+ Guild is asking you to agree to an Alliance with them. Do you accept?
+*/
+ MSG_SUGGEST_ALLY_GUILD = 0x189,
+/*20031029 to latest
+이미 동맹되어 있습니다.
+This Guild is already your Ally.
+*/
+ MSG_REQALLYGUILD_ALREADY_ALLIED = 0x18a,
+/*20031029 to latest
+동맹을 거절 했습니다.
+You reject the offer
+*/
+ MSG_REQALLYGUILD_REJECT = 0x18b,
+/*20031029 to latest
+동맹을 수락 했습니다.
+You accept the offer
+*/
+ MSG_REQALLYGUILD_ACCEPT = 0x18c,
+/*20031029 to latest
+상대길드의 동맹길드의 수가 초과 되었습니다.
+They have too many Alliances.
+*/
+ MSG_REQALLYGUILD_OVERSIZE = 0x18d,
+/*20031029 to latest
+길드의 동맹길드의 수가 초과 되었습니다.
+You have too many Alliances.
+*/
+ MSG_REQALLYMYGUILD_OVERSIZE = 0x18e,
+/*20031029 to latest
+길드 동맹 요청
+Set this guild as an Alliance
+*/
+ MSG_REQ_ALLY_GUILD = 0x18f,
+/*20031029 to latest
+길드가 성공적으로 해체 되었습니다.
+Guild was successfully disbanded.
+*/
+ MSG_DISORGANIZE_GUILD_SUCCESS = 0x190,
+/*20031029 to latest
+주민등록번호가 틀려서 길드가 해체되지 않았습니다.
+You have failed to disband the guild due to your incorrect SSN.
+*/
+ MSG_DISORGANIZE_GUILD_INVALIDKEY = 0x191,
+/*20031029 to latest
+길드맴버가 존재해서 길드가 해체되지 않았습니다.
+You have failed to disband the guild because there are guildsmen still present.
+*/
+ MSG_DISORGANIZE_GUILD_MEMBEREXIST = 0x192,
+/*20031029 to latest
+길드 적대 요청
+Set this guild as an Antagonist
+*/
+ MSG_REQ_HOSTILE_GUILD = 0x193,
+/*20031029 to latest
+머리색깔 선택
+Choose Hair Color
+*/
+ MSG_SELECT_HAIR_COLOR = 0x194,
+/*20031029 to latest
+길드결성시 필요한 아이템이 없습니다.
+You don't have necessary item to create a Guild.
+*/
+ MSG_GUILD_MAKE_GUILD_NONE_ITEM = 0x195,
+/*20031029 to latest
+몬스터 정보
+Monster Info
+*/
+ MSG_MONSTER_INFO_WINDOW = 0x196,
+/*20031029 to latest
+이름
+Name
+*/
+ MSG_NAME = 0x197,
+/*20031029 to latest
+레벨
+Level
+*/
+ MSG_LEVEL = 0x198,
+/*20031029 to latest
+HP
+*/
+ MSG_HP = 0x199,
+/*20031029 to latest
+크기
+Size
+*/
+ MSG_SIZE = 0x19a,
+/*20031029 to latest
+종족
+Type
+*/
+ MSG_RACETYPE = 0x19b,
+/*20031029 to latest
+MDEF
+*/
+ MSG_MDEFPOWER = 0x19c,
+/*20031029 to latest
+속성
+Attribute
+*/
+ MSG_PROPERTY = 0x19d,
+/*20031029 to latest
+無
+Neutral
+*/
+ MSG_PROPERTY_NEUTURAL = 0x19e,
+/*20031029 to latest
+水
+Water
+*/
+ MSG_PROPERTY_WATER = 0x19f,
+/*20031029 to latest
+地
+Earth
+*/
+ MSG_PROPERTY_EARTH = 0x1a0,
+/*20031029 to latest
+火
+Fire
+*/
+ MSG_PROPERTY_FIRE = 0x1a1,
+/*20031029 to latest
+風
+Wind
+*/
+ MSG_PROPERTY_WIND = 0x1a2,
+/*20031029 to latest
+毒
+Poison
+*/
+ MSG_PROPERTY_POISON = 0x1a3,
+/*20031029 to latest
+聖
+Holy
+*/
+ MSG_PROPERTY_SAINT = 0x1a4,
+/*20031029 to latest
+暗
+Shadow
+*/
+ MSG_PROPERTY_DARK = 0x1a5,
+/*20031029 to latest
+念
+Ghost
+*/
+ MSG_PROPERTY_MENTAL = 0x1a6,
+/*20031029 to latest
+死
+Undead
+*/
+ MSG_PROPERTY_UNDEAD = 0x1a7,
+/*20031029 to latest
+현재는 아이템을 만들 수 없습니다.
+You can't create items yet.
+*/
+ MSG_CANT_MAKE_ITEM = 0x1a8,
+/*20031029 to latest
+제조 목록
+Item List you can craft
+*/
+ MSG_MAKE_LIST = 0x1a9,
+/*20031029 to latest
+ 만들기
+ Create
+*/
+ MSG_MAKE_TARGET = 0x1aa,
+/*20031029 to latest
+ 에 필요한 재료:
+'s materials
+*/
+ MSG_REQUIRE_FOR_MAKE_TARGET = 0x1ab,
+/*20031029 to latest
+ 만들기 실패
+ item creation failed.
+*/
+ MSG_MAKE_TARGET_FAIL = 0x1ac,
+/*20031029 to latest
+ 만들기 성공
+ item created successfully.
+*/
+ MSG_MAKE_TARGET_SUCCEESS = 0x1ad,
+/*20031029 to latest
+%s 만들기를 실패하였습니다.
+ item creation failed.
+*/
+ MSG_MAKE_TARGET_FAIL_MSG = 0x1ae,
+/*20031029 to latest
+%s 만들기를 성공했습니다.
+ item created successfully.
+*/
+ MSG_MAKE_TARGET_SUCCEESS_MSG = 0x1af,
+/*20031029 to latest
+레벨이 부족합니다.
+You are not the required lvl.
+*/
+ MSG_NOT_ENOUGH_LEVEL = 0x1b0,
+/*20031029 to latest
+레벨이 너무 높습니다.
+Too high lvl for this job.
+*/
+ MSG_TOO_HIGH_LEVEL = 0x1b1,
+/*20031029 to latest
+직업이 적합하지 않습니다.
+Not the suitable job for this type of work.
+*/
+ MSG_NOT_ACCEPTABLE_JOB = 0x1b2,
+/*20031029 to latest
+토키 박스 트랩 메세지
+Record a message in the Talkie Box
+*/
+ MSG_TALKBOX_WINDOW = 0x1b3,
+/*20031029 to latest
+기록할 메세지를 입력하시기 바랍니다.
+Please type a message for the Talkie Box
+*/
+ MSG_TALKBOX_WINDOW_MSG = 0x1b4,
+/*20031029 to latest
+길드에게 보냄
+Send to Guild
+*/
+ MSG_SEND_TO_GUILD = 0x1b5,
+/*20031029 to latest
+결제된 계정이 아닙니다. 결제 페이지로 이동하시겠습니까?
+You didn't pay for this ID. Would you like to pay for it now?
+*/
+ MSG_NOT_SETTLED = 0x1b6,
+/*20031029 to latest
+서버가 혼잡한 관계로 잠시후 다시 시도해 주시기 바랍니다.
+Server is jammed due to overpopulation. Please try again after few minutes.
+*/
+ MSG_ACCOUNT_BUSY = 0x1b7,
+/*20031029 to latest
+지난 접속 정보가 남아 있습니다. 30초정도 지난뒤에 다시 시도해 주시기 바랍니다.
+Server still recognizes your last log-in. Please try again after a few minutes.
+*/
+ MSG_INFORMATION_REMAINED = 0x1b8,
+/*20031029 to latest
+매 풀어주기
+Release Falcon
+*/
+ MSG_BIRDOFF = 0x1b9,
+/*20031029 to latest
+페코페코 내리기
+Dismount
+*/
+ MSG_CHIKENOFF = 0x1ba,
+/*20031029 to latest
+小
+Small
+*/
+ MSG_SIZE_SMALL = 0x1bb,
+/*20031029 to latest
+中
+Med
+*/
+ MSG_SIZE_MIDDLE = 0x1bc,
+/*20031029 to latest
+大
+Big
+*/
+ MSG_SIZE_BIG = 0x1bd,
+/*20031029 to latest
+더블
+Double
+*/
+ MSG_DOUBLE = 0x1be,
+/*20031029 to latest
+트리플
+Triple
+*/
+ MSG_TRIPLE = 0x1bf,
+/*20031029 to latest
+쿼드로플
+Quadruple
+*/
+ MSG_QUADROPLE = 0x1c0,
+/*20031029 to latest
+%s 까지 로그인을 금지하고 있습니다.
+You are prohibited to log in until %s.
+*/
+ MSG_LOGIN_REFUSE_BLOCKED_UNTIL = 0x1c1,
+/*20031029 to latest
+의
+'s
+*/
+ MSG_MANUFACTURED_NORMAL_ITEM = 0x1c2,
+/*20031029 to latest
+의 파이어
+'s Fire
+*/
+ MSG_MANUFACTURED_FIRE_ITEM = 0x1c3,
+/*20031029 to latest
+의 아이스
+'s Ice
+*/
+ MSG_MANUFACTURED_ICE_ITEM = 0x1c4,
+/*20031029 to latest
+의 윈드
+'s Wind
+*/
+ MSG_MANUFACTURED_WIND_ITEM = 0x1c5,
+/*20031029 to latest
+의 어스
+'s Earth
+*/
+ MSG_MANUFACTURED_EARTH_ITEM = 0x1c6,
+/*20031029 to latest
+211.239.161.246
+38.144.194.2
+*/
+ MSG_ACCOUNT_ADDRESS = 0x1c7,
+/*20031029 to latest
+6900
+*/
+ MSG_ACCOUNT_PORT = 0x1c8,
+/*20031029 to latest
+http://www.ragnarok.co.kr
+*/
+ MSG_REGISTRATION_WEB_URL = 0x1c9,
+/*20031029 to latest
+%s 사용자 강제 종료
+Kill %s
+*/
+ MSG_BAN_USER = 0x1ca,
+/*20031029 to latest
+무지쎈
+Very Strong
+*/
+ MSG_ONE_STARPIECE = 0x1cb,
+/*20031029 to latest
+무지무지쎈
+Very Very Strong
+*/
+ MSG_TWO_STARPIECE = 0x1cc,
+/*20031029 to 20031029
+무지무지무지쎈
+20031103 to latest
+무무무쎈
+Very Very Very Strong
+*/
+ MSG_THREE_STARPIECE = 0x1cd,
+/*20031029 to latest
+길드 추방 사유
+The Reason of Expulsion
+*/
+ MSG_GUILD_KICK_REASON = 0x1ce,
+/*20031029 to latest
+ 공격 속도가 증가했습니다.
+Attack Speed is up.
+*/
+ MSG_INCATTACKSPEED = 0x1cf,
+/*20031029 to latest
+ 공격 속도가 감소했습니다.
+Attack Speed is down.
+*/
+ MSG_DECATTACKSPEED = 0x1d0,
+/*20031029 to latest
+ 무기의 공격력이 향상되었습니다.
+Weapon Damage is improved.
+*/
+ MSG_INCWEAPONATTACK = 0x1d1,
+/*20031029 to latest
+ 무기의 공격력이 감소되었습니다.
+Weapon Damage is reduced.
+*/
+ MSG_DECWEAPONATTACK = 0x1d2,
+/*20031029 to latest
+ 시전 딜레이가 줄었습니다.
+Cast Delay is reduced.
+*/
+ MSG_FASTPREDELAY = 0x1d3,
+/*20031029 to latest
+ 시전 딜레이가 정상으로 되었습니다.
+Cast Delay has returned to normal.
+*/
+ MSG_NORMALPREDELAY = 0x1d4,
+/*20031029 to latest
+ 무기에 독속성이 부여되었습니다.
+Weapon is temporarily enchanted with Poison.
+*/
+ MSG_WEAPONPROPERTYPOISON = 0x1d5,
+/*20031029 to latest
+ 무기에 성속성이 부여되었습니다.
+Weapon is temporarily enchanted with an elemental property.
+*/
+ MSG_WEAPONPROPERTYSAINT = 0x1d6,
+/*20031029 to latest
+ 무기의 원래속성이 적용되었습니다.
+Weapon has changed back to normal.
+*/
+ MSG_WEAPONPROPERTYORIGINAL = 0x1d7,
+/*20031029 to latest
+ 방어구에 성속성이 부여되었습니다.
+Armor has been enchanted with the Holy Ghost.
+*/
+ MSG_ARMORPROPERTYSAINT = 0x1d8,
+/*20031029 to latest
+ 방어구의 원래속성이 적용되었습니다.
+Armor has changed back to normal.
+*/
+ MSG_ARMORPROPERTYORIGINAL = 0x1d9,
+/*20031029 to latest
+ 배리어 상태가 되었습니다.
+Barrier Formed.
+*/
+ MSG_BARRIOR = 0x1da,
+/*20031029 to latest
+ 배리어 상태가 해제 되었습니다.
+Barrier Canceled.
+*/
+ MSG_DISAPPEARBARRIOR = 0x1db,
+/*20031029 to latest
+ 소형, 중형, 대형 몬스터에게 100% 공격력을 줍니다.
+Weapon Perfection Initiated.
+*/
+ MSG_PERFECTDAMAGE = 0x1dc,
+/*20031029 to latest
+ 웨폰퍼펙션 모드가 해제 되었습니다.
+Weapon perfection Canceled.
+*/
+ MSG_DISAPPEARPERFECTDAMAGE = 0x1dd,
+/*20031029 to latest
+ 무기가 파괴될 가능성이 높아진 대신 무기의 공격력이 증가하였습니다.
+Power-Thrust Initiated.
+*/
+ MSG_OVERTHRUSTING = 0x1de,
+/*20031029 to 20050118
+ 오버트러스팅 상태가 해제 되었습니다.
+20050124 to latest
+ 오버트러스트 상태가 해제 되었습니다.
+Power-Thrust Canceled.
+*/
+ MSG_DISAPPEAROVERTHRUSTING = 0x1df,
+/*20031029 to latest
+ 무기의 최대 성능을 끌어냅니다.
+Maximize-Power Initiated.
+*/
+ MSG_MAXIMIZE = 0x1e0,
+/*20031029 to latest
+ 맥시마이즈 상태가 해제 되었습니다.
+Maximize-Power Canceled.
+*/
+ MSG_DISAPPEARMAXIMIZE = 0x1e1,
+/*20031029 to latest
+[신서버]
+[New Server]
+*/
+ MSG_SERVER_PROPERTY_NEW = 0x1e2,
+/*20031029 to latest
+(%d 명)
+(%d players)
+*/
+ MSG_SERVER_USER_COUNT = 0x1e3,
+/*20031029 to latest
+(점검중)
+(On the maintenance)
+*/
+ MSG_SERVER_INSPECTING = 0x1e4,
+/*20031029 to latest
+길드멤버 %s님이 접속하셨습니다.
+Guild member %s has connected.
+*/
+ MSG_GUILD_MEMBER_STATUS_ONLINE = 0x1e5,
+/*20031029 to latest
+길드멤버 %s님이 종료하셨습니다.
+Guild member %s has disconnected.
+*/
+ MSG_GUILD_MEMBER_STATUS_OFFLINE = 0x1e6,
+/*20031029 to latest
+경험치 %d 얻음
+You got %d Base EXP.
+*/
+ MSG_GOT_EXPERIENCE_POINT = 0x1e7,
+/*20031029 to latest
+잡경험치 %d 얻음
+You got %d Job EXP.
+*/
+ MSG_GOT_JOB_EXPERIENCE_POINT = 0x1e8,
+/*20031029 to latest
+길드에서 탈퇴 했습니다.
+You left the guild.
+*/
+ MSG_LEFT_GUILD = 0x1e9,
+/*20031029 to latest
+길드에서 추방 당했습니다.
+You have been expelled from the Guild.
+*/
+ MSG_BAN_FROM_GUILD = 0x1ea,
+/*20031029 to latest
+아이템 감정 성공
+Item Appraisal has completed successfully.
+*/
+ MSG_ITEM_IDENTIFY_SUCCEESS = 0x1eb,
+/*20031029 to latest
+아이템 감정 실패
+Item appraisal has failed.
+*/
+ MSG_ITEM_IDENTIFY_FAIL = 0x1ec,
+/*20031029 to latest
+아이템 조합 성공
+Compounding has completed successfully.
+*/
+ MSG_ITEM_COMPOUNDING_SUCCEESS = 0x1ed,
+/*20031029 to latest
+아이템 조합 실패
+Compounding has failed.
+*/
+ MSG_ITEM_COMPOUNDING_FAIL = 0x1ee,
+/*20031029 to latest
+길드 적대 성공
+Antagonist has been set.
+*/
+ MSG_HOSTILE_GUILD_SUCCEESS = 0x1ef,
+/*20031029 to latest
+적대 길드수 초과로 길드 적대 실패
+Guild has too many Antagonists.
+*/
+ MSG_TOO_MANY_HOSTILE_GUILD = 0x1f0,
+/*20031029 to latest
+이미 적대 길드 입니다
+Already set as an Antagonist
+*/
+ MSG_ALREADY_REGISTERED_HOSTILE_GUILD = 0x1f1,
+/*20031029 to latest
+제련이 성공적으로 되었습니다.
+Upgrade has been completed successfully.
+*/
+ MSG_ITEM_REFINING_SUCCEESS = 0x1f2,
+/*20031029 to latest
+제련이 실패하였습니다.
+Upgrade has failed.
+*/
+ MSG_ITEM_REFINING_FAIL = 0x1f3,
+/*20031029 to 20040311
+텔레포트 불가능 지역입니다.
+20040315 to latest
+이곳에서는 순간이동이 불가능합니다.
+Unavailable Area to Teleport
+*/
+ MSG_IMPOSSIBLE_TELEPORT_AREA = 0x1f4,
+/*20031029 to 20040311
+텔레포트 가능 지역입니다.
+20040315 to latest
+이 장소는 기억할 수 없습니다.
+Unable to memorize this place as Warp Point
+*/
+ MSG_POSSIBLE_TELEPORT_AREA = 0x1f5,
+/*20031029 to latest
+지금은 종료할 수 없습니다.
+Please wait 10 seconds before trying to log out.
+*/
+ MSG_CANT_EXIT_NOW = 0x1f6,
+/*20031029 to latest
+직위
+Position
+*/
+ MSG_POSITION = 0x1f7,
+/*20031029 to latest
+직업
+Job
+*/
+ MSG_JOB = 0x1f8,
+/*20031029 to latest
+메모
+Note
+*/
+ MSG_MEMO = 0x1f9,
+/*20031029 to latest
+기여
+Devotion
+*/
+ MSG_CONTRIBUTION = 0x1fa,
+/*20031029 to latest
+상납경험치
+Tax Point
+*/
+ MSG_EXP_CONTIRIBUTION = 0x1fb,
+/*20031029 to latest
+길드탈퇴
+Leave Guild
+*/
+ MSG_LEAVE_GUILD = 0x1fc,
+/*20031029 to latest
+제명시키기
+Expel
+*/
+ MSG_EXPEL_GUILD = 0x1fd,
+/*20031029 to latest
+서열
+Rank
+*/
+ MSG_GRADE = 0x1fe,
+/*20031029 to latest
+직위명
+Position Title
+*/
+ MSG_POSITION_NAME = 0x1ff,
+/*20031029 to latest
+가입권한
+Invitation
+*/
+ MSG_JOIN_AUTHORITY = 0x200,
+/*20031029 to latest
+처벌권한
+Punish
+*/
+ MSG_PENALTY_AUTORITY = 0x201,
+/*20031029 to latest
+상납%
+Tax %
+*/
+ MSG_CONTRIBUTION_PERCENT = 0x202,
+/*20031029 to latest
+제목
+Title
+*/
+ MSG_TITLE = 0x203,
+/*20031029 to latest
+내용
+For
+*/
+ MSG_CONTENTS = 0x204,
+/*20031029 to latest
+길드이름
+Guild Name
+*/
+ MSG_GUILD_NAME = 0x205,
+/*20031029 to latest
+길드레벨
+Guild lvl
+*/
+ MSG_GUILD_LEVEL = 0x206,
+/*20031029 to latest
+조합원수
+Number of Members
+*/
+ MSG_GUILD_PEOPLE_COUNT = 0x207,
+/*20031029 to latest
+랭킹
+Ranking
+*/
+ MSG_RANKING = 0x208,
+/*20031029 to latest
+아이템 감정
+Item Appraisal
+*/
+ MSG_ITEM_IDENTIFY = 0x209,
+/*20031029 to latest
+아이템 조합
+Insert Card
+*/
+ MSG_ITEM_COMPOUNDING = 0x20a,
+/*20031029 to latest
+탈퇴 사유를 입력해주세요.
+Please enter the reason of Secession.
+*/
+ MSG_PLEASE_INPUT_WHY_LEAVING = 0x20b,
+/*20031029 to latest
+추방 사유를 입력해주세요.
+Please enter the reason of Expulsion.
+*/
+ MSG_PELASE_INPUT_WHY_EXPEL = 0x20c,
+/*20031029 to latest
+상점을 닫으세요.
+Please close Shop.
+*/
+ MSG_PLEASE_CLOSE_STORE = 0x20d,
+/*20031029 to latest
+스킬 이름
+Skill
+*/
+ MSG_SKILL_NAME = 0x20e,
+/*20031029 to latest
+아이템 이름
+Item Name
+*/
+ MSG_ITEM_NAME = 0x20f,
+/*20031029 to 20031118
+https://pay.ragnarok.co.kr
+20031119 to latest
+https://payment.ragnarok.co.kr
+https://pay.ragnarok.co.kr (Billing Web)
+*/
+ MSG_SETTLE_WEB_URL = 0x210,
+/*20031029 to latest
+게임방에서 사용가능한 IP개수가 모두 사용중입니다. 개인 계정으로 결제 하시겠습니까?
+IP capacity of this Internet Cafe is full. Would you like to pay the personal base?
+*/
+ MSG_BAN_IP_OVERFLOW = 0x211,
+/*20031029 to latest
+결제시간이 다되어 게임을 종료합니다.
+You are out of available paid playing time. Game will be shut down automatically.
+*/
+ MSG_BAN_PAY_OUT = 0x212,
+/*20031029 to latest
+이름이 너무 깁니다. 한글 11자 영문 23자 이내로 써주십시오.
+Name is too long. Please enter a name no greater than 23 english characters.
+*/
+ MSG_NAMELENGTH_TOO_LONG = 0x213,
+/*20031029 to latest
+deleted
+Character will be deleted in %d seconds.
+*/
+ MSG_DELETE_AFTER_10_SECOND = 0x214,
+/*20031029 to latest
+귀하는 개인 정액제 사용자입니다.
+You paid with the personal regular base.
+*/
+ MSG_BILLING_100 = 0x215,
+/*20031029 to latest
+귀하는 개인정량제 사용자입니다.
+You paid with the personal regular base. Available time is xx hrs xx mins xx secs.
+*/
+ MSG_BILLING_200 = 0x216,
+/*20031029 to latest
+귀하는 개인 무료 사용자입니다.
+You are free!
+*/
+ MSG_BILLING_300 = 0x217,
+/*20031029 to latest
+귀하는 개인 무료 허용기간 사용자입니다.
+You are free for the test, your available time is xx hrs xx mins xx secs.
+*/
+ MSG_BILLING_400 = 0x218,
+/*20031029 to latest
+귀하는 게임방 정액제 사용자입니다.
+You paid with the Internet Cafe regular base. Available time is xx hrs xx mins xx secs.
+*/
+ MSG_BILLING_500 = 0x219,
+/*20031029 to latest
+귀하는 게임방 정량제 사용자입니다.
+You paid with the Time Limit for Internet Cafe. Available time is xx hrs xx mins xx secs.
+*/
+ MSG_BILLING_501 = 0x21a,
+/*20031029 to latest
+귀하는 게임방 무료 허용기간 사용자입니다.
+You are free for the test of Internet Cafe version .
+*/
+ MSG_BILLING_600 = 0x21b,
+/*20031029 to latest
+귀하는 게임방 무료 사용자입니다.
+You are free for the Internet Cafe version.
+*/
+ MSG_BILLING_700 = 0x21c,
+/*20031029 to latest
+귀하는 종량제 사이트 이용자입니다.
+You paid on the Time Limit Website.
+*/
+ MSG_BILLING_800 = 0x21d,
+/*20031029 to latest
+이모션 목록
+Emotion icon List
+*/
+ MSG_EMOTION_LIST = 0x21e,
+/*20031029 to latest
+/이모션
+/emo
+*/
+ MSG_VIEW_EMOTION = 0x21f,
+/*20031029 to latest
+/!
+*/
+ MSG_EMOTION_SURPRISE = 0x220,
+/*20031029 to latest
+/?
+*/
+ MSG_EMOTION_QUESTION = 0x221,
+/*20031029 to latest
+/기쁨
+/ho
+*/
+ MSG_EMOTION_DELIGHT = 0x222,
+/*20031029 to latest
+/하트
+/lv
+*/
+ MSG_EMOTION_THROB = 0x223,
+/*20031029 to latest
+/왕하트
+/lv2
+*/
+ MSG_EMOTION_BIGTHROB = 0x224,
+/*20031029 to latest
+/땀
+/swt
+*/
+ MSG_EMOTION_SWEAT = 0x225,
+/*20031029 to latest
+/아하
+/ic
+*/
+ MSG_EMOTION_AHA = 0x226,
+/*20031029 to latest
+/짜증
+/an
+*/
+ MSG_EMOTION_FRET = 0x227,
+/*20031029 to latest
+/화
+/ag
+*/
+ MSG_EMOTION_ANGER = 0x228,
+/*20031029 to latest
+/돈
+/$
+*/
+ MSG_EMOTION_MONEY = 0x229,
+/*20031029 to latest
+/...
+*/
+ MSG_EMOTION_THINK = 0x22a,
+/*20031029 to latest
+/감사
+/thx
+*/
+ MSG_EMOTION_THANKS = 0x22b,
+/*20031029 to latest
+/꽥
+/wah
+*/
+ MSG_EMOTION_KEK = 0x22c,
+/*20031029 to latest
+/죄송
+/sry
+*/
+ MSG_EMOTION_SORRY = 0x22d,
+/*20031029 to latest
+/웃음
+/heh
+*/
+ MSG_EMOTION_SMILE = 0x22e,
+/*20031029 to latest
+/뻘뻘
+/swt2
+*/
+ MSG_EMOTION_PROFUSELY_SWEAT = 0x22f,
+/*20031029 to latest
+/긁적
+/hmm
+*/
+ MSG_EMOTION_SCRATCH = 0x230,
+/*20031029 to latest
+/최고
+/no1
+*/
+ MSG_EMOTION_BEST = 0x231,
+/*20031029 to latest
+/두리번
+/??
+*/
+ MSG_EMOTION_STARE_ABOUT = 0x232,
+/*20031029 to latest
+/헉
+/omg
+*/
+ MSG_EMOTION_HUK = 0x233,
+/*20031029 to latest
+/오
+/oh
+*/
+ MSG_EMOTION_O = 0x234,
+/*20031029 to latest
+/엑스
+/X
+*/
+ MSG_EMOTION_X = 0x235,
+/*20031029 to latest
+/헬프
+/hlp
+*/
+ MSG_EMOTION_HELP = 0x236,
+/*20031029 to latest
+/가
+/go
+*/
+ MSG_EMOTION_GO = 0x237,
+/*20031029 to latest
+/엉엉
+/sob
+*/
+ MSG_EMOTION_CRY = 0x238,
+/*20031029 to latest
+/킥킥
+/gg
+*/
+ MSG_EMOTION_KIK = 0x239,
+/*20031029 to latest
+/쪽
+/kis
+*/
+ MSG_EMOTION_CHUP = 0x23a,
+/*20031029 to latest
+/쪽쪽
+/kis2
+*/
+ MSG_EMOTION_CHUPCHUP = 0x23b,
+/*20031029 to latest
+/흥
+/pif
+*/
+ MSG_EMOTION_HNG = 0x23c,
+/*20031029 to latest
+/응
+/ok
+*/
+ MSG_EMOTION_OK = 0x23d,
+/*20031029 to latest
+단축키 목록
+Shortcut List
+*/
+ MSG_SHORTCUT_LIST = 0x23e,
+/*20031029 to latest
+귀하의 계정은 보류되었습니다.
+Your account is suspended.
+*/
+ MSG_BAN_PAY_SUSPEND = 0x23f,
+/*20031029 to latest
+과금 정책 변경으로 인해 일시 종료됩니다. 다시 접속하여 주시기 바랍니다.
+Your connection is terminated due to change in the billing policy. Please connect again.
+*/
+ MSG_BAN_PAY_CHANGE = 0x240,
+/*20031029 to latest
+어카운트 서버에 인증된 IP와 귀하의 IP가 달라 연결을 종료합니다.
+Your connection is terminated because your IP doesn't match the authorized IP from the account server.
+*/
+ MSG_BAN_PAY_WRONGIP = 0x241,
+/*20031029 to latest
+게임방 IP에서 개인 종량제 과금을 막기 위해 연결을 종료합니다. 개인 종량제 과금을 사용하기 위해서는 게임방IP로 등록이 되지 않은 IP를 사용해 주세요.
+Your connection is terminated to prevent charging from your account's play time.
+*/
+ MSG_BAN_PAY_PNGAMEROOM = 0x242,
+/*20031029 to latest
+귀하는 운영자에 의해 강제 종료 되었습니다.
+You have been forced to disconnect by the Game Master Team.
+*/
+ MSG_BAN_OP_FORCE = 0x243,
+/*20031029 to latest
+무게가 90%를 초과하여 스킬을 사용할 수 없습니다.
+You can't use this Skill because you are over your Weight Limit.
+*/
+ MSG_USESKILL_FAIL_WEIGHTOVER = 0x244,
+/*20031029 to latest
+무명
+Nameless
+*/
+ MSG_NAMELESS_USER = 0x245,
+/*20031029 to latest
+축하합니다. %s님의 현재 랭킹이 %d위로 상승하였습니다.
+Congratulations! %s ranking has gone up to %d.
+*/
+ MSG_RANK_IN_TEN = 0x246,
+/*20031029 to latest
+안타깝게도 %s님의 현재 랭킹이 %d위로 하락하였습니다.
+What a pity! %s ranking has gone down to %d.
+*/
+ MSG_RANK_OUT_TEN = 0x247,
+/*20031029 to latest
+Pet Info
+*/
+ MSG_PET_INFO = 0x248,
+/*20031029 to latest
+만복도
+Hunger
+*/
+ MSG_PET_HUNGRY = 0x249,
+/*20031029 to latest
+친밀도
+Intimacy
+*/
+ MSG_PET_FRIENDLY = 0x24a,
+/*20031029 to latest
+상점과 채팅방을 동시에 열수 없습니다.
+Please avoid opening a chatroom while vending.
+*/
+ MSG_CANT_OPEN_STORE_WHILE_CHAT = 0x24b,
+/*20031029 to latest
+개
+Total
+*/
+ MSG_EA4 = 0x24c,
+/*20031029 to latest
+%s 를 전투불능으로 만들었습니다.
+You have knocked down %s.
+*/
+ MSG_SLAIN = 0x24d,
+/*20031029 to latest
+%s 님에 의해 전투불능 상태가 되었습니다.
+You have been knocked down by %s.
+*/
+ MSG_SLAINBY = 0x24e,
+/*20031029 to latest
+먹이 - '%s' 아이템이 존재하지 않습니다..
+Feed - "%s" is not available.
+*/
+ MSG_NOT_EXIST_PET_FOOD = 0x24f,
+/*20031029 to latest
+먹이 주기
+Feed Pet
+*/
+ MSG_PET_FEEDING = 0x250,
+/*20031029 to latest
+퍼포먼스
+Performance
+*/
+ MSG_PET_PERFORMANCE = 0x251,
+/*20031029 to latest
+알로 되돌리기
+Return to Egg Shell
+*/
+ MSG_PET_RETURN_EGG = 0x252,
+/*20031029 to latest
+악세사리 해제
+Unequip Accessory
+*/
+ MSG_PET_ACC_OFF = 0x253,
+/*20031029 to latest
+Pet 상태 보기
+Check Pet Status
+*/
+ MSG_PET_SHOWINFO = 0x254,
+/*20031029 to latest
+악세사리
+Accessory
+*/
+ MSG_PET_ACCESSARY = 0x255,
+/*20031029 to latest
+장착됨
+Equipped
+*/
+ MSG_ITEM_EQUIPED = 0x256,
+/*20031029 to latest
+펫 리스트
+Pet List
+*/
+ MSG_PET_EGG_LIST = 0x257,
+/*20031029 to latest
+장착 안됨
+Unequipped
+*/
+ MSG_ITEM_UNEQUIPED = 0x258,
+/*20031029 to latest
+정말로 먹이를 주시겠습니까?
+Are you sure that you want to feed your pet?
+*/
+ MSG_SURE_TO_FEED_PET = 0x259,
+/*20031029 to latest
+가격을 쓰실땐 숫자(0~9)만 써주십시오.
+Only the numbers (0~9) are available.
+*/
+ MSG_CAN_INPUT_NUMBER_ONLY = 0x25a,
+/*20031029 to latest
+감정되지 않은 아이템은 판매할 수 없습니다.
+You cannot sell unidentified items.
+*/
+ MSG_CANT_SELL_UNIDENTIFIED_ITEM = 0x25b,
+/*20031029 to latest
+가격이 0 Zeny인 아이템이 존재합니다. 계속 하시겠습니까?
+Item at 0 Zeny exists. Do you wish to continue?
+*/
+ MSG_YOU_HAVE_FREE_ITEM_ON_SHOP = 0x25c,
+/*20031029 to latest
+[새로 추가된 이모션 리스트]
+[New Emotion List]
+*/
+ MSG_NEW_EMOTION_LIST = 0x25d,
+/*20031029 to latest
+일본쪽 베타 사용자들에게 전하는 메세지. -> 겅호에서 재가입 하세요.
+N/A
+*/
+ MSG_BAN_JAPAN_REFUSE1 = 0x25e,
+/*20031029 to latest
+일본쪽 과금이 종료된 사용자들에게 전하는 메세지. -> 돈내라. 두 번내라.
+N/A
+*/
+ MSG_BAN_JAPAN_REFUSE2 = 0x25f,
+/*20031029 to latest
+같은 계정의 캐릭터가 이미 가입되어있습니다.
+Character in the same account already joined.
+*/
+ MSG_ALREADY_SAME_AID_JOINED = 0x260,
+/*20031029 to latest
+(%d 명) - 만18세이상
+(%d ppl) - over the age 18
+*/
+ MSG_SERVER_PROPERTY_ADULT = 0x261,
+/*20031029 to latest
+ 프로보크 상태가 되었습니다.
+Provoke initiated.
+*/
+ MSG_ENST_PROVOKE = 0x262,
+/*20031029 to latest
+ 프로보크 상태가 해제되었습니다.
+Provoke canceled.
+*/
+ MSG_DSST_PROVOKE = 0x263,
+/*20031029 to latest
+ 인듀어 상태가 되었습니다.
+Endure initiated.
+*/
+ MSG_ENST_ENDURE = 0x264,
+/*20031029 to latest
+ 인듀어 상태가 해제되었습니다.
+Endure canceled.
+*/
+ MSG_DSST_ENDURE = 0x265,
+/*20031029 to latest
+ 집중력 향상 상태가 되었습니다.
+Improve Concentration initiated.
+*/
+ MSG_ENST_CONCENTRATION = 0x266,
+/*20031029 to latest
+ 집중력 향상 상태가 해제되었습니다.
+Improve Concentration canceled.
+*/
+ MSG_DSST_CONCENTRATION = 0x267,
+/*20031029 to latest
+ 하이딩 상태가 되었습니다.
+Hiding Initiated.
+*/
+ MSG_ENST_HIDING = 0x268,
+/*20031029 to latest
+ 하이딩 상태가 해제되었습니다.
+Hiding Canceled.
+*/
+ MSG_DSST_HIDING = 0x269,
+/*20031029 to latest
+ 클로킹 상태가 되었습니다.
+Cloaking initiated.
+*/
+ MSG_ENST_CLOAKING = 0x26a,
+/*20031029 to latest
+ 클로킹 상태가 해제되었습니다.
+Cloaking canceled.
+*/
+ MSG_DSST_CLOAKING = 0x26b,
+/*20031029 to latest
+ 독을 반사 할 수 있는 상태가 되었습니다.
+Poison React initiated.
+*/
+ MSG_ENST_POISONREACT = 0x26c,
+/*20031029 to latest
+ 포이즌 리액트 상태가 해제되었습니다.
+Poison React canceled.
+*/
+ MSG_DSST_POISONREACT = 0x26d,
+/*20031029 to latest
+ 이동속도가 감소하였습니다.
+Speed reduced.
+*/
+ MSG_ENST_QUAGMIRE = 0x26e,
+/*20031029 to latest
+ 콰그마이어 상태가 해제되었습니다.
+Quagmire canceled.
+*/
+ MSG_DSST_QUAGMIRE = 0x26f,
+/*20031029 to latest
+ 방어력이 증가되었습니다.
+Defense increased.
+*/
+ MSG_ENST_ANGELUS = 0x270,
+/*20031029 to 20031224
+ 안젤루스 상태가 해제돼었습니다.
+20031229 to latest
+ 안젤루스 상태가 해제되었습니다.
+Angelus canceled.
+*/
+ MSG_DSST_ANGELUS = 0x271,
+/*20031029 to latest
+ 힘과 지능, 덱스가 증가하였습니다.
+Blessing aligned.
+*/
+ MSG_ENST_BLESSING = 0x272,
+/*20031029 to latest
+ 블레싱 상태가 해제되었습니다.
+Blessing canceled.
+*/
+ MSG_DSST_BLESSING = 0x273,
+/*20031029 to latest
+ 시그넘 크루시스를 사용하였습니다.
+Signum Crusis initiated.
+*/
+ MSG_ENST_CRUCIS = 0x274,
+/*20031029 to latest
+ 시그넘 크루시스 상태가 해제되었습니다.
+Signum Crusis canceled.
+*/
+ MSG_DSST_CRUCIS = 0x275,
+/*20031029 to latest
+ 독이 퍼지는 속도가 느려졌습니다.
+Slow Poison initiated.
+*/
+ MSG_ENST_SLOWPOISON = 0x276,
+/*20031029 to latest
+ 슬로우 포이즌 상태가 해제되었습니다.
+Slow Poison Canceled.
+*/
+ MSG_DSST_SLOWPOISON = 0x277,
+/*20031029 to latest
+ SP의 회복 속도가 향상 되었습니다.
+HP/SP recovery increased.
+*/
+ MSG_ENST_MAGNIFICAT = 0x278,
+/*20031029 to latest
+ 마니피캇 상태가 해제되었습니다.
+Magnificat canceled.
+*/
+ MSG_DSST_MAGNIFICAT = 0x279,
+/*20031029 to latest
+ 행운이 향상되었습니다.
+Luck increased.
+*/
+ MSG_ENST_GLORIA = 0x27a,
+/*20031029 to latest
+ 글로리아 상태가 해제되었습니다.
+Gloria canceled.
+*/
+ MSG_DSST_GLORIA = 0x27b,
+/*20031029 to latest
+ 1회 공격에 두 배 데미지를 받는 상태가 되었습니다.
+You will received double damage from all attacking opponents.
+*/
+ MSG_ENST_LEXAETERNA = 0x27c,
+/*20031029 to latest
+ 렉스에테르나 상태가 해제되었습니다.
+Lex Eterna canceled.
+*/
+ MSG_DSST_LEXAETERNA = 0x27d,
+/*20031029 to latest
+ 공격속도가 증가하였습니다.
+Attack Speed increased.
+*/
+ MSG_ENST_ADRENALINE = 0x27e,
+/*20031029 to latest
+ 공격속도가 감소하였습니다.
+Attack Speed reduced.
+*/
+ MSG_DSST_ADRENALINE = 0x27f,
+/*20031029 to latest
+ 페코에 올라 탔습니다.
+You've just been on a Peco Peco.
+*/
+ MSG_ENST_RIDING = 0x280,
+/*20031029 to latest
+ 페코에서 내렸습니다.
+You've just got off of a Peco Peco.
+*/
+ MSG_DSST_RIDING = 0x281,
+/*20031029 to latest
+ 팔콘을 장착하였습니다.
+You've just carried a Falcon with.
+*/
+ MSG_ENST_FALCON = 0x282,
+/*20031029 to latest
+ 팔콘을 풀어주었습니다.
+You've just released a Falcon.
+*/
+ MSG_DSST_FALCON = 0x283,
+/*20031029 to latest
+ 죽은척하기 상태가 되었습니다.
+Play Dead initiated.
+*/
+ MSG_ENST_TRICKDEAD = 0x284,
+/*20031029 to latest
+ 죽은척하기 상태가 해제되었습니다.
+Play Dead canceled.
+*/
+ MSG_DSST_TRICKDEAD = 0x285,
+/*20031029 to latest
+ 힘이 강해졌습니다.
+STR improved.
+*/
+ MSG_ENST_SHOUT = 0x286,
+/*20031029 to latest
+ 힘이 원래대로 돌아왔습니다.
+STR turned back to normal.
+*/
+ MSG_DSST_SHOUT = 0x287,
+/*20031029 to latest
+ 에너지코트 상태가 되었습니다.
+Energy Coat initiated.
+*/
+ MSG_ENST_ENERGYCOAT = 0x288,
+/*20031029 to latest
+ 에너지코트 상태가 해제되었습니다.
+Energy Coat canceled.
+*/
+ MSG_DSST_ENERGYCOAT = 0x289,
+/*20031029 to latest
+ 방어구가 파괴되었습니다.
+Armor destroyed.
+*/
+ MSG_ENST_BROKENAMOR = 0x28a,
+/*20031029 to latest
+ ...
+Weapon has just been released from destroyed status.
+*/
+ MSG_DSST_BROKENAMOR = 0x28b,
+/*20031029 to latest
+ 무기가 파괴되었니다.
+Weapon destroyed.
+*/
+ MSG_ENST_BROKENWEAPON = 0x28c,
+/*20031029 to latest
+ ...
+Weapon has just been released from destroyed status.
+*/
+ MSG_DSST_BROKENWEAPON = 0x28d,
+/*20031029 to latest
+ 환영상태가 되었습니다.
+Invisibility initiated.
+*/
+ MSG_ENST_ILLUSION = 0x28e,
+/*20031029 to latest
+ 환영상태가 해제되었습니다.
+Invisibility canceled.
+*/
+ MSG_DSST_ILLUSION = 0x28f,
+/*20031029 to latest
+과금 정보 처리가 늦어지고 있어 접속이 지연되고 있습니다. 잠시 후에 다시 시도해 주시기 바랍니다.
+Sorry. It is delayed due to the process of payment. Please re-connect in a minute.
+*/
+ MSG_REFUSE_BLOCK_TEMPORARY = 0x290,
+/*20031029 to 20060403
+장착된 화살을 해제 하여야 합니다.
+20060410 to 20061009
+장착된 화살 또는 탄환을 해제 하여야 합니다.
+20061016 to latest
+장착된 화살/탄환/수리검 을 해제해야합니다.
+You must unequip ammunition first.
+*/
+ MSG_UNEQUIP_ARROW = 0x291,
+/*20031029 to latest
+화살 목록
+Arrow List
+*/
+ MSG_ARROW_LIST = 0x292,
+/*20031029 to latest
+카트 목록
+Cart List
+*/
+ MSG_CART_LIST = 0x293,
+/*20031029 to latest
+카트를 장착한 상태여야 합니다.
+You must have a Pushcart.
+*/
+ MSG_MUST_EQUIP_CART = 0x294,
+/*20031029 to latest
+채팅방을 개설 할 수 없습니다.
+You cannot open a Chat Window.
+*/
+ MSG_CANT_MAKE_CHAT_ROOM = 0x295,
+/*20031029 to latest
+라그나로크 홈페이지로 접속하여 계정을 만듭니다. 처음 계정을 만드시면 3일 동안은 무료로 이용하실 수 있습니다.
+Registering an account is the first step to accessing the game. Do you want to visit the registration page now?
+*/
+ MSG_3DAY_FREE = 0x296,
+/*20031029 to latest
+앉은 상태에서는 이 아이템을 사용할 수 없습니다.
+You cannot use this item while sitting.
+*/
+ MSG_CANT_USE_WHEN_SITDOWN = 0x297,
+/*20031029 to 20040413
+운영자에 의한 채팅 및 스킬 금지가 %d 분간 남아 있습니다.
+20040419 to 20040713
+운영자에 의한 채팅, 스킬, 아이템 사용금지가 %d 분간 남아 있습니다.
+20040726 to latest
+채팅, 스킬, 아이템 사용금지가 %d 분간 남아 있습니다.
+Your use of skills and chat will be blocked for the next %d minutes.
+*/
+ MSG_BAD_MANNER_REMAIN = 0x298,
+/*20031029 to 20040413
+운영자에 의한 채팅 및 스킬 금지가 해지 되었습니다.
+20040419 to 20040713
+운영자에 의한 채팅, 스킬, 아이템 사용금지가 해지 되었습니다.
+20040726 to latest
+채팅, 스킬, 아이템 사용금지가 해지 되었습니다.
+Your use of skills and chat have been reinstated.
+*/
+ MSG_BAD_MANNER_END = 0x299,
+/*20031029 to latest
+-[장착안됨]
+- [Not equipped]
+*/
+ MSG_REF_UNEQUIP = 0x29a,
+/*20031029 to latest
+배고픔
+Very Hungry
+*/
+ MSG_VERY_HUNGRY = 0x29b,
+/*20031029 to latest
+출출함
+Hungry
+*/
+ MSG_HUNGRY = 0x29c,
+/*20031029 to latest
+보통
+Normal
+*/
+ MSG_NORMAL = 0x29d,
+/*20031029 to latest
+배부름
+Satisfied
+*/
+ MSG_REPLETE = 0x29e,
+/*20031029 to latest
+아주 배부름
+Stuffed
+*/
+ MSG_VERY_REPLETE = 0x29f,
+/*20031029 to latest
+서먹서먹함
+Awkward
+*/
+ MSG_VERY_AWKWARD = 0x2a0,
+/*20031029 to latest
+어색함
+Shy
+*/
+ MSG_AWKWARD = 0x2a1,
+/*20031029 to latest
+친함
+Cordial
+*/
+ MSG_FRIENDLY = 0x2a2,
+/*20031029 to latest
+절친함
+Loyal
+*/
+ MSG_VERY_FRIENDLY = 0x2a3,
+/*20031029 to latest
+알수 없음
+Unknown
+*/
+ MSG_UNKNOWN = 0x2a4,
+/*20031029 to 20080520
+(태국)귀하는 앞으로 %일 %d시간 %d분 사용이 가능합니다.
+20080527 to latest
+귀하는 앞으로 %일 %d시간 %d분 사용이 가능합니다.
+Your account has play time of %d day %d hour %d minute.
+*/
+ MSG_BILLING_DAY_HOUR_MINUTES = 0x2a5,
+/*20031029 to 20080520
+(태국)이 계정은 이미 다른 어카운트 서버로 접속한 상태입니다.
+20080527 to latest
+이 계정은 이미 다른 어카운트 서버로 접속한 상태입니다.
+Your account is already connected to account server.
+*/
+ MSG_BAN_INFORMATION_REMAINED_ANOTHER_ACCOUNT = 0x2a6,
+/*20031029 to 20080520
+(태국)귀하는 앞으로 %d시간 %d분 사용이 가능합니다.
+20080527 to latest
+귀하는 앞으로 %d시간 %d분 사용이 가능합니다.
+Your account has play time of %d hour %d minute.
+*/
+ MSG_BILLING_HOUR_MINUTES = 0x2a7,
+/*20031029 to 20080520
+(태국)귀하는 무료 사용자 입니다.
+20080527 to latest
+귀하는 무료 사용자 입니다.
+Your account is a free account.
+*/
+ MSG_BILLING_FREE_USER = 0x2a8,
+/*20031029 to 20080520
+(태국)이 계정으로 사크라이에 접속할수 없습니다.
+20080527 to latest
+이 계정으로 사크라이에 접속할수 없습니다.
+This account can't connect the Sakray server.
+*/
+ MSG_REFUSE_NONSAKRAY_ID_BLOCKED = 0x2a9,
+/*20031029 to latest
+펫의 이름은 영문 23, 한글 11자 이내로 정해 주세요.
+Your pet name must be 23 characters or less.
+*/
+ MSG_PETNAME_IN23 = 0x2aa,
+/*20031029 to latest
+이름은 단 한번만 바꿀수 있습니다. 펫 이름을 ^0000ff^0000ff %s^000000^000000 로 수정합니다. 계속 하시겠습니까?
+You may change your pet's name only once. Your pet's name will be changed to ^0000ff^0000ff %s^000000^000000. Do you wish to continue?
+*/
+ MSG_PETNAME_CHANGE_ONLYONCE = 0x2ab,
+/*20031029 to latest
+/폰트
+/font
+*/
+ MSG_NAMEBALLOON_TYPE = 0x2ac,
+/*20031029 to latest
+길드에 남은 제니가 부족하여 작업이 실패하였습니다.
+Your guild lacks the funds to pay for this venture.
+*/
+ MSG_GUILDZENY_NOT_ENOUGH = 0x2ad,
+/*20031029 to latest
+길드가 소유할 수 있는 최대 금액을 초과하여 작업이 실패하였습니다.
+Your guild zeny limit prevents you from performing this action.
+*/
+ MSG_GUILDZENY_OVER = 0x2ae,
+/*20031029 to latest
+이펙트 간략화 On
+Simplified effects have been activated.
+*/
+ MSG_MINEFFECT_ON = 0x2af,
+/*20031029 to latest
+이펙트 간략화 Off
+Simplified effects have been deactivated.
+*/
+ MSG_MINEFFECT_OFF = 0x2b0,
+/*20031029 to latest
+자본금
+Required Fee
+*/
+ MSG_CAPITAL = 0x2b1,
+/*20031029 to latest
+아이템을 바닥에 버리려면, 아이템 창을 열어 주십시오.
+If you wish to drop an item, you must first open your Item Window (alt+e).
+*/
+ MSG_OPEN_ITEMWND_TO_THROW = 0x2b2,
+/*20031029 to latest
+PC방 요금이 종료하여 개인 요금제로 전환합니다. 개인 요금으로 게임을 계속 하시겠습니까?
+Internet Cafe Time Plan has been ended. Would you like to continue the game with your personal play time?
+*/
+ MSG_ASK_PNGAMEROOM = 0x2b3,
+/*20031029 to latest
+
+20080520 to 20080520
+
+Current admission application state.
+*/
+ MSG_REPLY_REMAINTIME = 0x2b4,
+/*20031029 to latest
+
+20080520 to 20080520
+
+Current admission application state.
+*/
+ MSG_INFO_REMAINTIME = 0x2b5,
+/*20031029 to latest
+돈이 모자라거나, 가질 수 있는 최대 금액을 초과하였습니다.
+Your lack of zeny or your zeny limit have prevented you from performing this action.
+*/
+ MSG_OVER_OR_LOW_MONEY = 0x2b6,
+/*20031029 to latest
+전투불능 상태가 되었습니다. esc키를 누르시면 선택창이 뜹니다.
+Your character has fainted. Push the ESC key to restart.
+*/
+ MSG_PRESS_ESC_TO_RESTART = 0x2b7,
+/*20031029 to latest
+ %d 개 획득
+- %d obtained.
+*/
+ MSG_EA_OBTAIN = 0x2b8,
+/*20031029 to latest
+스펠 리스트
+Spell List
+*/
+ MSG_SPELL_LIST = 0x2b9,
+/*20031029 to latest
+/최소화
+/minimize
+*/
+ MSG_MINEFFECT = 0x2ba,
+/*20031029 to latest
+이 아이템은 손상되어 있습니다..
+This item has been damaged.
+*/
+ MSG_DAMAGED_ITEM = 0x2bb,
+/*20031029 to latest
+/noshift : 쉬프트를 누르지않고 힐로 적을 공격할수있게됩니다 On Off
+/noshift: You may use your ''force heal'' ability without the Shift key. On | Off
+*/
+ MSG_EXPLAIN_NOSHIFT = 0x2bc,
+/*20031029 to 20040223
+시프트를 누르지 않고도 힐로 몬스터를 공격할수 있습니다 [ON]
+20040225 to latest
+시프트를 누르지 않고도 힐로 언데드를 공격할수 있습니다 [/ns ON]
+[no shift] option activated. [ON]
+*/
+ MSG_NOSHIFT_ON = 0x2bd,
+/*20031029 to 20040223
+시프트를 누르지 않고도 힐로 몬스터를 공격할수 있습니다 [OFF]
+20040225 to 20040315
+시프트를 누르지 않고도 힐로 언데드를 공격할수 있습니다 [/ns OFF]
+20040322 to latest
+시프트를 눌러야 힐로 언데드를 공격할수 있습니다 [/ns OFF]
+[no shift] option deactivated. [OFF]
+*/
+ MSG_NOSHIFT_OFF = 0x2be,
+/*20031029 to latest
+MSI_REFUSE_BAN_BY_DBA
+*/
+ MSG_REFUSE_BAN_BY_DBA = 0x2bf,
+/*20031029 to latest
+MSI_REFUSE_EMAIL_NOT_CONFIRMED
+*/
+ MSG_REFUSE_EMAIL_NOT_CONFIRMED = 0x2c0,
+/*20031029 to latest
+MSI_REFUSE_BAN_BY_GM
+*/
+ MSG_REFUSE_BAN_BY_GM = 0x2c1,
+/*20031029 to latest
+MSI_REFUSE_TEMP_BAN_FOR_DBWORK
+*/
+ MSG_REFUSE_TEMP_BAN_FOR_DBWORK = 0x2c2,
+/*20031029 to latest
+MSI_REFUSE_SELF_LOCK
+*/
+ MSG_REFUSE_SELF_LOCK = 0x2c3,
+/*20031029 to latest
+MSI_REFUSE_NOT_PERMITTED_GROUP
+*/
+ MSG_REFUSE_NOT_PERMITTED_GROUP = 0x2c4,
+/*20031029 to latest
+MSI_REFUSE_WAIT_FOR_SAKRAY_ACTIVE
+*/
+ MSG_REFUSE_WAIT_FOR_SAKRAY_ACTIVE = 0x2c5,
+/*20031029 to latest
+/aura : 오오라를 간략화 시킬수있습니다 On Off
+/aura: Simplify Aura effect On | Off
+*/
+ MSG_EXPLAIN_AURA = 0x2c6,
+/*20031029 to latest
+오오라가 정상적으로 표시됩니다 [오오라 ON]
+Turn On Aura [Aura ON]
+*/
+ MSG_AURA_ON = 0x2c7,
+/*20031029 to latest
+오오라가 간략화되서 표시됩니다 [오오라 OFF]
+Simplify Aura enabled. [ON]
+*/
+ MSG_AURA_OFF = 0x2c8,
+/*20031029 to latest
+채팅금지 기록 %d 회
+Chat block record %d times
+*/
+ MSG_PROHIBIT_LOG = 0x2c9,
+/*20031029 to latest
+채팅 금지 리스트
+Chat block list
+*/
+ MSG_PROHIBIT_LIST = 0x2ca,
+/*20031029 to latest
+/이름표시 or /showname : 캐릭터의 이름 표시 방식을 변경합니다.
+/showname: Change the name font type.
+*/
+ MSG_EXPLAIN_SHOWNAMETYPE = 0x2cb,
+/*20031029 to latest
+/noctrl : 콘트롤을 누르지않아도 자동공격이 됩니다. On Off
+/noctrl | /nc: Auto attack without pressing ctrl key. On | Off
+*/
+ MSG_EXPLAIN_NOCTRL = 0x2cc,
+/*20031029 to 20040223
+콘트롤을 누르지 않아도 자동공격을 합니다 [자동공격 ON]
+20040225 to latest
+콘트롤을 누르지 않아도 자동공격을 합니다 [/nc ON]
+Use auto attack without Ctrl. [Auto attack ON]
+*/
+ MSG_NOCTRL_ON = 0x2cd,
+/*20031029 to 20040223
+콘트롤을 눌러야 자동공격을 합니다 [자동공격 OFF]
+20040225 to latest
+콘트롤을 눌러야 자동공격을 합니다 [/nc OFF]
+Use auto attack with Ctrl. [Auto attack OFF]
+*/
+ MSG_NOCTRL_OFF = 0x2ce,
+/*20031029 to latest
+채팅 금지 주기
+Mute this player.
+*/
+ MSG_APPEND_PROHIBIT = 0x2cf,
+/*20031029 to latest
+채팅 금지 완전 풀기 & 로그 삭제
+Unmute player & Erase mute time.
+*/
+ MSG_ERASE_PROHIBIT = 0x2d0,
+/*20031029 to latest
+채팅 금지 시간 줄이기(로그 삭제 안됨)
+Decrease Player Mute time.
+*/
+ MSG_REDUCE_PROHIBIT = 0x2d1,
+/*20031029 to latest
+폰트가 정상적으로 바뀌었습니다 [이름표시방식 1]
+Normal Font Displayed. [showname type 1]
+*/
+ MSG_SHOWNAME_ON = 0x2d2,
+/*20031029 to latest
+폰트가 가늘게 바뀌면서 파티명도 표시됩니다 [이름표시방식 2]
+Font will be thin and party name will be shown [showname type 2]
+*/
+ MSG_SHOWNAME_OFF = 0x2d3,
+/*20031029 to latest
+/doridori : 연속해서 이 명령어를 쳐주면 캐릭터가 도리도리 ^^;;
+/doridori: Shake head
+*/
+ MSG_EXPLAIN_DORIDORI = 0x2d4,
+/*20031029 to latest
+인터넷 카페에서 과금을 하고 있습니다.
+Internet room is paying now.
+*/
+ MSG_BILLING_INTERNET_CAFE = 0x2d5,
+/*20031029 to latest
+정액제 과금은 %d일 %d시간 %d분이 남았습니다.
+종량제 과금은 %d시간 %d분이 남았습니다.
+Prepaid voucher validate until %d days %d hours %d minutes later.
+Time limit voucher validate untill %d hours %d minutes later.
+*/
+ MSG_BILLING_BOTH = 0x2d6,
+/*20031029 to latest
+/bingbing : 연속해서 이 명령어를 쳐주면 캐릭터가 빙글빙글 ^^;;
+/bingbing: Rotates player counter clockwise.
+*/
+ MSG_EXPLAIN_BINGBING = 0x2d7,
+/*20031029 to latest
+/bangbang : 연속해서 이 명령어를 쳐주면 캐릭터가 뱅글뱅글 ^^;;
+/bangbang: Rotates player clockwise.
+*/
+ MSG_EXPLAIN_BANGBANG = 0x2d8,
+/*20031029 to latest
+/skillfail : 빨간색의 스킬사용 실패 메세지를 표시하지 않습니다 On Off
+/skillfail: Display red font message when skill fails. On | Off
+*/
+ MSG_EXPLAIN_SKILLFAIL = 0x2d9,
+/*20031029 to 20040223
+스킬사용 실패 메세지를 표시합니다 [표시 ON]
+20040225 to latest
+스킬사용 실패 메세지를 표시합니다 [/sf ON]
+Skill fail messages will be displayed. [Display On]
+*/
+ MSG_SKILLFAIL_ON = 0x2da,
+/*20031029 to 20040223
+스킬사용 실패 메세지를 표시하지 않습니다 [표시 OFF]
+20040225 to latest
+스킬사용 실패 메세지를 표시하지 않습니다 [/sf OFF]
+Skill fail messages will not be displayed. [Display OFF]
+*/
+ MSG_SKILLFAIL_OFF = 0x2db,
+/*20031029 to latest
+/notalkmsg : 채팅내용을 채팅창에 표시하지 않습니다 On Off
+/notalkmsg: Chat will not be displayed in chat window. On | Off
+*/
+ MSG_EXPLAIN_NOTALKMSG = 0x2dc,
+/*20031029 to 20040223
+채팅내용을 채팅창에 표시합니다 [표시 ON]
+20040225 to latest
+채팅내용을 채팅창에 표시합니다 [/nm ON]
+Chat content will be displayed in the chat window. [Display ON]
+*/
+ MSG_NOTALKMSG_ON = 0x2dd,
+/*20031029 to 20040223
+채팅내용을 채팅창에 표시하지않습니다 [표시 OFF]
+20040225 to latest
+채팅내용을 채팅창에 표시하지않습니다 [/nm OFF]
+Chat content will not be displayed in the chat window. [Display OFF]
+*/
+ MSG_NOTALKMSG_OFF = 0x2de,
+/*20031029 to 20040423
+/set1 : /noctrl + /showname + /skillfail
+20040426 to 20040707
+/set1 : /noctrl + /showname + /skillfail , /set2 : + /q3
+20040707 to latest
+/set1 : /nc + /showname + /sf + /wi, /set2 : + /q3
+/set1: /noctrl + /showname + /skillfail
+*/
+ MSG_EXPLAIN_SET1 = 0x2df,
+/*20031029 to latest
+/fog : FOG이펙트를 키거나 끌수있습니다 On Off
+/fog: Fog effect. On | Off
+*/
+ MSG_EXPLAIN_FOG = 0x2e0,
+/*20031029 to latest
+ 청혼을 해왔습니다. 승낙하시겠습니까?
+You have received a marriage proposal. Do you accept?
+*/
+ MSG_SUGGEST_COUPLE = 0x2e1,
+/*20031029 to latest
+아이템 분배 방식
+Item sharing type
+*/
+ MSG_HOWITEMDIV = 0x2e2,
+/*20031029 to latest
+각자 취득
+Individual
+*/
+ MSG_ITEMDIV1 = 0x2e3,
+/*20031029 to latest
+균등하게 분배
+Shared
+*/
+ MSG_ITEMDIV2 = 0x2e4,
+#if PACKETVER >= 20031103
+/*20031103 to latest
+nProtect KeyCrypt
+*/
+ MSG_KEYCRYPT = 0x2e5,
+/*20031103 to latest
+Keyboard Driver가 검출되었습니다.
+
+키보드 보안 입력을 위해 추가기능을 설치하시겠습니까?
+
+(추가기능 설치후, 시스템 reboot 필수)
+Keyboard Driver has been detected.
+
+Do you want to install a program for keyboard security?
+
+(After installation, System Reboot is required)
+*/
+ MSG_KEYCRYPT_INSTALL_KEYDRIVER = 0x2e6,
+/*20031103 to latest
+설치가 완료 되었습니다.
+
+시스템을 Reboot 합니다.
+Installation has been completed.
+
+System will be rebooted.
+*/
+ MSG_KEYCRYPT_REBOOT = 0x2e7,
+/*20031103 to latest
+설치 실패.
+Installation has been failed.
+*/
+ MSG_KEYCRYPT_INSTALLFAIL = 0x2e8,
+/*20031103 to latest
+키보드 보안을 적용하지 않고 계속합니다.
+Keyboard Security will be skipped.
+*/
+ MSG_KEYCRYPT_SKIPKEYCRYPT = 0x2e9,
+/*20031103 to latest
+키보드 보안에 필요한 파일이 존재하지 않습니다.
+
+(npkeyc.vxd, npkeyc.sys, npkeycs.sys)
+Required file for Keyboard Security is not existing.
+
+(npkeyc.vxd, npkeyc.sys, npkeycs.sys)
+*/
+ MSG_KEYCRYPT_NOKEYCRYPTFILE = 0x2ea,
+/*20031103 to latest
+USB Keyboard가 검출되었습니다.
+
+키보드 보안 입력을 위해 추가기능을 설치하시겠습니까?
+
+(추가기능 설치후, 시스템 reboot 필수)
+USB Keyboard has been detected.
+
+Do you want to install a program for keyboard security?
+
+(After installation, System Reboot is required)
+*/
+ MSG_KEYCRYPT_USBKEYBOARD = 0x2eb,
+/*20031103 to latest
+ftp://ragnarok.nefficient.co.kr/pub/ragnarok/ragnarok0526.exe
+*/
+ MSG_FINDHACK_PATH = 0x2ec,
+/*20031103 to latest
+FindHack이 정상적으로 설치가 되어있지 않습니다. ragnarok0226.exe 를 다운로드 하여 라그나로크가 설치된 폴더에 설치해 주시기 바랍니다.(%d).
+FindHack is not installed correctly. Please download ragnarok0226.exe and install it in RagnarokOnline directory.(%d).
+*/
+ MSG_FINDHACK_NOTINSTALLED = 0x2ed,
+/*20031103 to latest
+해킹툴이 존재하지만 치료가 정상적으로 되지 않았습니다. 라그나로크가 실행되지 않습니다.
+Hacking tool is existing but it hasn't been cleaned. Rangarok Online will not be executed.
+*/
+ MSG_FINDHACK_HACKTOOLEXIST = 0x2ee,
+/*20031103 to latest
+해킹툴 진단 프로그램이 정상적으로 다운로드 되지 않았습니다. ragnarok0226.exe 를 다운로드 하여 라그나로크가 설치된 폴더에 설치해 주시기 바랍니다.
+Hacking tool scan program has not been downloaded correctly. Please download ragnarok0226.exe and install it in RagnarokOnline directory.
+*/
+ MSG_FINDHACK_CANTDOWNLOAD = 0x2ef,
+/*20031103 to latest
+NPX.DLL 등록에러 이거나 FindHack 구동에 필요한 파일이 없습니다. ragnarok0226.exe 를 다운로드 하여 라그나로크가 설치된 폴더에 설치해 주시기 바랍니다.
+NPX.DLL register error or there is no necessary file to run FindHack. Please download ragnarok0226.exe and install it in RagnarokOnline directory.
+*/
+ MSG_FINDHACK_NOFILE = 0x2f0,
+/*20031103 to latest
+예외사항이 발생했습니다. (02-3281-0361)로 문의해주세요. 리턴값(%d)
+Exceptional Error. Please contact the customer support. Return Value: (%d)
+*/
+ MSG_FINDHACK_EXCEPTION = 0x2f1,
+/*20031103 to latest
+종료버튼을 클릭 하셨습니다.
+Exit button has been clicked.
+*/
+ MSG_FINDHACK_EXITPRESSED = 0x2f2,
+/*20031103 to latest
+Findhack 업데이트 서버접근 실패하였습니다. 잠시 후에 다시 시도해 주시거나 그라비티 운영팀으로 연락해주시기 바랍니다.
+Unable to connect Findhack Update Server. Please try again or contact the customer support.
+*/
+ MSG_FINDHACK_UPDATEFAILED = 0x2f3,
+/*20031103 to latest
+사랑받고있는
+Beloved
+*/
+ MSG_NAMED_PET = 0x2f4,
+/*20031103 to 20031103
+신고용 갈무리 파일을 저장합니다.
+20031110 to latest
+/report or /신고 : 신고용 갈무리 파일을 저장합니다.
+/report: Save a chat log file.
+*/
+ MSG_REPORTCOMMAND_EXPLANATION = 0x2f5,
+/*20031103 to 20031112
+이 파일은 (주)그라비티의 운영팀에서 게임내의 부정행위나 비매너 행위에 대한
+증거자료로사용하게 됩니다.
+문서를 다른 문서 형식으로 저장하거나 내용을 변경하여 원본과 일치하지 않게
+ 될 경우 그 문서는 증거 효력을 상실하게 됩니다.
+20031117 to latest
+이 파일은 (주)그라비티의 운영팀에서 게임내의 부정행위나 비매너 행위에 대한
+증거자료로 사용하게 됩니다.
+문서를 다른 문서 형식으로 저장하거나 내용을 변경하여 원본과 일치하지 않게
+ 될 경우 그 문서는 증거 효력을 상실하게 됩니다.
+Chat logs are not accepted as evidence for any ill-mannered violation on account of possible file modifications. However this feature is provided for players' personal reference.
+*/
+ MSG_REPORTTEXT_HEADER = 0x2f6,
+#endif
+#if PACKETVER >= 20031110
+/*20031110 to latest
+당신을 사랑해요 ♡
+I love you.
+*/
+ MSG_LOVE_SKILL = 0x2f7,
+#endif
+#if PACKETVER >= 20031124
+/*20031124 to latest
+화면 또는 이펙트가 밝아서 눈에 부담이 되시는분들은 모니터의 밝기를 조정해주시기바랍니다.
+Please adjust your monitor/video brightness if effects appear too bright.
+*/
+ MSG_EXPLAIN_BRIGHT = 0x2f8,
+#endif
+#if PACKETVER >= 20031218
+/*20031218 to latest
+전체화면모드가 잘안되는 경우에 게임실행후 ALT+TAB으로 화면을 전환하면 잘되는 기종도 있습니다
+If full screen mode fails to work, it is suggested you alt+tab [or ctrl+esc] to inactivate and reactivate the Ragnarok Client.
+*/
+ MSG_EXPLAIN_ALTTAB = 0x2f9,
+#endif
+#if PACKETVER >= 20031223
+/*20031223 to latest
+(%d 명) - 유료서버
+(%d players) - Pay to Play Server
+*/
+ MSG_SERVER_PROPERTY_PAY = 0x2fa,
+/*20031223 to latest
+(%d 명) - 무료서버
+(%d players) - Free Server
+*/
+ MSG_SERVER_PROPERTY_FREE = 0x2fb,
+/*20031223 to latest
+무료 회원은 유료 서버로 접속할 수 없습니다.
+Trial players can't connect Pay to Play Server.
+*/
+ MSG_CANT_CONNECT_TO_PAY_SERVER = 0x2fc,
+#endif
+#if PACKETVER >= 20040107
+/*20040107 to 20040108
+마우스 우클릭으로 F9에 저장한 스킬을 쓸수있습니다 [QUICK ON]
+20040112 to latest
+마우스 우클릭으로 F9에 저장한 스킬을 쓸수있습니다 [/q1 ON]
+Right click menu skills for F9 are Enabled.[/q1 ON]
+*/
+ MSG_QUICKSPELL_ON = 0x2fd,
+/*20040107 to 20040108
+마우스 우클릭으로 스킬을 사용하지 못합니다 [QUICK OFF]
+20040112 to latest
+마우스 우클릭으로 스킬을 사용하지 못합니다 [/q1 OFF]
+Right click menu skills for F9 are Disabled.[/q1 OFF]
+*/
+ MSG_QUICKSPELL_OFF = 0x2fe,
+/*20040107 to 20040119
+/quickspell : 마우스 우클릭으로 F9에 저장한 스킬을 사용합니다 On Off
+20040126 to latest
+/quickspell : 마우스 우클릭으로 F9에 저장한 스킬을 사용합니다 On Off
+/quickspell: Right-click menu enables you to use skills assigned to the F9 hotkey. On | Off
+*/
+ MSG_EXPLAIN_QUICKSPELL = 0x2ff,
+#endif
+#if PACKETVER >= 20040112
+/*20040112 to latest
+마우스의 WHEEL을 사용해서 F7 과 F8에 저장한 스킬을 사용합니다 [/q2 ON]
+Mouse wheel skills for F7 and F8 are Enabled.[/q2 ON]
+*/
+ MSG_QUICKSPELL2_ON = 0x300,
+/*20040112 to latest
+마우스 WHEEL로 스킬을 사용하지 못합니다 [/q2 OFF]
+Mouse wheel skills for F7 and F8 are Disabled.[/q2 OFF]
+*/
+ MSG_QUICKSPELL2_OFF = 0x301,
+/*20040112 to 20040119
+/quickspell2 : 마우스 WHEEL로 F7 과 F8에 저장한 스킬을 사용합니다 On Off
+20040126 to latest
+/quickspell2 : 마우스 WHEEL을 위,아래로 굴려서 F7과F8에 저장한 스킬을 사용합니다 On Off
+/quickspell2: By rolling the mouse wheel up and down, you are able to use skills registered on F7 and F8 hotkeys. On | Off
+*/
+ MSG_EXPLAIN_QUICKSPELL2 = 0x302,
+/*20040112 to latest
+/q3 : /quickspell (/q1) + /quickspell2 (/q2)
+/q3: /quickspell (/q1) + /quickspell2 (/q2)
+*/
+ MSG_EXPLAIN_QUICKSPELL3 = 0x303,
+#endif
+#if PACKETVER >= 20040202
+/*20040202 to latest
+/찌릿
+/bzz
+*/
+ MSG_EMOTION_STARE = 0x304,
+/*20040202 to latest
+/밥
+/rice
+*/
+ MSG_EMOTION_HUNGRY = 0x305,
+/*20040202 to latest
+/멋져
+/awsm
+*/
+ MSG_EMOTION_COOL = 0x306,
+/*20040202 to latest
+/메롱
+/meh
+*/
+ MSG_EMOTION_MERONG = 0x307,
+/*20040202 to latest
+/부끄
+/shy
+*/
+ MSG_EMOTION_SHY = 0x308,
+/*20040202 to latest
+/쓱쓱
+/pat
+*/
+ MSG_EMOTION_GOODBOY = 0x309,
+/*20040202 to latest
+/엠탐
+/mp
+*/
+ MSG_EMOTION_SPTIME = 0x30a,
+/*20040202 to latest
+/질질
+/slur
+*/
+ MSG_EMOTION_SEXY = 0x30b,
+/*20040202 to latest
+/컴온
+/com
+*/
+ MSG_EMOTION_COMEON = 0x30c,
+/*20040202 to latest
+/하품
+/yawn
+*/
+ MSG_EMOTION_SLEEPY = 0x30d,
+/*20040202 to latest
+/축하
+/grat
+*/
+ MSG_EMOTION_CONGRATULATION = 0x30e,
+/*20040202 to latest
+/피탐
+/hp
+*/
+ MSG_EMOTION_HPTIME = 0x30f,
+/*20040202 to latest
+/이모션 : 현재 사용가능한 이모션의 리스트를 보여줍니다.
+/emotion: views the emoticon list.
+*/
+ MSG_EXPLAIN_EMOTION = 0x310,
+#endif
+#if PACKETVER >= 20040223
+/*20040223 to 20040302
+키보드를 이용해서 스킬단축창2 와 3의 스킬들을 사용합니다. [/bm ON]
+20040308 to latest
+키보드를 이용해서 스킬단축창 1,2,3의 스킬들을 사용합니다. [/bm ON]
+Skills assigned to shortcut windows 1, 2, 3 are Enabled. [/bm ON]
+*/
+ MSG_BATTLE_ON = 0x311,
+/*20040223 to 20040302
+키보드를 이용해서 스킬단축창2 와 3의 스킬들을 사용하지못합니다. [/bm OFF]
+20040308 to latest
+키보드를 이용해서 스킬단축창 1,2,3의 스킬들을 사용하지못합니다. [/bm OFF]
+Skills assigned to shortcut windows 1, 2, 3 are Disabled. [/bm OFF]
+*/
+ MSG_BATTLE_OFF = 0x312,
+/*20040223 to latest
+/battlemode : Q ~ O 를 누르면 스킬단축창2의 스킬들이 사용됩니다.
+/battlemode: allows you to use skills assigned to Shortcut Window 2 by pressing Q ~ O keys.
+*/
+ MSG_EXPLAIN_BATTLE = 0x313,
+/*20040223 to 20040302
+ A ~ L 을 누르면 스킬단축창3의 스킬들이 사용됩니다. On Off
+20040308 to latest
+ A ~ L 을 누르면 스킬단축창3의 스킬들이 사용됩니다.
+A ~ L keys allow you to use skills assigned to Shortcut Window 3.
+*/
+ MSG_EXPLAIN_BATTLE2 = 0x314,
+/*20040223 to latest
+라그나로크를 실행하실때 다른 프로그램을 띄우시면 게임이 느려질수도있습니다.
+Please remember, programs running in the background while playing may affect the game's performance.
+*/
+ MSG_EXPLAIN_LAG = 0x315,
+#endif
+#if PACKETVER >= 20040302
+/*20040302 to 20041130
+천사님 제 목소리 들리세여? ^^;
+20041206 to latest
+천사님 제 목소리 들리세요? ^^;
+Dear angel, can you hear my voice?
+*/
+ MSG_SUPERNOVICE1 = 0x316,
+/*20040302 to latest
+슈퍼노비스
+Super Novice
+*/
+ MSG_SUPERNOVICE2 = 0x317,
+/*20040302 to 20041130
+예여~
+20041206 to latest
+예요~
+Super Novice~
+*/
+ MSG_SUPERNOVICE3 = 0x318,
+/*20040302 to 20041130
+저 좀 도와주세여~ ㅠ_ㅠ
+20041206 to latest
+저 좀 도와주세요~ ㅠ_ㅠ
+Help me out~ Please~ T_T
+*/
+ MSG_SUPERNOVICE4 = 0x319,
+#endif
+#if PACKETVER >= 20040308
+/*20040308 to 20041012
+ 입양을 요청해왔습니다. 승낙하시겠습니까?
+20041018 to latest
+님께서 당신을 입양시키고 싶어하십니다. 승낙하시겠습니까?
+ wishes to adopt you. Do you accept?
+*/
+ MSG_SUGGEST_BABY = 0x31a,
+/*20040308 to latest
+ Z ~ > 을 누르면 스킬단축창1의 스킬들이 사용됩니다. On Off
+Z ~ > keys allow you to use skills assigned on shortcut window 1. On | Off
+*/
+ MSG_EXPLAIN_BATTLE3 = 0x31b,
+/*20040308 to latest
+ Space를 한번 누른뒤에 글자를 입력하면 채팅을 할수있습니다.
+Press the space bar to Chat when in Battle mode [/battlemode | /bm].
+*/
+ MSG_EXPLAIN_BATTLE4 = 0x31c,
+/*20040308 to latest
+게임가드 파일이 없거나 변조되었습니다. 게임가드 셋업 파일을 설치해보시기 바랍니다.
+"Either there's no Game Guard installed on the program or Game Guard is cracked. Please, try to reinstall Game Guard from its setup file."
+*/
+ MSG_NPGAMEMON_ERROR_AUTH_GAMEGUARD = 0x31d,
+/*20040308 to latest
+윈도우의 일부 시스템 파일이 손상되었습니다. 인터넷 익스플로러(IE)를 다시 설치해보시기 바랍니다.
+Some of Windows system files have been damaged. Please re-install your Internet Explorer.
+*/
+ MSG_NPGAMEMON_ERROR_CRYPTOAPI = 0x31e,
+/*20040308 to latest
+게임가드 실행에 실패했습니다. 게임가드 셋업 파일을 다시 설치해보시기 바랍니다.
+"Failed to run Game Guard. Please, try to reinstall Game Guard from its setup file."
+*/
+ MSG_NPGAMEMON_ERROR_EXECUTE = 0x31f,
+/*20040308 to latest
+불법 프로그램이 발견되었습니다. 불필요한 프로그램을 종료한 후 다시 실행해보시기 바랍니다.
+"At least one hazardous program has been detected. Please, terminate all the unnecessary programs before executing Game Guard."
+*/
+ MSG_NPGAMEMON_ERROR_ILLEGAL_PRG = 0x320,
+/*20040308 to latest
+게임가드 업데이트를 취소하셨습니다. 접속이 계속 되지 않을 경우 인터넷 및 방화벽 상태를 점검해보시기 바랍니다.
+"Game Guard update is canceled. If the disconnection continues, please, check your internet or firewall settings."
+*/
+ MSG_NPGMUP_ERROR_ABORT = 0x321,
+/*20040308 to latest
+게임가드 업데이트 서버 접속에 실패하였습니다. 잠시 후 재시도 해보거나, 인터넷 및 방화벽 상태를 점검해 보시기 바랍니다.
+"Failed to connect to Game Guard update server. Try to connect again later, or try to check the internet or firewall settings."
+*/
+ MSG_NPGMUP_ERROR_CONNECT = 0x322,
+/*20040308 to latest
+게임가드 업데이트를 완료하지 못 했습니다. 바이러스 검사를 해보시거나, PC 관리 프로그램을 사용하시면 설정을 조정한 후 게임을 실행해 보시기 바랍니다.
+"Can't complete Game Guard update process. Please, try to execute a vaccine program to remove viruses. Or, please try to modify the settings of your PC managing tool if you are using any."
+*/
+ MSG_NPGMUP_ERROR_AUTH = 0x323,
+#endif
+#if PACKETVER >= 20040311
+/*20040311 to latest
+/notrade : 거래신청을 자동으로 거절합니다 On Off
+/notrade: Declines trade offers automatically. On | Off
+*/
+ MSG_EXPLAIN_NOTRADE = 0x324,
+/*20040311 to 20040804
+거래신청을 자동으로 거절합니다 [/nt ON]
+20040809 to latest
+거래신청과 친구등록요청을 자동으로 거절합니다 [/nt ON]
+Auto decline trade offers has been Enabled. [/nt ON]
+*/
+ MSG_NOTRADE_ON = 0x325,
+/*20040311 to 20040804
+거래신청을 정상적으로 받습니다 [/nt OFF]
+20040809 to latest
+거래신청과 친구등록요청을 정상적으로 받습니다 [/nt OFF]
+Auto decline trade offers has been Disabled. [/nt OFF]
+*/
+ MSG_NOTRADE_OFF = 0x326,
+#endif
+#if PACKETVER >= 20040329
+/*20040329 to latest
+같은 아이템은 한번에 30000개 이상은 살수 없습니다.
+You cannot buy more than 30,000ea items at once.
+*/
+ MSG_LIMIT_BUY_ITEM = 0x327,
+/*20040329 to latest
+재료가 충분하지 않습니다.
+You do not have enough ingredients.
+*/
+ MSG_NOT_ENOUGH_SOURCE = 0x328,
+#endif
+#if PACKETVER >= 20040419
+/*20040419 to latest
+%s에 계정정보가 남아있습니다.
+Login information remains at %s.
+*/
+ MSG_ALREADY_CONNECT = 0x329,
+#endif
+#if PACKETVER >= 20040423
+/*20040423 to 20040429
+해킹조사에 관련되어 %s 까지 로그인을 금지하고 있습니다.
+20040503 to 20040906
+해킹 관련 조사를 위해 로그인이 금지되 었습니다. 자세한 문의는 해킹관련 메일로 하여주시기 바랍니다.
+20040913 to latest
+계정도용 조사를 위해 로그인이 금지되었습니다. 자세한 문의는 계정도용 관련 문의 메일로 해주시기 바랍니다.
+Account has been locked for a hacking investigation. Please contact the GM Team for more information.
+*/
+ MSG_HACKING_INVESTIGATION = 0x32a,
+/*20040423 to 20040429
+버그조사에 관련되어 %s 까지 로그인을 금지하고 있습니다.
+20040503 to latest
+귀하는 버그관련 조사중이므로 일시적으로 접속을 금합니다
+This account has been temporarily prohibited from login due to a bug-related investigation.
+*/
+ MSG_BUG_INVESTIGATION = 0x32b,
+/*20040423 to latest
+수리가능한 아이템
+Repairable items
+*/
+ MSG_REPAIRITEMLIST = 0x32c,
+#endif
+#if PACKETVER >= 20040426
+/*20040426 to latest
+아이템 수리 성공
+Item has been successfully repaired.
+*/
+ MSG_ITEM_REPAIR_SUCCEESS = 0x32d,
+/*20040426 to latest
+아이템 수리 실패 (재료 또는 상대와의 거리등을 확인해주십시요)
+You have failed to repair this item. Please check the distance between you and opponent.
+*/
+ MSG_ITEM_REPAIR_FAIL = 0x32e,
+#endif
+#if PACKETVER >= 20040531
+/*20040531 to latest
+시스템 상황을 지속적으로 체크 합니다.[운영자모드] [/sc ON]
+System process enabled [GM mode] [/sc ON]
+*/
+ MSG_SYSTEM_CHECK_ON = 0x32f,
+/*20040531 to latest
+시스템 상황을 지속적으로 체크 하지 않습니다.[운영자모드] [/sc OFF]
+System process disabled [GM mode] [/sc OFF]
+*/
+ MSG_SYSTEM_CHECK_OFF = 0x330,
+/*20040531 to latest
+/systemcheck : 시스템 상황을 지속적으로 체크 합니다.[운영자모드]
+/systemcheck: Check the system process [GM mode] On | Off
+*/
+ MSG_EXPLAIN_SYSTEM_CHECK = 0x331,
+#endif
+#if PACKETVER >= 20040614
+/*20040614 to latest
+(%s)님이 친구 신청을 하셨습니다. 친구가 되시겠습니까?
+(%s) wishes to be friends with you. Would you like to accept?
+*/
+ MSG_SUGGEST_JOIN_FRIEND = 0x332,
+#endif
+#if PACKETVER >= 20040621
+/*20040621 to latest
+더 이상 친구 등록을 하실수 없습니다.
+Your Friend List is full.
+*/
+ MSG_FRIEND_ADD_ME_OVERSIZE = 0x333,
+/*20040621 to latest
+(%s)님이 더 이상 친구 등록을 하실수 없습니다.
+(%s)'s Friend List is full.
+*/
+ MSG_FRIEND_ADD_OTHER_OVERSIZE = 0x334,
+/*20040621 to latest
+(%s)님과 친구가 되셨습니다.
+You have become friends with (%s).
+*/
+ MSG_FRIEND_ADD_SUCCEED = 0x335,
+/*20040621 to latest
+(%s)님이 친구 되기를 원하지 않습니다.
+(%s) does not want to be friends with you.
+*/
+ MSG_FRIEND_ADD_FALSE = 0x336,
+/*20040621 to latest
+이 캐릭터는 %s 까지 블럭되어있습니다.
+This character will be blocked to use until %s.
+*/
+ MSG_BLOCKED = 0x337,
+/*20040621 to 20040621
+천만제니이상을 입력하신 아이템은 천만제니로 판매됩니다.
+20040628 to latest
+천만제니 이상 입력하셔도 가격은 천만제니로 판매됩니다.
+Price will be fixed at 10,000,000 zeny, even if you enter higher price.
+*/
+ MSG_OVERPRICE = 0x338,
+#endif
+#if PACKETVER >= 20040628
+/*20040628 to latest
+(적음)
+(Very low)
+*/
+ MSG_LITTLEUSER = 0x339,
+/*20040628 to latest
+(약간 적음)
+(Low)
+*/
+ MSG_ALITTLEUSER = 0x33a,
+/*20040628 to latest
+(보통)
+(Normal)
+*/
+ MSG_NORMLEUSER = 0x33b,
+/*20040628 to latest
+(많음)
+(High)
+*/
+ MSG_MANYUSER = 0x33c,
+/*20040628 to latest
+(매우 많음)
+(Very high)
+*/
+ MSG_VERYMANYUSER = 0x33d,
+/*20040628 to 20040713
+비매너에 의해 GM으로부터 채팅금지가 %d 분간 적용됩니다.
+20040726 to latest
+비매너에 의해 운영자로부터 채팅금지가 적용됩니다.
+You have been blocked from using chat and skills for %d minutes by the GM Team.
+*/
+ MSG_GM_BAD_MANNER_START = 0x33e,
+/*20040628 to latest
+GM에 의한 채팅금지가 %d 분 남아 있습니다.
+%d minutes remain until release from the GM penalty.
+*/
+ MSG_GM_BAD_MANNER_REMAIN = 0x33f,
+/*20040628 to latest
+GM에 의한 채팅금지가 해지 되었습니다.
+You have been released from the GM penalty.
+*/
+ MSG_GM_BAD_MANNER_END = 0x340,
+/*20040628 to 20040713
+도배 방지 시스템으로 인한 채팅금지가 %d 분간 적용됩니다.
+20040726 to latest
+도배 방지 시스템으로 인한 자동 채팅금지가 적용됩니다.
+You have been blocked from using chat and skills for %d as an automatic penalty.
+*/
+ MSG_AUTO_BAD_MANNER_START = 0x341,
+/*20040628 to latest
+도배 방지 시스템으로 인한 채팅금지가 %d 분 남아 있습니다.
+%d minutes remain until release from auto penalty.
+*/
+ MSG_AUTO_BAD_MANNER_REMAIN = 0x342,
+/*20040628 to latest
+도배 방지 시스템으로 인한 채팅금지가 해지되었습니다. 게임진행 시에는 도배에 대해서 주의하여 주시기 바랍니다.
+You have been released from the auto penalty. Please refrain from spamming in-game.
+*/
+ MSG_AUTO_BAD_MANNER_END = 0x343,
+#endif
+#if PACKETVER >= 20040705
+/*20040705 to latest
+%s님과 %s님이 이혼하셨습니다.
+%s and %s have divorced from each other.
+*/
+ MSG_DIVORCE = 0x344,
+/*20040705 to 20041108
+星鬪士 %s의 태양의 장소로 %s 가 지정됐습니다.
+20041115 to latest
+拳聖 %s의 태양의 장소로 %s 가 지정됐습니다.
+%s has been designated as Gravity %s's Solar Space.
+20041220 to 20050817
+태양과 달과 별의 전사 %s의 태양의 장소로 %s 가 지정됐습니다.
+*/
+ MSG_STARPLACE1 = 0x345,
+/*20040705 to 20041108
+星鬪士 %s의 달의 장소로 %s 가 지정됐습니다.
+20041115 to latest
+拳聖 %s의 달의 장소로 %s 가 지정됐습니다.
+%s has been designated as Gravity %s's Luna Space.
+20041220 to 20050817
+태양과 달과 별의 전사 %s의 달의 장소로 %s 가 지정됐습니다.
+*/
+ MSG_STARPLACE2 = 0x346,
+/*20040705 to 20041108
+星鬪士 %s의 별의 장소로 %s 가 지정됐습니다.
+20041115 to latest
+拳聖 %s의 별의 장소로 %s 가 지정됐습니다.
+%s has been designated as Gravity %s's Stellar Space.
+20041220 to 20050817
+태양과 달과 별의 전사 %s의 별의 장소로 %s 가 지정됐습니다.
+*/
+ MSG_STARPLACE3 = 0x347,
+/*20040705 to 20040726
+星鬪士 %s의 태양의 장소 : %s
+20040804 to 20041108
+星鬪士 %s의 태양의 장소는 %s 입니다
+20041115 to latest
+拳聖 %s의 태양의 장소는 %s 입니다
+Gravity %s's Solar Space: %s
+20041220 to 20050817
+태양과 달과 별의 전사 %s의 태양의 장소는 %s 입니다
+*/
+ MSG_STARPLACE4 = 0x348,
+/*20040705 to 20040726
+星鬪士 %s의 달의 장소 : %s
+20040804 to 20041108
+星鬪士 %s의 달의 장소는 %s 입니다
+20041115 to latest
+拳聖 %s의 달의 장소는 %s 입니다
+Gravity %s's Luna Space: %s
+20041220 to 20050817
+태양과 달과 별의 전사 %s의 달의 장소는 %s 입니다
+*/
+ MSG_STARPLACE5 = 0x349,
+/*20040705 to 20040726
+星鬪士 %s의 별의 장소 : %s
+20040804 to 20041108
+星鬪士 %s의 별의 장소는 %s 입니다
+20041115 to latest
+拳聖 %s의 별의 장소는 %s 입니다
+Gravity %s's Stellar Space: %s
+20041220 to 20050817
+태양과 달과 별의 전사 %s의 별의 장소는 %s 입니다
+*/
+ MSG_STARPLACE6 = 0x34a,
+#endif
+#if PACKETVER >= 20040707
+/*20040707 to 20041108
+星鬪士 %s의 태양의 몬스터로 %s 가 지정됐습니다.
+20041115 to latest
+拳聖 %s의 태양의 몬스터로 %s 가 지정됐습니다.
+%s has been designated as Gravity %s's Solar Monster.
+20041220 to 20050817
+태양과 달과 별의 전사 %s의 태양의 몬스터로 %s 가 지정됐습니다.
+*/
+ MSG_STARMONSTER1 = 0x34b,
+/*20040707 to 20041108
+星鬪士 %s의 달의 몬스터로 %s 가 지정됐습니다.
+20041115 to latest
+拳聖 %s의 달의 몬스터로 %s 가 지정됐습니다.
+%s has been designated as Gravity %s's Luna Monster.
+20041220 to 20050817
+태양과 달과 별의 전사 %s의 달의 몬스터로 %s 가 지정됐습니다.
+*/
+ MSG_STARMONSTER2 = 0x34c,
+/*20040707 to 20041108
+星鬪士 %s의 별의 몬스터로 %s 가 지정됐습니다.
+20041115 to latest
+拳聖 %s의 별의 몬스터로 %s 가 지정됐습니다.
+%s has been designated as Gravity %s's Stellar Monster.
+20041220 to 20050817
+태양과 달과 별의 전사 %s의 별의 몬스터로 %s 가 지정됐습니다.
+*/
+ MSG_STARMONSTER3 = 0x34d,
+/*20040707 to 20040726
+星鬪士 %s의 태양의 몬스터 : %s
+20040804 to 20041108
+星鬪士 %s의 태양의 몬스터는 %s 입니다
+20041115 to latest
+拳聖 %s의 태양의 몬스터는 %s 입니다
+Gravity %s's Solar Monster: %s
+20041220 to 20050817
+태양과 달과 별의 전사 %s의 태양의 몬스터는 %s 입니다
+*/
+ MSG_STARMONSTER4 = 0x34e,
+/*20040707 to 20040726
+星鬪士 %s의 달의 몬스터 : %s
+20040804 to 20041108
+星鬪士 %s의 달의 몬스터는 %s 입니다
+20041115 to latest
+拳聖 %s의 달의 몬스터는 %s 입니다
+Gravity %s's Luna Monster: %s
+20041220 to 20050817
+태양과 달과 별의 전사 %s의 달의 몬스터는 %s 입니다
+*/
+ MSG_STARMONSTER5 = 0x34f,
+/*20040707 to 20040726
+星鬪士 %s의 별의 몬스터 : %s
+20040804 to 20041108
+星鬪士 %s의 별의 몬스터는 %s 입니다
+20041115 to latest
+拳聖 %s의 별의 몬스터는 %s 입니다
+Gravity %s's Stellar Monster: %s
+20041220 to 20050817
+태양과 달과 별의 전사 %s의 별의 몬스터는 %s 입니다
+*/
+ MSG_STARMONSTER6 = 0x350,
+/*20040707 to latest
+/window : 창 위치 이동시 다른 창과 달라붙는 속성이 들어갑니다 On Off
+/window: Display windows will snap/dock together. On | Off
+*/
+ MSG_EXPLAIN_WINDOW = 0x351,
+/*20040707 to latest
+창 위치 이동시 다른 창과 잘 붙습니다 [/wi ON]
+Display window docking enabled. [/wi ON]
+*/
+ MSG_WINDOW_ON = 0x352,
+/*20040707 to latest
+창 위치 이동시 다른 창과 붙으려는 속성을 가지지 않습니다 [/wi OFF]
+Display window docking disabled. [/wi OFF]
+*/
+ MSG_WINDOW_OFF = 0x353,
+#endif
+#if PACKETVER >= 20040713
+/*20040713 to latest
+/pvpinfo : 자신의 PVP 승패와 PVP 포인트를 알 수 있습니다.
+/pvpinfo: shows your PVP result and PVP points.
+*/
+ MSG_EXPLAIN_PVP_INFO = 0x354,
+/*20040713 to latest
+현재 %d승, %d패, PVP포인트는 %d입니다.
+You have won %d times and have lost %d times in PVP. Current points %d.
+*/
+ MSG_PVP_INFO = 0x355,
+#endif
+#if PACKETVER >= 20040726
+/*20040726 to latest
+매너 포인트를 성공적으로 보냈습니다.
+A manner point has been successfully aligned.
+*/
+ MSG_SEND_MANNER_POINT = 0x356,
+#endif
+#if PACKETVER >= 20040809
+/*20040809 to latest
+현재 이곳은 PK 가능 지역입니다. 불의의 공격에 유의 하시기 바랍니다.
+You are in a PK area. Please beware of sudden attack.
+*/
+ MSG_PKZONE = 0x357,
+#endif
+#if PACKETVER >= 20040817
+/*20040817 to latest
+게임가드 업데이트가 바이러스나 스파이웨어와의 충돌로 실패했습니다. 백신 프로그램/스파이웨어 제거 프로그램을 사용한 후 접속해 주십시기 바랍니다
+Game Guard update has been failed when either Virus or Spyware conflicted with. Please, Uninstall Spyware and Virus protection program before you log in.
+*/
+ MSG_NPGAMEMON_ERROR_100ERROR = 0x358,
+#endif
+#if PACKETVER >= 20040823
+/*20040823 to latest
+윈도우 호환성 문제로 프로그램을 종료합니다. 게임을 다시 실행해 주시기 바랍니다
+Program has encountered an error related to Windows compatibility. Please start the game again.
+*/
+ MSG_NPGAMEMON_XP_COMPATIBILITY = 0x359,
+#endif
+#if PACKETVER >= 20040906
+/*20040906 to latest
+채팅, 스킬, 아이템을 사용할수없게 되었습니다.
+You have been blocked from chatting, using skills and items.
+*/
+ MSG_PK_HONOR = 0x35a,
+/*20040906 to latest
+캐릭터 삭제 작업중이므로 접속이 일시적으로 제한됩니다.
+Login is temporarily unavailable while this character is being deleted.
+*/
+ MSG_DELETING_CHAR = 0x35b,
+/*20040906 to latest
+결혼 상대자의 캐릭터 삭제 작업중이므로 접속이 일시적으로 제한됩니다.
+Login is temporarily unavailable while your spouse character is being deleted.
+*/
+ MSG_DELETING_SPOUSE_CHAR = 0x35c,
+#endif
+#if PACKETVER >= 20040913
+/*20040913 to latest
+Novice
+*/
+ MSG_NOVICE = 0x35d,
+/*20040913 to latest
+Swordman
+*/
+ MSG_SWORDMAN = 0x35e,
+/*20040913 to latest
+Magician
+Mage
+*/
+ MSG_MAGICIAN = 0x35f,
+/*20040913 to latest
+Archer
+*/
+ MSG_ARCHER = 0x360,
+/*20040913 to latest
+Acolyte
+*/
+ MSG_ACOLYTE = 0x361,
+/*20040913 to latest
+Merchant
+*/
+ MSG_MERCHANT = 0x362,
+/*20040913 to latest
+Thief
+*/
+ MSG_THIEF = 0x363,
+/*20040913 to latest
+Knight
+*/
+ MSG_KNIGHT = 0x364,
+/*20040913 to latest
+Prieset
+Priest
+*/
+ MSG_PRIEST = 0x365,
+/*20040913 to latest
+Wizerd
+Wizard
+*/
+ MSG_WIZARD = 0x366,
+/*20040913 to latest
+Blacksmith
+*/
+ MSG_BLACKSMITH = 0x367,
+/*20040913 to latest
+Hunter
+*/
+ MSG_HUNTER = 0x368,
+/*20040913 to latest
+Assassin
+*/
+ MSG_ASSASSIN = 0x369,
+/*20040913 to latest
+Novice
+*/
+ MSG_NOVICE_W = 0x36a,
+/*20040913 to latest
+Swordman
+*/
+ MSG_SWORDMAN_W = 0x36b,
+/*20040913 to latest
+Magician
+Mage
+*/
+ MSG_MAGICIAN_W = 0x36c,
+/*20040913 to latest
+Archer
+*/
+ MSG_ARCHER_W = 0x36d,
+/*20040913 to latest
+Acolyte
+*/
+ MSG_ACOLYTE_W = 0x36e,
+/*20040913 to latest
+Merchant
+*/
+ MSG_MERCHANT_W = 0x36f,
+/*20040913 to latest
+Thief
+*/
+ MSG_THIEF_W = 0x370,
+/*20040913 to latest
+Knight
+*/
+ MSG_KNIGHT_W = 0x371,
+/*20040913 to latest
+Prieset
+Priest
+*/
+ MSG_PRIEST_W = 0x372,
+/*20040913 to latest
+Wizerd
+Wizard
+*/
+ MSG_WIZARD_W = 0x373,
+/*20040913 to latest
+Blacksmith
+*/
+ MSG_BLACKSMITH_W = 0x374,
+/*20040913 to latest
+Hunter
+*/
+ MSG_HUNTER_W = 0x375,
+/*20040913 to latest
+Assassin
+*/
+ MSG_ASSASSIN_W = 0x376,
+#endif
+#if PACKETVER >= 20041018
+/*20041018 to latest
+(%s)님을 아이로 입양신청
+Send an adoption request to %s
+*/
+ MSG_REQ_JOIN_BABY = 0x377,
+/*20041018 to 20041025
+아이가 되시면 전승을 하실수 없게 됩니다. 그래도 괜찮습니까?
+20041101 to latest
+아이가 되면 전승을 할수없고 스텟은 80이상 올릴수없게되며 HP와 SP가 줄어듭니다. 그래도 괜찮습니까?
+When you become a child, you will be unable to become a Transcendent Class character, all stats will be limited to a maximum of 80, and Max HP/SP will be reduced. Are you sure that you want to be adopted?
+*/
+ MSG_SUGGEST_BABY2 = 0x378,
+#endif
+#if PACKETVER >= 20041101
+/*20041101 to latest
+모든 나쁜 상태이상이 제거 되었습니다.
+All abnormal status effects have been removed.
+*/
+ MSG_GOSPEL1 = 0x379,
+/*20041101 to latest
+1분간 모든 상태이상에 대해 면역이 됩니다.
+You will be immune to abnormal status effects for the next minute.
+*/
+ MSG_GOSPEL2 = 0x37a,
+/*20041101 to latest
+1분간 최대 생명력이 크게 늘어납니다.
+Your Max HP will stay increased for the next minute.
+*/
+ MSG_GOSPEL3 = 0x37b,
+/*20041101 to latest
+1분간 최대 마법력이 크게 늘어납니다.
+Your Max SP will stay increased for the next minute.
+*/
+ MSG_GOSPEL4 = 0x37c,
+/*20041101 to latest
+1분간 모든 능력이 크게 상승합니다.
+All of your Stats will stay increased for the next minute.
+*/
+ MSG_GOSPEL5 = 0x37d,
+/*20041101 to latest
+1분간 사용하는 무기에 성스러운 속성이 부여됩니다.
+Your weapon will remain blessed with Holy power for the next minute.
+*/
+ MSG_GOSPEL6 = 0x37e,
+/*20041101 to latest
+1분간 사용하는 갑옷에 성스러운 속성이 부여됩니다.
+Your armor will remain blessed with Holy power for the next minute.
+*/
+ MSG_GOSPEL7 = 0x37f,
+/*20041101 to latest
+10초간 방어력이 크게 상승합니다.
+Your Defense will stay increased for the next 10 seconds.
+*/
+ MSG_GOSPEL8 = 0x380,
+/*20041101 to latest
+1분간 공격력이 크게 증가합니다.
+Your Attack strength will be increased for the next minute.
+*/
+ MSG_GOSPEL9 = 0x381,
+/*20041101 to latest
+1분간 명중률과 회피율이 크게 상승합니다.
+Your Accuracy and Flee Rate will be increased for the next minute.
+*/
+ MSG_GOSPEL10 = 0x382,
+#endif
+#if PACKETVER >= 20041108
+/*20041108 to latest
+아이를 한번 입양했던 부부는 추가 입양이 불가능합니다.
+You cannot adopt more than 1 child.
+*/
+ MSG_BABY1 = 0x383,
+/*20041108 to latest
+부부가 둘다 레벨70이 넘어야 아이를 입양할수있습니다.
+You must be at least character level 70 in order to adopt someone.
+*/
+ MSG_BABY2 = 0x384,
+/*20041108 to 20041108
+블랙스미스 랭킹포인트가 %d 상승해서 %d 포인트가 되었습니다.
+20041115 to latest
+[POINT] 블랙스미스 랭킹포인트가 %d 상승해서 %d 포인트가 되었습니다.
+[Point] You have been rewarded with %d Blacksmith rank points. Your point total is %d.
+*/
+ MSG_BLACKSMITH_POINT = 0x385,
+/*20041108 to 20041108
+알케미스트 랭킹포인트가 %d 상승해서 %d 포인트가 되었습니다.
+20041115 to latest
+[POINT] 알케미스트 랭킹포인트가 %d 상승해서 %d 포인트가 되었습니다.
+[Point] You have been rewarded with %d Alchemist rank points. Your point total is %d.
+*/
+ MSG_ALCHEMIST_POINT = 0x386,
+#endif
+#if PACKETVER >= 20041115
+/*20041115 to 20041130
+천사님 제 목소리 들리세요? ^^;
+Dear angel, can you hear my voice?
+20041206 to latest
+X
+Help me out~ Please~ T_T
+*/
+ MSG_SUPERNOVICE11 = 0x387,
+/*20041115 to 20041130
+슈퍼노비스
+Super Novice
+20041206 to latest
+X
+Help me out~ Please~ T_T
+*/
+ MSG_SUPERNOVICE12 = 0x388,
+/*20041115 to 20041130
+예요~
+Super Novice~
+20041206 to latest
+X
+Help me out~ Please~ T_T
+*/
+ MSG_SUPERNOVICE13 = 0x389,
+/*20041115 to 20041130
+저 좀 도와주세요~ ㅠ_ㅠ
+Help me out~ Please~ T_T
+20041206 to latest
+X
+Help me out~ Please~ T_T
+*/
+ MSG_SUPERNOVICE14 = 0x38a,
+/*20041115 to latest
+/notalkmsg2 : 채팅내용을 채팅창에 표시하지 않습니다 (길드말 포함) On Off
+/notalkmsg2: Hides chat messages(including guild chat). On Off
+*/
+ MSG_EXPLAIN_NOTALKMSG2 = 0x38b,
+/*20041115 to latest
+채팅내용을 채팅창에 표시합니다 [/nm2 ON]
+Show chat messages. [/nm2 ON]
+*/
+ MSG_NOTALKMSG2_ON = 0x38c,
+/*20041115 to latest
+채팅내용을 채팅창에 표시하지않습니다 (길드말 포함) [/nm2 OFF]
+Hide chat messages(including guild chat) [/nm2 OFF]
+*/
+ MSG_NOTALKMSG2_OFF = 0x38d,
+#endif
+#if PACKETVER >= 20041129
+/*20041129 to latest
+제련가능한 아이템
+Upgradable Weapons
+*/
+ MSG_REFINEITEMLIST = 0x38e,
+/*20041129 to latest
+제련한 무기 : %s
+Weapons upgraded: %s
+*/
+ MSG_ITEM_REFINE_SUCCEESS = 0x38f,
+/*20041129 to latest
+제련한 무기 : %s
+Weapons upgraded: %s
+*/
+ MSG_ITEM_REFINE_FAIL = 0x390,
+/*20041129 to latest
+무기제련스킬의 레벨이 부족해서 %s 제련을 할수없습니다.
+You cannot upgrade %s until you level up your Upgrade Weapon skill.
+*/
+ MSG_ITEM_REFINE_FAIL_LEVEL = 0x391,
+/*20041129 to latest
+제련에 필요한 아이템 (%s) 이 없으므로 제련할수없습니다.
+You lack a necessary item %s to upgrade this weapon.
+*/
+ MSG_ITEM_REFINE_FAIL_MATERIAL = 0x392,
+#endif
+#if PACKETVER >= 20041206
+/*20041206 to latest
+완벽하게 코팅되어있어서 풀스트립이 통하지 않습니다.
+Full Divestment cannot pierce the target. The target is fully shielded.
+*/
+ MSG_FULLSTRIP = 0x393,
+#endif
+#if PACKETVER >= 20041213
+/*20041213 to latest
+결혼한 캐릭터는 입양시킬수 없습니다.
+You cannot adopt a married person.
+*/
+ MSG_BABY3 = 0x394,
+#endif
+#if PACKETVER >= 20041220
+/*20041220 to latest
+친구로 등록된 이름과 비슷하지만 등록된 이름이 아닙니다. 아는사람인지 확인하십시요.
+This name is not registered in your Friend List. Please check the name again.
+*/
+ MSG_ID_WARNING = 0x395,
+/*20041220 to latest
+/hi 또는 /hi 문장 : 친구로 등록된 캐릭터들에게 인사를 합니다.
+/hi or /hi message: Send greetings to people who are online and registered on your Friend List.
+*/
+ MSG_EXPLAIN_HI = 0x396,
+#endif
+#if PACKETVER >= 20041227
+/*20041227 to latest
+길드원의 이름과 비슷하지만 길드원이 아닙니다. 길드원인지 확인하십시요.
+This character is not your guildsman. Please check the name again.
+*/
+ MSG_ID_WARNING_GUILD = 0x397,
+#endif
+#if PACKETVER >= 20050117
+/*20050117 to latest
+9999만제니 이상 입력하셔도 가격은 9999만제니로 판매됩니다.
+Please be aware that the maximum selling price is fixed as 2 Billion. You cannot sell an item higher than that.
+*/
+ MSG_OVERPRICE9999 = 0x398,
+#endif
+#if PACKETVER >= 20050131
+/*20050131 to latest
+친구의 귓속말은 [ Friend ] , 길드원은 [ Member ] 로 표시됩니다.
+Whispers from friends are displayed as [ Friend ], and ones from guildsmen are displayed as [ Member ].
+*/
+ MSG_EXPLAIN_SACHING1 = 0x399,
+/*20050131 to latest
+( From 캐릭터이름 : ) 이라고 표시 되는 귓속말은 친구나 길드원이 아닙니다.
+( From character name: ) is from an anonymous character who is neither your friend nor guildsman.
+*/
+ MSG_EXPLAIN_SACHING2 = 0x39a,
+#endif
+#if PACKETVER >= 20050214
+/*20050214 to 20050310
+블랙스미스의 상위 10위권 랭킹을 보여줍니다.
+20050314 to latest
+/blacksmith : 블랙스미스의 상위 10위권 랭킹을 보여줍니다.
+/blacksmith: Shows top 10 Blacksmiths in the server.
+*/
+ MSG_EXPLAIN_BLACKSMITH = 0x39b,
+/*20050214 to 20050310
+알케미스트의 상위 10위권 랭킹을 보여줍니다.
+20050314 to latest
+/alchemist : 알케미스트의 상위 10위권 랭킹을 보여줍니다.
+/alchemist: Shows top 10 Alchemists in the server.
+*/
+ MSG_EXPLAIN_ALCHEMIST = 0x39c,
+/*20050214 to latest
+ALT+Y : 여러가지 명령어를 쉽게 쓸수있는 윈도우가 열립니다.
+ALT+Y: Opens a window which allows you to use various commands with ease.
+*/
+ MSG_EXPLAIN_ALTY = 0x39d,
+#endif
+#if PACKETVER >= 20050328
+/*20050328 to latest
+[POINT] 태권미션 랭킹포인트가 %d 상승해서 %d 포인트가 되었습니다.
+[POINT] You have been rewarded with %d Tae-Kwon Mission rank points. Your point total is %d.
+*/
+ MSG_TAEKWON_POINT = 0x39e,
+#endif
+#if PACKETVER >= 20050404
+/*20050404 to latest
+[태권미션] Target Monster : %s (%d%%)
+[Taekwon Mission] Target Monster: %s (%d%%)
+*/
+ MSG_TAEKWON_MISSION = 0x39f,
+#endif
+#if PACKETVER >= 20050502
+/*20050502 to latest
+게임가드 초기화 에러 : %lu
+Error - Failed to initialize GameGuard: %lu
+*/
+ MSG_INIT_ERROR = 0x3a0,
+/*20050502 to latest
+스피드핵이 감지되었습니다.
+Speed Hack has been detected.
+*/
+ MSG_SPEEDHACK_DETECT = 0x3a1,
+/*20050502 to latest
+불법 프로그램 (%s) 가 발견되었습니다
+The illegal program, (%s) has been detected.
+*/
+ MSG_GAMEHACK_DETECT = 0x3a2,
+/*20050502 to latest
+게임이나 게임가드가 변조되었습니다.
+The Game or Gameguard has been cracked.
+*/
+ MSG_GAMEHACK_DOUBT = 0x3a3,
+/*20050502 to latest
+게임가드가 실행 중 입니다. 잠시 후에 다시 실행해보시기 바랍니다.
+GameGuard is currently running. Please wait for sometime and restart the game.
+*/
+ MSG_ERROR_EXIST = 0x3a4,
+/*20050502 to latest
+게임이 중복 실행되었거나 게임가드가 이미 실행 중 입니다. 게임 종료 후 다시 실행해보시기 바랍니다.
+The Game or GameGuard is already running. Please close the game and restart the game.
+*/
+ MSG_GAME_EXIST = 0x3a5,
+/*20050502 to latest
+게임가드 초기화 에러입니다. 재부팅 후 다시 실행해보거나 충돌할 수 있는 다른 프로그램들을 종료한 후 실행해 보시기 바랍니다.
+Failed to intialize GameGuard. Please try again after rebooting the system or closing other programs.
+*/
+ MSG_ERROR_INIT = 0x3a6,
+/*20050502 to latest
+바이러스 및 해킹툴 검사 모듈 로딩에 실패 했습니다. 메모리 부족이거나 바이러스에 의한 감염일 수 있습니다.
+Failed to load the scan module of virus and hacking tool. It's caused by lack of memory or PC virus infection.
+*/
+ MSG_ERROR_NPSCAN = 0x3a7,
+#endif
+#if PACKETVER >= 20050509
+/*20050509 to latest
+호문클루스 정보
+Homunculus Info
+*/
+ MSG_HOMUN_INFO = 0x3a8,
+#endif
+#if PACKETVER >= 20050511
+/*20050511 to latest
+호문클루스 스킬목록
+Homunculus Skill List
+*/
+ MSG_HOMUN_SKILLLIST = 0x3a9,
+#endif
+#if PACKETVER >= 20050523
+/*20050523 to latest
+호문클루스의 이름은 영문 23, 한글 11자 이내로 정해 주세요.
+Please give your Homunculus a name no longer than 23 letters.
+*/
+ MSG_HOMUN_NAME_IN23 = 0x3aa,
+/*20050523 to latest
+이름은 단 한번만 바꿀수 있습니다. 호문클루스의 이름을 ^0000ff^0000ff %s^000000^000000 로 수정합니다. 계속 하시겠습니까?
+You can name a Homunculus only once. You have entered the name, ^0000ff%s^000000. Would you like to continue?
+*/
+ MSG_HOMUN_NAME_CHANGE_ONLYONCE = 0x3ab,
+/*20050523 to latest
+지금은 부재중~
+(Away)
+*/
+ MSG_AUTO_MSG = 0x3ac,
+/*20050523 to latest
+[자동응답]
+[Automated Message]
+*/
+ MSG_AUTO_MSG2 = 0x3ad,
+/*20050523 to latest
+부재시 타인의 귓말에 자동응답합니다.
+Send an automated message while you are away.
+*/
+ MSG_AUTO_MSG_ON = 0x3ae,
+/*20050523 to latest
+부재시 타인의 귓말에 자동응답하지 않습니다.
+Cancel automated away message.
+*/
+ MSG_AUTO_MSG_OFF = 0x3af,
+/*20050523 to latest
+자동 응답 메시지를 입력하세요.
+Please enter Away Message.
+*/
+ MSG_ENTER_AUTO_MSG = 0x3b0,
+#endif
+#if PACKETVER >= 20050530
+/*20050530 to latest
+/번쩍
+/fsh
+*/
+ MSG_EMOTION_SPARK = 0x3b1,
+/*20050530 to latest
+/빙빙
+/spin
+*/
+ MSG_EMOTION_CONFUSE = 0x3b2,
+/*20050530 to latest
+/하아
+/sigh
+*/
+ MSG_EMOTION_OHNO = 0x3b3,
+/*20050530 to latest
+/덤덤
+/dum
+*/
+ MSG_EMOTION_HUM = 0x3b4,
+/*20050530 to latest
+/시끌
+/crwd
+*/
+ MSG_EMOTION_BLABLA = 0x3b5,
+/*20050530 to latest
+/좌절
+/desp
+*/
+ MSG_EMOTION_OTL = 0x3b6,
+/*20050530 to latest
+/주사위
+/dice
+*/
+ MSG_EMOTION_DICE = 0x3b7,
+/*20050530 to latest
+/pk : 학살자의 상위 10위권 랭킹을 보여줍니다.
+/pk: Shows top 10 Slayers in the server.
+*/
+ MSG_EXPLAIN_KILLER_RANK = 0x3b8,
+/*20050530 to latest
+[POINT] 학살자 랭킹포인트가 %d 상승해서 %d 포인트가 되었습니다.
+[POINT] You have been rewarded with %d Slayer rank points. Your point total is %d.
+*/
+ MSG_KILLER_POINT = 0x3b9,
+#endif
+#if PACKETVER >= 20050608
+/*20050608 to latest
+진화 가능
+Evolution Available
+*/
+ MSG_HOMUN_EVOLVE = 0x3ba,
+/*20050608 to latest
+^ff0000^ff0000호문클루스를 삭제합니다.^000000^000000 삭제하실 경우 지금까지 키운 내역이 모두 삭제됩니다. 계속하시겠습니까?
+You have decided to delete this Homunculus ^ff0000^ff0000. When deleted, the homunculus and its history will be deleted and they cannot be restored in the future. Would you like to continue?
+*/
+ MSG_DELETE_HOMUN = 0x3bb,
+#endif
+#if PACKETVER >= 20050613
+/*20050613 to latest
+호문의 상태를 파일에 저장합니다.
+Save Homunculus status as a file.
+*/
+ MSG_TRACE_AI_ON = 0x3bc,
+/*20050613 to latest
+호문의 상태를 파일에 저장하지 않습니다.
+Do not save Homunculus status as a file.
+*/
+ MSG_TRACE_AI_OFF = 0x3bd,
+/*20050613 to latest
+Crusader
+*/
+ MSG_CRUSADER = 0x3be,
+/*20050613 to latest
+Monk
+*/
+ MSG_MONK = 0x3bf,
+/*20050613 to latest
+Sage
+*/
+ MSG_SAGE = 0x3c0,
+/*20050613 to latest
+Rouge
+Rogue
+*/
+ MSG_ROGUE = 0x3c1,
+/*20050613 to latest
+Alchemist
+*/
+ MSG_ALCHEMIST = 0x3c2,
+/*20050613 to latest
+Bard
+*/
+ MSG_BARD = 0x3c3,
+/*20050613 to latest
+Crusader_W
+Crusader
+*/
+ MSG_CRUSADER_W = 0x3c4,
+/*20050613 to latest
+Monk_W
+Monk
+*/
+ MSG_MONK_W = 0x3c5,
+/*20050613 to latest
+Sage_W
+Sage
+*/
+ MSG_SAGE_W = 0x3c6,
+/*20050613 to latest
+Rouge_W
+Rogue
+*/
+ MSG_ROGUE_W = 0x3c7,
+/*20050613 to latest
+Alchemist_W
+Alchemist
+*/
+ MSG_ALCHEMIST_W = 0x3c8,
+/*20050613 to latest
+Dancer
+*/
+ MSG_DANCER = 0x3c9,
+/*20050613 to latest
+Novice High
+High Novice
+*/
+ MSG_NOVICE_H = 0x3ca,
+/*20050613 to latest
+Swordman High
+High Swordman
+*/
+ MSG_SWORDMAN_H = 0x3cb,
+/*20050613 to latest
+Magician High
+High Mage
+*/
+ MSG_MAGICIAN_H = 0x3cc,
+/*20050613 to latest
+Archer High
+High Archer
+*/
+ MSG_ARCHER_H = 0x3cd,
+/*20050613 to latest
+Acolyte High
+High Acolyte
+*/
+ MSG_ACOLYTE_H = 0x3ce,
+/*20050613 to latest
+Merchant High
+High Merchant
+*/
+ MSG_MERCHANT_H = 0x3cf,
+/*20050613 to latest
+Thief High
+High Thief
+*/
+ MSG_THIEF_H = 0x3d0,
+/*20050613 to latest
+Novice High_W
+High Novice
+*/
+ MSG_NOVICE_H_W = 0x3d1,
+/*20050613 to latest
+Swordman High_W
+High Swordman
+*/
+ MSG_SWORDMAN_H_W = 0x3d2,
+/*20050613 to latest
+Magician High_W
+High Mage
+*/
+ MSG_MAGICIAN_H_W = 0x3d3,
+/*20050613 to latest
+Archer High_W
+High Archer
+*/
+ MSG_ARCHER_H_W = 0x3d4,
+/*20050613 to latest
+Acolyte High_W
+High Acolyte
+*/
+ MSG_ACOLYTE_H_W = 0x3d5,
+/*20050613 to latest
+Merchant High_W
+High Merchant
+*/
+ MSG_MERCHANT_H_W = 0x3d6,
+/*20050613 to latest
+Thief High_W
+High Thief
+*/
+ MSG_THIEF_H_W = 0x3d7,
+/*20050613 to latest
+Lord Knight
+*/
+ MSG_KNIGHT_H = 0x3d8,
+/*20050613 to latest
+High Priest
+*/
+ MSG_PRIEST_H = 0x3d9,
+/*20050613 to latest
+High Wizard
+*/
+ MSG_WIZARD_H = 0x3da,
+/*20050613 to latest
+White Smith
+WhiteSmith
+*/
+ MSG_BLACKSMITH_H = 0x3db,
+/*20050613 to latest
+Sniper
+*/
+ MSG_HUNTER_H = 0x3dc,
+/*20050613 to latest
+Saaassin Cross
+Assassin Cross
+*/
+ MSG_ASSASSIN_H = 0x3dd,
+/*20050613 to latest
+Lord Knight_W
+Lord Knight
+*/
+ MSG_KNIGHT_H_W = 0x3de,
+/*20050613 to latest
+High Priest_W
+High Priest
+*/
+ MSG_PRIEST_H_W = 0x3df,
+/*20050613 to latest
+High Wizard_W
+High Wizard
+*/
+ MSG_WIZARD_H_W = 0x3e0,
+/*20050613 to latest
+White Smith_W
+WhiteSmith
+*/
+ MSG_BLACKSMITH_H_W = 0x3e1,
+/*20050613 to latest
+Sniper_W
+Sniper
+*/
+ MSG_HUNTER_H_W = 0x3e2,
+/*20050613 to latest
+Saaassin Cross_W
+Assassin Cross
+*/
+ MSG_ASSASSIN_H_W = 0x3e3,
+/*20050613 to latest
+Paladin
+*/
+ MSG_CRUSADER_H = 0x3e4,
+/*20050613 to latest
+Champion
+*/
+ MSG_MONK_H = 0x3e5,
+/*20050613 to latest
+Professor
+Scholar
+*/
+ MSG_SAGE_H = 0x3e6,
+/*20050613 to latest
+Stalker
+*/
+ MSG_ROGUE_H = 0x3e7,
+/*20050613 to latest
+Creator
+Biochemist
+*/
+ MSG_ALCHEMIST_H = 0x3e8,
+/*20050613 to latest
+Clown
+Minstrel
+*/
+ MSG_BARD_H = 0x3e9,
+/*20050613 to latest
+Paladin_W
+Paladin
+*/
+ MSG_CRUSADER_H_W = 0x3ea,
+/*20050613 to latest
+Champion_W
+Champion
+*/
+ MSG_MONK_H_W = 0x3eb,
+/*20050613 to latest
+Professor_W
+Professor
+*/
+ MSG_SAGE_H_W = 0x3ec,
+/*20050613 to latest
+Stalker_W
+Stalker
+*/
+ MSG_ROGUE_H_W = 0x3ed,
+/*20050613 to latest
+Creator_W
+Creator
+*/
+ MSG_ALCHEMIST_H_W = 0x3ee,
+/*20050613 to latest
+Gypsy
+*/
+ MSG_DANCER_H = 0x3ef,
+/*20050613 to latest
+비밀번호가 지정되어 있지 않습니다. 새로운 비밀번호를 지정하시겠습니까?
+You have not set a password yet. Would you like to create one now?
+*/
+ MSG_STORE_PASSWORD_REQ = 0x3f0,
+/*20050613 to latest
+비밀번호를 3회 틀려셨습니다. 나중에 다시 시도해 주세요.
+You have incorrectly entered the password 3 times. Please try again later.
+*/
+ MSG_STORE_PASSWORD_PENALTY = 0x3f1,
+/*20050613 to latest
+비밀번호 변경이 실패하였습니다.
+Password creation has failed.
+*/
+ MSG_STORE_PASSWORD_CHANGE_NG = 0x3f2,
+/*20050613 to latest
+비밀번호는 4자리 이상 8자리이하여야만 합니다.
+Password must be 4~8 letters long.
+*/
+ MSG_STORE_PASSWORD_4_8 = 0x3f3,
+/*20050613 to latest
+비밀번호
+Password
+*/
+ MSG_STORE_PASSWORD = 0x3f4,
+/*20050613 to latest
+신규 비밀번호
+New Password
+*/
+ MSG_STORE_NEW_PASSWORD = 0x3f5,
+/*20050613 to latest
+확인 비밀번호
+Confirm Password
+*/
+ MSG_STORE_RENEW_PASSWORD = 0x3f6,
+/*20050613 to latest
+비밀번호 변경이 완료되었습니다.
+Password has been changed.
+*/
+ MSG_STORE_PASSWORD_CHANGE_OK = 0x3f7,
+/*20050613 to latest
+비밀번호가 서로 다릅니다.
+Password does not match.
+*/
+ MSG_STORE_PASSWORD_MISMATCH = 0x3f8,
+/*20050613 to latest
+비밀번호 입력
+Enter Password
+*/
+ MSG_STORE_PASSWORD_INPUT = 0x3f9,
+#endif
+#if PACKETVER >= 20050624
+/*20050624 to 20050624
+호문이 아사 직전입니다!!! 밥좀 주셈~!!
+20050628 to latest
+호문이 아사 직전입니다! 먹이를 주지 않으면 가출하게됩니다.
+Your Homunculus is starving. Please feed it, otherwise it will leave you.
+*/
+ MSG_HOMUN_HUNGRY = 0x3fa,
+/*20050624 to latest
+경험치
+EXP
+*/
+ MSG_HOMUN_EXP = 0x3fb,
+#endif
+#if PACKETVER >= 20050628
+/*20050628 to latest
+[EVENT] 이벤트에 당첨되셨습니다. 게임내에서 아이템을 지급받으십시요.
+*/
+ MSG_EVENT_RESULT = 0x3fc,
+#endif
+#if PACKETVER >= 20050704
+/*20050704 to latest
+싫어함
+Hate
+*/
+ MSG_HATE = 0x3fd,
+/*20050704 to 20050704
+매우 싫어함
+20050711 to latest
+매우싫어함
+Hate with a Passion
+*/
+ MSG_VERYHATE = 0x3fe,
+#endif
+#if PACKETVER >= 20050718
+/*20050718 to latest
+호문클루스가 사용자 인공지능으로 동작합니다.
+Homunculus has been customized.
+*/
+ MSG_HOMUN_USERAI_ON = 0x3ff,
+/*20050718 to latest
+호문클루스가 기본 인공지능으로 동작합니다.
+Homunculus has been activated with the basic AI.
+*/
+ MSG_HOMUN_USERAI_OFF = 0x400,
+#endif
+#if PACKETVER >= 20050808
+/*20050808 to latest
+편지목록
+Mail List
+*/
+ MSG_MAIL_LIST = 0x401,
+/*20050808 to latest
+편지쓰기
+Write Mail
+*/
+ MSG_MAIL_WRITE = 0x402,
+/*20050808 to latest
+편지읽기
+Read Mail
+*/
+ MSG_MAIL_READ = 0x403,
+#endif
+#if PACKETVER >= 20050817
+/*20050817 to latest
+한번 지정하시면 변경이 불가능합니다! 이 맵으로 지정하시겠습니까?
+You cannot change a map's designation once it is designated. Are you sure that you want to designate this map?
+*/
+ MSG_STARPLACE_ACCEPT = 0x404,
+#endif
+#if PACKETVER >= 20050822
+/*20050822 to 20050822
+보내실 아이템이 추가 되었습니다.
+20050829 to 20051017
+아이템창에 아이템이 추가 되었습니다.
+20051024 to latest
+메일 아이템을 수령했습니다.
+Item has been added in the Item Window.
+*/
+ MSG_MAIL_ADD_ITEM_SUCCESS = 0x405,
+/*20050822 to 20050822
+보내실 아이템이 추가 되지 않았습니다.
+20050829 to 20051017
+아이템창에 아이템이 추가 되지 않았습니다.
+20051024 to latest
+메일 아이템을 수령하지 못했습니다.
+You have failed to add the item in the Item Window.
+*/
+ MSG_MAIL_ADD_ITEM_FAILURE = 0x406,
+/*20050822 to latest
+메일 보내기가 성공하였습니다.
+You have successfully mailed a message.
+*/
+ MSG_MAIL_SEND_SUCCESS = 0x407,
+/*20050822 to latest
+메일 보내기가 실패하였습니다. 받는 사람이 존재하지 않습니다.
+You have failed to mail a message. Recipient does not exist.
+*/
+ MSG_MAIL_USER_NOT_FOUND = 0x408,
+#endif
+#if PACKETVER >= 20050829
+/*20050829 to latest
+[태양과 달과 별의 천사] 지정했던 장소들과 몬스터들이 초기화됐습니다!
+[Solar, Lunar and Stellar Angel] Designated places and monsters have been reset.
+*/
+ MSG_STAR_ANGEL = 0x409,
+/*20050829 to latest
+경매 등록이 실패했습니다.
+The minimum starting bid for auctions is 10,000,000 zeny.
+*/
+ MSG_AUCTION_ADD_FALSE = 0x40a,
+/*20050829 to latest
+경매 등록이 성공했습니다.
+You have successfully started a new auction.
+*/
+ MSG_AUCTION_ADD_TRUE = 0x40b,
+/*20050829 to latest
+해당 경매가 취소되었습니다.
+The auction has been canceled.
+*/
+ MSG_AUCTION_ADD_CANCEL = 0x40c,
+/*20050829 to latest
+입찰자가 있는 경매는 취소할 수 없습니다.
+An auction with at least one bidder cannot be canceled.
+*/
+ MSG_AUCTION_ADD_CANCEL_FALSE = 0x40d,
+#endif
+#if PACKETVER >= 20050905
+/*20050905 to latest
+메일 삭제가 성공하였습니다.
+Mail has been successfully deleted.
+*/
+ MSG_MAIL_DELETE_SUCCESS = 0x40e,
+/*20050905 to latest
+메일 삭제가 실패하였습니다.
+You have failed to delete the mail.
+*/
+ MSG_MAIL_DELETE_FAILURE = 0x40f,
+#endif
+#if PACKETVER >= 20050912
+/*20050912 to latest
+던지는 단검이 장착되었습니다.
+You have equipped throwing daggers.
+*/
+ MSG_MSG_KNIFE_EQUIPMENT_SUCCESS = 0x410,
+#endif
+#if PACKETVER >= 20050926
+/*20050926 to latest
+%s 님이 로그인했습니다.
+%s has logged in.
+*/
+ MSG_LOGIN_FRIEND = 0x411,
+/*20050926 to latest
+%s 님이 로그아웃했습니다.
+%s has logged out.
+*/
+ MSG_LOGOUT_FRIEND = 0x412,
+#endif
+#if PACKETVER >= 20051004
+/*20051004 to latest
+/loginout : 길드원과 친구들의 접속관련 메세지를 보여줍니다. On Off
+/loginout: Shows guildsmen and friends online status. On Off
+*/
+ MSG_EXPLAIN_LOGINOUT = 0x413,
+/*20051004 to latest
+친구들의 접속관련 메세지를 대화창에 표시합니다. [/li ON]
+Display online status of friends in Chat Window. [/li ON]
+*/
+ MSG_LOGINOUT_ON = 0x414,
+/*20051004 to latest
+친구들의 접속관련 메세지를 대화창에 표시하지않습니다. [/li OFF]
+Do not display online status of friends in Chat Window. [/li OFF]
+*/
+ MSG_LOGINOUT_OFF = 0x415,
+/*20051004 to latest
+이미 실행중입니다.
+It is already running.
+*/
+ MSG_SGP_CODE_ALREADY_RUNNING = 0x416,
+/*20051004 to latest
+매크로 사용이 감지되었습니다.
+Use of Macro program has been detected.
+*/
+ MSG_SGP_CODE_DETECTED_MACRO = 0x417,
+/*20051004 to latest
+스피드해킹이 감지되었습니다.
+Use of Speed hack has been detected.
+*/
+ MSG_SGP_CODE_DETECTED_SPEEDHACK = 0x418,
+/*20051004 to latest
+API 후킹이 감지되었습니다.
+API Hooking has been detected.
+*/
+ MSG_SGP_CODE_DETECTED_APIHOOK = 0x419,
+/*20051004 to latest
+메시지 후킹이 감지되었습니다.
+Message Hooking has been detected.
+*/
+ MSG_SGP_CODE_DETECTED_MSGHOOK = 0x41a,
+/*20051004 to latest
+모듈이 변조 또는 손상되었거나 버전이 일치하지 않습니다.
+Module has been modified or damaged or its version does not match.
+*/
+ MSG_SGP_CODE_NOT_EQUALENCRYPTEDDATA = 0x41b,
+#endif
+#if PACKETVER >= 20051010
+/*20051010 to latest
+(태국)귀하는 게임방 과금으로 로그인 하셨습니다.
+(Thailand) You have logged in game with PC cafe payment.
+*/
+ MSG_BILLING_PCB = 0x41c,
+#endif
+#if PACKETVER >= 20051017
+/*20051017 to latest
+이전
+Prev
+*/
+ MSG_PREV_PAGE = 0x41d,
+/*20051017 to latest
+다음
+Next
+*/
+ MSG_NEXT_PAGE = 0x41e,
+/*20051017 to latest
+경매
+Auction
+*/
+ MSG_AUCTION = 0x41f,
+/*20051017 to latest
+물품보기
+Product List
+*/
+ MSG_AUCTION_VIEW = 0x420,
+/*20051017 to latest
+등록하기
+Register
+*/
+ MSG_AUCTION_ADD = 0x421,
+/*20051017 to latest
+판매 진행상태
+Sale Status
+*/
+ MSG_AUCTION_SELL = 0x422,
+/*20051017 to latest
+구매 진행상태
+Purchase Status
+*/
+ MSG_AUCTION_BUY = 0x423,
+/*20051017 to latest
+아이템
+Item
+*/
+ MSG_ITEM2 = 0x424,
+/*20051017 to latest
+아이템명
+Name
+*/
+ MSG_ITEM_NAME2 = 0x425,
+/*20051017 to latest
+가격 / 즉시구입가격
+Current Bid / Max Bid
+*/
+ MSG_ITEM_PRICE = 0x426,
+/*20051017 to latest
+판매자
+Seller
+*/
+ MSG_SELLER = 0x427,
+/*20051017 to latest
+구매자
+Buyer
+*/
+ MSG_BUYER = 0x428,
+/*20051017 to latest
+종료시간
+End Time
+*/
+ MSG_FINISH_TIME = 0x429,
+/*20051017 to latest
+%m월 %d일 %H시
+%m %d %H
+*/
+ MSG_TIME_TYPE = 0x42a,
+/*20051017 to latest
+시간설정
+Time (Hr)
+*/
+ MSG_SET_TIME = 0x42b,
+/*20051017 to latest
+수수료
+Fee
+*/
+ MSG_CHARGE = 0x42c,
+/*20051017 to latest
+검색 된 아이템이 없습니다.
+*/
+ MSG_NOTHING_SEARCH_ITEM = 0x42d,
+/*20051017 to latest
+현재 판매중인 아이템이 없습니다.
+Your Sale List is empty.
+*/
+ MSG_NOTHING_SEARCH_SELL_ITEM = 0x42e,
+/*20051017 to latest
+현재 구매중인 아이템이 없습니다.
+Your Purchase List is empty.
+*/
+ MSG_NOTHING_SEARCH_BUY_ITEM = 0x42f,
+/*20051017 to latest
+경매정보가 정확하지 않습니다.
+Auction Information is incorrect or incomplete.
+*/
+ MSG_ERROR_AUCTION_ITEM_INFO = 0x430,
+/*20051017 to latest
+경매에 등록할 아이템 정보가 없습니다.
+You must drag and drop an item from your Inventory into the Register Window to begin a new auction.
+*/
+ MSG_NOTHING_AUCTION_ITEM_INFO = 0x431,
+/*20051017 to latest
+이미 등록된 경매입니다.
+The auction has already been registered.
+*/
+ MSG_ERROR_ADD_AUCTION = 0x432,
+/*20051017 to latest
+제시가격
+Starting Bid
+*/
+ MSG_PRICE = 0x433,
+/*20051017 to latest
+구입희망가격
+Current Bid
+*/
+ MSG_PRICE2 = 0x434,
+/*20051017 to latest
+즉시구입가격
+Buy Now Price
+*/
+ MSG_PRICE3 = 0x435,
+/*20051017 to latest
+현재소지제니
+Your Current Zeny
+*/
+ MSG_PRICE4 = 0x436,
+/*20051017 to latest
+현재최고가격
+Highest Bid
+*/
+ MSG_PRICE5 = 0x437,
+/*20051017 to latest
+이전입찰가격
+Previous Bid
+*/
+ MSG_PRICE6 = 0x438,
+/*20051017 to latest
+추가입찰가격
+Next Bid
+*/
+ MSG_PRICE7 = 0x439,
+/*20051017 to latest
+구입하시겠습니까?
+Press buy to confirm.
+*/
+ MSG_BUY_ACTION_ITEM = 0x43a,
+/*20051017 to latest
+이 가격에 판매하시겠습니까?
+Would you like to sell this item?
+*/
+ MSG_SELL_ACTION_ITEM = 0x43b,
+/*20051017 to latest
+입찰하기
+Place Bid
+*/
+ MSG_BUY_AUCTION = 0x43c,
+/*20051017 to latest
+즉시구매하기
+Buy Now
+*/
+ MSG_BUY_AUCTION2 = 0x43d,
+/*20051017 to latest
+경매종료하기
+End the Auction
+*/
+ MSG_BUY_AUCTION3 = 0x43e,
+/*20051017 to latest
+재입찰하기
+Place another Bid
+*/
+ MSG_FINISH_AUCTION = 0x43f,
+/*20051017 to latest
+해당 경매에 대한 입찰이 성공했습니다.
+You have placed a bid.
+*/
+ MSG_RESULT_BUY_TRUE = 0x440,
+/*20051017 to latest
+해당 경매에 대한 입찰이 실패했습니다.
+You have failed to place a bid.
+*/
+ MSG_RESULT_BUY_FALSE = 0x441,
+/*20051017 to latest
+제니가 충분하지 않습니다.
+You do not have enough zeny.
+*/
+ MSG_RESULT_BUY_FALSE_MONEY = 0x442,
+#endif
+#if PACKETVER >= 20051024
+/*20051024 to latest
+방어구
+Armors
+*/
+ MSG_EQUIP = 0x443,
+/*20051024 to latest
+카드
+Card
+*/
+ MSG_CARD = 0x444,
+/*20051024 to latest
+기타
+Other
+*/
+ MSG_ETC = 0x445,
+/*20051024 to latest
+경매번호
+Bid
+*/
+ MSG_AUCTION_NUM = 0x446,
+/*20051024 to latest
+검색
+Search
+*/
+ MSG_AUCTION_SEARCH = 0x447,
+/*20051024 to latest
+해당 경매를 종료했습니다.
+You have ended the auction.
+*/
+ MSG_RESULT_MY_SELL_STOP_TRUE = 0x448,
+/*20051024 to latest
+해당 경매를 종료 할 수 없습니다.
+You cannot end the auction.
+*/
+ MSG_RESULT_MY_SELL_STOP_FALSE = 0x449,
+/*20051024 to latest
+경매 번호가 정확하지 않습니다.
+Bid Number is incorrect.
+*/
+ MSG_RESULT_AUCTION_ID_FALSE = 0x44a,
+/*20051024 to latest
+받는이
+To
+*/
+ MSG_SENDER = 0x44b,
+#endif
+#if PACKETVER >= 20051205
+/*20051205 to latest
+제 목
+Title
+*/
+ MSG_TITLE2 = 0x44c,
+/*20051205 to latest
+새 메일이 도착하였습니다.
+You have received a message in the mail.
+*/
+ MSG_NEW_MAIL = 0x44d,
+/*20051205 to latest
+검색중입니다.
+Searching...
+*/
+ MSG_SEARCHING_ITEM = 0x44e,
+/*20051205 to latest
+더 이상 경매 등록할 수 없습니다. 경매 등록은 최대 5개까지 가능합니다.
+You cannot register more than 5 items in an auction at a time.
+*/
+ MSG_AUCTION_ADD_OVER = 0x44f,
+/*20051205 to latest
+더 이상 경매 물품에 입찰할 수 없습니다. 경매 물품 입찰은 최대 5개까지 가능합니다.
+You cannot place more than 5 bids at a time.
+*/
+ MSG_RESULT_BUY_OVER = 0x450,
+/*20051205 to latest
+삭제하려는 메일에 수령하지 않은 아이템이 있습니다.
+Please accept all items from your mail before deleting.
+*/
+ MSG_MAIL_DELETE_ERROR = 0x451,
+/*20051205 to latest
+메일 제목을 입력하여 주십시오.
+Please enter a title.
+*/
+ MSG_MAIL_SEND_ERROR = 0x452,
+/*20051205 to latest
+/shopping : 클릭 한번으로 상점을 열고 상점이름 오른쪽 클릭으로 상점을 닫습니다 On Off
+/shopping: Enables you to open a shop with a single left-click and close your shop with a single right-click. On Off
+*/
+ MSG_EXPLAIN_SHOPPING = 0x453,
+/*20051205 to latest
+클릭 한번으로 상점을 열고 상점이름을 오른쪽 클릭해서 상점을 닫을수있습니다. [/sh ON]
+You can now open a shop with a single left-click and close your shop with a single right-click. [sh ON].
+*/
+ MSG_SHOPPING_ON = 0x454,
+/*20051205 to latest
+더블클릭 으로 상점을 열게됩니다. [/sh OFF]
+You can open a shop by double-clicking. [/sh OFF]
+*/
+ MSG_SHOPPING_OFF = 0x455,
+/*20051205 to latest
+메일을 보내려면, 제니 입력을 완료해야 합니다.
+Please enter zeny amount before sending mail.
+*/
+ MSG_MAIL_SEND_ERROR2 = 0x456,
+/*20051205 to latest
+경매 수수료가 부족합니다.
+You do not have enough zeny to pay the Auction Fee.
+*/
+ MSG_ADD_MONEY_FALSE = 0x457,
+/*20051205 to latest
+상태보기
+View Status
+*/
+ MSG_HOMUN_SHOWINFO = 0x458,
+/*20051205 to latest
+먹이주기
+Feed
+*/
+ MSG_HOMUN_FEEDING = 0x459,
+/*20051205 to latest
+대기
+Stand By
+*/
+ MSG_HOMUN_WAITING = 0x45a,
+/*20051205 to latest
+슈퍼노비스(남)
+Super Novice (Male)
+*/
+ MSG_JOB_SUPERNOVICE_M = 0x45b,
+/*20051205 to latest
+슈퍼노비스(여)
+Super Novice (Female)
+*/
+ MSG_JOB_SUPERNOVICE_F = 0x45c,
+/*20051205 to latest
+태권소년
+Taekwon Boy
+*/
+ MSG_JOB_TAEKWON_M = 0x45d,
+/*20051205 to latest
+태권소녀
+Taekwon Girl
+*/
+ MSG_JOB_TAEKWON_F = 0x45e,
+/*20051205 to latest
+권성(남)
+Taekwon Master (Male)
+*/
+ MSG_KWONSUNG_M = 0x45f,
+/*20051205 to latest
+권성(여)
+Taekwon Master (Female)
+*/
+ MSG_KWONSUNG_F = 0x460,
+/*20051205 to latest
+소울링커(남)
+Soul Linker (Male)
+*/
+ MSG_SOULLINGKER_M = 0x461,
+/*20051205 to latest
+소울링커(여)
+Soul Linker (Female)
+*/
+ MSG_SOULLINGKER_F = 0x462,
+/*20051205 to latest
+PC방요금제로 2개이상의 계정이 접속되고있습니다. 확인후 다시 사용하시기 바랍니다.
+Please check the connection, more than 2 accounts are connected with Internet Cafe Time Plan.
+*/
+ MSG_BAN_PC_IP_UNFAIR = 0x463,
+/*20051205 to latest
+귀하는 월정액 요금제 사용자 입니다. (남은기간 : %d일)
+Your account is using monthly payment. (Remaining day: %d day)
+*/
+ MSG_BILLING_1 = 0x464,
+/*20051205 to latest
+귀하는 정량 요금제 사용자 입니다. (남은시간 : %d시간 %분 %초)
+Your account is using time limited. (Remaining time: %d hour %d minute %d second)
+*/
+ MSG_BILLING_2 = 0x465,
+#endif
+#if PACKETVER >= 20051212
+/*20051212 to latest
+해당 아이템은 메일에 첨부 할수 없는 아이템입니다.
+This item cannot be mailed.
+*/
+ MSG_MAIL_ITEM_ADD_FAILED = 0x466,
+/*20051212 to latest
+더이상 아이템을 가질수 없습니다. 아이템은 메일로 보관하겠습니다.
+You cannot accept any more items. Please try again later.
+*/
+ MSG_MAIL_ADD_ITEM_OVER_FAILURE = 0x467,
+#endif
+#if PACKETVER >= 20060109
+/*20060109 to latest
+남성
+Male
+*/
+ MSG_PTSEX1 = 0x468,
+/*20060109 to latest
+여성
+Female
+*/
+ MSG_PTSEX2 = 0x469,
+/*20060109 to latest
+새로운 유저입니다
+New User.
+*/
+ MSG_PT_NEWUSER = 0x46a,
+/*20060109 to latest
+E-mail은 캐릭터를 지울때 필요합니다.
+E-mail address is required to delete a character.
+*/
+ MSG_PT_ACINFO = 0x46b,
+/*20060109 to latest
+정확한 형식으로 입력해 주세요.
+Please enter the correct information.
+*/
+ MSG_PT_ACINFO2 = 0x46c,
+/*20060109 to latest
+이 키를 사용하세요
+Please use this key.
+*/
+ MSG_PT_NEWKEYINFO = 0x46d,
+/*20060109 to latest
+정확한 카드 패스워드를 다시 입력해주세요
+Please enter the correct card password.
+*/
+ MSG_PT_FAIL_CARDPASS = 0x46e,
+/*20060109 to latest
+PT정보
+PT Info
+*/
+ MSG_PTID1 = 0x46f,
+/*20060109 to latest
+PT_ID는 %s
+PT_ID is %s
+*/
+ MSG_PTID2 = 0x470,
+/*20060109 to latest
+NUM_ID는 %s
+NUM_ID is %s
+*/
+ MSG_PTID3 = 0x471,
+/*20060109 to latest
+잊지않게 주의하세요
+Please don't forget this information.
+*/
+ MSG_PTID4 = 0x472,
+/*20060109 to latest
+1001
+*/
+ MSG_PT_ERROR_1001 = 0x473,
+/*20060109 to latest
+1002
+*/
+ MSG_PT_ERROR_1002 = 0x474,
+/*20060109 to latest
+1003
+*/
+ MSG_PT_ERROR_1003 = 0x475,
+/*20060109 to latest
+1004
+*/
+ MSG_PT_ERROR_1004 = 0x476,
+/*20060109 to latest
+1006
+*/
+ MSG_PT_ERROR_1006 = 0x477,
+/*20060109 to latest
+1007
+*/
+ MSG_PT_ERROR_1007 = 0x478,
+/*20060109 to latest
+1008
+*/
+ MSG_PT_ERROR_1008 = 0x479,
+/*20060109 to latest
+1009
+*/
+ MSG_PT_ERROR_1009 = 0x47a,
+/*20060109 to latest
+1012
+*/
+ MSG_PT_ERROR_1012 = 0x47b,
+/*20060109 to latest
+1013
+*/
+ MSG_PT_ERROR_1013 = 0x47c,
+/*20060109 to latest
+1014
+*/
+ MSG_PT_ERROR_1014 = 0x47d,
+/*20060109 to latest
+1015
+*/
+ MSG_PT_ERROR_1015 = 0x47e,
+/*20060109 to latest
+1019
+*/
+ MSG_PT_ERROR_1019 = 0x47f,
+/*20060109 to latest
+1020
+Navigation
+*/
+ MSG_PT_ERROR_1020 = 0x480,
+/*20060109 to latest
+1021
+*/
+ MSG_PT_ERROR_1021 = 0x481,
+/*20060109 to latest
+1023
+*/
+ MSG_PT_ERROR_1023 = 0x482,
+/*20060109 to latest
+1024
+*/
+ MSG_PT_ERROR_1024 = 0x483,
+/*20060109 to latest
+1025
+*/
+ MSG_PT_ERROR_1025 = 0x484,
+/*20060109 to latest
+1027
+*/
+ MSG_PT_ERROR_1027 = 0x485,
+/*20060109 to latest
+1028
+*/
+ MSG_PT_ERROR_1028 = 0x486,
+/*20060109 to latest
+10
+*/
+ MSG_PT_ERROR_10 = 0x487,
+/*20060109 to latest
+20
+*/
+ MSG_PT_ERROR_20 = 0x488,
+/*20060109 to latest
+40
+*/
+ MSG_PT_ERROR_40 = 0x489,
+/*20060109 to latest
+50
+*/
+ MSG_PT_ERROR_50 = 0x48a,
+/*20060109 to latest
+60
+*/
+ MSG_PT_ERROR_60 = 0x48b,
+/*20060109 to latest
+70
+*/
+ MSG_PT_ERROR_70 = 0x48c,
+/*20060109 to latest
+80
+*/
+ MSG_PT_ERROR_80 = 0x48d,
+/*20060109 to latest
+90
+*/
+ MSG_PT_ERROR_90 = 0x48e,
+/*20060109 to latest
+100
+*/
+ MSG_PT_ERROR_100 = 0x48f,
+/*20060109 to latest
+110
+*/
+ MSG_PT_ERROR_110 = 0x490,
+#endif
+#if PACKETVER >= 20060126
+/*20060126 to latest
+30포인트를 받으시겠습니까?
+Do you want to receive 30 points?
+*/
+ MSG_PT_POINT1 = 0x491,
+/*20060126 to latest
+30포인트(5시간)이 충전되었습니다
+30 points (5 hours) have been added.
+*/
+ MSG_PT_POINT2 = 0x492,
+#endif
+#if PACKETVER >= 20060213
+/*20060213 to latest
+감정되지 않은 아이템은 경매에 등록할 수 없습니다.
+You cannot register Unidentified Items in auctions.
+*/
+ MSG_AUCTION_ADD_ITEM_FAILURE = 0x493,
+/*20060213 to latest
+소비 아이템은 경매에 등록할 수 없습니다.
+You cannot register this Consumable Item in an auction.
+*/
+ MSG_AUCTION_ADD_ITEM_FAILURE2 = 0x494,
+#endif
+#if PACKETVER >= 20060306
+/*20060306 to latest
+메일창을 열려면 카트창을 닫아 주십시요.
+Please close the Cart Window to open the Mail Window.
+*/
+ MSG_CLOSE_MERCHANTITEMWND = 0x495,
+/*20060306 to latest
+카트창을 열려면 메일창을 닫아 주십시요.
+Please close the Mail Window to open the Cart Window.
+*/
+ MSG_CLOSE_MAILWND = 0x496,
+#endif
+#if PACKETVER >= 20060313
+/*20060313 to latest
+탄환이 장착되었습니다.
+Bullets have been equipped.
+*/
+ MSG_MSG_BULLET_EQUIPMENT_SUCCESS = 0x497,
+/*20060313 to latest
+메일이 반송되었습니다.
+The mail has been returned to sender.
+*/
+ MSG_MAIL_RETURN_SUCCESS = 0x498,
+/*20060313 to latest
+메일이 존재하지 않습니다.
+The mail no longer exists.
+*/
+ MSG_MAIL_RETURN_FAILURE = 0x499,
+#endif
+#if PACKETVER >= 20060522
+/*20060522 to 20060522
+한시간 동안, 동일한 IP로 접속한 유저가 60건 이상입니다. 확인후 다시 사용하시기 바랍니다.
+20060523 to latest
+한시간 동안, 동일한 IP로 접속한 유저가 30건 이상입니다. 확인후 다시 사용하시기 바랍니다.
+More than 30 players sharing the same IP have logged into the game for an hour. Please check this matter.
+*/
+ MSG_BAN_PC_IP_COUNT_ALL = 0x49a,
+/*20060522 to latest
+한시간 동안, 동일한 IP로 10번 이상 접속되었습니다. 확인후 다시 사용하시기 바랍니다.
+More than 10 connections sharing the same IP have logged into the game for an hour. Please check this matter.
+*/
+ MSG_BAN_PC_IP_COUNT = 0x49b,
+/*20060522 to latest
+게임을 재시작 하십시오
+Please restart the game.
+*/
+ MSG_GAMEGUARD_RESTART = 0x49c,
+#endif
+#if PACKETVER >= 20060703
+/*20060703 to latest
+용병정보 - 아쳐타입
+Mercenary: Archer
+*/
+ MSG_MER_INFO_TYPE_ARCHER = 0x49d,
+/*20060703 to latest
+용병정보 - 검사타입
+Mercenary: Swordman
+*/
+ MSG_MER_INFO_TYPE_SWORDMAN = 0x49e,
+/*20060703 to latest
+용병정보 - 창병타입
+Mercenary: Spearman
+*/
+ MSG_MER_INFO_TYPE_LANCER = 0x49f,
+/*20060703 to 20070108
+남은시간
+20070115 to latest
+삭제시간
+Expiration
+*/
+ MSG_LEFT_TIME = 0x4a0,
+/*20060703 to latest
+신뢰도
+Loyalty
+*/
+ MSG_MER_FRIENDLY = 0x4a1,
+/*20060703 to latest
+소환횟수
+Summons
+*/
+ MSG_MER_CALLCOUNT = 0x4a2,
+/*20060703 to latest
+Kill
+*/
+ MSG_MER_KILL = 0x4a3,
+#endif
+#if PACKETVER >= 20060904
+/*20060904 to latest
+펫이 배가 고파서 당신을 원망하고 있다는 느낌이 든다.
+You can feel hatred from your pet for neglecting to feed it.
+*/
+ MSG_PET_STARVING = 0x4a4,
+/*20060904 to latest
+[POINT] 테이밍미션 랭킹포인트가 %d 상승해서 %d 포인트가 되었습니다.
+[POINT] You earned %d Taming Mission Ranking Points, giving you a total of %d points.
+*/
+ MSG_GANGSI_POINT = 0x4a5,
+/*20060904 to latest
+[테이밍미션] Target Monster : %s
+[Taming Mission] Target Monster: %s
+*/
+ MSG_GANGSI_MISSION = 0x4a6,
+#endif
+#if PACKETVER >= 20060918
+/*20060918 to latest
+/hunting : 사냥 목록을 보여줍니다.
+/hunting: You can check the your hunting list.
+*/
+ MSG_EXPLAIN_HUNTING = 0x4a7,
+/*20060918 to latest
+[천사의질문] 소녀에게 가르쳐주시어요. %s는 몇 스킬 찍으셨나요?
+[Angel's Question] Please tell me, how many %s skills do you have?
+*/
+ MSG_DEATH_Q01 = 0x4a8,
+/*20060918 to latest
+[천사의질문] 소녀에게 가르쳐주시어요. 소지하시고있는 제니를 십만으로 나누면 얼마가 되시나요?
+[Angel's Question] Please tell me, how much zeny you'll have if you divide it by 100,000?
+*/
+ MSG_DEATH_Q02 = 0x4a9,
+/*20060918 to latest
+[천사의질문] 소녀에게 가르쳐주시어요. 오늘이 몇일이신지 아시나요?
+[Angel's Question] Please tell me, what is today's date?
+*/
+ MSG_DEATH_Q03 = 0x4aa,
+/*20060918 to latest
+[천사의질문] 소녀에게 가르쳐주시어요. %s은 지금 몇이신가요?
+[Angel's Question] Please tell me, how many %s do you have?
+*/
+ MSG_DEATH_Q04 = 0x4ab,
+/*20060918 to latest
+[천사의질문] A는 1이고 Z는 26이어요. 슈노, 태권계열, 무낙계열을 담당하고있는 SiYeon씨의 알파벳을 더하면 몇이 되나요?
+[Angel's Question] If A is 1, B is 2, and so on, and if Z is 26, what number do you get if you add the letters in SiYeon's name?
+*/
+ MSG_DEATH_Q05 = 0x4ac,
+/*20060918 to latest
+[천사의질문] A는 1이고 Z는 26이어요. 귀엽고 어여쁜 라그나로크의 히로인 Munak의 알파벳을 더하면 몇이 되나요?
+[Angel's Question] If A is 1, B is 2, and so on, and if Z is 26, what number do you get if you add the letters in Munak's name?
+*/
+ MSG_DEATH_Q06 = 0x4ad,
+/*20060918 to latest
+[천사의질문] A는 1이고 Z는 26이어요. 제가 어여뻐하는 Bongun의 알파벳을 더하면 몇이 되나요?
+[Angel's Question] If A is 1, B is 2, and so on, and if Z is 26, what number do you get if you add the letters in Bongun's name?
+*/
+ MSG_DEATH_Q07 = 0x4ae,
+/*20060918 to latest
+[천사의질문] A는 1이고 Z는 26이어요. 저희가 존재하는 온라인세계 Ragnarok의 알파벳을 더하면 몇이 되나요?
+[Angel's Question] If A is 1, B is 2, and so on, and if Z is 26, what number do you get if you add the letters in the word, Ragnarok?
+*/
+ MSG_DEATH_Q08 = 0x4af,
+/*20060918 to latest
+[천사의질문] A는 1이고 Z는 26이어요. 언제나 Online상태인 천사동료들은 큰힘이 되어주죠. Online의 알파벳을 더하면 몇이 되나요?
+[Angel's Question] If A is 1, B is 2, and so on, and if Z is 26, what number do you get if you add the letters in the word, online?
+*/
+ MSG_DEATH_Q09 = 0x4b0,
+/*20060918 to latest
+[천사의질문] A는 1이고 Z는 26이어요. 죽음도 두려워하지않는 기사들을 상징하는 단어인 Death의 알파벳을 더하면 몇이 되나요?
+[Angel's Question] If A is 1, B is 2, and so on, and if Z is 26, what number do you get if you add the letters in the word, death?
+*/
+ MSG_DEATH_Q10 = 0x4b1,
+/*20060918 to latest
+[천사의질문] A는 1이고 Z는 26이어요. 기사들은 너무 멋진다고 생각해요. Knight의 알파벳을 더하면 몇이 되나요?
+[Angel's Question] If A is 1, B is 2, and so on, and if Z is 26, what number do you get if you add the letters in the word, knight?
+*/
+ MSG_DEATH_Q11 = 0x4b2,
+/*20060918 to latest
+[천사의질문] A는 1이고 Z는 26이어요. 중력을 뜻하는 단어인 Gravity의 알파벳을 더하면 몇이 되나요?
+[Angel's Question] If A is 1, B is 2, and so on, and if Z is 26, what number do you get if you add the letters in the word, gravity?
+*/
+ MSG_DEATH_Q12 = 0x4b3,
+/*20060918 to latest
+[천사의질문] A는 1이고 Z는 26이어요. 어둠속에서도 밝게 사는게 중요하지요. Dark의 알파벳을 더하면 몇이 되나요?
+[Angel's Question] If A is 1, B is 2, and so on, and if Z is 26, what number do you get if you add the letters in the word, dark?
+*/
+ MSG_DEATH_Q13 = 0x4b4,
+/*20060918 to latest
+[천사의질문] A는 1이고 Z는 26이어요. 뭐든지 수집하는 Collector의 알파벳을 더하면 몇이 되나요?
+[Angel's Question] If A is 1, B is 2, and so on, and if Z is 26, what number do you get if you add the letters in the word, collecter?
+*/
+ MSG_DEATH_Q14 = 0x4b5,
+/*20060918 to latest
+[천사의대답] 소녀에게 정확한 사실을 가르쳐주셔서 감사하옵니다.
+[Angel's Answer] Thank you for letting me know~
+*/
+ MSG_DEATH_R01 = 0x4b6,
+/*20060918 to latest
+[천사의대답] 사랑스러우신 분이시군요. 소녀 감탄했사옵니다.
+[Angel's Answer] I'm very pleased with your answer. You are a splendid adventurer.
+*/
+ MSG_DEATH_R02 = 0x4b7,
+/*20060918 to latest
+[천사의대답] 소녀 실망했사옵니다.
+[Angel's Answer] You've disappointed me...
+*/
+ MSG_DEATH_R05 = 0x4b8,
+#endif
+#if PACKETVER >= 20060925
+/*20060925 to latest
+[POINT] 랭킹포인트가 %d 상승해서 %d 포인트가 되었습니다.
+[Point] You earned %d Ranking Points, giving you a total of %d Ranking Points.
+*/
+ MSG_DEATH_POINT = 0x4b9,
+#endif
+#if PACKETVER >= 20060927
+/*20060927 to 20070417
+[%s]의 소지 Point : %d Point
+20070423 to latest
+[%s]의 소지 캐시 : %d 캐시
+[%s]'s Points: %d Points
+*/
+ MSG_POINT_SHOP = 0x4ba,
+#endif
+#if PACKETVER >= 20061009
+/*20061009 to latest
+선택하지 않은 캐릭터는 삭제 됩니다. 완료하시겠습니까?
+Unselected Characters will be deleted. Continue?
+*/
+ MSG_CONFIRM_SELECT_CHARACTERS = 0x4bb,
+/*20061009 to latest
+9개 이상 선택하실 수 없습니다.
+You cannot select more than 8.
+*/
+ MSG_ERROR_SELECT_CHARACTERS = 0x4bc,
+#endif
+#if PACKETVER >= 20061016
+/*20061016 to latest
+캐릭터명을 '%s' (으)로 변경하시겠습니까?
+Do you want to change your name to '%s'?
+*/
+ MSG_CONFIRM_TO_CHANGE_NAME = 0x4bd,
+/*20061016 to latest
+캐릭터명이 성공적으로 변경되었습니다.
+Character Name has been changed successfully.
+*/
+ MSG_CHANGE_NAME_SUCCESS = 0x4be,
+/*20061016 to latest
+캐릭터명 변경이 실패하였습니다.
+You have failed to change this character's name.
+*/
+ MSG_CHANGE_NAME_FAILURE = 0x4bf,
+/*20061016 to latest
+한 번에 한 종류의 아이템만 구매할 수 있습니다.
+You can purchase only one kind of item at a time.
+*/
+ MSG_CAN_BUY_ONLY_ONEITEM = 0x4c0,
+#endif
+#if PACKETVER >= 20061017
+/*20061017 to 20061017
+캐릭터가 하나도 선택되지 않았습니다. 반드시 하나 이상의 캐릭터를 선택하여야 합니다.
+20061023 to latest
+캐릭터가 한개도 선택되지 않았습니다. 반드시 한개 이상의 캐릭터를 선택하여야 합니다.
+No characters were selected. You must select at least one character.
+*/
+ MSG_NO_SELECT_CHARACTERS = 0x4c1,
+#endif
+#if PACKETVER >= 20061023
+/*20061023 to latest
+이미 캐릭터명을 변경한 적이 있습니다. 더 이상 변경 할 수 없습니다.
+This character's name has already been changed. You cannot change a character's name more than once.
+*/
+ MSG_ALREADY_CHANGED_NAME = 0x4c2,
+/*20061023 to latest
+사용자 정보가 정확하지 않습니다.
+User Information is not correct.
+*/
+ MSG_NOTREGISTED_USER = 0x4c3,
+/*20061023 to latest
+다른 사용자가 같은 캐릭터 명을 먼저 사용하였습니다. 다른 캐릭터명을 사용하여 주십시요.
+Another user is using this character name, so please select another one.
+*/
+ MSG_DUPLICATED_CHAR_NAME = 0x4c4,
+#endif
+#if PACKETVER >= 20061030
+/*20061030 to latest
+파티장 권한이 없어 파티원을 소환하지 못했습니다.
+The party member was not summoned because you are not the party leader.
+*/
+ MSG_CANNOT_PARTYCALL = 0x4c5,
+/*20061030 to latest
+현재 맵에는 소환될 파티원이 존재하지 않습니다.
+There is no party member to summon in the current map.
+*/
+ MSG_NO_PARTYMEM_ON_THISMAP = 0x4c6,
+/*20061030 to latest
+이 지역에선 보스몬스터의 흔적을 찾을 수가 없습니다.
+You cannot find any trace of a Boss Monster in this area.
+*/
+ MSG_NOTFIND_BOSSMON = 0x4c7,
+/*20061030 to 20070122
+보스 몬스터 '%s'의 등장 예정시간 %02d시:%02d분
+20070129 to 20071204
+보스 몬스터 '%s'(이)가 %d시 %d분 후에 등장합니다.
+20071211 to latest
+보스 몬스터 '%s'(이)가 %d시간 %d분 후에 등장합니다.
+Boss Monster, '%s' will appear in %02d hour(s) and %02d minute(s).
+*/
+ MSG_APPEARANCE_TIME_OF_BOSSMON = 0x4c8,
+/*20061030 to latest
+보스 몬스터 '%s'의 위치가 미니맵에 표시됩니다.
+The location of Boss Monster, '%s', will be displayed on your Mini-Map.
+*/
+ MSG_SHOW_POSITION_OF_BOSSMON = 0x4c9,
+#endif
+#if PACKETVER >= 20061106
+/*20061106 to 20061211
+%s를 개봉 하시겠습니까? 한번 개봉된 아이템은 창고 저장 외의 다른 이동은 불가하며 동일한 아이템을 중복 사용하더라도 효과가 중첩되지 않습니다.
+20061218 to 20070618
+'%s'를 개봉 하시겠습니까? 한번 개봉된 아이템은 창고 저장 외의 다른 이동은 불가하며 동일한 아이템을 중복 사용하더라도 효과가 중첩되지 않습니다.
+20070619 to 20071218
+'%s'를 개봉 하시겠습니까? 한번 개봉된 아이템은 창고 저장 외의 다른 이동은 불가하며 임대 아이템은 창고 저장도 불가합니다. 동일한 아이템을 중복 사용하더라도 효과가 중첩되지 않습니다.
+20080102 to latest
+'%s'를 개봉 하시겠습니까? 한번 개봉된 아이템은 창고 저장 외의 다른 이동은 불가하며 임대 아이템은 창고 저장도 불가합니다. 한정 아이템은 거래 및 이동이 가능 합니다. 동일한 아이템을 중복 사용하더라도 효과가 중첩되지 않습니다.
+*/
+ MSG_CONFIRM_TO_OPEN_CASH_ITEM = 0x4ca,
+/*20061106 to latest
+NPC가 존재하지 않아 구매가 실패하였습니다.
+The Purchase has failed because the NPC does not exist.
+*/
+ MSG_BUY_CASH_FAIL_NPC = 0x4cb,
+/*20061106 to latest
+부분 유료화 시스템이 정상 작동하지 않아 구매가 실패하였습니다.
+The Purchase has failed because the Kafra Shop System is not working correctly.
+*/
+ MSG_BUY_CASH_FAIL_SYSTEM = 0x4cc,
+/*20061106 to latest
+교환중에는 아이템을 구매 할 수 없습니다.
+You cannot purchase items while you are in a trade.
+*/
+ MSG_BUY_CASH_FAIL_EXCHANGE = 0x4cd,
+/*20061106 to latest
+아이템 정보가 정확하지 않아 구매가 실패하였습니다.
+The Purchase has failed because the Item Information was incorrect.
+*/
+ MSG_BUY_CASH_FAIL_ITEM_ID = 0x4ce,
+#endif
+#if PACKETVER >= 20061204
+/*20061204 to latest
+ STR이 향상되었습니다.
+STR has increased.
+*/
+ MSG_ENST_STR = 0x4cf,
+/*20061204 to latest
+ STR이 원래대로 돌아왔습니다.
+STR has returned to normal.
+*/
+ MSG_DSST_STR = 0x4d0,
+/*20061204 to latest
+ AGI이 향상되었습니다.
+AGI has increased.
+*/
+ MSG_ENST_AGI = 0x4d1,
+/*20061204 to latest
+ AGI이 원래대로 돌아왔습니다.
+AGI has returned to normal.
+*/
+ MSG_DSST_AGI = 0x4d2,
+/*20061204 to latest
+ VIT이 향상되었습니다.
+VIT has increased.
+*/
+ MSG_ENST_VIT = 0x4d3,
+/*20061204 to latest
+ VIT이 원래대로 돌아왔습니다.
+VIT has returned to normal.
+*/
+ MSG_DSST_VIT = 0x4d4,
+/*20061204 to latest
+ INT이 향상되었습니다.
+INT has increased.
+*/
+ MSG_ENST_INT = 0x4d5,
+/*20061204 to latest
+ INT이 원래대로 돌아왔습니다.
+INT has returned to normal.
+*/
+ MSG_DSST_INT = 0x4d6,
+/*20061204 to latest
+ DEX이 향상되었습니다.
+DEX has increased.
+*/
+ MSG_ENST_DEX = 0x4d7,
+/*20061204 to latest
+ DEX이 원래대로 돌아왔습니다.
+DEX has returned to normal.
+*/
+ MSG_DSST_DEX = 0x4d8,
+/*20061204 to latest
+ LUK이 향상되었습니다.
+LUK has increased.
+*/
+ MSG_ENST_LUK = 0x4d9,
+/*20061204 to latest
+ LUK이 원래대로 돌아왔습니다.
+LUK has returned to normal.
+*/
+ MSG_DSST_LUK = 0x4da,
+/*20061204 to latest
+ 회피율이 향상되었습니다.
+Flee Rate (Flee) has increased.
+*/
+ MSG_ENST_AVOIDANCE = 0x4db,
+/*20061204 to latest
+ 회피율이 원래대로 돌아왔습니다.
+Flee Rate has returned to normal.
+*/
+ MSG_DSST_AVOIDANCE = 0x4dc,
+/*20061204 to latest
+ 명중률이 향상되었습니다.
+Accuracy Rate (Hit) has increased.
+*/
+ MSG_ENST_HIT = 0x4dd,
+/*20061204 to latest
+ 명중률이 원래대로 돌아왔습니다.
+Accuracy Rate has returned to normal.
+*/
+ MSG_DSST_HIT = 0x4de,
+/*20061204 to latest
+ 크리티컬 확률이 향상되었습니다.
+Critical Attack (Critical) has increased.
+*/
+ MSG_ENST_CRITICALSUCCESSVALUE = 0x4df,
+/*20061204 to latest
+ 크리티컬 확률이 원래대로 돌아왔습니다.
+Critical Attack has returned to normal.
+*/
+ MSG_DSST_CRITICALSUCCESSVALUE = 0x4e0,
+/*20061204 to latest
+ 몬스터 사냥을 통해 얻을 수 있는 경험치가 30분간 1.5배로 증가합니다.
+*/
+ MSG_PLUSEXP = 0x4e1,
+/*20061204 to latest
+ 30분내 사망시 1회에 한해 경험치 감소가 일어나지 않습니다.
+This character will not receive any EXP penalty if killed within the next 30 minutes.
+*/
+ MSG_DDEATHPENALTY = 0x4e2,
+/*20061204 to latest
+ 몬스터 사냥을 통해 얻을 수 있는 기본 아이템의 드롭률이 30분간 2배로 증가합니다.
+Regular item drops from monsters will be doubled for the next 30 minutes.
+*/
+ MSG_RECEIVEITEM = 0x4e3,
+/*20061204 to latest
+ 10분간 맵 내에 출현 가능한 보스 몬스터에 대한 정보를 안내해 드립니다.
+Boss Monster Map Information for the next 10 minutes.
+*/
+ MSG_BOSS_ALARM = 0x4e4,
+/*20061204 to 20061211
+ 정말로 %s아이템을 구매하시겠습니까?, %d포인트가 차감됩니다.
+20061218 to 20070417
+ 정말로 '%s'아이템을 구매하시겠습니까?, %d포인트가 차감됩니다.
+20070423 to 20080603
+ 정말로 '%s'아이템을 구매하시겠습니까?, %d캐시가 차감됩니다.
+20080610 to latest
+ 본 아이템은 청약 철회나 환불 대상에서 제외되는 아이템입니다. 정말로 '%s'아이템을 구매하시겠습니까?, %d캐시가 차감됩니다.
+*/
+ MSG_BUY_RECONFIRM = 0x4e5,
+#endif
+#if PACKETVER >= 20061211
+/*20061211 to 20061211
+'%s'아이템의 사용시간이 %d분 남았습니다.
+20061218 to 20070417
+ 포인트가 부족합니다.
+20070423 to latest
+ 캐시가 부족합니다.
+ You do not have enough Kafra Credit Points.
+*/
+ MSG_BUY_CASH_FAIL_MONEY = 0x4e6,
+/*20061211 to 20061211
+1분 후, '%s'아이템이 인벤토리에서 삭제됩니다.
+20061218 to latest
+ ^ff0000파기일시: %s^000000
+ ^ff0000Expiration Date: %s^000000
+*/
+ MSG_NOTICE_TO_DELETE_TIME = 0x4e7,
+/*20061211 to 20061211
+'%s'아이템이 인벤토리에서 삭제되었습니다.
+20061218 to latest
+ '%s'아이템의 사용시간이 %d분 남았습니다.
+ The '%s' item will disappear in %d minutes.
+20070102 to 20070312
+ '%s'아이템의 사용시간이 %s 남았습니다.
+*/
+ MSG_NOTICE_TO_REMAIN_ITEMUSINGTIME = 0x4e8,
+#endif
+#if PACKETVER >= 20061218
+/*20061218 to latest
+ 1분 후, '%s'아이템이 인벤토리에서 삭제됩니다.
+ '%s' item will be deleted from the Inventory in 1 minute.
+*/
+ MSG_LAST_NOTICE_TO_REMAIN_ITEMUSINGTIME = 0x4e9,
+/*20061218 to latest
+ '%s'아이템이 인벤토리에서 삭제되었습니다.
+ '%s' item has been deleted from the Inventory.
+*/
+ MSG_NOTICE_TO_DELETE_ITEM = 0x4ea,
+#endif
+#if PACKETVER >= 20070102
+/*20070102 to latest
+Input Number
+*/
+ MSG_INPUT_NUMBER = 0x4eb,
+/*20070102 to latest
+%m월 %d일 %H시 %M분
+%m/%d %H:%M
+*/
+ MSG_TIME_TYPE2 = 0x4ec,
+#endif
+#if PACKETVER >= 20070129
+/*20070129 to 20071120
+보스 몬스터 '%s'(이)가 1분 이내에 등장합니다.
+20071127 to latest
+보스 몬스터 '%s'(이)가 잠시 후에 등장합니다.
+Boss Monster '%s' will appear within 1 minute.
+*/
+ MSG_APPEARANCE_TIME_OF_BOSSMON2 = 0x4ed,
+/*20070129 to latest
+용병 스킬목록
+Mercenary Soldier Skill List
+*/
+ MSG_MER_SKILLLIST = 0x4ee,
+/*20070129 to latest
+블랙젬스톤 1개와 백만제니를 소모하는 마법의 실행에 동의합니까?
+Do you agree to cast the magic spell that consumes 1 Black Gemstone and 1,000,000 Zeny?
+*/
+ MSG_DA_EXP_ACCEPT = 0x4ef,
+#endif
+#if PACKETVER >= 20070220
+/*20070220 to latest
+[POINT] 콜렉터랭킹 포인트가 %d 상승해서 %d 포인트가 되었습니다.
+[Point] You have gained %d Collector Rank Points; you now have a total of %d Collector Rank Points.
+*/
+ MSG_COLLECTOR_POINT = 0x4f0,
+/*20070220 to latest
+[콜렉터랭킹] Target Item : %s
+[Collector Rank] Target Item: %s
+*/
+ MSG_COLLECTOR_MISSION = 0x4f1,
+#endif
+#if PACKETVER >= 20070227
+/*20070227 to latest
+용병 사용시간이 만료되었습니다.
+The mercenary contract has expired.
+*/
+ MSG_MER_FINISH = 0x4f2,
+/*20070227 to latest
+용병이 사망하였습니다.
+The mercenary has died.
+*/
+ MSG_MER_DIE = 0x4f3,
+/*20070227 to latest
+용병이 해고되었습니다.
+You have released the mercenary.
+*/
+ MSG_MER_RETIRE = 0x4f4,
+/*20070227 to latest
+용병이 도망갔습니다.
+The mercenary has run away.
+*/
+ MSG_MER_RUNAWAY = 0x4f5,
+#endif
+#if PACKETVER >= 20070319
+/*20070319 to latest
+ '%s'아이템의 사용시간이 %d초 남았습니다.
+ The '%s' item will disappear in %d seconds.
+*/
+ MSG_NOTICE_TO_REMAIN_ITEMUSINGTIME2 = 0x4f6,
+#endif
+#if PACKETVER >= 20070326
+/*20070326 to 20070821
+PC방 이벤트 : 경험치 증가 %d%%, 죽을때 경험치 %d%%, 드롭율 증가 %d%%
+20070828 to latest
+PC방 프리미엄 서비스 : 경험치 %d%% 증가, 사망 페널티 %d%% 감소, 드롭율 %d%% 증가
+IP Bonus: EXP/JEXP %d%%, Death Penalty %d%%, Item Drop %d%%
+*/
+ MSG_PCBANG_EVENT = 0x4f7,
+#endif
+#if PACKETVER >= 20070402
+/*20070402 to latest
+24시간 이후에 시도하세요
+Symbols in Character Names are forbidden.
+*/
+ MSG_LIMIT_CHAR_DELETE = 0x4f8,
+#endif
+#if PACKETVER >= 20070416
+/*20070416 to latest
+용병이 사용자 인공지능으로 동작합니다.
+Mercenary will follow custom AI.
+*/
+ MSG_MER_USERAI_ON = 0x4f9,
+/*20070416 to latest
+용병이 기본 인공지능으로 동작합니다.
+Mercenary will follow basic AI.
+*/
+ MSG_MER_USERAI_OFF = 0x4fa,
+#endif
+#if PACKETVER >= 20070611
+/*20070611 to latest
+ %s님의
+ %s's
+*/
+ MSG_CHARACTER_NAME = 0x4fb,
+/*20070611 to 20070801
+%s님이 %s를 획득하셨습니다.
+20070807 to latest
+%s님이 %s 아이템을 획득하셨습니다.
+%s has acquired %s.
+*/
+ MSG_ITEM_PICKUP_PARTY = 0x4fc,
+/*20070611 to latest
+공개 채팅 메시지 표시
+Public Chat Display
+*/
+ MSG_VIEW_CHAT_MSG = 0x4fd,
+/*20070611 to latest
+귓속말 채팅 메시지 표시
+Whisper Display
+*/
+ MSG_VIEW_WHISPER_MSG = 0x4fe,
+/*20070611 to latest
+파티 채팅 메시지 표시
+Party Chat Display
+*/
+ MSG_VIEW_PARTY_MSG = 0x4ff,
+/*20070611 to latest
+길드 채팅 메시지 표시
+Guild Chat Display
+*/
+ MSG_VIEW_GUILD_MSG = 0x500,
+/*20070611 to latest
+아이템 획득/드롭 메시지 표시
+Item Get/Drop Message Display
+*/
+ MSG_VIEW_GET_ITEM_MSG = 0x501,
+/*20070611 to latest
+장비 장착/해제 메시지 표시
+Equipment On/Off Message Display
+*/
+ MSG_VIEW_EQUIP_MSG = 0x502,
+/*20070611 to latest
+상태이상 메시지 표시
+Abnormal Status Message Display
+*/
+ MSG_VIEW_CHANGE_STATUS_MSG = 0x503,
+/*20070611 to latest
+파티원의 주요 아이템 획득 메시지 표시
+Party Member's Obtained Item Message Display
+*/
+ MSG_VIEW_GET_ITEM_PARTY_MSG = 0x504,
+/*20070611 to latest
+파티원의 상태이상 메시지 표시
+Party Member's Abnormal Status Message Display
+*/
+ MSG_VIEW_CHANGE_STATUS_PARTY_MSG = 0x505,
+/*20070611 to latest
+스킬 사용 실패 메시지 표시
+Skill Failure Message Display
+*/
+ MSG_VIEW_FAIL_SKILL_MSG = 0x506,
+/*20070611 to latest
+파티 설정 메시지 표시
+Party Configuration Message Display
+*/
+ MSG_VIEW_PARTY_SETUP_MSG = 0x507,
+/*20070611 to latest
+장비 손상 메시지 표시
+Damaged Equipment Message Display
+*/
+ MSG_VIEW_DAMAGED_EQUIP_MSG = 0x508,
+/*20070611 to latest
+배틀 메시지 창 표시 정보
+Battle Message Window Display
+*/
+ MSG_BATTLE_CHAT_WND_OPTION = 0x509,
+/*20070611 to latest
+[%s]의 소지 한코인 : %d 한코인
+[%s]'s Han Coin: %d Han Coin
+*/
+ MSG_POINT_SHOP_NHN = 0x50a,
+#endif
+#if PACKETVER >= 20070618
+/*20070618 to latest
+일반 메시지
+Public Log
+*/
+ MSG_ST_CHAT = 0x50b,
+/*20070618 to latest
+배틀 메시지
+Battle Log
+*/
+ MSG_BT_CHAT = 0x50c,
+/*20070618 to latest
+휴대폰 인증.
+Mobile Authentication
+*/
+ MSG_PHONE_CONFIRM = 0x50d,
+/*20070618 to latest
+읽기
+Read
+*/
+ MSG_BOOK_READ = 0x50e,
+/*20070618 to latest
+자동낭독
+Auto Read
+*/
+ MSG_BOOK_AUTOREAD = 0x50f,
+/*20070618 to latest
+책갈피
+Bookmark
+*/
+ MSG_BOOK_KEEP = 0x510,
+/*20070618 to latest
+이전페이지
+Previous
+*/
+ MSG_BOOK_PREV = 0x511,
+/*20070618 to latest
+다음페이지
+Next
+*/
+ MSG_BOOK_NEXT = 0x512,
+/*20070618 to latest
+닫기
+Close
+*/
+ MSG_BOOK_CLOSE = 0x513,
+#endif
+#if PACKETVER >= 20070622
+/*20070622 to latest
+%s 장비가 손상되었습니다.
+%s's Equipment has been damaged.
+*/
+ MSG_DAMAGED_EQUIP = 0x514,
+/*20070622 to latest
+%s님의 %s 손상되었습니다.
+%s's %s was damaged.
+*/
+ MSG_DAMAGED_EQUIP_PARTY = 0x515,
+/*20070622 to latest
+무기가
+Weapon
+*/
+ MSG_DAMAGED_WEAPON = 0x516,
+/*20070622 to latest
+갑옷이
+Armor
+*/
+ MSG_DAMAGED_BODY = 0x517,
+/*20070622 to latest
+스킬레벨이 부족합니다. 파티가입 불능
+Insufficient Skill Level for joining a Party
+*/
+ MSG_NOT_ENOUGH_SKILLLEVE5_2 = 0x518,
+#endif
+#if PACKETVER >= 20070628
+/*20070628 to latest
+[%s]의 무료 캐시 : %d 캐시
+[%s]'s Free Cash: %d Cash
+*/
+ MSG_POINT_SHOP2 = 0x519,
+/*20070628 to latest
+무료 캐시 사용 :
+Use Free Cash:
+*/
+ MSG_USE_FREE_POINT = 0x51a,
+/*20070628 to latest
+캐시
+Cash
+*/
+ MSG_CASH = 0x51b,
+#endif
+#if PACKETVER >= 20070710
+/*20070710 to latest
+http://payment.ro.hangame.com/index.asp
+*/
+ MSG_SETTLE_WEB_URL_HANGAME = 0x51c,
+/*20070710 to 20090603
+그라비티 회원 정보동의를 하셔야 사용할수있습니다.
+20090610 to latest
+그라비티 회원 정보동의를 하셔야 사용할 수 있습니다.
+You need to accept the Privacy Policy from Gravity in order to use the service.
+*/
+ MSG_BAN_GRAVITY_MEM_AGREE = 0x51d,
+/*20070710 to latest
+이용약관에 동의를 하셔야 본 서비스를 이용하실 수 있습니다.
+You need to accept the User Agreement in order to use the service.
+*/
+ MSG_BAN_GAME_MEM_AGREE = 0x51e,
+/*20070710 to 20080520
+존재하지 않는 한게임 ID이거나 잘못된 ID입니다.
+20080527 to latest
+입력하신 아이디와 비밀번호가 등록된 정보와 일치하지 않습니다.
+Incorrect or nonexistent ID.
+*/
+ MSG_BAN_HAN_VALID = 0x51f,
+#endif
+#if PACKETVER >= 20070711
+/*20070711 to 20080603
+ 정말로 '%s'아이템을 구매하시겠습니까?, 일반 %d캐시, 무료 %d캐시가 차감됩니다.
+20080610 to latest
+ 본 아이템은 청약 철회나 환불 대상에서 제외되는 아이템입니다. 정말로 '%s'아이템을 구매하시겠습니까?, 일반 %d캐시, 무료 %d캐시가 차감됩니다.
+*/
+ MSG_BUY_RECONFIRM2 = 0x520,
+#endif
+#if PACKETVER >= 20070718
+/*20070718 to latest
+%d시간이 경과하였습니다.
+%d hour(s) has passed.
+*/
+ MSG_NOTIFY_PLAYTIME1 = 0x521,
+/*20070718 to latest
+%d시간 %d분이 경과하였습니다.
+%d hour(s) %d minute(s) has passed.
+*/
+ MSG_NOTIFY_PLAYTIME2 = 0x522,
+/*20070718 to latest
+게임을 종료하세요, 경험치 및 모든게 50%로 조정됩니다
+Please stop playing the game, and take a break. Exp and other features will be reduced to 50%.
+*/
+ MSG_WARNING_MSG1 = 0x523,
+/*20070718 to latest
+불건전 시간대에 접어들었습니다. 게임을 종료하세요, 경험치 및 모든게 0%로 조정됩니다
+Please stop playing the game since you'll need to rest. Exp and other features will be fixed to 0%.
+*/
+ MSG_WARNING_MSG2 = 0x524,
+#endif
+#if PACKETVER >= 20070724
+/*20070724 to latest
+퀘스트 목록
+Quest List
+*/
+ MSG_QUESTWIN = 0x525,
+#endif
+#if PACKETVER >= 20070807
+/*20070807 to latest
+RO SHOP
+RO Shop
+*/
+ MSG_RO_SHOP = 0x526,
+#endif
+#if PACKETVER >= 20070821
+/*20070821 to 20070904
+메모리얼던젼 '%s'이 예약되었습니다.
+20070911 to latest
+메모리얼던젼 '%s'의 예약이 알수없는 이유로 실패 하였습니다.
+Memorial Dungeon, '%s' is booked.
+*/
+ MSG_MDUNGEON_SUBSCRIPTION_ERROR_UNKNOWN = 0x527,
+/*20070821 to 20070904
+메모리얼던젼 '%s' 예약이 실패했습니다.
+20070911 to latest
+메모리얼던젼 '%s'의 예약이 예약중복으로 실패 하였습니다.
+Failed to book Memorial Dungeon, '%s'.
+*/
+ MSG_MDUNGEON_SUBSCRIPTION_ERROR_DUPLICATE = 0x528,
+/*20070821 to 20070904
+메모리얼던젼 '%s' 이미 예약중입니다.
+20070911 to latest
+메모리얼던젼 '%s'의 예약이 권한문제로 실패 하였습니다.
+Memorial Dungeon, '%s' is already booked.
+*/
+ MSG_MDUNGEON_SUBSCRIPTION_ERROR_RIGHT = 0x529,
+/*20070821 to 20070904
+메모리얼던젼 '%s'가 생성 되었습니다
+ 5분내에 입장하세요.
+20070911 to latest
+메모리얼던젼 '%s'의 예약이 중복생성요청으로 실패하였습니다.
+Memorial Dungeon, '%s' is created.
+ Please enter in 5 minutes.
+*/
+ MSG_MDUNGEON_SUBSCRIPTION_ERROR_EXIST = 0x52a,
+/*20070821 to 20070904
+메모리얼던젼 '%s' 생성에 실패했습니다.
+ 나중에 다시 시도하세요.
+20070911 to latest
+메모리얼던젼 '%s'의 예약취소가 실패 하였습니다.
+Failed to create Memorial Dungeon, '%s'.
+ Please try again.
+*/
+ MSG_MDUNGEON_SUBSCRIPTION_CANCEL_FAIL = 0x52b,
+/*20070821 to latest
+상대방이 파티 초대 거부 상태입니다.
+The character blocked the party invitation.
+*/
+ MSG_JOINMSG_REFUSE = 0x52c,
+#endif
+#if PACKETVER >= 20070828
+/*20070828 to latest
+모든 파티 초대를 거부합니다.
+Block all party invitations.
+*/
+ MSG_INVITE_PARTY_REFUSE = 0x52d,
+/*20070828 to latest
+모든 파티 초대를 수락합니다.
+Allow all party invitations.
+*/
+ MSG_INVITE_PARTY_ACCEPT = 0x52e,
+#endif
+#if PACKETVER >= 20070904
+/*20070904 to latest
+착용하시면 이 아이템은 영구 귀속됩니다. 착용하시겠습니까?
+This item will be permanently bound to this character once it is equipped. Do you really want to equip this item?
+*/
+ MSG_YOURITEM_EQUIP = 0x52f,
+/*20070904 to latest
+%s 아이템이 귀속되었습니다.
+%s is now permanently bound to this character.
+*/
+ MSG_YOURITEM_EQUIPED = 0x530,
+/*20070904 to latest
+캐시가 부족합니다. 무료 캐시 포인트를 입력해 주시기 바랍니다.
+You do not have enough Kafra Credit Points. Please enter whether you have free credit points.
+*/
+ MSG_BUY_TO_FREE_POINT = 0x531,
+/*20070904 to latest
+파티 가입요청
+Request to Join Party
+*/
+ MSG_REQ_JOIN_PARTY3 = 0x532,
+#endif
+#if PACKETVER >= 20070912
+/*20070912 to latest
+공성 정보 메시지 표시
+Display WOE Info
+*/
+ MSG_VIEW_SIEGE_INFO_MSG = 0x533,
+/*20070912 to latest
+메모리얼던젼 '%s'의 예약이 취소 되었습니다.
+Memorial Dungeon %s's reservation has been canceled.
+*/
+ MSG_MDUNGEON_SUBSCRIPTION_CANCEL_SUCCESS = 0x534,
+/*20070912 to latest
+메모리얼던젼 '%s' 생성에 실패하였습니다. 다시 시도 하세요.
+Failed to create Memorial Dungeon %s. Please try again.
+*/
+ MSG_MDUNGEON_CREATE_FAIL = 0x535,
+/*20070912 to latest
+이 장소에서는 사용할 수 없는 스킬입니다.
+This skill cannot be used within this area.
+*/
+ MSG_IMPOSSIBLE_SKILL_AREA = 0x536,
+/*20070912 to latest
+이 장소에서는 사용할 수 없는 아이템입니다.
+This item cannot be used within this area.
+*/
+ MSG_IMPOSSIBLE_USEITEM_AREA = 0x537,
+#endif
+#if PACKETVER >= 20070918
+/*20070918 to latest
+메모리얼 던전
+Memorial Dungeon
+*/
+ MSG_MEMORIAL_DUN = 0x538,
+/*20070918 to latest
+%s 대기중
+%s in Standby
+*/
+ MSG_MEMORIAL_DUN_WAITING = 0x539,
+/*20070918 to latest
+%s 입장 가능
+%s Available
+*/
+ MSG_MEMORIAL_DUN_READY = 0x53a,
+/*20070918 to 20071120
+%s 내부
+20071127 to latest
+%s 진행중
+%s in Progress
+*/
+ MSG_MEMORIAL_DUN_IN = 0x53b,
+/*20070918 to latest
+시간 안에 입장하지 않아 메모리얼 던전이 사라졌습니다.
+No one entered the Memorial Dungeon within its duration; the dungeon has disappeared.
+*/
+ MSG_MEMORIAL_DUN_OUT1 = 0x53c,
+/*20070918 to latest
+이용하시려면 이용 신청을 처음부터 다시 해주시기 바랍니다.
+Please apply for dungeon entry again to play in this dungeon.
+*/
+ MSG_MEMORIAL_DUN_OUT2 = 0x53d,
+/*20070918 to latest
+대기 순위 : ^ff0000%d^000000
+Your Standby Priority: ^ff0000%d^000000
+*/
+ MSG_MEMORIAL_DUN_PRIORITY = 0x53e,
+/*20070918 to latest
+^ff0000%s^000000 내에 입장하지 않을 경우 신청하신 던전이 삭제 됩니다.
+The requested dungeon will be removed if you do not enter within ^ff0000%s^000000.
+*/
+ MSG_MEMORIAL_DUN_NOTIFY = 0x53f,
+/*20070918 to latest
+던전 미션 제한 시간 :
+Dungeon Mission Time Limit:
+*/
+ MSG_MEMORIAL_DUN_NOTIFY2 = 0x540,
+/*20070918 to latest
+메모리얼 던전 예약이 취소되었습니다.
+The Memorial Dungeon reservation has been canceled.
+*/
+ MSG_MEMORIAL_DUN_CANCEL = 0x541,
+/*20070918 to latest
+메모리얼 던전이 유지 시간 제한에 의해 파괴되었습니다.
+The Memorial Dungeon duration expired; it has been destroyed.
+*/
+ MSG_MEMORIAL_DUN_LIVE_TIME_OUT = 0x542,
+/*20070918 to latest
+메모리얼 던전이 입장 시간 제한에 의해 파괴되었습니다.
+The Memorial Dungeon's entry time limit expired; it has been destroyed.
+*/
+ MSG_MEMORIAL_DUN_ENTER_TIME_OUT = 0x543,
+/*20070918 to latest
+메모리얼 던전이 삭제 되었습니다.
+The Memorial Dungeon has been removed.
+*/
+ MSG_MEMORIAL_DUN_DESTROY_REQUEST = 0x544,
+/*20070918 to latest
+메모리얼 던전에 시스템 오류가 발생하였습니다. 정상적인 게임 진행을 위해 재접속을 해주십시오.
+A system error has occurred in the Memorial Dungeon. Please relog in to the game to continue playing.
+*/
+ MSG_MEMORIAL_DUN_ERROR = 0x545,
+/*20070918 to latest
+사용할 수 없는 슬롯입니다.
+This slot is not usable.
+*/
+ MSG_FR_INVALID_SLOT = 0x546,
+/*20070918 to latest
+Base Level이 15를 넘었습니다.
+Your Base Level is over 15.
+*/
+ MSG_FR_BASELVL = 0x547,
+/*20070918 to latest
+Job Level이 15를 넘었습니다.
+Your Job Level is over 15.
+*/
+ MSG_FR_INVALID_JOBLV = 0x548,
+/*20070918 to latest
+해당슬롯 캐릭터에 직업군의 상인이므로 게임을 할 수 없습니다.
+You cannot play the Merchant class character in this slot.
+*/
+ MSG_FR_JOB = 0x549,
+/*20070918 to latest
+추후 사용예정
+Not Yet Implemented
+*/
+ MSG_FR_MAP = 0x54a,
+/*20070918 to latest
+만들수 있는 케릭터 슬롯이 아닙니다.
+You are not eligible to open the Character Slot.
+*/
+ MSG_FR_ERR_MKCHAR_INVALID_SLOT = 0x54b,
+/*20070918 to latest
+삭제할 수 없는 케릭터 입니다.
+This character cannot be deleted.
+*/
+ MSG_FR_ERR_DELCHAR_INVALID_SLOT = 0x54c,
+/*20070918 to latest
+상대방의 장비창이 공개되어 있지 않습니다.
+This character's equipment information is not open to the public.
+*/
+ MSG_OPEN_EQUIPEDITEM_REFUSED = 0x54d,
+/*20070918 to latest
+장비창을 공개하지 않습니다.
+Equipment information not open to the public.
+*/
+ MSG_OPEN_EQUIPEDITEM_REFUSE = 0x54e,
+/*20070918 to latest
+장비창을 공개합니다.
+Equipment information open to the public.
+*/
+ MSG_OPEN_EQUIPEDITEM_ACCEPT = 0x54f,
+/*20070918 to latest
+(%s)님 장비창 보기
+Check %s's Equipment Info
+*/
+ MSG_REQ_VIEW_OTHERUSER = 0x550,
+/*20070918 to latest
+%s의 장착아이템
+'%s's Equipment
+*/
+ MSG_OTHERUSER_EQUIPED_ITEM = 0x551,
+/*20070918 to latest
+장비창 공개
+Show Equip
+*/
+ MSG_OPEN_EQUIPED_ITEM = 0x552,
+#endif
+#if PACKETVER >= 20071002
+/*20071002 to latest
+프리미엄 서비스를 이용해 주시기 바랍니다.
+This service is only available for premium users.
+*/
+ MSG_NEED_PREMIUM_SERVICE = 0x553,
+/*20071002 to latest
+무료 사용자는 최대 50000제니까지 소유할 수 있습니다.
+Free Trial users can only hold up to 50,000 zeny.
+*/
+ MSG_FR_INVALID_MONEY = 0x554,
+#endif
+#if PACKETVER >= 20071009
+/*20071009 to latest
+전장채팅 상태가 되었습니다.
+Battlefield Chat has been activated.
+*/
+ MSG_BATTLECHAT_ON = 0x555,
+/*20071009 to latest
+전장채팅 상태가 해제되었습니다.
+Battlefield Chat has been deactivated.
+*/
+ MSG_BATTLECHAT_OFF = 0x556,
+#endif
+#if PACKETVER >= 20071017
+/*20071017 to latest
+용병정보 - 몬스터타입
+Mercenary Info - Monster Type
+*/
+ MSG_MER_INFO_TYPE_MONSTER = 0x557,
+#endif
+#if PACKETVER >= 20071106
+/*20071106 to latest
+전체 맵 보기
+World Map
+*/
+ MSG_RO_MAP = 0x558,
+#endif
+#if PACKETVER >= 20071127
+/*20071127 to latest
+메모리얼던젼이 CLOSE 상태입니다.
+The Memorial Dungeon is now closed.
+*/
+ MSG_MEMORIAL_DUN_CLOSE = 0x559,
+#endif
+#if PACKETVER >= 20071204
+/*20071204 to latest
+^ff0000^ff0000용병을 삭제합니다.^000000^000000 삭제하실 경우 지금까지 키운 내역이 모두 삭제됩니다. 계속하시겠습니까?
+^ff0000Deleting a Mercenary Soldier^000000 will also delete his growth history. Do you really want to proceed with the deletion?
+*/
+ MSG_DELETE_MER = 0x55a,
+#endif
+#if PACKETVER >= 20071211
+/*20071211 to latest
+메모리얼던젼이 OPEN 상태입니다.
+The Memorial Dungeon is now open.
+*/
+ MSG_MEMORIAL_DUN_OPEN = 0x55b,
+#endif
+#if PACKETVER >= 20080108
+/*20080108 to latest
+위의 계정은 아직 통신 안전 키에 연결되지 않았습니다. 먼저 안전 키를 해제하신 뒤 게임에 접속해 주십시오.
+This account has not been confirmed by connecting to the safe communication key. Please connect to the key first, and then log into the game.
+*/
+ MSG_PHONE_BLOCK = 0x55c,
+/*20080108 to latest
+한 아이피로 접속 가능한 유저수를 초과하였습니다.
+The number of accounts connected to this IP has exceeded the limit.
+*/
+ MSG_BAN_PC_IP_LIMIT_ACCESS = 0x55d,
+#endif
+#if PACKETVER >= 20080219
+/*20080219 to latest
+새로운 퀘스트를 받았습니다
+You have received a new quest.
+*/
+ MSG_QUESTGET = 0x55e,
+#endif
+#if PACKETVER >= 20080401
+/*20080401 to latest
+^777777습득조건 :
+^CC3399Requirement:
+*/
+ MSG_FINDTEXT_TO_SKILLDES = 0x55f,
+/*20080401 to latest
+스킬 설명 보기
+View Skill Info
+*/
+ MSG_VIEW_SKILL_DESCRIPT = 0x560,
+#endif
+#if PACKETVER >= 20080408
+/*20080408 to latest
+사용된 스킬 포인트는 다시 되돌릴 수 없습니다. 적용하시겠습니까?
+Once used, skill points cannot be re-allocated. Would you like to use the skill points?
+*/
+ MSG_APPLY_SKILL_UP = 0x561,
+/*20080408 to latest
+노비스·1차직업
+1st
+*/
+ MSG_1TABNAME_SKILLWND = 0x562,
+/*20080408 to latest
+2차·전승직업
+2nd
+*/
+ MSG_2TABNAME_SKILLWND = 0x563,
+/*20080408 to 20080520
+불법프로그램을 사용하였거나 혹은 해킹을 시도한 계정입니다. 블럭시간 : %s
+20080527 to latest
+불법프로그램을 사용하였거나 혹은 해킹을 시도한 계정입니다. 블럭종료시간 : %s
+This account has been used for illegal program or hacking program. Block Time: %s
+20081217 to 20081218
+불법프로그램을 사용하였거나 해킹을 시도한 계정이거나 그라비티 이전을 신청한 한게임 계정입니다. 블럭종료시간 : %s
+*/
+ MSG_RE17 = 0x564,
+/*20080408 to latest
+불법프로그램이 실행, 바이러스 감염, 또는 해킹툴이 설치되어 있을 가능성이 있습니다. 정상 클라이언트를 실행하여 주시기 바랍니다. 함께 만드는 밝은 라그나로크가 될 수 있도록 노력하고 있습니다.
+The possibility of exposure to illegal program, PC virus infection or Hacking Tool has been detected. Please execute licensed client. Our team is trying to make a best environment for Ro players.
+*/
+ MSG_RE18 = 0x565,
+#endif
+#if PACKETVER >= 20080415
+/*20080415 to latest
+당신은 지금 건강한 게임 시간 대에 있습니다, 즐거운 게임이 되시길 바랍니다
+You are currently playing in the best game environment. Please enjoy the Ragnarok.
+*/
+ MSG_WARNING_MSG3 = 0x566,
+/*20080415 to latest
+ 몬스터 사냥을 통해 얻을 수 있는 Job경험치가 30분간 1.5배로 증가합니다.
+*/
+ MSG_PLUSONLYJOBEXP = 0x567,
+/*20080415 to latest
+ 몬스터 사냥을 통해 얻을 수 있는 경험치가 30분간 1.25배로 증가합니다.
+*/
+ MSG_PLUSEXP14532 = 0x568,
+/*20080415 to latest
+ 몬스터 사냥을 통해 얻을 수 있는 경험치가 30분간 2배로 증가합니다.
+EXP points from hunting monsters are increased by 100%% for 30 minutes.
+*/
+ MSG_PLUSEXP14533 = 0x569,
+/*20080415 to latest
+ 몬스터 사냥을 통해 얻을 수 있는 경험치가 60분간 1.5배로 증가합니다.
+EXP points from hunting monsters are increased by 50% for 60 minutes.
+*/
+ MSG_PLUSEXP12312 = 0x56a,
+#endif
+#if PACKETVER >= 20080527
+/*20080527 to latest
+이 맵에서는 파티를 결성할 수 없습니다.
+Unable to organize a party in this map.
+*/
+ MSG_NOPARTY = 0x56b,
+/*20080527 to latest
+(%s)님은 파티에 참여할 수 없는 맵에 있습니다.
+(%s) are currently in restricted map to join a party.
+*/
+ MSG_NOPARTY2 = 0x56c,
+/*20080527 to 20080603
+간편아이템샵.
+20080610 to latest
+간편아이템샵
+Simple Item Shop
+*/
+ MSG_SIMPLE_CASH_SHOP = 0x56d,
+/*20080527 to latest
+소지 한코인 : %d 한코인
+Han Coin: %d Han Coin
+*/
+ MSG_SIMPLE_POINT_SHOP_NHN = 0x56e,
+/*20080527 to latest
+소지 캐시 : %d 캐시
+RoK Point: %d RoK Point
+*/
+ MSG_SIMPLE_POINT_SHOP = 0x56f,
+/*20080527 to latest
+무료 캐시 : %d 캐시
+Free Cash: %d Cash
+*/
+ MSG_SIMPLE_POINT_SHOP2 = 0x570,
+#endif
+#if PACKETVER >= 20080715
+/*20080715 to latest
+본서버 유저는 프리서버에 접속할수 없습니다.
+An user of this server cannot connect to free server
+*/
+ MSG_MAIN_USER_CANONT_LOGIN_FREE_SERVER = 0x571,
+/*20080715 to latest
+유효기간이 지난 비밀번호 입니다. 다시 로그인하여주십시오.
+Your password has expired. Please log in again
+*/
+ MSG_INVALID_ONETIMELIMIT = 0x572,
+#endif
+#if PACKETVER >= 20080903
+/*20080903 to latest
+3차직업
+3rd
+*/
+ MSG_3TABNAME_SKILLWND = 0x573,
+#endif
+#if PACKETVER >= 20080917
+/*20080917 to latest
+이 스킬을 사용할 수 없는 대상입니다.
+This skill can't be used on that target.
+*/
+ MSG_USESKILL_FAIL_TOTARGET = 0x574,
+/*20080917 to latest
+안실라 소유 개수가 초과하여 스킬을 사용할 수 없습니다.
+You can't use skill because you have exceeded the number Ancilla possession limit
+*/
+ MSG_USESKILL_FAIL_ANCILLA_NUMOVER = 0x575,
+/*20080917 to latest
+성수가 필요합니다.
+Unable to use the skill to exceed the number of Ancilla.
+*/
+ MSG_USESKILL_FAIL_HOLYWATER = 0x576,
+/*20080917 to latest
+안실라가 필요합니다.
+Holy water is required.
+*/
+ MSG_USESKILL_FAIL_ANCILLA = 0x577,
+/*20080917 to latest
+일정거리 내에 중복될 수 없습니다.
+Ancilla is required.
+*/
+ MSG_USESKILL_FAIL_DUPLICATE_RANGEIN = 0x578,
+/*20080917 to latest
+이 스킬을 사용하기 위해서는 다른 스킬이 필요합니다.
+Cannot be duplicated within a certain distance.
+*/
+ MSG_USESKILL_FAIL_NEED_OTHER_SKILL = 0x579,
+#endif
+#if PACKETVER >= 20080924
+/*20080924 to latest
+이 맵에서는 채팅을 할 수 없습니다.
+This skill requires other skills to be used.
+*/
+ MSG_NO_CHATTING = 0x57a,
+#endif
+#if PACKETVER >= 20081001
+/*20081001 to latest
+3시간이 지났습니다.
+Chat is not allowed in this map
+*/
+ MSG_VET_3HOUR = 0x57b,
+/*20081001 to latest
+5시간이 지났습니다.
+3 hours have passed.
+*/
+ MSG_VET_5HOUR = 0x57c,
+#endif
+#if PACKETVER >= 20081008
+/*20081008 to latest
+게임가드 초기화 에러 또는 구버전의 게임가드 파일입니다. 게임가드 셋업파일을 다시 설치하고 게임을 실행해 보시기 바랍니다.
+5 hours have passed.
+*/
+ MSG_NPGAMEMON_ERROR_GAMEGUARD = 0x57d,
+/*20081008 to latest
+ini 파일이 없거나 변조되었습니다. 게임가드 셋업파일을 설치하면 해결 할 수 있습니다.
+Game guard initialization error or previous version game guard file is installed. Please re-install the setup file and try again
+*/
+ MSG_NPGMUP_ERROR_PARAM = 0x57e,
+/*20081008 to latest
+게임가드와 충돌 프로그램이 발견되었습니다.
+Either ini file is missing or altered. Install game guard setup file to fix the problem
+*/
+ MSG_NPGG_ERROR_COLLISION = 0x57f,
+#endif
+#if PACKETVER >= 20081112
+/*20081112 to latest
+잘못된 클라이언트입니다. 정상적인 클라이언트를 실행하여 주십시요.
+There is a program found that conflicts with game guard
+*/
+ MSG_PROOF_ERROR = 0x580,
+#endif
+#if PACKETVER >= 20081203
+/*20081203 to latest
+모바일 인증을 받아주시기 바랍니다.
+Incorrect client. Please run a normal client
+*/
+ MSG_MOBILE_LOCKSERVER = 0x581,
+#endif
+#if PACKETVER >= 20081210
+/*20081210 to latest
+모바일 인증에 실패하였습니다.
+Thank you to accept mobile authentication.
+*/
+ MSG_FAILED_MOBILE_LOCKSERVER = 0x582,
+#endif
+#if PACKETVER >= 20081217
+/*20081217 to latest
+이스킬은 혼자서 사용할수 없습니다.
+This skill can't be used alone
+*/
+ MSG_USESKILL_FAIL_NEED_HELPER = 0x583,
+/*20081217 to latest
+이스킬은 특정방향으로만 사용할수 있습니다.
+This skill can be used to certain direction only
+*/
+ MSG_USESKILL_FAIL_INVALID_DIR = 0x584,
+/*20081217 to latest
+더이상 소환할수 없습니다.
+Cannot summon spheres anymore.
+*/
+ MSG_USESKILL_FAIL_SUMMON = 0x585,
+/*20081217 to latest
+소환된 구체가 존재하지 않습니다.
+*/
+ MSG_USESKILL_FAIL_SUMMON_NONE = 0x586,
+/*20081217 to latest
+사용가능한 모방스킬이 존재하지 않습니다.
+There is no imitation skills available.
+*/
+ MSG_USESKILL_FAIL_IMITATION_SKILL_NONE = 0x587,
+/*20081217 to latest
+이 스킬은 중복해서 사용할수 없습니다.
+You can't reuse this skill
+*/
+ MSG_USESKILL_FAIL_DUPLICATE = 0x588,
+/*20081217 to latest
+스킬을 사용할수 없는 상태입니다.
+Skill can't be used in this state
+*/
+ MSG_USESKILL_FAIL_CONDITION = 0x589,
+/*20081217 to latest
+아이템별 최대 소지량을 초과하여 가질 수 없습니다.
+You have exceeded the maximum amount of possession of another item.
+*/
+ MSG_PICKUP_MAXCOUNT_LIMIT = 0x58a,
+#endif
+#if PACKETVER >= 20090204
+/*20090204 to latest
+관리자 권한이 없습니다. 프로그램 최초 실행은 관리자 권한으로 실행하셔야 합니다.
+No administrative privileges. Must first run the program with administrator privileges.
+*/
+ MSG_NPK_ERROR_NOTADMIN = 0x58b,
+/*20090204 to latest
+nProtect KeyCrypt 드라이버 버전이 맞지 않습니다. 시스템 재 부팅 후에 새로 실행 시켜 주십시오.
+nProtect KeyCrypt not the same. Please restart the program and the computer first.
+*/
+ MSG_NPK_ERROR_DRIVERVERSION = 0x58c,
+/*20090204 to latest
+WindowXP 호환성 모드를 사용하고 계십니다. 현재 프로그램에서 호환성 모드를 제거하였습니다. 프로그램을 새로 시작해 주십시오.
+Currently wearing WindowXP Compatibility Mode. The program now removes Compatibility Mode. Please restart the program.
+*/
+ MSG_NPK_ERROR_VERIFYVERSION = 0x58d,
+/*20090204 to latest
+PS/2 키로거가 존재합니다.
+PS/2 keyloggers exist.
+*/
+ MSG_DETECT_PS2KEYLOGGER = 0x58e,
+/*20090204 to latest
+USB 키보드 드라이버 해킹 시도가 탐지되었습니다.
+USB Keylogging attempt was detected.
+*/
+ MSG_DETECT_USBKEYLOGGER = 0x58f,
+/*20090204 to latest
+HHD 모니터링 툴이 탐지되었습니다.
+HHD monitoring tool has been detected.
+*/
+ MSG_DETECT_HHDUSBH = 0x590,
+/*20090204 to latest
+페인트붓이 필요합니다.
+Paintbrush is required.
+*/
+ MSG_USESKILL_FAIL_PAINTBRUSH = 0x591,
+/*20090204 to 20090401
+그림물감이 필요합니다.
+20090408 to latest
+서페이스페인트가 필요합니다.
+Paint is required.
+*/
+ MSG_USESKILL_FAIL_II_SURFACE_PAINTS = 0x592,
+/*20090204 to latest
+지정한 위치에 스킬을 사용할수 없습니다.
+Use the skills that are not at the specified location.
+*/
+ MSG_USESKILL_FAIL_POS = 0x593,
+/*20090204 to latest
+도우미의 SP가 부족합니다.
+Not enough SP.
+*/
+ MSG_USESKILL_FAIL_HELPER_SP_INSUFFICIENT = 0x594,
+#endif
+#if PACKETVER >= 20090211
+/*20090211 to 20090218
+생성 가능 캐릭터 수는 9개입니다!!(임시)
+20090225 to latest
+캐릭터 선택창의 캐릭터가 %d개를 초과하면 게임에 접속할 수 없습니다. 불필요한 캐릭터를 삭제해주십시오.
+Character %d is character selection window cannot connect to the game that exceeds the total. Please remove unwanted characters.
+*/
+ MSG_BAN_OVER_CHARACTER_LIST = 0x595,
+#endif
+#if PACKETVER >= 20090225
+/*20090225 to latest
+목캔디가 필요합니다.
+Throat Lozenge is required.
+*/
+ MSG_USESKILL_FAIL_II_NECK_CANDY = 0x596,
+/*20090225 to latest
+안타까운눈물이 필요합니다.
+Painful Tears is required.
+*/
+ MSG_USESKILL_FAIL_II_MISERABLE_TEAR = 0x597,
+/*20090225 to latest
+목 보호 캔디가 필요합니다.
+Throat Lozenge is required.
+*/
+ MSG_USESKILL_FAIL_II_PROTECT_NECK_CANDY = 0x598,
+/*20090225 to latest
+웨폰 블로킹의 연계로만 사용가능합니다.
+Cooperation is only available with Weapon Blocking.
+*/
+ MSG_USESKILL_FAIL_GC_WEAPONBLOCKING = 0x599,
+/*20090225 to latest
+길로틴크로스의 독을 바른 무기가 필요합니다.
+Poisoned weapons is required.
+*/
+ MSG_USESKILL_FAIL_GC_POISONINGWEAPON = 0x59a,
+#endif
+#if PACKETVER >= 20090304
+/*20090304 to latest
+마도기어 탑승시에만 사용가능합니다.
+Item can only be used when Mado Gear is mounted.
+*/
+ MSG_USESKILL_FAIL_MADOGEAR = 0x59b,
+/*20090304 to latest
+발칸블릿이 필요합니다.
+Vulcan Bullet is required.
+*/
+ MSG_USESKILL_FAIL_II_VULCANBULLET = 0x59c,
+/*20090304 to latest
+마도기어 연료가 필요합니다.
+Mado Gear Fuel is required.
+*/
+ MSG_USESKILL_FAIL_II_FUELGAS = 0x59d,
+/*20090304 to latest
+액체냉각탄이 필요합니다.
+Liquid Cold Bullet is required.
+*/
+ MSG_USESKILL_FAIL_II_COLDSLOWERBULLET = 0x59e,
+/*20090304 to latest
+캐논볼을 장전 하세요.
+Please load a Cannon Ball.
+*/
+ MSG_USESKILL_FAIL_CANONBALL = 0x59f,
+/*20090304 to latest
+미도기어 가속장치를 착용하세요.
+Please equipped with a Mado Gear Accelerator.
+*/
+ MSG_USESKILL_FAIL_II_MADOGEAR_ACCELERATION = 0x5a0,
+/*20090304 to latest
+호버링부스터를 착용하세요.
+Please equipped with a Hovering Booster.
+*/
+ MSG_USESKILL_FAIL_II_MADOGEAR_HOVERING_BOOSTER = 0x5a1,
+/*20090304 to latest
+[톡신] 독 효과가 무기에 적용되었습니다.
+[Toxin] Poison effect was applied to the weapon.
+*/
+ MSG_TOXIN = 0x5a2,
+/*20090304 to latest
+[패럴라이즈] 독 효과가 무기에 적용되었습니다.
+[Paralysis] Poison effect was applied to the weapon.
+*/
+ MSG_PARALYZE = 0x5a3,
+/*20090304 to latest
+[베놈블리드] 독 효과가 무기에 적용되었습니다.
+[Fatigue] Poison effect was applied to the weapon.
+*/
+ MSG_VENOMBLEED = 0x5a4,
+/*20090304 to latest
+[매직 머쉬룸] 독 효과가 무기에 적용되었습니다.
+[Laughing] Poison effect was applied to the weapon.
+*/
+ MSG_MAGICMUSHROOM = 0x5a5,
+/*20090304 to latest
+[데스 허트] 독 효과가 무기에 적용되었습니다.
+[Disheart] Poison effect was applied to the weapon.
+*/
+ MSG_DEATHHURT = 0x5a6,
+/*20090304 to latest
+[파이렉시아] 독 효과가 무기에 적용되었습니다.
+[Pyrexia] Poison effect was applied to the weapon.
+*/
+ MSG_PHYREXIA = 0x5a7,
+/*20090304 to latest
+[오블리비언 커즈] 독 효과가 무기에 적용되었습니다.
+[Oblivion] Poison effect was applied to the weapon.
+*/
+ MSG_OBLIANCURSE = 0x5a8,
+/*20090304 to latest
+[리치 엔드] 독 효과가 무기에 적용되었습니다.
+[Leech] Poison effect was applied to the weapon.
+*/
+ MSG_RICHEND = 0x5a9,
+#endif
+#if PACKETVER >= 20090311
+/*20090311 to latest
+호버링상태에서만 사용가능합니다.
+Can only be used in Hovering state.
+*/
+ MSG_USESKILL_FAIL_MADOGEAR_HOVERING = 0x5aa,
+/*20090311 to latest
+자폭장치를 장착하세요.
+Please equip a Self-Destruct Mechanism.
+*/
+ MSG_USESKILL_FAIL_II_MADOGEAR_SELFDESTRUCTION_DEVICE = 0x5ab,
+/*20090311 to latest
+셰이프쉬프터를 장착하세요.
+Please equip a Shape Shift.
+*/
+ MSG_USESKILL_FAIL_II_MADOGEAR_SHAPESHIFTER = 0x5ac,
+/*20090311 to latest
+길로틴독이 필요합니다.
+Guillotine Cross Poison is required.
+*/
+ MSG_USESKILL_FAIL_GUILLONTINE_POISON = 0x5ad,
+/*20090311 to latest
+냉각장치를 장착하세요.
+Please equipped with a Cooling System.
+*/
+ MSG_USESKILL_FAIL_II_MADOGEAR_COOLING_DEVICE = 0x5ae,
+/*20090311 to latest
+자기장필드생성기를 착용하세요.
+Please equipped with a Magnetic Field Generator.
+*/
+ MSG_USESKILL_FAIL_II_MADOGEAR_MAGNETICFIELD_GENERATOR = 0x5af,
+/*20090311 to latest
+베리어생성기를 착용하세요.
+Please equipped with a Barrier Generator.
+*/
+ MSG_USESKILL_FAIL_II_MADOGEAR_BARRIER_GENERATOR = 0x5b0,
+/*20090311 to latest
+광학미채발생기를 착용하세요.
+Please equipped with a Optical Camouflage Generator.
+*/
+ MSG_USESKILL_FAIL_II_MADOGEAR_OPTICALCAMOUFLAGE_GENERATOR = 0x5b1,
+/*20090311 to latest
+리페어키트를 착용하세요.
+Please equipped with a Repair Kit.
+*/
+ MSG_USESKILL_FAIL_II_MADOGEAR_REPAIRKIT = 0x5b2,
+/*20090311 to latest
+몽키 스패너가 필요합니다.
+Monkey Wrench is required.
+*/
+ MSG_USESKILL_FAIL_II_MONKEY_SPANNER = 0x5b3,
+#endif
+#if PACKETVER >= 20090318
+/*20090318 to latest
+[%s] 스킬을 시전 할 수 없습니다.
+[%s] Cannot use the skills due to cooldown delay.
+*/
+ MSG_SKILLINTERVAL2 = 0x5b4,
+/*20090318 to latest
+%d레벨 이상은 삭제가 불가능합니다.
+Deletion is impossible for over level %d
+*/
+ MSG_LEMIT_DELETE_LEVEL = 0x5b5,
+/*20090318 to latest
+마도기어 탑승시에는 사용할수 없습니다.
+*/
+ MSG_USESKILL_FAIL_MADOGEAR_RIDE = 0x5b6,
+#endif
+#if PACKETVER >= 20090320
+/*20090320 to latest
+드래곤 내리기
+Dismount Dragon
+*/
+ MSG_DRAGONOFF = 0x5b7,
+/*20090320 to latest
+마도기어 내리기
+Dismount Magic Gear
+*/
+ MSG_MADOOFF = 0x5b8,
+#endif
+#if PACKETVER >= 20090330
+/*20090330 to latest
+소비
+I
+*/
+ MSG_STORE_TABNAME_0 = 0x5b9,
+/*20090330 to latest
+캐쉬
+Cash
+*/
+ MSG_STORE_TABNAME_1 = 0x5ba,
+/*20090330 to latest
+방어구
+Armors
+*/
+ MSG_STORE_TABNAME_2 = 0x5bb,
+/*20090330 to latest
+무기
+Weapons
+*/
+ MSG_STORE_TABNAME_3 = 0x5bc,
+/*20090330 to latest
+투사체
+Ammo
+*/
+ MSG_STORE_TABNAME_4 = 0x5bd,
+/*20090330 to latest
+카드
+Card
+*/
+ MSG_STORE_TABNAME_5 = 0x5be,
+/*20090330 to latest
+기타
+Other
+*/
+ MSG_STORE_TABNAME_6 = 0x5bf,
+#endif
+#if PACKETVER >= 20090401
+/*20090401 to latest
+클라이언트 응답시간이 초과되어 연결이 끊어집니다.
+Client response time has passed so connection is terminated
+*/
+ MSG_ERROR_HS_TIMEOUT = 0x5c0,
+/*20090401 to latest
+핵쉴드 파일의 버전이 맞지 않습니다. 클라이언트를 재설치 해주십시오.
+Incorrect version of hack shield file. Please reinstall the client
+*/
+ MSG_ERROR_DIFF_CLIENT = 0x5c1,
+#endif
+#if PACKETVER >= 20090408
+/*20090408 to latest
+마법서가 필요합니다.
+[Magic Book] is required.
+*/
+ MSG_USESKILL_FAIL_SPELLBOOK = 0x5c2,
+/*20090408 to latest
+마법서가 너무 어려워서 졸음이 몰려온다.
+Feel sleepy since Magic Book is too difficult to understand.
+*/
+ MSG_USESKILL_FAIL_SPELLBOOK_DIFFICULT_SLEEP = 0x5c3,
+/*20090408 to latest
+보존포인트가 부족합니다.
+Not enough saved point.
+*/
+ MSG_USESKILL_FAIL_SPELLBOOK_PRESERVATION_POINT = 0x5c4,
+/*20090408 to latest
+더이상 마법서를 읽을수 없습니다.
+Can't read a Magic Book anymore.
+*/
+ MSG_USESKILL_FAIL_SPELLBOOK_READING = 0x5c5,
+/*20090408 to latest
+페이스페인트가 필요합니다.
+Face Paint is required.
+*/
+ MSG_USESKILL_FAIL_II_FACE_PAINTS = 0x5c6,
+/*20090408 to latest
+분장용붓이 필요합니다.
+Brush is required.
+*/
+ MSG_USESKILL_FAIL_II_MAKEUP_BRUSH = 0x5c7,
+/*20090408 to latest
+대기 시간이 초과하였습니다. 다시 로그인 해주십시오.
+Waiting time has passed. Please log in again
+*/
+ MSG_MOBILE_TIMEOVER = 0x5c8,
+/*20090408 to latest
+위험! 이미 동일한 계정이 로그인 중에 있습니다. 잠시 모바일 인증 진행을 멈추시고 비번을 수정한 뒤 재 로그인 해주십시오.
+Watch out! Same account is already logged in. Stop mobile verification and log in again after changing your password
+*/
+ MSG_MOBILE_ANOTHER_LOGIN = 0x5c9,
+/*20090408 to latest
+위험! 현재 동일한 계정이 모바일 인증 대기 중에 있습니다. 잠시 모바일 인증 진행을 멈추시고 비번을 수정한 뒤 재 로그인 해주십시오.
+Watch out! Same account is waiting for mobile verification. Stop mobile verification and log in again after changing your password
+*/
+ MSG_MOBILE_WAITING_STATE = 0x5ca,
+#endif
+#if PACKETVER >= 20090506
+/*20090506 to latest
+게임 옵션창
+Game setting window
+*/
+ MSG_ESC_OPTIONWND = 0x5cb,
+/*20090506 to latest
+그래픽 설정
+Graphics Settings
+*/
+ MSG_GRAPHIC_OPTIONWND = 0x5cc,
+/*20090506 to latest
+사운드 설정
+Sound Settings
+*/
+ MSG_SOUND_OPTIONWND = 0x5cd,
+#endif
+#if PACKETVER >= 20090514
+/*20090514 to latest
+변경 할 단축키를 누르거나, 'ESC'키를 눌러 삭제 해 주세요.
+Press a key to assign. Pressing 'ESC' will remove the assigned key.
+*/
+ MSG_HOTKEYWND_NOTICE1 = 0x5ce,
+/*20090514 to latest
+단일 키로 지정 할 수 없는 키입니다.
+Unable to specify a single key.
+*/
+ MSG_HOTKEYWND_NOTICE2 = 0x5cf,
+/*20090514 to latest
+지정 할 수 없는 키입니다.
+Unable to specify the key assigned.
+*/
+ MSG_HOTKEYWND_NOTICE3 = 0x5d0,
+/*20090514 to latest
+'%s'에 사용된 단축키와 중복됩니다. 바꾸시겠습니까?
+Duplicated with ['%s']. Do you still want to change?
+*/
+ MSG_HOTKEYWND_NOTICE4 = 0x5d1,
+/*20090514 to latest
+저장된 단축키 조합이 초기화 됩니다. 초기화 하시겠습니까?
+Initialization is stored in the shortcut key settings. Do you want to initialized?
+*/
+ MSG_HOTKEYWND_NOTICE5 = 0x5d2,
+/*20090514 to latest
+스킬바
+Skill Bar
+*/
+ MSG_HOTKEYWND_TAB1 = 0x5d3,
+/*20090514 to latest
+인터페이스
+Interface
+*/
+ MSG_HOTKEYWND_TAB2 = 0x5d4,
+/*20090514 to latest
+이모션
+Macros
+*/
+ MSG_HOTKEYWND_TAB3 = 0x5d5,
+/*20090514 to latest
+단축키 설정 창
+Shortcut Settings
+*/
+ MSG_HOTKEYWND_TITLE = 0x5d6,
+#endif
+#if PACKETVER >= 20090520
+/*20090520 to latest
+배경음
+BGM
+*/
+ MSG_BGM = 0x5d7,
+/*20090520 to latest
+효과음
+Effect
+*/
+ MSG_SOUND = 0x5d8,
+/*20090520 to latest
+스킨
+Skin
+*/
+ MSG_SKIN = 0x5d9,
+/*20090520 to latest
+채팅방 입장음만 소리남 On
+Chat room entrance sound on
+*/
+ MSG_TINGONLY_ON = 0x5da,
+/*20090520 to latest
+채팅방 입장음만 소리남 Off
+Chat room entrance sound off
+*/
+ MSG_TINGONLY_OFF = 0x5db,
+/*20090520 to latest
+/tingonly : 채팅방 입장음만 들을수있게됩니다
+/tingonly: you can hear only sound like a chat room entry.
+*/
+ MSG_EXPLAIN_TINGONLY = 0x5dc,
+/*20090520 to latest
+/주먹
+/rock
+*/
+ MSG_EMOTION_ROCK = 0x5dd,
+/*20090520 to latest
+/가위
+/scissors
+*/
+ MSG_EMOTION_SCISSOR = 0x5de,
+/*20090520 to latest
+/보
+/paper
+*/
+ MSG_EMOTION_WRAP = 0x5df,
+/*20090520 to latest
+/러브
+/love
+*/
+ MSG_EMOTION_LUV = 0x5e0,
+/*20090520 to latest
+/mobile
+*/
+ MSG_EMOTION_MOBILE = 0x5e1,
+/*20090520 to latest
+/mail
+*/
+ MSG_EMOTION_MAIL = 0x5e2,
+/*20090520 to latest
+/antenna0
+*/
+ MSG_EMOTION_ANTENNA0 = 0x5e3,
+/*20090520 to latest
+/antenna1
+*/
+ MSG_EMOTION_ANTENNA1 = 0x5e4,
+/*20090520 to latest
+/antenna2
+*/
+ MSG_EMOTION_ANTENNA2 = 0x5e5,
+/*20090520 to latest
+/antenna3
+*/
+ MSG_EMOTION_ANTENNA3 = 0x5e6,
+/*20090520 to latest
+/hum
+*/
+ MSG_EMOTION_HUM2 = 0x5e7,
+/*20090520 to latest
+/abs
+*/
+ MSG_EMOTION_ABS = 0x5e8,
+/*20090520 to latest
+/oops
+*/
+ MSG_EMOTION_OOPS = 0x5e9,
+/*20090520 to latest
+/spit
+*/
+ MSG_EMOTION_SPIT = 0x5ea,
+/*20090520 to latest
+/ene
+*/
+ MSG_EMOTION_ENE = 0x5eb,
+/*20090520 to latest
+/panic
+*/
+ MSG_EMOTION_PANIC = 0x5ec,
+/*20090520 to latest
+/whisp
+*/
+ MSG_EMOTION_WHISP = 0x5ed,
+#endif
+#if PACKETVER >= 20090527
+/*20090527 to latest
+지정안함
+Not Assigned
+*/
+ MSG_HOTKEY_NOTHING = 0x5ee,
+#endif
+#if PACKETVER >= 20090603
+/*20090603 to latest
+카트장착시에만 사용가능합니다.
+Only available when cart is mounted.
+*/
+ MSG_USESKILL_FAIL_CART = 0x5ef,
+/*20090603 to latest
+[가시나무 씨앗]이 필요합니다.
+[Thorny Seed] is required.
+*/
+ MSG_USESKILL_FAIL_II_THORNS_SEED = 0x5f0,
+/*20090603 to latest
+[흡혈 식물 씨앗]이 필요합니다.
+[Bloodsucker Seed] is required.
+*/
+ MSG_USESKILL_FAIL_II_BLOOD_SUCKER_SEED = 0x5f1,
+/*20090603 to latest
+더이상 시전할수 없습니다.
+Cannot be used anymore.
+*/
+ MSG_USESKILL_FAIL_NO_MORE_SPELL = 0x5f2,
+/*20090603 to latest
+[폭탄버섯포자]가 필요합니다.
+[Bomb Mushroom Spore] is required.
+*/
+ MSG_USESKILL_FAIL_II_BOMB_MUSHROOM_SPORE = 0x5f3,
+/*20090603 to latest
+[화염병]이 필요합니다.
+[Fire Bottle] is required.
+*/
+ MSG_USESKILL_FAIL_II_GASOLINE_BOOMB = 0x5f4,
+/*20090603 to latest
+[기름병]이 필요합니다.
+[Oil Bottle] is required.
+*/
+ MSG_USESKILL_FAIL_II_OIL_BOTTLE = 0x5f5,
+/*20090603 to latest
+[폭발가루]가 필요합니다.
+[Explosive Powder] is required.
+*/
+ MSG_USESKILL_FAIL_II_EXPLOSION_POWDER = 0x5f6,
+/*20090603 to latest
+[연막가루]가 필요합니다.
+[Smokescreen Powder] is required.
+*/
+ MSG_USESKILL_FAIL_II_SMOKE_POWDER = 0x5f7,
+/*20090603 to latest
+[최루가스]가 필요합니다.
+[Tear Gas] is required.
+*/
+ MSG_USESKILL_FAIL_II_TEAR_GAS = 0x5f8,
+/*20090603 to latest
+[염산병]이 필요합니다.
+[Acid Bottle] is required.
+*/
+ MSG_USESKILL_FAIL_II_HYDROCHLORIC_ACID_BOTTLE = 0x5f9,
+/*20090603 to latest
+[식인식물병]이 필요합니다.
+[Bottom Man-Eating Plant] is required.
+*/
+ MSG_USESKILL_FAIL_II_HELLS_PLANT_BOTTLE = 0x5fa,
+/*20090603 to latest
+[만드라고라의 화분]이 필요합니다.
+[Pot of Mandragora] is required.
+*/
+ MSG_USESKILL_FAIL_II_MANDRAGORA_FLOWERPOT = 0x5fb,
+/*20090603 to latest
+파티장 위임
+Party delegation
+*/
+ MSG_YIELD_PARTYMASTER = 0x5fc,
+/*20090603 to latest
+정말 파티장을 위임하시겠습니까?
+Do you want to delegate the real party?
+*/
+ MSG_DO_YOU_REALLY_WANT_YIELD_PARTYMASTER = 0x5fd,
+/*20090603 to latest
+파티장을 위임 할 수 없습니다.
+Party cannot be delegated.
+*/
+ MSG_CANNOT_YIELD_PARTYMASTER = 0x5fe,
+/*20090603 to latest
+변경불가
+Immutable
+*/
+ MSG_FAILED_CHANGE = 0x5ff,
+#endif
+#if PACKETVER >= 20090610
+/*20090610 to latest
+[%s]가 %d개 필요합니다.
+[%s] required '%d' amount.
+*/
+ MSG_USESKILL_FAIL_NEED_ITEM = 0x600,
+/*20090610 to latest
+제련 수치가 하향 조정 되었습니다.
+Is now refining the value lowered.
+*/
+ MSG_ITEM_REFINING_DOWNGRADE = 0x601,
+/*20090610 to latest
+[%s]를 장비하고 있어야 사용할 수 있습니다
+Need to put on [%s] in order to use.
+*/
+ MSG_USESKILL_FAIL_NEED_EQUIPMENT = 0x602,
+#endif
+#if PACKETVER >= 20090617
+/*20090617 to latest
+전장 리스트
+*/
+ MSG_BATTLEFIELD_LIST = 0x603,
+/*20090617 to latest
+전장 - [%s] 신청 하시겠습니까?
+*/
+ MSG_CANNOT_JOINTO_BATTLEFIELD = 0x604,
+/*20090617 to latest
+전장 - [%s] 입장 신청이 완료되었습니다.
+*/
+ MSG_COMPLETED_JOINTO_BATTLEFIELD = 0x605,
+/*20090617 to latest
+전장 - [%s] 입장 하실 수 없습니다.
+*/
+ MSG_DIFFER_JOINTO_BATTLEFIELD = 0x606,
+/*20090617 to latest
+현재 입장 신청 상태입니다.
+*/
+ MSG_STATUS_JOINTO_BATTLEFIELD = 0x607,
+/*20090617 to latest
+입장 신청을 취소하시겠습니까?
+*/
+ MSG_REQ_CANCEL_JOINTO_BATTLEFIELD = 0x608,
+/*20090617 to latest
+전장 - [%s] 입장 신청이 취소되었습니다.
+*/
+ MSG_CANCEL_JOINTO_BATTLEFIELD = 0x609,
+/*20090617 to latest
+곧 전장으로 이동 합니다.
+*/
+ MSG_MOVETO_BATTLEFIELD = 0x60a,
+/*20090617 to latest
+전장 - [%s]
+*/
+ MSG_BATTLEFIELD_NAME = 0x60b,
+#endif
+
+};
+#endif /* MAP_MESSAGES_SAK_H */
diff --git a/src/map/messages_zero.h b/src/map/messages_zero.h
index 19959dc70..dc2f87a76 100644
--- a/src/map/messages_zero.h
+++ b/src/map/messages_zero.h
@@ -23,7 +23,7 @@
/* This file is autogenerated, please do not commit manual changes
-Latest version: 20180725
+Latest version: 20181024
*/
enum clif_messages {
@@ -13926,9 +13926,11 @@ DEATH : %.1f%% ( basic 100.0%% VIP Bonus %.1f%% + %s %.1f%%)
DEATH: %.1f%% (Basic 100.0%% VIP Bonus %.1f%% + %s %.1f%%)
*/
MSG_ID_AFB = 0xafb,
-/*20171018 to latest
+/*20171018 to 20180928
해당 태그는 이름으로 사용하실 수 없습니다.
Name with this tag cannot be used.
+20181010 to latest
+ 해당 내용은 이름으로 사용하실 수 없습니다.
*/
MSG_ID_AFC = 0xafc,
/*20171018 to latest
@@ -17357,19 +17359,111 @@ DEATH : %.1f%% ( basic 100.0%% %s %.1f%%)
MSG_ID_DD1 = 0xdd1,
#endif
#if PACKETVER >= 20180725
-/*20180725 to latest
+/*20180725 to 20180801
'
+20180808 to latest
+영문이나 러시아어 단독으로만 사용이 가능합니다.
*/
MSG_ID_DD2 = 0xdd2,
-/*20180725 to latest
+/*20180725 to 20180801
;
+20180822 to latest
+you must have an AccessTicket to login
*/
MSG_ID_DD3 = 0xdd3,
-/*20180725 to latest
+/*20180725 to 20180801
--
+20180905 to latest
+창고를 불러오는 중입니다.
*/
MSG_ID_DD4 = 0xdd4,
#endif
+#if PACKETVER >= 20180905
+/*20180905 to latest
+NOW LOADING..
+*/
+ MSG_ID_DD5 = 0xdd5,
+#endif
+#if PACKETVER >= 20180919
+/*20180919 to latest
+삭제
+*/
+ MSG_ID_DD6 = 0xdd6,
+/*20180919 to latest
+답장
+*/
+ MSG_ID_DD7 = 0xdd7,
+/*20180919 to latest
+전송
+*/
+ MSG_ID_DD8 = 0xdd8,
+/*20180919 to latest
+이름확인
+*/
+ MSG_ID_DD9 = 0xdd9,
+/*20180919 to latest
+공지
+Notice
+*/
+ MSG_ID_DDA = 0xdda,
+/*20180919 to latest
+일반
+General
+*/
+ MSG_ID_DDB = 0xddb,
+/*20180919 to latest
+반송
+Clear
+*/
+ MSG_ID_DDC = 0xddc,
+/*20180919 to latest
+검색
+Search
+*/
+ MSG_ID_DDD = 0xddd,
+#endif
+#if PACKETVER >= 20181024
+/*20181024 to latest
+펫 먹이주기에 실패했습니다. 먹이를 줄 수 없는 상태입니다.
+*/
+ MSG_ID_DDE = 0xdde,
+/*20181024 to latest
+호문 먹이주기에 실패했습니다. 먹이를 줄 수 없는 상태입니다.
+*/
+ MSG_ID_DDF = 0xddf,
+/*20181024 to latest
+화폐
+*/
+ MSG_ID_DE0 = 0xde0,
+/*20181024 to latest
+%s %d개
+*/
+ MSG_ID_DE1 = 0xde1,
+/*20181024 to latest
+교환에 실패하였습니다.
+*/
+ MSG_ID_DE2 = 0xde2,
+/*20181024 to latest
+교환이 잘 이루어졌습니다.
+*/
+ MSG_ID_DE3 = 0xde3,
+/*20181024 to latest
+교환에 필요한 재화가 부족합니다.
+*/
+ MSG_ID_DE4 = 0xde4,
+/*20181024 to latest
+해당 아이템은 이미 판매되어 재고가 부족합니다.
+*/
+ MSG_ID_DE5 = 0xde5,
+/*20181024 to latest
+사망
+*/
+ MSG_ID_DE6 = 0xde6,
+/*20181024 to latest
+PvP
+*/
+ MSG_ID_DE7 = 0xde7,
+#endif
};
#endif /* MAP_MESSAGES_ZERO_H */
diff --git a/src/map/mob.c b/src/map/mob.c
index 27039490c..765acafe7 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -2426,7 +2426,8 @@ static int mob_dead(struct mob_data *md, struct block_list *src, int type)
if(zeny) // zeny from mobs [Valaris]
pc->getzeny(tmpsd[i], zeny, LOG_TYPE_PICKDROP_MONSTER, NULL);
- achievement->validate_mob_kill(tmpsd[i], md->db->mob_id); // Achievements [Smokexyz/Hercules]
+ if (!md->special_state.clone && !mob->is_clone(md->class_))
+ achievement->validate_mob_kill(tmpsd[i], md->db->mob_id); // Achievements [Smokexyz/Hercules]
}
}
@@ -2702,11 +2703,11 @@ static int mob_dead(struct mob_data *md, struct block_list *src, int type)
if (++sd->mission_count >= 100 && (temp = mob->get_random_id(0, 0xE, sd->status.base_level)) != 0) {
pc->addfame(sd, RANKTYPE_TAEKWON, 1);
sd->mission_mobid = temp;
- pc_setglobalreg(sd,script->add_str("TK_MISSION_ID"), temp);
+ pc_setglobalreg(sd,script->add_variable("TK_MISSION_ID"), temp);
sd->mission_count = 0;
clif->mission_info(sd, temp, 0);
}
- pc_setglobalreg(sd,script->add_str("TK_MISSION_COUNT"), sd->mission_count);
+ pc_setglobalreg(sd,script->add_variable("TK_MISSION_COUNT"), sd->mission_count);
}
if( sd->status.party_id )
@@ -4955,7 +4956,6 @@ static bool mob_skill_db_libconfig_sub_skill(struct config_setting_t *it, int n,
int skill_id = 0;
int skill_idx = 0;
bool clearskills = false;
- char valname[5];
const char *name = config_setting_name(it);
struct mob_skill *ms, gms;
@@ -5055,6 +5055,7 @@ static bool mob_skill_db_libconfig_sub_skill(struct config_setting_t *it, int n,
ms->cond2 = i32;
for (i = 0; i < 5; i++) {
+ char valname[16];
sprintf(valname, "val%1d", i);
if (libconfig->setting_lookup_int(it, valname, &i32))
ms->val[i] = i32;
diff --git a/src/map/npc.c b/src/map/npc.c
index f80f8443a..7f57a9c50 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -1762,8 +1762,8 @@ static bool npc_trader_pay(struct npc_data *nd, struct map_session_data *sd, int
snprintf(evname, EVENT_NAME_LENGTH, "%s::OnPayFunds",nd->exname);
if ( (ev = strdb_get(npc->ev_db, evname)) ) {
- pc->setreg(sd,script->add_str("@price"),price);
- pc->setreg(sd,script->add_str("@points"),points);
+ pc->setreg(sd,script->add_variable("@price"),price);
+ pc->setreg(sd,script->add_variable("@points"),points);
script->run_npc(ev->nd->u.scr.script, ev->pos, sd->bl.id, ev->nd->bl.id);
} else
ShowError("npc_trader_pay: '%s' event '%s' not found, operation failed\n",nd->exname,evname);
@@ -2868,7 +2868,7 @@ static const char *npc_parse_shop(const char *w1, const char *w2, const char *w3
struct npc_item_list *items = NULL;
size_t items_count = 40; // Starting items size
- char *p;
+ const char *p;
int x, y, dir, m, i, class_;
struct npc_data *nd;
enum npc_subtype type;
@@ -4971,6 +4971,7 @@ static int npc_reload(void)
npc->npc_mob = npc->npc_cache_mob = npc->npc_delay_mob = 0;
// reset mapflags
+ map->zone_reload();
map->flags_init();
// Reprocess npc files and reload constants
diff --git a/src/map/npc.h b/src/map/npc.h
index eff4ed4ec..ed5f4138d 100644
--- a/src/map/npc.h
+++ b/src/map/npc.h
@@ -144,7 +144,7 @@ enum actor_classes {
#define MAX_NPC_CLASS 1000
// New NPC range
#define MAX_NPC_CLASS2_START 10001
-#define MAX_NPC_CLASS2_END 10248
+#define MAX_NPC_CLASS2_END 10310
//Script NPC events.
enum npce_event {
diff --git a/src/map/packets.h b/src/map/packets.h
index 6fb637185..09c061920 100644
--- a/src/map/packets.h
+++ b/src/map/packets.h
@@ -1142,7 +1142,7 @@ packet(0x96e,-1,clif->ackmergeitems);
packet(0x02cc,4);
packet(0x02cd,26);
packet(0x02ce,10);
- packet(0x02cf,6);
+ packet(0x02cf,6,clif->pMemorialDungeonCommand);
packet(0x02d0,-1);
packet(0x02d1,-1);
packet(0x02d2,-1);
@@ -1759,7 +1759,7 @@ packet(0x96e,-1,clif->ackmergeitems);
#if PACKETVER >= 20100413
//packet(0x081A,10);
packet(0x0820,11);
- //packet(0x0821,2);
+ packet(0x0821,2);
//packet(0x0822,9);
//packet(0x0823,-1);
#endif
@@ -3994,9 +3994,6 @@ packet(0x96e,-1,clif->ackmergeitems);
packet(0x0af2,40,clif->pDull/*,XXX*/);
packet(0x0af3,-1,clif->pDull/*,XXX*/);
// changed packet sizes
-#ifndef PACKETVER_RE
- packet(0x0821,102,clif->pDull/*,XXX*/); // AC_OTP_USER
-#endif
#endif
#ifdef PACKETVER_ZERO
@@ -4011,11 +4008,6 @@ packet(0x96e,-1,clif->ackmergeitems);
#endif
#endif // PACKETVER_ZERO
-#if PACKETVER >= 20180131
-// changed packet sizes
- packet(0x0821,102); // AC_OTP_USER
-#endif
-
#ifdef PACKETVER_ZERO
// 2018-02-07bRagexe_zero
#if PACKETVER >= 20180207
@@ -4091,14 +4083,6 @@ packet(0x96e,-1,clif->ackmergeitems);
#endif
#endif // PACKETVER_ZERO
-#ifdef PACKETVER_RE
-// 2018-04-04cRagexeRE
-#if PACKETVER >= 20180404
-// changed packet sizes
- packet(0x0821,102,clif->pDull/*,XXX*/); // AC_OTP_USER
-#endif
-#endif
-
#ifndef PACKETVER_ZERO
// 2018-04-18aRagexe, 2018-04-18bRagexeRE
#if PACKETVER >= 20180418
@@ -4121,7 +4105,7 @@ packet(0x96e,-1,clif->ackmergeitems);
// 2018-05-16cRagexe, 2018-05-16cRagexeRE
#if PACKETVER >= 20180516
// new packets
- packet(0x0afc,16,clif->pReqStyleChange);
+ packet(0x0afc,16,clif->pReqStyleChange2);
// changed packet sizes
#endif
#endif // PACKETVER_ZERO
@@ -4130,7 +4114,7 @@ packet(0x96e,-1,clif->ackmergeitems);
// 2018-05-23aRagexe_zero
#if PACKETVER >= 20180523
// new packets
- packet(0x0afc,16,clif->pReqStyleChange);
+ packet(0x0afc,16,clif->pReqStyleChange2);
// changed packet sizes
#endif
#endif // PACKETVER_ZERO
@@ -4138,7 +4122,7 @@ packet(0x96e,-1,clif->ackmergeitems);
// 2018-06-05bRagexe, 2018-06-05bRagexeRE, 2018-06-05bRagexe_zero
#if PACKETVER >= 20180605
// new packets
- packet(0x0afd,155);
+ packet(0x0afd,-1);
packet(0x0afe,-1,clif->pDull/*,XXX*/);
packet(0x0aff,-1,clif->pDull/*,XXX*/);
// changed packet sizes
@@ -4255,4 +4239,166 @@ packet(0x96e,-1,clif->ackmergeitems);
// changed packet sizes
#endif
+#ifndef PACKETVER_ZERO
+// 2018-08-01cRagexe, 2018-08-01cRagexeRE
+#if PACKETVER >= 20180801
+// new packets
+ packet(0x0b03,-1);
+ packet(0x0b04,80,clif->pDull/*,XXX*/);
+// changed packet sizes
+#endif
+#endif // PACKETVER_ZERO
+
+// 2018-08-08_2aRagexe_zero
+#if PACKETVER_ZERO_NUM >= 20180808
+// new packets
+ packet(0x0b04,80,clif->pDull/*,XXX*/);
+// changed packet sizes
+#endif
+
+// 2018-08-22aRagexe_zero
+#if PACKETVER_ZERO_NUM >= 20180822
+// new packets
+ packet(0x0b05,59);
+ packet(0x0b06,53,clif->pDull/*,XXX*/);
+ packet(0x0b07,-1);
+ packet(0x0b08,26,clif->pDull/*,XXX*/);
+ packet(0x0b09,-1,clif->pDull/*,XXX*/);
+ packet(0x0b0a,-1,clif->pDull/*,XXX*/);
+ packet(0x0b0b,3,clif->pDull/*,XXX*/);
+ packet(0x0b0c,155,clif->pDull/*,XXX*/);
+// changed packet sizes
+#endif
+
+// 2018-08-29aRagexe
+#if PACKETVER_MAIN_NUM >= 20180829
+// new packets
+ packet(0x0b05,59);
+ packet(0x0b06,53,clif->pDull/*,XXX*/);
+ packet(0x0b07,-1);
+ packet(0x0b08,26); // ZC_INVENTORY_START
+ packet(0x0b09,-1); // ZC_STORE_ITEMLIST_NORMAL_V6
+ packet(0x0b0a,-1); // ZC_STORE_ITEMLIST_EQUIP_V6
+ packet(0x0b0b,3); // ZC_INVENTORY_END
+ packet(0x0b0c,155,clif->pDull/*,XXX*/);
+// changed packet sizes
+#endif
+
+// 2018-08-29aRagexeRE
+#if PACKETVER_RE_NUM >= 20180829
+// new packets
+ packet(0x0b05,63);
+ packet(0x0b06,53,clif->pDull/*,XXX*/);
+ packet(0x0b07,-1);
+ packet(0x0b08,26); // ZC_INVENTORY_START
+ packet(0x0b09,-1); // ZC_STORE_ITEMLIST_NORMAL_V6
+ packet(0x0b0a,-1); // ZC_STORE_ITEMLIST_EQUIP_V6
+ packet(0x0b0b,3); // ZC_INVENTORY_END
+ packet(0x0b0c,155,clif->pDull/*,XXX*/);
+// changed packet sizes
+#endif
+
+// 2018-09-05aRagexe_zero
+#if PACKETVER_ZERO_NUM >= 20180905
+// new packets
+ packet(0x0b0d,6,clif->pDull/*,XXX*/);
+// changed packet sizes
+ packet(0x0b08,27); // ZC_INVENTORY_START
+ packet(0x0b0b,4); // ZC_INVENTORY_END
+#endif
+
+#ifndef PACKETVER_ZERO
+// 2018-09-12dRagexe, 2018-09-12dRagexeRE
+#if PACKETVER >= 20180912
+// new packets
+ packet(0x0b0d,10,clif->pDull/*,XXX*/);
+ packet(0x0b0e,-1,clif->pDull/*,XXX*/);
+ packet(0x0b0f,-1,clif->pDull/*,XXX*/);
+// changed packet sizes
+ packet(0x0b08,27,clif->pDull/*,XXX*/); // ZC_INVENTORY_START
+ packet(0x0b0b,4,clif->pDull/*,XXX*/); // ZC_INVENTORY_END
+#endif
+#endif
+
+// 2018-09-19aRagexeRE
+#if PACKETVER_RE_NUM >= 20180919
+// new packets
+// changed packet sizes
+ packet(0x0b08,-1); // ZC_INVENTORY_START
+#endif
+
+// 2018-09-19aRagexe_zero
+#if PACKETVER_ZERO_NUM >= 20180919
+// new packets
+ packet(0x0b0e,-1,clif->pDull/*,XXX*/);
+ packet(0x0b0f,-1,clif->pDull/*,XXX*/);
+// changed packet sizes
+ packet(0x0b08,-1); // ZC_INVENTORY_START
+ packet(0x0b0d,10,clif->pDull/*,XXX*/);
+#endif
+
+
+// 2018-10-02aRagexe
+#if PACKETVER_MAIN_NUM >= 20181002
+// new packets
+ packet(0x0b10,10,clif->pDull/*,XXX*/);
+ packet(0x0b11,4,clif->pDull/*,XXX*/);
+// changed packet sizes
+ packet(0x0b08,-1); // ZC_INVENTORY_START
+#endif
+
+// 2018-10-02aRagexeRE
+#if PACKETVER_RE_NUM >= 20181002
+// new packets
+ packet(0x0b10,10,clif->pDull/*,XXX*/);
+ packet(0x0b11,4,clif->pDull/*,XXX*/);
+// changed packet sizes
+#endif
+
+// 2018-10-10_2aRagexe_zero
+#if PACKETVER_ZERO_NUM >= 20181010
+// new packets
+ packet(0x0b10,10,clif->pDull/*,XXX*/);
+ packet(0x0b11,4,clif->pDull/*,XXX*/);
+// changed packet sizes
+#endif
+
+// 2018-10-17bRagexe
+#if PACKETVER_MAIN_NUM >= 20181017
+// new packets
+ packet(0x0b12,2,clif->pDull/*,XXX*/);
+ packet(0x0b13,40); // ZC_ITEM_PREVIEW
+// changed packet sizes
+#endif
+
+// 2018-10-17bRagexeRE
+#if PACKETVER_RE_NUM >= 20181017
+// new packets
+ packet(0x0b12,2,clif->pDull/*,XXX*/);
+ packet(0x0b13,48); // ZC_ITEM_PREVIEW
+// changed packet sizes
+#endif
+
+// 2018-10-24_2aRagexe_zero
+#if PACKETVER_ZERO_NUM >= 20181024
+// new packets
+ packet(0x0b12,2,clif->pDull/*,XXX*/);
+ packet(0x0b13,40); // ZC_ITEM_PREVIEW
+// changed packet sizes
+#endif
+
+#ifndef PACKETVER_ZERO
+// 2018-10-31aRagexe, 2018-10-31cRagexeRE
+#if PACKETVER >= 20181031
+// new packets
+ packet(0x0b14,2,clif->pDull/*,XXX*/);
+ packet(0x0b15,7,clif->pDull/*,XXX*/);
+ packet(0x0b16,2,clif->pDull/*,XXX*/);
+ packet(0x0b17,3,clif->pDull/*,XXX*/);
+ packet(0x0b18,4,clif->pDull/*,XXX*/);
+ packet(0x0b19,2,clif->pDull/*,XXX*/);
+// changed packet sizes
+#endif
+#endif // PACKETVER_ZERO
+
#endif /* MAP_PACKETS_H */
diff --git a/src/map/packets_keys_main.h b/src/map/packets_keys_main.h
index 43221f965..48a3c5d2b 100644
--- a/src/map/packets_keys_main.h
+++ b/src/map/packets_keys_main.h
@@ -3,6 +3,7 @@
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
* Copyright (C) 2013-2018 Hercules Dev Team
+ * Copyright (C) 2018 Andrei Karas (4144)
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -33,71 +34,163 @@
#if PACKETVER == 20101123 || \
PACKETVER == 20101124 || \
PACKETVER == 20101126
- packetKeys(0x49357D72,0x22C370A1,0x5F836591);
+ packetKeys(0x49357d72,0x22c370a1,0x5f836591);
+#endif
+
+// 2010-11-23aRagexeRE, 2010-11-24aRagexeRE, 2010-11-24bRagexeRE, 2010-11-25aRagexeRE, 2010-11-26aRagexeRE, 2010-11-30aRagexeRE, 2010-12-07aRagexeRE, 2010-12-14aRagexeRE, 2010-12-21aRagexeRE, 2010-12-23aRagexeRE, 2010-12-28aRagexeRE, 2011-01-04aRagexeRE, 2011-01-05aRagexeRE, 2011-01-11aRagexeRE, 2011-01-18aRagexeRE, 2011-01-25aRagexeRE, 2011-01-26aRagexeRE, 2011-01-26bRagexeRE, 2011-01-31aRagexeRE, 2011-01-31bRagexeRE, 2011-01-31cRagexeRE, 2011-02-08aRagexeRE, 2011-02-15aRagexeRE, 2011-02-22aRagexeRE, 2011-02-23aRagexeRE, 2011-02-23bRagexeRE, 2011-02-24aRagexeRE, 2011-02-25aRagexeRE, 2011-02-28aRagexeRE, 2011-03-08aRagexeRE, 2011-03-09aRagexeRE, 2011-03-09bRagexeRE, 2011-03-09cRagexeRE, 2011-03-09dRagexeRE, 2011-03-15aRagexeRE, 2011-03-22aRagexeRE, 2011-03-29aRagexeRE, 2011-03-30aRagexeRE, 2011-03-30cRagexeRE, 2011-04-05aRagexeRE, 2011-04-12aRagexeRE, 2011-04-19aRagexeRE, 2011-04-20aRagexeRE, 2011-04-26aRagexeRE, 2011-04-27aRagexeRE, 2011-05-03aRagexeRE, 2011-05-11aRagexeRE, 2011-05-17bRagexeRE, 2011-05-24aRagexeRE, 2011-05-26aRagexeRE, 2011-05-31aRagexeRE, 2011-06-07aRagexeRE, 2011-06-08aRagexeRE, 2011-06-08bRagexeRE, 2011-06-08cRagexeRE, 2011-06-09aRagexeRE, 2011-06-14bRagexeRE, 2011-06-22aRagexeRE, 2011-06-28aRagexeRE, 2011-07-06aRagexeRE, 2011-07-13aRagexeRE, 2011-07-13bRagexeRE, 2011-07-13cRagexeRE, 2011-07-19aRagexeRE, 2011-07-26aRagexeRE, 2011-08-03aRagexeRE, 2011-08-03bRagexeRE, 2011-08-10aRagexeRE, 2013-12-23aRagexeRE, 2014-05-08aRagexe, 2014-05-08aRagexeRE, 2014-06-11eRagexe, 2015-02-25hRagexe, 2018-03-15aRagexe, 2018-03-21aRagexe, 2018-03-21aRagexeRE, 2018-03-28bRagexe, 2018-03-28bRagexeRE, 2018-04-04bRagexe, 2018-04-04cRagexeRE, 2018-04-18aRagexe, 2018-04-18bRagexeRE, 2018-04-25cRagexe, 2018-04-25cRagexeRE, 2018-05-02bRagexe, 2018-05-02bRagexeRE, 2018-05-02dRagexeRE, 2018-05-09aRagexe, 2018-05-16cRagexe, 2018-05-16cRagexeRE, 2018-05-23aRagexe, 2018-05-23aRagexeRE, 2018-05-30aRagexe, 2018-05-30bRagexeRE, 2018-05-30cRagexeRE, 2018-06-05bRagexe, 2018-06-05bRagexeRE, 2018-06-12aRagexeRE, 2018-06-12bRagexeRE, 2018-06-20cRagexe, 2018-06-20dRagexeRE, 2018-06-20eRagexe, 2018-06-20eRagexeRE, 2018-06-21aRagexe, 2018-06-21aRagexeRE, 2018-07-04aRagexe, 2018-07-04aRagexeRE, 2018-07-11aRagexeRE, 2018-07-18bRagexe, 2018-07-18bRagexeRE, 2018-07-18bRagexeRE1, 2018-07-18cRagexe, 2018-07-18cRagexeRE, 2018-08-01cRagexe, 2018-08-01cRagexeRE, 2018-08-08bRagexe, 2018-08-08bRagexeRE, 2018-08-22cRagexe, 2018-08-22cRagexeRE, 2018-08-29aRagexe, 2018-08-29aRagexeRE, 2018-08-29bRagexeRE, 2018-08-31aRagexe, 2018-09-12dRagexe, 2018-09-12dRagexeRE, 2018-09-19aRagexe, 2018-09-19aRagexeRE, 2018-10-02aRagexe, 2018-10-02aRagexeRE, 2018-10-02bRagexe, 2018-10-02bRagexeRE, 2018-10-17_02aRagexe, 2018-10-17_02aRagexeRE, 2018-10-17_03aRagexe, 2018-10-17_03aRagexeRE, 2018-10-17bRagexe, 2018-10-17bRagexeRE, 2018-10-24bRagexe, 2018-10-31aRagexe, 2018-10-31bRagexe, 2018-10-31cRagexeRE, 2018-11-07aRagexe, 2018-11-07aRagexeRE
+#if PACKETVER == 20101123 || \
+ PACKETVER == 20101124 || \
+ PACKETVER == 20101125 || \
+ PACKETVER == 20101126 || \
+ PACKETVER == 20101130 || \
+ PACKETVER == 20101207 || \
+ PACKETVER == 20101214 || \
+ PACKETVER == 20101221 || \
+ PACKETVER == 20101223 || \
+ PACKETVER == 20101228 || \
+ PACKETVER == 20110104 || \
+ PACKETVER == 20110105 || \
+ PACKETVER == 20110111 || \
+ PACKETVER == 20110118 || \
+ PACKETVER == 20110125 || \
+ PACKETVER == 20110126 || \
+ PACKETVER == 20110131 || \
+ PACKETVER == 20110208 || \
+ PACKETVER == 20110215 || \
+ PACKETVER == 20110222 || \
+ PACKETVER == 20110223 || \
+ PACKETVER == 20110224 || \
+ PACKETVER == 20110225 || \
+ PACKETVER == 20110228 || \
+ PACKETVER == 20110308 || \
+ PACKETVER == 20110309 || \
+ PACKETVER == 20110315 || \
+ PACKETVER == 20110322 || \
+ PACKETVER == 20110329 || \
+ PACKETVER == 20110330 || \
+ PACKETVER == 20110405 || \
+ PACKETVER == 20110412 || \
+ PACKETVER == 20110419 || \
+ PACKETVER == 20110420 || \
+ PACKETVER == 20110426 || \
+ PACKETVER == 20110427 || \
+ PACKETVER == 20110503 || \
+ PACKETVER == 20110511 || \
+ PACKETVER == 20110517 || \
+ PACKETVER == 20110524 || \
+ PACKETVER == 20110526 || \
+ PACKETVER == 20110531 || \
+ PACKETVER == 20110607 || \
+ PACKETVER == 20110608 || \
+ PACKETVER == 20110609 || \
+ PACKETVER == 20110614 || \
+ PACKETVER == 20110622 || \
+ PACKETVER == 20110628 || \
+ PACKETVER == 20110706 || \
+ PACKETVER == 20110713 || \
+ PACKETVER == 20110719 || \
+ PACKETVER == 20110726 || \
+ PACKETVER == 20110803 || \
+ PACKETVER == 20110810 || \
+ PACKETVER == 20131223 || \
+ PACKETVER == 20140508 || \
+ PACKETVER == 20140611 || \
+ PACKETVER == 20150225 || \
+ PACKETVER == 20180315 || \
+ PACKETVER == 20180321 || \
+ PACKETVER == 20180328 || \
+ PACKETVER == 20180404 || \
+ PACKETVER == 20180418 || \
+ PACKETVER == 20180425 || \
+ PACKETVER == 20180502 || \
+ PACKETVER == 20180509 || \
+ PACKETVER == 20180516 || \
+ PACKETVER == 20180523 || \
+ PACKETVER == 20180530 || \
+ PACKETVER == 20180605 || \
+ PACKETVER == 20180612 || \
+ PACKETVER == 20180620 || \
+ PACKETVER == 20180621 || \
+ PACKETVER == 20180704 || \
+ PACKETVER == 20180711 || \
+ PACKETVER == 20180718 || \
+ PACKETVER == 20180801 || \
+ PACKETVER == 20180808 || \
+ PACKETVER == 20180822 || \
+ PACKETVER == 20180829 || \
+ PACKETVER == 20180831 || \
+ PACKETVER == 20180912 || \
+ PACKETVER == 20180919 || \
+ PACKETVER == 20181002 || \
+ PACKETVER == 20181017 || \
+ PACKETVER == 20181024 || \
+ PACKETVER == 20181031 || \
+ PACKETVER >= 20181107
+ packetKeys(0x00000000,0x00000000,0x00000000);
#endif
// 2010-11-30aRagexe
#if PACKETVER == 20101130
- packetKeys(0x3726593C,0x0EFD5EE8,0x79036DF9);
+ packetKeys(0x3726593c,0x0efd5ee8,0x79036df9);
#endif
// 2010-12-07bRagexe
#if PACKETVER == 20101207
- packetKeys(0x66111112,0x2B7B53AA,0x04E76DF8);
+ packetKeys(0x66111112,0x2b7b53aa,0x04e76df8);
#endif
// 2010-12-14aRagexe
#if PACKETVER == 20101214
- packetKeys(0x5E535D06,0x4E297F0E,0x400B6AD8);
+ packetKeys(0x5e535d06,0x4e297f0e,0x400b6ad8);
#endif
// 2010-12-21aRagexe
#if PACKETVER == 20101221
- packetKeys(0x0448466A,0x41554AC9,0x5B4710B2);
+ packetKeys(0x0448466a,0x41554ac9,0x5b4710b2);
#endif
// 2010-12-28aRagexe
#if PACKETVER == 20101228
- packetKeys(0x50C638A5,0x4BF86B20,0x480C3746);
+ packetKeys(0x50c638a5,0x4bf86b20,0x480c3746);
#endif
// 2011-01-04aRagexe
#if PACKETVER == 20110104
- packetKeys(0x55DB401F,0x047D4E02,0x6D8F2EA3);
+ packetKeys(0x55db401f,0x047d4e02,0x6d8f2ea3);
#endif
// 2011-01-11aRagexe
#if PACKETVER == 20110111
- packetKeys(0x2D5F6302,0x2A361CD6,0x39D661D6);
+ packetKeys(0x2d5f6302,0x2a361cd6,0x39d661d6);
#endif
// 2011-01-18aRagexe
#if PACKETVER == 20110118
- packetKeys(0x3C777D2D,0x00541A1D,0x5E0053A2);
+ packetKeys(0x3c777d2d,0x00541a1d,0x5e0053a2);
#endif
// 2011-01-25aRagexe, 2011-01-26aRagexe, 2011-01-26bRagexe, 2011-01-31aRagexe
#if PACKETVER == 20110125 || \
PACKETVER == 20110126 || \
PACKETVER == 20110131
- packetKeys(0x6BB84BB0,0x4C004382,0x10AE3260);
+ packetKeys(0x6bb84bb0,0x4c004382,0x10ae3260);
#endif
// 2011-01-31bRagexe, 2011-02-01aRagexe
#if PACKETVER == 20110131 || \
PACKETVER == 20110201
- packetKeys(0x68871E62,0x60D17266,0x74726DAA);
+ packetKeys(0x68871e62,0x60d17266,0x74726daa);
#endif
// 2011-02-08aRagexe, 2011-02-10aRagexe, 2011-02-10bRagexe
#if PACKETVER == 20110208 || \
PACKETVER == 20110210
- packetKeys(0x72BA4E9D,0x281E1DF1,0x208255AA);
+ packetKeys(0x72ba4e9d,0x281e1df1,0x208255aa);
#endif
// 2011-02-15aRagexe
#if PACKETVER == 20110215
- packetKeys(0x1B174D76,0x32005014,0x7B8B72D5);
+ packetKeys(0x1b174d76,0x32005014,0x7b8b72d5);
#endif
// 2011-02-22aRagexe, 2011-02-23aRagexe, 2011-02-23bRagexe, 2011-02-24aRagexe, 2011-02-25aRagexe, 2011-02-25bRagexe
@@ -105,70 +198,70 @@
PACKETVER == 20110223 || \
PACKETVER == 20110224 || \
PACKETVER == 20110225
- packetKeys(0x48F73B56,0x155F7D66,0x44AB57CE);
+ packetKeys(0x48f73b56,0x155f7d66,0x44ab57ce);
#endif
// 2011-02-28aRagexe
#if PACKETVER == 20110228
- packetKeys(0x26385EBF,0x7A8C7534,0x60AE2C34);
+ packetKeys(0x26385ebf,0x7a8c7534,0x60ae2c34);
#endif
// 2011-03-08aRagexe, 2011-03-09aRagexe, 2011-03-09bRagexe, 2011-03-09cRagexe, 2011-03-09dRagexe
#if PACKETVER == 20110308 || \
PACKETVER == 20110309
- packetKeys(0x003F1B20,0x7A1E12A3,0x34994AAD);
+ packetKeys(0x003f1b20,0x7a1e12a3,0x34994aad);
#endif
// 2011-03-15aRagexe, 2011-03-16aRagexe
#if PACKETVER == 20110315 || \
PACKETVER == 20110316
- packetKeys(0x62967D7D,0x34833D1A,0x26D45ECA);
+ packetKeys(0x62967d7d,0x34833d1a,0x26d45eca);
#endif
// 2011-03-22aRagexe
#if PACKETVER == 20110322
- packetKeys(0x5870617C,0x638D5376,0x739F4817);
+ packetKeys(0x5870617c,0x638d5376,0x739f4817);
#endif
// 2011-03-29aRagexe, 2011-03-30aRagexe
#if PACKETVER == 20110329 || \
PACKETVER == 20110330
- packetKeys(0x06900BB7,0x45DB687B,0x197B017B);
+ packetKeys(0x06900bb7,0x45db687b,0x197b017b);
#endif
// 2011-04-05aRagexe
#if PACKETVER == 20110405
- packetKeys(0x248D5C37,0x1C6A1B37,0x1F644FDB);
+ packetKeys(0x248d5c37,0x1c6a1b37,0x1f644fdb);
#endif
// 2011-04-12bRagexe
#if PACKETVER == 20110412
- packetKeys(0x3DE86BFC,0x0DD47F80,0x42481C9B);
+ packetKeys(0x3de86bfc,0x0dd47f80,0x42481c9b);
#endif
// 2011-04-19aRagexe
#if PACKETVER == 20110419
- packetKeys(0x26073204,0x62013A51,0x22AC58E0);
+ packetKeys(0x26073204,0x62013a51,0x22ac58e0);
#endif
// 2011-04-26aRagexe
#if PACKETVER == 20110426
- packetKeys(0x392813F9,0x09905054,0x40DB732E);
+ packetKeys(0x392813f9,0x09905054,0x40db732e);
#endif
// 2011-05-03aRagexe
#if PACKETVER == 20110503
- packetKeys(0x28BE32EE,0x1D506FCB,0x63832421);
+ packetKeys(0x28be32ee,0x1d506fcb,0x63832421);
#endif
// 2011-05-11aRagexe
#if PACKETVER == 20110511
- packetKeys(0x6A715733,0x3C5C0D74,0x408A48EC);
+ packetKeys(0x6a715733,0x3c5c0d74,0x408a48ec);
#endif
// 2011-05-17aRagexe
#if PACKETVER == 20110517
- packetKeys(0x07FE0C72,0x46766BAD,0x5EB5126A);
+ packetKeys(0x07fe0c72,0x46766bad,0x5eb5126a);
#endif
// 2011-05-23aRagexe, 2011-05-26bRagexe
@@ -179,323 +272,323 @@
// 2011-05-31aRagexe
#if PACKETVER == 20110531
- packetKeys(0x5ABA2C7C,0x3CD22073,0x78953988);
+ packetKeys(0x5aba2c7c,0x3cd22073,0x78953988);
#endif
// 2011-06-07aRagexe, 2011-06-08aRagexe, 2011-06-08bRagexe, 2011-06-08cRagexe, 2011-06-09aRagexe
#if PACKETVER == 20110607 || \
PACKETVER == 20110608 || \
PACKETVER == 20110609
- packetKeys(0x76B0426C,0x0DD74DEB,0x1F92228E);
+ packetKeys(0x76b0426c,0x0dd74deb,0x1f92228e);
#endif
// 2011-06-14aRagexe
#if PACKETVER == 20110614
- packetKeys(0x5749027B,0x71710972,0x5B096475);
+ packetKeys(0x5749027b,0x71710972,0x5b096475);
#endif
// 2011-06-20aRagexe
#if PACKETVER == 20110620
- packetKeys(0x3A1760D4,0x254E0DF9,0x440E2357);
+ packetKeys(0x3a1760d4,0x254e0df9,0x440e2357);
#endif
// 2011-06-27aRagexe
#if PACKETVER == 20110627
- packetKeys(0x3EFC29BD,0x699E4B11,0x7B900A13);
+ packetKeys(0x3efc29bd,0x699e4b11,0x7b900a13);
#endif
// 2011-07-05aRagexe
#if PACKETVER == 20110705
- packetKeys(0x48801A5E,0x68FC7726,0x081D7F6E);
+ packetKeys(0x48801a5e,0x68fc7726,0x081d7f6e);
#endif
// 2011-07-11bRagexe, 2011-07-13aRagexe, 2011-07-13bRagexe
#if PACKETVER == 20110711 || \
PACKETVER == 20110713
- packetKeys(0x489C544B,0x33BA1C25,0x2DE66E4E);
+ packetKeys(0x489c544b,0x33ba1c25,0x2de66e4e);
#endif
// 2011-07-18aRagexe
#if PACKETVER == 20110718
- packetKeys(0x08464674,0x1EEB3BD5,0x33395199);
+ packetKeys(0x08464674,0x1eeb3bd5,0x33395199);
#endif
// 2011-07-26aRagexe
#if PACKETVER == 20110726
- packetKeys(0x41E5730B,0x119C6C11,0x5356524A);
+ packetKeys(0x41e5730b,0x119c6c11,0x5356524a);
#endif
// 2011-08-02aRagexe
#if PACKETVER == 20110802
- packetKeys(0x607C08A1,0x65B20528,0x360571E9);
+ packetKeys(0x607c08a1,0x65b20528,0x360571e9);
#endif
// 2011-08-09aRagexe
#if PACKETVER == 20110809
- packetKeys(0x742A559A,0x047F425D,0x5C8C2CA0);
+ packetKeys(0x742a559a,0x047f425d,0x5c8c2ca0);
#endif
// 2011-08-16aRagexe, 2011-08-16aRagexeRE, 2011-08-17aRagexe, 2011-08-17aRagexeRE, 2011-08-17bRagexe, 2011-08-17bRagexeRE
#if PACKETVER == 20110816 || \
PACKETVER == 20110817
- packetKeys(0x053D5CED,0x3DED6DED,0x6DED6DED);
+ packetKeys(0x053d5ced,0x3ded6ded,0x6ded6ded);
#endif
// 2011-08-23aRagexe, 2011-08-23aRagexeRE, 2011-08-24aRagexe, 2011-08-24aRagexeRE, 2011-08-24bRagexeRE
#if PACKETVER == 20110823 || \
PACKETVER == 20110824
- packetKeys(0x35C91401,0x262A5556,0x28FA03AA);
+ packetKeys(0x35c91401,0x262a5556,0x28fa03aa);
#endif
// 2011-08-31aRagexe, 2011-08-31aRagexeRE, 2011-08-31bRagexe, 2011-08-31bRagexeRE, 2011-08-31cRagexe, 2011-08-31cRagexeRE, 2011-08-31dRagexeRE, 2011-08-31eRagexeRE
#if PACKETVER == 20110831
- packetKeys(0x3AD67ED0,0x44703C69,0x6F876809);
+ packetKeys(0x3ad67ed0,0x44703c69,0x6f876809);
#endif
// 2011-09-06aRagexe, 2011-09-06aRagexeRE, 2011-09-14aRagexe, 2011-09-14aRagexeRE
#if PACKETVER == 20110906 || \
PACKETVER == 20110914
- packetKeys(0x350124EC,0x39A14595,0x0DE56125);
+ packetKeys(0x350124ec,0x39a14595,0x0de56125);
#endif
// 2011-09-20aRagexe, 2011-09-20aRagexeRE, 2011-09-20aRagexeRE2
#if PACKETVER == 20110920
- packetKeys(0x79C91A12,0x20450CC0,0x584B2A38);
+ packetKeys(0x79c91a12,0x20450cc0,0x584b2a38);
#endif
// 2011-09-28aRagexe, 2011-09-28aRagexe-retry, 2011-09-28aRagexeRE, 2011-09-29aRagexe, 2011-09-29aRagexeRE
#if PACKETVER == 20110928 || \
PACKETVER == 20110929
- packetKeys(0x26567512,0x4B0732DF,0x57D266C6);
+ packetKeys(0x26567512,0x4b0732df,0x57d266c6);
#endif
// 2011-10-04aRagexe, 2011-10-04aRagexeRE, 2011-10-05aRagexe, 2011-10-05aRagexeRE
#if PACKETVER == 20111004 || \
PACKETVER == 20111005
- packetKeys(0x291E6762,0x77CD391A,0x60AC2F16);
+ packetKeys(0x291e6762,0x77cd391a,0x60ac2f16);
#endif
// 2011-10-10aRagexe, 2011-10-10bRagexeRE, 2011-10-12aRagexeRE, 2011-10-12bRagexe
#if PACKETVER == 20111010 || \
PACKETVER == 20111012
- packetKeys(0x7F3C2D29,0x59B01DE6,0x1DBB44CA);
+ packetKeys(0x7f3c2d29,0x59b01de6,0x1dbb44ca);
#endif
// 2011-10-17aRagexe, 2011-10-17aRagexeRE, 2011-10-19aRagexeRE, 2011-10-19bRagexeRE, 2011-10-21aRagexe, 2011-10-21aRagexeRE, 2011-10-21cRagexe
#if PACKETVER == 20111017 || \
PACKETVER == 20111019 || \
PACKETVER == 20111021
- packetKeys(0x357D55DC,0x5A8D759F,0x245C30F5);
+ packetKeys(0x357d55dc,0x5a8d759f,0x245c30f5);
#endif
// 2011-10-25aRagexe, 2011-10-25aRagexeRE
#if PACKETVER == 20111025
- packetKeys(0x50AE1A63,0x3CE579B5,0x29C10406);
+ packetKeys(0x50ae1a63,0x3ce579b5,0x29c10406);
#endif
// 2011-11-01cRagexe, 2011-11-01cRagexeRE, 2011-11-02aRagexe, 2011-11-02aRagexeRE
#if PACKETVER == 20111101 || \
PACKETVER == 20111102
- packetKeys(0x5324329D,0x5D545D52,0x06137269);
+ packetKeys(0x5324329d,0x5d545d52,0x06137269);
#endif
// 2011-11-08aRagexe, 2011-11-08aRagexeRE, 2011-11-09aRagexe, 2011-11-09aRagexeRE, 2011-11-09bRagexe, 2011-11-09cRagexe, 2011-11-09dRagexe, 2011-11-09eRagexe
#if PACKETVER == 20111108 || \
PACKETVER == 20111109
- packetKeys(0x0B642BDA,0x6ECB1D1C,0x61C7454B);
+ packetKeys(0x0b642bda,0x6ecb1d1c,0x61c7454b);
#endif
// 2011-11-14aRagexe, 2011-11-14aRagexeRE, 2011-11-16aRagexe, 2011-11-16aRagexeRE
#if PACKETVER == 20111114 || \
PACKETVER == 20111116
- packetKeys(0x419D0DB0,0x74916BF4,0x027371B4);
+ packetKeys(0x419d0db0,0x74916bf4,0x027371b4);
#endif
// 2011-11-22aRagexe, 2011-11-22aRagexeRE, 2011-11-23aRagexe
#if PACKETVER == 20111122 || \
PACKETVER == 20111123
- packetKeys(0x3B550F07,0x1F666C7C,0x60304EF5);
+ packetKeys(0x3b550f07,0x1f666c7c,0x60304ef5);
#endif
// 2011-12-07aRagexe, 2011-12-07aRagexeRE
#if PACKETVER == 20111207
- packetKeys(0x2A610886,0x3E09165E,0x57C11888);
+ packetKeys(0x2a610886,0x3e09165e,0x57c11888);
#endif
// 2011-12-13aRagexe, 2011-12-13aRagexeRE, 2011-12-14aRagexe, 2011-12-14aRagexeRE, 2011-12-14bRagexeRE, 2011-12-14cRagexeRE
#if PACKETVER == 20111213 || \
PACKETVER == 20111214
- packetKeys(0x5151306B,0x7AE32886,0x53060628);
+ packetKeys(0x5151306b,0x7ae32886,0x53060628);
#endif
// 2011-12-20bRagexe, 2011-12-20bRagexeRE
#if PACKETVER == 20111220
- packetKeys(0x05D53871,0x7D0027B4,0x29975333);
+ packetKeys(0x05d53871,0x7d0027b4,0x29975333);
#endif
// 2011-12-27aRagexe, 2011-12-27aRagexeRE, 2011-12-28aRagexe, 2011-12-28aRagexeRE
#if PACKETVER == 20111227 || \
PACKETVER == 20111228
- packetKeys(0x0FF87E93,0x6CFF7860,0x3A3D1DEC);
+ packetKeys(0x0ff87e93,0x6cff7860,0x3a3d1dec);
#endif
// 2012-01-03aRagexe, 2012-01-03bRagexeRE, 2012-01-04aRagexe, 2012-01-04aRagexeRE, 2012-01-04bRagexe
#if PACKETVER == 20120103 || \
PACKETVER == 20120104
- packetKeys(0x262034A1,0x674542A5,0x73A50BA5);
+ packetKeys(0x262034a1,0x674542a5,0x73a50ba5);
#endif
// 2012-01-10aRagexeRE, 2012-01-10bRagexe
#if PACKETVER == 20120110
- packetKeys(0x2B412AFC,0x4FF94487,0x6705339D);
+ packetKeys(0x2b412afc,0x4ff94487,0x6705339d);
#endif
// 2012-01-17aRagexe, 2012-01-17aRagexeRE, 2012-01-18aRagexe
#if PACKETVER == 20120117 || \
PACKETVER == 20120118
- packetKeys(0x24E32C2E,0x48DD17A5,0x64F8771A);
+ packetKeys(0x24e32c2e,0x48dd17a5,0x64f8771a);
#endif
// 2012-01-20aRagexe, 2012-01-20aRagexeRE
#if PACKETVER == 20120120
- packetKeys(0x504345D0,0x3D427B1B,0x794C2DCC);
+ packetKeys(0x504345d0,0x3d427b1b,0x794c2dcc);
#endif
// 2012-01-31aRagexe, 2012-01-31cRagexeRE, 2012-02-01aRagexeRE, 2012-02-02aRagexe, 2012-02-02aRagexeRE, 2012-02-02bRagexe, 2012-02-02bRagexeRE
#if PACKETVER == 20120131 || \
PACKETVER == 20120201 || \
PACKETVER == 20120202
- packetKeys(0x2CFC0A71,0x2BA91D8D,0x087E39E0);
+ packetKeys(0x2cfc0a71,0x2ba91d8d,0x087e39e0);
#endif
// 2012-02-07bRagexe, 2012-02-07bRagexeRE, 2012-02-08aRagexe, 2012-02-09aRagexe
#if PACKETVER == 20120207 || \
PACKETVER == 20120208 || \
PACKETVER == 20120209
- packetKeys(0x1D373F5D,0x5ACD604D,0x1C4D7C4D);
+ packetKeys(0x1d373f5d,0x5acd604d,0x1c4d7c4d);
#endif
// 2012-02-14bRagexe, 2012-02-14bRagexeRE, 2012-02-15aRagexe
#if PACKETVER == 20120214 || \
PACKETVER == 20120215
- packetKeys(0x7A255EFA,0x30977276,0x2D4A0448);
+ packetKeys(0x7a255efa,0x30977276,0x2d4a0448);
#endif
// 2012-02-21aRagexe, 2012-02-21aRagexeRE, 2012-02-22aRagexe, 2012-02-22aRagexeRE
#if PACKETVER == 20120221 || \
PACKETVER == 20120222
- packetKeys(0x1CA5130F,0x43ED240A,0x7FEA3BE0);
+ packetKeys(0x1ca5130f,0x43ed240a,0x7fea3be0);
#endif
// 2012-02-28bRagexe, 2012-02-28bRagexeRE, 2012-02-29aRagexe, 2012-02-29aRagexeRE
#if PACKETVER == 20120228 || \
PACKETVER == 20120229
- packetKeys(0x520B4C64,0x2800407D,0x47651458);
+ packetKeys(0x520b4c64,0x2800407d,0x47651458);
#endif
// 2012-03-07aRagexe, 2012-03-07aRagexeRE, 2012-03-07bRagexe, 2012-03-07bRagexeRE, 2012-03-07cRagexe, 2012-03-07cRagexeRE, 2012-03-07dRagexe, 2012-03-07dRagexeRE, 2012-03-07eRagexeRE, 2012-03-07fRagexeRE
#if PACKETVER == 20120307
- packetKeys(0x382A6DEF,0x5CBE7202,0x61F46637);
+ packetKeys(0x382a6def,0x5cbe7202,0x61f46637);
#endif
// 2012-03-14aRagexe, 2012-03-14aRagexeRE, 2012-03-14bRagexe, 2012-03-14bRagexeRE, 2012-03-14cRagexe, 2012-03-14cRagexeRE
#if PACKETVER == 20120314
- packetKeys(0x689C1729,0x11812639,0x60F82967);
+ packetKeys(0x689c1729,0x11812639,0x60f82967);
#endif
// 2012-03-20aRagexe, 2012-03-20aRagexeRE, 2012-03-21aRagexeRE
#if PACKETVER == 20120320 || \
PACKETVER == 20120321
- packetKeys(0x21F9683F,0x710C5CA5,0x1FD910E9);
+ packetKeys(0x21f9683f,0x710c5ca5,0x1fd910e9);
#endif
// 2012-03-28aRagexe, 2012-03-28aRagexeRE, 2012-03-28bRagexe, 2012-03-28bRagexeRE, 2012-03-28cRagexe, 2012-03-28cRagexeRE, 2012-03-28dRagexe, 2012-03-28dRagexeRE, 2012-03-28eRagexeRE, 2012-03-28fRagexeRE, 2012-03-28gRagexeRE
#if PACKETVER == 20120328
- packetKeys(0x75B8553B,0x37F20B12,0x385C2B40);
+ packetKeys(0x75b8553b,0x37f20b12,0x385c2b40);
#endif
// 2012-04-04aRagexe, 2012-04-04aRagexeRE
#if PACKETVER == 20120404
- packetKeys(0x0036310C,0x2DCD0BED,0x1EE62A78);
+ packetKeys(0x0036310c,0x2dcd0bed,0x1ee62a78);
#endif
// 2012-04-10aRagexe, 2012-04-10aRagexeRE
#if PACKETVER == 20120410
- packetKeys(0x01581359,0x452D6FFA,0x6AFB6E2E);
+ packetKeys(0x01581359,0x452d6ffa,0x6afb6e2e);
#endif
// 2012-04-17aRagexe, 2012-04-17aRagexeRE, 2012-04-18aRagexeRE
#if PACKETVER == 20120417 || \
PACKETVER == 20120418
- packetKeys(0x01540E48,0x13041224,0x31247924);
+ packetKeys(0x01540e48,0x13041224,0x31247924);
#endif
// 2012-04-24aRagexe, 2012-04-24aRagexeRE
#if PACKETVER == 20120424
- packetKeys(0x411D1DBB,0x4CBA4848,0x1A432FC4);
+ packetKeys(0x411d1dbb,0x4cba4848,0x1a432fc4);
#endif
// 2012-05-02aRagexeRE, 2012-05-03aRagexe, 2012-05-03aRagexeRE, 2012-05-03bRagexe
#if PACKETVER == 20120502 || \
PACKETVER == 20120503
- packetKeys(0x37A91D19,0x10190019,0x00190019);
+ packetKeys(0x37a91d19,0x10190019,0x00190019);
#endif
// 2012-05-08aRagexe, 2012-05-08aRagexeRE, 2012-05-09aRagexeRE, 2012-05-09bRagexeRE
#if PACKETVER == 20120508 || \
PACKETVER == 20120509
- packetKeys(0x16CF3301,0x1F472B9B,0x0B4A3CD2);
+ packetKeys(0x16cf3301,0x1f472b9b,0x0b4a3cd2);
#endif
// 2012-05-15aRagexe, 2012-05-15aRagexeRE
#if PACKETVER == 20120515
- packetKeys(0x4A715EF9,0x79103E4F,0x405C1238);
+ packetKeys(0x4a715ef9,0x79103e4f,0x405c1238);
#endif
// 2012-05-22aRagexe, 2012-05-23aRagexe, 2012-05-23aRagexeRE, 2012-05-23bRagexeRE, 2012-05-25aRagexeRE
#if PACKETVER == 20120522 || \
PACKETVER == 20120523 || \
PACKETVER == 20120525
- packetKeys(0x70EB4CCB,0x0487713C,0x398D4B08);
+ packetKeys(0x70eb4ccb,0x0487713c,0x398d4b08);
#endif
// 2012-05-29bRagexe, 2012-05-29bRagexeRE
#if PACKETVER == 20120529
- packetKeys(0x53415DDE,0x34953E16,0x27623DF2);
+ packetKeys(0x53415dde,0x34953e16,0x27623df2);
#endif
// 2012-06-01aRagexeRE, 2012-06-04aRagexe, 2012-06-05aRagexeRE
#if PACKETVER == 20120601 || \
PACKETVER == 20120604 || \
PACKETVER == 20120605
- packetKeys(0x68CA3080,0x31B74BDD,0x505208F1);
+ packetKeys(0x68ca3080,0x31b74bdd,0x505208f1);
#endif
// 2012-06-12aRagexe, 2012-06-12aRagexeRE
#if PACKETVER == 20120612
- packetKeys(0x32E45D64,0x35643564,0x35643564);
+ packetKeys(0x32e45d64,0x35643564,0x35643564);
#endif
// 2012-06-18aRagexe, 2012-06-18aRagexeRE
#if PACKETVER == 20120618
- packetKeys(0x261F261F,0x261F261F,0x261F261F);
+ packetKeys(0x261f261f,0x261f261f,0x261f261f);
#endif
// 2012-06-26aRagexe, 2012-06-26aRagexeRE, 2012-06-27aRagexe, 2012-06-27aRagexeRE
#if PACKETVER == 20120626 || \
PACKETVER == 20120627
- packetKeys(0x02277E66,0x045723F1,0x7107392C);
+ packetKeys(0x02277e66,0x045723f1,0x7107392c);
#endif
// 2012-07-02aRagexe, 2012-07-02aRagexeRE
#if PACKETVER == 20120702
- packetKeys(0x25733B31,0x53486CFD,0x398649BD);
+ packetKeys(0x25733b31,0x53486cfd,0x398649bd);
#endif
// 2012-07-10aRagexe, 2012-07-10aRagexeRE, 2012-07-12aRagexe, 2012-07-12aRagexeRE
#if PACKETVER == 20120710 || \
PACKETVER == 20120712
- packetKeys(0x0E8B7AFB,0x6930362D,0x42D33A57);
+ packetKeys(0x0e8b7afb,0x6930362d,0x42d33a57);
#endif
// 2012-07-16aRagexe, 2012-07-16aRagexeRE
@@ -505,479 +598,453 @@
// 2012-07-24aRagexe, 2012-07-24aRagexeRE
#if PACKETVER == 20120724
- packetKeys(0x783D5BC6,0x3AAC2176,0x66616F02);
+ packetKeys(0x783d5bc6,0x3aac2176,0x66616f02);
#endif
// 2012-08-01aRagexe, 2012-08-01aRagexeRE, 2012-08-01bRagexe, 2012-08-01bRagexeRE
#if PACKETVER == 20120801
- packetKeys(0x71FB6768,0x5843166B,0x6CB445C6);
+ packetKeys(0x71fb6768,0x5843166b,0x6cb445c6);
#endif
// 2012-08-08aRagexe, 2012-08-08aRagexeRE, 2012-08-08bRagexe, 2012-08-08bRagexeRE, 2012-08-08cRagexe, 2012-08-08cRagexeRE, 2012-08-08dRagexeRE
#if PACKETVER == 20120808
- packetKeys(0x5D5068BB,0x36732065,0x47CF7367);
+ packetKeys(0x5d5068bb,0x36732065,0x47cf7367);
#endif
// 2012-08-14aRagexe, 2012-08-14aRagexeRE, 2012-08-14bRagexe, 2012-08-14bRagexeRE
#if PACKETVER == 20120814
- packetKeys(0x203E21BD,0x047459FB,0x56AF5A97);
+ packetKeys(0x203e21bd,0x047459fb,0x56af5a97);
#endif
// 2012-08-22aRagexe, 2012-08-22aRagexeRE, 2012-08-22bRagexe, 2012-08-22bRagexeRE, 2012-08-22cRagexe, 2012-08-22cRagexeRE
#if PACKETVER == 20120822
- packetKeys(0x06A92E7B,0x3D324F29,0x5FD63004);
+ packetKeys(0x06a92e7b,0x3d324f29,0x5fd63004);
#endif
// 2012-08-30aRagexe, 2012-08-30aRagexeRE, 2012-08-30bRagexeRE
#if PACKETVER == 20120830
- packetKeys(0x0AF1363D,0x4AB33E3B,0x48421DBE);
+ packetKeys(0x0af1363d,0x4ab33e3b,0x48421dbe);
#endif
// 2012-09-05aRagexe, 2012-09-05aRagexeRE
#if PACKETVER == 20120905
- packetKeys(0x04F50D80,0x092F5C4D,0x29BF3DCF);
+ packetKeys(0x04f50d80,0x092f5c4d,0x29bf3dcf);
#endif
// 2012-09-11aRagexe, 2012-09-11aRagexeRE
#if PACKETVER == 20120911
- packetKeys(0x1F3D1145,0x02DB3C32,0x4BE34C49);
+ packetKeys(0x1f3d1145,0x02db3c32,0x4be34c49);
#endif
// 2012-09-19aRagexe, 2012-09-19aRagexeRE
#if PACKETVER == 20120919
- packetKeys(0x72E00F24,0x4EA02D80,0x7C803480);
+ packetKeys(0x72e00f24,0x4ea02d80,0x7c803480);
#endif
// 2012-09-25aRagexe, 2012-09-25aRagexeRE, 2012-09-26aRagexe, 2012-09-26aRagexeRE
#if PACKETVER == 20120925 || \
PACKETVER == 20120926
- packetKeys(0x43A66E22,0x36C2229F,0x08172ECE);
+ packetKeys(0x43a66e22,0x36c2229f,0x08172ece);
#endif
// 2012-10-10aRagexe, 2012-10-10aRagexeRE, 2012-10-10bRagexe, 2012-10-10bRagexeRE, 2012-10-11aRagexeRE
#if PACKETVER == 20121010 || \
PACKETVER == 20121011
- packetKeys(0x169733E2,0x4C4640DC,0x31636531);
+ packetKeys(0x169733e2,0x4c4640dc,0x31636531);
#endif
// 2012-10-17aRagexe, 2012-10-17aRagexeRE, 2012-10-17bRagexe, 2012-10-17bRagexeRE
#if PACKETVER == 20121017
- packetKeys(0x340C0C31,0x33205EA8,0x55964BFF);
+ packetKeys(0x340c0c31,0x33205ea8,0x55964bff);
#endif
// 2012-10-24aRagexe, 2012-10-24aRagexeRE
#if PACKETVER == 20121024
- packetKeys(0x6166335C,0x45393483,0x7EDC5478);
+ packetKeys(0x6166335c,0x45393483,0x7edc5478);
#endif
// 2012-10-31aRagexe, 2012-10-31aRagexeRE
#if PACKETVER == 20121031
- packetKeys(0x66EB7ADB,0x242864BB,0x354A4CDE);
+ packetKeys(0x66eb7adb,0x242864bb,0x354a4cde);
#endif
// 2012-11-07aRagexe, 2012-11-07aRagexeRE
#if PACKETVER == 20121107
- packetKeys(0x49967892,0x48025276,0x1E192CA3);
+ packetKeys(0x49967892,0x48025276,0x1e192ca3);
#endif
// 2012-11-14aRagexe, 2012-11-14aRagexeRE
#if PACKETVER == 20121114
- packetKeys(0x3473545C,0x2706445C,0x79647616);
+ packetKeys(0x3473545c,0x2706445c,0x79647616);
#endif
// 2012-11-21aRagexe, 2012-11-21aRagexeRE
#if PACKETVER == 20121121
- packetKeys(0x6EB54B0B,0x3F2A6BE5,0x0B2866E6);
+ packetKeys(0x6eb54b0b,0x3f2a6be5,0x0b2866e6);
#endif
// 2012-11-28aRagexe, 2012-11-28aRagexeRE
#if PACKETVER == 20121128
- packetKeys(0x146D4D5E,0x5C3D161B,0x759250B8);
+ packetKeys(0x146d4d5e,0x5c3d161b,0x759250b8);
#endif
// 2012-12-05aRagexe, 2012-12-05aRagexeRE, 2012-12-05bRagexe, 2012-12-05bRagexeRE
#if PACKETVER == 20121205
- packetKeys(0x218C64B6,0x4EFE17AE,0x27EA5E74);
+ packetKeys(0x218c64b6,0x4efe17ae,0x27ea5e74);
#endif
// 2012-12-12aRagexe, 2012-12-12aRagexeRE, 2012-12-12bRagexe, 2012-12-12bRagexeRE, 2012-12-12cRagexeRE
#if PACKETVER == 20121212
- packetKeys(0x7F8026F0,0x32EE2A4B,0x73746C0E);
+ packetKeys(0x7f8026f0,0x32ee2a4b,0x73746c0e);
#endif
// 2012-12-18aRagexe, 2012-12-18aRagexeRE, 2012-12-18bRagexe, 2012-12-18bRagexeRE
#if PACKETVER == 20121218
- packetKeys(0x6A5450A2,0x4322498A,0x2C6574FB);
+ packetKeys(0x6a5450a2,0x4322498a,0x2c6574fb);
#endif
// 2012-12-27aRagexe, 2012-12-27aRagexeRE
#if PACKETVER == 20121227
- packetKeys(0x71773018,0x36A14EEB,0x28CD5A20);
+ packetKeys(0x71773018,0x36a14eeb,0x28cd5a20);
#endif
// 2013-01-03aRagexe, 2013-01-03aRagexeRE, 2013-01-07aRagexe
#if PACKETVER == 20130103 || \
PACKETVER == 20130107
- packetKeys(0x1E1A559A,0x199A799A,0x799A799A);
+ packetKeys(0x1e1a559a,0x199a799a,0x799a799a);
#endif
// 2013-01-09aRagexe, 2013-01-09aRagexeRE
#if PACKETVER == 20130109
- packetKeys(0x6435360F,0x0A283678,0x64A04AC7);
+ packetKeys(0x6435360f,0x0a283678,0x64a04ac7);
#endif
// 2013-01-15aRagexeRE, 2013-01-15bRagexe, 2013-01-16aRagexe, 2013-01-16aRagexeRE, 2013-01-16bRagexe
#if PACKETVER == 20130115 || \
PACKETVER == 20130116
- packetKeys(0x273C25CD,0x06AA48AF,0x45A01BD4);
+ packetKeys(0x273c25cd,0x06aa48af,0x45a01bd4);
#endif
// 2013-01-21aRagexe, 2013-01-21aRagexeRE
#if PACKETVER == 20130121
- packetKeys(0x5DD874B0,0x7D98233F,0x28FF5566);
+ packetKeys(0x5dd874b0,0x7d98233f,0x28ff5566);
#endif
// 2013-01-30aRagexe, 2013-01-30aRagexeRE
#if PACKETVER == 20130130
- packetKeys(0x1EA57961,0x27786856,0x30301FA0);
+ packetKeys(0x1ea57961,0x27786856,0x30301fa0);
#endif
// 2013-02-06aRagexe, 2013-02-06aRagexeRE
#if PACKETVER == 20130206
- packetKeys(0x1D8F4227,0x675812AA,0x29132929);
+ packetKeys(0x1d8f4227,0x675812aa,0x29132929);
#endif
// 2013-02-15aRagexe, 2013-02-15aRagexeRE, 2013-02-15bRagexe
#if PACKETVER == 20130215
- packetKeys(0x69FB1C38,0x7D386860,0x62805311);
+ packetKeys(0x69fb1c38,0x7d386860,0x62805311);
#endif
// 2013-02-20aRagexe, 2013-02-20bRagexeRE
#if PACKETVER == 20130220
- packetKeys(0x0D555256,0x28C26722,0x72220A22);
+ packetKeys(0x0d555256,0x28c26722,0x72220a22);
#endif
// 2013-02-27aRagexe, 2013-02-27aRagexeRE
#if PACKETVER == 20130227
- packetKeys(0x44F86842,0x43786A7A,0x71654528);
+ packetKeys(0x44f86842,0x43786a7a,0x71654528);
#endif
// 2013-03-06aRagexe, 2013-03-06aRagexeRE, 2013-03-06bRagexeRE
#if PACKETVER == 20130306
- packetKeys(0x7E274326,0x7D182DF2,0x4FC27DFA);
+ packetKeys(0x7e274326,0x7d182df2,0x4fc27dfa);
#endif
// 2013-03-13aRagexe, 2013-03-13aRagexeRE, 2013-03-13bRagexeRE, 2013-03-13cRagexeRE
#if PACKETVER == 20130313
- packetKeys(0x560021C3,0x6A5D110F,0x52BD40A5);
+ packetKeys(0x560021c3,0x6a5d110f,0x52bd40a5);
#endif
// 2013-03-20bRagexeRE, 2013-03-20cRagexeRE, 2013-03-20dRagexe, 2013-03-20eRagexe
#if PACKETVER == 20130320
- packetKeys(0x3F094C49,0x55F86C1E,0x58AA359A);
+ packetKeys(0x3f094c49,0x55f86c1e,0x58aa359a);
#endif
// 2013-03-27bRagexe, 2013-03-27bRagexeRE
#if PACKETVER == 20130327
- packetKeys(0x114B1BA0,0x2C4F0AE2,0x5FA1183F);
+ packetKeys(0x114b1ba0,0x2c4f0ae2,0x5fa1183f);
#endif
// 2013-04-03aRagexe, 2013-04-03aRagexeRE
#if PACKETVER == 20130403
- packetKeys(0x424A43AE,0x4A9D5EBE,0x4B3518A9);
+ packetKeys(0x424a43ae,0x4a9d5ebe,0x4b3518a9);
#endif
// 2013-04-10aRagexe, 2013-04-10aRagexeRE
#if PACKETVER == 20130410
- packetKeys(0x3AD52ACA,0x314D1AED,0x086E415E);
+ packetKeys(0x3ad52aca,0x314d1aed,0x086e415e);
#endif
// 2013-04-17aRagexe, 2013-04-17aRagexeRE
#if PACKETVER == 20130417
- packetKeys(0x7FB13B83,0x6E003749,0x07A02B94);
+ packetKeys(0x7fb13b83,0x6e003749,0x07a02b94);
#endif
// 2013-04-24aRagexe, 2013-04-24aRagexeRE
#if PACKETVER == 20130424
- packetKeys(0x79F679F6,0x79F679F6,0x79F679F6);
+ packetKeys(0x79f679f6,0x79f679f6,0x79f679f6);
#endif
// 2013-05-02aRagexe, 2013-05-02aRagexeRE, 2013-05-02bRagexe
#if PACKETVER == 20130502
- packetKeys(0x62E733B9,0x62204281,0x7F044DCA);
+ packetKeys(0x62e733b9,0x62204281,0x7f044dca);
#endif
// 2013-05-08bRagexe, 2013-05-08bRagexeRE, 2013-05-08cRagexe, 2013-05-08dRagexe, 2013-05-08eRagexe, 2013-05-08fRagexe
#if PACKETVER == 20130508
- packetKeys(0x25421E49,0x175200BA,0x6C0B5239);
+ packetKeys(0x25421e49,0x175200ba,0x6c0b5239);
#endif
// 2013-05-15aRagexe, 2013-05-15aRagexeRE
#if PACKETVER == 20130515
- packetKeys(0x75794A38,0x58A96BC1,0x296E6FB8);
+ packetKeys(0x75794a38,0x58a96bc1,0x296e6fb8);
#endif
// 2013-05-22aRagexe, 2013-05-22aRagexeRE
#if PACKETVER == 20130522
- packetKeys(0x6948050B,0x06511D9D,0x725D4DF1);
+ packetKeys(0x6948050b,0x06511d9d,0x725d4df1);
#endif
// 2013-05-29aRagexe, 2013-05-29aRagexeRE
#if PACKETVER == 20130529
- packetKeys(0x023A6C87,0x14BF1F1E,0x5CC70CC9);
+ packetKeys(0x023a6c87,0x14bf1f1e,0x5cc70cc9);
#endif
// 2013-06-05aRagexe, 2013-06-05bRagexe, 2013-06-05cRagexeRE
#if PACKETVER == 20130605
- packetKeys(0x646E08D9,0x5F153AB5,0x61B509B5);
+ packetKeys(0x646e08d9,0x5f153ab5,0x61b509b5);
#endif
// 2013-06-12aRagexe, 2013-06-12bRagexe, 2013-06-12bRagexeRE, 2013-06-12cRagexe, 2013-06-12dRagexe, 2013-06-12eRagexe
#if PACKETVER == 20130612
- packetKeys(0x6D166F66,0x3C000FCF,0x295B0FCB);
+ packetKeys(0x6d166f66,0x3c000fcf,0x295b0fcb);
#endif
// 2013-06-18#1aRagexe, 2013-06-18#1aRagexeRE
#if PACKETVER == 20130618
- packetKeys(0x434115DE,0x34A10FE9,0x6791428E);
+ packetKeys(0x434115de,0x34a10fe9,0x6791428e);
#endif
// 2013-06-26_3bRagexeRE, 2013-06-26_3cRagexe, 2013-06-26aRagexeRE, 2013-06-26bRagexe
#if PACKETVER == 20130626
- packetKeys(0x38F453EF,0x6A040FD8,0x65BD6668);
+ packetKeys(0x38f453ef,0x6a040fd8,0x65bd6668);
#endif
// 2013-07-03aRagexe, 2013-07-03bRagexeRE
#if PACKETVER == 20130703
- packetKeys(0x4FF90E23,0x0F1432F2,0x4CFA1EDA);
+ packetKeys(0x4ff90e23,0x0f1432f2,0x4cfa1eda);
#endif
// 2013-07-10aRagexeRE, 2013-07-10bRagexe, 2013-07-10bRagexeRE, 2013-07-10cRagexeRE, 2013-07-10dRagexeRE, 2013-07-10eRagexeRE
#if PACKETVER == 20130710
- packetKeys(0x4A9C4237,0x4CCF3F8F,0x458F758F);
+ packetKeys(0x4a9c4237,0x4ccf3f8f,0x458f758f);
#endif
// 2013-07-17cRagexe, 2013-07-17cRagexeRE, 2013-07-17dRagexeRE, 2013-07-17eRagexeRE
#if PACKETVER == 20130717
- packetKeys(0x5EE5520C,0x5F9E00CF,0x2BED4F91);
+ packetKeys(0x5ee5520c,0x5f9e00cf,0x2bed4f91);
#endif
// 2013-07-24eRagexe, 2013-07-24eRagexeRE, 2013-07-24fRagexeRE
#if PACKETVER == 20130724
- packetKeys(0x3C243BF5,0x42CC4E2F,0x02106EC6);
+ packetKeys(0x3c243bf5,0x42cc4e2f,0x02106ec6);
#endif
// 2013-07-31cRagexe, 2013-07-31cRagexeRE
#if PACKETVER == 20130731
- packetKeys(0x1E9D11A6,0x21A232B8,0x6A9E02B7);
+ packetKeys(0x1e9d11a6,0x21a232b8,0x6a9e02b7);
#endif
// 2013-08-07aRagexe, 2013-08-07aRagexeRE
#if PACKETVER == 20130807
- packetKeys(0x7E241DE0,0x5E805580,0x3D807D80);
+ packetKeys(0x7e241de0,0x5e805580,0x3d807d80);
#endif
// 2013-08-14aRagexe, 2013-08-14aRagexeRE
#if PACKETVER == 20130814
- packetKeys(0x23A23148,0x0C41420E,0x53785AD7);
+ packetKeys(0x23a23148,0x0c41420e,0x53785ad7);
#endif
// 2013-08-21bRagexe, 2013-08-21dRagexeRE
#if PACKETVER == 20130821
- packetKeys(0x51673F38,0x01663512,0x5CFF0B3D);
+ packetKeys(0x51673f38,0x01663512,0x5cff0b3d);
#endif
// 2013-08-28bRagexe, 2013-08-28bRagexeRE, 2013-08-28cRagexe, 2013-08-28cRagexeRE
#if PACKETVER == 20130828
- packetKeys(0x02EF7A9A,0x4882042F,0x76796678);
+ packetKeys(0x02ef7a9a,0x4882042f,0x76796678);
#endif
// 2013-09-04aRagexe, 2013-09-04bRagexeRE
#if PACKETVER == 20130904
- packetKeys(0x41AF20C5,0x0997799E,0x4AE803A0);
+ packetKeys(0x41af20c5,0x0997799e,0x4ae803a0);
#endif
// 2013-09-11aRagexe, 2013-09-11aRagexeRE, 2013-09-11bRagexe, 2013-09-11bRagexeRE
#if PACKETVER == 20130911
- packetKeys(0x232B3F47,0x0AD0515F,0x1CA31828);
+ packetKeys(0x232b3f47,0x0ad0515f,0x1ca31828);
#endif
// 2013-09-17aRagexe, 2013-09-17aRagexeRE
#if PACKETVER == 20130917
- packetKeys(0x5C9164C5,0x32B62F83,0x52864548);
+ packetKeys(0x5c9164c5,0x32b62f83,0x52864548);
#endif
// 2013-09-25aRagexe, 2013-09-25aRagexeRE, 2013-09-25bRagexe, 2013-09-25bRagexeRE, 2013-09-25cRagexe
#if PACKETVER == 20130925
- packetKeys(0x4B9C279A,0x0C7849C4,0x72A77646);
+ packetKeys(0x4b9c279a,0x0c7849c4,0x72a77646);
#endif
// 2013-10-02aRagexe, 2013-10-02aRagexeRE
#if PACKETVER == 20131002
- packetKeys(0x63A466F7,0x635362F3,0x41F369F3);
+ packetKeys(0x63a466f7,0x635362f3,0x41f369f3);
#endif
// 2013-10-08aRagexe, 2013-10-08bRagexeRE
#if PACKETVER == 20131008
- packetKeys(0x64924AAD,0x08CA0445,0x1CBC36DE);
+ packetKeys(0x64924aad,0x08ca0445,0x1cbc36de);
#endif
// 2013-10-16aRagexe, 2013-10-16aRagexeRE, 2013-10-16bRagexe, 2013-10-16bRagexeRE
#if PACKETVER == 20131016
- packetKeys(0x33AD7A93,0x720C7C49,0x12C4205A);
+ packetKeys(0x33ad7a93,0x720c7c49,0x12c4205a);
#endif
// 2013-10-23aRagexe, 2013-10-23aRagexeRE
#if PACKETVER == 20131023
- packetKeys(0x02EF6163,0x2B774814,0x58EC3036);
+ packetKeys(0x02ef6163,0x2b774814,0x58ec3036);
#endif
// 2013-10-30aRagexe, 2013-10-30aRagexeRE
#if PACKETVER == 20131030
- packetKeys(0x4A6A3EFF,0x7E2D5237,0x01CA019E);
+ packetKeys(0x4a6a3eff,0x7e2d5237,0x01ca019e);
#endif
// 2013-11-06aRagexe, 2013-11-06aRagexeRE, 2013-11-07aRagexe, 2013-11-07bRagexe, 2013-11-07cRagexe, 2013-11-08aRagexe
#if PACKETVER == 20131106 || \
PACKETVER == 20131107 || \
PACKETVER == 20131108
- packetKeys(0x143E528F,0x5CA05899,0x44B85B23);
+ packetKeys(0x143e528f,0x5ca05899,0x44b85b23);
#endif
// 2013-11-13aRagexeRE, 2013-11-13bRagexe
#if PACKETVER == 20131113
- packetKeys(0x44EA14CD,0x49311C88,0x40C86C31);
+ packetKeys(0x44ea14cd,0x49311c88,0x40c86c31);
#endif
// 2013-11-20dRagexe, 2013-11-20eRagexeRE
#if PACKETVER == 20131120
- packetKeys(0x541E5172,0x1B1D30A0,0x28AA7CE5);
+ packetKeys(0x541e5172,0x1b1d30a0,0x28aa7ce5);
#endif
// 2013-11-27aRagexeRE, 2013-11-27bRagexe, 2013-11-27bRagexeRE
#if PACKETVER == 20131127
- packetKeys(0x21426A48,0x5C505D6A,0x046D06AD);
+ packetKeys(0x21426a48,0x5c505d6a,0x046d06ad);
#endif
// 2013-12-04dRagexeRE, 2013-12-04eRagexe, 2013-12-04eRagexeRE
#if PACKETVER == 20131204
- packetKeys(0x792760B2,0x5AF45387,0x36165603);
+ packetKeys(0x792760b2,0x5af45387,0x36165603);
#endif
// 2013-12-11cRagexe, 2013-12-11cRagexeRE, 2013-12-11dRagexe, 2013-12-11eRagexeRE
#if PACKETVER == 20131211
- packetKeys(0x55B0394E,0x4D341FF2,0x60BC1DC3);
+ packetKeys(0x55b0394e,0x4d341ff2,0x60bc1dc3);
#endif
// 2013-12-18aRagexeRE, 2013-12-18bRagexe
#if PACKETVER == 20131218
- packetKeys(0x6A596301,0x76866D0E,0x32294A45);
-#endif
-
-// 2013-12-23aRagexeRE, 2014-05-08aRagexe, 2014-05-08aRagexeRE, 2014-06-11eRagexe, 2015-02-25hRagexe, 2018-03-15aRagexe, 2018-03-21aRagexe, 2018-03-21aRagexeRE, 2018-03-28bRagexe, 2018-03-28bRagexeRE, 2018-04-04bRagexe, 2018-04-04cRagexeRE, 2018-04-18aRagexe, 2018-04-18bRagexeRE, 2018-04-25cRagexe, 2018-04-25cRagexeRE, 2018-05-02bRagexe, 2018-05-02bRagexeRE, 2018-05-02dRagexeRE, 2018-05-09aRagexe, 2018-05-16cRagexe, 2018-05-16cRagexeRE, 2018-05-23aRagexe, 2018-05-23aRagexeRE, 2018-05-30aRagexe, 2018-05-30bRagexeRE, 2018-05-30cRagexeRE, 2018-06-05bRagexe, 2018-06-05bRagexeRE, 2018-06-12aRagexeRE, 2018-06-12bRagexeRE, 2018-06-20cRagexe, 2018-06-20dRagexeRE, 2018-06-20eRagexe, 2018-06-20eRagexeRE, 2018-06-21aRagexe, 2018-06-21aRagexeRE, 2018-07-04aRagexe, 2018-07-04aRagexeRE, 2018-07-11aRagexeRE, 2018-07-18bRagexe, 2018-07-18bRagexeRE, 2018-07-18bRagexeRE1, 2018-07-18cRagexe, 2018-07-18cRagexeRE
-#if PACKETVER == 20131223 || \
- PACKETVER == 20140508 || \
- PACKETVER == 20140611 || \
- PACKETVER == 20150225 || \
- PACKETVER == 20180315 || \
- PACKETVER == 20180321 || \
- PACKETVER == 20180328 || \
- PACKETVER == 20180404 || \
- PACKETVER == 20180418 || \
- PACKETVER == 20180425 || \
- PACKETVER == 20180502 || \
- PACKETVER == 20180509 || \
- PACKETVER == 20180516 || \
- PACKETVER == 20180523 || \
- PACKETVER == 20180530 || \
- PACKETVER == 20180605 || \
- PACKETVER == 20180612 || \
- PACKETVER == 20180620 || \
- PACKETVER == 20180621 || \
- PACKETVER == 20180704 || \
- PACKETVER == 20180711 || \
- PACKETVER >= 20180718
- packetKeys(0x00000000,0x00000000,0x00000000);
+ packetKeys(0x6a596301,0x76866d0e,0x32294a45);
#endif
// 2013-12-23bRagexe, 2013-12-23bRagexeRE, 2013-12-23cRagexe, 2013-12-23xRagexeRE
#if PACKETVER == 20131223
- packetKeys(0x631C511C,0x111C111C,0x111C111C);
+ packetKeys(0x631c511c,0x111c111c,0x111c111c);
#endif
// 2013-12-30aRagexe, 2013-12-30aRagexeRE
#if PACKETVER == 20131230
- packetKeys(0x611B7097,0x01F957A1,0x768A0FCB);
+ packetKeys(0x611b7097,0x01f957a1,0x768a0fcb);
#endif
// 2014-01-08bRagexeRE, 2014-01-08cRagexe, 2014-01-08cRagexeRE, 2014-01-08dRagexe
#if PACKETVER == 20140108
- packetKeys(0x4A1E26F2,0x231E7EFE,0x61FE19FE);
+ packetKeys(0x4a1e26f2,0x231e7efe,0x61fe19fe);
#endif
// 2014-01-15aRagexe, 2014-01-15bRagexe, 2014-01-15cRagexe, 2014-01-15cRagexeRE, 2014-01-15dRagexeRE, 2014-01-15eRagexe, 2014-01-15eRagexeRE
#if PACKETVER == 20140115
- packetKeys(0x63224335,0x0F3A1F27,0x6D217B24);
+ packetKeys(0x63224335,0x0f3a1f27,0x6d217b24);
#endif
// 2014-01-22aRagexe, 2014-01-22aRagexeRE
#if PACKETVER == 20140122
- packetKeys(0x6123177B,0x05B42C99,0x71702594);
+ packetKeys(0x6123177b,0x05b42c99,0x71702594);
#endif
// 2014-01-29aRagexe, 2014-01-29bRagexeRE, 2014-01-29cRagexe
#if PACKETVER == 20140129
- packetKeys(0x2E52163C,0x605E518B,0x3C7A62CB);
+ packetKeys(0x2e52163c,0x605e518b,0x3c7a62cb);
#endif
// 2014-02-05bRagexe, 2014-02-05bRagexeRE
#if PACKETVER == 20140205
- packetKeys(0x63DC7BDC,0x7BDC7BDC,0x7BDC7BDC);
+ packetKeys(0x63dc7bdc,0x7bdc7bdc,0x7bdc7bdc);
#endif
// 2014-02-12aRagexe, 2014-02-12aRagexeRE
#if PACKETVER == 20140212
- packetKeys(0x46837074,0x65292E89,0x77237F9C);
+ packetKeys(0x46837074,0x65292e89,0x77237f9c);
#endif
// 2014-02-19aRagexe, 2014-02-19aRagexeRE, 2014-02-19bRagexeRE
#if PACKETVER == 20140219
- packetKeys(0x4E3C5327,0x3A6B5469,0x2CE36AED);
+ packetKeys(0x4e3c5327,0x3a6b5469,0x2ce36aed);
#endif
// 2014-02-26aRagexe, 2014-02-26aRagexeRE, 2014-02-26bRagexeRE
#if PACKETVER == 20140226
- packetKeys(0x36D71056,0x52122F5E,0x6FF76E99);
+ packetKeys(0x36d71056,0x52122f5e,0x6ff76e99);
#endif
// 2014-03-05aRagexe, 2014-03-05aRagexeRE, 2014-03-05bRagexe, 2014-03-05bRagexeRE
#if PACKETVER == 20140305
- packetKeys(0x116763F2,0x41117DAC,0x7FD13C45);
+ packetKeys(0x116763f2,0x41117dac,0x7fd13c45);
#endif
// 2014-03-12bRagexeRE, 2014-03-12dRagexe
#if PACKETVER == 20140312
- packetKeys(0x48911E4E,0x58CB2EB3,0x05232619);
+ packetKeys(0x48911e4e,0x58cb2eb3,0x05232619);
#endif
// 2014-03-19aRagexe, 2014-03-19aRagexeRE
#if PACKETVER == 20140319
- packetKeys(0x3DA44383,0x1ABB165F,0x5B6846B9);
+ packetKeys(0x3da44383,0x1abb165f,0x5b6846b9);
#endif
// 2014-03-26aRagexe, 2014-03-26cRagexeRE
#if PACKETVER == 20140326
- packetKeys(0x68E72AF6,0x27DB4C3D,0x348F2677);
+ packetKeys(0x68e72af6,0x27db4c3d,0x348f2677);
#endif
// 2014-04-02eRagexeRE, 2014-04-02fRagexe, 2014-04-02fRagexeRE, 2014-04-02gRagexe
#if PACKETVER == 20140402
- packetKeys(0x15D3271C,0x004D725B,0x111A3A37);
+ packetKeys(0x15d3271c,0x004d725b,0x111a3a37);
#endif
// 2014-04-09aRagexe, 2014-04-09aRagexeRE, 2014-04-09bRagexe
#if PACKETVER == 20140409
- packetKeys(0x7F6C390F,0x139C254C,0x7F25708C);
+ packetKeys(0x7f6c390f,0x139c254c,0x7f25708c);
#endif
// 2014-04-16aRagexe, 2014-04-16aRagexeRE, 2014-04-16bRagexe
@@ -987,464 +1054,464 @@
// 2014-04-23aRagexe, 2014-04-23aRagexeRE
#if PACKETVER == 20140423
- packetKeys(0x7E0D6B56,0x74673CD3,0x2EBA4940);
+ packetKeys(0x7e0d6b56,0x74673cd3,0x2eba4940);
#endif
// 2014-04-30aRagexe, 2014-04-30aRagexeRE
#if PACKETVER == 20140430
- packetKeys(0x400145D8,0x3FE50155,0x11624F70);
+ packetKeys(0x400145d8,0x3fe50155,0x11624f70);
#endif
// 2014-05-08bRagexe, 2014-05-08bRagexeRE
#if PACKETVER == 20140508
- packetKeys(0x087E57EC,0x25224F4A,0x024F12C6);
+ packetKeys(0x087e57ec,0x25224f4a,0x024f12c6);
#endif
// 2014-05-14bRagexe, 2014-05-14bRagexeRE, 2014-05-14cRagexeRE
#if PACKETVER == 20140514
- packetKeys(0x4BE46730,0x047926E0,0x37773BBB);
+ packetKeys(0x4be46730,0x047926e0,0x37773bbb);
#endif
// 2014-05-21aRagexeRE, 2014-05-21bRagexe
#if PACKETVER == 20140521
- packetKeys(0x14ED2D86,0x17371C33,0x2D0473C8);
+ packetKeys(0x14ed2d86,0x17371c33,0x2d0473c8);
#endif
// 2014-05-28aRagexe, 2014-05-28aRagexeRE
#if PACKETVER == 20140528
- packetKeys(0x579445EB,0x26734878,0x7C861628);
+ packetKeys(0x579445eb,0x26734878,0x7c861628);
#endif
// 2014-06-05aRagexe, 2014-06-05aRagexeRE, 2014-06-05bRagexe
#if PACKETVER == 20140605
- packetKeys(0x5ABC4223,0x04DD2636,0x0D5850E0);
+ packetKeys(0x5abc4223,0x04dd2636,0x0d5850e0);
#endif
// 2014-06-11bRagexeRE, 2014-06-11cRagexe, 2014-06-11dRagexe, 2014-06-11hRagexe, 2014-06-12aRagexe, 2014-06-13aRagexe
#if PACKETVER == 20140611 || \
PACKETVER == 20140612 || \
PACKETVER == 20140613
- packetKeys(0x4FC83479,0x3AB04D1F,0x477B4010);
+ packetKeys(0x4fc83479,0x3ab04d1f,0x477b4010);
#endif
// 2014-06-18aRagexe, 2014-06-18cRagexeRE
#if PACKETVER == 20140618
- packetKeys(0x2DB507BB,0x11BA12E7,0x7F447760);
+ packetKeys(0x2db507bb,0x11ba12e7,0x7f447760);
#endif
// 2014-06-25aRagexe, 2014-06-25aRagexeRE, 2014-06-25bRagexe
#if PACKETVER == 20140625
- packetKeys(0x09987045,0x644B1051,0x1A091CB8);
+ packetKeys(0x09987045,0x644b1051,0x1a091cb8);
#endif
// 2014-07-02aRagexe, 2014-07-02aRagexeRE
#if PACKETVER == 20140702
- packetKeys(0x5C4574F4,0x5D446386,0x48BD24C9);
+ packetKeys(0x5c4574f4,0x5d446386,0x48bd24c9);
#endif
// 2014-07-09aRagexe, 2014-07-09aRagexeRE
#if PACKETVER == 20140709
- packetKeys(0x2C7A6E92,0x324F1B85,0x29916FC2);
+ packetKeys(0x2c7a6e92,0x324f1b85,0x29916fc2);
#endif
// 2014-07-16aRagexe, 2014-07-16aRagexeRE, 2014-07-16bRagexe, 2014-07-16cRagexe
#if PACKETVER == 20140716
- packetKeys(0x0EB20408,0x6D6C4292,0x4F6E4CF3);
+ packetKeys(0x0eb20408,0x6d6c4292,0x4f6e4cf3);
#endif
// 2014-07-23aRagexe, 2014-07-23aRagexeRE, 2014-07-23bRagexe, 2014-07-23bRagexeRE
#if PACKETVER == 20140723
- packetKeys(0x42A21713,0x51CE6EAD,0x102F7B0B);
+ packetKeys(0x42a21713,0x51ce6ead,0x102f7b0b);
#endif
// 2014-07-30aRagexe, 2014-07-30bRagexeRE
#if PACKETVER == 20140730
- packetKeys(0x63CE4E53,0x04F969A3,0x690954DB);
+ packetKeys(0x63ce4e53,0x04f969a3,0x690954db);
#endif
// 2014-08-06aRagexe, 2014-08-06aRagexeRE, 2014-08-06bRagexe
#if PACKETVER == 20140806
- packetKeys(0x0D5B69AC,0x3C001F20,0x0C201420);
+ packetKeys(0x0d5b69ac,0x3c001f20,0x0c201420);
#endif
// 2014-08-13aRagexe, 2014-08-13aRagexeRE, 2014-08-13bRagexe, 2014-08-14aRagexe
#if PACKETVER == 20140813 || \
PACKETVER == 20140814
- packetKeys(0x7AD51E0A,0x28C72C46,0x210205BD);
+ packetKeys(0x7ad51e0a,0x28c72c46,0x210205bd);
#endif
// 2014-08-20aRagexe, 2014-08-20aRagexeRE
#if PACKETVER == 20140820
- packetKeys(0x374F15D0,0x64C87DEC,0x65CE2A41);
+ packetKeys(0x374f15d0,0x64c87dec,0x65ce2a41);
#endif
// 2014-08-27aRagexe, 2014-08-27aRagexeRE
#if PACKETVER == 20140827
- packetKeys(0x53814CA2,0x27DE193E,0x503E683E);
+ packetKeys(0x53814ca2,0x27de193e,0x503e683e);
#endif
// 2014-09-03aRagexe, 2014-09-03aRagexeRE
#if PACKETVER == 20140903
- packetKeys(0x2F386F34,0x0F935365,0x76A43888);
+ packetKeys(0x2f386f34,0x0f935365,0x76a43888);
#endif
// 2014-09-17aRagexe, 2014-09-17cRagexeRE
#if PACKETVER == 20140917
- packetKeys(0x180118EA,0x440134CF,0x3A99179D);
+ packetKeys(0x180118ea,0x440134cf,0x3a99179d);
#endif
// 2014-09-24bRagexeRE, 2014-09-24cRagexe, 2014-09-24cRagexeRE
#if PACKETVER == 20140924
- packetKeys(0x6F5222D8,0x593B798C,0x4CBD655E);
+ packetKeys(0x6f5222d8,0x593b798c,0x4cbd655e);
#endif
// 2014-10-01aRagexe, 2014-10-01bRagexeRE, 2014-10-01cRagexeRE
#if PACKETVER == 20141001
- packetKeys(0x6D882C11,0x7DF959E2,0x4F3F60E8);
+ packetKeys(0x6d882c11,0x7df959e2,0x4f3f60e8);
#endif
// 2014-10-08aRagexe, 2014-10-08bRagexe, 2014-10-08bRagexeRE, 2014-10-08cRagexe, 2014-10-08cRagexeRE, 2014-10-08dRagexe
#if PACKETVER == 20141008
- packetKeys(0x754365B3,0x36B326B3,0x26B326B3);
+ packetKeys(0x754365b3,0x36b326b3,0x26b326b3);
#endif
// 2014-10-15bRagexe, 2014-10-15bRagexeRE, 2014-10-15cRagexe, 2014-10-15dRagexe, 2014-10-16aRagexe, 2014-10-16aRagexeRE
#if PACKETVER == 20141015 || \
PACKETVER == 20141016
- packetKeys(0x2DFF467C,0x444B37EE,0x2C1B634F);
+ packetKeys(0x2dff467c,0x444b37ee,0x2c1b634f);
#endif
// 2014-10-22aRagexeRE, 2014-10-22bRagexe
#if PACKETVER == 20141022
- packetKeys(0x290551EA,0x2B952C75,0x2D67669B);
+ packetKeys(0x290551ea,0x2b952c75,0x2d67669b);
#endif
// 2014-10-29aRagexe, 2014-10-29aRagexeRE
#if PACKETVER == 20141029
- packetKeys(0x1AFD581D,0x2E1D4E1D,0x4E1D4E1D);
+ packetKeys(0x1afd581d,0x2e1d4e1d,0x4e1d4e1d);
#endif
// 2014-11-05aRagexe, 2014-11-05aRagexeRE, 2014-11-05bRagexe, 2014-11-05bRagexeRE
#if PACKETVER == 20141105
- packetKeys(0x7F310819,0x5FF45401,0x2D303DD9);
+ packetKeys(0x7f310819,0x5ff45401,0x2d303dd9);
#endif
// 2014-11-12aRagexeRE, 2014-11-12cRagexe, 2014-11-12dRagexe
#if PACKETVER == 20141112
- packetKeys(0x430C0C27,0x067153CF,0x5E5439A9);
+ packetKeys(0x430c0c27,0x067153cf,0x5e5439a9);
#endif
// 2014-11-19bRagexeRE, 2014-11-19dRagexe
#if PACKETVER == 20141119
- packetKeys(0x7A7E7EDE,0x24EB02E3,0x71603607);
+ packetKeys(0x7a7e7ede,0x24eb02e3,0x71603607);
#endif
// 2014-11-26aRagexe, 2014-11-26aRagexeRE, 2014-11-26bRagexe, 2014-11-26bRagexeRE, 2014-11-26cRagexe, 2014-11-26cRagexeRE, 2014-11-26dRagexe, 2014-11-26dRagexeRE, 2014-11-26eRagexeRE
#if PACKETVER == 20141126
- packetKeys(0x01E14C42,0x56D73044,0x4B3278DF);
+ packetKeys(0x01e14c42,0x56d73044,0x4b3278df);
#endif
// 2014-12-03aRagexe, 2014-12-03aRagexeRE
#if PACKETVER == 20141203
- packetKeys(0x66CB52E4,0x1EB84093,0x33563E18);
+ packetKeys(0x66cb52e4,0x1eb84093,0x33563e18);
#endif
// 2014-12-10bRagexe, 2014-12-10cRagexe, 2014-12-10cRagexeRE
#if PACKETVER == 20141210
- packetKeys(0x0B0B1DD3,0x26EF1797,0x4F40370B);
+ packetKeys(0x0b0b1dd3,0x26ef1797,0x4f40370b);
#endif
// 2014-12-17aRagexe, 2014-12-17aRagexeRE
#if PACKETVER == 20141217
- packetKeys(0x01AB478C,0x0FDE58F2,0x1DAC7303);
+ packetKeys(0x01ab478c,0x0fde58f2,0x1dac7303);
#endif
// 2014-12-23cRagexeRE, 2014-12-24aRagexe
#if PACKETVER == 20141223 || \
PACKETVER == 20141224
- packetKeys(0x2E8936E6,0x34463C46,0x67CD3885);
+ packetKeys(0x2e8936e6,0x34463c46,0x67cd3885);
#endif
// 2014-12-31aRagexe, 2014-12-31aRagexeRE
#if PACKETVER == 20141231
- packetKeys(0x154C347E,0x54B26512,0x52126A12);
+ packetKeys(0x154c347e,0x54b26512,0x52126a12);
#endif
// 2015-01-07aRagexe, 2015-01-07aRagexeRE
#if PACKETVER == 20150107
- packetKeys(0x6C494A14,0x4DDB6427,0x3E6D7B65);
+ packetKeys(0x6c494a14,0x4ddb6427,0x3e6d7b65);
#endif
// 2015-01-14aRagexe, 2015-01-14aRagexeRE, 2015-01-14bRagexe, 2015-01-14cRagexe, 2015-01-14dRagexe
#if PACKETVER == 20150114
- packetKeys(0x21C96102,0x13142934,0x1ABF4EA3);
+ packetKeys(0x21c96102,0x13142934,0x1abf4ea3);
#endif
// 2015-01-21aRagexe, 2015-01-21aRagexeRE, 2015-01-21bRagexeRE
#if PACKETVER == 20150121
- packetKeys(0x0B9D2AF5,0x658A3346,0x379E3654);
+ packetKeys(0x0b9d2af5,0x658a3346,0x379e3654);
#endif
// 2015-01-28aRagexe, 2015-01-28aRagexeRE, 2015-01-29aRagexe, 2015-01-30aRagexe
#if PACKETVER == 20150128 || \
PACKETVER == 20150129 || \
PACKETVER == 20150130
- packetKeys(0x77CA2D55,0x28B608F0,0x75B47957);
+ packetKeys(0x77ca2d55,0x28b608f0,0x75b47957);
#endif
// 2015-02-04aRagexe, 2015-02-04cRagexeRE
#if PACKETVER == 20150204
- packetKeys(0x134529DB,0x5B4F6CEF,0x29EF11EF);
+ packetKeys(0x134529db,0x5b4f6cef,0x29ef11ef);
#endif
// 2015-02-11aRagexe, 2015-02-11aRagexeRE
#if PACKETVER == 20150211
- packetKeys(0x33911A25,0x1E6945FD,0x7385623A);
+ packetKeys(0x33911a25,0x1e6945fd,0x7385623a);
#endif
// 2015-02-17aRagexe, 2015-02-17aRagexeRE
#if PACKETVER == 20150217
- packetKeys(0x731B731B,0x731B731B,0x731B731B);
+ packetKeys(0x731b731b,0x731b731b,0x731b731b);
#endif
// 2015-02-25aRagexeRE, 2015-02-25bRagexeRE, 2015-02-25cRagexeRE, 2015-02-25dRagexeRE, 2015-02-25eRagexe, 2015-02-25eRagexeRE, 2015-02-25fRagexe, 2015-02-25gRagexe, 2015-02-25iRagexe, 2015-02-25jRagexe, 2015-02-26aRagexe, 2015-02-26aRagexeRE
#if PACKETVER == 20150225 || \
PACKETVER == 20150226
- packetKeys(0x57FD4B7B,0x19CC16FB,0x0D255D72);
+ packetKeys(0x57fd4b7b,0x19cc16fb,0x0d255d72);
#endif
// 2015-03-04aRagexe, 2015-03-04aRagexeRE, 2015-03-04bRagexeRE
#if PACKETVER == 20150304
- packetKeys(0x1A657B1C,0x7E1806E7,0x55396A5C);
+ packetKeys(0x1a657b1c,0x7e1806e7,0x55396a5c);
#endif
// 2015-03-11aRagexe, 2015-03-11aRagexeRE, 2015-03-11bRagexe, 2015-03-11bRagexeRE
#if PACKETVER == 20150311
- packetKeys(0x48C45D97,0x06CE09B0,0x5836642F);
+ packetKeys(0x48c45d97,0x06ce09b0,0x5836642f);
#endif
// 2015-03-18aRagexe, 2015-03-18aRagexeRE, 2015-03-18bRagexe, 2015-03-18bRagexeRE, 2015-03-18cRagexeRE
#if PACKETVER == 20150318
- packetKeys(0x1B3738E7,0x0AD4238F,0x7D252A1F);
+ packetKeys(0x1b3738e7,0x0ad4238f,0x7d252a1f);
#endif
// 2015-03-25aRagexe, 2015-03-25bRagexeRE, 2015-03-25cRagexeRE
#if PACKETVER == 20150325
- packetKeys(0x68F62B8C,0x337C3468,0x38FC0AC7);
+ packetKeys(0x68f62b8c,0x337c3468,0x38fc0ac7);
#endif
// 2015-04-01aRagexe, 2015-04-01bRagexeRE
#if PACKETVER == 20150401
- packetKeys(0x207F3A08,0x57E6160C,0x02A60382);
+ packetKeys(0x207f3a08,0x57e6160c,0x02a60382);
#endif
// 2015-04-08aRagexe, 2015-04-08aRagexeRE
#if PACKETVER == 20150408
- packetKeys(0x39812C9D,0x23DA516E,0x59A33DD2);
+ packetKeys(0x39812c9d,0x23da516e,0x59a33dd2);
#endif
// 2015-04-15aRagexe, 2015-04-15aRagexeRE
#if PACKETVER == 20150415
- packetKeys(0x7EC44F6A,0x7DE57139,0x60DA5436);
+ packetKeys(0x7ec44f6a,0x7de57139,0x60da5436);
#endif
// 2015-04-22aRagexe, 2015-04-22aRagexeRE
#if PACKETVER == 20150422
- packetKeys(0x10D22CE2,0x69E279E2,0x79E279E2);
+ packetKeys(0x10d22ce2,0x69e279e2,0x79e279e2);
#endif
// 2015-04-29aRagexe, 2015-04-29aRagexeRE
#if PACKETVER == 20150429
- packetKeys(0x2BF61A71,0x565D5DDF,0x0FB90019);
+ packetKeys(0x2bf61a71,0x565d5ddf,0x0fb90019);
#endif
// 2015-05-07bRagexe, 2015-05-07bRagexeRE, 2015-05-07cRagexe
#if PACKETVER == 20150507
- packetKeys(0x55B54373,0x58967821,0x67F41832);
+ packetKeys(0x55b54373,0x58967821,0x67f41832);
#endif
// 2015-05-13aRagexe, 2015-05-13aRagexeRE
#if PACKETVER == 20150513
- packetKeys(0x62C86D09,0x75944F17,0x112C133D);
+ packetKeys(0x62c86d09,0x75944f17,0x112c133d);
#endif
// 2015-05-20aRagexe, 2015-05-20aRagexeRE
#if PACKETVER == 20150520
- packetKeys(0x17430238,0x44DE585F,0x56A40616);
+ packetKeys(0x17430238,0x44de585f,0x56a40616);
#endif
// 2015-05-27aRagexe, 2015-05-27aRagexeRE
#if PACKETVER == 20150527
- packetKeys(0x35AE7BAE,0x3BAE3BAE,0x3BAE3BAE);
+ packetKeys(0x35ae7bae,0x3bae3bae,0x3bae3bae);
#endif
// 2015-06-03aRagexe, 2015-06-03bRagexeRE
#if PACKETVER == 20150603
- packetKeys(0x1DDD245D,0x309446E0,0x58E53F1F);
+ packetKeys(0x1ddd245d,0x309446e0,0x58e53f1f);
#endif
// 2015-06-10aRagexe, 2015-06-10aRagexeRE
#if PACKETVER == 20150610
- packetKeys(0x2FC406D3,0x7B3E32F5,0x02B80B47);
+ packetKeys(0x2fc406d3,0x7b3e32f5,0x02b80b47);
#endif
// 2015-06-17aRagexe, 2015-06-17aRagexeRE, 2015-06-18aRagexe, 2015-06-18aRagexeRE
#if PACKETVER == 20150617 || \
PACKETVER == 20150618
- packetKeys(0x250F7E09,0x25416076,0x029A780E);
+ packetKeys(0x250f7e09,0x25416076,0x029a780e);
#endif
// 2015-06-24aRagexe, 2015-06-24aRagexeRE
#if PACKETVER == 20150624
- packetKeys(0x440B0E24,0x1BEA7A4C,0x2C646784);
+ packetKeys(0x440b0e24,0x1bea7a4c,0x2c646784);
#endif
// 2015-07-01bRagexe, 2015-07-01bRagexeRE, 2015-07-02aRagexe
#if PACKETVER == 20150701 || \
PACKETVER == 20150702
- packetKeys(0x4DD55F9B,0x70C67B03,0x78C60DB6);
+ packetKeys(0x4dd55f9b,0x70c67b03,0x78c60db6);
#endif
// 2015-07-08bRagexeRE, 2015-07-08cRagexe, 2015-07-08cRagexeRE, 2015-07-08dRagexeRE
#if PACKETVER == 20150708
- packetKeys(0x451C5E19,0x5661750B,0x2F4644AC);
+ packetKeys(0x451c5e19,0x5661750b,0x2f4644ac);
#endif
// 2015-07-15aRagexe, 2015-07-15aRagexeRE
#if PACKETVER == 20150715
- packetKeys(0x1F805483,0x67745585,0x7FCE189C);
+ packetKeys(0x1f805483,0x67745585,0x7fce189c);
#endif
// 2015-07-22bRagexe, 2015-07-22bRagexeRE
#if PACKETVER == 20150722
- packetKeys(0x41FA53D4,0x2CF044E2,0x663A3F1D);
+ packetKeys(0x41fa53d4,0x2cf044e2,0x663a3f1d);
#endif
// 2015-07-29aRagexe, 2015-07-29aRagexeRE
#if PACKETVER == 20150729
- packetKeys(0x08EE40A9,0x206F3D7F,0x0AE37339);
+ packetKeys(0x08ee40a9,0x206f3d7f,0x0ae37339);
#endif
// 2015-08-05aRagexe, 2015-08-05dRagexeRE
#if PACKETVER == 20150805
- packetKeys(0x1C3F243F,0x243F243F,0x243F243F);
+ packetKeys(0x1c3f243f,0x243f243f,0x243f243f);
#endif
// 2015-08-12aRagexe, 2015-08-12aRagexeRE
#if PACKETVER == 20150812
- packetKeys(0x0B6F64A8,0x5BCC47EC,0x00EC08EC);
+ packetKeys(0x0b6f64a8,0x5bcc47ec,0x00ec08ec);
#endif
// 2015-08-19aRagexe, 2015-08-19aRagexeRE, 2015-08-19bRagexeRE
#if PACKETVER == 20150819
- packetKeys(0x1A2400E0,0x736E5686,0x10F315D5);
+ packetKeys(0x1a2400e0,0x736e5686,0x10f315d5);
#endif
// 2015-08-26aRagexe, 2015-08-26aRagexeRE, 2015-08-26bRagexe, 2015-08-26bRagexeRE
#if PACKETVER == 20150826
- packetKeys(0x77883C56,0x1829359F,0x0DE635B6);
+ packetKeys(0x77883c56,0x1829359f,0x0de635b6);
#endif
// 2015-09-02aRagexe, 2015-09-02aRagexeRE
#if PACKETVER == 20150902
- packetKeys(0x4EDB18C1,0x6B9355BA,0x38AA6239);
+ packetKeys(0x4edb18c1,0x6b9355ba,0x38aa6239);
#endif
// 2015-09-09aRagexe, 2015-09-09aRagexeRE
#if PACKETVER == 20150909
- packetKeys(0x19AB2BF0,0x04754299,0x48770736);
+ packetKeys(0x19ab2bf0,0x04754299,0x48770736);
#endif
// 2015-09-16aRagexe, 2015-09-16cRagexe, 2015-09-16cRagexeRE
#if PACKETVER == 20150916
- packetKeys(0x17F83A19,0x116944F4,0x1CC541E9);
+ packetKeys(0x17f83a19,0x116944f4,0x1cc541e9);
#endif
// 2015-09-23bRagexe, 2015-09-23bRagexeRE, 2015-09-23cRagexe, 2015-09-23dRagexe, 2015-09-23eRagexe, 2015-09-23eRagexeRE, 2015-09-23fRagexe, 2015-09-23fRagexeRE
#if PACKETVER == 20150923
- packetKeys(0x765742B9,0x22D61C2F,0x7DA94FB2);
+ packetKeys(0x765742b9,0x22d61c2f,0x7da94fb2);
#endif
// 2015-10-01aRagexe, 2015-10-01bRagexeRE
#if PACKETVER == 20151001
- packetKeys(0x5CFF4561,0x32514AD1,0x06D126D1);
+ packetKeys(0x5cff4561,0x32514ad1,0x06d126d1);
#endif
// 2015-10-07aRagexe, 2015-10-07aRagexeRE
#if PACKETVER == 20151007
- packetKeys(0x3C6447A8,0x032170D7,0x6490476C);
+ packetKeys(0x3c6447a8,0x032170d7,0x6490476c);
#endif
// 2015-10-14bRagexe, 2015-10-14bRagexeRE
#if PACKETVER == 20151014
- packetKeys(0x402728A8,0x5D0E309F,0x240018FD);
+ packetKeys(0x402728a8,0x5d0e309f,0x240018fd);
#endif
// 2015-10-21aRagexe, 2015-10-21aRagexeRE, 2015-10-22aRagexe, 2015-10-22aRagexeRE
#if PACKETVER == 20151021 || \
PACKETVER == 20151022
- packetKeys(0x0311104D,0x46C326D6,0x00E82720);
+ packetKeys(0x0311104d,0x46c326d6,0x00e82720);
#endif
// 2015-10-28bRagexeRE, 2015-10-28bRagexeRE_2, 2015-10-28cRagexe, 2015-10-28cRagexeRE, 2015-10-28dRagexe, 2015-10-28dRagexeRE, 2015-10-29aRagexe, 2015-10-29aRagexeRE
#if PACKETVER == 20151028 || \
PACKETVER == 20151029
- packetKeys(0x45B945B9,0x45B945B9,0x45B945B9);
+ packetKeys(0x45b945b9,0x45b945b9,0x45b945b9);
#endif
// 2015-11-04aRagexe, 2015-11-04aRagexeRE
#if PACKETVER == 20151104
- packetKeys(0x4C17382A,0x7ED174C9,0x29961E4F);
+ packetKeys(0x4c17382a,0x7ed174c9,0x29961e4f);
#endif
// 2015-11-11aRagexe, 2015-11-11aRagexeRE, 2015-11-11bRagexe
#if PACKETVER == 20151111
- packetKeys(0x46097C77,0x5F193871,0x29140A21);
+ packetKeys(0x46097c77,0x5f193871,0x29140a21);
#endif
// 2015-11-18aRagexe, 2015-11-18aRagexeRE
#if PACKETVER == 20151118
- packetKeys(0x734C3241,0x6E846F34,0x731C06D6);
+ packetKeys(0x734c3241,0x6e846f34,0x731c06d6);
#endif
// 2015-11-25bRagexe, 2015-11-25bRagexeRE, 2015-11-25cRagexeRE, 2015-11-25dRagexe, 2015-11-25dRagexeRE
#if PACKETVER == 20151125
- packetKeys(0x237446C0,0x5EFB343A,0x0EDF06C5);
+ packetKeys(0x237446c0,0x5efb343a,0x0edf06c5);
#endif
// 2015-12-02aRagexe, 2015-12-02bRagexeRE
#if PACKETVER == 20151202
- packetKeys(0x4EDE52DE,0x52DE52DE,0x52DE52DE);
+ packetKeys(0x4ede52de,0x52de52de,0x52de52de);
#endif
// 2015-12-09aRagexe, 2015-12-09aRagexeRE
#if PACKETVER == 20151209
- packetKeys(0x652C5898,0x7A351FB3,0x67EA2886);
+ packetKeys(0x652c5898,0x7a351fb3,0x67ea2886);
#endif
// 2015-12-16aRagexe, 2015-12-16aRagexeRE
#if PACKETVER == 20151216
- packetKeys(0x25DD643D,0x61AC39DE,0x77A8206D);
+ packetKeys(0x25dd643d,0x61ac39de,0x77a8206d);
#endif
// 2015-12-23bRagexe, 2015-12-23bRagexeRE
#if PACKETVER == 20151223
- packetKeys(0x347D68D0,0x2C705320,0x7B4A199D);
+ packetKeys(0x347d68d0,0x2c705320,0x7b4a199d);
#endif
// 2015-12-30aRagexe, 2015-12-30aRagexeRE
#if PACKETVER == 20151230
- packetKeys(0x54C51241,0x33883499,0x3CDA35F0);
+ packetKeys(0x54c51241,0x33883499,0x3cda35f0);
#endif
// 2016-01-06aRagexe, 2016-01-06aRagexeRE
#if PACKETVER == 20160106
- packetKeys(0x40520265,0x33FE26FC,0x7136294F);
+ packetKeys(0x40520265,0x33fe26fc,0x7136294f);
#endif
// 2016-01-13aRagexe, 2016-01-13aRagexeRE, 2016-01-13bRagexe, 2016-01-13bRagexeRE, 2016-01-13bRagexeRE_2, 2016-01-13bRagexe_2, 2016-01-13cRagexeRE
#if PACKETVER == 20160113
- packetKeys(0x18005C4B,0x19A94A72,0x73F678EC);
+ packetKeys(0x18005c4b,0x19a94a72,0x73f678ec);
#endif
// 2016-01-20aRagexe, 2016-01-20aRagexeRE
@@ -1454,549 +1521,549 @@
// 2016-01-27aRagexeRE, 2016-01-27aRagexeRE_2, 2016-01-27bRagexeRE, 2016-01-27cRagexe, 2016-01-27dRagexe
#if PACKETVER == 20160127
- packetKeys(0x6B1E7146,0x612C47E6,0x274E56EE);
+ packetKeys(0x6b1e7146,0x612c47e6,0x274e56ee);
#endif
// 2016-02-03aRagexe, 2016-02-03aRagexeRE
#if PACKETVER == 20160203
- packetKeys(0x3E1411AF,0x6C744497,0x7CFA1BDE);
+ packetKeys(0x3e1411af,0x6c744497,0x7cfa1bde);
#endif
// 2016-02-11aRagexe, 2016-02-11aRagexeRE
#if PACKETVER == 20160211
- packetKeys(0x613813EA,0x05251DAB,0x1FD35E33);
+ packetKeys(0x613813ea,0x05251dab,0x1fd35e33);
#endif
// 2016-02-17aRagexe, 2016-02-17aRagexeRE, 2016-02-17bRagexeRE, 2016-02-17bRagexeRE_2, 2016-02-17cRagexeRE
#if PACKETVER == 20160217
- packetKeys(0x25895A8E,0x09421C19,0x763A2D7A);
+ packetKeys(0x25895a8e,0x09421c19,0x763a2d7a);
#endif
// 2016-02-24aRagexe, 2016-02-24aRagexeRE, 2016-02-24bRagexeRE
#if PACKETVER == 20160224
- packetKeys(0x7088019A,0x13471F02,0x42356A7D);
+ packetKeys(0x7088019a,0x13471f02,0x42356a7d);
#endif
// 2016-03-02bRagexe, 2016-03-02bRagexeRE
#if PACKETVER == 20160302
- packetKeys(0x7B4441B9,0x5BBC63AF,0x45DA0E71);
+ packetKeys(0x7b4441b9,0x5bbc63af,0x45da0e71);
#endif
// 2016-03-09aRagexeRE, 2016-03-09cRagexe
#if PACKETVER == 20160309
- packetKeys(0x21587520,0x353A7706,0x1B722B25);
+ packetKeys(0x21587520,0x353a7706,0x1b722b25);
#endif
// 2016-03-16aRagexe, 2016-03-16aRagexeRE, 2016-03-18aRagexe
#if PACKETVER == 20160316 || \
PACKETVER == 20160318
- packetKeys(0x62363E36,0x3E363E36,0x3E363E36);
+ packetKeys(0x62363e36,0x3e363e36,0x3e363e36);
#endif
// 2016-03-23aRagexe, 2016-03-23aRagexeRE, 2016-03-23bRagexe, 2016-03-23bRagexeRE
#if PACKETVER == 20160323
- packetKeys(0x73E35A83,0x62142FA8,0x12BA36BD);
+ packetKeys(0x73e35a83,0x62142fa8,0x12ba36bd);
#endif
// 2016-03-30aRagexe, 2016-03-30aRagexeRE, 2016-03-30bRagexe
#if PACKETVER == 20160330
- packetKeys(0x02050940,0x545336FF,0x7E7D4902);
+ packetKeys(0x02050940,0x545336ff,0x7e7d4902);
#endif
// 2016-04-06aRagexe, 2016-04-06aRagexeRE, 2016-04-06bRagexe
#if PACKETVER == 20160406
- packetKeys(0x568611EA,0x32457D8D,0x2B020477);
+ packetKeys(0x568611ea,0x32457d8d,0x2b020477);
#endif
// 2016-04-14aRagexe, 2016-04-14aRagexeRE, 2016-04-14bRagexe, 2016-04-14bRagexeRE, 2016-04-14bRagexe_2, 2016-04-14cRagexe
#if PACKETVER == 20160414
- packetKeys(0x31BD479A,0x40C61398,0x397C1A80);
+ packetKeys(0x31bd479a,0x40c61398,0x397c1a80);
#endif
// 2016-04-20aRagexeRE, 2016-04-20cRagexe
#if PACKETVER == 20160420
- packetKeys(0x67D2163A,0x3068215B,0x4835474D);
+ packetKeys(0x67d2163a,0x3068215b,0x4835474d);
#endif
// 2016-04-27aRagexe, 2016-04-27aRagexeRE
#if PACKETVER == 20160427
- packetKeys(0x12DC378E,0x4E3E7EBE,0x0ABE2ABE);
+ packetKeys(0x12dc378e,0x4e3e7ebe,0x0abe2abe);
#endif
// 2016-05-04aRagexe, 2016-05-04aRagexeRE
#if PACKETVER == 20160504
- packetKeys(0x09E0544C,0x0231251D,0x2F4E195F);
+ packetKeys(0x09e0544c,0x0231251d,0x2f4e195f);
#endif
// 2016-05-11aRagexe, 2016-05-11aRagexeRE, 2016-05-11bRagexeRE
#if PACKETVER == 20160511
- packetKeys(0x3C666FE2,0x27E84E3E,0x53E11BA5);
+ packetKeys(0x3c666fe2,0x27e84e3e,0x53e11ba5);
#endif
// 2016-05-18aRagexe, 2016-05-18aRagexeRE
#if PACKETVER == 20160518
- packetKeys(0x57DB7CA1,0x1FEA1629,0x26DD244D);
+ packetKeys(0x57db7ca1,0x1fea1629,0x26dd244d);
#endif
// 2016-05-25aRagexe, 2016-05-25aRagexeRE, 2016-05-26aRagexe
#if PACKETVER == 20160525 || \
PACKETVER == 20160526
- packetKeys(0x485C45B6,0x47DC6192,0x76B34A36);
+ packetKeys(0x485c45b6,0x47dc6192,0x76b34a36);
#endif
// 2016-06-01aRagexe, 2016-06-01aRagexeRE
#if PACKETVER == 20160601
- packetKeys(0x3DAD32C4,0x59F001BE,0x73F65E56);
+ packetKeys(0x3dad32c4,0x59f001be,0x73f65e56);
#endif
// 2016-06-08aRagexe, 2016-06-08aRagexeRE, 2016-06-08bRagexe, 2016-06-08bRagexeRE, 2016-06-09aRagexe
#if PACKETVER == 20160608 || \
PACKETVER == 20160609
- packetKeys(0x11D74609,0x77C43E8A,0x44290F53);
+ packetKeys(0x11d74609,0x77c43e8a,0x44290f53);
#endif
// 2016-06-15aRagexe, 2016-06-15aRagexeRE
#if PACKETVER == 20160615
- packetKeys(0x062C5C26,0x6CF47E82,0x4DD53480);
+ packetKeys(0x062c5c26,0x6cf47e82,0x4dd53480);
#endif
// 2016-06-22aRagexe, 2016-06-22aRagexeRE
#if PACKETVER == 20160622
- packetKeys(0x426548AB,0x5C0F5DD4,0x03022710);
+ packetKeys(0x426548ab,0x5c0f5dd4,0x03022710);
#endif
// 2016-06-29aRagexe, 2016-06-29aRagexeRE, 2016-06-30aRagexe, 2016-06-30aRagexeRE
#if PACKETVER == 20160629 || \
PACKETVER == 20160630
- packetKeys(0x0DF31CCC,0x54281606,0x5C4C6855);
+ packetKeys(0x0df31ccc,0x54281606,0x5c4c6855);
#endif
// 2016-07-06bRagexe, 2016-07-06cRagexeRE
#if PACKETVER == 20160706
- packetKeys(0x33A766D0,0x743F04F8,0x0FA0276C);
+ packetKeys(0x33a766d0,0x743f04f8,0x0fa0276c);
#endif
// 2016-07-13aRagexe, 2016-07-13aRagexeRE, 2016-07-13bRagexe, 2016-07-13bRagexeRE, 2016-07-13cRagexe, 2016-07-13dRagexe
#if PACKETVER == 20160713
- packetKeys(0x714F2495,0x7DDC6F32,0x3FD8533D);
+ packetKeys(0x714f2495,0x7ddc6f32,0x3fd8533d);
#endif
// 2016-07-20aRagexe, 2016-07-20aRagexeRE, 2016-07-20bRagexe, 2016-07-20bRagexeRE
#if PACKETVER == 20160720
- packetKeys(0x4F8A19C0,0x2D8E085C,0x37BB67D6);
+ packetKeys(0x4f8a19c0,0x2d8e085c,0x37bb67d6);
#endif
// 2016-07-27aRagexe, 2016-07-27aRagexeRE, 2016-07-27bRagexe, 2016-07-27bRagexeRE
#if PACKETVER == 20160727
- packetKeys(0x3C6952AB,0x26E4077F,0x37E25DF7);
+ packetKeys(0x3c6952ab,0x26e4077f,0x37e25df7);
#endif
// 2016-08-03bRagexe, 2016-08-03bRagexeRE
#if PACKETVER == 20160803
- packetKeys(0x67F438C2,0x512A4EB7,0x2D353182);
+ packetKeys(0x67f438c2,0x512a4eb7,0x2d353182);
#endif
// 2016-08-10aRagexe, 2016-08-10aRagexeRE
#if PACKETVER == 20160810
- packetKeys(0x2F252886,0x242234A2,0x48BC5032);
+ packetKeys(0x2f252886,0x242234a2,0x48bc5032);
#endif
// 2016-08-17aRagexe, 2016-08-17aRagexeRE
#if PACKETVER == 20160817
- packetKeys(0x675E6900,0x3F8E1D16,0x58D650E5);
+ packetKeys(0x675e6900,0x3f8e1d16,0x58d650e5);
#endif
// 2016-08-24aRagexe, 2016-08-24aRagexeRE
#if PACKETVER == 20160824
- packetKeys(0x2FA92FA9,0x2FA92FA9,0x2FA92FA9);
+ packetKeys(0x2fa92fa9,0x2fa92fa9,0x2fa92fa9);
#endif
// 2016-08-31aRagexe, 2016-08-31aRagexeRE, 2016-08-31bRagexe, 2016-08-31bRagexeRE
#if PACKETVER == 20160831
- packetKeys(0x564E13B0,0x7F680549,0x382D273B);
+ packetKeys(0x564e13b0,0x7f680549,0x382d273b);
#endif
// 2016-09-07aRagexe, 2016-09-07aRagexeRE
#if PACKETVER == 20160907
- packetKeys(0x32E5237D,0x57BD4DBD,0x5DBD5DBD);
+ packetKeys(0x32e5237d,0x57bd4dbd,0x5dbd5dbd);
#endif
// 2016-09-13aRagexe, 2016-09-13aRagexeRE
#if PACKETVER == 20160913
- packetKeys(0x7C79748F,0x1AA03B1D,0x6EAC4747);
+ packetKeys(0x7c79748f,0x1aa03b1d,0x6eac4747);
#endif
// 2016-09-21aRagexe, 2016-09-21bRagexeRE
#if PACKETVER == 20160921
- packetKeys(0x11CD15CD,0x15CD15CD,0x15CD15CD);
+ packetKeys(0x11cd15cd,0x15cd15cd,0x15cd15cd);
#endif
// 2016-09-28cRagexe, 2016-09-28cRagexeRE, 2016-09-28dRagexeRE
#if PACKETVER == 20160928
- packetKeys(0x2F8C67F5,0x22D42C38,0x57513774);
+ packetKeys(0x2f8c67f5,0x22d42c38,0x57513774);
#endif
// 2016-10-05aRagexe, 2016-10-05aRagexeRE
#if PACKETVER == 20161005
- packetKeys(0x5BAE21F8,0x021E2FFC,0x3BEB7C31);
+ packetKeys(0x5bae21f8,0x021e2ffc,0x3beb7c31);
#endif
// 2016-10-12aRagexe, 2016-10-12aRagexeRE
#if PACKETVER == 20161012
- packetKeys(0x5E2311F2,0x14FD012C,0x76EB64F6);
+ packetKeys(0x5e2311f2,0x14fd012c,0x76eb64f6);
#endif
// 2016-10-19aRagexe, 2016-10-19aRagexeRE
#if PACKETVER == 20161019
- packetKeys(0x34882F11,0x7C870E70,0x7E61350D);
+ packetKeys(0x34882f11,0x7c870e70,0x7e61350d);
#endif
// 2016-10-26bRagexe, 2016-10-26bRagexeRE, 2016-10-26cRagexe, 2016-10-26cRagexeRE
#if PACKETVER == 20161026
- packetKeys(0x2CB86AE6,0x7D12660E,0x1B004DEB);
+ packetKeys(0x2cb86ae6,0x7d12660e,0x1b004deb);
#endif
// 2016-11-02aRagexe, 2016-11-02aRagexeRE, 2016-11-03aRagexe, 2016-11-03aRagexeRE
#if PACKETVER == 20161102 || \
PACKETVER == 20161103
- packetKeys(0x76725C17,0x72FE4EC1,0x07A91BFD);
+ packetKeys(0x76725c17,0x72fe4ec1,0x07a91bfd);
#endif
// 2016-11-09aRagexe, 2016-11-09aRagexeRE, 2016-11-09bRagexe, 2016-11-09bRagexeRE, 2016-11-09cRagexeRE, 2016-11-09dRagexeRE
#if PACKETVER == 20161109
- packetKeys(0x0A5277C0,0x2DB17506,0x0E8F26DA);
+ packetKeys(0x0a5277c0,0x2db17506,0x0e8f26da);
#endif
// 2016-11-16aRagexe, 2016-11-16bRagexeRE, 2016-11-16cRagexeRE
#if PACKETVER == 20161116
- packetKeys(0x780C5C3F,0x15E92272,0x2BA770C5);
+ packetKeys(0x780c5c3f,0x15e92272,0x2ba770c5);
#endif
// 2016-11-23aRagexe, 2016-11-23aRagexeRE
#if PACKETVER == 20161123
- packetKeys(0x66FF559F,0x00D3535B,0x236246F7);
+ packetKeys(0x66ff559f,0x00d3535b,0x236246f7);
#endif
// 2016-11-30aRagexe, 2016-11-30aRagexeRE, 2016-11-30bRagexe, 2016-11-30bRagexeRE
#if PACKETVER == 20161130
- packetKeys(0x2ED80296,0x0D837373,0x20266F9A);
+ packetKeys(0x2ed80296,0x0d837373,0x20266f9a);
#endif
// 2016-12-07cRagexe, 2016-12-07cRagexeRE, 2016-12-07dRagexeRE, 2016-12-07eRagexe, 2016-12-07eRagexeRE
#if PACKETVER == 20161207
- packetKeys(0x52D267AA,0x4FE42156,0x1292153E);
+ packetKeys(0x52d267aa,0x4fe42156,0x1292153e);
#endif
// 2016-12-14bRagexe, 2016-12-14bRagexeRE, 2016-12-14cRagexe, 2016-12-14cRagexeRE
#if PACKETVER == 20161214
- packetKeys(0x4DDE217B,0x07863AE0,0x5B591656);
+ packetKeys(0x4dde217b,0x07863ae0,0x5b591656);
#endif
// 2016-12-21aRagexe, 2016-12-21aRagexeRE, 2016-12-21bRagexe, 2016-12-21bRagexeRE, 2016-12-21cRagexeRE, 2016-12-21dRagexeRE
#if PACKETVER == 20161221
- packetKeys(0x69CB4F56,0x793C165E,0x673A2354);
+ packetKeys(0x69cb4f56,0x793c165e,0x673a2354);
#endif
// 2016-12-28aRagexe, 2016-12-28aRagexeRE
#if PACKETVER == 20161228
- packetKeys(0x09366971,0x005672F1,0x6F3712AE);
+ packetKeys(0x09366971,0x005672f1,0x6f3712ae);
#endif
// 2017-01-04aRagexe, 2017-01-04bRagexeRE
#if PACKETVER == 20170104
- packetKeys(0x44416BC3,0x6C8D1817,0x072D75D5);
+ packetKeys(0x44416bc3,0x6c8d1817,0x072d75d5);
#endif
// 2017-01-11aRagexe, 2017-01-11aRagexeRE
#if PACKETVER == 20170111
- packetKeys(0x19B637F9,0x0E9C378A,0x41673186);
+ packetKeys(0x19b637f9,0x0e9c378a,0x41673186);
#endif
// 2017-01-18aRagexe, 2017-01-18aRagexeRE
#if PACKETVER == 20170118
- packetKeys(0x456B36EB,0x15EB34B0,0x18C42E43);
+ packetKeys(0x456b36eb,0x15eb34b0,0x18c42e43);
#endif
// 2017-01-25aRagexe, 2017-01-25aRagexeRE
#if PACKETVER == 20170125
- packetKeys(0x066E04FE,0x3004224A,0x04FF0458);
+ packetKeys(0x066e04fe,0x3004224a,0x04ff0458);
#endif
// 2017-02-01aRagexe, 2017-02-01aRagexeRE
#if PACKETVER == 20170201
- packetKeys(0x2011228E,0x00453005,0x628E7F0A);
+ packetKeys(0x2011228e,0x00453005,0x628e7f0a);
#endif
// 2017-02-08aRagexeRE, 2017-02-08bRagexe, 2017-02-08bRagexeRE
#if PACKETVER == 20170208
- packetKeys(0x6A764E5F,0x0609570D,0x28AE07FA);
+ packetKeys(0x6a764e5f,0x0609570d,0x28ae07fa);
#endif
// 2017-02-15aRagexe, 2017-02-15aRagexeRE
#if PACKETVER == 20170215
- packetKeys(0x50C01315,0x51012A42,0x679E16C3);
+ packetKeys(0x50c01315,0x51012a42,0x679e16c3);
#endif
// 2017-02-22aRagexe, 2017-02-22aRagexeRE
#if PACKETVER == 20170222
- packetKeys(0x5A242F2F,0x6C556187,0x73C022CB);
+ packetKeys(0x5a242f2f,0x6c556187,0x73c022cb);
#endif
// 2017-02-28aRagexe, 2017-02-28aRagexeRE, 2017-02-28bRagexe
#if PACKETVER == 20170228
- packetKeys(0x771D4F2B,0x20EF1F4C,0x0D5135C8);
+ packetKeys(0x771d4f2b,0x20ef1f4c,0x0d5135c8);
#endif
// 2017-03-08aRagexe, 2017-03-08bRagexeRE
#if PACKETVER == 20170308
- packetKeys(0x653470A9,0x6B316A71,0x5C712C71);
+ packetKeys(0x653470a9,0x6b316a71,0x5c712c71);
#endif
// 2017-03-15cRagexe, 2017-03-15cRagexeRE
#if PACKETVER == 20170315
- packetKeys(0x399A0856,0x56642A94,0x7F77157D);
+ packetKeys(0x399a0856,0x56642a94,0x7f77157d);
#endif
// 2017-03-22aRagexe, 2017-03-22aRagexeRE, 2017-03-22bRagexe, 2017-03-22bRagexeRE
#if PACKETVER == 20170322
- packetKeys(0x2050167B,0x01731233,0x40337033);
+ packetKeys(0x2050167b,0x01731233,0x40337033);
#endif
// 2017-03-29bRagexe, 2017-03-29cRagexe, 2017-03-29cRagexeRE, 2017-03-29dRagexeRE
#if PACKETVER == 20170329
- packetKeys(0x18B31A80,0x1B0B1D56,0x16857D6A);
+ packetKeys(0x18b31a80,0x1b0b1d56,0x16857d6a);
#endif
// 2017-04-05bRagexe, 2017-04-05bRagexeRE, 2017-04-05cRagexe, 2017-04-05cRagexeRE
#if PACKETVER == 20170405
- packetKeys(0x1FDE7DAC,0x2F9F5B63,0x3F2062AF);
+ packetKeys(0x1fde7dac,0x2f9f5b63,0x3f2062af);
#endif
// 2017-04-12aRagexe, 2017-04-12aRagexeRE
#if PACKETVER == 20170412
- packetKeys(0x39223393,0x5C847779,0x10217985);
+ packetKeys(0x39223393,0x5c847779,0x10217985);
#endif
// 2017-04-19aRagexe, 2017-04-19bRagexeRE
#if PACKETVER == 20170419
- packetKeys(0x1F8F4B3F,0x2E481F03,0x39ED4178);
+ packetKeys(0x1f8f4b3f,0x2e481f03,0x39ed4178);
#endif
// 2017-04-26bRagexe, 2017-04-26dRagexeRE
#if PACKETVER == 20170426
- packetKeys(0x167642A7,0x1DEC3D26,0x6D046D4C);
+ packetKeys(0x167642a7,0x1dec3d26,0x6d046d4c);
#endif
// 2017-05-02aRagexe, 2017-05-02bRagexe, 2017-05-02dRagexeRE
#if PACKETVER == 20170502
- packetKeys(0x05224194,0x466D4204,0x31F02EE0);
+ packetKeys(0x05224194,0x466d4204,0x31f02ee0);
#endif
// 2017-05-17aRagexe, 2017-05-17aRagexeRE, 2017-05-17bRagexeRE
#if PACKETVER == 20170517
- packetKeys(0x2CC4749A,0x1FA954DC,0x72276857);
+ packetKeys(0x2cc4749a,0x1fa954dc,0x72276857);
#endif
// 2017-05-24aRagexe, 2017-05-24aRagexeRE, 2017-05-24bRagexe
#if PACKETVER == 20170524
- packetKeys(0x0B4E03A6,0x2B93427C,0x583D4477);
+ packetKeys(0x0b4e03a6,0x2b93427c,0x583d4477);
#endif
// 2017-05-31aRagexe, 2017-05-31aRagexeRE
#if PACKETVER == 20170531
- packetKeys(0x03FA5A97,0x20B802D5,0x339F1977);
+ packetKeys(0x03fa5a97,0x20b802d5,0x339f1977);
#endif
// 2017-06-07bRagexeRE, 2017-06-07cRagexe, 2017-06-07cRagexeRE
#if PACKETVER == 20170607
- packetKeys(0x50564ACD,0x79CA4E15,0x405F4894);
+ packetKeys(0x50564acd,0x79ca4e15,0x405f4894);
#endif
// 2017-06-14bRagexe, 2017-06-14bRagexeRE
#if PACKETVER == 20170614
- packetKeys(0x5ED10A48,0x667F4301,0x2E5D761F);
+ packetKeys(0x5ed10a48,0x667f4301,0x2e5d761f);
#endif
// 2017-06-21aRagexeRE, 2017-06-21bRagexe
#if PACKETVER == 20170621
- packetKeys(0x155F34EC,0x2D943FA9,0x3D9170EB);
+ packetKeys(0x155f34ec,0x2d943fa9,0x3d9170eb);
#endif
// 2017-06-28bRagexe, 2017-06-28bRagexeRE
#if PACKETVER == 20170628
- packetKeys(0x04691C86,0x43C210E2,0x2FE277E2);
+ packetKeys(0x04691c86,0x43c210e2,0x2fe277e2);
#endif
// 2017-07-05aRagexe, 2017-07-05aRagexeRE
#if PACKETVER == 20170705
- packetKeys(0x7EB000AE,0x02FB1DBC,0x5CB131E6);
+ packetKeys(0x7eb000ae,0x02fb1dbc,0x5cb131e6);
#endif
// 2017-07-12bRagexe, 2017-07-12bRagexeRE
#if PACKETVER == 20170712
- packetKeys(0x2C3C202C,0x3F2C2F2C,0x2F2C2F2C);
+ packetKeys(0x2c3c202c,0x3f2c2f2c,0x2f2c2f2c);
#endif
// 2017-07-19aRagexe, 2017-07-19aRagexeRE
#if PACKETVER == 20170719
- packetKeys(0x46465C88,0x10116F66,0x200866F9);
+ packetKeys(0x46465c88,0x10116f66,0x200866f9);
#endif
// 2017-07-26aRagexe, 2017-07-26cRagexeRE
#if PACKETVER == 20170726
- packetKeys(0x102F23DB,0x7E767751,0x3BC172EF);
+ packetKeys(0x102f23db,0x7e767751,0x3bc172ef);
#endif
// 2017-08-01aRagexe, 2017-08-01aRagexeRE, 2017-08-01bRagexe
#if PACKETVER == 20170801
- packetKeys(0x26B52A7F,0x5377619D,0x4F580AC4);
+ packetKeys(0x26b52a7f,0x5377619d,0x4f580ac4);
#endif
// 2017-08-09cRagexe, 2017-08-09cRagexeRE
#if PACKETVER == 20170809
- packetKeys(0x452156CB,0x71442624,0x2EE66D1C);
+ packetKeys(0x452156cb,0x71442624,0x2ee66d1c);
#endif
// 2017-08-16cRagexe, 2017-08-16cRagexeRE, 2017-08-16dRagexe, 2017-08-16dRagexeRE
#if PACKETVER == 20170816
- packetKeys(0x78914673,0x3F8B7634,0x55B814BC);
+ packetKeys(0x78914673,0x3f8b7634,0x55b814bc);
#endif
// 2017-08-23aRagexe, 2017-08-23aRagexeRE
#if PACKETVER == 20170823
- packetKeys(0x22677205,0x393D1002,0x58DC6BB4);
+ packetKeys(0x22677205,0x393d1002,0x58dc6bb4);
#endif
// 2017-08-30aRagexe, 2017-08-30aRagexeRE, 2017-08-30bRagexe, 2017-08-30bRagexeRE
#if PACKETVER == 20170830
- packetKeys(0x1D49592B,0x00970C17,0x1E640103);
+ packetKeys(0x1d49592b,0x00970c17,0x1e640103);
#endif
// 2017-09-06cRagexe, 2017-09-06cRagexeRE
#if PACKETVER == 20170906
- packetKeys(0x7DEF7677,0x351F36E6,0x52303485);
+ packetKeys(0x7def7677,0x351f36e6,0x52303485);
#endif
// 2017-09-13bRagexeRE, 2017-09-13cRagexe
#if PACKETVER == 20170913
- packetKeys(0x7A645935,0x1DA05062,0x5A7A4C43);
+ packetKeys(0x7a645935,0x1da05062,0x5a7a4c43);
#endif
// 2017-09-20aRagexe, 2017-09-20bRagexeRE
#if PACKETVER == 20170920
- packetKeys(0x53024DA5,0x04EC212D,0x0BF87CD4);
+ packetKeys(0x53024da5,0x04ec212d,0x0bf87cd4);
#endif
// 2017-09-27bRagexe, 2017-09-27bRagexeRE, 2017-09-27cRagexe, 2017-09-27dRagexe, 2017-09-27dRagexeRE
#if PACKETVER == 20170927
- packetKeys(0x15624100,0x0CE1463E,0x0E5D6534);
+ packetKeys(0x15624100,0x0ce1463e,0x0e5d6534);
#endif
// 2017-10-02cRagexe, 2017-10-02cRagexeRE
#if PACKETVER == 20171002
- packetKeys(0x15E1716C,0x4E765B63,0x357D2370);
+ packetKeys(0x15e1716c,0x4e765b63,0x357d2370);
#endif
// 2017-10-11aRagexe, 2017-10-11aRagexeRE, 2017-10-11bRagexe, 2017-10-11bRagexeRE
#if PACKETVER == 20171011
- packetKeys(0x4F121B3E,0x12670E17,0x19896C11);
+ packetKeys(0x4f121b3e,0x12670e17,0x19896c11);
#endif
// 2017-10-18aRagexe, 2017-10-18aRagexeRE
#if PACKETVER == 20171018
- packetKeys(0x2CAA109C,0x158C1EC2,0x7A5E58F3);
+ packetKeys(0x2caa109c,0x158c1ec2,0x7a5e58f3);
#endif
// 2017-10-25bRagexe, 2017-10-25bRagexeRE, 2017-10-25cRagexe, 2017-10-25cRagexeRE, 2017-10-25dRagexe, 2017-10-25dRagexeRE, 2017-10-25eRagexe, 2017-10-25eRagexeRE
#if PACKETVER == 20171025
- packetKeys(0x165C565C,0x565C565C,0x565C565C);
+ packetKeys(0x165c565c,0x565c565c,0x565c565c);
#endif
// 2017-11-01aRagexe, 2017-11-01bRagexeRE
#if PACKETVER == 20171101
- packetKeys(0x7056317F,0x7EEE0589,0x02672373);
+ packetKeys(0x7056317f,0x7eee0589,0x02672373);
#endif
// 2017-11-08aRagexe, 2017-11-08bRagexeRE
#if PACKETVER == 20171108
- packetKeys(0x03695685,0x7FAC12CE,0x182F7A7B);
+ packetKeys(0x03695685,0x7fac12ce,0x182f7a7b);
#endif
// 2017-11-15aRagexe, 2017-11-15aRagexeRE
#if PACKETVER == 20171115
- packetKeys(0x23B97A3B,0x34610993,0x2892070E);
+ packetKeys(0x23b97a3b,0x34610993,0x2892070e);
#endif
// 2017-11-22aRagexe, 2017-11-22bRagexeRE
#if PACKETVER == 20171122
- packetKeys(0x03221B0E,0x73AB7A5F,0x0DD80FD4);
+ packetKeys(0x03221b0e,0x73ab7a5f,0x0dd80fd4);
#endif
// 2017-11-29aRagexe, 2017-11-29aRagexeRE
#if PACKETVER == 20171129
- packetKeys(0x581B77A7,0x62F74D7A,0x4F102173);
+ packetKeys(0x581b77a7,0x62f74d7a,0x4f102173);
#endif
// 2017-12-06aRagexeRE, 2017-12-06bRagexe, 2017-12-06cRagexe
#if PACKETVER == 20171206
- packetKeys(0x39D54BD3,0x577A0C21,0x4C1C316E);
+ packetKeys(0x39d54bd3,0x577a0c21,0x4c1c316e);
#endif
// 2017-12-13bRagexe, 2017-12-13bRagexeRE
#if PACKETVER == 20171213
- packetKeys(0x44E41107,0x3B126921,0x00E06AAC);
+ packetKeys(0x44e41107,0x3b126921,0x00e06aac);
#endif
// 2017-12-20aRagexe, 2017-12-20aRagexeRE
#if PACKETVER == 20171220
- packetKeys(0x6EFE009A,0x440B7BFA,0x052339C8);
+ packetKeys(0x6efe009a,0x440b7bfa,0x052339c8);
#endif
// 2017-12-27aRagexe, 2017-12-27aRagexeRE
#if PACKETVER == 20171227
- packetKeys(0x257A2F6E,0x51140EEE,0x00FA4452);
+ packetKeys(0x257a2f6e,0x51140eee,0x00fa4452);
#endif
// 2018-01-03aRagexe, 2018-01-03aRagexeRE, 2018-01-03bRagexe, 2018-01-03bRagexeRE
#if PACKETVER == 20180103
- packetKeys(0x348F4BD7,0x7A425A54,0x628F589A);
+ packetKeys(0x348f4bd7,0x7a425a54,0x628f589a);
#endif
// 2018-01-17aRagexe, 2018-01-17aRagexeRE
#if PACKETVER == 20180117
- packetKeys(0x21F477F4,0x37F437F4,0x37F437F4);
+ packetKeys(0x21f477f4,0x37f437f4,0x37f437f4);
#endif
// 2018-01-24bRagexe, 2018-01-24bRagexeRE, 2018-01-31Ragexe
#if PACKETVER == 20180124 || \
PACKETVER == 20180131
- packetKeys(0x7EAA1CE0,0x415D1CFD,0x4C8F19FA);
+ packetKeys(0x7eaa1ce0,0x415d1cfd,0x4c8f19fa);
#endif
// 2018-02-07bRagexe, 2018-02-07bRagexeRE, 2018-02-07cRagexe
#if PACKETVER == 20180207
- packetKeys(0x45AA1B44,0x20E716B7,0x5388105C);
+ packetKeys(0x45aa1b44,0x20e716b7,0x5388105c);
#endif
// 2018-02-13aRagexe, 2018-02-13aRagexeRE, 2018-02-13bRagexe
#if PACKETVER == 20180213
- packetKeys(0x189D69B2,0x43B85EAD,0x2B7A687E);
+ packetKeys(0x189d69b2,0x43b85ead,0x2b7a687e);
#endif
// 2018-02-21aRagexeRE, 2018-02-21bRagexe, 2018-02-21bRagexeRE
#if PACKETVER == 20180221
- packetKeys(0x6E2F6233,0x193B0A66,0x0D1D2CA5);
+ packetKeys(0x6e2f6233,0x193b0a66,0x0d1d2ca5);
#endif
// 2018-03-07bRagexe, 2018-03-07bRagexeRE, 2018-03-09aRagexe
#if PACKETVER == 20180307 || \
PACKETVER == 20180309
- packetKeys(0x47DA10EB,0x4B922CCF,0x765C5055);
+ packetKeys(0x47da10eb,0x4b922ccf,0x765c5055);
#endif
// 2018-03-14nRagexe
#if PACKETVER == 20180314
- packetKeys(0x2FF07149,0x00596EA3,0x2B853026);
+ packetKeys(0x2ff07149,0x00596ea3,0x2b853026);
#endif
diff --git a/src/map/packets_keys_zero.h b/src/map/packets_keys_zero.h
index 4d1267fbb..5794ca309 100644
--- a/src/map/packets_keys_zero.h
+++ b/src/map/packets_keys_zero.h
@@ -29,7 +29,7 @@
/* This file is autogenerated, please do not commit manual changes */
-// 2017-10-18aRagexe_zero, 2017-10-19aRagexe_zero, 2017-10-23aRagexe_zero, 2017-10-23bRagexe_zero, 2017-10-23cRagexe_zero, 2017-10-24aRagexe_2_zero, 2017-10-24aRagexe_zero, 2017-10-25bRagexe_zero, 2017-10-27aRagexe_zero, 2017-10-27bRagexe_zero, 2017-10-30aRagexe_zero, 2017-10-31aRagexe_zero, 2017-11-09aRagexe_zero, 2017-11-13aRagexe_zero, 2017-11-13bRagexe_zero, 2018-03-15aRagexe_zero, 2018-03-21aRagexe_zero, 2018-03-21bRagexe_zero, 2018-03-28_1aRagexe_zero, 2018-03-28cRagexe_zero, 2018-04-11aRagexe_zero, 2018-04-25_3aRagexe_zero, 2018-05-09_3aRagexe_zero, 2018-05-23aRagexe_zero, 2018-06-05bRagexe_zero, 2018-06-05cRagexe_zero, 2018-06-27aRagexe_zero, 2018-07-03aRagexe_zero, 2018-07-11_2aRagexe_zero, 2018-07-25_2aRagexe_zero
+// 2017-10-18aRagexe_zero, 2017-10-19aRagexe_zero, 2017-10-23aRagexe_zero, 2017-10-23bRagexe_zero, 2017-10-23cRagexe_zero, 2017-10-24aRagexe_2_zero, 2017-10-24aRagexe_zero, 2017-10-25bRagexe_zero, 2017-10-27aRagexe_zero, 2017-10-27bRagexe_zero, 2017-10-30aRagexe_zero, 2017-10-31aRagexe_zero, 2017-11-09aRagexe_zero, 2017-11-13aRagexe_zero, 2017-11-13bRagexe_zero, 2018-03-15aRagexe_zero, 2018-03-21aRagexe_zero, 2018-03-21bRagexe_zero, 2018-03-28_1aRagexe_zero, 2018-03-28cRagexe_zero, 2018-04-11aRagexe_zero, 2018-04-25_3aRagexe_zero, 2018-05-09_3aRagexe_zero, 2018-05-23aRagexe_zero, 2018-06-05bRagexe_zero, 2018-06-05cRagexe_zero, 2018-06-27aRagexe_zero, 2018-07-03aRagexe_zero, 2018-07-11_2aRagexe_zero, 2018-07-25_2aRagexe_zero, 2018-08-01aRagexe_zero, 2018-08-08_2aRagexe_zero, 2018-08-22aRagexe_zero, 2018-08-29aRagexe_zero, 2018-09-05aRagexe_zero, 2018-09-12aRagexe_zero, 2018-09-19aRagexe_zero, 2018-09-28aRagexe_zero, 2018-10-10_2aRagexe_zero, 2018-10-24_2aRagexe_zero
#if PACKETVER == 20171018 || \
PACKETVER == 20171019 || \
PACKETVER == 20171023 || \
@@ -51,7 +51,17 @@
PACKETVER == 20180627 || \
PACKETVER == 20180703 || \
PACKETVER == 20180711 || \
- PACKETVER >= 20180725
+ PACKETVER == 20180725 || \
+ PACKETVER == 20180801 || \
+ PACKETVER == 20180808 || \
+ PACKETVER == 20180822 || \
+ PACKETVER == 20180829 || \
+ PACKETVER == 20180905 || \
+ PACKETVER == 20180912 || \
+ PACKETVER == 20180919 || \
+ PACKETVER == 20180928 || \
+ PACKETVER == 20181010 || \
+ PACKETVER >= 20181024
packetKeys(0x00000000,0x00000000,0x00000000);
#endif
diff --git a/src/map/packets_shuffle_main.h b/src/map/packets_shuffle_main.h
index 41b4cbba5..34848f78a 100644
--- a/src/map/packets_shuffle_main.h
+++ b/src/map/packets_shuffle_main.h
@@ -3,6 +3,7 @@
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
* Copyright (C) 2013-2018 Hercules Dev Team
+ * Copyright (C) 2018 Andrei Karas (4144)
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -3344,7 +3345,7 @@
packet(0x0969,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
#endif
-// 2014-06-11eRagexe, 2015-02-25hRagexe, 2018-03-15aRagexe, 2018-03-21aRagexe, 2018-03-28bRagexe, 2018-04-04bRagexe, 2018-04-18aRagexe, 2018-04-25cRagexe, 2018-05-02bRagexe, 2018-05-09aRagexe, 2018-05-16cRagexe, 2018-05-23aRagexe, 2018-05-30aRagexe, 2018-06-05bRagexe, 2018-06-20cRagexe, 2018-06-20eRagexe, 2018-06-21aRagexe, 2018-07-04aRagexe, 2018-07-18bRagexe, 2018-07-18cRagexe
+// 2014-06-11eRagexe, 2015-02-25hRagexe, 2018-03-15aRagexe, 2018-03-21aRagexe, 2018-03-28bRagexe, 2018-04-04bRagexe, 2018-04-18aRagexe, 2018-04-25cRagexe, 2018-05-02bRagexe, 2018-05-09aRagexe, 2018-05-16cRagexe, 2018-05-23aRagexe, 2018-05-30aRagexe, 2018-06-05bRagexe, 2018-06-20cRagexe, 2018-06-20eRagexe, 2018-06-21aRagexe, 2018-07-04aRagexe, 2018-07-18bRagexe, 2018-07-18cRagexe, 2018-08-01cRagexe, 2018-08-08bRagexe, 2018-08-22cRagexe, 2018-08-29aRagexe, 2018-08-31aRagexe, 2018-09-12dRagexe, 2018-09-19aRagexe, 2018-10-02aRagexe, 2018-10-02bRagexe, 2018-10-17_02aRagexe, 2018-10-17_03aRagexe, 2018-10-17bRagexe, 2018-10-24bRagexe, 2018-10-31aRagexe, 2018-10-31bRagexe, 2018-11-07aRagexe
#if PACKETVER == 20140611 || \
PACKETVER == 20150225 || \
PACKETVER == 20180315 || \
@@ -3362,7 +3363,19 @@
PACKETVER == 20180620 || \
PACKETVER == 20180621 || \
PACKETVER == 20180704 || \
- PACKETVER >= 20180718
+ PACKETVER == 20180718 || \
+ PACKETVER == 20180801 || \
+ PACKETVER == 20180808 || \
+ PACKETVER == 20180822 || \
+ PACKETVER == 20180829 || \
+ PACKETVER == 20180831 || \
+ PACKETVER == 20180912 || \
+ PACKETVER == 20180919 || \
+ PACKETVER == 20181002 || \
+ PACKETVER == 20181017 || \
+ PACKETVER == 20181024 || \
+ PACKETVER == 20181031 || \
+ PACKETVER >= 20181107
packet(0x0202,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
packet(0x022d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
packet(0x023b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
diff --git a/src/map/packets_shuffle_re.h b/src/map/packets_shuffle_re.h
index 2e4dedbce..de59bfb84 100644
--- a/src/map/packets_shuffle_re.h
+++ b/src/map/packets_shuffle_re.h
@@ -3,6 +3,7 @@
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
* Copyright (C) 2013-2018 Hercules Dev Team
+ * Copyright (C) 2018 Andrei Karas (4144)
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -9662,10 +9663,20 @@
packet(0x083c,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
#endif
-// 2018-07-04aRagexeRE, 2018-07-11aRagexeRE, 2018-07-18bRagexeRE, 2018-07-18bRagexeRE1, 2018-07-18cRagexeRE
+// 2018-07-04aRagexeRE, 2018-07-11aRagexeRE, 2018-07-18bRagexeRE, 2018-07-18bRagexeRE1, 2018-07-18cRagexeRE, 2018-08-01cRagexeRE, 2018-08-08bRagexeRE, 2018-08-22cRagexeRE, 2018-08-29aRagexeRE, 2018-08-29bRagexeRE, 2018-09-12dRagexeRE, 2018-09-19aRagexeRE, 2018-10-02aRagexeRE, 2018-10-02bRagexeRE, 2018-10-17_02aRagexeRE, 2018-10-17_03aRagexeRE, 2018-10-17bRagexeRE, 2018-10-31cRagexeRE, 2018-11-07aRagexeRE
#if PACKETVER == 20180704 || \
PACKETVER == 20180711 || \
- PACKETVER >= 20180718
+ PACKETVER == 20180718 || \
+ PACKETVER == 20180801 || \
+ PACKETVER == 20180808 || \
+ PACKETVER == 20180822 || \
+ PACKETVER == 20180829 || \
+ PACKETVER == 20180912 || \
+ PACKETVER == 20180919 || \
+ PACKETVER == 20181002 || \
+ PACKETVER == 20181017 || \
+ PACKETVER == 20181031 || \
+ PACKETVER >= 20181107
packet(0x0202,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
packet(0x022d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
packet(0x023b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
diff --git a/src/map/packets_shuffle_zero.h b/src/map/packets_shuffle_zero.h
index 2d7757a08..4d7dd9c7c 100644
--- a/src/map/packets_shuffle_zero.h
+++ b/src/map/packets_shuffle_zero.h
@@ -36,7 +36,7 @@
/* This file is autogenerated, please do not commit manual changes */
-// 2017-10-18aRagexe_zero, 2017-10-19aRagexe_zero, 2017-10-23aRagexe_zero, 2017-10-23bRagexe_zero, 2017-10-23cRagexe_zero, 2017-10-24aRagexe_2_zero, 2017-10-24aRagexe_zero, 2017-10-25bRagexe_zero, 2017-10-27aRagexe_zero, 2017-10-27bRagexe_zero, 2017-10-30aRagexe_zero, 2017-10-31aRagexe_zero, 2017-11-09aRagexe_zero, 2017-11-13aRagexe_zero, 2017-11-13bRagexe_zero, 2018-03-15aRagexe_zero, 2018-03-21aRagexe_zero, 2018-03-21bRagexe_zero, 2018-03-28_1aRagexe_zero, 2018-03-28cRagexe_zero, 2018-04-11aRagexe_zero, 2018-04-25_3aRagexe_zero, 2018-05-09_3aRagexe_zero, 2018-05-23aRagexe_zero, 2018-06-05bRagexe_zero, 2018-06-05cRagexe_zero, 2018-06-27aRagexe_zero, 2018-07-03aRagexe_zero, 2018-07-11_2aRagexe_zero, 2018-07-25_2aRagexe_zero
+// 2017-10-18aRagexe_zero, 2017-10-19aRagexe_zero, 2017-10-23aRagexe_zero, 2017-10-23bRagexe_zero, 2017-10-23cRagexe_zero, 2017-10-24aRagexe_2_zero, 2017-10-24aRagexe_zero, 2017-10-25bRagexe_zero, 2017-10-27aRagexe_zero, 2017-10-27bRagexe_zero, 2017-10-30aRagexe_zero, 2017-10-31aRagexe_zero, 2017-11-09aRagexe_zero, 2017-11-13aRagexe_zero, 2017-11-13bRagexe_zero, 2018-03-15aRagexe_zero, 2018-03-21aRagexe_zero, 2018-03-21bRagexe_zero, 2018-03-28_1aRagexe_zero, 2018-03-28cRagexe_zero, 2018-04-11aRagexe_zero, 2018-04-25_3aRagexe_zero, 2018-05-09_3aRagexe_zero, 2018-05-23aRagexe_zero, 2018-06-05bRagexe_zero, 2018-06-05cRagexe_zero, 2018-06-27aRagexe_zero, 2018-07-03aRagexe_zero, 2018-07-11_2aRagexe_zero, 2018-07-25_2aRagexe_zero, 2018-08-01aRagexe_zero, 2018-08-08_2aRagexe_zero, 2018-08-22aRagexe_zero, 2018-08-29aRagexe_zero, 2018-09-05aRagexe_zero, 2018-09-12aRagexe_zero, 2018-09-19aRagexe_zero, 2018-09-28aRagexe_zero, 2018-10-10_2aRagexe_zero, 2018-10-24_2aRagexe_zero
#if PACKETVER == 20171018 || \
PACKETVER == 20171019 || \
PACKETVER == 20171023 || \
@@ -58,7 +58,17 @@
PACKETVER == 20180627 || \
PACKETVER == 20180703 || \
PACKETVER == 20180711 || \
- PACKETVER >= 20180725
+ PACKETVER == 20180725 || \
+ PACKETVER == 20180801 || \
+ PACKETVER == 20180808 || \
+ PACKETVER == 20180822 || \
+ PACKETVER == 20180829 || \
+ PACKETVER == 20180905 || \
+ PACKETVER == 20180912 || \
+ PACKETVER == 20180919 || \
+ PACKETVER == 20180928 || \
+ PACKETVER == 20181010 || \
+ PACKETVER >= 20181024
packet(0x0202,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
packet(0x022d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
packet(0x023b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h
index e6d207fad..374769728 100644
--- a/src/map/packets_struct.h
+++ b/src/map/packets_struct.h
@@ -198,7 +198,9 @@ enum packet_headers {
#else
dropflooritemType = 0x9e,
#endif
-#if PACKETVER >= 20120925
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ inventorylistnormalType = 0xb09,
+#elif PACKETVER >= 20120925
inventorylistnormalType = 0x991,
#elif PACKETVER >= 20080102
inventorylistnormalType = 0x2e8,
@@ -207,7 +209,9 @@ enum packet_headers {
#else
inventorylistnormalType = 0xa3,
#endif
-#if PACKETVER >= 20150226
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ inventorylistequipType = 0xb0a,
+#elif PACKETVER >= 20150226
inventorylistequipType = 0xa0d,
#elif PACKETVER >= 20120925
inventorylistequipType = 0x992,
@@ -218,27 +222,33 @@ enum packet_headers {
#else
inventorylistequipType = 0xa4,
#endif
-#if PACKETVER >= 20120925
- storagelistnormalType = 0x995,
+#if PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ storageListNormalType = 0xb09,
+#elif PACKETVER >= 20120925
+ storageListNormalType = 0x995,
#elif PACKETVER >= 20080102
- storagelistnormalType = 0x2ea,
+ storageListNormalType = 0x2ea,
#elif PACKETVER >= 20071002
- storagelistnormalType = 0x295,
+ storageListNormalType = 0x295,
#else
- storagelistnormalType = 0xa5,
+ storageListNormalType = 0xa5,
#endif
-#if PACKETVER >= 20150226
- storagelistequipType = 0xa10,
+#if PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ storageListEquipType = 0xb0a,
+#elif PACKETVER >= 20150226
+ storageListEquipType = 0xa10,
#elif PACKETVER >= 20120925
- storagelistequipType = 0x996,
+ storageListEquipType = 0x996,
#elif PACKETVER >= 20080102
- storagelistequipType = 0x2d1,
+ storageListEquipType = 0x2d1,
#elif PACKETVER >= 20071002
- storagelistequipType = 0x296,
+ storageListEquipType = 0x296,
#else
- storagelistequipType = 0xa6,
+ storageListEquipType = 0xa6,
#endif
-#if PACKETVER >= 20120925
+#if PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ cartlistnormalType = 0xb09,
+#elif PACKETVER >= 20120925
cartlistnormalType = 0x993,
#elif PACKETVER >= 20080102
cartlistnormalType = 0x2e9,
@@ -247,7 +257,9 @@ enum packet_headers {
#else
cartlistnormalType = 0x123,
#endif
-#if PACKETVER >= 20150226
+#if PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ cartlistequipType = 0xb0a,
+#elif PACKETVER >= 20150226
cartlistequipType = 0xa0f,
#elif PACKETVER >= 20120925
cartlistequipType = 0x994,
@@ -279,10 +291,15 @@ enum packet_headers {
#else
unequipitemackType = 0xac,
#endif
-#if PACKETVER >= 20150226
+#if PACKETVER_MAIN_NUM >= 20180801 || PACKETVER_RE_NUM >= 20180801 || PACKETVER_ZERO_NUM >= 20180808
+ viewequipackType = 0xb03,
+#elif PACKETVER >= 20150226
viewequipackType = 0xa2d,
#elif PACKETVER >= 20120925
viewequipackType = 0x997,
+// [4144] not supported due other packets/structs not updated
+//#elif (PACKETVER_MAIN_NUM >= 20111207) || (PACKETVER_RE_NUM >= 20111122)
+// viewequipackType = 0x906,
#elif PACKETVER >= 20101124
viewequipackType = 0x859,
#else
@@ -307,7 +324,9 @@ enum packet_headers {
achievementUpdateType = 0xa24,
achievementRewardAckType = 0xa26,
#endif // PACKETVER >= 20141016
-#if PACKETVER >= 20150513 // [4144] 0x09f8 handling in client from 2014-10-29aRagexe and 2014-03-26cRagexeRE
+#if PACKETVER_ZERO_NUM >= 20181010 || PACKETVER >= 20181017
+ questListType = 0xaff, ///< ZC_ALL_QUEST_LIST4
+#elif PACKETVER >= 20150513 // [4144] 0x09f8 handling in client from 2014-10-29aRagexe and 2014-03-26cRagexeRE
questListType = 0x9f8, ///< ZC_ALL_QUEST_LIST3
#elif PACKETVER >= 20141022
questListType = 0x97a, ///< ZC_ALL_QUEST_LIST2
@@ -361,12 +380,16 @@ enum packet_headers {
clanLeave = 0x0989, ///< ZC_ACK_CLAN_LEAVE
clanMessage = 0x098E, ///< ZC_NOTIFY_CLAN_CHAT
#endif
-#if PACKETVER >= 20150513 // [4144] 0x09f9 handled in client from 2014-10-29aRagexe and 2014-03-26cRagexeRE
+#if PACKETVER_ZERO_NUM >= 20181010 || PACKETVER >= 20181017
+ questAddType = 0xb0c,
+#elif PACKETVER >= 20150513 // [4144] 0x09f9 handled in client from 2014-10-29aRagexe and 2014-03-26cRagexeRE
questAddType = 0x9f9,
#else
questAddType = 0x2b3,
#endif // PACKETVER < 20150513
-#if PACKETVER >= 20150513
+#if PACKETVER_ZERO_NUM >= 20181010 || PACKETVER >= 20181017
+ questUpdateType = 0xafe,
+#elif PACKETVER >= 20150513
questUpdateType = 0x9fa,
#else
questUpdateType = 0x2b5,
@@ -416,6 +439,28 @@ enum packet_headers {
#else
skilWarpPointType = 0x11c,
#endif
+#if PACKETVER_MAIN_NUM >= 20161019 || PACKETVER_RE_NUM >= 20160921 || defined(PACKETVER_ZERO)
+ guildExpulsion = 0xa82,
+#elif PACKETVER >= 20100803
+ guildExpulsion = 0x839,
+#else
+ guildExpulsion = 0x15c,
+#endif
+#if PACKETVER_MAIN_NUM >= 20161019 || PACKETVER_RE_NUM >= 20160921 || defined(PACKETVER_ZERO)
+ guildLeave = 0xa83,
+#else
+ guildLeave = 0x15a,
+#endif
+#if PACKETVER_MAIN_NUM >= 20181017 || PACKETVER_RE_NUM >= 20181017 || PACKETVER_ZERO_NUM >= 20181024
+ itemPreview = 0xb13,
+#else
+ itemPreview = 0xab9,
+#endif
+#if PACKETVER_RE_NUM >= 20181031
+ autoSpellList = 0xafb,
+#else
+ autoSpellList = 0x1cd,
+#endif
};
#if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
@@ -1145,28 +1190,63 @@ struct packet_roulette_itemrecv_ack {
struct packet_itemlist_normal {
int16 PacketType;
int16 PacketLength;
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ uint8 invType;
+#endif
struct NORMALITEM_INFO list[MAX_ITEMLIST];
} __attribute__((packed));
struct packet_itemlist_equip {
int16 PacketType;
int16 PacketLength;
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ uint8 invType;
+#endif
struct EQUIPITEM_INFO list[MAX_ITEMLIST];
} __attribute__((packed));
-struct packet_storelist_normal {
+struct ZC_STORE_ITEMLIST_NORMAL {
int16 PacketType;
int16 PacketLength;
-#if PACKETVER >= 20120925
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ uint8 invType;
+#endif
+#if PACKETVER >= 20120925 && PACKETVER_RE_NUM < 20180829 && PACKETVER_ZERO_NUM < 20180919 && PACKETVER_MAIN_NUM < 20181002
char name[NAME_LENGTH];
#endif
struct NORMALITEM_INFO list[MAX_ITEMLIST];
} __attribute__((packed));
-struct packet_storelist_equip {
+struct ZC_INVENTORY_START {
+ int16 packetType;
+#if PACKETVER_RE_NUM >= 20180919 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ int16 packetLength;
+#endif
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ uint8 invType;
+#endif
+#if PACKETVER_RE_NUM >= 20180919 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ char name[];
+#else
+ char name[NAME_LENGTH];
+#endif
+} __attribute__((packed));
+
+struct ZC_INVENTORY_END {
+ int16 packetType;
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ uint8 invType;
+#endif
+ char flag;
+} __attribute__((packed));
+
+struct ZC_STORE_ITEMLIST_EQUIP {
int16 PacketType;
int16 PacketLength;
-#if PACKETVER >= 20120925
+#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002
+ uint8 invType;
+#endif
+#if PACKETVER >= 20120925 && PACKETVER_RE_NUM < 20180829 && PACKETVER_ZERO_NUM < 20180919 && PACKETVER_MAIN_NUM < 20181002
char name[NAME_LENGTH];
#endif
struct EQUIPITEM_INFO list[MAX_ITEMLIST];
@@ -1221,6 +1301,9 @@ struct packet_viewequip_ack {
#endif
int16 headpalette;
int16 bodypalette;
+#if PACKETVER_MAIN_NUM >= 20180801 || PACKETVER_RE_NUM >= 20180801 || PACKETVER_ZERO_NUM >= 20180808
+ int16 body2;
+#endif
uint8 sex;
struct EQUIPITEM_INFO list[MAX_INVENTORY];
} __attribute__((packed));
@@ -1350,7 +1433,7 @@ struct packet_wis_end {
int16 PacketType;
int8 result;
#if PACKETVER >= 20131223
- uint32 unknown;/* maybe AID, not sure what for (works sending as 0) */
+ uint32 AID;
#endif
} __attribute__((packed));
@@ -1382,7 +1465,11 @@ struct packet_hotkey {
* MISSION_HUNT_INFO_EX (PACKETVER >= 20150513)
*/
struct packet_mission_info_sub {
-#if PACKETVER >= 20150513
+#if PACKETVER_ZERO_NUM >= 20181010 || PACKETVER >= 20181017
+ uint32 huntIdent;
+ uint32 huntIdent2;
+ uint32 mobType;
+#elif PACKETVER >= 20150513
uint32 huntIdent;
uint32 mobType;
#endif
@@ -1752,7 +1839,11 @@ struct PACKET_ZC_NOTIFY_CLAN_CHAT {
* PACKET_ZC_MISSION_HUNT_EX (PACKETVER >= 20150513)
*/
struct packet_quest_hunt_sub {
-#if PACKETVER >= 20150513
+#if PACKETVER_ZERO_NUM >= 20181010 || PACKETVER >= 20181017
+ uint32 huntIdent;
+ uint32 huntIdent2;
+ uint32 mobType;
+#elif PACKETVER >= 20150513
uint32 huntIdent;
uint32 mobType;
#endif
@@ -1786,7 +1877,10 @@ struct packet_quest_add_header {
*/
struct packet_quest_update_hunt {
uint32 questID;
-#if PACKETVER >= 20150513
+#if PACKETVER_ZERO_NUM >= 20181010 || PACKETVER >= 20181017
+ uint32 huntIdent;
+ uint32 huntIdent2;
+#elif PACKETVER >= 20150513
uint32 huntIdent;
#else
uint32 mob_id;
@@ -1835,6 +1929,16 @@ struct PACKET_ZC_FORMATSTRING_MSG {
char MessageString[];
} __attribute__((packed));
+struct PACKET_ZC_FORMATSTRING_MSG_COLOR {
+ uint16 PacketType;
+ uint16 PacketLength;
+ uint16 messageId;
+#if PACKETVER >= 20160406
+ uint32 color;
+#endif
+ char messageString[];
+} __attribute__((packed));
+
struct PACKET_ZC_MSG_COLOR {
uint16 PacketType;
uint16 MessageId;
@@ -1883,9 +1987,17 @@ struct PACKET_CZ_REQ_STYLE_CHANGE {
int16 TopAccessory;
int16 MidAccessory;
int16 BottomAccessory;
-#if PACKETVER_RE_NUM >= 20180718
+} __attribute__((packed));
+
+struct PACKET_CZ_REQ_STYLE_CHANGE2 {
+ int16 PacketType;
+ int16 HeadPalette;
+ int16 HeadStyle;
+ int16 BodyPalette;
+ int16 TopAccessory;
+ int16 MidAccessory;
+ int16 BottomAccessory;
int16 BodyStyle;
-#endif
} __attribute__((packed));
struct PACKET_ZC_STYLE_CHANGE_RES {
@@ -2191,8 +2303,13 @@ struct PACKET_ZC_PROPERTY_HOMUN {
uint16 mdef;
uint16 flee;
uint16 amotion;
+#if PACKETVER < 20150513
+ uint16 hp;
+ uint16 maxHp;
+#else
uint32 hp;
uint32 maxHp;
+#endif
uint16 sp;
uint16 maxSp;
uint32 exp;
@@ -2639,7 +2756,7 @@ struct packet_achievement_update {
struct packet_achievement_reward_ack {
uint16 packet_id;
- uint8 received;
+ uint8 failed;
uint32 ach_id;
} __attribute__((packed));
@@ -2690,6 +2807,111 @@ struct PACKET_ZC_GROUP_ISALIVE {
uint8 isDead;
} __attribute__((packed));
+struct PACKET_ZC_GUILD_POSITION {
+ int16 packetType;
+ int16 packetLength;
+ uint32 AID;
+ char position[];
+} __attribute__((packed));
+
+struct PACKET_ZC_INVENTORY_MOVE_FAILED {
+ int16 packetType;
+ int16 index;
+ int16 unknown;
+} __attribute__((packed));
+
+#if PACKETVER_MAIN_NUM >= 20161019 || PACKETVER_RE_NUM >= 20160921 || defined(PACKETVER_ZERO)
+#define PACKET_ZC_ACK_BAN_GUILD PACKET_ZC_ACK_BAN_GUILD3
+#elif PACKETVER >= 20100803
+#define PACKET_ZC_ACK_BAN_GUILD PACKET_ZC_ACK_BAN_GUILD2
+#else
+#define PACKET_ZC_ACK_BAN_GUILD PACKET_ZC_ACK_BAN_GUILD1
+#endif
+
+struct PACKET_ZC_ACK_BAN_GUILD1 {
+ int16 packetType;
+ char name[NAME_LENGTH];
+ char reason[40];
+ char account_name[NAME_LENGTH];
+} __attribute__((packed));
+
+struct PACKET_ZC_ACK_BAN_GUILD2 {
+ int16 packetType;
+ char name[NAME_LENGTH];
+ char reason[40];
+} __attribute__((packed));
+
+struct PACKET_ZC_ACK_BAN_GUILD3 {
+ int16 packetType;
+ char reason[40];
+ uint32 GID;
+} __attribute__((packed));
+
+#if PACKETVER_MAIN_NUM >= 20161019 || PACKETVER_RE_NUM >= 20160921 || defined(PACKETVER_ZERO)
+#define PACKET_ZC_ACK_LEAVE_GUILD PACKET_ZC_ACK_LEAVE_GUILD2
+#else
+#define PACKET_ZC_ACK_LEAVE_GUILD PACKET_ZC_ACK_LEAVE_GUILD1
+#endif
+
+struct PACKET_ZC_ACK_LEAVE_GUILD1 {
+ int16 packetType;
+ char name[NAME_LENGTH];
+ char reason[40];
+} __attribute__((packed));
+
+struct PACKET_ZC_ACK_LEAVE_GUILD2 {
+ int16 packetType;
+ uint32 GID;
+ char reason[40];
+} __attribute__((packed));
+
+struct PACKET_CZ_MEMORIALDUNGEON_COMMAND {
+ int16 packetType;
+ int32 command;
+} __attribute__((packed));
+
+struct PACKET_ZC_REMOVE_EFFECT {
+ int16 packetType;
+ uint32 aid;
+ uint32 effectId;
+} __attribute__((packed));
+
+struct PACKET_ZC_CAMERA_INFO {
+ int16 packetType;
+ int8 action;
+ float range;
+ float rotation;
+ float latitude;
+} __attribute__((packed));
+
+struct PACKET_ZC_ITEM_PREVIEW {
+ int16 packetType;
+ int16 index;
+#if PACKETVER_MAIN_NUM >= 20181017 || PACKETVER_RE_NUM >= 20181017 || PACKETVER_ZERO_NUM >= 20181024
+ int8 isDamaged;
+#endif
+ int16 refiningLevel;
+ struct EQUIPSLOTINFO slot;
+ struct ItemOptions option_data[MAX_ITEM_OPTIONS];
+} __attribute__((packed));
+
+#if PACKETVER_RE_NUM >= 20181031
+#define PACKET_ZC_AUTOSPELLLIST PACKET_ZC_AUTOSPELLLIST2
+#else
+#define PACKET_ZC_AUTOSPELLLIST PACKET_ZC_AUTOSPELLLIST1
+#endif
+
+struct PACKET_ZC_AUTOSPELLLIST1 {
+ int16 packetType;
+ int skills[7];
+} __attribute__((packed));
+
+struct PACKET_ZC_AUTOSPELLLIST2 {
+ int16 packetType;
+ int16 packetLength;
+ int skills[];
+} __attribute__((packed));
+
#if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
#pragma pack(pop)
#endif // not NetBSD < 6 / Solaris
diff --git a/src/map/pc.c b/src/map/pc.c
index 0aad00a56..78b773550 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -399,7 +399,7 @@ static int pc_banding(struct map_session_data *sd, uint16 skill_lv)
for( j = 0; j < i; j++ ) {
bsd = map->id2sd(b_sd[j]);
if( bsd != NULL ) {
- status->set_hp(&bsd->bl,hp,0); // Set hp
+ status->set_hp(&bsd->bl, hp, STATUS_HEAL_DEFAULT); // Set hp
if( (sc = status->get_sc(&bsd->bl)) != NULL && sc->data[SC_BANDING] ) {
sc->data[SC_BANDING]->val2 = c; // Set the counter. It doesn't count your self.
status_calc_bl(&bsd->bl, status->sc2scb_flag(SC_BANDING)); // Set atk and def.
@@ -523,10 +523,9 @@ static int pc_setrestartvalue(struct map_session_data *sd, int type)
if (type&1) {
//Normal resurrection
- st->hp = 1; //Otherwise status->heal may fail if dead.
- status->heal(&sd->bl, bst->hp, 0, 1);
+ status->heal(&sd->bl, bst->hp, 0, STATUS_HEAL_FORCED | STATUS_HEAL_ALLOWREVIVE);
if( st->sp < bst->sp )
- status->set_sp(&sd->bl, bst->sp, 1);
+ status->set_sp(&sd->bl, bst->sp, STATUS_HEAL_FORCED);
} else { //Just for saving on the char-server (with values as if respawned)
sd->status.hp = bst->hp;
sd->status.sp = (st->sp < bst->sp) ? bst->sp : st->sp;
@@ -1459,7 +1458,7 @@ static int pc_set_hate_mob(struct map_session_data *sd, int pos, struct block_li
return 0; //Wrong size
}
sd->hate_mob[pos] = class_;
- pc_setglobalreg(sd,script->add_str(pc->sg_info[pos].hate_var),class_+1);
+ pc_setglobalreg(sd,script->add_variable(pc->sg_info[pos].hate_var),class_+1);
clif->hate_info(sd, pos, class_, 1);
return 1;
}
@@ -1473,27 +1472,28 @@ static int pc_reg_received(struct map_session_data *sd)
nullpo_ret(sd);
sd->vars_ok = true;
- sd->change_level_2nd = pc_readglobalreg(sd,script->add_str("jobchange_level"));
- sd->change_level_3rd = pc_readglobalreg(sd,script->add_str("jobchange_level_3rd"));
- sd->die_counter = pc_readglobalreg(sd,script->add_str("PC_DIE_COUNTER"));
+
+ sd->change_level_2nd = pc_readglobalreg(sd,script->add_variable("jobchange_level"));
+ sd->change_level_3rd = pc_readglobalreg(sd,script->add_variable("jobchange_level_3rd"));
+ sd->die_counter = pc_readglobalreg(sd,script->add_variable("PC_DIE_COUNTER"));
// Cash shop
- sd->cashPoints = pc_readaccountreg(sd,script->add_str("#CASHPOINTS"));
- sd->kafraPoints = pc_readaccountreg(sd,script->add_str("#KAFRAPOINTS"));
+ sd->cashPoints = pc_readaccountreg(sd,script->add_variable("#CASHPOINTS"));
+ sd->kafraPoints = pc_readaccountreg(sd,script->add_variable("#KAFRAPOINTS"));
// Cooking Exp
- sd->cook_mastery = pc_readglobalreg(sd,script->add_str("COOK_MASTERY"));
+ sd->cook_mastery = pc_readglobalreg(sd,script->add_variable("COOK_MASTERY"));
if ((sd->job & MAPID_BASEMASK) == MAPID_TAEKWON) {
// Better check for class rather than skill to prevent "skill resets" from unsetting this
- sd->mission_mobid = pc_readglobalreg(sd,script->add_str("TK_MISSION_ID"));
- sd->mission_count = pc_readglobalreg(sd,script->add_str("TK_MISSION_COUNT"));
+ sd->mission_mobid = pc_readglobalreg(sd,script->add_variable("TK_MISSION_ID"));
+ sd->mission_count = pc_readglobalreg(sd,script->add_variable("TK_MISSION_COUNT"));
}
//SG map and mob read [Komurka]
for (i = 0; i < MAX_PC_FEELHATE; i++) {
//for now - someone need to make reading from txt/sql
- int j = pc_readglobalreg(sd,script->add_str(pc->sg_info[i].feel_var));
+ int j = pc_readglobalreg(sd,script->add_variable(pc->sg_info[i].feel_var));
if (j != 0) {
sd->feel_map[i].index = j;
sd->feel_map[i].m = map->mapindex2mapid(j);
@@ -1501,24 +1501,24 @@ static int pc_reg_received(struct map_session_data *sd)
sd->feel_map[i].index = 0;
sd->feel_map[i].m = -1;
}
- sd->hate_mob[i] = pc_readglobalreg(sd,script->add_str(pc->sg_info[i].hate_var))-1;
+ sd->hate_mob[i] = pc_readglobalreg(sd,script->add_variable(pc->sg_info[i].hate_var))-1;
}
if ((i = pc->checkskill(sd,RG_PLAGIARISM)) > 0) {
- sd->cloneskill_id = pc_readglobalreg(sd,script->add_str("CLONE_SKILL"));
+ sd->cloneskill_id = pc_readglobalreg(sd,script->add_variable("CLONE_SKILL"));
if (sd->cloneskill_id > 0 && (idx = skill->get_index(sd->cloneskill_id)) > 0) {
sd->status.skill[idx].id = sd->cloneskill_id;
- sd->status.skill[idx].lv = pc_readglobalreg(sd,script->add_str("CLONE_SKILL_LV"));
+ sd->status.skill[idx].lv = pc_readglobalreg(sd,script->add_variable("CLONE_SKILL_LV"));
if (sd->status.skill[idx].lv > i)
sd->status.skill[idx].lv = i;
sd->status.skill[idx].flag = SKILL_FLAG_PLAGIARIZED;
}
}
if ((i = pc->checkskill(sd,SC_REPRODUCE)) > 0) {
- sd->reproduceskill_id = pc_readglobalreg(sd,script->add_str("REPRODUCE_SKILL"));
+ sd->reproduceskill_id = pc_readglobalreg(sd,script->add_variable("REPRODUCE_SKILL"));
if( sd->reproduceskill_id > 0 && (idx = skill->get_index(sd->reproduceskill_id)) > 0) {
sd->status.skill[idx].id = sd->reproduceskill_id;
- sd->status.skill[idx].lv = pc_readglobalreg(sd,script->add_str("REPRODUCE_SKILL_LV"));
+ sd->status.skill[idx].lv = pc_readglobalreg(sd,script->add_variable("REPRODUCE_SKILL_LV"));
if( i < sd->status.skill[idx].lv)
sd->status.skill[idx].lv = i;
sd->status.skill[idx].flag = SKILL_FLAG_PLAGIARIZED;
@@ -1964,7 +1964,7 @@ static int pc_calc_skilltree_normalize_job(struct map_session_data *sd)
}
- pc_setglobalreg(sd, script->add_str("jobchange_level"), sd->change_level_2nd);
+ pc_setglobalreg(sd, script->add_variable("jobchange_level"), sd->change_level_2nd);
}
if (skill_point < novice_skills + (sd->change_level_2nd - 1)) {
@@ -1977,7 +1977,7 @@ static int pc_calc_skilltree_normalize_job(struct map_session_data *sd)
- (sd->status.job_level - 1)
- (sd->change_level_2nd - 1)
- novice_skills;
- pc_setglobalreg(sd, script->add_str("jobchange_level_3rd"), sd->change_level_3rd);
+ pc_setglobalreg(sd, script->add_variable("jobchange_level_3rd"), sd->change_level_3rd);
}
if (skill_point < novice_skills + (sd->change_level_2nd - 1) + (sd->change_level_3rd - 1)) {
@@ -2074,7 +2074,7 @@ static int pc_disguise(struct map_session_data *sd, int class)
clif->spawn(&sd->bl);
if (class == sd->status.class && pc_iscarton(sd)) {
//It seems the cart info is lost on undisguise.
- clif->cartlist(sd);
+ clif->cartList(sd);
clif->updatestatus(sd,SP_CARTINFO);
}
if (sd->chat_id != 0) {
@@ -4401,8 +4401,6 @@ static int pc_insert_card(struct map_session_data *sd, int idx_card, int idx_equ
static int pc_modifybuyvalue(struct map_session_data *sd, int orig_value)
{
int skill_lv, rate1 = 0, rate2 = 0;
- if (orig_value <= 0)
- return 0;
if ((skill_lv=pc->checkskill(sd,MC_DISCOUNT)) > 0) // merchant discount
rate1 = 5+skill_lv*2-((skill_lv==10)? 1:0);
if ((skill_lv=pc->checkskill(sd,RG_COMPULSION)) > 0) // rogue discount
@@ -4411,8 +4409,9 @@ static int pc_modifybuyvalue(struct map_session_data *sd, int orig_value)
rate1 = rate2;
if (rate1 != 0)
orig_value = apply_percentrate(orig_value, 100-rate1, 100);
- if (orig_value < 1)
- orig_value = 1;
+
+ if (orig_value < battle_config.min_item_buy_price)
+ orig_value = battle_config.min_item_buy_price;
return orig_value;
}
@@ -4422,14 +4421,13 @@ static int pc_modifybuyvalue(struct map_session_data *sd, int orig_value)
static int pc_modifysellvalue(struct map_session_data *sd, int orig_value)
{
int skill_lv, rate = 0;
- if (orig_value <= 0)
- return 0;
if ((skill_lv=pc->checkskill(sd,MC_OVERCHARGE)) > 0) //OverCharge
rate = 5+skill_lv*2-((skill_lv==10)? 1:0);
if (rate != 0)
orig_value = apply_percentrate(orig_value, 100+rate, 100);
- if (orig_value < 1)
- orig_value = 1;
+
+ if (orig_value < battle_config.min_item_sell_price)
+ orig_value = battle_config.min_item_sell_price;
return orig_value;
}
@@ -4505,14 +4503,15 @@ static int pc_payzeny(struct map_session_data *sd, int zeny, enum e_log_pick_typ
sd->status.zeny -= zeny;
clif->updatestatus(sd,SP_ZENY);
- achievement->validate_zeny(sd, -zeny); // Achievements [Smokexyz/Hercules]
+ if (zeny > 0) {
+ achievement->validate_zeny(sd, -zeny); // Achievements [Smokexyz/Hercules]
+ logs->zeny(sd, type, tsd ? tsd : sd, -zeny);
- if(!tsd) tsd = sd;
- logs->zeny(sd, type, tsd, -zeny);
- if( zeny > 0 && sd->state.showzeny ) {
- char output[255];
- sprintf(output, "Removed %dz.", zeny);
- clif_disp_onlyself(sd, output);
+ if (sd->state.showzeny) {
+ char output[255];
+ sprintf(output, "Removed %dz.", zeny);
+ clif_disp_onlyself(sd, output);
+ }
}
return 0;
@@ -4523,7 +4522,7 @@ static int pc_payzeny(struct map_session_data *sd, int zeny, enum e_log_pick_typ
*
* @param price Price of the item.
* @param points Provided kafra points.
- *
+ *
* @return points Leftover kafra points.
*/
//Changed Kafrapoints calculation. [Normynator]
@@ -4555,15 +4554,15 @@ static int pc_paycash(struct map_session_data *sd, int price, int points)
return -1;
}
- pc_setaccountreg(sd, script->add_str("#CASHPOINTS"), sd->cashPoints - cash);
- pc_setaccountreg(sd, script->add_str("#KAFRAPOINTS"), sd->kafraPoints - mempoints);
+ pc_setaccountreg(sd, script->add_variable("#CASHPOINTS"), sd->cashPoints - cash);
+ pc_setaccountreg(sd, script->add_variable("#KAFRAPOINTS"), sd->kafraPoints - mempoints);
if (battle_config.cashshop_show_points) {
char output[128];
sprintf(output, msg_sd(sd,504), points, cash, sd->kafraPoints, sd->cashPoints);
clif_disp_onlyself(sd, output);
}
-
+
return points;
}
@@ -4582,7 +4581,7 @@ static int pc_getcash(struct map_session_data *sd, int cash, int points)
cash = MAX_ZENY-sd->cashPoints;
}
- pc_setaccountreg(sd, script->add_str("#CASHPOINTS"), sd->cashPoints+cash);
+ pc_setaccountreg(sd, script->add_variable("#CASHPOINTS"), sd->cashPoints+cash);
if( battle_config.cashshop_show_points )
{
@@ -4605,7 +4604,7 @@ static int pc_getcash(struct map_session_data *sd, int cash, int points)
points = MAX_ZENY-sd->kafraPoints;
}
- pc_setaccountreg(sd, script->add_str("#KAFRAPOINTS"), sd->kafraPoints+points);
+ pc_setaccountreg(sd, script->add_variable("#KAFRAPOINTS"), sd->kafraPoints+points);
if( battle_config.cashshop_show_points )
{
@@ -4643,14 +4642,15 @@ static int pc_getzeny(struct map_session_data *sd, int zeny, enum e_log_pick_typ
sd->status.zeny += zeny;
clif->updatestatus(sd,SP_ZENY);
- achievement->validate_zeny(sd, zeny); // Achievements [Smokexyz/Hercules]
+ if (zeny > 0) {
+ achievement->validate_zeny(sd, zeny); // Achievements [Smokexyz/Hercules]
+ logs->zeny(sd, type, tsd ? tsd : sd, zeny);
- if(!tsd) tsd = sd;
- logs->zeny(sd, type, tsd, zeny);
- if( zeny > 0 && sd->state.showzeny ) {
- char output[255];
- sprintf(output, "Gained %dz.", zeny);
- clif_disp_onlyself(sd, output);
+ if (sd->state.showzeny) {
+ char output[255];
+ sprintf(output, "Gained %dz.", zeny);
+ clif_disp_onlyself(sd, output);
+ }
}
return 0;
@@ -4688,7 +4688,7 @@ static int pc_search_inventory(struct map_session_data *sd, int item_id)
* 6 = ?
* 7 = stack limitation
*------------------------------------------*/
-static int pc_additem(struct map_session_data *sd, struct item *item_data, int amount, e_log_pick_type log_type)
+static int pc_additem(struct map_session_data *sd, const struct item *item_data, int amount, e_log_pick_type log_type)
{
struct item_data *data;
int i;
@@ -5789,7 +5789,7 @@ static int pc_setpos(struct map_session_data *sd, unsigned short map_index, int
for (i = 0; i < VECTOR_LENGTH(sd->script_queues); i++) {
struct script_queue *queue = script->queue(VECTOR_INDEX(sd->script_queues, i));
if (queue && queue->event_mapchange[0] != '\0') {
- pc->setregstr(sd, script->add_str("@Queue_Destination_Map$"), map->list[m].name);
+ pc->setregstr(sd, script->add_variable("@Queue_Destination_Map$"), map->list[m].name);
npc->event(sd, queue->event_mapchange, 0);
}
}
@@ -7220,7 +7220,7 @@ static uint64 pc_thisjobexp(const struct map_session_data *sd)
const struct class_exp_group *exp_group = NULL;
nullpo_ret(sd);
-
+
if (sd->status.job_level > pc->maxjoblv(sd) || sd->status.job_level <= 1)
return 0;
@@ -7696,7 +7696,7 @@ static int pc_resetstate(struct map_session_data *sd)
if( sd->mission_mobid ) { //bugreport:2200
sd->mission_mobid = 0;
sd->mission_count = 0;
- pc_setglobalreg(sd,script->add_str("TK_MISSION_ID"), 0);
+ pc_setglobalreg(sd,script->add_variable("TK_MISSION_ID"), 0);
}
status_calc_pc(sd,SCO_NONE);
@@ -7856,7 +7856,7 @@ static int pc_resetfeel(struct map_session_data *sd)
{
sd->feel_map[i].m = -1;
sd->feel_map[i].index = 0;
- pc_setglobalreg(sd,script->add_str(pc->sg_info[i].feel_var),0);
+ pc_setglobalreg(sd,script->add_variable(pc->sg_info[i].feel_var),0);
}
return 0;
@@ -7869,7 +7869,7 @@ static int pc_resethate(struct map_session_data *sd)
for (i = 0; i < MAX_PC_FEELHATE; i++) {
sd->hate_mob[i] = -1;
- pc_setglobalreg(sd,script->add_str(pc->sg_info[i].hate_var),0);
+ pc_setglobalreg(sd,script->add_variable(pc->sg_info[i].hate_var),0);
}
return 0;
}
@@ -8059,7 +8059,7 @@ static int pc_dead(struct map_session_data *sd, struct block_list *src)
if (sd->npc_id && sd->st && sd->st->state != RUN)
npc->event_dequeue(sd);
- pc_setglobalreg(sd,script->add_str("PC_DIE_COUNTER"),sd->die_counter+1);
+ pc_setglobalreg(sd,script->add_variable("PC_DIE_COUNTER"),sd->die_counter+1);
pc->setparam(sd, SP_KILLERRID, src?src->id:0);
if( sd->bg_id ) {/* TODO: purge when bgqueue is deemed ok */
@@ -8826,7 +8826,7 @@ static int pc_itemheal(struct map_session_data *sd, int itemid, int hp, int sp)
}
}
- return status->heal(&sd->bl, hp, sp, 1);
+ return status->heal(&sd->bl, hp, sp, STATUS_HEAL_FORCED);
}
/*==========================================
@@ -8920,11 +8920,11 @@ static int pc_jobchange(struct map_session_data *sd, int class, int upper)
if ((job & JOBL_2) != 0 && (sd->job & JOBL_2) == 0 && (job & MAPID_UPPERMASK) != MAPID_SUPER_NOVICE) {
// changing from 1st to 2nd job
sd->change_level_2nd = sd->status.job_level;
- pc_setglobalreg(sd, script->add_str("jobchange_level"), sd->change_level_2nd);
+ pc_setglobalreg(sd, script->add_variable("jobchange_level"), sd->change_level_2nd);
} else if((job & JOBL_THIRD) != 0 && (sd->job & JOBL_THIRD) == 0) {
// changing from 2nd to 3rd job
sd->change_level_3rd = sd->status.job_level;
- pc_setglobalreg(sd, script->add_str("jobchange_level_3rd"), sd->change_level_3rd);
+ pc_setglobalreg(sd, script->add_variable("jobchange_level_3rd"), sd->change_level_3rd);
}
if(sd->cloneskill_id) {
@@ -8936,8 +8936,8 @@ static int pc_jobchange(struct map_session_data *sd, int class, int upper)
clif->deleteskill(sd,sd->cloneskill_id);
}
sd->cloneskill_id = 0;
- pc_setglobalreg(sd, script->add_str("CLONE_SKILL"), 0);
- pc_setglobalreg(sd, script->add_str("CLONE_SKILL_LV"), 0);
+ pc_setglobalreg(sd, script->add_variable("CLONE_SKILL"), 0);
+ pc_setglobalreg(sd, script->add_variable("CLONE_SKILL_LV"), 0);
}
if(sd->reproduceskill_id) {
@@ -8949,8 +8949,8 @@ static int pc_jobchange(struct map_session_data *sd, int class, int upper)
clif->deleteskill(sd,sd->reproduceskill_id);
}
sd->reproduceskill_id = 0;
- pc_setglobalreg(sd, script->add_str("REPRODUCE_SKILL"),0);
- pc_setglobalreg(sd, script->add_str("REPRODUCE_SKILL_LV"),0);
+ pc_setglobalreg(sd, script->add_variable("REPRODUCE_SKILL"),0);
+ pc_setglobalreg(sd, script->add_variable("REPRODUCE_SKILL_LV"),0);
}
if ((job & MAPID_UPPERMASK) != (sd->job & MAPID_UPPERMASK)) { //Things to remove when changing class tree.
@@ -9197,7 +9197,7 @@ static int pc_setoption(struct map_session_data *sd, int type)
#ifndef NEW_CARTS
if( type&OPTION_CART && !( p_type&OPTION_CART ) ) { //Cart On
- clif->cartlist(sd);
+ clif->cartList(sd);
clif->updatestatus(sd, SP_CARTINFO);
if(pc->checkskill(sd, MC_PUSHCART) < 10)
status_calc_pc(sd,SCO_NONE); //Apply speed penalty.
@@ -9304,7 +9304,7 @@ static int pc_setcart(struct map_session_data *sd, int type)
break;
default:/* everything else is an allowed ID so we can move on */
if( !sd->sc.data[SC_PUSH_CART] ) /* first time, so fill cart data */
- clif->cartlist(sd);
+ clif->cartList(sd);
clif->updatestatus(sd, SP_CARTINFO);
sc_start(NULL,&sd->bl, SC_PUSH_CART, 100, type, 0);
clif->sc_load(&sd->bl, sd->bl.id, AREA, SI_ON_PUSH_CART, type, 0, 0);
@@ -10877,7 +10877,7 @@ static void pc_regen(struct map_session_data *sd, unsigned int diff_tick)
}
if (hp > 0 || sp > 0)
- status->heal(&sd->bl, hp, sp, 0);
+ status->heal(&sd->bl, hp, sp, STATUS_HEAL_DEFAULT);
return;
}
diff --git a/src/map/pc.h b/src/map/pc.h
index 17a9b8200..4ee5f560b 100644
--- a/src/map/pc.h
+++ b/src/map/pc.h
@@ -937,7 +937,7 @@ END_ZEROED_BLOCK; /* End */
int (*inventoryblank) (struct map_session_data *sd);
int (*search_inventory) (struct map_session_data *sd,int item_id);
int (*payzeny) (struct map_session_data *sd,int zeny, enum e_log_pick_type type, struct map_session_data *tsd);
- int (*additem) (struct map_session_data *sd,struct item *item_data,int amount,e_log_pick_type log_type);
+ int (*additem) (struct map_session_data *sd, const struct item *item_data, int amount, e_log_pick_type log_type);
int (*getzeny) (struct map_session_data *sd,int zeny, enum e_log_pick_type type, struct map_session_data *tsd);
int (*delitem) (struct map_session_data *sd,int n,int amount,int type, short reason, e_log_pick_type log_type);
diff --git a/src/map/pet.c b/src/map/pet.c
index cfb3e8253..c32a92b78 100644
--- a/src/map/pet.c
+++ b/src/map/pet.c
@@ -350,7 +350,7 @@ static int pet_return_egg(struct map_session_data *sd, struct pet_data *pd)
sd->status.inventory[i].bound = IBT_NONE;
}
#if PACKETVER >= 20180704
- clif->inventorylist(sd);
+ clif->inventoryList(sd);
clif->send_petdata(sd, pd, 6, 0);
#endif
pd->pet.incubate = 1;
diff --git a/src/map/quest.c b/src/map/quest.c
index ab0b06974..f10d6847f 100644
--- a/src/map/quest.c
+++ b/src/map/quest.c
@@ -30,6 +30,7 @@
#include "map/itemdb.h"
#include "map/log.h"
#include "map/map.h"
+#include "map/mercenary.h"
#include "map/mob.h"
#include "map/npc.h"
#include "map/party.h"
@@ -719,6 +720,8 @@ static bool quest_questinfo_validate(struct map_session_data *sd, struct questin
return false;
if (VECTOR_LENGTH(qi->quest_requirement) > 0 && quest->questinfo_validate_quests(sd, qi) == false)
return false;
+ if (qi->mercenary_class != 0 && quest->questinfo_validate_mercenary_class(sd, qi) == false)
+ return false;
return true;
}
@@ -805,18 +808,17 @@ static bool quest_questinfo_validate_joblevel(struct map_session_data *sd, struc
*/
static bool quest_questinfo_validate_items(struct map_session_data *sd, struct questinfo *qi)
{
- int i, idx;
-
nullpo_retr(false, sd);
nullpo_retr(false, qi);
-
- for (i = 0; i < VECTOR_LENGTH(qi->items); i++) {
- struct item *item = &VECTOR_INDEX(qi->items, i);
- idx = pc->search_inventory(sd, item->nameid);
- if (idx == INDEX_NOT_FOUND)
- return false;
- if (sd->status.inventory[idx].amount < item->amount)
+ for (int i = 0; i < VECTOR_LENGTH(qi->items); i++) {
+ struct questinfo_itemreq *item = &VECTOR_INDEX(qi->items, i);
+ int count = 0;
+ for (int j = 0; j < MAX_INVENTORY; j++) {
+ if (sd->status.inventory[j].nameid == item->nameid)
+ count += sd->status.inventory[j].amount;
+ }
+ if (count < item->min || count > item->max)
return false;
}
@@ -887,7 +889,14 @@ static bool quest_questinfo_validate_quests(struct map_session_data *sd, struct
for (i = 0; i < VECTOR_LENGTH(qi->quest_requirement); i++) {
struct questinfo_qreq *quest_requirement = &VECTOR_INDEX(qi->quest_requirement, i);
- if (quest->check(sd, quest_requirement->id, HAVEQUEST) != quest_requirement->state)
+ int quest_progress = quest->check(sd, quest_requirement->id, HAVEQUEST);
+ if (quest_progress == -1)
+ quest_progress = 0;
+ else if (quest_progress == 0 || quest_progress == 1)
+ quest_progress = 1;
+ else
+ quest_progress = 2;
+ if (quest_progress != quest_requirement->state)
return false;
}
@@ -895,6 +904,29 @@ static bool quest_questinfo_validate_quests(struct map_session_data *sd, struct
}
/**
+ * Validate mercenary class required for the questinfo
+ *
+ * @param sd session data.
+ * @param qi questinfo data.
+ *
+ * @retval true if player have a mercenary with the given class.
+ * @retval false if player does NOT have a mercenary with the given class.
+ */
+static bool quest_questinfo_validate_mercenary_class(struct map_session_data *sd, struct questinfo *qi)
+{
+ nullpo_retr(false, sd);
+ nullpo_retr(false, qi);
+
+ if (sd->md == NULL)
+ return false;
+
+ if (sd->md->mercenary.class_ != qi->mercenary_class)
+ return false;
+
+ return true;
+}
+
+/**
* Clears the questinfo data vector
*
* @param m mapindex.
@@ -987,5 +1019,6 @@ void quest_defaults(void)
quest->questinfo_validate_homunculus_level = quest_questinfo_validate_homunculus_level;
quest->questinfo_validate_homunculus_type = quest_questinfo_validate_homunculus_type;
quest->questinfo_validate_quests = quest_questinfo_validate_quests;
+ quest->questinfo_validate_mercenary_class = quest_questinfo_validate_mercenary_class;
quest->questinfo_vector_clear = quest_questinfo_vector_clear;
}
diff --git a/src/map/quest.h b/src/map/quest.h
index 305a48df1..206a7902f 100644
--- a/src/map/quest.h
+++ b/src/map/quest.h
@@ -92,6 +92,7 @@ struct quest_interface {
bool (*questinfo_validate_homunculus_level) (struct map_session_data *sd, struct questinfo *qi);
bool (*questinfo_validate_homunculus_type) (struct map_session_data *sd, struct questinfo *qi);
bool (*questinfo_validate_quests) (struct map_session_data *sd, struct questinfo *qi);
+ bool (*questinfo_validate_mercenary_class) (struct map_session_data *sd, struct questinfo *qi);
void (*questinfo_vector_clear) (int m);
};
diff --git a/src/map/script.c b/src/map/script.c
index 6c09bc6c9..41f21cd72 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -613,6 +613,18 @@ static int script_add_str(const char *p)
return script->str_num++;
}
+static int script_add_variable(const char *varname)
+{
+ int key = script->search_str(varname);
+
+ if (key < 0) {
+ key = script->add_str(varname);
+ script->str_data[key].type = C_NAME;
+ }
+
+ return key;
+}
+
/**
* Appends 1 byte to the script buffer.
*
@@ -1366,6 +1378,11 @@ static const char *parse_simpleexpr_name(const char *p)
disp_error_message("parse_simpleexpr: unmatched ']'", p);
++p;
script->addc(C_FUNC);
+ } else if (script->str_data[l].type == C_INT) {
+ script->addc(C_NAME);
+ script->addb(l);
+ script->addb(l >> 8);
+ script->addb(l >> 16);
} else {
script->addl(l);
}
@@ -2886,8 +2903,7 @@ static struct script_data *get_val(struct script_state *st, struct script_data *
return data;
}
- //##TODO use reference_tovariable(data) when it's confirmed that it works [FlavioJS]
- if (!reference_toconstant(data) && not_server_variable(prefix) && reference_getref(data) == NULL) {
+ if (((reference_tovariable(data) && not_server_variable(prefix)) || reference_toparam(data)) && reference_getref(data) == NULL) {
sd = script->rid2sd(st);
if (sd == NULL) {// needs player attached
if (postfix == '$') {// string variable
@@ -3032,6 +3048,10 @@ static const void *get_val2(struct script_state *st, int64 uid, struct reg_db *r
script->get_val(st, data);
if (data->type == C_INT) // u.num is int32 because it comes from script->get_val
return (const void *)h64BPTRSIZE((int32)data->u.num);
+ else if (data_isreference(data) && reference_toconstant(data))
+ return (const void *)h64BPTRSIZE((int32)reference_getconstant(data));
+ else if (data_isreference(data) && reference_toparam(data))
+ return (const void *)h64BPTRSIZE((int32)reference_getparamtype(data));
else
return (const void *)h64BPTRSIZE(data->u.str);
}
@@ -3296,95 +3316,28 @@ static void set_reg_npcscope_str(struct script_state *st, struct reg_db *n, int6
static void set_reg_pc_ref_str(struct script_state *st, struct reg_db *n, int64 num, const char *name, const char *str)
{
- struct script_reg_str *p = NULL;
- unsigned int index = script_getvaridx(num);
-
- nullpo_retv(n);
-
- if ((p = i64db_get(n->vars, num)) != NULL) {
- if (str[0]) {
- if (p->value) {
- aFree(p->value);
- } else if (index) {
- script->array_update(n, num, false);
- }
- p->value = aStrdup(str);
- } else {
- p->value = NULL;
- if (index) {
- script->array_update(n, num, true);
- }
- }
-
- if (!pc->reg_load) {
- p->flag.update = 1;
- }
- } else if (str[0]) {
- struct DBData prev;
- if (index) {
- script->array_update(n, num, false);
- }
-
- p = ers_alloc(pc->str_reg_ers, struct script_reg_str);
- p->value = aStrdup(str);
+ struct DBIterator *iter = db_iterator(map->pc_db);
- if (!pc->reg_load) {
- p->flag.update = 1;
- }
- p->flag.type = 1;
-
- if(n->vars->put(n->vars, DB->i642key(num), DB->ptr2data(p), &prev)) {
- p = DB->data2ptr(&prev);
- if (p->value) {
- aFree(p->value);
- }
- ers_free(pc->str_reg_ers, p);
+ for (struct map_session_data *sd = dbi_first(iter); dbi_exists(iter); sd = dbi_next(iter)) {
+ if (sd != NULL && n == &sd->regs) {
+ pc->setregistry_str(sd, num, str);
+ break;
}
}
+ dbi_destroy(iter);
}
static void set_reg_pc_ref_num(struct script_state *st, struct reg_db *n, int64 num, const char *name, int val)
{
- struct script_reg_num *p = NULL;
- unsigned int index = script_getvaridx(num);
-
- nullpo_retv(n);
-
- if ((p = i64db_get(n->vars, num)) != NULL) {
- if (val) {
- if (!p->value && index) {
- script->array_update(n, num, false);
- }
- p->value = val;
- } else {
- p->value = 0;
- if (index) {
- script->array_update(n, num, true);
- }
- }
-
- if (!pc->reg_load) {
- p->flag.update = 1;
- }
- } else if (val) {
- struct DBData prev;
- if (index) {
- script->array_update(n, num, false);
- }
-
- p = ers_alloc(pc->num_reg_ers, struct script_reg_num);
- p->value = val;
-
- if (!pc->reg_load) {
- p->flag.update = 1;
- }
- p->flag.type = 1;
+ struct DBIterator *iter = db_iterator(map->pc_db);
- if(n->vars->put(n->vars, DB->i642key(num), DB->ptr2data(p), &prev)) {
- p = DB->data2ptr(&prev);
- ers_free(pc->num_reg_ers, p);
+ for (struct map_session_data *sd = dbi_first(iter); dbi_exists(iter); sd = dbi_next(iter)) {
+ if (sd != NULL && n == &sd->regs) {
+ pc->setregistry(sd, num, val);
+ break;
}
}
+ dbi_destroy(iter);
}
static void set_reg_npcscope_num(struct script_state *st, struct reg_db *n, int64 num, const char *name, int val)
@@ -3460,6 +3413,19 @@ static int set_reg(struct script_state *st, struct map_session_data *sd, int64 n
nullpo_ret(name);
prefix = name[0];
+ if (script->str_data[script_getvarid(num)].type != C_NAME && script->str_data[script_getvarid(num)].type != C_PARAM) {
+ ShowError("script:set_reg: not a variable! '%s'\n", name);
+
+ // to avoid this don't do script->add_str(") without setting its type.
+ // either use script->add_variable() or manually set the type
+
+ if (st) {
+ script->reportsrc(st);
+ st->state = END;
+ }
+ return 0;
+ }
+
if (strlen(name) > SCRIPT_VARNAME_LENGTH) {
ShowError("script:set_reg: variable name too long. '%s'\n", name);
if (st) {
@@ -3579,12 +3545,26 @@ static int set_reg(struct script_state *st, struct map_session_data *sd, int64 n
static int set_var(struct map_session_data *sd, char *name, void *val)
{
- return script->set_reg(NULL, sd, reference_uid(script->add_str(name),0), name, val, NULL);
+ int key = script->add_variable(name);
+
+ if (script->str_data[key].type != C_NAME) {
+ ShowError("script:setd_sub: `%s` is already used by something that is not a variable.\n", name);
+ return -1;
+ }
+
+ return script->set_reg(NULL, sd, reference_uid(key, 0), name, val, NULL);
}
static void setd_sub(struct script_state *st, struct map_session_data *sd, const char *varname, int elem, const void *value, struct reg_db *ref)
{
- script->set_reg(st, sd, reference_uid(script->add_str(varname),elem), varname, value, ref);
+ int key = script->add_variable(varname);
+
+ if (script->str_data[key].type != C_NAME) {
+ ShowError("script:setd_sub: `%s` is already used by something that is not a variable.\n", varname);
+ return;
+ }
+
+ script->set_reg(st, sd, reference_uid(key, elem), varname, value, ref);
}
/// Converts the data to a string
@@ -4119,10 +4099,10 @@ static void op_2str(struct script_state *st, int op, const char *s1, const char
int i;
for (i = 0; i < offsetcount; i++) {
libpcre->get_substring(s1, offsets, offsetcount, i, &pcre_match);
- mapreg->setregstr(reference_uid(script->add_str("$@regexmatch$"), i), pcre_match);
+ mapreg->setregstr(reference_uid(script->add_variable("$@regexmatch$"), i), pcre_match);
libpcre->free_substring(pcre_match);
}
- mapreg->setreg(script->add_str("$@regexmatchcount"), i);
+ mapreg->setreg(script->add_variable("$@regexmatchcount"), i);
a = offsetcount;
} else { // C_RE_NE
a = (offsetcount == 0);
@@ -4905,7 +4885,12 @@ static void script_cleararray_pc(struct map_session_data *sd, const char *varnam
unsigned int i, *list = NULL, size = 0;
int key;
- key = script->add_str(varname);
+ key = script->add_variable(varname);
+
+ if (script->str_data[key].type != C_NAME) {
+ ShowError("script:cleararray_pc: `%s` is already used by something that is not a variable.\n", varname);
+ return;
+ }
if( !(src = script->array_src(NULL,sd,varname,NULL) ) )
return;
@@ -4935,7 +4920,12 @@ static void script_setarray_pc(struct map_session_data *sd, const char *varname,
return;
}
- key = ( refcache && refcache[0] ) ? refcache[0] : script->add_str(varname);
+ key = ( refcache && refcache[0] ) ? refcache[0] : script->add_variable(varname);
+
+ if (script->str_data[key].type != C_NAME) {
+ ShowError("script:setarray_pc: `%s` is already used by something that is not a variable.\n", varname);
+ return;
+ }
script->set_reg(NULL,sd,reference_uid(key, idx),varname,value,NULL);
@@ -5908,10 +5898,14 @@ static bool script_sprintf_helper(struct script_state *st, int start, struct Str
static BUILDIN(mes)
{
struct map_session_data *sd = script->rid2sd(st);
+
if (sd == NULL)
return true;
- clif->scriptmes(sd, st->oid, script_getstr(st, 2));
+ if (script_hasdata(st, 2))
+ clif->scriptmes(sd, st->oid, script_getstr(st, 2));
+ else
+ clif->scriptmes(sd, st->oid, "");
return true;
}
@@ -6105,11 +6099,11 @@ static BUILDIN(menu)
sd->state.menu_or_input = 1;
/* menus beyond this length crash the client (see bugreport:6402) */
- if( StrBuf->Length(&buf) >= 2047 ) {
+ if( StrBuf->Length(&buf) >= MAX_MENU_LENGTH - 1 ) {
struct npc_data * nd = map->id2nd(st->oid);
char* menu;
- CREATE(menu, char, 2048);
- safestrncpy(menu, StrBuf->Value(&buf), 2047);
+ CREATE(menu, char, MAX_MENU_LENGTH);
+ safestrncpy(menu, StrBuf->Value(&buf), MAX_MENU_LENGTH - 1);
ShowWarning("NPC Menu too long! (source:%s / length:%d)\n",nd?nd->name:"Unknown",StrBuf->Length(&buf));
clif->scriptmenu(sd, st->oid, menu);
aFree(menu);
@@ -6118,13 +6112,13 @@ static BUILDIN(menu)
StrBuf->Destroy(&buf);
- if( sd->npc_menu >= 0xff )
+ if( sd->npc_menu >= MAX_MENU_OPTIONS )
{// client supports only up to 254 entries; 0 is not used and 255 is reserved for cancel; excess entries are displayed but cause 'uint8' overflow
- ShowWarning("buildin_menu: Too many options specified (current=%d, max=254).\n", sd->npc_menu);
+ ShowWarning("buildin_menu: Too many options specified (current=%d, max=%d).\n", sd->npc_menu, MAX_MENU_OPTIONS - 1);
script->reportsrc(st);
}
}
- else if( sd->npc_menu == 0xff )
+ else if( sd->npc_menu == MAX_MENU_OPTIONS )
{// Cancel was pressed
sd->state.menu_or_input = 0;
st->state = END;
@@ -6162,7 +6156,7 @@ static BUILDIN(menu)
st->state = END;
return false;
}
- pc->setreg(sd, script->add_str("@menu"), menu);
+ pc->setreg(sd, script->add_variable("@menu"), menu);
st->pos = script_getnum(st, i + 1);
st->state = GOTO;
}
@@ -6206,11 +6200,11 @@ static BUILDIN(select)
sd->state.menu_or_input = 1;
/* menus beyond this length crash the client (see bugreport:6402) */
- if( StrBuf->Length(&buf) >= 2047 ) {
+ if( StrBuf->Length(&buf) >= MAX_MENU_LENGTH - 1 ) {
struct npc_data * nd = map->id2nd(st->oid);
char* menu;
- CREATE(menu, char, 2048);
- safestrncpy(menu, StrBuf->Value(&buf), 2047);
+ CREATE(menu, char, MAX_MENU_LENGTH);
+ safestrncpy(menu, StrBuf->Value(&buf), MAX_MENU_LENGTH - 1);
ShowWarning("NPC Menu too long! (source:%s / length:%d)\n",nd?nd->name:"Unknown",StrBuf->Length(&buf));
clif->scriptmenu(sd, st->oid, menu);
aFree(menu);
@@ -6218,107 +6212,31 @@ static BUILDIN(select)
clif->scriptmenu(sd, st->oid, StrBuf->Value(&buf));
StrBuf->Destroy(&buf);
- if( sd->npc_menu >= 0xff ) {
- ShowWarning("buildin_select: Too many options specified (current=%d, max=254).\n", sd->npc_menu);
+ if( sd->npc_menu >= MAX_MENU_OPTIONS ) {
+ ShowWarning("buildin_select: Too many options specified (current=%d, max=%d).\n", sd->npc_menu, MAX_MENU_OPTIONS - 1);
script->reportsrc(st);
}
- } else if( sd->npc_menu == 0xff ) {// Cancel was pressed
+ } else if(sd->npc_menu == MAX_MENU_OPTIONS) { // Cancel was pressed
sd->state.menu_or_input = 0;
- st->state = END;
- } else {// return selected option
- int menu = 0;
- sd->state.menu_or_input = 0;
- for( i = 2; i <= script_lastdata(st); ++i ) {
- text = script_getstr(st, i);
- sd->npc_menu -= script->menu_countoptions(text, sd->npc_menu, &menu);
- if( sd->npc_menu <= 0 )
- break;// entry found
- }
- pc->setreg(sd, script->add_str("@menu"), menu);
- script_pushint(st, menu);
- st->state = RUN;
- }
- return true;
-}
-
-/// Displays a menu with options and returns the selected option.
-/// Behaves like 'menu' without the target labels, except when cancel is
-/// pressed.
-/// When cancel is pressed, the script continues and 255 is returned.
-///
-/// prompt(<option_text>{,<option_text>,...}) -> <selected_option>
-///
-/// @see menu
-static BUILDIN(prompt)
-{
- int i;
- const char *text;
- struct map_session_data *sd = script->rid2sd(st);
- if (sd == NULL)
- return true;
-
-#ifdef SECURE_NPCTIMEOUT
- sd->npc_idle_type = NPCT_MENU;
-#endif
-
- if( sd->state.menu_or_input == 0 )
- {
- struct StringBuf buf;
-
- StrBuf->Init(&buf);
- sd->npc_menu = 0;
- for( i = 2; i <= script_lastdata(st); ++i )
- {
- text = script_getstr(st, i);
- if( sd->npc_menu > 0 )
- StrBuf->AppendStr(&buf, ":");
- StrBuf->AppendStr(&buf, text);
- sd->npc_menu += script->menu_countoptions(text, 0, NULL);
- }
-
- st->state = RERUNLINE;
- sd->state.menu_or_input = 1;
-
- /* menus beyond this length crash the client (see bugreport:6402) */
- if( StrBuf->Length(&buf) >= 2047 ) {
- struct npc_data * nd = map->id2nd(st->oid);
- char* menu;
- CREATE(menu, char, 2048);
- safestrncpy(menu, StrBuf->Value(&buf), 2047);
- ShowWarning("NPC Menu too long! (source:%s / length:%d)\n",nd?nd->name:"Unknown",StrBuf->Length(&buf));
- clif->scriptmenu(sd, st->oid, menu);
- aFree(menu);
- } else
- clif->scriptmenu(sd, st->oid, StrBuf->Value(&buf));
- StrBuf->Destroy(&buf);
-
- if( sd->npc_menu >= 0xff )
- {
- ShowWarning("buildin_prompt: Too many options specified (current=%d, max=254).\n", sd->npc_menu);
- script->reportsrc(st);
+ if (strncmp(get_buildin_name(st), "prompt", 6) == 0) {
+ pc->setreg(sd, script->add_variable("@menu"), MAX_MENU_OPTIONS);
+ script_pushint(st, MAX_MENU_OPTIONS); // XXX: we should really be pushing -1 instead
+ st->state = RUN;
+ } else {
+ st->state = END;
}
- }
- else if( sd->npc_menu == 0xff )
- {// Cancel was pressed
- sd->state.menu_or_input = 0;
- pc->setreg(sd, script->add_str("@menu"), 0xff);
- script_pushint(st, 0xff);
- st->state = RUN;
- }
- else
- {// return selected option
+ } else {// return selected option
int menu = 0;
sd->state.menu_or_input = 0;
- for( i = 2; i <= script_lastdata(st); ++i )
- {
+ for( i = 2; i <= script_lastdata(st); ++i ) {
text = script_getstr(st, i);
sd->npc_menu -= script->menu_countoptions(text, sd->npc_menu, &menu);
if( sd->npc_menu <= 0 )
break;// entry found
}
- pc->setreg(sd, script->add_str("@menu"), menu);
+ pc->setreg(sd, script->add_variable("@menu"), menu); // TODO: throw a deprecation warning for scripts using @menu
script_pushint(st, menu);
st->state = RUN;
}
@@ -6937,7 +6855,7 @@ static BUILDIN(heal)
hp=script_getnum(st,2);
sp=script_getnum(st,3);
- status->heal(&sd->bl, hp, sp, 1);
+ status->heal(&sd->bl, hp, sp, STATUS_HEAL_FORCED);
return true;
}
/*==========================================
@@ -8780,32 +8698,23 @@ static BUILDIN(getcharid)
return true;
}
+
/*==========================================
* returns the GID of an NPC
*------------------------------------------*/
static BUILDIN(getnpcid)
{
- int num = script_getnum(st,2);
- struct npc_data* nd = NULL;
-
- if( script_hasdata(st,3) )
- {// unique npc name
- if( ( nd = npc->name2id(script_getstr(st,3)) ) == NULL )
- {
- ShowError("buildin_getnpcid: No such NPC '%s'.\n", script_getstr(st,3));
- script_pushint(st,0);
- return false;
+ if (script_hasdata(st, 2)) {
+ if (script_isinttype(st, 2)) {
+ // Deprecate old form - getnpcid(<type>{, <"npc name">})
+ ShowWarning("buildin_getnpcid: Use of type is deprecated. Format - getnpcid({<\"npc name\">})\n");
+ script_pushint(st, 0);
+ } else {
+ struct npc_data *nd = npc->name2id(script_getstr(st, 2));
+ script_pushint(st, (nd != NULL) ? nd->bl.id : 0);
}
- }
-
- switch (num) {
- case 0:
- script_pushint(st,nd ? nd->bl.id : st->oid);
- break;
- default:
- ShowError("buildin_getnpcid: invalid parameter (%d).\n", num);
- script_pushint(st,0);
- return false;
+ } else {
+ script_pushint(st, st->oid);
}
return true;
@@ -8857,19 +8766,19 @@ static BUILDIN(getpartymember)
if(p->party.member[i].account_id) {
switch (type) {
case 2:
- mapreg->setreg(reference_uid(script->add_str("$@partymemberaid"), j),p->party.member[i].account_id);
+ mapreg->setreg(reference_uid(script->add_variable("$@partymemberaid"), j),p->party.member[i].account_id);
break;
case 1:
- mapreg->setreg(reference_uid(script->add_str("$@partymembercid"), j),p->party.member[i].char_id);
+ mapreg->setreg(reference_uid(script->add_variable("$@partymembercid"), j),p->party.member[i].char_id);
break;
default:
- mapreg->setregstr(reference_uid(script->add_str("$@partymembername$"), j),p->party.member[i].name);
+ mapreg->setregstr(reference_uid(script->add_variable("$@partymembername$"), j),p->party.member[i].name);
}
j++;
}
}
}
- mapreg->setreg(script->add_str("$@partymembercount"),j);
+ mapreg->setreg(script->add_variable("$@partymembercount"),j);
return true;
}
@@ -8999,20 +8908,20 @@ static BUILDIN(getguildmember)
if ( g->member[i].account_id ) {
switch (type) {
case 2:
- mapreg->setreg(reference_uid(script->add_str("$@guildmemberaid"), j),g->member[i].account_id);
+ mapreg->setreg(reference_uid(script->add_variable("$@guildmemberaid"), j),g->member[i].account_id);
break;
case 1:
- mapreg->setreg(reference_uid(script->add_str("$@guildmembercid"), j), g->member[i].char_id);
+ mapreg->setreg(reference_uid(script->add_variable("$@guildmembercid"), j), g->member[i].char_id);
break;
default:
- mapreg->setregstr(reference_uid(script->add_str("$@guildmembername$"), j), g->member[i].name);
+ mapreg->setregstr(reference_uid(script->add_variable("$@guildmembername$"), j), g->member[i].name);
break;
}
j++;
}
}
}
- mapreg->setreg(script->add_str("$@guildmembercount"), j);
+ mapreg->setreg(script->add_variable("$@guildmembercount"), j);
return true;
}
@@ -9304,7 +9213,7 @@ static BUILDIN(repair)
if(num==repaircounter) {
sd->status.inventory[i].attribute |= ATTR_BROKEN;
sd->status.inventory[i].attribute ^= ATTR_BROKEN;
- clif->equiplist(sd);
+ clif->equipList(sd);
clif->produce_effect(sd, 0, sd->status.inventory[i].nameid);
clif->misceffect(&sd->bl, 3);
break;
@@ -9341,7 +9250,7 @@ static BUILDIN(repairall)
if(repaircounter)
{
clif->misceffect(&sd->bl, 3);
- clif->equiplist(sd);
+ clif->equipList(sd);
}
return true;
@@ -10917,13 +10826,13 @@ static BUILDIN(getmobdrops)
if( itemdb->exists(monster->dropitem[i].nameid) == NULL )
continue;
- mapreg->setreg(reference_uid(script->add_str("$@MobDrop_item"), j), monster->dropitem[i].nameid);
- mapreg->setreg(reference_uid(script->add_str("$@MobDrop_rate"), j), monster->dropitem[i].p);
+ mapreg->setreg(reference_uid(script->add_variable("$@MobDrop_item"), j), monster->dropitem[i].nameid);
+ mapreg->setreg(reference_uid(script->add_variable("$@MobDrop_rate"), j), monster->dropitem[i].p);
j++;
}
- mapreg->setreg(script->add_str("$@MobDrop_count"), j);
+ mapreg->setreg(script->add_variable("$@MobDrop_count"), j);
script_pushint(st, 1);
return true;
@@ -11382,7 +11291,7 @@ static int buildin_getunits_sub(struct block_list *bl, va_list ap)
(const void *)h64BPTRSIZE(bl->id), ref);
(*count)++;
- return 0;
+ return 1;
}
static int buildin_getunits_sub_pc(struct map_session_data *sd, va_list ap)
@@ -11454,18 +11363,10 @@ static BUILDIN(getunits)
int16 x2 = script_getnum(st, 8);
int16 y2 = script_getnum(st, 9);
- // FIXME: map_foreachinarea does NOT stop iterating when the callback
- // function returns -1. we still limit the array size, but
- // this doesn't break the loop. We need a foreach function
- // that behaves like map_foreachiddb, but for areas
- map->foreachinarea(buildin_getunits_sub, m, x1, y1, x2, y2, type,
+ map->forcountinarea(buildin_getunits_sub, m, x1, y1, x2, y2, limit, type,
st, sd, id, start, &count, limit, name, ref, type);
} else {
- // FIXME: map_foreachinmap does NOT stop iterating when the callback
- // function returns -1. we still limit the array size, but
- // this doesn't break the loop. We need a foreach function
- // that behaves like map_foreachiddb, but for maps
- map->foreachinmap(buildin_getunits_sub, m, type,
+ map->forcountinmap(buildin_getunits_sub, m, limit, type,
st, sd, id, start, &count, limit, name, ref, type);
}
} else {
@@ -12274,7 +12175,9 @@ static BUILDIN(sc_end)
}
//This should help status_change_end force disabling the SC in case it has no limit.
- sce->val1 = sce->val2 = sce->val3 = sce->val4 = 0;
+ if (type != SC_BERSERK)
+ sce->val1 = 0; // SC_BERSERK requires skill_lv that's stored in sce->val1 when being removed [KirieZ]
+ sce->val2 = sce->val3 = sce->val4 = 0;
status_change_end(bl, (sc_type)type, INVALID_TIMER);
}
else
@@ -12361,9 +12264,18 @@ static BUILDIN(getstatus)
*------------------------------------------*/
static BUILDIN(debugmes)
{
- const char *str;
- str=script_getstr(st,2);
- ShowDebug("script debug : %d %d : %s\n",st->rid,st->oid,str);
+ struct StringBuf buf;
+ StrBuf->Init(&buf);
+
+ if (!script->sprintf_helper(st, 2, &buf)) {
+ StrBuf->Destroy(&buf);
+ script_pushint(st, 0);
+ return false;
+ }
+
+ ShowDebug("script debug : %d %d : %s\n", st->rid, st->oid, StrBuf->Value(&buf));
+ StrBuf->Destroy(&buf);
+ script_pushint(st, 1);
return true;
}
@@ -12854,7 +12766,7 @@ static BUILDIN(getwaitingroomstate)
for (i = 0; i < cd->users; i++) {
struct map_session_data *sd = cd->usersd[i];
nullpo_retr(false, sd);
- mapreg->setreg(reference_uid(script->add_str("$@chatmembers"), i), sd->bl.id);
+ mapreg->setreg(reference_uid(script->add_variable("$@chatmembers"), i), sd->bl.id);
}
script_pushint(st, cd->users);
break;
@@ -12924,7 +12836,7 @@ static BUILDIN(warpwaitingpc)
pc->payzeny(sd, cd->zeny, LOG_TYPE_NPC, NULL);
}
- mapreg->setreg(reference_uid(script->add_str("$@warpwaitingpc"), i), sd->bl.id);
+ mapreg->setreg(reference_uid(script->add_variable("$@warpwaitingpc"), i), sd->bl.id);
if( strcmp(map_name,"Random") == 0 )
pc->randomwarp(sd,CLR_TELEPORT);
@@ -12933,7 +12845,7 @@ static BUILDIN(warpwaitingpc)
else
pc->setpos(sd, script->mapindexname2id(st,map_name), x, y, CLR_OUTSIGHT);
}
- mapreg->setreg(script->add_str("$@warpwaitingpcnum"), i);
+ mapreg->setreg(script->add_variable("$@warpwaitingpcnum"), i);
return true;
}
@@ -14410,6 +14322,9 @@ static BUILDIN(getiteminfo)
case ITEMINFO_VIEWSPRITE:
script_pushint(st, it->view_sprite);
break;
+ case ITEMINFO_TRADE:
+ script_pushint(st, it->flag.trade_restriction);
+ break;
default:
ShowError("buildin_getiteminfo: Invalid item type %d.\n", n);
script_pushint(st,-1);
@@ -14676,6 +14591,9 @@ static BUILDIN(setiteminfo)
case ITEMINFO_VIEWSPRITE:
it->view_sprite = value;
break;
+ case ITEMINFO_TRADE:
+ it->flag.trade_restriction = value;
+ break;
default:
ShowError("buildin_setiteminfo: invalid type %d.\n", n);
script_pushint(st,-1);
@@ -14809,34 +14727,34 @@ static BUILDIN(getinventorylist)
for(i=0;i<MAX_INVENTORY;i++) {
if(sd->status.inventory[i].nameid > 0 && sd->status.inventory[i].amount > 0) {
- pc->setreg(sd,reference_uid(script->add_str("@inventorylist_id"), j),sd->status.inventory[i].nameid);
- pc->setreg(sd,reference_uid(script->add_str("@inventorylist_amount"), j),sd->status.inventory[i].amount);
+ pc->setreg(sd,reference_uid(script->add_variable("@inventorylist_id"), j),sd->status.inventory[i].nameid);
+ pc->setreg(sd,reference_uid(script->add_variable("@inventorylist_amount"), j),sd->status.inventory[i].amount);
if(sd->status.inventory[i].equip) {
- pc->setreg(sd,reference_uid(script->add_str("@inventorylist_equip"), j),pc->equippoint(sd,i));
+ pc->setreg(sd,reference_uid(script->add_variable("@inventorylist_equip"), j),pc->equippoint(sd,i));
} else {
- pc->setreg(sd,reference_uid(script->add_str("@inventorylist_equip"), j),0);
+ pc->setreg(sd,reference_uid(script->add_variable("@inventorylist_equip"), j),0);
}
- pc->setreg(sd,reference_uid(script->add_str("@inventorylist_refine"), j),sd->status.inventory[i].refine);
- pc->setreg(sd,reference_uid(script->add_str("@inventorylist_identify"), j),sd->status.inventory[i].identify);
- pc->setreg(sd,reference_uid(script->add_str("@inventorylist_attribute"), j),sd->status.inventory[i].attribute);
+ pc->setreg(sd,reference_uid(script->add_variable("@inventorylist_refine"), j),sd->status.inventory[i].refine);
+ pc->setreg(sd,reference_uid(script->add_variable("@inventorylist_identify"), j),sd->status.inventory[i].identify);
+ pc->setreg(sd,reference_uid(script->add_variable("@inventorylist_attribute"), j),sd->status.inventory[i].attribute);
for (k = 0; k < MAX_SLOTS; k++) {
sprintf(card_var, "@inventorylist_card%d",k+1);
- pc->setreg(sd,reference_uid(script->add_str(card_var), j),sd->status.inventory[i].card[k]);
+ pc->setreg(sd,reference_uid(script->add_variable(card_var), j),sd->status.inventory[i].card[k]);
}
for (k = 0; k < MAX_ITEM_OPTIONS; k++) {
sprintf(card_var, "@inventorylist_opt_id%d", k + 1);
- pc->setreg(sd, reference_uid(script->add_str(card_var), j), sd->status.inventory[i].option[k].index);
+ pc->setreg(sd, reference_uid(script->add_variable(card_var), j), sd->status.inventory[i].option[k].index);
sprintf(card_var, "@inventorylist_opt_val%d", k + 1);
- pc->setreg(sd, reference_uid(script->add_str(card_var), j), sd->status.inventory[i].option[k].value);
+ pc->setreg(sd, reference_uid(script->add_variable(card_var), j), sd->status.inventory[i].option[k].value);
sprintf(card_var, "@inventorylist_opt_param%d", k + 1);
- pc->setreg(sd, reference_uid(script->add_str(card_var), j), sd->status.inventory[i].option[k].param);
+ pc->setreg(sd, reference_uid(script->add_variable(card_var), j), sd->status.inventory[i].option[k].param);
}
- pc->setreg(sd,reference_uid(script->add_str("@inventorylist_expire"), j),sd->status.inventory[i].expire_time);
- pc->setreg(sd,reference_uid(script->add_str("@inventorylist_bound"), j),sd->status.inventory[i].bound);
+ pc->setreg(sd,reference_uid(script->add_variable("@inventorylist_expire"), j),sd->status.inventory[i].expire_time);
+ pc->setreg(sd,reference_uid(script->add_variable("@inventorylist_bound"), j),sd->status.inventory[i].bound);
j++;
}
}
- pc->setreg(sd,script->add_str("@inventorylist_count"),j);
+ pc->setreg(sd,script->add_variable("@inventorylist_count"),j);
return true;
}
@@ -14850,30 +14768,30 @@ static BUILDIN(getcartinventorylist)
for(i=0;i<MAX_CART;i++) {
if(sd->status.cart[i].nameid > 0 && sd->status.cart[i].amount > 0) {
- pc->setreg(sd,reference_uid(script->add_str("@cartinventorylist_id"), j),sd->status.cart[i].nameid);
- pc->setreg(sd,reference_uid(script->add_str("@cartinventorylist_amount"), j),sd->status.cart[i].amount);
- pc->setreg(sd,reference_uid(script->add_str("@cartinventorylist_equip"), j),sd->status.cart[i].equip);
- pc->setreg(sd,reference_uid(script->add_str("@cartinventorylist_refine"), j),sd->status.cart[i].refine);
- pc->setreg(sd,reference_uid(script->add_str("@cartinventorylist_identify"), j),sd->status.cart[i].identify);
- pc->setreg(sd,reference_uid(script->add_str("@cartinventorylist_attribute"), j),sd->status.cart[i].attribute);
+ pc->setreg(sd,reference_uid(script->add_variable("@cartinventorylist_id"), j),sd->status.cart[i].nameid);
+ pc->setreg(sd,reference_uid(script->add_variable("@cartinventorylist_amount"), j),sd->status.cart[i].amount);
+ pc->setreg(sd,reference_uid(script->add_variable("@cartinventorylist_equip"), j),sd->status.cart[i].equip);
+ pc->setreg(sd,reference_uid(script->add_variable("@cartinventorylist_refine"), j),sd->status.cart[i].refine);
+ pc->setreg(sd,reference_uid(script->add_variable("@cartinventorylist_identify"), j),sd->status.cart[i].identify);
+ pc->setreg(sd,reference_uid(script->add_variable("@cartinventorylist_attribute"), j),sd->status.cart[i].attribute);
for (k = 0; k < MAX_SLOTS; k++) {
sprintf(card_var, "@cartinventorylist_card%d",k+1);
- pc->setreg(sd,reference_uid(script->add_str(card_var), j),sd->status.cart[i].card[k]);
+ pc->setreg(sd,reference_uid(script->add_variable(card_var), j),sd->status.cart[i].card[k]);
}
for (k = 0; k < MAX_ITEM_OPTIONS; k++) {
sprintf(card_var, "@cartinventorylist_opt_id%d", k + 1);
- pc->setreg(sd, reference_uid(script->add_str(card_var), j), sd->status.cart[i].option[k].index);
+ pc->setreg(sd, reference_uid(script->add_variable(card_var), j), sd->status.cart[i].option[k].index);
sprintf(card_var, "@cartinventorylist_opt_val%d", k + 1);
- pc->setreg(sd, reference_uid(script->add_str(card_var), j), sd->status.cart[i].option[k].value);
+ pc->setreg(sd, reference_uid(script->add_variable(card_var), j), sd->status.cart[i].option[k].value);
sprintf(card_var, "@cartinventorylist_opt_param%d", k + 1);
- pc->setreg(sd, reference_uid(script->add_str(card_var), j), sd->status.cart[i].option[k].param);
+ pc->setreg(sd, reference_uid(script->add_variable(card_var), j), sd->status.cart[i].option[k].param);
}
- pc->setreg(sd,reference_uid(script->add_str("@cartinventorylist_expire"), j),sd->status.cart[i].expire_time);
- pc->setreg(sd,reference_uid(script->add_str("@cartinventorylist_bound"), j),sd->status.cart[i].bound);
+ pc->setreg(sd,reference_uid(script->add_variable("@cartinventorylist_expire"), j),sd->status.cart[i].expire_time);
+ pc->setreg(sd,reference_uid(script->add_variable("@cartinventorylist_bound"), j),sd->status.cart[i].bound);
j++;
}
}
- pc->setreg(sd,script->add_str("@cartinventorylist_count"),j);
+ pc->setreg(sd,script->add_variable("@cartinventorylist_count"),j);
return true;
}
@@ -14885,13 +14803,13 @@ static BUILDIN(getskilllist)
return true;
for (i = 0; i < MAX_SKILL_DB; i++) {
if(sd->status.skill[i].id > 0 && sd->status.skill[i].lv > 0) {
- pc->setreg(sd,reference_uid(script->add_str("@skilllist_id"), j),sd->status.skill[i].id);
- pc->setreg(sd,reference_uid(script->add_str("@skilllist_lv"), j),sd->status.skill[i].lv);
- pc->setreg(sd,reference_uid(script->add_str("@skilllist_flag"), j),sd->status.skill[i].flag);
+ pc->setreg(sd,reference_uid(script->add_variable("@skilllist_id"), j),sd->status.skill[i].id);
+ pc->setreg(sd,reference_uid(script->add_variable("@skilllist_lv"), j),sd->status.skill[i].lv);
+ pc->setreg(sd,reference_uid(script->add_variable("@skilllist_flag"), j),sd->status.skill[i].flag);
j++;
}
}
- pc->setreg(sd,script->add_str("@skilllist_count"),j);
+ pc->setreg(sd,script->add_variable("@skilllist_count"),j);
return true;
}
@@ -15358,6 +15276,50 @@ static BUILDIN(specialeffect2)
return true;
}
+static BUILDIN(removespecialeffect)
+{
+ struct block_list *bl = NULL;
+ int type = script_getnum(st, 2);
+ enum send_target target = AREA;
+
+ if (script_hasdata(st, 3)) {
+ target = script_getnum(st, 3);
+ }
+
+ if (script_hasdata(st, 4)) {
+ if (script_isstringtype(st, 4)) {
+ struct npc_data *nd = npc->name2id(script_getstr(st, 4));
+ if (nd != NULL) {
+ bl = &nd->bl;
+ }
+ } else {
+ bl = map->id2bl(script_getnum(st, 4));
+ }
+ } else {
+ bl = map->id2bl(st->oid);
+ }
+
+ if (bl == NULL) {
+ return true;
+ }
+
+ if (target == SELF) {
+ struct map_session_data *sd;
+ if (script_hasdata(st, 5)) {
+ sd = map->id2sd(script_getnum(st, 5));
+ } else {
+ sd = script->rid2sd(st);
+ }
+ if (sd != NULL) {
+ clif->removeSpecialEffect_single(bl, type, &sd->bl);
+ }
+ } else {
+ clif->removeSpecialEffect(bl, type, target);
+ }
+
+ return true;
+}
+
/*==========================================
* Nude [Valaris]
*------------------------------------------*/
@@ -16746,6 +16708,63 @@ static BUILDIN(getdatatype)
return true;
}
+static BUILDIN(data_to_string)
+{
+ if (script_hasdata(st, 2)) {
+ struct script_data *data = script_getdata(st, 2);
+
+ if (data_isstring(data)) {
+ script_pushcopy(st, 2);
+ } else if (data_isint(data)) {
+ char *str = NULL;
+
+ CREATE(str, char, 20);
+ safesnprintf(str, 20, "%"PRId64"", data->u.num);
+ script_pushstr(st, str);
+ } else if (data_islabel(data)) {
+ const char *str = "";
+
+ // XXX: because all we have is the label pos we can't be sure which
+ // one is the correct label if more than one has the same pos.
+ // We might want to store both the pos and str_data index in
+ // data->u.num, similar to how C_NAME stores both the array
+ // index and str_data index in u.num with bitmasking. This
+ // would also avoid the awkward for() loops as we could
+ // directly access the string with script->get_str().
+
+ if (st->oid) {
+ struct npc_data *nd = map->id2nd(st->oid);
+
+ for (int i = 0; i < nd->u.scr.label_list_num; ++i) {
+ if (nd->u.scr.label_list[i].pos == data->u.num) {
+ str = nd->u.scr.label_list[i].name;
+ break;
+ }
+ }
+ } else {
+ for (int i = LABEL_START; script->str_data[i].next != 0; i = script->str_data[i].next) {
+ if (script->str_data[i].label == data->u.num) {
+ str = script->get_str(i);
+ break;
+ }
+ }
+ }
+
+ script_pushconststr(st, str);
+ } else if (data_isreference(data)) {
+ script_pushstrcopy(st, reference_getname(data));
+ } else {
+ ShowWarning("script:data_to_string: unknown data type!\n");
+ script->reportdata(data);
+ script_pushconststr(st, "");
+ }
+ } else {
+ script_pushconststr(st, ""); // NIL
+ }
+
+ return true;
+}
+
//=======================================================
// chr <int>
//-------------------------------------------------------
@@ -17798,12 +17817,11 @@ static BUILDIN(getd)
if (sscanf(buffer, "%99[^[][%d]", varname, &elem) < 2)
elem = 0;
- id = script->search_str(varname);
+ id = script->add_variable(varname);
- if (id < 0) {
- id = script->add_str(varname);
- script->str_data[id].type = C_NAME;
- } else if (script->str_data[id].type != C_NAME) {
+ if (script->str_data[id].type != C_NAME && // variable
+ script->str_data[id].type != C_PARAM && // param
+ script->str_data[id].type != C_INT) { // constant
ShowError("script:getd: `%s` is already used by something that is not a variable.\n", varname);
st->state = END;
return false;
@@ -18763,7 +18781,7 @@ static BUILDIN(setunitdata)
md->level = val;
break;
case UDT_HP:
- status->set_hp(bl, (unsigned int) val, 0);
+ status->set_hp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
clif->charnameack(0, &md->bl);
break;
case UDT_MAXHP:
@@ -18771,7 +18789,7 @@ static BUILDIN(setunitdata)
clif->charnameack(0, &md->bl);
break;
case UDT_SP:
- status->set_sp(bl, (unsigned int) val, 0);
+ status->set_sp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXSP:
md->status.max_sp = (unsigned int) val;
@@ -18932,13 +18950,13 @@ static BUILDIN(setunitdata)
hd->homunculus.level = (short) val;
break;
case UDT_HP:
- status->set_hp(bl, (unsigned int) val, 0);
+ status->set_hp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXHP:
hd->homunculus.max_hp = val;
break;
case UDT_SP:
- status->set_sp(bl, (unsigned int) val, 0);
+ status->set_sp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXSP:
hd->homunculus.max_sp = val;
@@ -19071,13 +19089,13 @@ static BUILDIN(setunitdata)
pd->pet.level = (short) val;
break;
case UDT_HP:
- status->set_hp(bl, (unsigned int) val, 0);
+ status->set_hp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXHP:
pd->status.max_hp = (unsigned int) val;
break;
case UDT_SP:
- status->set_sp(bl, (unsigned int) val, 0);
+ status->set_sp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXSP:
pd->status.max_sp = (unsigned int) val;
@@ -19205,13 +19223,13 @@ static BUILDIN(setunitdata)
mc->base_status.size = (unsigned char) val;
break;
case UDT_HP:
- status->set_hp(bl, (unsigned int) val, 0);
+ status->set_hp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXHP:
mc->base_status.max_hp = (unsigned int) val;
break;
case UDT_SP:
- status->set_sp(bl, (unsigned int) val, 0);
+ status->set_sp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXSP:
mc->base_status.max_sp = (unsigned int) val;
@@ -19339,13 +19357,13 @@ static BUILDIN(setunitdata)
ed->base_status.size = (unsigned char) val;
break;
case UDT_HP:
- status->set_hp(bl, (unsigned int) val, 0);
+ status->set_hp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXHP:
ed->base_status.max_hp = (unsigned int) val;
break;
case UDT_SP:
- status->set_sp(bl, (unsigned int) val, 0);
+ status->set_sp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXSP:
ed->base_status.max_sp = (unsigned int) val;
@@ -19471,13 +19489,13 @@ static BUILDIN(setunitdata)
nd->level = (unsigned short) val;
break;
case UDT_HP:
- status->set_hp(bl, (unsigned int) val, 0);
+ status->set_hp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXHP:
nd->status.max_hp = (unsigned int) val;
break;
case UDT_SP:
- status->set_sp(bl, (unsigned int) val, 0);
+ status->set_sp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXSP:
nd->status.max_sp = (unsigned int) val;
@@ -20631,7 +20649,7 @@ static BUILDIN(getvariableofpc)
}
if (!sd->regs.vars)
- sd->regs.vars = i64db_alloc(DB_OPT_RELEASE_DATA);
+ sd->regs.vars = i64db_alloc(DB_OPT_BASE);
script->push_val(st->stack, C_NAME, reference_getuid(data), &sd->regs);
return true;
@@ -20788,7 +20806,7 @@ static BUILDIN(mercenary_heal)
hp = script_getnum(st,2);
sp = script_getnum(st,3);
- status->heal(&sd->md->bl, hp, sp, 0);
+ status->heal(&sd->md->bl, hp, sp, STATUS_HEAL_DEFAULT);
return true;
}
@@ -21051,17 +21069,26 @@ static BUILDIN(setquestinfo)
}
case QINFO_ITEM:
{
- struct item item = { 0 };
+ struct questinfo_itemreq item = { 0 };
item.nameid = script_getnum(st, 3);
- item.amount = script_getnum(st, 4);
+ item.min = script_hasdata(st, 4) ? script_getnum(st, 4) : 0;
+ item.max = script_hasdata(st, 5) ? script_getnum(st, 5) : 0;
if (itemdb->exists(item.nameid) == NULL) {
ShowWarning("buildin_setquestinfo: non existing item (%d) have been given.\n", item.nameid);
return false;
}
- if (item.amount <= 0 || item.amount > MAX_AMOUNT) {
- ShowWarning("buildin_setquestinfo: given amount (%d) must be bigger than 0 and smaller than %d.\n", item.amount, MAX_AMOUNT + 1);
+ if (item.min > item.max) {
+ ShowWarning("buildin_setquestinfo: minimal amount (%d) is bigger than the maximal amount (%d).\n", item.min, item.max);
+ return false;
+ }
+ if (item.min < 0 || item.min > MAX_AMOUNT) {
+ ShowWarning("buildin_setquestinfo: given amount (%d) must be bigger than or equal to 0 and smaller than %d.\n", item.min, MAX_AMOUNT + 1);
+ return false;
+ }
+ if (item.max < 0 || item.max > MAX_AMOUNT) {
+ ShowWarning("buildin_setquestinfo: given amount (%d) must be bigger than or equal to 0 and smaller than %d.\n", item.max, MAX_AMOUNT + 1);
return false;
}
if (VECTOR_LENGTH(qi->items) == 0)
@@ -21114,6 +21141,17 @@ static BUILDIN(setquestinfo)
VECTOR_PUSH(qi->quest_requirement, quest_req);
break;
}
+ case QINFO_MERCENARY_CLASS:
+ {
+ int mer_class = script_getnum(st, 3);
+
+ if (!mercenary->class(mer_class)) {
+ ShowWarning("buildin_setquestinfo: invalid mercenary class given (%d).\n", mer_class);
+ return false;
+ }
+ qi->mercenary_class = mer_class;
+ break;
+ }
default:
ShowWarning("buildin_setquestinfo: invalid type given (%u).\n", type);
return false;
@@ -21267,18 +21305,7 @@ static BUILDIN(showevent)
}
}
-#if PACKETVER >= 20170315
- if (icon < 0 || (icon > 10 && icon != 9999))
- icon = 9999;
-#elif PACKETVER >= 20120410
- if (icon < 0 || (icon > 8 && icon != 9999) || icon == 7)
- icon = 9999; // Default to nothing if icon id is invalid.
-#else
- if (icon < 0 || icon > 7)
- icon = 0;
- else
- icon = icon + 1;
-#endif
+ icon = quest->questinfo_validate_icon(icon);
clif->quest_show_event(sd, &nd->bl, icon, color);
return true;
@@ -21404,12 +21431,12 @@ static BUILDIN(waitingroom2bg)
for (i = 0; i < n && i < MAX_BG_MEMBERS; i++) {
struct map_session_data *sd = cd->usersd[i];
if (sd != NULL && bg->team_join(bg_id, sd))
- mapreg->setreg(reference_uid(script->add_str("$@arenamembers"), i), sd->bl.id);
+ mapreg->setreg(reference_uid(script->add_variable("$@arenamembers"), i), sd->bl.id);
else
- mapreg->setreg(reference_uid(script->add_str("$@arenamembers"), i), 0);
+ mapreg->setreg(reference_uid(script->add_variable("$@arenamembers"), i), 0);
}
- mapreg->setreg(script->add_str("$@arenamembersnum"), i);
+ mapreg->setreg(script->add_variable("$@arenamembersnum"), i);
script_pushint(st,bg_id);
return true;
}
@@ -22471,18 +22498,52 @@ static BUILDIN(getcharip)
return true;
}
+enum function_type {
+ FUNCTION_IS_NONE = 0,
+ FUNCTION_IS_COMMAND,
+ FUNCTION_IS_GLOBAL,
+ FUNCTION_IS_LOCAL,
+ FUNCTION_IS_LABEL,
+};
+
/**
- * is_function(<function name>) -> 1 if function exists, 0 otherwise
+ * is_function(<function name>)
**/
static BUILDIN(is_function)
{
- const char* str = script_getstr(st,2);
+ const char *str = script_getstr(st, 2);
+ enum function_type type = FUNCTION_IS_NONE;
- if( strdb_exists(script->userfunc_db, str) )
- script_pushint(st,1);
- else
- script_pushint(st,0);
+ // TODO: add support for exported functions (#2142)
+
+ if (strdb_exists(script->userfunc_db, str)) {
+ type = FUNCTION_IS_GLOBAL;
+ } else {
+ int n = script->search_str(str);
+
+ if (n >= 0) {
+ switch (script->str_data[n].type) {
+ case C_FUNC:
+ type = FUNCTION_IS_COMMAND;
+ break;
+ case C_USERFUNC:
+ case C_USERFUNC_POS:
+ type = FUNCTION_IS_LOCAL;
+ break;
+ case C_POS:
+ type = FUNCTION_IS_LABEL;
+ break;
+ case C_NAME:
+ if (script->str_data[n].label >= 0) {
+ // WTF... ?
+ // for some reason local functions can have type C_NAME
+ type = FUNCTION_IS_LOCAL;
+ }
+ }
+ }
+ }
+ script_pushint(st, type);
return true;
}
@@ -23587,7 +23648,7 @@ static BUILDIN(countbound)
(!type && sd->status.inventory[i].bound > 0) ||
(type && sd->status.inventory[i].bound == type)
)) {
- pc->setreg(sd,reference_uid(script->add_str("@bound_items"), k),sd->status.inventory[i].nameid);
+ pc->setreg(sd,reference_uid(script->add_variable("@bound_items"), k),sd->status.inventory[i].nameid);
k++;
j += sd->status.inventory[i].amount;
}
@@ -24655,6 +24716,80 @@ static BUILDIN(openstylist)
return true;
}
+static BUILDIN(msgtable)
+{
+ struct map_session_data *sd = script_rid2sd(st);
+ if (sd == NULL)
+ return false;
+
+ const enum clif_messages msgId = script_getnum(st, 2);
+ if (script_hasdata(st, 3)) {
+ clif->msgtable_color(sd, msgId, script_getnum(st, 3));
+ } else {
+ clif->msgtable(sd, msgId);
+ }
+
+ return true;
+}
+
+static BUILDIN(msgtable2)
+{
+ struct map_session_data *sd = script_rid2sd(st);
+ if (sd == NULL)
+ return false;
+
+ const enum clif_messages msgId = script_getnum(st, 2);
+ if (script_isstringtype(st, 3)) {
+ const char *value = script_getstr(st, 3);
+ if (script_hasdata(st, 4)) {
+ clif->msgtable_str_color(sd, msgId, value, script_getnum(st, 4));
+ } else {
+ clif->msgtable_str(sd, msgId, value);
+ }
+ } else {
+ const int value = script_getnum(st, 3);
+ clif->msgtable_num(sd, msgId, value);
+ }
+
+ return true;
+}
+
+// show/hide camera info
+static BUILDIN(camerainfo)
+{
+ struct map_session_data *sd = script_rid2sd(st);
+ if (sd == NULL)
+ return false;
+
+ clif->camera_showWindow(sd);
+ return true;
+}
+
+// allow change some camera parameters
+static BUILDIN(changecamera)
+{
+ struct map_session_data *sd = script_rid2sd(st);
+ if (sd == NULL)
+ return false;
+
+ enum send_target target = SELF;
+ if (script_hasdata(st, 5)) {
+ target = script_getnum(st, 5);
+ }
+ clif->camera_change(sd, (float)script_getnum(st, 2), (float)script_getnum(st, 3), (float)script_getnum(st, 4), target);
+ return true;
+}
+
+// update preview window to given item
+static BUILDIN(itempreview)
+{
+ struct map_session_data *sd = script_rid2sd(st);
+ if (sd == NULL)
+ return false;
+ clif->item_preview(sd, script_getnum(st, 2));
+ return true;
+}
+
/**
* Adds a built-in script function.
*
@@ -24816,14 +24951,14 @@ static void script_parse_builtin(void)
BUILDIN_DEF(__setr,"rv?"),
// NPC interaction
- BUILDIN_DEF(mes,"s"),
- BUILDIN_DEF(mesf,"s*"),
+ BUILDIN_DEF(mes, "?"),
+ BUILDIN_DEF(mesf, "s*"),
BUILDIN_DEF(next,""),
BUILDIN_DEF(close,""),
BUILDIN_DEF(close2,""),
BUILDIN_DEF(menu,"sl*"),
BUILDIN_DEF(select,"s*"), //for future jA script compatibility
- BUILDIN_DEF(prompt,"s*"),
+ BUILDIN_DEF2(select, "prompt", "s*"),
//
BUILDIN_DEF(goto,"l"),
BUILDIN_DEF(callsub,"l*"),
@@ -24872,7 +25007,7 @@ static void script_parse_builtin(void)
BUILDIN_DEF(readparam,"i?"),
BUILDIN_DEF(setparam,"ii?"),
BUILDIN_DEF(getcharid,"i?"),
- BUILDIN_DEF(getnpcid,"i?"),
+ BUILDIN_DEF(getnpcid, "?"),
BUILDIN_DEF(getpartyname,"i"),
BUILDIN_DEF(getpartymember,"i?"),
BUILDIN_DEF(getpartyleader,"i?"),
@@ -24975,7 +25110,7 @@ static void script_parse_builtin(void)
BUILDIN_DEF(sc_end,"i?"),
BUILDIN_DEF(getstatus, "i?"),
BUILDIN_DEF(getscrate,"ii?"),
- BUILDIN_DEF(debugmes,"v"),
+ BUILDIN_DEF(debugmes,"v*"),
BUILDIN_DEF2(catchpet,"pet","i"),
BUILDIN_DEF2(birthpet,"bpet",""),
BUILDIN_DEF(resetlvl,"i"),
@@ -25051,6 +25186,7 @@ static void script_parse_builtin(void)
BUILDIN_DEF(skilleffect,"vi"), // skill effect [Celest]
BUILDIN_DEF(npcskilleffect,"viii"), // npc skill effect [Valaris]
BUILDIN_DEF(specialeffect,"i???"), // npc skill effect [Valaris]
+ BUILDIN_DEF(removespecialeffect,"i???"),
BUILDIN_DEF_DEPRECATED(specialeffect2,"i??"), // skill effect on players[Valaris]
BUILDIN_DEF(nude,""), // nude command [Valaris]
BUILDIN_DEF(mapwarp,"ssii??"), // Added by RoVeRT
@@ -25103,6 +25239,8 @@ static void script_parse_builtin(void)
BUILDIN_DEF(charat,"si"),
BUILDIN_DEF(isstr,"v"),
BUILDIN_DEF(getdatatype, "?"),
+ BUILDIN_DEF(data_to_string, "?"),
+ BUILDIN_DEF2(getd, "string_to_data", "?"),
BUILDIN_DEF(chr,"i"),
BUILDIN_DEF(ord,"s"),
BUILDIN_DEF(setchar,"ssi"),
@@ -25231,6 +25369,8 @@ static void script_parse_builtin(void)
BUILDIN_DEF(buyingstore,"i"),
BUILDIN_DEF(searchstores,"ii"),
BUILDIN_DEF(showdigit,"i?"),
+ BUILDIN_DEF(msgtable, "i?"),
+ BUILDIN_DEF(msgtable2, "iv?"),
// WoE SE
BUILDIN_DEF(agitstart2,""),
BUILDIN_DEF(agitend2,""),
@@ -25310,7 +25450,7 @@ static void script_parse_builtin(void)
//Quest Log System [Inkfish]
BUILDIN_DEF(questinfo, "i?"),
- BUILDIN_DEF(setquestinfo, "i??"),
+ BUILDIN_DEF(setquestinfo, "i???"),
BUILDIN_DEF(setquest, "i?"),
BUILDIN_DEF(erasequest, "i?"),
BUILDIN_DEF(completequest, "i?"),
@@ -25382,6 +25522,12 @@ static void script_parse_builtin(void)
// -- HatEffect
BUILDIN_DEF(hateffect, "ii"),
+
+ // camera
+ BUILDIN_DEF(camerainfo, ""),
+ BUILDIN_DEF(changecamera, "iii?"),
+
+ BUILDIN_DEF(itempreview, "i"),
};
int i, len = ARRAYLENGTH(BUILDIN);
RECREATE(script->buildin, char *, script->buildin_count + len); // Pre-alloc to speed up
@@ -25428,6 +25574,8 @@ static void script_hardcoded_constants(void)
script->set_constant("MAX_BG_MEMBERS",MAX_BG_MEMBERS,false, false);
script->set_constant("MAX_CHAT_USERS",MAX_CHAT_USERS,false, false);
script->set_constant("MAX_REFINE",MAX_REFINE,false, false);
+ script->set_constant("MAX_MENU_OPTIONS", MAX_MENU_OPTIONS, false, false);
+ script->set_constant("MAX_MENU_LENGTH", MAX_MENU_LENGTH, false, false);
script->constdb_comment("status options");
script->set_constant("Option_Nothing",OPTION_NOTHING,false, false);
@@ -25697,6 +25845,7 @@ static void script_hardcoded_constants(void)
script->set_constant("ITEMINFO_VIEWID", ITEMINFO_VIEWID, false, false);
script->set_constant("ITEMINFO_MATK", ITEMINFO_MATK, false, false);
script->set_constant("ITEMINFO_VIEWSPRITE", ITEMINFO_VIEWSPRITE, false, false);
+ script->set_constant("ITEMINFO_TRADE", ITEMINFO_TRADE, false, false);
script->constdb_comment("monster skill states");
script->set_constant("MSS_ANY", MSS_ANY, false, false);
@@ -25780,6 +25929,27 @@ static void script_hardcoded_constants(void)
script->set_constant("QINFO_HOMUN_LEVEL", QINFO_HOMUN_LEVEL, false, false);
script->set_constant("QINFO_HOMUN_TYPE", QINFO_HOMUN_TYPE, false, false);
script->set_constant("QINFO_QUEST", QINFO_QUEST, false, false);
+ script->set_constant("QINFO_MERCENARY_CLASS", QINFO_MERCENARY_CLASS, false, false);
+
+ script->constdb_comment("function types");
+ script->set_constant("FUNCTION_IS_COMMAND", FUNCTION_IS_COMMAND, false, false);
+ script->set_constant("FUNCTION_IS_GLOBAL", FUNCTION_IS_GLOBAL, false, false);
+ script->set_constant("FUNCTION_IS_LOCAL", FUNCTION_IS_LOCAL, false, false);
+ script->set_constant("FUNCTION_IS_LABEL", FUNCTION_IS_LABEL, false, false);
+
+ script->constdb_comment("item trade restrictions");
+ script->set_constant("ITR_NONE", ITR_NONE, false, false);
+ script->set_constant("ITR_NODROP", ITR_NODROP, false, false);
+ script->set_constant("ITR_NOTRADE", ITR_NOTRADE, false, false);
+ script->set_constant("ITR_PARTNEROVERRIDE", ITR_PARTNEROVERRIDE, false, false);
+ script->set_constant("ITR_NOSELLTONPC", ITR_NOSELLTONPC, false, false);
+ script->set_constant("ITR_NOCART", ITR_NOCART, false, false);
+ script->set_constant("ITR_NOSTORAGE", ITR_NOSTORAGE, false, false);
+ script->set_constant("ITR_NOGSTORAGE", ITR_NOGSTORAGE, false, false);
+ script->set_constant("ITR_NOMAIL", ITR_NOMAIL, false, false);
+ script->set_constant("ITR_NOAUCTION", ITR_NOAUCTION, false, false);
+ script->set_constant("ITR_ALL", ITR_ALL, false, false);
+
script->constdb_comment("Renewal");
#ifdef RENEWAL
@@ -25962,6 +26132,7 @@ void script_defaults(void)
script->setarray_pc = script_setarray_pc;
script->config_read = script_config_read;
script->add_str = script_add_str;
+ script->add_variable = script_add_variable;
script->get_str = script_get_str;
script->search_str = script_search_str;
script->setd_sub = setd_sub;
diff --git a/src/map/script.h b/src/map/script.h
index 9a8425ed2..549ad3284 100644
--- a/src/map/script.h
+++ b/src/map/script.h
@@ -64,6 +64,9 @@ struct item_data;
#define SCRIPT_EQUIP_TABLE_SIZE 20
+#define MAX_MENU_OPTIONS 0xFF
+#define MAX_MENU_LENGTH 0x800
+
//#define SCRIPT_DEBUG_DISP
//#define SCRIPT_DEBUG_DISASM
//#define SCRIPT_DEBUG_HASH
@@ -143,7 +146,6 @@ struct item_data;
/// Returns if this a reference to a param
#define reference_toparam(data) ( script->str_data[reference_getid(data)].type == C_PARAM )
/// Returns if this a reference to a variable
-//##TODO confirm it's C_NAME [FlavioJS]
#define reference_tovariable(data) ( script->str_data[reference_getid(data)].type == C_NAME )
/// Returns the unique id of the reference (id and index)
#define reference_getuid(data) ( (data)->u.num )
@@ -178,6 +180,8 @@ struct item_data;
#define BUILDIN(x) bool buildin_ ## x (struct script_state* st)
+#define get_buildin_name(st) ( script->get_str((int)(script_getdata((st), 0)->u.num)) )
+
#define script_fetch(st, n, t) do { \
if( script_hasdata((st),(n)) ) \
(t)=script_getnum((st),(n)); \
@@ -451,6 +455,7 @@ enum script_iteminfo_types {
ITEMINFO_VIEWID,
ITEMINFO_MATK,
ITEMINFO_VIEWSPRITE,
+ ITEMINFO_TRADE,
ITEMINFO_MAX
};
@@ -829,6 +834,7 @@ struct script_interface {
void (*setarray_pc) (struct map_session_data* sd, const char* varname, uint32 idx, void* value, int* refcache);
bool (*config_read) (const char *filename, bool imported);
int (*add_str) (const char* p);
+ int (*add_variable) (const char *varname);
const char* (*get_str) (int id);
int (*search_str) (const char* p);
void (*setd_sub) (struct script_state *st, struct map_session_data *sd, const char *varname, int elem, const void *value, struct reg_db *ref);
diff --git a/src/map/skill.c b/src/map/skill.c
index a4ebff9f1..8410a77d0 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -2361,11 +2361,11 @@ static int skill_counter_additional_effect(struct block_list *src, struct block_
) {
// Soul Drain should only work on targeted spells [Skotlex]
if( pc_issit(sd) ) pc->setstand(sd); // Character stuck in attacking animation while 'sitting' fix. [Skotlex]
- if( skill->get_nk(skill_id)&NK_SPLASH && skill->area_temp[1] != bl->id )
+ if (skill->get_nk(skill_id)&NK_SPLASH && skill->area_temp[1] != bl->id) {
;
- else {
+ } else {
clif->skill_nodamage(src,bl,HW_SOULDRAIN,rate,1);
- status->heal(src, 0, status->get_lv(bl)*(95+15*rate)/100, 2);
+ status->heal(src, 0, status->get_lv(bl)*(95+15*rate)/100, STATUS_HEAL_SHOWEFFECT);
}
}
@@ -2388,9 +2388,9 @@ static int skill_counter_additional_effect(struct block_list *src, struct block_
sc->data[SC_SOULLINK]->val3 = 0; //Clear bounced spell check.
}
}
- if( hp || sp ) {
+ if (hp != 0 || sp != 0) {
// updated to force healing to allow healing through berserk
- status->heal(src, hp, sp, battle_config.show_hp_sp_gain ? 3 : 1);
+ status->heal(src, hp, sp, STATUS_HEAL_FORCED | (battle_config.show_hp_sp_gain ? STATUS_HEAL_SHOWEFFECT : STATUS_HEAL_DEFAULT));
}
}
@@ -2588,7 +2588,7 @@ static int skill_break_equip(struct block_list *bl, unsigned short where, int ra
pc->unequipitem(sd, j, PCUNEQUIPITEM_RECALC|PCUNEQUIPITEM_FORCE);
}
}
- clif->equiplist(sd);
+ clif->equipList(sd);
}
return where; //Return list of pieces broken.
@@ -2745,7 +2745,11 @@ static int skill_magic_reflect(struct block_list *src, struct block_list *bl, in
static int skill_attack(int attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int64 tick, int flag)
{
struct Damage dmg;
+#if MAGIC_REFLECTION_TYPE
struct status_data *sstatus, *tstatus;
+#else
+ struct status_data *tstatus;
+#endif
struct status_change *sc;
struct map_session_data *sd, *tsd;
int type;
@@ -2780,7 +2784,9 @@ static int skill_attack(int attack_type, struct block_list *src, struct block_li
)
return 0;
+#if MAGIC_REFLECTION_TYPE
sstatus = status->get_status_data(src);
+#endif
tstatus = status->get_status_data(bl);
sc = status->get_sc(bl);
if (sc && !sc->count) sc = NULL; //Don't need it.
@@ -2893,7 +2899,7 @@ static int skill_attack(int attack_type, struct block_list *src, struct block_li
sp = sp * sc->data[SC_MAGICROD]->val2 / 100;
if(skill_id == WZ_WATERBALL && skill_lv > 1)
sp = sp/((skill_lv|1)*(skill_lv|1)); //Estimate SP cost of a single water-ball
- status->heal(bl, 0, sp, 2);
+ status->heal(bl, 0, sp, STATUS_HEAL_SHOWEFFECT);
}
}
@@ -3212,8 +3218,8 @@ static int skill_attack(int attack_type, struct block_list *src, struct block_li
}
tsd->reproduceskill_id = copy_skill;
- pc_setglobalreg(tsd, script->add_str("REPRODUCE_SKILL"), copy_skill);
- pc_setglobalreg(tsd, script->add_str("REPRODUCE_SKILL_LV"), lv);
+ pc_setglobalreg(tsd, script->add_variable("REPRODUCE_SKILL"), copy_skill);
+ pc_setglobalreg(tsd, script->add_variable("REPRODUCE_SKILL_LV"), lv);
tsd->status.skill[cidx].id = copy_skill;
tsd->status.skill[cidx].lv = lv;
@@ -3236,8 +3242,8 @@ static int skill_attack(int attack_type, struct block_list *src, struct block_li
lv = plagiarismlvl;
tsd->cloneskill_id = copy_skill;
- pc_setglobalreg(tsd, script->add_str("CLONE_SKILL"), copy_skill);
- pc_setglobalreg(tsd, script->add_str("CLONE_SKILL_LV"), lv);
+ pc_setglobalreg(tsd, script->add_variable("CLONE_SKILL"), copy_skill);
+ pc_setglobalreg(tsd, script->add_variable("CLONE_SKILL_LV"), lv);
tsd->status.skill[cidx].id = copy_skill;
tsd->status.skill[cidx].lv = lv;
@@ -4132,7 +4138,7 @@ static int skill_activate_reverberation(struct block_list *bl, va_list ap)
if( su->alive && (sg = su->group) != NULL && sg->skill_id == WM_REVERBERATION && sg->unit_id == UNT_REVERBERATION ) {
int64 tick = timer->gettick();
clif->changetraplook(bl,UNT_USED_TRAPS);
- map->foreachinrange(skill->trap_splash, bl, skill->get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, bl, tick);
+ skill->trap_do_splash(bl, sg->skill_id, sg->skill_lv, sg->bl_flag, tick);
su->limit = DIFF_TICK32(tick,sg->tick)+1500;
sg->unit_id = UNT_USED_TRAPS;
}
@@ -4471,7 +4477,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
if( skill_id == MO_EXTREMITYFIST ) {
mbl = src;
i = 3; // for Asura(from caster)
- status->set_sp(src, 0, 0);
+ status->set_sp(src, 0, STATUS_HEAL_DEFAULT);
status_change_end(src, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
#ifdef RENEWAL
@@ -4481,9 +4487,9 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
status_change_end(src, SC_NJ_NEN, INVALID_TIMER);
status_change_end(src, SC_HIDING, INVALID_TIMER);
#ifdef RENEWAL
- status->set_hp(src, max(status_get_max_hp(src)/100, 1), 0);
+ status->set_hp(src, max(status_get_max_hp(src)/100, 1), STATUS_HEAL_DEFAULT);
#else // not RENEWAL
- status->set_hp(src, 1, 0);
+ status->set_hp(src, 1, STATUS_HEAL_DEFAULT);
#endif // RENEWAL
}
dir = map->calc_dir(src,bl->x,bl->y);
@@ -4597,7 +4603,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
heal = skill->attack(skill->get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, sflag);
if (skill_id == NPC_VAMPIRE_GIFT && heal > 0) {
clif->skill_nodamage(NULL, src, AL_HEAL, heal, 1);
- status->heal(src,heal,0,0);
+ status->heal(src, heal, 0, STATUS_HEAL_DEFAULT);
}
if (skill_id == SU_SCRATCH && status->get_lv(src) >= 30 && (rnd() % 100 < (int)(status->get_lv(src) / 30) + 10)) // TODO: Need activation chance.
skill->addtimerskill(src, tick + skill->get_delay(skill_id, skill_lv), bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag);
@@ -4965,7 +4971,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
src, src, bl, skill_id, skill_lv, tick, flag);
if (heal > 0){
clif->skill_nodamage(NULL, src, AL_HEAL, heal, 1);
- status->heal(src, heal, 0, 0);
+ status->heal(src, heal, 0, STATUS_HEAL_DEFAULT);
}
}
break;
@@ -5076,7 +5082,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
heal = 0; // Don't absorb heal from Ice Walls or other skill units.
if( heal && rnd()%100 < rate ) {
- status->heal(src, heal, 0, 0);
+ status->heal(src, heal, 0, STATUS_HEAL_DEFAULT);
clif->skill_nodamage(NULL, src, AL_HEAL, heal, 1);
}
}
@@ -5837,7 +5843,7 @@ static int skill_castend_id(int tid, int64 tick, int id, intptr_t data)
//When Asura fails... (except when it fails from Fog of Wall)
//Consume SP/spheres
skill->consume_requirement(sd,ud->skill_id, ud->skill_lv,1);
- status->set_sp(src, 0, 0);
+ status->set_sp(src, 0, STATUS_HEAL_DEFAULT);
sc = &sd->sc;
if (sc->count) {
//End states
@@ -6120,7 +6126,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
clif->skill_nodamage (src, bl, skill_id, heal, 1);
if( tsc && tsc->data[SC_AKAITSUKI] && heal && skill_id != HLIF_HEAL )
heal = ~heal + 1;
- heal_get_jobexp = status->heal(bl,heal,0,0);
+ heal_get_jobexp = status->heal(bl, heal, 0, STATUS_HEAL_DEFAULT);
if(sd && dstsd && heal > 0 && sd != dstsd && battle_config.heal_exp > 0){
heal_get_jobexp = heal_get_jobexp * battle_config.heal_exp / 100;
@@ -6153,8 +6159,8 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
clif->updatestatus(sd,SP_BASEEXP);
clif->updatestatus(sd,SP_JOBEXP);
}
- status->set_hp(src, 1, 0);
- status->set_sp(src, 0, 0);
+ status->set_hp(src, 1, STATUS_HEAL_DEFAULT);
+ status->set_sp(src, 0, STATUS_HEAL_DEFAULT);
break;
} else if (status->isdead(bl) && flag&1) { //Revive
skill->area_temp[0]++; //Count it in, then fall-through to the Resurrection code.
@@ -6327,7 +6333,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
break;
case SA_INSTANTDEATH:
clif->skill_nodamage(src,bl,skill_id,skill_lv,1);
- status->set_hp(bl,1,0);
+ status->set_hp(bl, 1, STATUS_HEAL_DEFAULT);
break;
case SA_QUESTION:
case SA_GRAVITY:
@@ -6752,7 +6758,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
}
sd->mission_mobid = id;
sd->mission_count = 0;
- pc_setglobalreg(sd,script->add_str("TK_MISSION_ID"), id);
+ pc_setglobalreg(sd,script->add_variable("TK_MISSION_ID"), id);
clif->mission_info(sd, id, 0);
clif->skill_nodamage(src,bl,skill_id,skill_lv,1);
}
@@ -6905,7 +6911,8 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
if (dstsd && dstsd->charm_type != CHARM_TYPE_NONE && dstsd->charm_count > 0) {
pc->del_charm(dstsd, dstsd->charm_count, dstsd->charm_type);
}
- if (sp) status->heal(src, 0, sp, 3);
+ if (sp != 0)
+ status->heal(src, 0, sp, STATUS_HEAL_FORCED | STATUS_HEAL_SHOWEFFECT);
clif->skill_nodamage(src,bl,skill_id,skill_lv,sp?1:0);
}
break;
@@ -7267,7 +7274,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
case NV_FIRSTAID:
clif->skill_nodamage(src,bl,skill_id,5,1);
- status->heal(bl,5,0,0);
+ status->heal(bl, 5, 0, STATUS_HEAL_DEFAULT);
break;
case AL_CURE:
@@ -7344,7 +7351,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
case MER_SCAPEGOAT:
if( mer && mer->master ) {
- status->heal(&mer->master->bl, mer->battle_status.hp, 0, 2);
+ status->heal(&mer->master->bl, mer->battle_status.hp, 0, STATUS_HEAL_SHOWEFFECT);
status->damage(src, src, mer->battle_status.max_hp, 0, 0, 1);
}
break;
@@ -7661,7 +7668,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
if( tsc && tsc->data[SC_EXTREMITYFIST2] )
sp = 0;
#endif
- status->heal(bl,(int)hp,sp,0);
+ status->heal(bl, (int)hp, sp, STATUS_HEAL_DEFAULT);
}
break;
case AM_CP_WEAPON:
@@ -7836,7 +7843,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
sp = skill->get_sp(skill_id,skill_lv);
sp = sp * tsc->data[SC_MAGICROD]->val2 / 100;
if(sp < 1) sp = 1;
- status->heal(bl,0,sp,2);
+ status->heal(bl, 0, sp, STATUS_HEAL_SHOWEFFECT);
status_percent_damage(bl, src, 0, -20, false); //20% max SP damage.
} else {
struct unit_data *ud = unit->bl2ud(bl);
@@ -7868,8 +7875,8 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
if (sp) //Recover some of the SP used
sp = sp*(25*(skill_lv-1))/100;
- if(hp || sp)
- status->heal(src, hp, sp, 2);
+ if (hp != 0 || sp != 0)
+ status->heal(src, hp, sp, STATUS_HEAL_SHOWEFFECT);
}
}
break;
@@ -8112,14 +8119,14 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
{
int hp_rate = skill_lv == 0 ? 0 : skill->get_hp_rate(skill_id, skill_lv);
int gain_hp = tstatus->max_hp*abs(hp_rate)/100; // The earned is the same % of the target HP than it cost the caster. [Skotlex]
- clif->skill_nodamage(src,bl,skill_id,status->heal(bl, gain_hp, 0, 0),1);
+ clif->skill_nodamage(src, bl, skill_id, status->heal(bl, gain_hp, 0, STATUS_HEAL_DEFAULT), 1);
}
break;
case WE_FEMALE:
{
int sp_rate = skill_lv == 0 ? 0 : skill->get_sp_rate(skill_id, skill_lv);
int gain_sp = tstatus->max_sp*abs(sp_rate)/100;// The earned is the same % of the target SP than it cost the caster. [Skotlex]
- clif->skill_nodamage(src,bl,skill_id,status->heal(bl, 0, gain_sp, 0),1);
+ clif->skill_nodamage(src, bl, skill_id, status->heal(bl, 0, gain_sp, STATUS_HEAL_DEFAULT), 1);
}
break;
@@ -8159,7 +8166,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
break;
}
clif->skill_nodamage(src, bl, skill_id, skill_lv, 1);
- status->heal(bl,0,sp,2);
+ status->heal(bl, 0, sp, STATUS_HEAL_SHOWEFFECT);
}
break;
@@ -8314,7 +8321,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
}
dstmd->state.soul_change_flag = 1;
sp2 = sstatus->max_sp * 3 /100;
- status->heal(src, 0, sp2, 2);
+ status->heal(src, 0, sp2, STATUS_HEAL_SHOWEFFECT);
clif->skill_nodamage(src,bl,skill_id,skill_lv,1);
break;
}
@@ -8326,8 +8333,8 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
if( tsc && tsc->data[SC_EXTREMITYFIST2] )
sp1 = tstatus->sp;
#endif // RENEWAL
- status->set_sp(src, sp2, 3);
- status->set_sp(bl, sp1, 3);
+ status->set_sp(src, sp2, STATUS_HEAL_FORCED | STATUS_HEAL_SHOWEFFECT);
+ status->set_sp(bl, sp1, STATUS_HEAL_FORCED | STATUS_HEAL_SHOWEFFECT);
clif->skill_nodamage(src,bl,skill_id,skill_lv,1);
}
break;
@@ -8365,7 +8372,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
clif->skill_nodamage(NULL,bl,AL_HEAL,hp,1);
if(sp > 0)
clif->skill_nodamage(NULL,bl,MG_SRECOVERY,sp,1);
- status->heal(bl,hp,sp,0);
+ status->heal(bl, hp, sp, STATUS_HEAL_DEFAULT);
}
break;
// Full Chemical Protection
@@ -8454,7 +8461,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
sc_start(src,bl,SC_INCATKRATE,100,-50,skill->get_time2(skill_id,skill_lv));
break;
case 5: // 2000HP heal, random teleported
- status->heal(src, 2000, 0, 0);
+ status->heal(src, 2000, 0, STATUS_HEAL_DEFAULT);
if( !map_flag_vs(bl->m) )
unit->warp(bl, -1,-1,-1, CLR_TELEPORT);
break;
@@ -8531,7 +8538,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
if (skill_id == SL_SUPERNOVICE && dstsd && dstsd->die_counter && !(rnd()%100)) {
//Erase death count 1% of the casts
dstsd->die_counter = 0;
- pc_setglobalreg(dstsd,script->add_str("PC_DIE_COUNTER"), 0);
+ pc_setglobalreg(dstsd,script->add_variable("PC_DIE_COUNTER"), 0);
clif->specialeffect(bl, 0x152, AREA);
//SC_SOULLINK invokes status_calc_pc for us.
}
@@ -8748,7 +8755,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
//Eh? why double skill packet?
clif->skill_nodamage(src,bl,AL_HEAL,hp,1);
clif->skill_nodamage(src,bl,skill_id,hp,1);
- status->heal(bl, hp, 0, 0);
+ status->heal(bl, hp, 0, STATUS_HEAL_DEFAULT);
}
break;
// Homun single-target support skills [orn]
@@ -8895,7 +8902,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
int heal = status_get_max_hp(bl) * 25 / 100;
clif->skill_nodamage(src,bl,skill_id,skill_lv,
sc_start(src,bl,type,100,skill_lv,skill->get_time(skill_id,skill_lv)));
- status->heal(bl,heal,0,1);
+ status->heal(bl, heal, 0, STATUS_HEAL_FORCED);
status->change_clear_buffs(bl,4);
}
break;
@@ -8949,7 +8956,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
value = status_get_max_hp(bl) * 25 / 100;
status->change_clear_buffs(bl,4);
skill->area_temp[5] &= ~0x20;
- status->heal(bl,value,0,1);
+ status->heal(bl, value, 0, STATUS_HEAL_FORCED);
type = SC_REFRESH;
}else if( skill->area_temp[5]&0x40 ){
skill->area_temp[5] &= ~0x40;
@@ -9134,7 +9141,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
clif->skill_nodamage(bl, bl, skill_id, heal, 1);
if( tsc && tsc->data[SC_AKAITSUKI] && heal )
heal = ~heal + 1;
- status->heal(bl, heal, 0, 1);
+ status->heal(bl, heal, 0, STATUS_HEAL_FORCED);
}
} else if( sd )
party->foreachsamemap(skill->area_sub, sd, skill->get_splash(skill_id, skill_lv), src, skill_id, skill_lv, tick, flag|BCT_PARTY|1, skill->castend_nodamage_id);
@@ -9410,7 +9417,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
pc->setmadogear(sd, false);
clif->skill_nodamage(src, bl, skill_id, skill_lv, 1);
skill->castend_damage_id(src, src, skill_id, skill_lv, tick, flag);
- status->set_sp(src, 0, 0);
+ status->set_sp(src, 0, STATUS_HEAL_DEFAULT);
}
break;
@@ -9449,7 +9456,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
case 5: hp = 23; break;
}
heal = tstatus->max_hp * hp / 100;
- status->heal(bl,heal,0,2);
+ status->heal(bl, heal, 0, STATUS_HEAL_SHOWEFFECT);
clif->skill_nodamage(src, bl, skill_id, skill_lv, heal);
}
break;
@@ -9527,7 +9534,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
int sp = 100 * skill_lv;
if( dstmd ) sp = dstmd->level * 2;
if( status_zap(bl,0,sp) )
- status->heal(src,0,sp/2,3);//What does flag 3 do? [Rytech]
+ status->heal(src, 0, sp / 2, STATUS_HEAL_FORCED | STATUS_HEAL_SHOWEFFECT);
}
if ( tsc && tsc->data[SC__UNLUCKY] && skill_id == SC_UNLUCKY) {
//If the target was successfully inflected with the Unlucky status, give 1 of 3 random status's.
@@ -9651,7 +9658,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
case 3:
sc_start(src, bl, SC_SHIELDSPELL_REF, 100, opt, INFINITE_DURATION); // HP Recovery
val = sstatus->max_hp * ((status->get_lv(src) / 10) + (shield->refine + 1)) / 100;
- status->heal(bl, val, 0, 2);
+ status->heal(bl, val, 0, STATUS_HEAL_SHOWEFFECT);
status_change_end(bl,SC_SHIELDSPELL_REF,INVALID_TIMER);
break;
}
@@ -9794,7 +9801,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
}
heal = 120 * skill_lv + status_get_max_hp(bl) * (2 + skill_lv) / 100;
- status->heal(bl, heal, 0, 0);
+ status->heal(bl, heal, 0, STATUS_HEAL_DEFAULT);
if( (tsc && tsc->opt1) && (rnd()%100 < ((skill_lv * 5) + (status_get_dex(src) + status->get_lv(src)) / 4) - (1 + (rnd() % 10))) ) {
status_change_end(bl, SC_STONE, INVALID_TIMER);
@@ -9865,7 +9872,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
heal = 1;
status->fixed_revive(bl, heal, 0);
clif->skill_nodamage(src,bl,skill_id,skill_lv,1);
- status->set_sp(bl, 0, 0);
+ status->set_sp(bl, 0, STATUS_HEAL_DEFAULT);
}
}
break;
@@ -10202,7 +10209,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
}
e_hp = ed->battle_status.max_hp * 10 / 100;
e_sp = ed->battle_status.max_sp * 10 / 100;
- status->heal(&ed->bl,e_hp,e_sp,3);
+ status->heal(&ed->bl, e_hp, e_sp, STATUS_HEAL_FORCED | STATUS_HEAL_SHOWEFFECT);
clif->skill_nodamage(src,&ed->bl,skill_id,skill_lv,1);
}
break;
@@ -10512,7 +10519,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
}
}
heal = 5 * status->get_lv(&hd->bl) + status->base_matk(&hd->bl, &hd->battle_status, status->get_lv(&hd->bl));
- status->heal(bl, heal, 0, 0);
+ status->heal(bl, heal, 0, STATUS_HEAL_DEFAULT);
clif->skill_nodamage(src, src, skill_id, skill_lv, clif->skill_nodamage(src, bl, AL_HEAL, heal, 1));
status->change_start(src, src, type, 1000, skill_lv, 0, 0, 0, skill->get_time(skill_id,skill_lv), SCFLAG_NOAVOID|SCFLAG_FIXEDTICK|SCFLAG_FIXEDRATE);
status->change_start(src, bl, type, 1000, skill_lv, 0, 0, 0, skill->get_time(skill_id,skill_lv), SCFLAG_NOAVOID|SCFLAG_FIXEDTICK|SCFLAG_FIXEDRATE);
@@ -12638,7 +12645,7 @@ static int skill_unit_onplace(struct skill_unit *src, struct block_list *bl, int
if (sg->src_id == bl->id)
break; //Does not affect the caster.
clif->changetraplook(&src->bl,UNT_USED_TRAPS);
- map->foreachinrange(skill->trap_splash,&src->bl, skill->get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, &src->bl,tick);
+ skill->trap_do_splash(&src->bl, sg->skill_id, sg->skill_lv, sg->bl_flag, tick);
sg->unit_id = UNT_USED_TRAPS;
sg->limit = DIFF_TICK32(tick,sg->tick) + 1500;
break;
@@ -12794,7 +12801,7 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b
clif->skill_nodamage(&src->bl, bl, AL_HEAL, heal, 1);
if (tsc && tsc->data[SC_AKAITSUKI] && heal)
heal = ~heal + 1;
- status->heal(bl, heal, 0, 0);
+ status->heal(bl, heal, 0, STATUS_HEAL_DEFAULT);
if (diff >= 500)
sg->val1--;
}
@@ -12815,7 +12822,7 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b
if (status->isimmune(bl))
heal = 0;
clif->skill_nodamage(&src->bl, bl, AL_HEAL, heal, 1);
- status->heal(bl, heal, 0, 0);
+ status->heal(bl, heal, 0, STATUS_HEAL_DEFAULT);
}
break;
@@ -12932,7 +12939,7 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b
}
- map->foreachinrange(skill->trap_splash, &src->bl, skill->get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, &src->bl, tick);
+ skill->trap_do_splash(&src->bl, sg->skill_id, sg->skill_lv, sg->bl_flag, tick);
sg->unit_id = UNT_USED_TRAPS; //Changed ID so it does not invoke a for each in area again.
}
break;
@@ -12963,10 +12970,10 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b
case UNT_FREEZINGTRAP:
case UNT_FIREPILLAR_ACTIVE:
case UNT_CLAYMORETRAP:
- if( sg->unit_id == UNT_FIRINGTRAP || sg->unit_id == UNT_ICEBOUNDTRAP || sg->unit_id == UNT_CLAYMORETRAP )
- map->foreachinrange(skill->trap_splash,&src->bl, skill->get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag|BL_SKILL|~BCT_SELF, &src->bl,tick);
+ if (sg->unit_id == UNT_FIRINGTRAP || sg->unit_id == UNT_ICEBOUNDTRAP || sg->unit_id == UNT_CLAYMORETRAP)
+ skill->trap_do_splash(&src->bl, sg->skill_id, sg->skill_lv, sg->bl_flag | BL_SKILL | ~BCT_SELF, tick);
else
- map->foreachinrange(skill->trap_splash,&src->bl, skill->get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, &src->bl,tick);
+ skill->trap_do_splash(&src->bl, sg->skill_id, sg->skill_lv, sg->bl_flag, tick);
if (sg->unit_id != UNT_FIREPILLAR_ACTIVE)
clif->changetraplook(&src->bl, sg->unit_id==UNT_LANDMINE?UNT_FIREPILLAR_ACTIVE:UNT_USED_TRAPS);
sg->limit=DIFF_TICK32(tick,sg->tick)+1500 +
@@ -13026,7 +13033,7 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b
if( tsc && tsc->data[SC_AKAITSUKI] && heal )
heal = ~heal + 1;
clif->skill_nodamage(&src->bl, bl, AL_HEAL, heal, 1);
- status->heal(bl, heal, 0, 0);
+ status->heal(bl, heal, 0, STATUS_HEAL_DEFAULT);
}
}
break;
@@ -13080,7 +13087,7 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b
case 0: // Heal 1~9999 HP
heal = rnd() %9999+1;
clif->skill_nodamage(ss,bl,AL_HEAL,heal,1);
- status->heal(bl,heal,0,0);
+ status->heal(bl, heal, 0, STATUS_HEAL_DEFAULT);
break;
case 1: // End all negative status
status->change_clear_buffs(bl,2);
@@ -13197,9 +13204,7 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b
case UNT_GROUNDDRIFT_POISON:
case UNT_GROUNDDRIFT_WATER:
case UNT_GROUNDDRIFT_FIRE:
- map->foreachinrange(skill->trap_splash,&src->bl,
- skill->get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag,
- &src->bl,tick);
+ skill->trap_do_splash(&src->bl, sg->skill_id, sg->skill_lv, sg->bl_flag, tick);
sg->unit_id = UNT_USED_TRAPS;
//clif->changetraplook(&src->bl, UNT_FIREPILLAR_ACTIVE);
sg->limit=DIFF_TICK32(tick,sg->tick)+1500;
@@ -13227,7 +13232,7 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b
}
hp = tstatus->max_hp * hp / 100;
sp = tstatus->max_sp * sp / 100;
- status->heal(bl, hp, sp, 2);
+ status->heal(bl, hp, sp, STATUS_HEAL_SHOWEFFECT);
sc_start(ss, bl, type, 100, sg->skill_lv, (sg->interval * 3) + 100);
}
// Reveal hidden players every 5 seconds.
@@ -13260,7 +13265,7 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b
case UNT_REVERBERATION:
clif->changetraplook(&src->bl,UNT_USED_TRAPS);
- map->foreachinrange(skill->trap_splash,&src->bl, skill->get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, &src->bl,tick);
+ skill->trap_do_splash(&src->bl, sg->skill_id, sg->skill_lv, sg->bl_flag, tick);
sg->limit = DIFF_TICK32(tick,sg->tick)+1500;
sg->unit_id = UNT_USED_TRAPS;
break;
@@ -13349,7 +13354,7 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b
clif->skill_nodamage(&src->bl, bl, AL_HEAL, hp, 0);
if( tsc && tsc->data[SC_AKAITSUKI] && hp )
hp = ~hp + 1;
- status->heal(bl, hp, 0, 0);
+ status->heal(bl, hp, 0, STATUS_HEAL_DEFAULT);
sc_start(ss, bl, type, 100, sg->skill_lv, sg->interval + 100);
}
break;
@@ -13363,13 +13368,13 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b
int hp = tstatus->max_hp / 100; //+1% each 5s
if ((sg->val3) % 5) { //each 5s
if (tstatus->def_ele == skill->get_ele(sg->skill_id,sg->skill_lv)) {
- status->heal(bl, hp, 0, 2);
+ status->heal(bl, hp, 0, STATUS_HEAL_SHOWEFFECT);
} else if( (sg->unit_id == UNT_FIRE_INSIGNIA && tstatus->def_ele == ELE_EARTH)
|| (sg->unit_id == UNT_WATER_INSIGNIA && tstatus->def_ele == ELE_FIRE)
|| (sg->unit_id == UNT_WIND_INSIGNIA && tstatus->def_ele == ELE_WATER)
|| (sg->unit_id == UNT_EARTH_INSIGNIA && tstatus->def_ele == ELE_WIND)
) {
- status->heal(bl, -hp, 0, 0);
+ status->heal(bl, -hp, 0, STATUS_HEAL_DEFAULT);
}
}
sg->val3++; //timer
@@ -16133,7 +16138,7 @@ static void skill_repairweapon(struct map_session_data *sd, int idx)
item->attribute |= ATTR_BROKEN;
item->attribute ^= ATTR_BROKEN; /* clear broken state */
- clif->equiplist(target_sd);
+ clif->equipList(target_sd);
pc->delitem(sd, pc->search_inventory(sd, material), 1, 0, DELITEM_NORMAL, LOG_TYPE_CONSUME); // FIXME: is this the correct reason flag?
@@ -16216,7 +16221,7 @@ static void skill_weaponrefine(struct map_session_data *sd, int idx)
}
clif->delitem(sd, idx, 1, DELITEM_NORMAL);
clif->upgrademessage(sd->fd, 0,item->nameid);
- clif->inventorylist(sd);
+ clif->inventoryList(sd);
clif->refine(sd->fd,0,idx,item->refine);
if (ep)
pc->equipitem(sd,idx,ep);
@@ -16624,10 +16629,10 @@ static int skill_detonator(struct block_list *bl, va_list ap)
case UNT_CLAYMORETRAP:
case UNT_FIRINGTRAP:
case UNT_ICEBOUNDTRAP:
- map->foreachinrange(skill->trap_splash,bl,skill->get_splash(su->group->skill_id,su->group->skill_lv),su->group->bl_flag|BL_SKILL|~BCT_SELF,bl,su->group->tick);
+ skill->trap_do_splash(bl, su->group->skill_id, su->group->skill_lv, su->group->bl_flag | BL_SKILL | ~BCT_SELF, su->group->tick);
break;
default:
- map->foreachinrange(skill->trap_splash,bl,skill->get_splash(su->group->skill_id,su->group->skill_lv),su->group->bl_flag,bl,su->group->tick);
+ skill->trap_do_splash(bl, su->group->skill_id, su->group->skill_lv, su->group->bl_flag, su->group->tick);
}
clif->changetraplook(bl, UNT_USED_TRAPS);
su->group->limit = DIFF_TICK32(timer->gettick(),su->group->tick) +
@@ -16760,6 +16765,27 @@ static int skill_chastle_mob_changetarget(struct block_list *bl, va_list ap)
return 0;
}
+/**
+ * Does final adjustments (e.g. count enemies affected by splash) then runs trap splash function (skill_trap_splash).
+ *
+ * @param bl : trap skill unit's bl
+ * @param skill_id : Trap Skill ID
+ * @param skill_lv : Trap Skill Level
+ * @param bl_flag : Flag representing units affected by this trap
+ * @param tick : tick related to this trap
+ */
+static void skill_trap_do_splash(struct block_list *bl, uint16 skill_id, uint16 skill_lv, int bl_flag, int64 tick)
+{
+ int enemy_count = 0;
+
+ if (skill->get_nk(skill_id) & NK_SPLASHSPLIT) {
+ enemy_count = map->foreachinrange(skill->area_sub, bl, skill->get_splash(skill_id, skill_lv), BL_CHAR, bl, skill_id, skill_lv, tick, BCT_ENEMY, skill->area_sub_count);
+ enemy_count = max(1, enemy_count); // Don't let enemy_count be 0 when spliting trap damage
+ }
+
+ map->foreachinrange(skill->trap_splash, bl, skill->get_splash(skill_id, skill_lv), bl_flag, bl, tick, enemy_count);
+}
+
/*==========================================
*
*------------------------------------------*/
@@ -16770,6 +16796,7 @@ static int skill_trap_splash(struct block_list *bl, va_list ap)
struct skill_unit *src_su = NULL;
struct skill_unit_group *sg;
struct block_list *ss;
+ int enemy_count = va_arg(ap, int);
nullpo_ret(bl);
nullpo_ret(src);
@@ -16864,7 +16891,7 @@ static int skill_trap_splash(struct block_list *bl, va_list ap)
}
/* Fall through */
default:
- skill->attack(skill->get_type(sg->skill_id),ss,src,bl,sg->skill_id,sg->skill_lv,tick,0);
+ skill->attack(skill->get_type(sg->skill_id), ss, src, bl, sg->skill_id, sg->skill_lv, tick, enemy_count);
break;
}
return 1;
@@ -17579,7 +17606,7 @@ static int skill_unit_timer_sub(union DBKey key, struct DBData *data, va_list ap
break;
}
clif->changetraplook(bl,UNT_USED_TRAPS);
- map->foreachinrange(skill->trap_splash, bl, skill->get_splash(group->skill_id, group->skill_lv), group->bl_flag, bl, tick);
+ skill->trap_do_splash(bl, group->skill_id, group->skill_lv, group->bl_flag, tick);
group->limit = DIFF_TICK32(tick,group->tick)+1500;
su->limit = DIFF_TICK32(tick,group->tick)+1500;
group->unit_id = UNT_USED_TRAPS;
@@ -18480,7 +18507,7 @@ static int skill_produce_mix(struct map_session_data *sd, uint16 skill_id, int n
{ //Cooking items.
clif->specialeffect(&sd->bl, 608, AREA);
if( sd->cook_mastery < 1999 )
- pc_setglobalreg(sd, script->add_str("COOK_MASTERY"),sd->cook_mastery + ( 1 << ( (skill->dbs->produce_db[idx].itemlv - 11) / 2 ) ) * 5);
+ pc_setglobalreg(sd, script->add_variable("COOK_MASTERY"),sd->cook_mastery + ( 1 << ( (skill->dbs->produce_db[idx].itemlv - 11) / 2 ) ) * 5);
}
break;
}
@@ -18591,7 +18618,7 @@ static int skill_produce_mix(struct map_session_data *sd, uint16 skill_id, int n
{ //Cooking items.
clif->specialeffect(&sd->bl, 609, AREA);
if( sd->cook_mastery > 0 )
- pc_setglobalreg(sd, script->add_str("COOK_MASTERY"), sd->cook_mastery - ( 1 << ((skill->dbs->produce_db[idx].itemlv - 11) / 2) ) - ( ( ( 1 << ((skill->dbs->produce_db[idx].itemlv - 11) / 2) ) >> 1 ) * 3 ));
+ pc_setglobalreg(sd, script->add_variable("COOK_MASTERY"), sd->cook_mastery - ( 1 << ((skill->dbs->produce_db[idx].itemlv - 11) / 2) ) - ( ( ( 1 << ((skill->dbs->produce_db[idx].itemlv - 11) / 2) ) >> 1 ) * 3 ));
}
}
}
@@ -18967,7 +18994,7 @@ static int skill_destroy_trap(struct block_list *bl, va_list ap)
case UNT_CLAYMORETRAP:
case UNT_FIRINGTRAP:
case UNT_ICEBOUNDTRAP:
- map->foreachinrange(skill->trap_splash,&su->bl, skill->get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag|BL_SKILL|~BCT_SELF, &su->bl,tick);
+ skill->trap_do_splash(&su->bl, sg->skill_id, sg->skill_lv, sg->bl_flag | BL_SKILL | ~BCT_SELF, tick);
break;
case UNT_LANDMINE:
case UNT_BLASTMINE:
@@ -18976,7 +19003,7 @@ static int skill_destroy_trap(struct block_list *bl, va_list ap)
case UNT_FLASHER:
case UNT_FREEZINGTRAP:
case UNT_CLUSTERBOMB:
- map->foreachinrange(skill->trap_splash,&su->bl, skill->get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, &su->bl,tick);
+ skill->trap_do_splash(&su->bl, sg->skill_id, sg->skill_lv, sg->bl_flag, tick);
break;
}
// Traps aren't recovered.
@@ -21572,6 +21599,7 @@ void skill_defaults(void)
skill->onskillusage = skill_onskillusage;
skill->cell_overlap = skill_cell_overlap;
skill->timerskill = skill_timerskill;
+ skill->trap_do_splash = skill_trap_do_splash;
skill->trap_splash = skill_trap_splash;
skill->check_condition_mercenary = skill_check_condition_mercenary;
skill->locate_element_field = skill_locate_element_field;
diff --git a/src/map/skill.h b/src/map/skill.h
index 97134224e..0ace19927 100644
--- a/src/map/skill.h
+++ b/src/map/skill.h
@@ -2059,6 +2059,7 @@ struct skill_interface {
int (*onskillusage) (struct map_session_data *sd, struct block_list *bl, uint16 skill_id, int64 tick);
int (*cell_overlap) (struct block_list *bl, va_list ap);
int (*timerskill) (int tid, int64 tick, int id, intptr_t data);
+ void (*trap_do_splash) (struct block_list *bl, uint16 skill_id, uint16 skill_lv, int bl_flag, int64 tick);
int (*trap_splash) (struct block_list *bl, va_list ap);
int (*check_condition_mercenary) (struct block_list *bl, int skill_id, int lv, int type);
struct skill_unit_group *(*locate_element_field) (struct block_list *bl);
diff --git a/src/map/status.c b/src/map/status.c
index 2bd3700b3..edcdd515d 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -1240,10 +1240,15 @@ static void status_copy(struct status_data *a, const struct status_data *b)
memcpy((void*)&a->max_hp, (const void*)&b->max_hp, sizeof(struct status_data)-(sizeof(a->hp)+sizeof(a->sp)));
}
-//Sets HP to given value. Flag is the flag passed to status->heal in case
-//final value is higher than current (use 2 to make a healing effect display
-//on players) It will always succeed (overrides Berserk block), but it can't kill.
-static int status_set_hp(struct block_list *bl, unsigned int hp, int flag)
+/**
+ * Sets HP to the given value.
+ *
+ * @param bl The target unit.
+ * @param hp The desired HP value.
+ * @param flag Additional options. @see enum status_heal_flag. STATUS_HEAL_FORCED is always implied.
+ * @return The amount of HP gained.
+ */
+static int status_set_hp(struct block_list *bl, unsigned int hp, enum status_heal_flag flag)
{
struct status_data *st;
if (hp < 1) return 0;
@@ -1254,14 +1259,19 @@ static int status_set_hp(struct block_list *bl, unsigned int hp, int flag)
if (hp > st->max_hp) hp = st->max_hp;
if (hp == st->hp) return 0;
if (hp > st->hp)
- return status->heal(bl, hp - st->hp, 0, 1|flag);
+ return status->heal(bl, hp - st->hp, 0, STATUS_HEAL_FORCED | flag);
return status_zap(bl, st->hp - hp, 0);
}
-//Sets SP to given value. Flag is the flag passed to status->heal in case
-//final value is higher than current (use 2 to make a healing effect display
-//on players)
-static int status_set_sp(struct block_list *bl, unsigned int sp, int flag)
+/**
+ * Sets SP to the given value.
+ *
+ * @param bl The target unit.
+ * @param hp The desired SP value.
+ * @param flag Additional options. @see enum status_heal_flag. STATUS_HEAL_FORCED is always implied.
+ * @return The amount of SP gained.
+ */
+static int status_set_sp(struct block_list *bl, unsigned int sp, enum status_heal_flag flag)
{
struct status_data *st;
@@ -1272,7 +1282,7 @@ static int status_set_sp(struct block_list *bl, unsigned int sp, int flag)
if (sp > st->max_sp) sp = st->max_sp;
if (sp == st->sp) return 0;
if (sp > st->sp)
- return status->heal(bl, 0, sp - st->sp, 1|flag);
+ return status->heal(bl, 0, sp - st->sp, STATUS_HEAL_FORCED | flag);
return status_zap(bl, 0, st->sp - sp);
}
@@ -1304,12 +1314,12 @@ static int status_damage(struct block_list *src, struct block_list *target, int6
sp = 0; //Not a valid SP target.
if (hp < 0) { //Assume absorbed damage.
- status->heal(target, -hp, 0, 1);
+ status->heal(target, -hp, 0, STATUS_HEAL_FORCED);
hp = 0;
}
if (sp < 0) {
- status->heal(target, 0, -sp, 1);
+ status->heal(target, 0, -sp, STATUS_HEAL_FORCED);
sp = 0;
}
@@ -1527,9 +1537,16 @@ static int status_damage(struct block_list *src, struct block_list *target, int6
return (int)(hp+sp);
}
-//Heals a character. If flag&1, this is forced healing (otherwise stuff like Berserk can block it)
-//If flag&2, when the player is healed, show the HP/SP heal effect.
-static int status_heal(struct block_list *bl, int64 in_hp, int64 in_sp, int flag)
+/**
+ * Heals a character.
+ *
+ * @param bl The target unit.
+ * @param in_hp Amount of HP to recover.
+ * @param in_sp Amount of SP to recover.
+ * @param flag Additional options, @see enum status_heal_flag.
+ * @return The amount of HP + SP healed.
+ */
+static int status_heal(struct block_list *bl, int64 in_hp, int64 in_sp, enum status_heal_flag flag)
{
struct status_data *st;
struct status_change *sc;
@@ -1538,7 +1555,9 @@ static int status_heal(struct block_list *bl, int64 in_hp, int64 in_sp, int flag
nullpo_ret(bl);
st = status->get_status_data(bl);
- if (st == &status->dummy || !st->hp)
+ if (st == &status->dummy)
+ return 0;
+ if (st->hp == 0 && (flag & STATUS_HEAL_ALLOWREVIVE) != 0)
return 0;
/* From here onwards, we consider it a 32-type as the client does not support higher and the value doesn't get through percentage modifiers */
@@ -1555,10 +1574,10 @@ static int status_heal(struct block_list *bl, int64 in_hp, int64 in_sp, int flag
hp = 0;
}
- if(hp) {
- if( sc && sc->data[SC_BERSERK] ) {
- if( flag&1 )
- flag &= ~2;
+ if (hp != 0) {
+ if (sc && sc->data[SC_BERSERK] != NULL) {
+ if ((flag & STATUS_HEAL_FORCED) != 0)
+ flag &= ~STATUS_HEAL_SHOWEFFECT;
else
hp = 0;
}
@@ -1593,7 +1612,7 @@ static int status_heal(struct block_list *bl, int64 in_hp, int64 in_sp, int flag
// send hp update to client
switch(bl->type) {
- case BL_PC: pc->heal(BL_UCAST(BL_PC, bl), hp, sp, (flag&2) ? 1 : 0); break;
+ case BL_PC: pc->heal(BL_UCAST(BL_PC, bl), hp, sp, (flag & STATUS_HEAL_SHOWEFFECT) != 0 ? 1 : 0); break;
case BL_MOB: mob->heal(BL_UCAST(BL_MOB, bl), hp); break;
case BL_HOM: homun->healed(BL_UCAST(BL_HOM, bl)); break;
case BL_MER: mercenary->heal(BL_UCAST(BL_MER, bl), hp, sp); break;
@@ -1648,18 +1667,18 @@ static int status_percent_change(struct block_list *src, struct block_list *targ
if (flag)
status->damage(src, target, INT_MAX, 0, 0, (!src||src==target?5:1));
else
- status->heal(target, INT_MAX, 0, 0);
+ status->heal(target, INT_MAX, 0, STATUS_HEAL_DEFAULT);
}
if (sp > INT_MAX) {
sp -= INT_MAX;
if (flag)
status->damage(src, target, 0, INT_MAX, 0, (!src||src==target?5:1));
else
- status->heal(target, 0, INT_MAX, 0);
+ status->heal(target, 0, INT_MAX, STATUS_HEAL_DEFAULT);
}
if (flag)
return status->damage(src, target, hp, sp, 0, (!src||src==target?5:1));
- return status->heal(target, hp, sp, 0);
+ return status->heal(target, hp, sp, STATUS_HEAL_DEFAULT);
}
static int status_revive(struct block_list *bl, unsigned char per_hp, unsigned char per_sp)
@@ -2330,6 +2349,51 @@ static unsigned int status_get_base_maxhp(const struct map_session_data *sd, con
return (unsigned int)cap_value(val,0,UINT_MAX);
}
+/**
+ * Calculates the HP that a character will have after death, on respawn.
+ *
+ * @param sd The character to calculate.
+ * @param st The character's status data.
+ */
+static unsigned int status_get_restart_hp(const struct map_session_data *sd, const struct status_data *st)
+{
+ unsigned int hp = 0;
+
+ if (sd->special_state.restart_full_recover)
+ return st->max_hp;
+
+ if ((sd->job & MAPID_BASEMASK) == MAPID_NOVICE && (sd->job & JOBL_2) == 0 && battle_config.restart_hp_rate < 50)
+ hp = st->max_hp / 2;
+ else
+ hp = APPLY_RATE(st->max_hp, battle_config.restart_hp_rate);
+
+ if (hp > 0)
+ return hp;
+
+ return 1;
+}
+
+/**
+ * Calculates the SP that a character will have after death, on respawn.
+ *
+ * @param sd The character to calculate.
+ * @param st The character's status data.
+ */
+static unsigned int status_get_restart_sp(const struct map_session_data *sd, const struct status_data *st)
+{
+ unsigned int sp = 0;
+
+ if (sd->special_state.restart_full_recover)
+ return st->max_sp;
+
+ sp = APPLY_RATE(st->max_sp, battle_config.restart_sp_rate);
+
+ if (sp > 0)
+ return sp;
+
+ return 1; // the minimum for the respawn setting is SP:1
+}
+
static void status_calc_pc_additional(struct map_session_data *sd, enum e_status_calc_opt opt)
{
/* Just used for Plugin to give bonuses. */
@@ -2884,20 +2948,8 @@ static int status_calc_pc_(struct map_session_data *sd, enum e_status_calc_opt o
// ----- RESPAWN HP/SP -----
//
//Calc respawn hp and store it on base_status
- if (sd->special_state.restart_full_recover)
- {
- bstatus->hp = bstatus->max_hp;
- bstatus->sp = bstatus->max_sp;
- } else {
- status->calc_pc_recover_hp(sd, bstatus);
- if(!bstatus->hp)
- bstatus->hp = 1;
-
- bstatus->sp = APPLY_RATE(bstatus->max_sp, battle_config.restart_sp_rate);
-
- if( !bstatus->sp ) /* the minimum for the respawn setting is SP:1 */
- bstatus->sp = 1;
- }
+ bstatus->hp = status->get_restart_hp(sd, bstatus);
+ bstatus->sp = status->get_restart_sp(sd, bstatus);
// ----- MISC CALCULATION -----
status->calc_misc(&sd->bl, bstatus, sd->status.base_level);
@@ -9410,10 +9462,10 @@ static int status_change_start(struct block_list *src, struct block_list *bl, en
return 0;
PER( 100 / (status_get_max_hp(bl) / hp), lv );
- status->heal(bl, (!(hp%2) ? (6-lv) *4 / 100 : -(lv*4) / 100), 0, 1);
+ status->heal(bl, (!(hp%2) ? (6-lv) *4 / 100 : -(lv*4) / 100), 0, STATUS_HEAL_FORCED);
PER( 100 / (status_get_max_sp(bl) / sp), lv );
- status->heal(bl, 0,(!(sp%2) ? (6-lv) *3 / 100 : -(lv*3) / 100), 1);
+ status->heal(bl, 0,(!(sp%2) ? (6-lv) *3 / 100 : -(lv*3) / 100), STATUS_HEAL_FORCED);
}
#undef PER
break;
@@ -9646,8 +9698,8 @@ static int status_change_start(struct block_list *src, struct block_list *bl, en
switch (type) {
case SC_BERSERK:
if (!(sce->val2)) { //don't heal if already set
- status->heal(bl, st->max_hp, 0, 1); //Do not use percent_heal as this healing must override BERSERK's block.
- status->set_sp(bl, 0, 0); //Damage all SP
+ status->heal(bl, st->max_hp, 0, STATUS_HEAL_FORCED); //Do not use percent_heal as this healing must override BERSERK's block.
+ status->set_sp(bl, 0, STATUS_HEAL_DEFAULT); //Damage all SP
}
sce->val2 = 5 * st->max_hp / 100;
break;
@@ -10557,20 +10609,9 @@ static bool status_is_immune_to_status(struct status_change *sc, enum sc_type ty
if (type >= SC_COMMON_MIN && type <= SC_COMMON_MAX) // Confirmed.
return true; // Immune to status ailements
switch (type) {
- case SC_DEEP_SLEEP:
case SC__CHAOS:
- case SC_BURNING:
- case SC_STUN:
- case SC_SLEEP:
- case SC_CURSE:
case SC_STONE:
- case SC_POISON:
- case SC_BLIND:
- case SC_SILENCE:
- case SC_BLOODING:
- case SC_FREEZE:
case SC_FROSTMISTY:
- case SC_COLD:
case SC_TOXIN:
case SC_PARALYSE:
case SC_VENOMBLEED:
@@ -10586,20 +10627,9 @@ static bool status_is_immune_to_status(struct status_change *sc, enum sc_type ty
if (type >= SC_COMMON_MIN && type <= SC_COMMON_MAX)
return true; // Immune to status ailements
switch (type) {
- case SC_POISON:
- case SC_BLIND:
- case SC_STUN:
- case SC_SILENCE:
case SC__CHAOS:
case SC_STONE:
- case SC_SLEEP:
- case SC_BLOODING:
- case SC_CURSE:
- case SC_BURNING:
case SC_FROSTMISTY:
- case SC_FREEZE:
- case SC_COLD:
- case SC_FEAR:
case SC_TOXIN:
case SC_PARALYSE:
case SC_VENOMBLEED:
@@ -10608,7 +10638,6 @@ static bool status_is_immune_to_status(struct status_change *sc, enum sc_type ty
case SC_PYREXIA:
case SC_OBLIVIONCURSE:
case SC_LEECHESEND:
- case SC_DEEP_SLEEP:
case SC_SATURDAY_NIGHT_FEVER:
case SC__BODYPAINT:
case SC__ENERVATION:
@@ -10996,7 +11025,7 @@ static int status_change_end_(struct block_list *bl, enum sc_type type, int tid,
status_percent_heal(bl, 100, 0);
status_change_end(bl, SC__BLOODYLUST, INVALID_TIMER);
} else if(st->hp > 100 && sce->val2) //If val2 is removed, no HP penalty (dispelled?) [Skotlex]
- status->set_hp(bl, 100, 0);
+ status->set_hp(bl, 100, STATUS_HEAL_DEFAULT);
if(sc->data[SC_ENDURE] && sc->data[SC_ENDURE]->val4 == 2) {
sc->data[SC_ENDURE]->val4 = 0;
status_change_end(bl, SC_ENDURE, INVALID_TIMER);
@@ -11048,8 +11077,8 @@ static int status_change_end_(struct block_list *bl, enum sc_type type, int tid,
if (tid == INVALID_TIMER)
break;
// "lose almost all their HP and SP" on natural expiration.
- status->set_hp(bl, 10, 0);
- status->set_sp(bl, 10, 0);
+ status->set_hp(bl, 10, STATUS_HEAL_DEFAULT);
+ status->set_sp(bl, 10, STATUS_HEAL_DEFAULT);
break;
case SC_AUTOTRADE:
if (tid == INVALID_TIMER)
@@ -11460,8 +11489,8 @@ static int kaahi_heal_timer(int tid, int64 tick, int id, intptr_t data)
hp = st->max_hp - st->hp;
if (hp > sce->val2)
hp = sce->val2;
- if (hp)
- status->heal(bl, hp, 0, 2);
+ if (hp != 0)
+ status->heal(bl, hp, 0, STATUS_HEAL_SHOWEFFECT);
sce->val4 = INVALID_TIMER;
return 1;
}
@@ -11667,7 +11696,7 @@ static int status_change_timer(int tid, int64 tick, int id, intptr_t data)
int hp = 0;
if (st->hp < st->max_hp)
hp = (sce->val1 < 0) ? (int)(sd->status.max_hp * -1 * sce->val1 / 100.) : sce->val1 ;
- status->heal(bl, hp, 0, 2);
+ status->heal(bl, hp, 0, STATUS_HEAL_SHOWEFFECT);
sc_timer_next((sce->val2 * 1000) + tick, status->change_timer, bl->id, data);
return 0;
}
@@ -11816,7 +11845,7 @@ static int status_change_timer(int tid, int64 tick, int id, intptr_t data)
break;
case SC_ABUNDANCE:
if(--(sce->val4) > 0) {
- status->heal(bl,0,60,0);
+ status->heal(bl, 0, 60, STATUS_HEAL_DEFAULT);
sc_timer_next(10000+tick, status->change_timer, bl->id, data);
}
break;
@@ -11932,7 +11961,7 @@ static int status_change_timer(int tid, int64 tick, int id, intptr_t data)
heal = ~heal + 1;
map->freeblock_lock();
- status->heal(bl, heal, 0, 2);
+ status->heal(bl, heal, 0, STATUS_HEAL_SHOWEFFECT);
if( sc->data[type] ) {
sc_timer_next(5000 + tick, status->change_timer, bl->id, data);
}
@@ -12055,7 +12084,7 @@ static int status_change_timer(int tid, int64 tick, int id, intptr_t data)
if ( sc->data[type] ) {
sc_timer_next(1000 + tick, status->change_timer, bl->id, data);
}
- status->heal(src, damage*(5 + 5 * sce->val1)/100, 0, 0); // 5 + 5% per level
+ status->heal(src, damage*(5 + 5 * sce->val1)/100, 0, STATUS_HEAL_DEFAULT); // 5 + 5% per level
map->freeblock_unlock();
return 0;
}
@@ -12072,7 +12101,7 @@ static int status_change_timer(int tid, int64 tick, int id, intptr_t data)
case SC_DEEP_SLEEP:
if( --(sce->val4) >= 0 )
{// Recovers 3% of the player's MaxHP/MaxSP every 2 seconds.
- status->heal(bl, st->max_hp * 3 / 100, st->max_sp * 3 / 100, 2);
+ status->heal(bl, st->max_hp * 3 / 100, st->max_sp * 3 / 100, STATUS_HEAL_SHOWEFFECT);
sc_timer_next(2000 + tick, status->change_timer, bl->id, data);
return 0;
}
@@ -12082,7 +12111,7 @@ static int status_change_timer(int tid, int64 tick, int id, intptr_t data)
if( --(sce->val4) >= 0 ) {
if( !status->charge(bl,0,sce->val3) )
break;
- status->heal(bl, sce->val2, 0, 1);
+ status->heal(bl, sce->val2, 0, STATUS_HEAL_FORCED);
sc_timer_next(1000 + tick, status->change_timer, bl->id, data);
return 0;
}
@@ -12090,7 +12119,7 @@ static int status_change_timer(int tid, int64 tick, int id, intptr_t data)
case SC_SONG_OF_MANA:
if( --(sce->val4) >= 0 ) {
- status->heal(bl,0,sce->val3,3);
+ status->heal(bl, 0, sce->val3, STATUS_HEAL_FORCED | STATUS_HEAL_SHOWEFFECT);
sc_timer_next(5000 + tick, status->change_timer, bl->id, data);
return 0;
}
@@ -12284,7 +12313,7 @@ static int status_change_timer(int tid, int64 tick, int id, intptr_t data)
return 0;
case SC_MEIKYOUSISUI:
if( --(sce->val4) > 0 ) {
- status->heal(bl, st->max_hp * (sce->val1+1) / 100, st->max_sp * sce->val1 / 100, 0);
+ status->heal(bl, st->max_hp * (sce->val1+1) / 100, st->max_sp * sce->val1 / 100, STATUS_HEAL_DEFAULT);
sc_timer_next(1000 + tick, status->change_timer, bl->id, data);
return 0;
}
@@ -12320,7 +12349,7 @@ static int status_change_timer(int tid, int64 tick, int id, intptr_t data)
break;
case SC_FRIGG_SONG:
if( --(sce->val4) > 0 ) {
- status->heal(bl, sce->val3, 0, 0);
+ status->heal(bl, sce->val3, 0, STATUS_HEAL_DEFAULT);
sc_timer_next(1000 + tick, status->change_timer, bl->id, data);
return 0;
}
@@ -12902,7 +12931,7 @@ static int status_natural_heal(struct block_list *bl, va_list args)
sregen->tick.hp += val;
while(sregen->tick.hp >= (unsigned int)battle_config.natural_heal_skill_interval) {
sregen->tick.hp -= battle_config.natural_heal_skill_interval;
- if(status->heal(bl, sregen->hp, 0, 3) < sregen->hp) {
+ if (status->heal(bl, sregen->hp, 0, STATUS_HEAL_FORCED | STATUS_HEAL_SHOWEFFECT) < sregen->hp) {
//Full
flag&=~(RGN_HP|RGN_SHP);
break;
@@ -12917,7 +12946,7 @@ static int status_natural_heal(struct block_list *bl, va_list args)
sregen->tick.sp += val;
while(sregen->tick.sp >= (unsigned int)battle_config.natural_heal_skill_interval) {
sregen->tick.sp -= battle_config.natural_heal_skill_interval;
- if(status->heal(bl, 0, sregen->sp, 3) < sregen->sp) {
+ if (status->heal(bl, 0, sregen->sp, STATUS_HEAL_FORCED | STATUS_HEAL_SHOWEFFECT) < sregen->sp) {
//Full
flag&=~(RGN_SP|RGN_SSP);
break;
@@ -12966,7 +12995,7 @@ static int status_natural_heal(struct block_list *bl, va_list args)
val += regen->hp;
regen->tick.hp -= battle_config.natural_healhp_interval;
} while(regen->tick.hp >= (unsigned int)battle_config.natural_healhp_interval);
- if (status->heal(bl, val, 0, 1) < val)
+ if (status->heal(bl, val, 0, STATUS_HEAL_FORCED) < val)
flag&=~RGN_SHP; //full.
}
}
@@ -12985,7 +13014,7 @@ static int status_natural_heal(struct block_list *bl, va_list args)
val += regen->sp;
regen->tick.sp -= battle_config.natural_healsp_interval;
} while(regen->tick.sp >= (unsigned int)battle_config.natural_healsp_interval);
- if (status->heal(bl, 0, val, 1) < val)
+ if (status->heal(bl, 0, val, STATUS_HEAL_FORCED) < val)
flag&=~RGN_SSP; //full.
}
}
@@ -13002,7 +13031,7 @@ static int status_natural_heal(struct block_list *bl, va_list args)
while(sregen->tick.hp >= (unsigned int)battle_config.natural_heal_skill_interval) {
sregen->tick.hp -= battle_config.natural_heal_skill_interval;
- if(status->heal(bl, sregen->hp, 0, 3) < sregen->hp)
+ if (status->heal(bl, sregen->hp, 0, STATUS_HEAL_FORCED | STATUS_HEAL_SHOWEFFECT) < sregen->hp)
break; //Full
}
}
@@ -13027,7 +13056,7 @@ static int status_natural_heal(struct block_list *bl, va_list args)
}
}
sregen->tick.sp -= battle_config.natural_heal_skill_interval;
- if(status->heal(bl, 0, val, 3) < val)
+ if (status->heal(bl, 0, val, STATUS_HEAL_FORCED | STATUS_HEAL_SHOWEFFECT) < val)
break; //Full
}
}
@@ -13752,6 +13781,8 @@ void status_defaults(void)
status->base_atk = status_base_atk;
status->get_base_maxhp = status_get_base_maxhp;
status->get_base_maxsp = status_get_base_maxsp;
+ status->get_restart_hp = status_get_restart_hp;
+ status->get_restart_sp = status_get_restart_sp;
status->calc_npc_ = status_calc_npc_;
status->calc_str = status_calc_str;
status->calc_agi = status_calc_agi;
diff --git a/src/map/status.h b/src/map/status.h
index e7cd5e94c..17af22703 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -99,6 +99,16 @@ enum scstart_flag {
SCFLAG_ALL = SCFLAG_NONE|SCFLAG_NOAVOID|SCFLAG_FIXEDTICK|SCFLAG_LOADED|SCFLAG_FIXEDRATE|SCFLAG_NOICON
};
+/**
+ * Flags to be used with status->heal() and related functions.
+ */
+enum status_heal_flag {
+ STATUS_HEAL_DEFAULT = 0x00, ///< Default
+ STATUS_HEAL_FORCED = 0x01, ///< Forced healing (bypassing Berserk and similar)
+ STATUS_HEAL_SHOWEFFECT = 0x02, ///< Show the HP/SP heal effect
+ STATUS_HEAL_ALLOWREVIVE = 0x04, ///< Force resurrection in case of dead targets.
+};
+
// Status changes listing. These code are for use by the server.
typedef enum sc_type {
SC_NONE = -1,
@@ -1900,7 +1910,7 @@ enum e_joint_break
/**
* Mob mode definitions. [Skotlex]
*
- * @see doc/mob_db_mode_list.txt for a description of each mode.
+ * @see doc/mob_db_mode_list.md for a description of each mode.
*/
enum e_mode
{
@@ -2309,9 +2319,9 @@ struct status_interface {
int (*charge) (struct block_list* bl, int64 hp, int64 sp);
int (*percent_change) (struct block_list *src,struct block_list *target,signed char hp_rate, signed char sp_rate, int flag);
//Used to set the hp/sp of an object to an absolute value (can't kill)
- int (*set_hp) (struct block_list *bl, unsigned int hp, int flag);
- 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 (*set_hp) (struct block_list *bl, unsigned int hp, enum status_heal_flag flag);
+ int (*set_sp) (struct block_list *bl, unsigned int sp, enum status_heal_flag flag);
+ int (*heal) (struct block_list *bl,int64 hp,int64 sp, enum status_heal_flag flag);
int (*revive) (struct block_list *bl, unsigned char per_hp, unsigned char per_sp);
int (*fixed_revive) (struct block_list *bl, unsigned int per_hp, unsigned int per_sp);
struct regen_data * (*get_regen_data) (struct block_list *bl);
@@ -2384,6 +2394,8 @@ struct status_interface {
unsigned short (*base_atk) (const struct block_list *bl, const struct status_data *st);
unsigned int (*get_base_maxhp) (const struct map_session_data *sd, const struct status_data *st);
unsigned int (*get_base_maxsp) (const struct map_session_data *sd, const struct status_data *st);
+ unsigned int (*get_restart_hp) (const struct map_session_data *sd, const struct status_data *st);
+ unsigned int (*get_restart_sp) (const struct map_session_data *sd, const struct status_data *st);
int (*calc_npc_) (struct npc_data *nd, enum e_status_calc_opt opt);
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);
diff --git a/src/map/storage.c b/src/map/storage.c
index 4123ddc7c..a6f0715e7 100644
--- a/src/map/storage.c
+++ b/src/map/storage.c
@@ -122,8 +122,8 @@ static int storage_storageopen(struct map_session_data *sd)
if (sd->storage.aggregate > 0) {
storage->sortitem(VECTOR_DATA(sd->storage.item), VECTOR_LENGTH(sd->storage.item));
- clif->storagelist(sd, VECTOR_DATA(sd->storage.item), VECTOR_LENGTH(sd->storage.item));
}
+ clif->storageList(sd, VECTOR_DATA(sd->storage.item), VECTOR_LENGTH(sd->storage.item));
clif->updatestorageamount(sd, sd->storage.aggregate, MAX_STORAGE);
return 0;
@@ -297,7 +297,7 @@ static int storage_add_from_inventory(struct map_session_data *sd, int index, in
if (storage->additem(sd, &sd->status.inventory[index], amount) == 0)
pc->delitem(sd, index, amount, 0, DELITEM_TOSTORAGE, LOG_TYPE_STORAGE);
else
- clif->dropitem(sd, index, 0);
+ clif->item_movefailed(sd, index);
return 1;
}
@@ -398,7 +398,9 @@ static int storage_storagegettocart(struct map_session_data *sd, int index, int
if ((flag = pc->cart_additem(sd, it, amount, LOG_TYPE_STORAGE)) == 0)
storage->delitem(sd, index, amount);
else {
+ // probably this line is useless? it remove inventory lock but not storage [4144]
clif->dropitem(sd, index,0);
+
clif->cart_additem_ack(sd, flag == 1?0x0:0x1);
}
@@ -510,7 +512,7 @@ static int storage_guild_storageopen(struct map_session_data *sd)
gstor->storage_status = 1;
sd->state.storage_flag = STORAGE_FLAG_GUILD;
storage->sortitem(gstor->items, ARRAYLENGTH(gstor->items));
- clif->storagelist(sd, gstor->items, ARRAYLENGTH(gstor->items));
+ clif->guildStorageList(sd, gstor->items, ARRAYLENGTH(gstor->items));
clif->updatestorageamount(sd, gstor->storage_amount, MAX_GUILD_STORAGE);
return 0;
}
@@ -638,7 +640,7 @@ static int storage_guild_storageadd(struct map_session_data *sd, int index, int
if( gstorage->additem(sd,stor,&sd->status.inventory[index],amount) == 0 )
pc->delitem(sd, index, amount, 0, DELITEM_TOSTORAGE, LOG_TYPE_GSTORAGE);
else
- clif->dropitem(sd, index, 0);
+ clif->item_movefailed(sd, index);
return 1;
}
diff --git a/src/plugins/HPMHooking/HPMHooking.Defs.inc b/src/plugins/HPMHooking/HPMHooking.Defs.inc
index 0c63a98b6..0a70f6d1a 100644
--- a/src/plugins/HPMHooking/HPMHooking.Defs.inc
+++ b/src/plugins/HPMHooking/HPMHooking.Defs.inc
@@ -176,8 +176,12 @@ typedef void (*HPMHOOK_pre_achievement_init_titles) (struct map_session_data **s
typedef void (*HPMHOOK_post_achievement_init_titles) (struct map_session_data *sd);
typedef bool (*HPMHOOK_pre_achievement_check_title) (struct map_session_data **sd, int *title_id);
typedef bool (*HPMHOOK_post_achievement_check_title) (bool retVal___, struct map_session_data *sd, int title_id);
-typedef void (*HPMHOOK_pre_achievement_get_rewards) (struct map_session_data **sd, const struct achievement_data **ad);
-typedef void (*HPMHOOK_post_achievement_get_rewards) (struct map_session_data *sd, const struct achievement_data *ad);
+typedef bool (*HPMHOOK_pre_achievement_get_rewards) (struct map_session_data **sd, const struct achievement_data **ad);
+typedef bool (*HPMHOOK_post_achievement_get_rewards) (bool retVal___, struct map_session_data *sd, const struct achievement_data *ad);
+typedef void (*HPMHOOK_pre_achievement_get_rewards_buffs) (struct map_session_data **sd, const struct achievement_data **ad);
+typedef void (*HPMHOOK_post_achievement_get_rewards_buffs) (struct map_session_data *sd, const struct achievement_data *ad);
+typedef void (*HPMHOOK_pre_achievement_get_rewards_items) (struct map_session_data **sd, const struct achievement_data **ad);
+typedef void (*HPMHOOK_post_achievement_get_rewards_items) (struct map_session_data *sd, const struct achievement_data *ad);
#endif // MAP_ACHIEVEMENT_H
#ifdef MAP_ATCOMMAND_H /* atcommand */
typedef void (*HPMHOOK_pre_atcommand_init) (bool *minimal);
@@ -278,6 +282,8 @@ typedef void (*HPMHOOK_pre_battle_drain) (struct map_session_data **sd, struct b
typedef void (*HPMHOOK_post_battle_drain) (struct map_session_data *sd, struct block_list *tbl, int64 rdamage, int64 ldamage, int race, int boss);
typedef void (*HPMHOOK_pre_battle_reflect_damage) (struct block_list **target, struct block_list **src, struct Damage **wd, uint16 *skill_id);
typedef void (*HPMHOOK_post_battle_reflect_damage) (struct block_list *target, struct block_list *src, struct Damage *wd, uint16 skill_id);
+typedef void (*HPMHOOK_pre_battle_reflect_trap) (struct block_list **target, struct block_list **src, struct Damage **md, uint16 *skill_id);
+typedef void (*HPMHOOK_post_battle_reflect_trap) (struct block_list *target, struct block_list *src, struct Damage *md, uint16 skill_id);
typedef int (*HPMHOOK_pre_battle_attr_ratio) (int *atk_elem, int *def_type, int *def_lv);
typedef int (*HPMHOOK_post_battle_attr_ratio) (int retVal___, int atk_elem, int def_type, int def_lv);
typedef int64 (*HPMHOOK_pre_battle_attr_fix) (struct block_list **src, struct block_list **target, int64 *damage, int *atk_elem, int *def_type, int *def_lv);
@@ -1116,6 +1122,8 @@ typedef void (*HPMHOOK_pre_clif_delitem) (struct map_session_data **sd, int *n,
typedef void (*HPMHOOK_post_clif_delitem) (struct map_session_data *sd, int n, int amount, short reason);
typedef void (*HPMHOOK_pre_clif_takeitem) (struct block_list **src, struct block_list **dst);
typedef void (*HPMHOOK_post_clif_takeitem) (struct block_list *src, struct block_list *dst);
+typedef void (*HPMHOOK_pre_clif_item_movefailed) (struct map_session_data **sd, int *n);
+typedef void (*HPMHOOK_post_clif_item_movefailed) (struct map_session_data *sd, int n);
typedef void (*HPMHOOK_pre_clif_item_equip) (short *idx, struct EQUIPITEM_INFO **p, struct item **i, struct item_data **id, int *eqp_pos);
typedef void (*HPMHOOK_post_clif_item_equip) (short idx, struct EQUIPITEM_INFO *p, struct item *i, struct item_data *id, int eqp_pos);
typedef void (*HPMHOOK_pre_clif_item_normal) (short *idx, struct NORMALITEM_INFO **p, struct item **i, struct item_data **id);
@@ -1318,12 +1326,18 @@ typedef void (*HPMHOOK_pre_clif_status_change) (struct block_list **bl, int *typ
typedef void (*HPMHOOK_post_clif_status_change) (struct block_list *bl, int type, int flag, int tick, int val1, int val2, int val3);
typedef void (*HPMHOOK_pre_clif_insert_card) (struct map_session_data **sd, int *idx_equip, int *idx_card, int *flag);
typedef void (*HPMHOOK_post_clif_insert_card) (struct map_session_data *sd, int idx_equip, int idx_card, int flag);
-typedef void (*HPMHOOK_pre_clif_inventorylist) (struct map_session_data **sd);
-typedef void (*HPMHOOK_post_clif_inventorylist) (struct map_session_data *sd);
-typedef void (*HPMHOOK_pre_clif_equiplist) (struct map_session_data **sd);
-typedef void (*HPMHOOK_post_clif_equiplist) (struct map_session_data *sd);
-typedef void (*HPMHOOK_pre_clif_cartlist) (struct map_session_data **sd);
-typedef void (*HPMHOOK_post_clif_cartlist) (struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_inventoryList) (struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clif_inventoryList) (struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_inventoryItems) (struct map_session_data **sd, enum inventory_type *type);
+typedef void (*HPMHOOK_post_clif_inventoryItems) (struct map_session_data *sd, enum inventory_type type);
+typedef void (*HPMHOOK_pre_clif_equipList) (struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clif_equipList) (struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_equipItems) (struct map_session_data **sd, enum inventory_type *type);
+typedef void (*HPMHOOK_post_clif_equipItems) (struct map_session_data *sd, enum inventory_type type);
+typedef void (*HPMHOOK_pre_clif_cartList) (struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clif_cartList) (struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_cartItems) (struct map_session_data **sd, enum inventory_type *type);
+typedef void (*HPMHOOK_post_clif_cartItems) (struct map_session_data *sd, enum inventory_type type);
typedef void (*HPMHOOK_pre_clif_favorite_item) (struct map_session_data **sd, unsigned short *index);
typedef void (*HPMHOOK_post_clif_favorite_item) (struct map_session_data *sd, unsigned short index);
typedef void (*HPMHOOK_pre_clif_clearcart) (int *fd);
@@ -1504,6 +1518,10 @@ typedef void (*HPMHOOK_pre_clif_specialeffect_single) (struct block_list **bl, i
typedef void (*HPMHOOK_post_clif_specialeffect_single) (struct block_list *bl, int type, int fd);
typedef void (*HPMHOOK_pre_clif_specialeffect_value) (struct block_list **bl, int *effect_id, int *num, send_target *target);
typedef void (*HPMHOOK_post_clif_specialeffect_value) (struct block_list *bl, int effect_id, int num, send_target target);
+typedef void (*HPMHOOK_pre_clif_removeSpecialEffect) (struct block_list **bl, int *effectId, enum send_target *target);
+typedef void (*HPMHOOK_post_clif_removeSpecialEffect) (struct block_list *bl, int effectId, enum send_target target);
+typedef void (*HPMHOOK_pre_clif_removeSpecialEffect_single) (struct block_list **bl, int *effectId, struct block_list **targetBl);
+typedef void (*HPMHOOK_post_clif_removeSpecialEffect_single) (struct block_list *bl, int effectId, struct block_list *targetBl);
typedef void (*HPMHOOK_pre_clif_millenniumshield) (struct block_list **bl, short *shields);
typedef void (*HPMHOOK_post_clif_millenniumshield) (struct block_list *bl, short shields);
typedef void (*HPMHOOK_pre_clif_spiritcharm) (struct map_session_data **sd);
@@ -1566,6 +1584,8 @@ typedef void (*HPMHOOK_pre_clif_msgtable_skill) (struct map_session_data **sd, u
typedef void (*HPMHOOK_post_clif_msgtable_skill) (struct map_session_data *sd, uint16 skill_id, enum clif_messages msg_id);
typedef void (*HPMHOOK_pre_clif_msgtable_str) (struct map_session_data **sd, enum clif_messages *p1, const char **value);
typedef void (*HPMHOOK_post_clif_msgtable_str) (struct map_session_data *sd, enum clif_messages p1, const char *value);
+typedef void (*HPMHOOK_pre_clif_msgtable_str_color) (struct map_session_data **sd, enum clif_messages *p1, const char **value, uint32 *color);
+typedef void (*HPMHOOK_post_clif_msgtable_str_color) (struct map_session_data *sd, enum clif_messages p1, const char *value, uint32 color);
typedef void (*HPMHOOK_pre_clif_msgtable_color) (struct map_session_data **sd, enum clif_messages *p1, uint32 *color);
typedef void (*HPMHOOK_post_clif_msgtable_color) (struct map_session_data *sd, enum clif_messages p1, uint32 color);
typedef void (*HPMHOOK_pre_clif_message) (const int *fd, const char **mes);
@@ -1616,8 +1636,16 @@ typedef void (*HPMHOOK_pre_clif_openvendingAck) (int *fd, int *result);
typedef void (*HPMHOOK_post_clif_openvendingAck) (int fd, int result);
typedef void (*HPMHOOK_pre_clif_vendingreport) (struct map_session_data **sd, int *index, int *amount, uint32 *char_id, int *zeny);
typedef void (*HPMHOOK_post_clif_vendingreport) (struct map_session_data *sd, int index, int amount, uint32 char_id, int zeny);
-typedef void (*HPMHOOK_pre_clif_storagelist) (struct map_session_data **sd, struct item **items, int *items_length);
-typedef void (*HPMHOOK_post_clif_storagelist) (struct map_session_data *sd, struct item *items, int items_length);
+typedef void (*HPMHOOK_pre_clif_storageList) (struct map_session_data **sd, struct item **items, int *items_length);
+typedef void (*HPMHOOK_post_clif_storageList) (struct map_session_data *sd, struct item *items, int items_length);
+typedef void (*HPMHOOK_pre_clif_guildStorageList) (struct map_session_data **sd, struct item **items, int *items_length);
+typedef void (*HPMHOOK_post_clif_guildStorageList) (struct map_session_data *sd, struct item *items, int items_length);
+typedef void (*HPMHOOK_pre_clif_storageItems) (struct map_session_data **sd, enum inventory_type *type, struct item **items, int *items_length);
+typedef void (*HPMHOOK_post_clif_storageItems) (struct map_session_data *sd, enum inventory_type type, struct item *items, int items_length);
+typedef void (*HPMHOOK_pre_clif_inventoryStart) (struct map_session_data **sd, enum inventory_type *type, const char **name);
+typedef void (*HPMHOOK_post_clif_inventoryStart) (struct map_session_data *sd, enum inventory_type type, const char *name);
+typedef void (*HPMHOOK_pre_clif_inventoryEnd) (struct map_session_data **sd, enum inventory_type *type);
+typedef void (*HPMHOOK_post_clif_inventoryEnd) (struct map_session_data *sd, enum inventory_type type);
typedef void (*HPMHOOK_pre_clif_updatestorageamount) (struct map_session_data **sd, int *amount, int *max_amount);
typedef void (*HPMHOOK_post_clif_updatestorageamount) (struct map_session_data *sd, int amount, int max_amount);
typedef void (*HPMHOOK_pre_clif_storageitemadded) (struct map_session_data **sd, struct item **i, int *index, int *amount);
@@ -1690,10 +1718,10 @@ typedef void (*HPMHOOK_pre_clif_guild_invite) (struct map_session_data **sd, str
typedef void (*HPMHOOK_post_clif_guild_invite) (struct map_session_data *sd, struct guild *g);
typedef void (*HPMHOOK_pre_clif_guild_inviteack) (struct map_session_data **sd, int *flag);
typedef void (*HPMHOOK_post_clif_guild_inviteack) (struct map_session_data *sd, int flag);
-typedef void (*HPMHOOK_pre_clif_guild_leave) (struct map_session_data **sd, const char **name, const char **mes);
-typedef void (*HPMHOOK_post_clif_guild_leave) (struct map_session_data *sd, const char *name, const char *mes);
-typedef void (*HPMHOOK_pre_clif_guild_expulsion) (struct map_session_data **sd, const char **name, const char **mes, int *account_id);
-typedef void (*HPMHOOK_post_clif_guild_expulsion) (struct map_session_data *sd, const char *name, const char *mes, int account_id);
+typedef void (*HPMHOOK_pre_clif_guild_leave) (struct map_session_data **sd, const char **name, int *char_id, const char **mes);
+typedef void (*HPMHOOK_post_clif_guild_leave) (struct map_session_data *sd, const char *name, int char_id, const char *mes);
+typedef void (*HPMHOOK_pre_clif_guild_expulsion) (struct map_session_data **sd, const char **name, int *char_id, const char **mes, int *account_id);
+typedef void (*HPMHOOK_post_clif_guild_expulsion) (struct map_session_data *sd, const char *name, int char_id, const char *mes, int account_id);
typedef void (*HPMHOOK_pre_clif_guild_positionchanged) (struct guild **g, int *idx);
typedef void (*HPMHOOK_post_clif_guild_positionchanged) (struct guild *g, int idx);
typedef void (*HPMHOOK_pre_clif_guild_memberpositionchanged) (struct guild **g, int *idx);
@@ -1728,6 +1756,10 @@ typedef void (*HPMHOOK_pre_clif_guild_positioninfolist) (struct map_session_data
typedef void (*HPMHOOK_post_clif_guild_positioninfolist) (struct map_session_data *sd);
typedef void (*HPMHOOK_pre_clif_guild_expulsionlist) (struct map_session_data **sd);
typedef void (*HPMHOOK_post_clif_guild_expulsionlist) (struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_guild_set_position) (struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clif_guild_set_position) (struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_guild_position_selected) (struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clif_guild_position_selected) (struct map_session_data *sd);
typedef bool (*HPMHOOK_pre_clif_validate_emblem) (const uint8 **emblem, unsigned long *emblem_len);
typedef bool (*HPMHOOK_post_clif_validate_emblem) (bool retVal___, const uint8 *emblem, unsigned long emblem_len);
typedef void (*HPMHOOK_pre_clif_bg_hp) (struct map_session_data **sd);
@@ -2580,6 +2612,8 @@ typedef void (*HPMHOOK_pre_clif_stylist_send_rodexitem) (struct map_session_data
typedef void (*HPMHOOK_post_clif_stylist_send_rodexitem) (struct map_session_data *sd, int itemid);
typedef void (*HPMHOOK_pre_clif_pReqStyleChange) (int *fd, struct map_session_data **sd);
typedef void (*HPMHOOK_post_clif_pReqStyleChange) (int fd, struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_pReqStyleChange2) (int *fd, struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clif_pReqStyleChange2) (int fd, struct map_session_data *sd);
typedef void (*HPMHOOK_pre_clif_cz_req_style_change_sub) (struct map_session_data **sd, int *type, int16 *idx, bool *isitem);
typedef void (*HPMHOOK_post_clif_cz_req_style_change_sub) (struct map_session_data *sd, int type, int16 idx, bool isitem);
typedef void (*HPMHOOK_pre_clif_style_change_response) (struct map_session_data **sd, enum stylist_shop *flag);
@@ -2590,6 +2624,14 @@ typedef void (*HPMHOOK_pre_clif_petEvolutionResult) (int *fd, enum pet_evolution
typedef void (*HPMHOOK_post_clif_petEvolutionResult) (int fd, enum pet_evolution_result result);
typedef void (*HPMHOOK_pre_clif_party_dead_notification) (struct map_session_data **sd);
typedef void (*HPMHOOK_post_clif_party_dead_notification) (struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_pMemorialDungeonCommand) (int *fd, struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clif_pMemorialDungeonCommand) (int fd, struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_camera_showWindow) (struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clif_camera_showWindow) (struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_camera_change) (struct map_session_data **sd, float *range, float *rotation, float *latitude, enum send_target *target);
+typedef void (*HPMHOOK_post_clif_camera_change) (struct map_session_data *sd, float range, float rotation, float latitude, enum send_target target);
+typedef void (*HPMHOOK_pre_clif_item_preview) (struct map_session_data **sd, int *n);
+typedef void (*HPMHOOK_post_clif_item_preview) (struct map_session_data *sd, int n);
#endif // MAP_CLIF_H
#ifdef COMMON_CORE_H /* cmdline */
typedef void (*HPMHOOK_pre_cmdline_init) (void);
@@ -3116,6 +3158,8 @@ typedef bool (*HPMHOOK_pre_instance_valid) (int *instance_id);
typedef bool (*HPMHOOK_post_instance_valid) (bool retVal___, int instance_id);
typedef int (*HPMHOOK_pre_instance_destroy_timer) (int *tid, int64 *tick, int *id, intptr_t *data);
typedef int (*HPMHOOK_post_instance_destroy_timer) (int retVal___, int tid, int64 tick, int id, intptr_t data);
+typedef void (*HPMHOOK_pre_instance_force_destroy) (struct map_session_data **sd);
+typedef void (*HPMHOOK_post_instance_force_destroy) (struct map_session_data *sd);
#endif // MAP_INSTANCE_H
#ifdef CHAR_INT_ACHIEVEMENT_H /* inter_achievement */
typedef int (*HPMHOOK_pre_inter_achievement_sql_init) (void);
@@ -3500,8 +3544,8 @@ typedef int (*HPMHOOK_pre_intif_request_registry) (struct map_session_data **sd,
typedef int (*HPMHOOK_post_intif_request_registry) (int retVal___, struct map_session_data *sd, int flag);
typedef void (*HPMHOOK_pre_intif_request_account_storage) (const struct map_session_data **sd);
typedef void (*HPMHOOK_post_intif_request_account_storage) (const struct map_session_data *sd);
-typedef void (*HPMHOOK_pre_intif_send_account_storage) (const struct map_session_data **sd);
-typedef void (*HPMHOOK_post_intif_send_account_storage) (const struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_intif_send_account_storage) (struct map_session_data **sd);
+typedef void (*HPMHOOK_post_intif_send_account_storage) (struct map_session_data *sd);
typedef int (*HPMHOOK_pre_intif_request_guild_storage) (int *account_id, int *guild_id);
typedef int (*HPMHOOK_post_intif_request_guild_storage) (int retVal___, int account_id, int guild_id);
typedef int (*HPMHOOK_pre_intif_send_guild_storage) (int *account_id, struct guild_storage **gstor);
@@ -4414,12 +4458,16 @@ typedef void (*HPMHOOK_pre_map_zone_init) (void);
typedef void (*HPMHOOK_post_map_zone_init) (void);
typedef void (*HPMHOOK_pre_map_zone_remove) (int *m);
typedef void (*HPMHOOK_post_map_zone_remove) (int m);
+typedef void (*HPMHOOK_pre_map_zone_remove_all) (int *m);
+typedef void (*HPMHOOK_post_map_zone_remove_all) (int m);
typedef void (*HPMHOOK_pre_map_zone_apply) (int *m, struct map_zone_data **zone, const char **start, const char **buffer, const char **filepath);
typedef void (*HPMHOOK_post_map_zone_apply) (int m, struct map_zone_data *zone, const char *start, const char *buffer, const char *filepath);
typedef void (*HPMHOOK_pre_map_zone_change) (int *m, struct map_zone_data **zone, const char **start, const char **buffer, const char **filepath);
typedef void (*HPMHOOK_post_map_zone_change) (int m, struct map_zone_data *zone, const char *start, const char *buffer, const char *filepath);
typedef void (*HPMHOOK_pre_map_zone_change2) (int *m, struct map_zone_data **zone);
typedef void (*HPMHOOK_post_map_zone_change2) (int m, struct map_zone_data *zone);
+typedef void (*HPMHOOK_pre_map_zone_reload) (void);
+typedef void (*HPMHOOK_post_map_zone_reload) (void);
typedef int (*HPMHOOK_pre_map_getcell) (int16 *m, const struct block_list **bl, int16 *x, int16 *y, cell_chk *cellchk);
typedef int (*HPMHOOK_post_map_getcell) (int retVal___, int16 m, const struct block_list *bl, int16 x, int16 y, cell_chk cellchk);
typedef void (*HPMHOOK_pre_map_setgatcell) (int16 *m, int16 *x, int16 *y, int *gat);
@@ -5842,8 +5890,8 @@ typedef int (*HPMHOOK_pre_pc_search_inventory) (struct map_session_data **sd, in
typedef int (*HPMHOOK_post_pc_search_inventory) (int retVal___, struct map_session_data *sd, int item_id);
typedef int (*HPMHOOK_pre_pc_payzeny) (struct map_session_data **sd, int *zeny, enum e_log_pick_type *type, struct map_session_data **tsd);
typedef int (*HPMHOOK_post_pc_payzeny) (int retVal___, struct map_session_data *sd, int zeny, enum e_log_pick_type type, struct map_session_data *tsd);
-typedef int (*HPMHOOK_pre_pc_additem) (struct map_session_data **sd, struct item **item_data, int *amount, e_log_pick_type *log_type);
-typedef int (*HPMHOOK_post_pc_additem) (int retVal___, struct map_session_data *sd, struct item *item_data, int amount, e_log_pick_type log_type);
+typedef int (*HPMHOOK_pre_pc_additem) (struct map_session_data **sd, const struct item **item_data, int *amount, e_log_pick_type *log_type);
+typedef int (*HPMHOOK_post_pc_additem) (int retVal___, struct map_session_data *sd, const struct item *item_data, int amount, e_log_pick_type log_type);
typedef int (*HPMHOOK_pre_pc_getzeny) (struct map_session_data **sd, int *zeny, enum e_log_pick_type *type, struct map_session_data **tsd);
typedef int (*HPMHOOK_post_pc_getzeny) (int retVal___, struct map_session_data *sd, int zeny, enum e_log_pick_type type, struct map_session_data *tsd);
typedef int (*HPMHOOK_pre_pc_delitem) (struct map_session_data **sd, int *n, int *amount, int *type, short *reason, e_log_pick_type *log_type);
@@ -6438,6 +6486,8 @@ typedef bool (*HPMHOOK_pre_quest_questinfo_validate_homunculus_type) (struct map
typedef bool (*HPMHOOK_post_quest_questinfo_validate_homunculus_type) (bool retVal___, struct map_session_data *sd, struct questinfo *qi);
typedef bool (*HPMHOOK_pre_quest_questinfo_validate_quests) (struct map_session_data **sd, struct questinfo **qi);
typedef bool (*HPMHOOK_post_quest_questinfo_validate_quests) (bool retVal___, struct map_session_data *sd, struct questinfo *qi);
+typedef bool (*HPMHOOK_pre_quest_questinfo_validate_mercenary_class) (struct map_session_data **sd, struct questinfo **qi);
+typedef bool (*HPMHOOK_post_quest_questinfo_validate_mercenary_class) (bool retVal___, struct map_session_data *sd, struct questinfo *qi);
typedef void (*HPMHOOK_pre_quest_questinfo_vector_clear) (int *m);
typedef void (*HPMHOOK_post_quest_questinfo_vector_clear) (int m);
#endif // MAP_QUEST_H
@@ -6608,6 +6658,8 @@ typedef bool (*HPMHOOK_pre_script_config_read) (const char **filename, bool *imp
typedef bool (*HPMHOOK_post_script_config_read) (bool retVal___, const char *filename, bool imported);
typedef int (*HPMHOOK_pre_script_add_str) (const char **p);
typedef int (*HPMHOOK_post_script_add_str) (int retVal___, const char *p);
+typedef int (*HPMHOOK_pre_script_add_variable) (const char **varname);
+typedef int (*HPMHOOK_post_script_add_variable) (int retVal___, const char *varname);
typedef const char* (*HPMHOOK_pre_script_get_str) (int *id);
typedef const char* (*HPMHOOK_post_script_get_str) (const char* retVal___, int id);
typedef int (*HPMHOOK_pre_script_search_str) (const char **p);
@@ -7154,6 +7206,8 @@ typedef int (*HPMHOOK_pre_skill_cell_overlap) (struct block_list **bl, va_list a
typedef int (*HPMHOOK_post_skill_cell_overlap) (int retVal___, struct block_list *bl, va_list ap);
typedef int (*HPMHOOK_pre_skill_timerskill) (int *tid, int64 *tick, int *id, intptr_t *data);
typedef int (*HPMHOOK_post_skill_timerskill) (int retVal___, int tid, int64 tick, int id, intptr_t data);
+typedef void (*HPMHOOK_pre_skill_trap_do_splash) (struct block_list **bl, uint16 *skill_id, uint16 *skill_lv, int *bl_flag, int64 *tick);
+typedef void (*HPMHOOK_post_skill_trap_do_splash) (struct block_list *bl, uint16 skill_id, uint16 skill_lv, int bl_flag, int64 tick);
typedef int (*HPMHOOK_pre_skill_trap_splash) (struct block_list **bl, va_list ap);
typedef int (*HPMHOOK_post_skill_trap_splash) (int retVal___, struct block_list *bl, va_list ap);
typedef int (*HPMHOOK_pre_skill_check_condition_mercenary) (struct block_list **bl, int *skill_id, int *lv, int *type);
@@ -7530,12 +7584,12 @@ typedef int (*HPMHOOK_pre_status_charge) (struct block_list **bl, int64 *hp, int
typedef int (*HPMHOOK_post_status_charge) (int retVal___, struct block_list *bl, int64 hp, int64 sp);
typedef int (*HPMHOOK_pre_status_percent_change) (struct block_list **src, struct block_list **target, signed char *hp_rate, signed char *sp_rate, int *flag);
typedef int (*HPMHOOK_post_status_percent_change) (int retVal___, struct block_list *src, struct block_list *target, signed char hp_rate, signed char sp_rate, int flag);
-typedef int (*HPMHOOK_pre_status_set_hp) (struct block_list **bl, unsigned int *hp, int *flag);
-typedef int (*HPMHOOK_post_status_set_hp) (int retVal___, struct block_list *bl, unsigned int hp, int flag);
-typedef int (*HPMHOOK_pre_status_set_sp) (struct block_list **bl, unsigned int *sp, int *flag);
-typedef int (*HPMHOOK_post_status_set_sp) (int retVal___, struct block_list *bl, unsigned int sp, int flag);
-typedef int (*HPMHOOK_pre_status_heal) (struct block_list **bl, int64 *hp, int64 *sp, int *flag);
-typedef int (*HPMHOOK_post_status_heal) (int retVal___, struct block_list *bl, int64 hp, int64 sp, int flag);
+typedef int (*HPMHOOK_pre_status_set_hp) (struct block_list **bl, unsigned int *hp, enum status_heal_flag *flag);
+typedef int (*HPMHOOK_post_status_set_hp) (int retVal___, struct block_list *bl, unsigned int hp, enum status_heal_flag flag);
+typedef int (*HPMHOOK_pre_status_set_sp) (struct block_list **bl, unsigned int *sp, enum status_heal_flag *flag);
+typedef int (*HPMHOOK_post_status_set_sp) (int retVal___, struct block_list *bl, unsigned int sp, enum status_heal_flag flag);
+typedef int (*HPMHOOK_pre_status_heal) (struct block_list **bl, int64 *hp, int64 *sp, enum status_heal_flag *flag);
+typedef int (*HPMHOOK_post_status_heal) (int retVal___, struct block_list *bl, int64 hp, int64 sp, enum status_heal_flag flag);
typedef int (*HPMHOOK_pre_status_revive) (struct block_list **bl, unsigned char *per_hp, unsigned char *per_sp);
typedef int (*HPMHOOK_post_status_revive) (int retVal___, struct block_list *bl, unsigned char per_hp, unsigned char per_sp);
typedef int (*HPMHOOK_pre_status_fixed_revive) (struct block_list **bl, unsigned int *per_hp, unsigned int *per_sp);
@@ -7678,6 +7732,10 @@ typedef unsigned int (*HPMHOOK_pre_status_get_base_maxhp) (const struct map_sess
typedef unsigned int (*HPMHOOK_post_status_get_base_maxhp) (unsigned int retVal___, const struct map_session_data *sd, const struct status_data *st);
typedef unsigned int (*HPMHOOK_pre_status_get_base_maxsp) (const struct map_session_data **sd, const struct status_data **st);
typedef unsigned int (*HPMHOOK_post_status_get_base_maxsp) (unsigned int retVal___, const struct map_session_data *sd, const struct status_data *st);
+typedef unsigned int (*HPMHOOK_pre_status_get_restart_hp) (const struct map_session_data **sd, const struct status_data **st);
+typedef unsigned int (*HPMHOOK_post_status_get_restart_hp) (unsigned int retVal___, const struct map_session_data *sd, const struct status_data *st);
+typedef unsigned int (*HPMHOOK_pre_status_get_restart_sp) (const struct map_session_data **sd, const struct status_data **st);
+typedef unsigned int (*HPMHOOK_post_status_get_restart_sp) (unsigned int retVal___, const struct map_session_data *sd, const struct status_data *st);
typedef int (*HPMHOOK_pre_status_calc_npc_) (struct npc_data **nd, enum e_status_calc_opt *opt);
typedef int (*HPMHOOK_post_status_calc_npc_) (int retVal___, struct npc_data *nd, enum e_status_calc_opt opt);
typedef unsigned short (*HPMHOOK_pre_status_calc_str) (struct block_list **bl, struct status_change **sc, int *str);
diff --git a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
index c4394d7f4..5573e4a14 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
@@ -136,6 +136,10 @@ struct {
struct HPMHookPoint *HP_achievement_check_title_post;
struct HPMHookPoint *HP_achievement_get_rewards_pre;
struct HPMHookPoint *HP_achievement_get_rewards_post;
+ struct HPMHookPoint *HP_achievement_get_rewards_buffs_pre;
+ struct HPMHookPoint *HP_achievement_get_rewards_buffs_post;
+ struct HPMHookPoint *HP_achievement_get_rewards_items_pre;
+ struct HPMHookPoint *HP_achievement_get_rewards_items_post;
struct HPMHookPoint *HP_atcommand_init_pre;
struct HPMHookPoint *HP_atcommand_init_post;
struct HPMHookPoint *HP_atcommand_final_pre;
@@ -232,6 +236,8 @@ struct {
struct HPMHookPoint *HP_battle_drain_post;
struct HPMHookPoint *HP_battle_reflect_damage_pre;
struct HPMHookPoint *HP_battle_reflect_damage_post;
+ struct HPMHookPoint *HP_battle_reflect_trap_pre;
+ struct HPMHookPoint *HP_battle_reflect_trap_post;
struct HPMHookPoint *HP_battle_attr_ratio_pre;
struct HPMHookPoint *HP_battle_attr_ratio_post;
struct HPMHookPoint *HP_battle_attr_fix_pre;
@@ -708,6 +714,8 @@ struct {
struct HPMHookPoint *HP_clif_delitem_post;
struct HPMHookPoint *HP_clif_takeitem_pre;
struct HPMHookPoint *HP_clif_takeitem_post;
+ struct HPMHookPoint *HP_clif_item_movefailed_pre;
+ struct HPMHookPoint *HP_clif_item_movefailed_post;
struct HPMHookPoint *HP_clif_item_equip_pre;
struct HPMHookPoint *HP_clif_item_equip_post;
struct HPMHookPoint *HP_clif_item_normal_pre;
@@ -910,12 +918,18 @@ struct {
struct HPMHookPoint *HP_clif_status_change_post;
struct HPMHookPoint *HP_clif_insert_card_pre;
struct HPMHookPoint *HP_clif_insert_card_post;
- struct HPMHookPoint *HP_clif_inventorylist_pre;
- struct HPMHookPoint *HP_clif_inventorylist_post;
- struct HPMHookPoint *HP_clif_equiplist_pre;
- struct HPMHookPoint *HP_clif_equiplist_post;
- struct HPMHookPoint *HP_clif_cartlist_pre;
- struct HPMHookPoint *HP_clif_cartlist_post;
+ struct HPMHookPoint *HP_clif_inventoryList_pre;
+ struct HPMHookPoint *HP_clif_inventoryList_post;
+ struct HPMHookPoint *HP_clif_inventoryItems_pre;
+ struct HPMHookPoint *HP_clif_inventoryItems_post;
+ struct HPMHookPoint *HP_clif_equipList_pre;
+ struct HPMHookPoint *HP_clif_equipList_post;
+ struct HPMHookPoint *HP_clif_equipItems_pre;
+ struct HPMHookPoint *HP_clif_equipItems_post;
+ struct HPMHookPoint *HP_clif_cartList_pre;
+ struct HPMHookPoint *HP_clif_cartList_post;
+ struct HPMHookPoint *HP_clif_cartItems_pre;
+ struct HPMHookPoint *HP_clif_cartItems_post;
struct HPMHookPoint *HP_clif_favorite_item_pre;
struct HPMHookPoint *HP_clif_favorite_item_post;
struct HPMHookPoint *HP_clif_clearcart_pre;
@@ -1096,6 +1110,10 @@ struct {
struct HPMHookPoint *HP_clif_specialeffect_single_post;
struct HPMHookPoint *HP_clif_specialeffect_value_pre;
struct HPMHookPoint *HP_clif_specialeffect_value_post;
+ struct HPMHookPoint *HP_clif_removeSpecialEffect_pre;
+ struct HPMHookPoint *HP_clif_removeSpecialEffect_post;
+ struct HPMHookPoint *HP_clif_removeSpecialEffect_single_pre;
+ struct HPMHookPoint *HP_clif_removeSpecialEffect_single_post;
struct HPMHookPoint *HP_clif_millenniumshield_pre;
struct HPMHookPoint *HP_clif_millenniumshield_post;
struct HPMHookPoint *HP_clif_spiritcharm_pre;
@@ -1158,6 +1176,8 @@ struct {
struct HPMHookPoint *HP_clif_msgtable_skill_post;
struct HPMHookPoint *HP_clif_msgtable_str_pre;
struct HPMHookPoint *HP_clif_msgtable_str_post;
+ struct HPMHookPoint *HP_clif_msgtable_str_color_pre;
+ struct HPMHookPoint *HP_clif_msgtable_str_color_post;
struct HPMHookPoint *HP_clif_msgtable_color_pre;
struct HPMHookPoint *HP_clif_msgtable_color_post;
struct HPMHookPoint *HP_clif_message_pre;
@@ -1208,8 +1228,16 @@ struct {
struct HPMHookPoint *HP_clif_openvendingAck_post;
struct HPMHookPoint *HP_clif_vendingreport_pre;
struct HPMHookPoint *HP_clif_vendingreport_post;
- struct HPMHookPoint *HP_clif_storagelist_pre;
- struct HPMHookPoint *HP_clif_storagelist_post;
+ struct HPMHookPoint *HP_clif_storageList_pre;
+ struct HPMHookPoint *HP_clif_storageList_post;
+ struct HPMHookPoint *HP_clif_guildStorageList_pre;
+ struct HPMHookPoint *HP_clif_guildStorageList_post;
+ struct HPMHookPoint *HP_clif_storageItems_pre;
+ struct HPMHookPoint *HP_clif_storageItems_post;
+ struct HPMHookPoint *HP_clif_inventoryStart_pre;
+ struct HPMHookPoint *HP_clif_inventoryStart_post;
+ struct HPMHookPoint *HP_clif_inventoryEnd_pre;
+ struct HPMHookPoint *HP_clif_inventoryEnd_post;
struct HPMHookPoint *HP_clif_updatestorageamount_pre;
struct HPMHookPoint *HP_clif_updatestorageamount_post;
struct HPMHookPoint *HP_clif_storageitemadded_pre;
@@ -1320,6 +1348,10 @@ struct {
struct HPMHookPoint *HP_clif_guild_positioninfolist_post;
struct HPMHookPoint *HP_clif_guild_expulsionlist_pre;
struct HPMHookPoint *HP_clif_guild_expulsionlist_post;
+ struct HPMHookPoint *HP_clif_guild_set_position_pre;
+ struct HPMHookPoint *HP_clif_guild_set_position_post;
+ struct HPMHookPoint *HP_clif_guild_position_selected_pre;
+ struct HPMHookPoint *HP_clif_guild_position_selected_post;
struct HPMHookPoint *HP_clif_validate_emblem_pre;
struct HPMHookPoint *HP_clif_validate_emblem_post;
struct HPMHookPoint *HP_clif_bg_hp_pre;
@@ -2172,6 +2204,8 @@ struct {
struct HPMHookPoint *HP_clif_stylist_send_rodexitem_post;
struct HPMHookPoint *HP_clif_pReqStyleChange_pre;
struct HPMHookPoint *HP_clif_pReqStyleChange_post;
+ struct HPMHookPoint *HP_clif_pReqStyleChange2_pre;
+ struct HPMHookPoint *HP_clif_pReqStyleChange2_post;
struct HPMHookPoint *HP_clif_cz_req_style_change_sub_pre;
struct HPMHookPoint *HP_clif_cz_req_style_change_sub_post;
struct HPMHookPoint *HP_clif_style_change_response_pre;
@@ -2182,6 +2216,14 @@ struct {
struct HPMHookPoint *HP_clif_petEvolutionResult_post;
struct HPMHookPoint *HP_clif_party_dead_notification_pre;
struct HPMHookPoint *HP_clif_party_dead_notification_post;
+ struct HPMHookPoint *HP_clif_pMemorialDungeonCommand_pre;
+ struct HPMHookPoint *HP_clif_pMemorialDungeonCommand_post;
+ struct HPMHookPoint *HP_clif_camera_showWindow_pre;
+ struct HPMHookPoint *HP_clif_camera_showWindow_post;
+ struct HPMHookPoint *HP_clif_camera_change_pre;
+ struct HPMHookPoint *HP_clif_camera_change_post;
+ struct HPMHookPoint *HP_clif_item_preview_pre;
+ struct HPMHookPoint *HP_clif_item_preview_post;
struct HPMHookPoint *HP_cmdline_init_pre;
struct HPMHookPoint *HP_cmdline_init_post;
struct HPMHookPoint *HP_cmdline_final_pre;
@@ -2676,6 +2718,8 @@ struct {
struct HPMHookPoint *HP_instance_valid_post;
struct HPMHookPoint *HP_instance_destroy_timer_pre;
struct HPMHookPoint *HP_instance_destroy_timer_post;
+ struct HPMHookPoint *HP_instance_force_destroy_pre;
+ struct HPMHookPoint *HP_instance_force_destroy_post;
struct HPMHookPoint *HP_intif_parse_pre;
struct HPMHookPoint *HP_intif_parse_post;
struct HPMHookPoint *HP_intif_create_pet_pre;
@@ -3344,12 +3388,16 @@ struct {
struct HPMHookPoint *HP_map_zone_init_post;
struct HPMHookPoint *HP_map_zone_remove_pre;
struct HPMHookPoint *HP_map_zone_remove_post;
+ struct HPMHookPoint *HP_map_zone_remove_all_pre;
+ struct HPMHookPoint *HP_map_zone_remove_all_post;
struct HPMHookPoint *HP_map_zone_apply_pre;
struct HPMHookPoint *HP_map_zone_apply_post;
struct HPMHookPoint *HP_map_zone_change_pre;
struct HPMHookPoint *HP_map_zone_change_post;
struct HPMHookPoint *HP_map_zone_change2_pre;
struct HPMHookPoint *HP_map_zone_change2_post;
+ struct HPMHookPoint *HP_map_zone_reload_pre;
+ struct HPMHookPoint *HP_map_zone_reload_post;
struct HPMHookPoint *HP_map_getcell_pre;
struct HPMHookPoint *HP_map_getcell_post;
struct HPMHookPoint *HP_map_setgatcell_pre;
@@ -4966,6 +5014,8 @@ struct {
struct HPMHookPoint *HP_quest_questinfo_validate_homunculus_type_post;
struct HPMHookPoint *HP_quest_questinfo_validate_quests_pre;
struct HPMHookPoint *HP_quest_questinfo_validate_quests_post;
+ struct HPMHookPoint *HP_quest_questinfo_validate_mercenary_class_pre;
+ struct HPMHookPoint *HP_quest_questinfo_validate_mercenary_class_post;
struct HPMHookPoint *HP_quest_questinfo_vector_clear_pre;
struct HPMHookPoint *HP_quest_questinfo_vector_clear_post;
struct HPMHookPoint *HP_rnd_init_pre;
@@ -5130,6 +5180,8 @@ struct {
struct HPMHookPoint *HP_script_config_read_post;
struct HPMHookPoint *HP_script_add_str_pre;
struct HPMHookPoint *HP_script_add_str_post;
+ struct HPMHookPoint *HP_script_add_variable_pre;
+ struct HPMHookPoint *HP_script_add_variable_post;
struct HPMHookPoint *HP_script_get_str_pre;
struct HPMHookPoint *HP_script_get_str_post;
struct HPMHookPoint *HP_script_search_str_pre;
@@ -5670,6 +5722,8 @@ struct {
struct HPMHookPoint *HP_skill_cell_overlap_post;
struct HPMHookPoint *HP_skill_timerskill_pre;
struct HPMHookPoint *HP_skill_timerskill_post;
+ struct HPMHookPoint *HP_skill_trap_do_splash_pre;
+ struct HPMHookPoint *HP_skill_trap_do_splash_post;
struct HPMHookPoint *HP_skill_trap_splash_pre;
struct HPMHookPoint *HP_skill_trap_splash_post;
struct HPMHookPoint *HP_skill_check_condition_mercenary_pre;
@@ -6188,6 +6242,10 @@ struct {
struct HPMHookPoint *HP_status_get_base_maxhp_post;
struct HPMHookPoint *HP_status_get_base_maxsp_pre;
struct HPMHookPoint *HP_status_get_base_maxsp_post;
+ struct HPMHookPoint *HP_status_get_restart_hp_pre;
+ struct HPMHookPoint *HP_status_get_restart_hp_post;
+ struct HPMHookPoint *HP_status_get_restart_sp_pre;
+ struct HPMHookPoint *HP_status_get_restart_sp_post;
struct HPMHookPoint *HP_status_calc_npc__pre;
struct HPMHookPoint *HP_status_calc_npc__post;
struct HPMHookPoint *HP_status_calc_str_pre;
@@ -6687,6 +6745,10 @@ struct {
int HP_achievement_check_title_post;
int HP_achievement_get_rewards_pre;
int HP_achievement_get_rewards_post;
+ int HP_achievement_get_rewards_buffs_pre;
+ int HP_achievement_get_rewards_buffs_post;
+ int HP_achievement_get_rewards_items_pre;
+ int HP_achievement_get_rewards_items_post;
int HP_atcommand_init_pre;
int HP_atcommand_init_post;
int HP_atcommand_final_pre;
@@ -6783,6 +6845,8 @@ struct {
int HP_battle_drain_post;
int HP_battle_reflect_damage_pre;
int HP_battle_reflect_damage_post;
+ int HP_battle_reflect_trap_pre;
+ int HP_battle_reflect_trap_post;
int HP_battle_attr_ratio_pre;
int HP_battle_attr_ratio_post;
int HP_battle_attr_fix_pre;
@@ -7259,6 +7323,8 @@ struct {
int HP_clif_delitem_post;
int HP_clif_takeitem_pre;
int HP_clif_takeitem_post;
+ int HP_clif_item_movefailed_pre;
+ int HP_clif_item_movefailed_post;
int HP_clif_item_equip_pre;
int HP_clif_item_equip_post;
int HP_clif_item_normal_pre;
@@ -7461,12 +7527,18 @@ struct {
int HP_clif_status_change_post;
int HP_clif_insert_card_pre;
int HP_clif_insert_card_post;
- int HP_clif_inventorylist_pre;
- int HP_clif_inventorylist_post;
- int HP_clif_equiplist_pre;
- int HP_clif_equiplist_post;
- int HP_clif_cartlist_pre;
- int HP_clif_cartlist_post;
+ int HP_clif_inventoryList_pre;
+ int HP_clif_inventoryList_post;
+ int HP_clif_inventoryItems_pre;
+ int HP_clif_inventoryItems_post;
+ int HP_clif_equipList_pre;
+ int HP_clif_equipList_post;
+ int HP_clif_equipItems_pre;
+ int HP_clif_equipItems_post;
+ int HP_clif_cartList_pre;
+ int HP_clif_cartList_post;
+ int HP_clif_cartItems_pre;
+ int HP_clif_cartItems_post;
int HP_clif_favorite_item_pre;
int HP_clif_favorite_item_post;
int HP_clif_clearcart_pre;
@@ -7647,6 +7719,10 @@ struct {
int HP_clif_specialeffect_single_post;
int HP_clif_specialeffect_value_pre;
int HP_clif_specialeffect_value_post;
+ int HP_clif_removeSpecialEffect_pre;
+ int HP_clif_removeSpecialEffect_post;
+ int HP_clif_removeSpecialEffect_single_pre;
+ int HP_clif_removeSpecialEffect_single_post;
int HP_clif_millenniumshield_pre;
int HP_clif_millenniumshield_post;
int HP_clif_spiritcharm_pre;
@@ -7709,6 +7785,8 @@ struct {
int HP_clif_msgtable_skill_post;
int HP_clif_msgtable_str_pre;
int HP_clif_msgtable_str_post;
+ int HP_clif_msgtable_str_color_pre;
+ int HP_clif_msgtable_str_color_post;
int HP_clif_msgtable_color_pre;
int HP_clif_msgtable_color_post;
int HP_clif_message_pre;
@@ -7759,8 +7837,16 @@ struct {
int HP_clif_openvendingAck_post;
int HP_clif_vendingreport_pre;
int HP_clif_vendingreport_post;
- int HP_clif_storagelist_pre;
- int HP_clif_storagelist_post;
+ int HP_clif_storageList_pre;
+ int HP_clif_storageList_post;
+ int HP_clif_guildStorageList_pre;
+ int HP_clif_guildStorageList_post;
+ int HP_clif_storageItems_pre;
+ int HP_clif_storageItems_post;
+ int HP_clif_inventoryStart_pre;
+ int HP_clif_inventoryStart_post;
+ int HP_clif_inventoryEnd_pre;
+ int HP_clif_inventoryEnd_post;
int HP_clif_updatestorageamount_pre;
int HP_clif_updatestorageamount_post;
int HP_clif_storageitemadded_pre;
@@ -7871,6 +7957,10 @@ struct {
int HP_clif_guild_positioninfolist_post;
int HP_clif_guild_expulsionlist_pre;
int HP_clif_guild_expulsionlist_post;
+ int HP_clif_guild_set_position_pre;
+ int HP_clif_guild_set_position_post;
+ int HP_clif_guild_position_selected_pre;
+ int HP_clif_guild_position_selected_post;
int HP_clif_validate_emblem_pre;
int HP_clif_validate_emblem_post;
int HP_clif_bg_hp_pre;
@@ -8723,6 +8813,8 @@ struct {
int HP_clif_stylist_send_rodexitem_post;
int HP_clif_pReqStyleChange_pre;
int HP_clif_pReqStyleChange_post;
+ int HP_clif_pReqStyleChange2_pre;
+ int HP_clif_pReqStyleChange2_post;
int HP_clif_cz_req_style_change_sub_pre;
int HP_clif_cz_req_style_change_sub_post;
int HP_clif_style_change_response_pre;
@@ -8733,6 +8825,14 @@ struct {
int HP_clif_petEvolutionResult_post;
int HP_clif_party_dead_notification_pre;
int HP_clif_party_dead_notification_post;
+ int HP_clif_pMemorialDungeonCommand_pre;
+ int HP_clif_pMemorialDungeonCommand_post;
+ int HP_clif_camera_showWindow_pre;
+ int HP_clif_camera_showWindow_post;
+ int HP_clif_camera_change_pre;
+ int HP_clif_camera_change_post;
+ int HP_clif_item_preview_pre;
+ int HP_clif_item_preview_post;
int HP_cmdline_init_pre;
int HP_cmdline_init_post;
int HP_cmdline_final_pre;
@@ -9227,6 +9327,8 @@ struct {
int HP_instance_valid_post;
int HP_instance_destroy_timer_pre;
int HP_instance_destroy_timer_post;
+ int HP_instance_force_destroy_pre;
+ int HP_instance_force_destroy_post;
int HP_intif_parse_pre;
int HP_intif_parse_post;
int HP_intif_create_pet_pre;
@@ -9895,12 +9997,16 @@ struct {
int HP_map_zone_init_post;
int HP_map_zone_remove_pre;
int HP_map_zone_remove_post;
+ int HP_map_zone_remove_all_pre;
+ int HP_map_zone_remove_all_post;
int HP_map_zone_apply_pre;
int HP_map_zone_apply_post;
int HP_map_zone_change_pre;
int HP_map_zone_change_post;
int HP_map_zone_change2_pre;
int HP_map_zone_change2_post;
+ int HP_map_zone_reload_pre;
+ int HP_map_zone_reload_post;
int HP_map_getcell_pre;
int HP_map_getcell_post;
int HP_map_setgatcell_pre;
@@ -11517,6 +11623,8 @@ struct {
int HP_quest_questinfo_validate_homunculus_type_post;
int HP_quest_questinfo_validate_quests_pre;
int HP_quest_questinfo_validate_quests_post;
+ int HP_quest_questinfo_validate_mercenary_class_pre;
+ int HP_quest_questinfo_validate_mercenary_class_post;
int HP_quest_questinfo_vector_clear_pre;
int HP_quest_questinfo_vector_clear_post;
int HP_rnd_init_pre;
@@ -11681,6 +11789,8 @@ struct {
int HP_script_config_read_post;
int HP_script_add_str_pre;
int HP_script_add_str_post;
+ int HP_script_add_variable_pre;
+ int HP_script_add_variable_post;
int HP_script_get_str_pre;
int HP_script_get_str_post;
int HP_script_search_str_pre;
@@ -12221,6 +12331,8 @@ struct {
int HP_skill_cell_overlap_post;
int HP_skill_timerskill_pre;
int HP_skill_timerskill_post;
+ int HP_skill_trap_do_splash_pre;
+ int HP_skill_trap_do_splash_post;
int HP_skill_trap_splash_pre;
int HP_skill_trap_splash_post;
int HP_skill_check_condition_mercenary_pre;
@@ -12739,6 +12851,10 @@ struct {
int HP_status_get_base_maxhp_post;
int HP_status_get_base_maxsp_pre;
int HP_status_get_base_maxsp_post;
+ int HP_status_get_restart_hp_pre;
+ int HP_status_get_restart_hp_post;
+ int HP_status_get_restart_sp_pre;
+ int HP_status_get_restart_sp_post;
int HP_status_calc_npc__pre;
int HP_status_calc_npc__post;
int HP_status_calc_str_pre;
diff --git a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
index e5584cc43..601441a61 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
@@ -83,6 +83,8 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(achievement->init_titles, HP_achievement_init_titles) },
{ HP_POP(achievement->check_title, HP_achievement_check_title) },
{ HP_POP(achievement->get_rewards, HP_achievement_get_rewards) },
+ { HP_POP(achievement->get_rewards_buffs, HP_achievement_get_rewards_buffs) },
+ { HP_POP(achievement->get_rewards_items, HP_achievement_get_rewards_items) },
/* atcommand_interface */
{ HP_POP(atcommand->init, HP_atcommand_init) },
{ HP_POP(atcommand->final, HP_atcommand_final) },
@@ -133,6 +135,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(battle->delay_damage, HP_battle_delay_damage) },
{ HP_POP(battle->drain, HP_battle_drain) },
{ HP_POP(battle->reflect_damage, HP_battle_reflect_damage) },
+ { HP_POP(battle->reflect_trap, HP_battle_reflect_trap) },
{ HP_POP(battle->attr_ratio, HP_battle_attr_ratio) },
{ HP_POP(battle->attr_fix, HP_battle_attr_fix) },
{ HP_POP(battle->calc_cardfix, HP_battle_calc_cardfix) },
@@ -378,6 +381,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(clif->dropitem, HP_clif_dropitem) },
{ HP_POP(clif->delitem, HP_clif_delitem) },
{ HP_POP(clif->takeitem, HP_clif_takeitem) },
+ { HP_POP(clif->item_movefailed, HP_clif_item_movefailed) },
{ HP_POP(clif->item_equip, HP_clif_item_equip) },
{ HP_POP(clif->item_normal, HP_clif_item_normal) },
{ HP_POP(clif->arrowequip, HP_clif_arrowequip) },
@@ -479,9 +483,12 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(clif->combo_delay, HP_clif_combo_delay) },
{ HP_POP(clif->status_change, HP_clif_status_change) },
{ HP_POP(clif->insert_card, HP_clif_insert_card) },
- { HP_POP(clif->inventorylist, HP_clif_inventorylist) },
- { HP_POP(clif->equiplist, HP_clif_equiplist) },
- { HP_POP(clif->cartlist, HP_clif_cartlist) },
+ { HP_POP(clif->inventoryList, HP_clif_inventoryList) },
+ { HP_POP(clif->inventoryItems, HP_clif_inventoryItems) },
+ { HP_POP(clif->equipList, HP_clif_equipList) },
+ { HP_POP(clif->equipItems, HP_clif_equipItems) },
+ { HP_POP(clif->cartList, HP_clif_cartList) },
+ { HP_POP(clif->cartItems, HP_clif_cartItems) },
{ HP_POP(clif->favorite_item, HP_clif_favorite_item) },
{ HP_POP(clif->clearcart, HP_clif_clearcart) },
{ HP_POP(clif->item_identify_list, HP_clif_item_identify_list) },
@@ -572,6 +579,8 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(clif->specialeffect, HP_clif_specialeffect) },
{ HP_POP(clif->specialeffect_single, HP_clif_specialeffect_single) },
{ HP_POP(clif->specialeffect_value, HP_clif_specialeffect_value) },
+ { HP_POP(clif->removeSpecialEffect, HP_clif_removeSpecialEffect) },
+ { HP_POP(clif->removeSpecialEffect_single, HP_clif_removeSpecialEffect_single) },
{ HP_POP(clif->millenniumshield, HP_clif_millenniumshield) },
{ HP_POP(clif->spiritcharm, HP_clif_spiritcharm) },
{ HP_POP(clif->charm_single, HP_clif_charm_single) },
@@ -603,6 +612,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(clif->msgtable_num, HP_clif_msgtable_num) },
{ HP_POP(clif->msgtable_skill, HP_clif_msgtable_skill) },
{ HP_POP(clif->msgtable_str, HP_clif_msgtable_str) },
+ { HP_POP(clif->msgtable_str_color, HP_clif_msgtable_str_color) },
{ HP_POP(clif->msgtable_color, HP_clif_msgtable_color) },
{ HP_POP(clif->message, HP_clif_message) },
{ HP_POP(clif->messageln, HP_clif_messageln) },
@@ -628,7 +638,11 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(clif->openvending, HP_clif_openvending) },
{ HP_POP(clif->openvendingAck, HP_clif_openvendingAck) },
{ HP_POP(clif->vendingreport, HP_clif_vendingreport) },
- { HP_POP(clif->storagelist, HP_clif_storagelist) },
+ { HP_POP(clif->storageList, HP_clif_storageList) },
+ { HP_POP(clif->guildStorageList, HP_clif_guildStorageList) },
+ { HP_POP(clif->storageItems, HP_clif_storageItems) },
+ { HP_POP(clif->inventoryStart, HP_clif_inventoryStart) },
+ { HP_POP(clif->inventoryEnd, HP_clif_inventoryEnd) },
{ HP_POP(clif->updatestorageamount, HP_clif_updatestorageamount) },
{ HP_POP(clif->storageitemadded, HP_clif_storageitemadded) },
{ HP_POP(clif->storageitemremoved, HP_clif_storageitemremoved) },
@@ -684,6 +698,8 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(clif->guild_positionnamelist, HP_clif_guild_positionnamelist) },
{ HP_POP(clif->guild_positioninfolist, HP_clif_guild_positioninfolist) },
{ HP_POP(clif->guild_expulsionlist, HP_clif_guild_expulsionlist) },
+ { HP_POP(clif->guild_set_position, HP_clif_guild_set_position) },
+ { HP_POP(clif->guild_position_selected, HP_clif_guild_position_selected) },
{ HP_POP(clif->validate_emblem, HP_clif_validate_emblem) },
{ HP_POP(clif->bg_hp, HP_clif_bg_hp) },
{ HP_POP(clif->bg_xy, HP_clif_bg_xy) },
@@ -1110,11 +1126,16 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(clif->style_change_validate_requirements, HP_clif_style_change_validate_requirements) },
{ HP_POP(clif->stylist_send_rodexitem, HP_clif_stylist_send_rodexitem) },
{ HP_POP(clif->pReqStyleChange, HP_clif_pReqStyleChange) },
+ { HP_POP(clif->pReqStyleChange2, HP_clif_pReqStyleChange2) },
{ HP_POP(clif->cz_req_style_change_sub, HP_clif_cz_req_style_change_sub) },
{ HP_POP(clif->style_change_response, HP_clif_style_change_response) },
{ HP_POP(clif->pPetEvolution, HP_clif_pPetEvolution) },
{ HP_POP(clif->petEvolutionResult, HP_clif_petEvolutionResult) },
{ HP_POP(clif->party_dead_notification, HP_clif_party_dead_notification) },
+ { HP_POP(clif->pMemorialDungeonCommand, HP_clif_pMemorialDungeonCommand) },
+ { HP_POP(clif->camera_showWindow, HP_clif_camera_showWindow) },
+ { HP_POP(clif->camera_change, HP_clif_camera_change) },
+ { HP_POP(clif->item_preview, HP_clif_item_preview) },
/* cmdline_interface */
{ HP_POP(cmdline->init, HP_cmdline_init) },
{ HP_POP(cmdline->final, HP_cmdline_final) },
@@ -1374,6 +1395,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(instance->set_timeout, HP_instance_set_timeout) },
{ HP_POP(instance->valid, HP_instance_valid) },
{ HP_POP(instance->destroy_timer, HP_instance_destroy_timer) },
+ { HP_POP(instance->force_destroy, HP_instance_force_destroy) },
/* intif_interface */
{ HP_POP(intif->parse, HP_intif_parse) },
{ HP_POP(intif->create_pet, HP_intif_create_pet) },
@@ -1715,9 +1737,11 @@ struct HookingPointData HookingPoints[] = {
/* map_interface */
{ HP_POP(map->zone_init, HP_map_zone_init) },
{ HP_POP(map->zone_remove, HP_map_zone_remove) },
+ { HP_POP(map->zone_remove_all, HP_map_zone_remove_all) },
{ HP_POP(map->zone_apply, HP_map_zone_apply) },
{ HP_POP(map->zone_change, HP_map_zone_change) },
{ HP_POP(map->zone_change2, HP_map_zone_change2) },
+ { HP_POP(map->zone_reload, HP_map_zone_reload) },
{ HP_POP(map->getcell, HP_map_getcell) },
{ HP_POP(map->setgatcell, HP_map_setgatcell) },
{ HP_POP(map->cellfromcache, HP_map_cellfromcache) },
@@ -2543,6 +2567,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(quest->questinfo_validate_homunculus_level, HP_quest_questinfo_validate_homunculus_level) },
{ HP_POP(quest->questinfo_validate_homunculus_type, HP_quest_questinfo_validate_homunculus_type) },
{ HP_POP(quest->questinfo_validate_quests, HP_quest_questinfo_validate_quests) },
+ { HP_POP(quest->questinfo_validate_mercenary_class, HP_quest_questinfo_validate_mercenary_class) },
{ HP_POP(quest->questinfo_vector_clear, HP_quest_questinfo_vector_clear) },
/* rnd_interface */
{ HP_POP(rnd->init, HP_rnd_init) },
@@ -2628,6 +2653,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(script->setarray_pc, HP_script_setarray_pc) },
{ HP_POP(script->config_read, HP_script_config_read) },
{ HP_POP(script->add_str, HP_script_add_str) },
+ { HP_POP(script->add_variable, HP_script_add_variable) },
{ HP_POP(script->get_str, HP_script_get_str) },
{ HP_POP(script->search_str, HP_script_search_str) },
{ HP_POP(script->setd_sub, HP_script_setd_sub) },
@@ -2901,6 +2927,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(skill->onskillusage, HP_skill_onskillusage) },
{ HP_POP(skill->cell_overlap, HP_skill_cell_overlap) },
{ HP_POP(skill->timerskill, HP_skill_timerskill) },
+ { HP_POP(skill->trap_do_splash, HP_skill_trap_do_splash) },
{ HP_POP(skill->trap_splash, HP_skill_trap_splash) },
{ HP_POP(skill->check_condition_mercenary, HP_skill_check_condition_mercenary) },
{ HP_POP(skill->locate_element_field, HP_skill_locate_element_field) },
@@ -3163,6 +3190,8 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(status->base_atk, HP_status_base_atk) },
{ HP_POP(status->get_base_maxhp, HP_status_get_base_maxhp) },
{ HP_POP(status->get_base_maxsp, HP_status_get_base_maxsp) },
+ { HP_POP(status->get_restart_hp, HP_status_get_restart_hp) },
+ { HP_POP(status->get_restart_sp, HP_status_get_restart_sp) },
{ HP_POP(status->calc_npc_, HP_status_calc_npc_) },
{ HP_POP(status->calc_str, HP_status_calc_str) },
{ HP_POP(status->calc_agi, HP_status_calc_agi) },
diff --git a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
index f2ce1505c..7a75f57e2 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
@@ -1459,27 +1459,80 @@ bool HP_achievement_check_title(struct map_session_data *sd, int title_id) {
}
return retVal___;
}
-void HP_achievement_get_rewards(struct map_session_data *sd, const struct achievement_data *ad) {
+bool HP_achievement_get_rewards(struct map_session_data *sd, const struct achievement_data *ad) {
int hIndex = 0;
+ bool retVal___ = false;
if (HPMHooks.count.HP_achievement_get_rewards_pre > 0) {
- void (*preHookFunc) (struct map_session_data **sd, const struct achievement_data **ad);
+ bool (*preHookFunc) (struct map_session_data **sd, const struct achievement_data **ad);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_achievement_get_rewards_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_achievement_get_rewards_pre[hIndex].func;
- preHookFunc(&sd, &ad);
+ retVal___ = preHookFunc(&sd, &ad);
}
if (*HPMforce_return) {
*HPMforce_return = false;
- return;
+ return retVal___;
}
}
{
- HPMHooks.source.achievement.get_rewards(sd, ad);
+ retVal___ = HPMHooks.source.achievement.get_rewards(sd, ad);
}
if (HPMHooks.count.HP_achievement_get_rewards_post > 0) {
- void (*postHookFunc) (struct map_session_data *sd, const struct achievement_data *ad);
+ bool (*postHookFunc) (bool retVal___, struct map_session_data *sd, const struct achievement_data *ad);
for (hIndex = 0; hIndex < HPMHooks.count.HP_achievement_get_rewards_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_achievement_get_rewards_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, sd, ad);
+ }
+ }
+ return retVal___;
+}
+void HP_achievement_get_rewards_buffs(struct map_session_data *sd, const struct achievement_data *ad) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_achievement_get_rewards_buffs_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, const struct achievement_data **ad);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_achievement_get_rewards_buffs_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_achievement_get_rewards_buffs_pre[hIndex].func;
+ preHookFunc(&sd, &ad);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.achievement.get_rewards_buffs(sd, ad);
+ }
+ if (HPMHooks.count.HP_achievement_get_rewards_buffs_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, const struct achievement_data *ad);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_achievement_get_rewards_buffs_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_achievement_get_rewards_buffs_post[hIndex].func;
+ postHookFunc(sd, ad);
+ }
+ }
+ return;
+}
+void HP_achievement_get_rewards_items(struct map_session_data *sd, const struct achievement_data *ad) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_achievement_get_rewards_items_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, const struct achievement_data **ad);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_achievement_get_rewards_items_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_achievement_get_rewards_items_pre[hIndex].func;
+ preHookFunc(&sd, &ad);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.achievement.get_rewards_items(sd, ad);
+ }
+ if (HPMHooks.count.HP_achievement_get_rewards_items_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, const struct achievement_data *ad);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_achievement_get_rewards_items_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_achievement_get_rewards_items_post[hIndex].func;
postHookFunc(sd, ad);
}
}
@@ -2806,6 +2859,32 @@ void HP_battle_reflect_damage(struct block_list *target, struct block_list *src,
}
return;
}
+void HP_battle_reflect_trap(struct block_list *target, struct block_list *src, struct Damage *md, uint16 skill_id) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_battle_reflect_trap_pre > 0) {
+ void (*preHookFunc) (struct block_list **target, struct block_list **src, struct Damage **md, uint16 *skill_id);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_battle_reflect_trap_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_battle_reflect_trap_pre[hIndex].func;
+ preHookFunc(&target, &src, &md, &skill_id);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.battle.reflect_trap(target, src, md, skill_id);
+ }
+ if (HPMHooks.count.HP_battle_reflect_trap_post > 0) {
+ void (*postHookFunc) (struct block_list *target, struct block_list *src, struct Damage *md, uint16 skill_id);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_battle_reflect_trap_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_battle_reflect_trap_post[hIndex].func;
+ postHookFunc(target, src, md, skill_id);
+ }
+ }
+ return;
+}
int HP_battle_attr_ratio(int atk_elem, int def_type, int def_lv) {
int hIndex = 0;
int retVal___ = 0;
@@ -9213,6 +9292,32 @@ void HP_clif_takeitem(struct block_list *src, struct block_list *dst) {
}
return;
}
+void HP_clif_item_movefailed(struct map_session_data *sd, int n) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_item_movefailed_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, int *n);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_item_movefailed_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_item_movefailed_pre[hIndex].func;
+ preHookFunc(&sd, &n);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.item_movefailed(sd, n);
+ }
+ if (HPMHooks.count.HP_clif_item_movefailed_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, int n);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_item_movefailed_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_item_movefailed_post[hIndex].func;
+ postHookFunc(sd, n);
+ }
+ }
+ return;
+}
void HP_clif_item_equip(short idx, struct EQUIPITEM_INFO *p, struct item *i, struct item_data *id, int eqp_pos) {
int hIndex = 0;
if (HPMHooks.count.HP_clif_item_equip_pre > 0) {
@@ -11864,13 +11969,13 @@ void HP_clif_insert_card(struct map_session_data *sd, int idx_equip, int idx_car
}
return;
}
-void HP_clif_inventorylist(struct map_session_data *sd) {
+void HP_clif_inventoryList(struct map_session_data *sd) {
int hIndex = 0;
- if (HPMHooks.count.HP_clif_inventorylist_pre > 0) {
+ if (HPMHooks.count.HP_clif_inventoryList_pre > 0) {
void (*preHookFunc) (struct map_session_data **sd);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_inventorylist_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_clif_inventorylist_pre[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_inventoryList_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_inventoryList_pre[hIndex].func;
preHookFunc(&sd);
}
if (*HPMforce_return) {
@@ -11879,24 +11984,50 @@ void HP_clif_inventorylist(struct map_session_data *sd) {
}
}
{
- HPMHooks.source.clif.inventorylist(sd);
+ HPMHooks.source.clif.inventoryList(sd);
}
- if (HPMHooks.count.HP_clif_inventorylist_post > 0) {
+ if (HPMHooks.count.HP_clif_inventoryList_post > 0) {
void (*postHookFunc) (struct map_session_data *sd);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_inventorylist_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_clif_inventorylist_post[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_inventoryList_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_inventoryList_post[hIndex].func;
postHookFunc(sd);
}
}
return;
}
-void HP_clif_equiplist(struct map_session_data *sd) {
+void HP_clif_inventoryItems(struct map_session_data *sd, enum inventory_type type) {
int hIndex = 0;
- if (HPMHooks.count.HP_clif_equiplist_pre > 0) {
+ if (HPMHooks.count.HP_clif_inventoryItems_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, enum inventory_type *type);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_inventoryItems_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_inventoryItems_pre[hIndex].func;
+ preHookFunc(&sd, &type);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.inventoryItems(sd, type);
+ }
+ if (HPMHooks.count.HP_clif_inventoryItems_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, enum inventory_type type);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_inventoryItems_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_inventoryItems_post[hIndex].func;
+ postHookFunc(sd, type);
+ }
+ }
+ return;
+}
+void HP_clif_equipList(struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_equipList_pre > 0) {
void (*preHookFunc) (struct map_session_data **sd);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_equiplist_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_clif_equiplist_pre[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_equipList_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_equipList_pre[hIndex].func;
preHookFunc(&sd);
}
if (*HPMforce_return) {
@@ -11905,24 +12036,50 @@ void HP_clif_equiplist(struct map_session_data *sd) {
}
}
{
- HPMHooks.source.clif.equiplist(sd);
+ HPMHooks.source.clif.equipList(sd);
}
- if (HPMHooks.count.HP_clif_equiplist_post > 0) {
+ if (HPMHooks.count.HP_clif_equipList_post > 0) {
void (*postHookFunc) (struct map_session_data *sd);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_equiplist_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_clif_equiplist_post[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_equipList_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_equipList_post[hIndex].func;
postHookFunc(sd);
}
}
return;
}
-void HP_clif_cartlist(struct map_session_data *sd) {
+void HP_clif_equipItems(struct map_session_data *sd, enum inventory_type type) {
int hIndex = 0;
- if (HPMHooks.count.HP_clif_cartlist_pre > 0) {
+ if (HPMHooks.count.HP_clif_equipItems_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, enum inventory_type *type);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_equipItems_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_equipItems_pre[hIndex].func;
+ preHookFunc(&sd, &type);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.equipItems(sd, type);
+ }
+ if (HPMHooks.count.HP_clif_equipItems_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, enum inventory_type type);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_equipItems_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_equipItems_post[hIndex].func;
+ postHookFunc(sd, type);
+ }
+ }
+ return;
+}
+void HP_clif_cartList(struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_cartList_pre > 0) {
void (*preHookFunc) (struct map_session_data **sd);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_cartlist_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_clif_cartlist_pre[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_cartList_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_cartList_pre[hIndex].func;
preHookFunc(&sd);
}
if (*HPMforce_return) {
@@ -11931,17 +12088,43 @@ void HP_clif_cartlist(struct map_session_data *sd) {
}
}
{
- HPMHooks.source.clif.cartlist(sd);
+ HPMHooks.source.clif.cartList(sd);
}
- if (HPMHooks.count.HP_clif_cartlist_post > 0) {
+ if (HPMHooks.count.HP_clif_cartList_post > 0) {
void (*postHookFunc) (struct map_session_data *sd);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_cartlist_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_clif_cartlist_post[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_cartList_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_cartList_post[hIndex].func;
postHookFunc(sd);
}
}
return;
}
+void HP_clif_cartItems(struct map_session_data *sd, enum inventory_type type) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_cartItems_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, enum inventory_type *type);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_cartItems_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_cartItems_pre[hIndex].func;
+ preHookFunc(&sd, &type);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.cartItems(sd, type);
+ }
+ if (HPMHooks.count.HP_clif_cartItems_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, enum inventory_type type);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_cartItems_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_cartItems_post[hIndex].func;
+ postHookFunc(sd, type);
+ }
+ }
+ return;
+}
void HP_clif_favorite_item(struct map_session_data *sd, unsigned short index) {
int hIndex = 0;
if (HPMHooks.count.HP_clif_favorite_item_pre > 0) {
@@ -14299,6 +14482,58 @@ void HP_clif_specialeffect_value(struct block_list *bl, int effect_id, int num,
}
return;
}
+void HP_clif_removeSpecialEffect(struct block_list *bl, int effectId, enum send_target target) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_removeSpecialEffect_pre > 0) {
+ void (*preHookFunc) (struct block_list **bl, int *effectId, enum send_target *target);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_removeSpecialEffect_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_removeSpecialEffect_pre[hIndex].func;
+ preHookFunc(&bl, &effectId, &target);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.removeSpecialEffect(bl, effectId, target);
+ }
+ if (HPMHooks.count.HP_clif_removeSpecialEffect_post > 0) {
+ void (*postHookFunc) (struct block_list *bl, int effectId, enum send_target target);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_removeSpecialEffect_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_removeSpecialEffect_post[hIndex].func;
+ postHookFunc(bl, effectId, target);
+ }
+ }
+ return;
+}
+void HP_clif_removeSpecialEffect_single(struct block_list *bl, int effectId, struct block_list *targetBl) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_removeSpecialEffect_single_pre > 0) {
+ void (*preHookFunc) (struct block_list **bl, int *effectId, struct block_list **targetBl);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_removeSpecialEffect_single_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_removeSpecialEffect_single_pre[hIndex].func;
+ preHookFunc(&bl, &effectId, &targetBl);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.removeSpecialEffect_single(bl, effectId, targetBl);
+ }
+ if (HPMHooks.count.HP_clif_removeSpecialEffect_single_post > 0) {
+ void (*postHookFunc) (struct block_list *bl, int effectId, struct block_list *targetBl);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_removeSpecialEffect_single_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_removeSpecialEffect_single_post[hIndex].func;
+ postHookFunc(bl, effectId, targetBl);
+ }
+ }
+ return;
+}
void HP_clif_millenniumshield(struct block_list *bl, short shields) {
int hIndex = 0;
if (HPMHooks.count.HP_clif_millenniumshield_pre > 0) {
@@ -15105,6 +15340,32 @@ void HP_clif_msgtable_str(struct map_session_data *sd, enum clif_messages p1, co
}
return;
}
+void HP_clif_msgtable_str_color(struct map_session_data *sd, enum clif_messages p1, const char *value, uint32 color) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_msgtable_str_color_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, enum clif_messages *p1, const char **value, uint32 *color);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_msgtable_str_color_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_msgtable_str_color_pre[hIndex].func;
+ preHookFunc(&sd, &p1, &value, &color);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.msgtable_str_color(sd, p1, value, color);
+ }
+ if (HPMHooks.count.HP_clif_msgtable_str_color_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, enum clif_messages p1, const char *value, uint32 color);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_msgtable_str_color_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_msgtable_str_color_post[hIndex].func;
+ postHookFunc(sd, p1, value, color);
+ }
+ }
+ return;
+}
void HP_clif_msgtable_color(struct map_session_data *sd, enum clif_messages p1, uint32 color) {
int hIndex = 0;
if (HPMHooks.count.HP_clif_msgtable_color_pre > 0) {
@@ -15757,13 +16018,39 @@ void HP_clif_vendingreport(struct map_session_data *sd, int index, int amount, u
}
return;
}
-void HP_clif_storagelist(struct map_session_data *sd, struct item *items, int items_length) {
+void HP_clif_storageList(struct map_session_data *sd, struct item *items, int items_length) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_storageList_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, struct item **items, int *items_length);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_storageList_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_storageList_pre[hIndex].func;
+ preHookFunc(&sd, &items, &items_length);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.storageList(sd, items, items_length);
+ }
+ if (HPMHooks.count.HP_clif_storageList_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, struct item *items, int items_length);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_storageList_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_storageList_post[hIndex].func;
+ postHookFunc(sd, items, items_length);
+ }
+ }
+ return;
+}
+void HP_clif_guildStorageList(struct map_session_data *sd, struct item *items, int items_length) {
int hIndex = 0;
- if (HPMHooks.count.HP_clif_storagelist_pre > 0) {
+ if (HPMHooks.count.HP_clif_guildStorageList_pre > 0) {
void (*preHookFunc) (struct map_session_data **sd, struct item **items, int *items_length);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_storagelist_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_clif_storagelist_pre[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guildStorageList_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_guildStorageList_pre[hIndex].func;
preHookFunc(&sd, &items, &items_length);
}
if (*HPMforce_return) {
@@ -15772,17 +16059,95 @@ void HP_clif_storagelist(struct map_session_data *sd, struct item *items, int it
}
}
{
- HPMHooks.source.clif.storagelist(sd, items, items_length);
+ HPMHooks.source.clif.guildStorageList(sd, items, items_length);
}
- if (HPMHooks.count.HP_clif_storagelist_post > 0) {
+ if (HPMHooks.count.HP_clif_guildStorageList_post > 0) {
void (*postHookFunc) (struct map_session_data *sd, struct item *items, int items_length);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_storagelist_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_clif_storagelist_post[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guildStorageList_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_guildStorageList_post[hIndex].func;
postHookFunc(sd, items, items_length);
}
}
return;
}
+void HP_clif_storageItems(struct map_session_data *sd, enum inventory_type type, struct item *items, int items_length) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_storageItems_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, enum inventory_type *type, struct item **items, int *items_length);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_storageItems_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_storageItems_pre[hIndex].func;
+ preHookFunc(&sd, &type, &items, &items_length);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.storageItems(sd, type, items, items_length);
+ }
+ if (HPMHooks.count.HP_clif_storageItems_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, enum inventory_type type, struct item *items, int items_length);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_storageItems_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_storageItems_post[hIndex].func;
+ postHookFunc(sd, type, items, items_length);
+ }
+ }
+ return;
+}
+void HP_clif_inventoryStart(struct map_session_data *sd, enum inventory_type type, const char *name) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_inventoryStart_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, enum inventory_type *type, const char **name);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_inventoryStart_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_inventoryStart_pre[hIndex].func;
+ preHookFunc(&sd, &type, &name);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.inventoryStart(sd, type, name);
+ }
+ if (HPMHooks.count.HP_clif_inventoryStart_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, enum inventory_type type, const char *name);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_inventoryStart_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_inventoryStart_post[hIndex].func;
+ postHookFunc(sd, type, name);
+ }
+ }
+ return;
+}
+void HP_clif_inventoryEnd(struct map_session_data *sd, enum inventory_type type) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_inventoryEnd_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, enum inventory_type *type);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_inventoryEnd_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_inventoryEnd_pre[hIndex].func;
+ preHookFunc(&sd, &type);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.inventoryEnd(sd, type);
+ }
+ if (HPMHooks.count.HP_clif_inventoryEnd_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, enum inventory_type type);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_inventoryEnd_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_inventoryEnd_post[hIndex].func;
+ postHookFunc(sd, type);
+ }
+ }
+ return;
+}
void HP_clif_updatestorageamount(struct map_session_data *sd, int amount, int max_amount) {
int hIndex = 0;
if (HPMHooks.count.HP_clif_updatestorageamount_pre > 0) {
@@ -16719,14 +17084,14 @@ void HP_clif_guild_inviteack(struct map_session_data *sd, int flag) {
}
return;
}
-void HP_clif_guild_leave(struct map_session_data *sd, const char *name, const char *mes) {
+void HP_clif_guild_leave(struct map_session_data *sd, const char *name, int char_id, const char *mes) {
int hIndex = 0;
if (HPMHooks.count.HP_clif_guild_leave_pre > 0) {
- void (*preHookFunc) (struct map_session_data **sd, const char **name, const char **mes);
+ void (*preHookFunc) (struct map_session_data **sd, const char **name, int *char_id, const char **mes);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guild_leave_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_clif_guild_leave_pre[hIndex].func;
- preHookFunc(&sd, &name, &mes);
+ preHookFunc(&sd, &name, &char_id, &mes);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -16734,25 +17099,25 @@ void HP_clif_guild_leave(struct map_session_data *sd, const char *name, const ch
}
}
{
- HPMHooks.source.clif.guild_leave(sd, name, mes);
+ HPMHooks.source.clif.guild_leave(sd, name, char_id, mes);
}
if (HPMHooks.count.HP_clif_guild_leave_post > 0) {
- void (*postHookFunc) (struct map_session_data *sd, const char *name, const char *mes);
+ void (*postHookFunc) (struct map_session_data *sd, const char *name, int char_id, const char *mes);
for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guild_leave_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_clif_guild_leave_post[hIndex].func;
- postHookFunc(sd, name, mes);
+ postHookFunc(sd, name, char_id, mes);
}
}
return;
}
-void HP_clif_guild_expulsion(struct map_session_data *sd, const char *name, const char *mes, int account_id) {
+void HP_clif_guild_expulsion(struct map_session_data *sd, const char *name, int char_id, const char *mes, int account_id) {
int hIndex = 0;
if (HPMHooks.count.HP_clif_guild_expulsion_pre > 0) {
- void (*preHookFunc) (struct map_session_data **sd, const char **name, const char **mes, int *account_id);
+ void (*preHookFunc) (struct map_session_data **sd, const char **name, int *char_id, const char **mes, int *account_id);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guild_expulsion_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_clif_guild_expulsion_pre[hIndex].func;
- preHookFunc(&sd, &name, &mes, &account_id);
+ preHookFunc(&sd, &name, &char_id, &mes, &account_id);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -16760,13 +17125,13 @@ void HP_clif_guild_expulsion(struct map_session_data *sd, const char *name, cons
}
}
{
- HPMHooks.source.clif.guild_expulsion(sd, name, mes, account_id);
+ HPMHooks.source.clif.guild_expulsion(sd, name, char_id, mes, account_id);
}
if (HPMHooks.count.HP_clif_guild_expulsion_post > 0) {
- void (*postHookFunc) (struct map_session_data *sd, const char *name, const char *mes, int account_id);
+ void (*postHookFunc) (struct map_session_data *sd, const char *name, int char_id, const char *mes, int account_id);
for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guild_expulsion_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_clif_guild_expulsion_post[hIndex].func;
- postHookFunc(sd, name, mes, account_id);
+ postHookFunc(sd, name, char_id, mes, account_id);
}
}
return;
@@ -17213,6 +17578,58 @@ void HP_clif_guild_expulsionlist(struct map_session_data *sd) {
}
return;
}
+void HP_clif_guild_set_position(struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_guild_set_position_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guild_set_position_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_guild_set_position_pre[hIndex].func;
+ preHookFunc(&sd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.guild_set_position(sd);
+ }
+ if (HPMHooks.count.HP_clif_guild_set_position_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guild_set_position_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_guild_set_position_post[hIndex].func;
+ postHookFunc(sd);
+ }
+ }
+ return;
+}
+void HP_clif_guild_position_selected(struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_guild_position_selected_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guild_position_selected_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_guild_position_selected_pre[hIndex].func;
+ preHookFunc(&sd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.guild_position_selected(sd);
+ }
+ if (HPMHooks.count.HP_clif_guild_position_selected_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guild_position_selected_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_guild_position_selected_post[hIndex].func;
+ postHookFunc(sd);
+ }
+ }
+ return;
+}
bool HP_clif_validate_emblem(const uint8 *emblem, unsigned long emblem_len) {
int hIndex = 0;
bool retVal___ = false;
@@ -28314,6 +28731,32 @@ void HP_clif_pReqStyleChange(int fd, struct map_session_data *sd) {
}
return;
}
+void HP_clif_pReqStyleChange2(int fd, struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_pReqStyleChange2_pre > 0) {
+ void (*preHookFunc) (int *fd, struct map_session_data **sd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pReqStyleChange2_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_pReqStyleChange2_pre[hIndex].func;
+ preHookFunc(&fd, &sd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.pReqStyleChange2(fd, sd);
+ }
+ if (HPMHooks.count.HP_clif_pReqStyleChange2_post > 0) {
+ void (*postHookFunc) (int fd, struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pReqStyleChange2_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_pReqStyleChange2_post[hIndex].func;
+ postHookFunc(fd, sd);
+ }
+ }
+ return;
+}
void HP_clif_cz_req_style_change_sub(struct map_session_data *sd, int type, int16 idx, bool isitem) {
int hIndex = 0;
if (HPMHooks.count.HP_clif_cz_req_style_change_sub_pre > 0) {
@@ -28444,6 +28887,110 @@ void HP_clif_party_dead_notification(struct map_session_data *sd) {
}
return;
}
+void HP_clif_pMemorialDungeonCommand(int fd, struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_pMemorialDungeonCommand_pre > 0) {
+ void (*preHookFunc) (int *fd, struct map_session_data **sd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pMemorialDungeonCommand_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_pMemorialDungeonCommand_pre[hIndex].func;
+ preHookFunc(&fd, &sd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.pMemorialDungeonCommand(fd, sd);
+ }
+ if (HPMHooks.count.HP_clif_pMemorialDungeonCommand_post > 0) {
+ void (*postHookFunc) (int fd, struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pMemorialDungeonCommand_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_pMemorialDungeonCommand_post[hIndex].func;
+ postHookFunc(fd, sd);
+ }
+ }
+ return;
+}
+void HP_clif_camera_showWindow(struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_camera_showWindow_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_camera_showWindow_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_camera_showWindow_pre[hIndex].func;
+ preHookFunc(&sd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.camera_showWindow(sd);
+ }
+ if (HPMHooks.count.HP_clif_camera_showWindow_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_camera_showWindow_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_camera_showWindow_post[hIndex].func;
+ postHookFunc(sd);
+ }
+ }
+ return;
+}
+void HP_clif_camera_change(struct map_session_data *sd, float range, float rotation, float latitude, enum send_target target) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_camera_change_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, float *range, float *rotation, float *latitude, enum send_target *target);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_camera_change_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_camera_change_pre[hIndex].func;
+ preHookFunc(&sd, &range, &rotation, &latitude, &target);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.camera_change(sd, range, rotation, latitude, target);
+ }
+ if (HPMHooks.count.HP_clif_camera_change_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, float range, float rotation, float latitude, enum send_target target);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_camera_change_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_camera_change_post[hIndex].func;
+ postHookFunc(sd, range, rotation, latitude, target);
+ }
+ }
+ return;
+}
+void HP_clif_item_preview(struct map_session_data *sd, int n) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_item_preview_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, int *n);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_item_preview_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_item_preview_pre[hIndex].func;
+ preHookFunc(&sd, &n);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.item_preview(sd, n);
+ }
+ if (HPMHooks.count.HP_clif_item_preview_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, int n);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_item_preview_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_item_preview_post[hIndex].func;
+ postHookFunc(sd, n);
+ }
+ }
+ return;
+}
/* cmdline_interface */
void HP_cmdline_init(void) {
int hIndex = 0;
@@ -35138,6 +35685,32 @@ int HP_instance_destroy_timer(int tid, int64 tick, int id, intptr_t data) {
}
return retVal___;
}
+void HP_instance_force_destroy(struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_instance_force_destroy_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_instance_force_destroy_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_instance_force_destroy_pre[hIndex].func;
+ preHookFunc(&sd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.instance.force_destroy(sd);
+ }
+ if (HPMHooks.count.HP_instance_force_destroy_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_instance_force_destroy_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_instance_force_destroy_post[hIndex].func;
+ postHookFunc(sd);
+ }
+ }
+ return;
+}
/* intif_interface */
int HP_intif_parse(int fd) {
int hIndex = 0;
@@ -35408,10 +35981,10 @@ void HP_intif_request_account_storage(const struct map_session_data *sd) {
}
return;
}
-void HP_intif_send_account_storage(const struct map_session_data *sd) {
+void HP_intif_send_account_storage(struct map_session_data *sd) {
int hIndex = 0;
if (HPMHooks.count.HP_intif_send_account_storage_pre > 0) {
- void (*preHookFunc) (const struct map_session_data **sd);
+ void (*preHookFunc) (struct map_session_data **sd);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_send_account_storage_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_intif_send_account_storage_pre[hIndex].func;
@@ -35426,7 +35999,7 @@ void HP_intif_send_account_storage(const struct map_session_data *sd) {
HPMHooks.source.intif.send_account_storage(sd);
}
if (HPMHooks.count.HP_intif_send_account_storage_post > 0) {
- void (*postHookFunc) (const struct map_session_data *sd);
+ void (*postHookFunc) (struct map_session_data *sd);
for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_send_account_storage_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_intif_send_account_storage_post[hIndex].func;
postHookFunc(sd);
@@ -44051,6 +44624,32 @@ void HP_map_zone_remove(int m) {
}
return;
}
+void HP_map_zone_remove_all(int m) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_map_zone_remove_all_pre > 0) {
+ void (*preHookFunc) (int *m);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_map_zone_remove_all_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_map_zone_remove_all_pre[hIndex].func;
+ preHookFunc(&m);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.map.zone_remove_all(m);
+ }
+ if (HPMHooks.count.HP_map_zone_remove_all_post > 0) {
+ void (*postHookFunc) (int m);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_map_zone_remove_all_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_map_zone_remove_all_post[hIndex].func;
+ postHookFunc(m);
+ }
+ }
+ return;
+}
void HP_map_zone_apply(int m, struct map_zone_data *zone, const char *start, const char *buffer, const char *filepath) {
int hIndex = 0;
if (HPMHooks.count.HP_map_zone_apply_pre > 0) {
@@ -44129,6 +44728,32 @@ void HP_map_zone_change2(int m, struct map_zone_data *zone) {
}
return;
}
+void HP_map_zone_reload(void) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_map_zone_reload_pre > 0) {
+ void (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_map_zone_reload_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_map_zone_reload_pre[hIndex].func;
+ preHookFunc();
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.map.zone_reload();
+ }
+ if (HPMHooks.count.HP_map_zone_reload_post > 0) {
+ void (*postHookFunc) (void);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_map_zone_reload_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_map_zone_reload_post[hIndex].func;
+ postHookFunc();
+ }
+ }
+ return;
+}
int HP_map_getcell(int16 m, const struct block_list *bl, int16 x, int16 y, cell_chk cellchk) {
int hIndex = 0;
int retVal___ = 0;
@@ -58664,11 +59289,11 @@ int HP_pc_payzeny(struct map_session_data *sd, int zeny, enum e_log_pick_type ty
}
return retVal___;
}
-int HP_pc_additem(struct map_session_data *sd, struct item *item_data, int amount, e_log_pick_type log_type) {
+int HP_pc_additem(struct map_session_data *sd, const struct item *item_data, int amount, e_log_pick_type log_type) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_pc_additem_pre > 0) {
- int (*preHookFunc) (struct map_session_data **sd, struct item **item_data, int *amount, e_log_pick_type *log_type);
+ int (*preHookFunc) (struct map_session_data **sd, const struct item **item_data, int *amount, e_log_pick_type *log_type);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_additem_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_pc_additem_pre[hIndex].func;
@@ -58683,7 +59308,7 @@ int HP_pc_additem(struct map_session_data *sd, struct item *item_data, int amoun
retVal___ = HPMHooks.source.pc.additem(sd, item_data, amount, log_type);
}
if (HPMHooks.count.HP_pc_additem_post > 0) {
- int (*postHookFunc) (int retVal___, struct map_session_data *sd, struct item *item_data, int amount, e_log_pick_type log_type);
+ int (*postHookFunc) (int retVal___, struct map_session_data *sd, const struct item *item_data, int amount, e_log_pick_type log_type);
for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_additem_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_pc_additem_post[hIndex].func;
retVal___ = postHookFunc(retVal___, sd, item_data, amount, log_type);
@@ -66162,6 +66787,33 @@ bool HP_quest_questinfo_validate_quests(struct map_session_data *sd, struct ques
}
return retVal___;
}
+bool HP_quest_questinfo_validate_mercenary_class(struct map_session_data *sd, struct questinfo *qi) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_quest_questinfo_validate_mercenary_class_pre > 0) {
+ bool (*preHookFunc) (struct map_session_data **sd, struct questinfo **qi);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_quest_questinfo_validate_mercenary_class_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_quest_questinfo_validate_mercenary_class_pre[hIndex].func;
+ retVal___ = preHookFunc(&sd, &qi);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.quest.questinfo_validate_mercenary_class(sd, qi);
+ }
+ if (HPMHooks.count.HP_quest_questinfo_validate_mercenary_class_post > 0) {
+ bool (*postHookFunc) (bool retVal___, struct map_session_data *sd, struct questinfo *qi);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_quest_questinfo_validate_mercenary_class_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_quest_questinfo_validate_mercenary_class_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, sd, qi);
+ }
+ }
+ return retVal___;
+}
void HP_quest_questinfo_vector_clear(int m) {
int hIndex = 0;
if (HPMHooks.count.HP_quest_questinfo_vector_clear_pre > 0) {
@@ -68339,6 +68991,33 @@ int HP_script_add_str(const char *p) {
}
return retVal___;
}
+int HP_script_add_variable(const char *varname) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_script_add_variable_pre > 0) {
+ int (*preHookFunc) (const char **varname);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_script_add_variable_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_script_add_variable_pre[hIndex].func;
+ retVal___ = preHookFunc(&varname);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.script.add_variable(varname);
+ }
+ if (HPMHooks.count.HP_script_add_variable_post > 0) {
+ int (*postHookFunc) (int retVal___, const char *varname);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_script_add_variable_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_script_add_variable_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, varname);
+ }
+ }
+ return retVal___;
+}
const char* HP_script_get_str(int id) {
int hIndex = 0;
const char* retVal___ = NULL;
@@ -75768,6 +76447,32 @@ int HP_skill_timerskill(int tid, int64 tick, int id, intptr_t data) {
}
return retVal___;
}
+void HP_skill_trap_do_splash(struct block_list *bl, uint16 skill_id, uint16 skill_lv, int bl_flag, int64 tick) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_trap_do_splash_pre > 0) {
+ void (*preHookFunc) (struct block_list **bl, uint16 *skill_id, uint16 *skill_lv, int *bl_flag, int64 *tick);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_trap_do_splash_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_trap_do_splash_pre[hIndex].func;
+ preHookFunc(&bl, &skill_id, &skill_lv, &bl_flag, &tick);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.trap_do_splash(bl, skill_id, skill_lv, bl_flag, tick);
+ }
+ if (HPMHooks.count.HP_skill_trap_do_splash_post > 0) {
+ void (*postHookFunc) (struct block_list *bl, uint16 skill_id, uint16 skill_lv, int bl_flag, int64 tick);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_trap_do_splash_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_trap_do_splash_post[hIndex].func;
+ postHookFunc(bl, skill_id, skill_lv, bl_flag, tick);
+ }
+ }
+ return;
+}
int HP_skill_trap_splash(struct block_list *bl, va_list ap) {
int hIndex = 0;
int retVal___ = 0;
@@ -80835,11 +81540,11 @@ int HP_status_percent_change(struct block_list *src, struct block_list *target,
}
return retVal___;
}
-int HP_status_set_hp(struct block_list *bl, unsigned int hp, int flag) {
+int HP_status_set_hp(struct block_list *bl, unsigned int hp, enum status_heal_flag flag) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_status_set_hp_pre > 0) {
- int (*preHookFunc) (struct block_list **bl, unsigned int *hp, int *flag);
+ int (*preHookFunc) (struct block_list **bl, unsigned int *hp, enum status_heal_flag *flag);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_status_set_hp_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_status_set_hp_pre[hIndex].func;
@@ -80854,7 +81559,7 @@ int HP_status_set_hp(struct block_list *bl, unsigned int hp, int flag) {
retVal___ = HPMHooks.source.status.set_hp(bl, hp, flag);
}
if (HPMHooks.count.HP_status_set_hp_post > 0) {
- int (*postHookFunc) (int retVal___, struct block_list *bl, unsigned int hp, int flag);
+ int (*postHookFunc) (int retVal___, struct block_list *bl, unsigned int hp, enum status_heal_flag flag);
for (hIndex = 0; hIndex < HPMHooks.count.HP_status_set_hp_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_status_set_hp_post[hIndex].func;
retVal___ = postHookFunc(retVal___, bl, hp, flag);
@@ -80862,11 +81567,11 @@ int HP_status_set_hp(struct block_list *bl, unsigned int hp, int flag) {
}
return retVal___;
}
-int HP_status_set_sp(struct block_list *bl, unsigned int sp, int flag) {
+int HP_status_set_sp(struct block_list *bl, unsigned int sp, enum status_heal_flag flag) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_status_set_sp_pre > 0) {
- int (*preHookFunc) (struct block_list **bl, unsigned int *sp, int *flag);
+ int (*preHookFunc) (struct block_list **bl, unsigned int *sp, enum status_heal_flag *flag);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_status_set_sp_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_status_set_sp_pre[hIndex].func;
@@ -80881,7 +81586,7 @@ int HP_status_set_sp(struct block_list *bl, unsigned int sp, int flag) {
retVal___ = HPMHooks.source.status.set_sp(bl, sp, flag);
}
if (HPMHooks.count.HP_status_set_sp_post > 0) {
- int (*postHookFunc) (int retVal___, struct block_list *bl, unsigned int sp, int flag);
+ int (*postHookFunc) (int retVal___, struct block_list *bl, unsigned int sp, enum status_heal_flag flag);
for (hIndex = 0; hIndex < HPMHooks.count.HP_status_set_sp_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_status_set_sp_post[hIndex].func;
retVal___ = postHookFunc(retVal___, bl, sp, flag);
@@ -80889,11 +81594,11 @@ int HP_status_set_sp(struct block_list *bl, unsigned int sp, int flag) {
}
return retVal___;
}
-int HP_status_heal(struct block_list *bl, int64 hp, int64 sp, int flag) {
+int HP_status_heal(struct block_list *bl, int64 hp, int64 sp, enum status_heal_flag flag) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_status_heal_pre > 0) {
- int (*preHookFunc) (struct block_list **bl, int64 *hp, int64 *sp, int *flag);
+ int (*preHookFunc) (struct block_list **bl, int64 *hp, int64 *sp, enum status_heal_flag *flag);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_status_heal_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_status_heal_pre[hIndex].func;
@@ -80908,7 +81613,7 @@ int HP_status_heal(struct block_list *bl, int64 hp, int64 sp, int flag) {
retVal___ = HPMHooks.source.status.heal(bl, hp, sp, flag);
}
if (HPMHooks.count.HP_status_heal_post > 0) {
- int (*postHookFunc) (int retVal___, struct block_list *bl, int64 hp, int64 sp, int flag);
+ int (*postHookFunc) (int retVal___, struct block_list *bl, int64 hp, int64 sp, enum status_heal_flag flag);
for (hIndex = 0; hIndex < HPMHooks.count.HP_status_heal_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_status_heal_post[hIndex].func;
retVal___ = postHookFunc(retVal___, bl, hp, sp, flag);
@@ -82826,6 +83531,60 @@ unsigned int HP_status_get_base_maxsp(const struct map_session_data *sd, const s
}
return retVal___;
}
+unsigned int HP_status_get_restart_hp(const struct map_session_data *sd, const struct status_data *st) {
+ int hIndex = 0;
+ unsigned int retVal___ = 0;
+ if (HPMHooks.count.HP_status_get_restart_hp_pre > 0) {
+ unsigned int (*preHookFunc) (const struct map_session_data **sd, const struct status_data **st);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_status_get_restart_hp_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_status_get_restart_hp_pre[hIndex].func;
+ retVal___ = preHookFunc(&sd, &st);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.status.get_restart_hp(sd, st);
+ }
+ if (HPMHooks.count.HP_status_get_restart_hp_post > 0) {
+ unsigned int (*postHookFunc) (unsigned int retVal___, const struct map_session_data *sd, const struct status_data *st);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_status_get_restart_hp_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_status_get_restart_hp_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, sd, st);
+ }
+ }
+ return retVal___;
+}
+unsigned int HP_status_get_restart_sp(const struct map_session_data *sd, const struct status_data *st) {
+ int hIndex = 0;
+ unsigned int retVal___ = 0;
+ if (HPMHooks.count.HP_status_get_restart_sp_pre > 0) {
+ unsigned int (*preHookFunc) (const struct map_session_data **sd, const struct status_data **st);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_status_get_restart_sp_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_status_get_restart_sp_pre[hIndex].func;
+ retVal___ = preHookFunc(&sd, &st);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.status.get_restart_sp(sd, st);
+ }
+ if (HPMHooks.count.HP_status_get_restart_sp_post > 0) {
+ unsigned int (*postHookFunc) (unsigned int retVal___, const struct map_session_data *sd, const struct status_data *st);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_status_get_restart_sp_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_status_get_restart_sp_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, sd, st);
+ }
+ }
+ return retVal___;
+}
int HP_status_calc_npc_(struct npc_data *nd, enum e_status_calc_opt opt) {
int hIndex = 0;
int retVal___ = 0;
diff --git a/src/plugins/db2sql.c b/src/plugins/db2sql.c
index 57e68432e..2ece501b2 100644
--- a/src/plugins/db2sql.c
+++ b/src/plugins/db2sql.c
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2015 Hercules Dev Team
+ * Copyright (C) 2013-2018 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -70,6 +70,10 @@ bool mobdb2sql_torun = false;
int (*itemdb_readdb_libconfig_sub) (struct config_setting_t *it, int n, const char *source);
/// Backup of the original mob_db parser function pointer.
int (*mob_read_db_sub) (struct config_setting_t *it, int n, const char *source);
+bool (*mob_skill_db_libconfig_sub_skill) (struct config_setting_t *it, int n, int mob_id);
+
+//
+void do_mobskilldb2sql(void);
/**
* Normalizes and appends a string to the output buffer.
@@ -811,6 +815,330 @@ void do_mobdb2sql(void)
if (tosql.buf[i].p)
aFree(tosql.buf[i].p);
}
+
+ // Run mob_skill_db converter
+ do_mobskilldb2sql();
+}
+
+/**
+ * Converts Mob Skill State constant to string
+ */
+const char* mob_skill_state_tostring(enum MobSkillState mss)
+{
+ switch(mss) {
+ case MSS_ANY:
+ return "any";
+ case MSS_IDLE:
+ return "idle";
+ case MSS_WALK:
+ return "walk";
+ case MSS_LOOT:
+ return "loot";
+ case MSS_DEAD:
+ return "dead";
+ case MSS_BERSERK:
+ return "attack";
+ case MSS_ANGRY:
+ return "angry";
+ case MSS_RUSH:
+ return "chase";
+ case MSS_FOLLOW:
+ return "follow";
+ case MSS_ANYTARGET:
+ return "anytarget";
+ }
+
+ return "unknown";
+}
+
+/**
+ * Converts Mob Skill Target constant to string
+ */
+const char* mob_skill_target_tostring(int target)
+{
+ switch(target) {
+ case MST_TARGET:
+ return "target";
+ case MST_RANDOM:
+ return "randomtarget";
+ case MST_SELF:
+ return "self";
+ case MST_FRIEND:
+ return "friend";
+ case MST_MASTER:
+ return "master";
+ case MST_AROUND1:
+ return "around1";
+ case MST_AROUND2:
+ return "around2";
+ case MST_AROUND3:
+ return "around3";
+ //case MST_AROUND: // same value as MST_AROUND4
+ case MST_AROUND4:
+ return "around4";
+ case MST_AROUND5:
+ return "around5";
+ case MST_AROUND6:
+ return "around6";
+ case MST_AROUND7:
+ return "around7";
+ case MST_AROUND8:
+ return "around8";
+ }
+ return "unknown";
+}
+
+/**
+ * Converts Mob Skill Condition constant to string
+ */
+const char* mob_skill_condition_tostring(int condition)
+{
+ switch(condition) {
+ case MSC_ALWAYS:
+ return "always";
+ case MSC_MYHPLTMAXRATE:
+ return "myhpltmaxrate";
+ case MSC_MYHPINRATE:
+ return "myhpinrate";
+ case MSC_FRIENDHPLTMAXRATE:
+ return "friendhpltmaxrate";
+ case MSC_FRIENDHPINRATE:
+ return "friendhpinrate";
+ case MSC_MYSTATUSON:
+ return "mystatuson";
+ case MSC_MYSTATUSOFF:
+ return "mystatusoff";
+ case MSC_FRIENDSTATUSON:
+ return "friendstatuson";
+ case MSC_FRIENDSTATUSOFF:
+ return "friendstatusoff";
+ case MSC_ATTACKPCGT:
+ return "attackpcgt";
+ case MSC_ATTACKPCGE:
+ return "attackpcge";
+ case MSC_SLAVELT:
+ return "slavelt";
+ case MSC_SLAVELE:
+ return "slavele";
+ case MSC_CLOSEDATTACKED:
+ return "closedattacked";
+ case MSC_LONGRANGEATTACKED:
+ return "longrangeattacked";
+ case MSC_AFTERSKILL:
+ return "afterskill";
+ case MSC_SKILLUSED:
+ return "skillused";
+ case MSC_CASTTARGETED:
+ return "casttargeted";
+ case MSC_RUDEATTACKED:
+ return "rudeattacked";
+ case MSC_MASTERHPLTMAXRATE:
+ return "masterhpltmaxrate";
+ case MSC_MASTERATTACKED:
+ return "masterattacked";
+ case MSC_ALCHEMIST:
+ return "alchemist";
+ case MSC_SPAWN:
+ return "onspawn";
+ }
+ return "unknown";
+}
+
+/**
+ * Converts a Mob Skill DB entry to SQL.
+ *
+ * @see mob_skill_db_libconfig_sub_skill.
+ */
+bool mobskilldb2sql_sub(struct config_setting_t *it, int n, int mob_id)
+{
+ int i32 = 0, i;
+ StringBuf buf;
+ struct mob_db *md = mob->db(mob_id);
+ char valname[15];
+ const char *name = config_setting_name(it);
+
+ nullpo_retr(false, it);
+ Assert_retr(false, mob_id <= 0 || md != mob->dummy);
+
+ StrBuf->Init(&buf);
+
+ // MonsterID
+ StrBuf->Printf(&buf, "%d,", mob_id);
+
+ // Info
+ StrBuf->Printf(&buf, "'%s@%s',", md->name, name);
+
+ if (mob->lookup_const(it, "SkillState", &i32) && (i32 < MSS_ANY || i32 > MSS_ANYTARGET)) {
+ ShowWarning("mob_skill_db_libconfig_sub_skill: Invalid skill state %d for skill '%s' in monster %d, defaulting to MSS_ANY.\n", i32, name, mob_id);
+ i32 = MSS_ANY;
+ }
+ // State
+ StrBuf->Printf(&buf, "'%s',", mob_skill_state_tostring(i32));
+
+ // SkillID
+ if (!(i32 = skill->name2id(name))) {
+ ShowWarning("mob_skill_db_libconfig_sub_skill: Non existant skill id %d in monster %d, skipping.\n", i32, mob_id);
+ return false;
+ }
+ StrBuf->Printf(&buf, "%d,", i32);
+
+ // SkillLv
+ if (!libconfig->setting_lookup_int(it, "SkillLevel", &i32) || i32 <= 0)
+ i32 = 1;
+ StrBuf->Printf(&buf, "%d,", i32);
+
+ // Rate
+ i32 = 0;
+ libconfig->setting_lookup_int(it, "Rate", &i32);
+ StrBuf->Printf(&buf, "%d,", i32);
+
+ // CastTime
+ i32 = 0;
+ libconfig->setting_lookup_int(it, "CastTime", &i32);
+ StrBuf->Printf(&buf, "%d,", i32);
+
+ // Delay
+ i32 = 0;
+ libconfig->setting_lookup_int(it, "Delay", &i32);
+ StrBuf->Printf(&buf, "%d,", i32);
+
+ // Cancelable
+ if (libconfig->setting_lookup_bool(it, "Cancelable", &i32)) {
+ StrBuf->Printf(&buf, "'%s',", ((i32 == 0) ? "no" : "yes"));
+ } else {
+ StrBuf->Printf(&buf, "'no',");
+ }
+
+ // Target
+ if (mob->lookup_const(it, "SkillTarget", &i32) && (i32 < MST_TARGET || i32 > MST_AROUND)) {
+ i32 = MST_TARGET;
+ }
+ StrBuf->Printf(&buf, "'%s',", mob_skill_target_tostring(i32));
+
+ // Condition
+ if (mob->lookup_const(it, "CastCondition", &i32) && (i32 < MSC_ALWAYS || i32 > MSC_SPAWN)) {
+ i32 = MSC_ALWAYS;
+ }
+ StrBuf->Printf(&buf, "'%s',", mob_skill_condition_tostring(i32));
+
+ // ConditionValue
+ i32 = 0;
+ if (mob->lookup_const(it, "ConditionData", &i32)) {
+ StrBuf->Printf(&buf, "'%d',", i32);
+ } else {
+ StrBuf->Printf(&buf, "NULL,");
+ }
+
+ // Val1-Val5
+ for (i = 0; i < 5; i++) {
+ sprintf(valname, "val%1d", i);
+ if (libconfig->setting_lookup_int(it, valname, &i32)) {
+ StrBuf->Printf(&buf, "%d,", i32);
+ } else {
+ StrBuf->Printf(&buf, "NULL,");
+ }
+ }
+
+ // Emotion
+ if (libconfig->setting_lookup_int(it, "Emotion", &i32)) {
+ StrBuf->Printf(&buf, "'%d',", i32);
+ } else {
+ StrBuf->Printf(&buf, "NULL,");
+ }
+
+ if (libconfig->setting_lookup_int(it, "ChatMsgID", &i32) && i32 > 0 && i32 <= MAX_MOB_CHAT) {
+ StrBuf->Printf(&buf, "'%d'", i32);
+ } else {
+ StrBuf->Printf(&buf, "NULL");
+ }
+
+ fprintf(tosql.fp, "REPLACE INTO `%s` VALUES (%s);\n", tosql.db_name, StrBuf->Value(&buf));
+
+ StrBuf->Destroy(&buf);
+
+ return true;
+
+}
+
+
+/**
+ * Prints a SQL table header for the current mob_skill_db table.
+ */
+void mobskilldb2sql_tableheader(void)
+{
+ db2sql_fileheader();
+
+ fprintf(tosql.fp,
+ "--\n"
+ "-- Table structure for table `%s`\n"
+ "--\n"
+ "\n"
+ "DROP TABLE IF EXISTS `%s`;\n"
+ "CREATE TABLE `%s` (\n"
+ " `MOB_ID` SMALLINT(6) NOT NULL,\n"
+ " `INFO` TEXT NOT NULL,\n"
+ " `STATE` TEXT NOT NULL,\n"
+ " `SKILL_ID` SMALLINT(6) NOT NULL,\n"
+ " `SKILL_LV` TINYINT(4) NOT NULL,\n"
+ " `RATE` SMALLINT(4) NOT NULL,\n"
+ " `CASTTIME` MEDIUMINT(9) NOT NULL,\n"
+ " `DELAY` INT(9) NOT NULL,\n"
+ " `CANCELABLE` TEXT NOT NULL,\n"
+ " `TARGET` TEXT NOT NULL,\n"
+ " `CONDITION` TEXT NOT NULL,\n"
+ " `CONDITION_VALUE` TEXT,\n"
+ " `VAL1` INT(11) DEFAULT NULL,\n"
+ " `VAL2` INT(11) DEFAULT NULL,\n"
+ " `VAL3` INT(11) DEFAULT NULL,\n"
+ " `VAL4` INT(11) DEFAULT NULL,\n"
+ " `VAL5` INT(11) DEFAULT NULL,\n"
+ " `EMOTION` TEXT,\n"
+ " `CHAT` TEXT\n"
+ ") ENGINE=MyISAM;\n"
+ "\n", tosql.db_name, tosql.db_name, tosql.db_name);
+}
+
+/**
+ * Mob Skill DB Conversion
+ */
+void do_mobskilldb2sql(void)
+{
+ int i;
+ struct convert_db_files {
+ const char *name;
+ const char *source;
+ const char *destination;
+ } files[] = {
+ {"mob_skill_db", DBPATH"mob_skill_db.conf", "sql-files/mob_skill_db" DBSUFFIX ".sql"},
+ {"mob_skill_db2", "mob_skill_db2.conf", "sql-files/mob_skill_db2.sql"},
+ };
+
+ /* link */
+ mob_skill_db_libconfig_sub_skill = mob->skill_db_libconfig_sub_skill;
+ mob->skill_db_libconfig_sub_skill = mobskilldb2sql_sub;
+
+ memset(&tosql.buf, 0, sizeof(tosql.buf));
+ for (i = 0; i < ARRAYLENGTH(files); i++) {
+ if ((tosql.fp = fopen(files[i].destination, "wt+")) == NULL) {
+ ShowError("do_mobskilldb2sql: File not found \"%s\".\n", files[i].destination);
+ return;
+ }
+
+ tosql.db_name = files[i].name;
+ mobskilldb2sql_tableheader();
+
+ mob->skill_db_libconfig(files[i].source, false);
+
+ fclose(tosql.fp);
+ }
+
+ /* unlink */
+ mob->skill_db_libconfig_sub_skill = mob_skill_db_libconfig_sub_skill;
+
+ for (i = 0; i < ARRAYLENGTH(tosql.buf); i++) {
+ if (tosql.buf[i].p)
+ aFree(tosql.buf[i].p);
+ }
}
/**
diff --git a/src/tool/Makefile.in b/src/tool/Makefile.in
deleted file mode 100644
index d4c178218..000000000
--- a/src/tool/Makefile.in
+++ /dev/null
@@ -1,88 +0,0 @@
-# This file is part of Hercules.
-# http://herc.ws - http://github.com/HerculesWS/Hercules
-#
-# Copyright (C) 2012-2018 Hercules Dev Team
-# Copyright (C) Athena Dev Teams
-#
-# Hercules is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-# @configure_input@
-
-CONFIG_D = ../config
-CONFIG_H = $(wildcard $(CONFIG_D)/*.h) $(wildcard $(CONFIG_D)/*/*.h)
-
-COMMON_D = ../common
-COMMON_H = $(filter-out %.p.h, $(wildcard $(COMMON_D)/*.h))
-SYSINFO_INC = $(COMMON_D)/sysinfo.inc
-COMMON_INCLUDE = -I..
-
-THIRDPARTY_D = ../../3rdparty
-THIRDPARTY_INCLUDE = -I$(THIRDPARTY_D)
-
-LIBCONFIG_D = $(THIRDPARTY_D)/libconfig
-LIBCONFIG_OBJ = $(addprefix $(LIBCONFIG_D)/, libconfig.o grammar.o scanctx.o \
- scanner.o strbuf.o)
-LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \
- scanctx.h scanner.h strbuf.h wincompat.h)
-
-@SET_MAKE@
-
-CC = @CC@
-export CC
-
-#####################################################################
-.PHONY: all clean buildclean help
-
-all: Makefile
-
-buildclean:
- @echo " CLEAN tool (build temp files)"
- @rm -rf obj_all/*.o
-
-clean: buildclean
- @echo " CLEAN tool"
-
-help:
- @echo "possible targets are 'all' 'clean' 'help'"
- @echo "'all' - builds all above targets"
- @echo "'clean' - cleans builds and objects"
- @echo "'buildclean' - cleans build temporary (object) files, without deleting the"
- @echo " executables"
- @echo "'help' - outputs this message"
-
-#####################################################################
-
-Makefile: Makefile.in
- @$(MAKE) -C ../.. src/tool/Makefile
-
-$(SYSINFO_INC): $(COMMON_H) $(CONFIG_H) $(LIBCONFIG_H)
- @echo " MAKE $@"
- @$(MAKE) -C ../.. sysinfo
-
-obj_all:
- @echo " MKDIR obj_all"
- @-mkdir obj_all
-
-obj_all/%.o: %.c $(COMMON_H) $(CONFIG_H) $(LIBCONFIG_H) | obj_all
- @echo " CC $<"
- @$(CC) @CFLAGS@ @DEFS@ $(COMMON_INCLUDE) $(THIRDPARTY_INCLUDE) @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
-
-# missing common object files
-$(COMMON_D)/obj_all/common_mini.a:
- @echo " MAKE $@"
- @$(MAKE) -C $(COMMON_D) common_mini
-
-$(LIBCONFIG_OBJ):
- @echo " MAKE $@"
- @$(MAKE) -C $(LIBCONFIG_D)