diff options
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/HPMHooking.c | 1 | ||||
-rw-r--r-- | src/plugins/HPMHooking/HPMHooking.Defs.inc | 26 | ||||
-rw-r--r-- | src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc | 12 | ||||
-rw-r--r-- | src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc | 3 | ||||
-rw-r--r-- | src/plugins/HPMHooking/HPMHooking_map.Hooks.inc | 120 | ||||
-rw-r--r-- | src/plugins/dbghelpplug.c | 2 |
6 files changed, 132 insertions, 32 deletions
diff --git a/src/plugins/HPMHooking.c b/src/plugins/HPMHooking.c index 8686a07be..e3b694c2b 100644 --- a/src/plugins/HPMHooking.c +++ b/src/plugins/HPMHooking.c @@ -92,6 +92,7 @@ PRAGMA_GCC5(GCC diagnostic ignored "-Wdiscarded-qualifiers") #include "map/map.h" #include "map/mapreg.h" #include "map/mercenary.h" +#include "map/messages.h" #include "map/mob.h" #include "map/npc.h" #include "map/party.h" diff --git a/src/plugins/HPMHooking/HPMHooking.Defs.inc b/src/plugins/HPMHooking/HPMHooking.Defs.inc index 90d6945c2..82d2c5563 100644 --- a/src/plugins/HPMHooking/HPMHooking.Defs.inc +++ b/src/plugins/HPMHooking/HPMHooking.Defs.inc @@ -1442,16 +1442,16 @@ typedef void (*HPMHOOK_pre_clif_messagecolor) (struct block_list **bl, uint32 *c typedef void (*HPMHOOK_post_clif_messagecolor) (struct block_list *bl, uint32 color, const char *msg); typedef void (*HPMHOOK_pre_clif_disp_overhead) (struct block_list **bl, const char **mes); typedef void (*HPMHOOK_post_clif_disp_overhead) (struct block_list *bl, const char *mes); -typedef void (*HPMHOOK_pre_clif_msgtable) (struct map_session_data **sd, unsigned short *msg_id); -typedef void (*HPMHOOK_post_clif_msgtable) (struct map_session_data *sd, unsigned short msg_id); -typedef void (*HPMHOOK_pre_clif_msgtable_num) (struct map_session_data **sd, unsigned short *msg_id, int *value); -typedef void (*HPMHOOK_post_clif_msgtable_num) (struct map_session_data *sd, unsigned short msg_id, int value); -typedef void (*HPMHOOK_pre_clif_msgtable_skill) (struct map_session_data **sd, uint16 *skill_id, int *msg_id); -typedef void (*HPMHOOK_post_clif_msgtable_skill) (struct map_session_data *sd, uint16 skill_id, int msg_id); -typedef void (*HPMHOOK_pre_clif_msgtable_str) (struct map_session_data **sd, uint16 *msg_id, const char **value); -typedef void (*HPMHOOK_post_clif_msgtable_str) (struct map_session_data *sd, uint16 msg_id, const char *value); -typedef void (*HPMHOOK_pre_clif_msgtable_color) (struct map_session_data **sd, uint16 *msg_id, uint32 *color); -typedef void (*HPMHOOK_post_clif_msgtable_color) (struct map_session_data *sd, uint16 msg_id, uint32 color); +typedef void (*HPMHOOK_pre_clif_msgtable) (struct map_session_data **sd, enum clif_messages *msg_id); +typedef void (*HPMHOOK_post_clif_msgtable) (struct map_session_data *sd, enum clif_messages msg_id); +typedef void (*HPMHOOK_pre_clif_msgtable_num) (struct map_session_data **sd, enum clif_messages *msg_id, int *value); +typedef void (*HPMHOOK_post_clif_msgtable_num) (struct map_session_data *sd, enum clif_messages msg_id, int value); +typedef void (*HPMHOOK_pre_clif_msgtable_skill) (struct map_session_data **sd, uint16 *skill_id, enum clif_messages *msg_id); +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_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); typedef void (*HPMHOOK_post_clif_message) (const int fd, const char *mes); typedef void (*HPMHOOK_pre_clif_messageln) (const int *fd, const char **mes); @@ -2268,6 +2268,8 @@ typedef void (*HPMHOOK_pre_clif_pMoveItem) (int *fd, struct map_session_data **s typedef void (*HPMHOOK_post_clif_pMoveItem) (int fd, struct map_session_data *sd); typedef void (*HPMHOOK_pre_clif_pDull) (int *fd, struct map_session_data **sd); typedef void (*HPMHOOK_post_clif_pDull) (int fd, struct map_session_data *sd); +typedef void (*HPMHOOK_pre_clif_p_cz_blocking_play_cancel) (int *fd, struct map_session_data **sd); +typedef void (*HPMHOOK_post_clif_p_cz_blocking_play_cancel) (int fd, struct map_session_data *sd); typedef void (*HPMHOOK_pre_clif_pBGQueueRegister) (int *fd, struct map_session_data **sd); typedef void (*HPMHOOK_post_clif_pBGQueueRegister) (int fd, struct map_session_data *sd); typedef void (*HPMHOOK_pre_clif_pBGQueueCheckState) (int *fd, struct map_session_data **sd); @@ -2426,6 +2428,10 @@ typedef void (*HPMHOOK_pre_clif_pAttendanceRewardRequest) (int *fd, struct map_s typedef void (*HPMHOOK_post_clif_pAttendanceRewardRequest) (int fd, struct map_session_data *sd); typedef void (*HPMHOOK_pre_clif_ui_action) (struct map_session_data **sd, int32 *UIType, int32 *data); typedef void (*HPMHOOK_post_clif_ui_action) (struct map_session_data *sd, int32 UIType, int32 data); +typedef void (*HPMHOOK_pre_clif_pPrivateAirshipRequest) (int *fd, struct map_session_data **sd); +typedef void (*HPMHOOK_post_clif_pPrivateAirshipRequest) (int fd, struct map_session_data *sd); +typedef void (*HPMHOOK_pre_clif_PrivateAirshipResponse) (struct map_session_data **sd, uint32 *flag); +typedef void (*HPMHOOK_post_clif_PrivateAirshipResponse) (struct map_session_data *sd, uint32 flag); #endif // MAP_CLIF_H #ifdef COMMON_CORE_H /* cmdline */ typedef void (*HPMHOOK_pre_cmdline_init) (void); diff --git a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc index d07c83187..747ec357e 100644 --- a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc +++ b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc @@ -1864,6 +1864,8 @@ struct { struct HPMHookPoint *HP_clif_pMoveItem_post; struct HPMHookPoint *HP_clif_pDull_pre; struct HPMHookPoint *HP_clif_pDull_post; + struct HPMHookPoint *HP_clif_p_cz_blocking_play_cancel_pre; + struct HPMHookPoint *HP_clif_p_cz_blocking_play_cancel_post; struct HPMHookPoint *HP_clif_pBGQueueRegister_pre; struct HPMHookPoint *HP_clif_pBGQueueRegister_post; struct HPMHookPoint *HP_clif_pBGQueueCheckState_pre; @@ -2022,6 +2024,10 @@ struct { struct HPMHookPoint *HP_clif_pAttendanceRewardRequest_post; struct HPMHookPoint *HP_clif_ui_action_pre; struct HPMHookPoint *HP_clif_ui_action_post; + struct HPMHookPoint *HP_clif_pPrivateAirshipRequest_pre; + struct HPMHookPoint *HP_clif_pPrivateAirshipRequest_post; + struct HPMHookPoint *HP_clif_PrivateAirshipResponse_pre; + struct HPMHookPoint *HP_clif_PrivateAirshipResponse_post; struct HPMHookPoint *HP_cmdline_init_pre; struct HPMHookPoint *HP_cmdline_init_post; struct HPMHookPoint *HP_cmdline_final_pre; @@ -8203,6 +8209,8 @@ struct { int HP_clif_pMoveItem_post; int HP_clif_pDull_pre; int HP_clif_pDull_post; + int HP_clif_p_cz_blocking_play_cancel_pre; + int HP_clif_p_cz_blocking_play_cancel_post; int HP_clif_pBGQueueRegister_pre; int HP_clif_pBGQueueRegister_post; int HP_clif_pBGQueueCheckState_pre; @@ -8361,6 +8369,10 @@ struct { int HP_clif_pAttendanceRewardRequest_post; int HP_clif_ui_action_pre; int HP_clif_ui_action_post; + int HP_clif_pPrivateAirshipRequest_pre; + int HP_clif_pPrivateAirshipRequest_post; + int HP_clif_PrivateAirshipResponse_pre; + int HP_clif_PrivateAirshipResponse_post; int HP_cmdline_init_pre; int HP_cmdline_init_post; int HP_cmdline_final_pre; diff --git a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc index 488792200..06c1b2c88 100644 --- a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc +++ b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc @@ -955,6 +955,7 @@ struct HookingPointData HookingPoints[] = { { HP_POP(clif->pSkillSelectMenu, HP_clif_pSkillSelectMenu) }, { HP_POP(clif->pMoveItem, HP_clif_pMoveItem) }, { HP_POP(clif->pDull, HP_clif_pDull) }, + { HP_POP(clif->p_cz_blocking_play_cancel, HP_clif_p_cz_blocking_play_cancel) }, { HP_POP(clif->pBGQueueRegister, HP_clif_pBGQueueRegister) }, { HP_POP(clif->pBGQueueCheckState, HP_clif_pBGQueueCheckState) }, { HP_POP(clif->pBGQueueRevokeReq, HP_clif_pBGQueueRevokeReq) }, @@ -1034,6 +1035,8 @@ struct HookingPointData HookingPoints[] = { { HP_POP(clif->open_ui, HP_clif_open_ui) }, { HP_POP(clif->pAttendanceRewardRequest, HP_clif_pAttendanceRewardRequest) }, { HP_POP(clif->ui_action, HP_clif_ui_action) }, + { HP_POP(clif->pPrivateAirshipRequest, HP_clif_pPrivateAirshipRequest) }, + { HP_POP(clif->PrivateAirshipResponse, HP_clif_PrivateAirshipResponse) }, /* cmdline_interface */ { HP_POP(cmdline->init, HP_cmdline_init) }, { HP_POP(cmdline->final, HP_cmdline_final) }, diff --git a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc index 718aa77d7..cdb1df7f2 100644 --- a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc +++ b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc @@ -13518,10 +13518,10 @@ void HP_clif_disp_overhead(struct block_list *bl, const char *mes) { } return; } -void HP_clif_msgtable(struct map_session_data *sd, unsigned short msg_id) { +void HP_clif_msgtable(struct map_session_data *sd, enum clif_messages msg_id) { int hIndex = 0; if (HPMHooks.count.HP_clif_msgtable_pre > 0) { - void (*preHookFunc) (struct map_session_data **sd, unsigned short *msg_id); + void (*preHookFunc) (struct map_session_data **sd, enum clif_messages *msg_id); *HPMforce_return = false; for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_msgtable_pre; hIndex++) { preHookFunc = HPMHooks.list.HP_clif_msgtable_pre[hIndex].func; @@ -13536,7 +13536,7 @@ void HP_clif_msgtable(struct map_session_data *sd, unsigned short msg_id) { HPMHooks.source.clif.msgtable(sd, msg_id); } if (HPMHooks.count.HP_clif_msgtable_post > 0) { - void (*postHookFunc) (struct map_session_data *sd, unsigned short msg_id); + void (*postHookFunc) (struct map_session_data *sd, enum clif_messages msg_id); for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_msgtable_post; hIndex++) { postHookFunc = HPMHooks.list.HP_clif_msgtable_post[hIndex].func; postHookFunc(sd, msg_id); @@ -13544,10 +13544,10 @@ void HP_clif_msgtable(struct map_session_data *sd, unsigned short msg_id) { } return; } -void HP_clif_msgtable_num(struct map_session_data *sd, unsigned short msg_id, int value) { +void HP_clif_msgtable_num(struct map_session_data *sd, enum clif_messages msg_id, int value) { int hIndex = 0; if (HPMHooks.count.HP_clif_msgtable_num_pre > 0) { - void (*preHookFunc) (struct map_session_data **sd, unsigned short *msg_id, int *value); + void (*preHookFunc) (struct map_session_data **sd, enum clif_messages *msg_id, int *value); *HPMforce_return = false; for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_msgtable_num_pre; hIndex++) { preHookFunc = HPMHooks.list.HP_clif_msgtable_num_pre[hIndex].func; @@ -13562,7 +13562,7 @@ void HP_clif_msgtable_num(struct map_session_data *sd, unsigned short msg_id, in HPMHooks.source.clif.msgtable_num(sd, msg_id, value); } if (HPMHooks.count.HP_clif_msgtable_num_post > 0) { - void (*postHookFunc) (struct map_session_data *sd, unsigned short msg_id, int value); + void (*postHookFunc) (struct map_session_data *sd, enum clif_messages msg_id, int value); for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_msgtable_num_post; hIndex++) { postHookFunc = HPMHooks.list.HP_clif_msgtable_num_post[hIndex].func; postHookFunc(sd, msg_id, value); @@ -13570,10 +13570,10 @@ void HP_clif_msgtable_num(struct map_session_data *sd, unsigned short msg_id, in } return; } -void HP_clif_msgtable_skill(struct map_session_data *sd, uint16 skill_id, int msg_id) { +void HP_clif_msgtable_skill(struct map_session_data *sd, uint16 skill_id, enum clif_messages msg_id) { int hIndex = 0; if (HPMHooks.count.HP_clif_msgtable_skill_pre > 0) { - void (*preHookFunc) (struct map_session_data **sd, uint16 *skill_id, int *msg_id); + void (*preHookFunc) (struct map_session_data **sd, uint16 *skill_id, enum clif_messages *msg_id); *HPMforce_return = false; for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_msgtable_skill_pre; hIndex++) { preHookFunc = HPMHooks.list.HP_clif_msgtable_skill_pre[hIndex].func; @@ -13588,7 +13588,7 @@ void HP_clif_msgtable_skill(struct map_session_data *sd, uint16 skill_id, int ms HPMHooks.source.clif.msgtable_skill(sd, skill_id, msg_id); } if (HPMHooks.count.HP_clif_msgtable_skill_post > 0) { - void (*postHookFunc) (struct map_session_data *sd, uint16 skill_id, int msg_id); + void (*postHookFunc) (struct map_session_data *sd, uint16 skill_id, enum clif_messages msg_id); for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_msgtable_skill_post; hIndex++) { postHookFunc = HPMHooks.list.HP_clif_msgtable_skill_post[hIndex].func; postHookFunc(sd, skill_id, msg_id); @@ -13596,14 +13596,14 @@ void HP_clif_msgtable_skill(struct map_session_data *sd, uint16 skill_id, int ms } return; } -void HP_clif_msgtable_str(struct map_session_data *sd, uint16 msg_id, const char *value) { +void HP_clif_msgtable_str(struct map_session_data *sd, enum clif_messages p1, const char *value) { int hIndex = 0; if (HPMHooks.count.HP_clif_msgtable_str_pre > 0) { - void (*preHookFunc) (struct map_session_data **sd, uint16 *msg_id, const char **value); + void (*preHookFunc) (struct map_session_data **sd, enum clif_messages *p1, const char **value); *HPMforce_return = false; for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_msgtable_str_pre; hIndex++) { preHookFunc = HPMHooks.list.HP_clif_msgtable_str_pre[hIndex].func; - preHookFunc(&sd, &msg_id, &value); + preHookFunc(&sd, &p1, &value); } if (*HPMforce_return) { *HPMforce_return = false; @@ -13611,25 +13611,25 @@ void HP_clif_msgtable_str(struct map_session_data *sd, uint16 msg_id, const char } } { - HPMHooks.source.clif.msgtable_str(sd, msg_id, value); + HPMHooks.source.clif.msgtable_str(sd, p1, value); } if (HPMHooks.count.HP_clif_msgtable_str_post > 0) { - void (*postHookFunc) (struct map_session_data *sd, uint16 msg_id, const char *value); + void (*postHookFunc) (struct map_session_data *sd, enum clif_messages p1, const char *value); for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_msgtable_str_post; hIndex++) { postHookFunc = HPMHooks.list.HP_clif_msgtable_str_post[hIndex].func; - postHookFunc(sd, msg_id, value); + postHookFunc(sd, p1, value); } } return; } -void HP_clif_msgtable_color(struct map_session_data *sd, uint16 msg_id, uint32 color) { +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) { - void (*preHookFunc) (struct map_session_data **sd, uint16 *msg_id, uint32 *color); + void (*preHookFunc) (struct map_session_data **sd, enum clif_messages *p1, uint32 *color); *HPMforce_return = false; for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_msgtable_color_pre; hIndex++) { preHookFunc = HPMHooks.list.HP_clif_msgtable_color_pre[hIndex].func; - preHookFunc(&sd, &msg_id, &color); + preHookFunc(&sd, &p1, &color); } if (*HPMforce_return) { *HPMforce_return = false; @@ -13637,13 +13637,13 @@ void HP_clif_msgtable_color(struct map_session_data *sd, uint16 msg_id, uint32 c } } { - HPMHooks.source.clif.msgtable_color(sd, msg_id, color); + HPMHooks.source.clif.msgtable_color(sd, p1, color); } if (HPMHooks.count.HP_clif_msgtable_color_post > 0) { - void (*postHookFunc) (struct map_session_data *sd, uint16 msg_id, uint32 color); + void (*postHookFunc) (struct map_session_data *sd, enum clif_messages p1, uint32 color); for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_msgtable_color_post; hIndex++) { postHookFunc = HPMHooks.list.HP_clif_msgtable_color_post[hIndex].func; - postHookFunc(sd, msg_id, color); + postHookFunc(sd, p1, color); } } return; @@ -24274,6 +24274,32 @@ void HP_clif_pDull(int fd, struct map_session_data *sd) { } return; } +void HP_clif_p_cz_blocking_play_cancel(int fd, struct map_session_data *sd) { + int hIndex = 0; + if (HPMHooks.count.HP_clif_p_cz_blocking_play_cancel_pre > 0) { + void (*preHookFunc) (int *fd, struct map_session_data **sd); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_p_cz_blocking_play_cancel_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_clif_p_cz_blocking_play_cancel_pre[hIndex].func; + preHookFunc(&fd, &sd); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.clif.p_cz_blocking_play_cancel(fd, sd); + } + if (HPMHooks.count.HP_clif_p_cz_blocking_play_cancel_post > 0) { + void (*postHookFunc) (int fd, struct map_session_data *sd); + for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_p_cz_blocking_play_cancel_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_clif_p_cz_blocking_play_cancel_post[hIndex].func; + postHookFunc(fd, sd); + } + } + return; +} void HP_clif_pBGQueueRegister(int fd, struct map_session_data *sd) { int hIndex = 0; if (HPMHooks.count.HP_clif_pBGQueueRegister_pre > 0) { @@ -26334,6 +26360,58 @@ void HP_clif_ui_action(struct map_session_data *sd, int32 UIType, int32 data) { } return; } +void HP_clif_pPrivateAirshipRequest(int fd, struct map_session_data *sd) { + int hIndex = 0; + if (HPMHooks.count.HP_clif_pPrivateAirshipRequest_pre > 0) { + void (*preHookFunc) (int *fd, struct map_session_data **sd); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pPrivateAirshipRequest_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_clif_pPrivateAirshipRequest_pre[hIndex].func; + preHookFunc(&fd, &sd); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.clif.pPrivateAirshipRequest(fd, sd); + } + if (HPMHooks.count.HP_clif_pPrivateAirshipRequest_post > 0) { + void (*postHookFunc) (int fd, struct map_session_data *sd); + for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pPrivateAirshipRequest_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_clif_pPrivateAirshipRequest_post[hIndex].func; + postHookFunc(fd, sd); + } + } + return; +} +void HP_clif_PrivateAirshipResponse(struct map_session_data *sd, uint32 flag) { + int hIndex = 0; + if (HPMHooks.count.HP_clif_PrivateAirshipResponse_pre > 0) { + void (*preHookFunc) (struct map_session_data **sd, uint32 *flag); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_PrivateAirshipResponse_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_clif_PrivateAirshipResponse_pre[hIndex].func; + preHookFunc(&sd, &flag); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.clif.PrivateAirshipResponse(sd, flag); + } + if (HPMHooks.count.HP_clif_PrivateAirshipResponse_post > 0) { + void (*postHookFunc) (struct map_session_data *sd, uint32 flag); + for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_PrivateAirshipResponse_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_clif_PrivateAirshipResponse_post[hIndex].func; + postHookFunc(sd, flag); + } + } + return; +} /* cmdline_interface */ void HP_cmdline_init(void) { int hIndex = 0; diff --git a/src/plugins/dbghelpplug.c b/src/plugins/dbghelpplug.c index 78517419f..b68bb1efc 100644 --- a/src/plugins/dbghelpplug.c +++ b/src/plugins/dbghelpplug.c @@ -2,7 +2,7 @@ * This file is part of Hercules. * http://herc.ws - http://github.com/HerculesWS/Hercules * - * Copyright (C) 2012-2016 Hercules Dev Team + * Copyright (C) 2012-2018 Hercules Dev Team * Copyright (C) Athena Dev Teams * * Hercules is free software: you can redistribute it and/or modify |