summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2019-09-14 18:43:21 -0300
committerJesusaves <cpntb1@ymail.com>2019-09-14 18:43:21 -0300
commita1e81506f9bdac931755e0ded2fbcf4f3d68220c (patch)
tree42ab71f2f343bb9d2846e86c9b0ab4a5589dd828 /src
parentab958499730abfe9318f1312effb65775efafd89 (diff)
parent4d08f967636f9aae862e6d3016a6d5faf0817542 (diff)
downloadevol-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.am4
-rw-r--r--src/elogin/init.c7
-rw-r--r--src/elogin/parse.c4
-rw-r--r--src/emap/clif.c100
-rw-r--r--src/emap/clif.h4
-rw-r--r--src/emap/init.c6
-rw-r--r--src/emap/script_buildins.c12
-rw-r--r--src/emap/send.c2
-rw-r--r--src/emap/unit.c1
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))
{