summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/net/eathena/beingrecv.cpp60
-rw-r--r--src/net/eathena/beingrecv.h1
-rw-r--r--src/net/eathena/packetsin.inc18
3 files changed, 79 insertions, 0 deletions
diff --git a/src/net/eathena/beingrecv.cpp b/src/net/eathena/beingrecv.cpp
index 981dd9ef1..1961be9a7 100644
--- a/src/net/eathena/beingrecv.cpp
+++ b/src/net/eathena/beingrecv.cpp
@@ -34,6 +34,8 @@
#include "enums/resources/notifytypes.h"
+#include "enums/resources/map/mapitemtype.h"
+
#include "particle/particleengine.h"
#include "input/keyboardconfig.h"
@@ -1674,6 +1676,64 @@ void BeingRecv::processBeingResurrect(Net::MessageIn &msg)
BLOCK_END("BeingRecv::processBeingResurrect")
}
+void BeingRecv::processNameResponseTitle(Net::MessageIn &msg)
+{
+ if (actorManager == nullptr)
+ return;
+
+ const BeingId beingId = msg.readBeingId("being id");
+ msg.readInt32("group id"); // +++ can be used for icon or other
+ const std::string name = msg.readString(24, "name");
+ msg.readString(24, "title"); // +++ can be used for second name part
+ Being *const dstBeing = actorManager->findBeing(beingId);
+
+ actorManager->updateNameId(name, beingId);
+
+ if (dstBeing != nullptr)
+ {
+ if (beingId == localPlayer->getId())
+ {
+ localPlayer->pingResponse();
+ }
+ else
+ {
+ if (dstBeing->getType() != ActorType::Portal)
+ {
+ dstBeing->setName(name);
+ }
+ else if (viewport != nullptr)
+ {
+ Map *const map = viewport->getMap();
+ if (map != nullptr)
+ {
+ map->addPortalTile(name, MapItemType::PORTAL,
+ dstBeing->getTileX(), dstBeing->getTileY());
+ }
+ }
+ dstBeing->updateGuild();
+ dstBeing->addToCache();
+
+ if (dstBeing->getType() == ActorType::Player)
+ dstBeing->updateColors();
+
+ if (localPlayer != nullptr)
+ {
+ const Party *const party = localPlayer->getParty();
+ if (party != nullptr && party->isMember(dstBeing->getId()))
+ {
+ PartyMember *const member = party->getMember(
+ dstBeing->getId());
+
+ if (member != nullptr)
+ member->setName(dstBeing->getName());
+ }
+ localPlayer->checkNewName(dstBeing);
+ }
+ return;
+ }
+ }
+}
+
void BeingRecv::processPlayerGuilPartyInfo(Net::MessageIn &msg)
{
BLOCK_START("BeingRecv::processPlayerGuilPartyInfo")
diff --git a/src/net/eathena/beingrecv.h b/src/net/eathena/beingrecv.h
index d2e0e5929..bab20c09b 100644
--- a/src/net/eathena/beingrecv.h
+++ b/src/net/eathena/beingrecv.h
@@ -83,6 +83,7 @@ namespace EAthena
void processSkillEntry(Net::MessageIn &msg);
void processPlayerStatusChange(Net::MessageIn &msg);
void processBeingResurrect(Net::MessageIn &msg);
+ void processNameResponseTitle(Net::MessageIn &msg);
void processPlayerGuilPartyInfo(Net::MessageIn &msg);
void processPlayerGuilPartyInfo2(Net::MessageIn &msg);
void processBeingRemoveSkill(Net::MessageIn &msg);
diff --git a/src/net/eathena/packetsin.inc b/src/net/eathena/packetsin.inc
index cda7ec635..a701ea896 100644
--- a/src/net/eathena/packetsin.inc
+++ b/src/net/eathena/packetsin.inc
@@ -1320,6 +1320,18 @@ if (packetVersionZero >= 20171123)
packet(SMSG_LOGIN_OTP, 0x0ae3, -1, &LoginRecv::processLoginOtp2, 20171123);
}
+// 20171129 re
+if (packetVersionRe >= 20171129)
+{
+ packet(SMSG_NAME_RESPONSE_TITLE, 0x0adf, 58, &BeingRecv::processNameResponseTitle, 20171129);
+}
+
+// 20171130 zero
+if (packetVersionZero >= 20171130)
+{
+ packet(SMSG_NAME_RESPONSE_TITLE, 0x0adf, 58, &BeingRecv::processNameResponseTitle, 20171130);
+}
+
// 20171207
if (packetVersion >= 20171207)
{
@@ -1363,6 +1375,12 @@ if (packetVersionZero >= 20180131)
packet(SMSG_CHAR_PINCODE_STATUS2, 0x0ae9, 13, &CharServerRecv::processPincodeStatus2, 20180124);
}
+// 20180207 main
+if (packetVersionMain >= 20180207)
+{
+ packet(SMSG_NAME_RESPONSE_TITLE, 0x0adf, 58, &BeingRecv::processNameResponseTitle, 20180207);
+}
+
// re 20180221
if (packetVersionRe >= 20180221)
{