1 /*
2 * The ManaPlus Client
3 * Copyright (C) 2004-2009 The Mana World Development Team
4 * Copyright (C) 2009-2010 The Mana Developers
5 * Copyright (C) 2011-2019 The ManaPlus Developers
6 * Copyright (C) 2019-2021 Andrei Karas
7 *
8 * This file is part of The ManaPlus Client.
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program. If not, see <http://www.gnu.org/licenses/>.
22 */
23
24 #include "net/eathena/beinghandler.h"
25
26 #include "net/eathena/messageout.h"
27 #include "net/eathena/protocolout.h"
28 #include "net/eathena/sprite.h"
29
30 #include "debug.h"
31
32 extern int packetVersion;
33 extern int serverVersion;
34
35 namespace EAthena
36 {
37
BeingHandler()38 BeingHandler::BeingHandler() :
39 Ea::BeingHandler()
40 {
41 beingHandler = this;
42 }
43
~BeingHandler()44 BeingHandler::~BeingHandler()
45 {
46 beingHandler = nullptr;
47 }
48
requestNameById(const BeingId id) const49 void BeingHandler::requestNameById(const BeingId id) const
50 {
51 createOutPacket(CMSG_NAME_REQUEST);
52 if (packetVersion >= 20080827 && packetVersion < 20101124)
53 {
54 outMsg.writeInt32(0, "unused");
55 outMsg.writeInt32(0, "unused");
56 }
57 outMsg.writeBeingId(id, "being id");
58 }
59
undress(Being * const being) const60 void BeingHandler::undress(Being *const being) const
61 {
62 if (being == nullptr)
63 return;
64 being->unSetSprite(SPRITE_WEAPON);
65 being->unSetSprite(SPRITE_HEAD_BOTTOM);
66 being->unSetSprite(SPRITE_HEAD_TOP);
67 being->unSetSprite(SPRITE_HEAD_MID);
68 being->unSetSprite(SPRITE_CLOTHES_COLOR);
69 being->unSetSprite(SPRITE_SHIELD);
70 being->unSetSprite(SPRITE_FLOOR);
71 being->unSetSprite(SPRITE_ROBE);
72 being->unSetSprite(SPRITE_EVOL2);
73 being->unSetSprite(SPRITE_EVOL3);
74 being->unSetSprite(SPRITE_EVOL4);
75 being->unSetSprite(SPRITE_EVOL5);
76 being->unSetSprite(SPRITE_EVOL6);
77 being->unSetSprite(SPRITE_HAIR);
78 being->unSetSprite(SPRITE_SHOES);
79 }
80
requestRanks(const RankT rank) const81 void BeingHandler::requestRanks(const RankT rank) const
82 {
83 if (packetVersion < 20130605)
84 return;
85
86 createOutPacket(CMSG_REQUEST_RANKS);
87 outMsg.writeInt16(CAST_S16(rank), "type");
88 }
89
viewPlayerEquipment(const Being * const being) const90 void BeingHandler::viewPlayerEquipment(const Being *const being) const
91 {
92 if (being == nullptr)
93 return;
94
95 createOutPacket(CMSG_PLAYER_VIEW_EQUIPMENT);
96 outMsg.writeBeingId(being->getId(), "account id");
97 }
98
requestNameByCharId(const int id) const99 void BeingHandler::requestNameByCharId(const int id) const
100 {
101 createOutPacket(CMSG_SOLVE_CHAR_NAME);
102 if (packetVersion >= 20080827 && packetVersion < 20101124)
103 {
104 outMsg.writeInt32(9, "unused");
105 outMsg.writeInt32(9, "unused");
106 }
107 outMsg.writeInt32(id, "character id");
108 }
109
110 } // namespace EAthena
111