summaryrefslogtreecommitdiff
path: root/src/net/charserverhandler.h
blob: 3a184c800b7e0811a1da531aae229e225dae68b7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
 *  The ManaPlus Client
 *  Copyright (C) 2009  The Mana World Development Team
 *  Copyright (C) 2009-2010  The Mana Developers
 *  Copyright (C) 2011-2020  The ManaPlus Developers
 *  Copyright (C) 2020-2023  The ManaVerse Developers
 *
 *  This file is part of The ManaPlus Client.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef NET_CHARSERVERHANDLER_H
#define NET_CHARSERVERHANDLER_H

#include "enums/being/gender.h"

#include "enums/simpletypes/beingid.h"

#include "net/characters.h"

#include "utils/vector.h"

#include <string>

class CharCreateDialog;
class CharSelectDialog;

namespace Net
{

struct Character;

class CharServerHandler notfinal
{
    public:
        A_DELETE_COPY(CharServerHandler)

        virtual ~CharServerHandler()
        { }

        virtual void setCharSelectDialog(CharSelectDialog *const window)
                                         const = 0;

        virtual void setCharCreateDialog(CharCreateDialog *const window)
                                         const = 0;

        virtual void requestCharacters() const = 0;

        virtual void chooseCharacter(Net::Character *const character)
                                     const = 0;

        virtual void newCharacter(const std::string &name,
                                  const int slot,
                                  const GenderT gender,
                                  const int hairstyle,
                                  const int hairColor,
                                  const unsigned char race,
                                  const uint16_t look,
                                  const STD_VECTOR<int> &stats) const = 0;

        virtual void deleteCharacter(Net::Character *const character,
                                     const std::string &email) const = 0;

        virtual void renameCharacter(const BeingId id,
                                     const std::string &newName) const = 0;

        virtual void switchCharacter() const = 0;

        virtual unsigned int baseSprite() const A_WARN_UNUSED = 0;

        virtual unsigned int hairSprite() const A_WARN_UNUSED = 0;

        virtual unsigned int hatSprite() const A_WARN_UNUSED = 0;

        virtual unsigned int maxSprite() const A_WARN_UNUSED = 0;

        virtual void clear() const = 0;

        virtual void setNewPincode(const BeingId accountId,
                                   const std::string &pin) const = 0;

        virtual void sendCheckPincode(const BeingId accountId,
                                      const std::string &pin) const = 0;

        virtual void changePincode(const BeingId accountId,
                                   const std::string &oldPin,
                                   const std::string &newPin) const = 0;

        virtual void changeSlot(const int oldSlot,
                                const int newSlot) const = 0;

        virtual void ping() const = 0;

        /** The list of available characters. */
        static Net::Characters mCharacters;

        static CharSelectDialog *mCharSelectDialog;
        static CharCreateDialog *mCharCreateDialog;

        /** The selected character. */
        static Net::Character *mSelectedCharacter;

        static void updateCharSelectDialog();
        static void unlockCharSelectDialog();

    protected:
        CharServerHandler()
        {
            mCharacters.clear();
            mSelectedCharacter = nullptr;
            mCharSelectDialog = nullptr;
            mCharCreateDialog = nullptr;
        }
};

}  // namespace Net

extern Net::CharServerHandler *charServerHandler;

#endif  // NET_CHARSERVERHANDLER_H