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