diff options
Diffstat (limited to 'src')
56 files changed, 19007 insertions, 776 deletions
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..eed35aabf 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,7 @@ 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_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 +669,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 +709,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 +723,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 +798,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/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..5923775b7 100644 --- a/src/common/console.c +++ b/src/common/console.c @@ -25,6 +25,7 @@ #include "common/cbasetypes.h" #include "common/core.h" +#include "common/mmo.h" #include "common/nullpo.h" #include "common/showmsg.h" #include "common/sysinfo.h" @@ -93,6 +94,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/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/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/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 0369b0fb5..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); @@ -1378,11 +1399,10 @@ static bool achievement_readdb_validate_criteria_itemtype(const struct config_se } } else if ((tt = libconfig->setting_get_member(t, "ItemType")) && config_setting_is_array(tt)) { int j = 0; - uint32 it_type = 0; while (j < libconfig->setting_length(tt)) { if ((val = libconfig->setting_get_int_elem(tt, j))) { - if (val < IT_HEALING || val >= IT_MAX) { + if (val < IT_HEALING || val > IT_MAX) { ShowError("achievement_readdb_validate_criteria_itemtype: Invalid ItemType %d provided (Achievement: %d, Objective: %d). Skipping...\n", val, entry_id, obj_idx); continue; } @@ -1405,8 +1425,6 @@ static bool achievement_readdb_validate_criteria_itemtype(const struct config_se } j++; } - - obj->item_type = it_type; } else if (achievement_criteria_itemtype(type)) { ShowError("achievement_readdb_validate_criteria_itemtype: Criteria requires a ItemType field (Achievement: %d, Objective: %d). Skipping...\n", entry_id, obj_idx); return false; @@ -1780,7 +1798,7 @@ static void achievement_readb(void) if (libconfig->setting_lookup_int(conf, "Id", &t_ad.id) == 0) { ShowError("achievement_readdb: Id field for entry %d is not provided! Skipping...\n", entry); continue; - } else if (t_ad.id <= 0 || t_ad.id > INT32_MAX) { + } else if (t_ad.id <= 0) { ShowError("achievement_readdb: Invalid Id %d for entry %d. Skipping...\n", t_ad.id, entry); continue; } @@ -1980,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..809a740d7 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -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; } } @@ -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 fceb30be1..44241bf23 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -4339,6 +4339,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; } @@ -6008,6 +6010,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; @@ -7325,6 +7358,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, }, @@ -7371,6 +7405,8 @@ 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, }, }; static bool battle_set_value_sub(int index, int value) @@ -7614,6 +7650,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..02536e4a1 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,9 @@ struct Battle_Config { int feature_enable_attendance_system; int feature_attendance_endtime; + + int min_item_buy_price; + int min_item_sell_price; }; /* criteria for battle_config.idletime_critera */ @@ -636,6 +640,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..f1946385d 100644 --- a/src/map/channel.c +++ b/src/map/channel.c @@ -290,7 +290,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); } } diff --git a/src/map/clif.c b/src/map/clif.c index cfbc3d252..b7017153b 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); } @@ -3157,13 +3289,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; @@ -6099,6 +6231,7 @@ static void clif_map_property_mapall(int mapid, enum map_property property) struct block_list bl; unsigned char buf[16]; + memset(&bl, 0, sizeof(bl)); bl.id = 0; bl.type = BL_NUL; bl.m = mapid; @@ -6179,6 +6312,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; @@ -6190,7 +6324,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); @@ -7553,22 +7687,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 } @@ -7593,6 +7721,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; @@ -7611,12 +7740,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; @@ -8078,6 +8208,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; @@ -8093,41 +8224,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). @@ -8309,6 +8444,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: @@ -8687,6 +8865,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). * @@ -8759,8 +8976,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 @@ -8772,7 +8989,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); } } @@ -8784,9 +9001,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); @@ -9326,6 +9543,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); @@ -9432,6 +9652,36 @@ 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; + p->color = color; + 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. @@ -9785,11 +10035,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); } @@ -10792,7 +11042,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]; @@ -11484,7 +11734,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); } } @@ -12092,7 +12342,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 @@ -15194,7 +15444,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); @@ -16622,7 +16872,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 @@ -16711,7 +16965,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 @@ -16757,7 +17015,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 @@ -16770,9 +17028,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; @@ -16800,7 +17061,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 @@ -16812,7 +17073,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; @@ -17243,7 +17504,7 @@ static void clif_bg_updatescore(int16 m) struct block_list bl; unsigned char buf[6]; - bl.id = 0; + memset(&bl, 0, sizeof(bl)); bl.type = BL_NUL; bl.m = m; @@ -17347,6 +17608,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); @@ -17449,7 +17711,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; @@ -17461,7 +17723,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. @@ -18628,8 +18890,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%04d (length %d), %s session #%d, %d/%d (AID/CID)\n", cmd, packet_len, sd->state.active ? "authed" : "unauthed", fd, sd->status.account_id, sd->status.char_id); + } else { + ShowWarning("Unhandled packet 0x%04d (length %d), session #%d\n", cmd, packet_len, fd); + } return; } @@ -18741,12 +19015,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"); @@ -19547,9 +19821,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 @@ -19568,7 +19842,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++) { @@ -19616,21 +19890,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; } } @@ -19812,9 +20086,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 @@ -20270,7 +20544,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 }; @@ -20333,7 +20607,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; @@ -20387,7 +20661,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; @@ -20401,7 +20674,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 } /** @@ -20410,14 +20682,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); @@ -20737,7 +21009,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); @@ -21359,8 +21631,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); @@ -21547,13 +21819,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; } @@ -21631,6 +21922,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 + 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 *------------------------------------------*/ @@ -21682,6 +22032,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); @@ -21745,8 +22096,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; @@ -21772,8 +22123,10 @@ static int clif_parse(int fd) ShowDump(RFIFOP(fd,0), packet_len); } - } +#else + clif->pDull(fd, sd); #endif + } RFIFOSKIP(fd, packet_len); @@ -21945,6 +22298,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; @@ -21972,6 +22326,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; @@ -22080,9 +22435,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; @@ -22175,6 +22533,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; @@ -22208,6 +22568,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; @@ -22237,7 +22598,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; @@ -22296,6 +22661,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; @@ -22774,11 +23141,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 d59223477..a352d34b0 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -3702,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(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) { @@ -6816,6 +6843,7 @@ void map_defaults(void) 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; diff --git a/src/map/map.h b/src/map/map.h index 590cc5dea..0e38bdb13 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; }; @@ -1216,6 +1223,7 @@ END_ZEROED_BLOCK; 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); 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..e56eb42a1 100644 --- a/src/map/messages_main.h +++ b/src/map/messages_main.h @@ -23,7 +23,7 @@ /* This file is autogenerated, please do not commit manual changes -Latest version: 20180718 +Latest version: 20181002 */ enum clif_messages { @@ -17569,9 +17569,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 +21269,62 @@ 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 }; #endif /* MAP_MESSAGES_MAIN_H */ diff --git a/src/map/messages_re.h b/src/map/messages_re.h index 899f0c708..474030df1 100644 --- a/src/map/messages_re.h +++ b/src/map/messages_re.h @@ -23,7 +23,7 @@ /* This file is autogenerated, please do not commit manual changes -Latest version: 20180718 +Latest version: 20181002 */ enum clif_messages { @@ -17045,9 +17045,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 +20748,62 @@ 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 }; #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..348bc00c8 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: 20181010 */ 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,69 @@ 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 }; #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 3a00b38ea..a8bf7d371 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); @@ -2272,10 +2272,11 @@ static int npc_selllist(struct map_session_data *sd, struct itemlist *item_list) } } - pc->delitem(sd, idx, entry->amount, 0, DELITEM_SOLD, LOG_TYPE_NPC); - // Achievements [Smokexyz/Hercules] achievement->validate_item_sell(sd, sd->status.inventory[idx].nameid, entry->amount); + + pc->delitem(sd, idx, entry->amount, 0, DELITEM_SOLD, LOG_TYPE_NPC); + } if (z + sd->status.zeny > MAX_ZENY && nd->master_nd == NULL) @@ -2867,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; @@ -4979,6 +4980,7 @@ static int npc_reload(void) instance->reload(); + map->zone_reload(); map->zone_init(); npc->motd = npc->name2id("HerculesMOTD"); /* [Ind/Hercules] */ 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..fb48d953b 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,144 @@ 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); +// changed packet sizes +#endif + +// 2018-10-17bRagexeRE +#if PACKETVER_RE_NUM >= 20181017 +// new packets + packet(0x0b12,2,clif->pDull/*,XXX*/); + packet(0x0b13,48); +// changed packet sizes +#endif + #endif /* MAP_PACKETS_H */ diff --git a/src/map/packets_keys_main.h b/src/map/packets_keys_main.h index 43221f965..c94e44525 100644 --- a/src/map/packets_keys_main.h +++ b/src/map/packets_keys_main.h @@ -874,7 +874,7 @@ 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 +// 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-17bRagexe, 2018-10-17bRagexeRE #if PACKETVER == 20131223 || \ PACKETVER == 20140508 || \ PACKETVER == 20140611 || \ @@ -896,7 +896,16 @@ PACKETVER == 20180621 || \ PACKETVER == 20180704 || \ PACKETVER == 20180711 || \ - PACKETVER >= 20180718 + PACKETVER == 20180718 || \ + PACKETVER == 20180801 || \ + PACKETVER == 20180808 || \ + PACKETVER == 20180822 || \ + PACKETVER == 20180829 || \ + PACKETVER == 20180831 || \ + PACKETVER == 20180912 || \ + PACKETVER == 20180919 || \ + PACKETVER == 20181002 || \ + PACKETVER >= 20181017 packetKeys(0x00000000,0x00000000,0x00000000); #endif diff --git a/src/map/packets_keys_zero.h b/src/map/packets_keys_zero.h index 4d1267fbb..2d1f35e94 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 #if PACKETVER == 20171018 || \ PACKETVER == 20171019 || \ PACKETVER == 20171023 || \ @@ -51,7 +51,16 @@ 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 packetKeys(0x00000000,0x00000000,0x00000000); #endif diff --git a/src/map/packets_shuffle_main.h b/src/map/packets_shuffle_main.h index 41b4cbba5..32396ad99 100644 --- a/src/map/packets_shuffle_main.h +++ b/src/map/packets_shuffle_main.h @@ -3344,7 +3344,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-17bRagexe #if PACKETVER == 20140611 || \ PACKETVER == 20150225 || \ PACKETVER == 20180315 || \ @@ -3362,7 +3362,16 @@ 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 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..bf44faa7c 100644 --- a/src/map/packets_shuffle_re.h +++ b/src/map/packets_shuffle_re.h @@ -9662,10 +9662,18 @@ 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-17bRagexeRE #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 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..db83c0ba0 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 #if PACKETVER == 20171018 || \ PACKETVER == 20171019 || \ PACKETVER == 20171023 || \ @@ -58,7 +58,16 @@ 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 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..c786e2457 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,23 @@ 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 + itemPreview = 0xb13, +#else + itemPreview = 0xab9, +#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 +1185,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 +1296,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 +1428,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 +1460,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 +1834,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 +1872,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 +1924,14 @@ struct PACKET_ZC_FORMATSTRING_MSG { char MessageString[]; } __attribute__((packed)); +struct PACKET_ZC_FORMATSTRING_MSG_COLOR { + uint16 PacketType; + uint16 PacketLength; + uint16 messageId; + uint32 color; + char messageString[]; +} __attribute__((packed)); + struct PACKET_ZC_MSG_COLOR { uint16 PacketType; uint16 MessageId; @@ -1883,9 +1980,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 +2296,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 +2749,7 @@ struct packet_achievement_update { struct packet_achievement_reward_ack { uint16 packet_id; - uint8 received; + uint8 failed; uint32 ach_id; } __attribute__((packed)); @@ -2690,6 +2800,95 @@ 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 + int8 isDamaged; +#endif + int16 refiningLevel; + struct EQUIPSLOTINFO slot; + struct ItemOptions option_data[MAX_ITEM_OPTIONS]; +} __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..b8a6912ee 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1459,7 +1459,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 +1473,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 +1502,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 +1965,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 +1978,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 +2075,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 +4402,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 +4410,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 +4422,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 +4504,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 +4523,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 +4555,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 +4582,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 +4605,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 +4643,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 +4689,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 +5790,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 +7221,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 +7697,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 +7857,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 +7870,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 +8060,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 */ @@ -8920,11 +8921,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 +8937,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 +8950,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 +9198,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 +9305,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); 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 5e900167d..8aceb0532 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); + struct DBIterator *iter = db_iterator(map->pc_db); - 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); - - 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); + struct DBIterator *iter = db_iterator(map->pc_db); - 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; - - 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 - sd->state.menu_or_input = 0; - st->state = END; - } else {// return selected option - int menu = 0; - + } else if(sd->npc_menu == MAX_MENU_OPTIONS) { // Cancel was pressed 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; } @@ -8857,19 +8775,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 +8917,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 +9222,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 +9259,7 @@ static BUILDIN(repairall) if(repaircounter) { clif->misceffect(&sd->bl, 3); - clif->equiplist(sd); + clif->equipList(sd); } return true; @@ -10917,13 +10835,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; @@ -12266,7 +12184,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 @@ -12353,9 +12273,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; } @@ -12846,7 +12775,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; @@ -12916,7 +12845,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); @@ -12925,7 +12854,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; } @@ -13212,6 +13141,7 @@ static BUILDIN(setmapflag) case MF_PVP_NOGUILD: map->list[m].flag.pvp_noguild = 1; break; case MF_GVG: { struct block_list bl; + memset(&bl, 0, sizeof(bl)); map->list[m].flag.gvg = 1; clif->map_property_mapall(m, MAPPROPERTY_AGITZONE); bl.type = BL_NUL; @@ -13298,6 +13228,7 @@ static BUILDIN(removemapflag) case MF_NOZENYPENALTY: map->list[m].flag.nozenypenalty = 0; break; case MF_PVP: { struct block_list bl; + memset(&bl, 0, sizeof(bl)); bl.type = BL_NUL; bl.m = m; map->list[m].flag.pvp = 0; @@ -13309,6 +13240,7 @@ static BUILDIN(removemapflag) case MF_PVP_NOGUILD: map->list[m].flag.pvp_noguild = 0; break; case MF_GVG: { struct block_list bl; + memset(&bl, 0, sizeof(bl)); bl.type = BL_NUL; bl.m = m; map->list[m].flag.gvg = 0; @@ -13376,6 +13308,7 @@ static BUILDIN(pvpon) struct s_mapiterator* iter; struct block_list bl; + memset(&bl, 0, sizeof(bl)); str = script_getstr(st,2); m = map->mapname2mapid(str); if( m < 0 || map->list[m].flag.pvp ) @@ -13436,6 +13369,7 @@ static BUILDIN(pvpoff) const char *str; struct block_list bl; + memset(&bl, 0, sizeof(bl)); str=script_getstr(st,2); m = map->mapname2mapid(str); if(m < 0 || !map->list[m].flag.pvp) @@ -13465,6 +13399,7 @@ static BUILDIN(gvgon) if(m >= 0 && !map->list[m].flag.gvg) { struct block_list bl; + memset(&bl, 0, sizeof(bl)); if( !strdb_exists(map->zone_db,MAP_ZONE_GVG_NAME) ) { ShowError("buildin_gvgon: zone_db missing '%s'\n",MAP_ZONE_GVG_NAME); return true; @@ -13489,6 +13424,7 @@ static BUILDIN(gvgoff) m = map->mapname2mapid(str); if(m >= 0 && map->list[m].flag.gvg) { struct block_list bl; + memset(&bl, 0, sizeof(bl)); map->zone_change2(m, map->list[m].prev_zone); map->list[m].flag.gvg = 0; clif->map_property_mapall(m, MAPPROPERTY_NOTHING); @@ -14395,6 +14331,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); @@ -14661,6 +14600,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); @@ -14794,34 +14736,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; } @@ -14835,30 +14777,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; } @@ -14870,13 +14812,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; } @@ -15343,6 +15285,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] *------------------------------------------*/ @@ -17776,14 +17762,25 @@ static BUILDIN(getd) char varname[100]; const char *buffer; int elem; + int id; buffer = script_getstr(st, 2); if (sscanf(buffer, "%99[^[][%d]", varname, &elem) < 2) elem = 0; + id = script->add_variable(varname); + + 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; + } + // Push the 'pointer' so it's more flexible [Lance] - script->push_val(st->stack, C_NAME, reference_uid(script->add_str(varname), elem),NULL); + script->push_val(st->stack, C_NAME, reference_uid(id, elem),NULL); return true; } @@ -20604,7 +20601,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; @@ -21024,17 +21021,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) @@ -21087,6 +21093,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; @@ -21240,18 +21257,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; @@ -21377,12 +21383,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; } @@ -22444,18 +22450,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; } @@ -23560,7 +23600,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; } @@ -24628,6 +24668,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. * @@ -24789,14 +24903,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*"), @@ -24948,7 +25062,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"), @@ -25024,6 +25138,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 @@ -25204,6 +25319,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,""), @@ -25283,7 +25400,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?"), @@ -25355,6 +25472,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 @@ -25401,6 +25524,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); @@ -25670,6 +25795,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); @@ -25753,6 +25879,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 @@ -25935,6 +26082,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..9857badbe 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -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. @@ -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; } @@ -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); } @@ -8531,7 +8537,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. } @@ -12638,7 +12644,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; @@ -12932,7 +12938,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 +12969,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 + @@ -13197,9 +13203,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; @@ -13260,7 +13264,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; @@ -16133,7 +16137,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 +16220,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 +16628,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 +16764,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 +16795,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 +16890,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 +17605,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 +18506,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 +18617,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 +18993,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 +19002,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 +21598,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/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..81e25f033 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); @@ -4420,6 +4464,8 @@ typedef void (*HPMHOOK_pre_map_zone_change) (int *m, struct map_zone_data **zone 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 +5888,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 +6484,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 +6656,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 +7204,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); diff --git a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc index c4394d7f4..b0b2e7a32 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; @@ -3350,6 +3394,8 @@ struct { 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 +5012,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 +5178,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 +5720,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; @@ -6687,6 +6739,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 +6839,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 +7317,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 +7521,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 +7713,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 +7779,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 +7831,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 +7951,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 +8807,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 +8819,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 +9321,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; @@ -9901,6 +9997,8 @@ struct { 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 +11615,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 +11781,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 +12323,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; diff --git a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc index e5584cc43..508465411 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) }, @@ -1718,6 +1740,7 @@ struct HookingPointData HookingPoints[] = { { 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 +2566,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 +2652,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 +2926,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) }, diff --git a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc index f2ce1505c..fa80a68fd 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_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) { + 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,13 @@ 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) { + 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; + 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) { @@ -15772,17 +16033,121 @@ 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.storageList(sd, items, items_length); } - if (HPMHooks.count.HP_clif_storagelist_post > 0) { + 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; + 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_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_guildStorageList_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_clif_guildStorageList_pre[hIndex].func; + preHookFunc(&sd, &items, &items_length); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.clif.guildStorageList(sd, items, items_length); + } + 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_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); @@ -44129,6 +44702,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 +59263,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 +59282,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 +66761,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 +68965,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 +76421,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; 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); + } } /** |