diff options
author | Andrei Karas <akaras@inbox.ru> | 2016-03-20 17:15:36 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2016-03-20 17:39:01 +0300 |
commit | 3005870980cf3fe86d42a75b8303c208354b6573 (patch) | |
tree | 584a95d24382237bbf9bbe77da2e058f6e4c4119 /src/net/eathena | |
parent | cefe3bc037ccbf3f82b387d0484e9c81bed670f3 (diff) | |
download | manaverse-3005870980cf3fe86d42a75b8303c208354b6573.tar.gz manaverse-3005870980cf3fe86d42a75b8303c208354b6573.tar.bz2 manaverse-3005870980cf3fe86d42a75b8303c208354b6573.tar.xz manaverse-3005870980cf3fe86d42a75b8303c208354b6573.zip |
Impliment packets SMSG_FAMILY_ASK_FOR_CHILD.
Diffstat (limited to 'src/net/eathena')
-rw-r--r-- | src/net/eathena/familyhandler.cpp | 12 | ||||
-rw-r--r-- | src/net/eathena/familyrecv.cpp | 48 | ||||
-rw-r--r-- | src/net/eathena/familyrecv.h | 6 |
3 files changed, 53 insertions, 13 deletions
diff --git a/src/net/eathena/familyhandler.cpp b/src/net/eathena/familyhandler.cpp index 961d8877d..36297bb61 100644 --- a/src/net/eathena/familyhandler.cpp +++ b/src/net/eathena/familyhandler.cpp @@ -35,8 +35,8 @@ namespace EAthena FamilyHandler::FamilyHandler() { - FamilyRecv::mParent1 = 0; - FamilyRecv::mParent2 = 0; + FamilyRecv::mParent1 = BeingId_zero; + FamilyRecv::mParent2 = BeingId_zero; familyHandler = this; } @@ -53,9 +53,11 @@ void FamilyHandler::askForChild(const Being *const being) const void FamilyHandler::askForChildReply(const bool accept) const { createOutPacket(CMSG_FAMILY_ASK_FOR_CHILD_REPLY); - outMsg.writeInt32(FamilyRecv::mParent1, "parent1"); - outMsg.writeInt32(FamilyRecv::mParent2, "parent2"); - outMsg.writeInt32(accept ? 0: 1, "result"); + outMsg.writeBeingId(FamilyRecv::mParent1, "parent1"); + outMsg.writeBeingId(FamilyRecv::mParent2, "parent2"); + outMsg.writeInt32(accept ? 1 : 0, "result"); + FamilyRecv::mParent1 = BeingId_zero; + FamilyRecv::mParent2 = BeingId_zero; } } // namespace EAthena diff --git a/src/net/eathena/familyrecv.cpp b/src/net/eathena/familyrecv.cpp index 995c00a8b..7b0e9fa01 100644 --- a/src/net/eathena/familyrecv.cpp +++ b/src/net/eathena/familyrecv.cpp @@ -22,11 +22,21 @@ #include "logger.h" #include "notifymanager.h" +#include "party.h" #include "being/localplayer.h" #include "enums/resources/notifytypes.h" +#include "gui/widgets/createwidget.h" + +#include "gui/windows/confirmdialog.h" + +#include "utils/gettext.h" +#include "utils/stringutils.h" + +#include "listeners/requestadoptchildlistener.h" + #include "net/messagein.h" #include "debug.h" @@ -36,16 +46,42 @@ namespace EAthena namespace FamilyRecv { - int mParent1 = 0; - int mParent2 = 0; + ConfirmDialog *confirmDlg = nullptr; + RequestAdoptChildListener listener; + BeingId mParent1 = BeingId_zero; + BeingId mParent2 = BeingId_zero; } // namespace FamilyRecv void FamilyRecv::processAskForChild(Net::MessageIn &msg) { - UNIMPLIMENTEDPACKET; - msg.readInt32("account id who ask"); - msg.readInt32("acoount id for other parent"); - msg.readString(24, "name who ask"); + if (!localPlayer) + { + mParent1 = msg.readBeingId("account id who ask"); + mParent2 = msg.readBeingId("acoount id for other parent"); + msg.readString(24, "name who ask"); + return; + } + mParent1 = msg.readBeingId("account id who ask"); + mParent2 = msg.readBeingId("acoount id for other parent"); + const std::string name1 = msg.readString(24, "name who ask"); + const Party *const party = localPlayer->getParty(); + if (party) + { + const PartyMember *const member = party->getMember(mParent2); + if (member) + { + const std::string name2 = member->getName(); + CREATEWIDGETV(confirmDlg, ConfirmDialog, + // TRANSLATORS: adopt child message + _("Request parents"), + // TRANSLATORS: adopt child message + strprintf(_("Do you accept %s and %s as parents?"), + name1.c_str(), name2.c_str()), + SOUND_REQUEST, + false); + confirmDlg->addActionListener(&listener); + } + } } void FamilyRecv::processCallPartner(Net::MessageIn &msg) diff --git a/src/net/eathena/familyrecv.h b/src/net/eathena/familyrecv.h index 09953be6f..0ce18bf7f 100644 --- a/src/net/eathena/familyrecv.h +++ b/src/net/eathena/familyrecv.h @@ -23,6 +23,8 @@ #ifdef EATHENA_SUPPORT +#include "enums/simpletypes/beingid.h" + namespace Net { class MessageIn; @@ -32,8 +34,8 @@ namespace EAthena { namespace FamilyRecv { - extern int mParent1; - extern int mParent2; + extern BeingId mParent1; + extern BeingId mParent2; void processAskForChild(Net::MessageIn &msg); void processCallPartner(Net::MessageIn &msg); |