diff options
author | Jesusaves <cpntb1@ymail.com> | 2019-09-14 18:43:21 -0300 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2019-09-14 18:43:21 -0300 |
commit | a1e81506f9bdac931755e0ded2fbcf4f3d68220c (patch) | |
tree | 42ab71f2f343bb9d2846e86c9b0ab4a5589dd828 /src | |
parent | ab958499730abfe9318f1312effb65775efafd89 (diff) | |
parent | 4d08f967636f9aae862e6d3016a6d5faf0817542 (diff) | |
download | evol-hercules-a1e81506f9bdac931755e0ded2fbcf4f3d68220c.tar.gz evol-hercules-a1e81506f9bdac931755e0ded2fbcf4f3d68220c.tar.bz2 evol-hercules-a1e81506f9bdac931755e0ded2fbcf4f3d68220c.tar.xz evol-hercules-a1e81506f9bdac931755e0ded2fbcf4f3d68220c.zip |
Merge branch 'master' into tmw2
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 4 | ||||
-rw-r--r-- | src/elogin/init.c | 7 | ||||
-rw-r--r-- | src/elogin/parse.c | 4 | ||||
-rw-r--r-- | src/emap/clif.c | 100 | ||||
-rw-r--r-- | src/emap/clif.h | 4 | ||||
-rw-r--r-- | src/emap/init.c | 6 | ||||
-rw-r--r-- | src/emap/script_buildins.c | 12 | ||||
-rw-r--r-- | src/emap/send.c | 2 | ||||
-rw-r--r-- | src/emap/unit.c | 1 |
9 files changed, 126 insertions, 14 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index d17cc8a..8c9a8d5 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -138,8 +138,8 @@ MAP_SRC = emap/atcommand.c \ SHARED_CFLAGS = ${CFLAGS} -O3 -pipe -ffast-math -std=c11 -Wall -Wextra -Wno-sign-compare -Wno-unused -fno-omit-frame-pointer \ -DPCRE_SUPPORT -I../../.. -I../../../../3rdparty \ - -DPACKETVER=20150513 \ - -DevolPacketOffset=0 + -DPACKETVER=20170517 \ + -DevolPacketOffset=0x100 SHARED_LDFLAGS = -lm -avoid-version -Wl,--no-undefined if ENABLE_STATIC_BUILD diff --git a/src/elogin/init.c b/src/elogin/init.c index 5f17a46..52a95bf 100644 --- a/src/elogin/init.c +++ b/src/elogin/init.c @@ -35,11 +35,6 @@ HPExport struct hplugin_info pinfo = HPM_VERSION }; -#define addHookPrePriv(ifname, type, funcname, hook) ( \ - (void)((HPMHOOK_pre_ ## type ## _ ## funcname)0 == (hook)), \ - HPMi->hooking->AddHook(HOOK_TYPE_PRE, #ifname "->" #funcname, (hook), HPMi->pid) \ - ) - HPExport void plugin_init (void) { interfaces_init_common(); @@ -53,7 +48,7 @@ HPExport void plugin_init (void) addHookPre(login, client_login, elogin_client_login_pre); addHookPre(login, check_password, elogin_check_password_pre); - addHookPrePriv(lclif->p, PRIV__lclif, parse_CA_CONNECT_INFO_CHANGED, elogin_parse_ping_pre); + addHookPrePriv(lclif, parse_CA_CONNECT_INFO_CHANGED, elogin_parse_ping_pre); addHookPost(login, client_login, elogin_client_login_post); } diff --git a/src/elogin/parse.c b/src/elogin/parse.c index fffd532..9156cb4 100644 --- a/src/elogin/parse.c +++ b/src/elogin/parse.c @@ -35,7 +35,7 @@ void login_parse_version(int fd) clientVersion = RFIFOL(fd, 2); // check for minimal supported version - if (clientVersion < 21) + if (clientVersion < 23) { lclif->login_error(fd, 5); return; @@ -60,7 +60,7 @@ bool elogin_client_login_pre(int *fdPtr, safestrncpy(username, RFIFOP(fd, 6), NAME_LENGTH); int len = (int)safestrnlen(username, NAME_LENGTH); // check for minimal supported version - if (clientVersion < 21) + if (clientVersion < 23) { lclif->login_error(fd, 5); hookStop(); diff --git a/src/emap/clif.c b/src/emap/clif.c index 53d9a29..9bdb6b8 100644 --- a/src/emap/clif.c +++ b/src/emap/clif.c @@ -529,6 +529,106 @@ void eclif_charnameupdate_pre(struct map_session_data **ssdPtr) } } +// clientVersion < 26 +void eclif_homname_ack_pre(int *fdPtr, struct block_list **blPtr) +{ + struct block_list *bl = *blPtr; + int fd = *fdPtr; + struct SessionExt *data = session_get(fd); + if (!data) + return; + if (data->clientVersion >= 26) + { + return; + } + + nullpo_retv(bl); + Assert_retv(bl->type == BL_HOM); + + struct packet_reqname_ack packet; + memset(&packet, 0, sizeof(packet)); + packet.packet_id = reqName; + packet.gid = bl->id; + memcpy(packet.name, BL_UCCAST(BL_HOM, bl)->homunculus.name, NAME_LENGTH); + clif->send_selforarea(fd, bl, &packet, sizeof(struct packet_reqname_ack)); + hookStop(); +} + +// clientVersion < 26 +void eclif_mername_ack_pre(int *fdPtr, struct block_list **blPtr) +{ + struct block_list *bl = *blPtr; + int fd = *fdPtr; + struct SessionExt *data = session_get(fd); + if (!data) + return; + if (data->clientVersion >= 26) + { + return; + } + + nullpo_retv(bl); + Assert_retv(bl->type == BL_MER); + + struct packet_reqname_ack packet; + memset(&packet, 0, sizeof(packet)); + packet.packet_id = reqName; + packet.gid = bl->id; + memcpy(packet.name, BL_UCCAST(BL_MER, bl)->db->name, NAME_LENGTH); + clif->send_selforarea(fd, bl, &packet, sizeof(struct packet_reqname_ack)); + hookStop(); +} + +// clientVersion < 26 +void eclif_petname_ack_pre(int *fdPtr, struct block_list **blPtr) +{ + struct block_list *bl = *blPtr; + int fd = *fdPtr; + struct SessionExt *data = session_get(fd); + if (!data) + return; + if (data->clientVersion >= 26) + { + return; + } + + nullpo_retv(bl); + Assert_retv(bl->type == BL_PET); + + struct packet_reqname_ack packet; + memset(&packet, 0, sizeof(packet)); + packet.packet_id = reqName; + packet.gid = bl->id; + memcpy(packet.name, BL_UCCAST(BL_PET, bl)->pet.name, NAME_LENGTH); + clif->send_selforarea(fd, bl, &packet, sizeof(struct packet_reqname_ack)); + hookStop(); +} + +// clientVersion < 26 +void eclif_elemname_ack_pre(int *fdPtr, struct block_list **blPtr) +{ + struct block_list *bl = *blPtr; + int fd = *fdPtr; + struct SessionExt *data = session_get(fd); + if (!data) + return; + if (data->clientVersion >= 26) + { + return; + } + + nullpo_retv(bl); + Assert_retv(bl->type == BL_ELEM); + + struct packet_reqname_ack packet; + memset(&packet, 0, sizeof(packet)); + packet.packet_id = reqName; + packet.gid = bl->id; + memcpy(packet.name, BL_UCCAST(BL_ELEM, bl)->db->name, NAME_LENGTH); + clif->send_selforarea(fd, bl, &packet, sizeof(struct packet_reqname_ack)); + hookStop(); +} + #define equipPos(index, field) \ equip = sd->equip_index[index]; \ if (equip >= 0) \ diff --git a/src/emap/clif.h b/src/emap/clif.h index 1c602d8..b4f384d 100644 --- a/src/emap/clif.h +++ b/src/emap/clif.h @@ -13,6 +13,10 @@ void eclif_blname_ack_pre(int *fdPtr, struct block_list **blPtr); void eclif_blname_ack_pre_sub(int *fdPtr, struct block_list **blPtr); +void eclif_homname_ack_pre(int *fdPtr, struct block_list **blPtr); +void eclif_mername_ack_pre(int *fdPtr, struct block_list **blPtr); +void eclif_petname_ack_pre(int *fdPtr, struct block_list **blPtr); +void eclif_elemname_ack_pre(int *fdPtr, struct block_list **blPtr); void eclif_charnameupdate_pre(struct map_session_data **ssdPtr); void eclif_getareachar_unit_post(TBL_PC *sd, struct block_list *bl); diff --git a/src/emap/init.c b/src/emap/init.c index de27f2c..eb06678 100644 --- a/src/emap/init.c +++ b/src/emap/init.c @@ -40,6 +40,7 @@ #include "map/party.h" #include "map/pet.h" #include "map/pc.h" +#include "map/refine.h" #include "map/script.h" #include "map/storage.h" #include "map/trade.h" @@ -306,6 +307,11 @@ HPExport void plugin_init (void) addHookPre(clif, quest_send_list, eclif_quest_send_list_pre); addHookPre(clif, quest_add, eclif_quest_add_pre); addHookPre(clif, blname_ack, eclif_blname_ack_pre); + addHookPre(clif, homname_ack, eclif_homname_ack_pre); + addHookPre(clif, mername_ack, eclif_mername_ack_pre); + addHookPre(clif, petname_ack, eclif_petname_ack_pre); + addHookPre(clif, elemname_ack, eclif_elemname_ack_pre); + addHookPre(clif, charnameupdate, eclif_charnameupdate_pre); addHookPre(clif, getareachar_item, eclif_getareachar_item_pre); addHookPre(clif, dropflooritem, eclif_dropflooritem_pre); diff --git a/src/emap/script_buildins.c b/src/emap/script_buildins.c index de5ba06..9430eb7 100644 --- a/src/emap/script_buildins.c +++ b/src/emap/script_buildins.c @@ -20,6 +20,7 @@ #include "map/mapreg.h" #include "map/npc.h" #include "map/pc.h" +#include "map/refine.h" #include "map/script.h" #include "map/quest.h" @@ -1321,7 +1322,8 @@ BUILDIN(failedRemoveCardsIndex) if (sd->status.inventory[i].card[c] && itemdb_type(sd->status.inventory[i].card[c]) == IT_CARD) { cardflag = 1; - sd->status.inventory[i].card[c] = 0; + if (typefail == 1) + sd->status.inventory[i].card[c] = 0; if (typefail == 2) { // add cards to inventory, clear @@ -1507,6 +1509,12 @@ BUILDIN(npcWalkTo) if (nd) { unit->bl2ud2(&nd->bl); // ensure nd->ud is safe to edit + if (nd->ud == NULL) + { + ShowWarning("buildin_npcwalkto: floating NPC don't have unit data.\n"); + return false; + } + if (!nd->status.hp) { status_calc_npc(nd, SCO_FIRST); @@ -1516,7 +1524,7 @@ BUILDIN(npcWalkTo) status_calc_npc(nd, SCO_NONE); } nd->vd.dead_sit = 0; - script_pushint(st, unit->walktoxy(&nd->bl,x,y,0)); + script_pushint(st, unit->walktoxy(&nd->bl, x, y, 0)); return true; } else diff --git a/src/emap/send.c b/src/emap/send.c index 82ba452..08c57b0 100644 --- a/src/emap/send.c +++ b/src/emap/send.c @@ -178,8 +178,6 @@ void send_pc_own_flags(struct block_list* bl) struct SessionExt *data = session_get_bysd(sd); if (!data) return; - if (data->clientVersion < 22) - return; const int fd = sd->fd; WFIFOHEAD(fd, 8); diff --git a/src/emap/unit.c b/src/emap/unit.c index 4797d0d..e3559ba 100644 --- a/src/emap/unit.c +++ b/src/emap/unit.c @@ -64,6 +64,7 @@ int eunit_can_move_pre(struct block_list **blPtr) if (sd && ( sd->state.vending || + sd->state.prevend || sd->state.buyingstore || sd->block_action.move)) { |