Mana
Loading...
Searching...
No Matches
src
resources
questdb.h
Go to the documentation of this file.
1
/*
2
* The Mana Client
3
* Copyright (C) 2025 The Mana Developers
4
*
5
* This file is part of The Mana Client.
6
*
7
* This program is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License as published by
9
* the Free Software Foundation; either version 2 of the License, or
10
* any later version.
11
*
12
* This program is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
16
*
17
* You should have received a copy of the GNU General Public License
18
* along with this program. If not, see <http://www.gnu.org/licenses/>.
19
*/
20
21
#pragma once
22
23
#include "
utils/xml.h
"
24
25
#include <map>
26
#include <string>
27
#include <vector>
28
32
template
<
typename
Key,
typename
Value, Value def = Value()>
33
class
MapWithDefault
34
{
35
public
:
36
void
set
(
Key
key
,
Value
value)
37
{
38
mVars
[
key
] = value;
39
}
40
41
Value
get
(
Key
key
)
const
42
{
43
auto
it
=
mVars
.find(
key
);
44
return
it
!=
mVars
.end() ?
it
->second :
def
;
45
}
46
47
void
clear
()
48
{
49
mVars
.clear();
50
}
51
52
private
:
53
std::map<Key, Value>
mVars
;
54
};
55
56
struct
QuestEffect
57
{
58
std::vector<int>
values
;
// Quest variable values to which the effect applies
59
std::string
map
;
// Map name the NPC is located on
60
int
npcId
= 0;
61
int
statusEffectId
= 0;
62
};
63
64
// Map of quest variables, from variable ID to value
65
using
QuestVars
=
MapWithDefault<int, int>
;
66
67
// Map of quest effects, from NPC ID to status effect ID
68
using
QuestEffectMap
=
MapWithDefault<int, int>
;
69
70
enum class
QuestRowType
71
{
72
Text
,
73
Name
,
74
Reward
,
75
Giver
,
76
Coordinates
,
77
NPC
78
};
79
80
struct
QuestRow
81
{
82
QuestRow
(
QuestRowType
type
)
83
:
type
(
type
)
84
{}
85
86
QuestRowType
type
;
87
std::string
text
;
88
int
x
= 0;
89
int
y
= 0;
90
};
91
92
struct
QuestState
93
{
94
std::string
name
;
// Name of the quest in this state
95
std::string
group
;
// Group name of the quest in this state
96
std::vector<int>
incomplete
;
// Quest variable values for this state (quest incomplete)
97
std::vector<int>
complete
;
// Quest variable values for this state (quest complete)
98
std::vector<QuestRow>
rows
;
// Rows of text in the Quests window for this state
99
};
100
101
struct
Quest
102
{
103
std::vector<QuestEffect>
effects
;
104
std::vector<QuestState>
states
;
105
};
106
107
struct
QuestEntry
108
{
109
int
varId
;
110
bool
completed
;
111
const
QuestState
*
state
;
112
113
const
std::string &
name
()
const
{
return
state
->
name
; }
114
const
std::vector<QuestRow> &
rows
()
const
{
return
state
->
rows
; }
115
};
116
117
enum class
QuestChange
118
{
119
None
,
120
New
,
121
Completed
122
};
123
124
namespace
QuestDB
125
{
126
void
init
();
127
void
readQuestVarNode
(
XML::Node
node,
const
std::string &filename);
128
void
unload
();
129
130
bool
hasQuests
();
131
132
QuestEffectMap
getActiveEffects
(
const
QuestVars
&questVars,
133
const
std::string &mapName);
134
135
std::vector<QuestEntry>
getQuestsEntries
(
const
QuestVars
&questVars,
136
bool
skipCompleted =
false
);
137
138
QuestChange
questChange
(
int
varId,
int
oldValue,
int
newValue);
139
};
MapWithDefault
A map that returns a default value for non-existent keys.
Definition
questdb.h:34
MapWithDefault::clear
void clear()
Definition
questdb.h:47
MapWithDefault::get
Value get(Key key) const
Definition
questdb.h:41
MapWithDefault::mVars
std::map< Key, Value > mVars
Definition
questdb.h:53
MapWithDefault::set
void set(Key key, Value value)
Definition
questdb.h:36
XML::Node
Definition
xml.h:38
Key
Definition
sdlinput.h:73
QuestDB
Definition
questdb.cpp:28
QuestDB::questChange
QuestChange questChange(int varId, int oldValue, int newValue)
Definition
questdb.cpp:211
QuestDB::unload
void unload()
Definition
questdb.cpp:119
QuestDB::getActiveEffects
QuestEffectMap getActiveEffects(const QuestVars &questVars, const std::string &mapName)
Definition
questdb.cpp:137
QuestDB::hasQuests
bool hasQuests()
Definition
questdb.cpp:124
QuestDB::readQuestVarNode
void readQuestVarNode(XML::Node node, const std::string &filename)
Definition
questdb.cpp:45
QuestDB::getQuestsEntries
std::vector< QuestEntry > getQuestsEntries(const QuestVars &questVars, bool skipCompleted)
Definition
questdb.cpp:160
QuestDB::init
void init()
Definition
questdb.cpp:40
QuestRowType
QuestRowType
Definition
questdb.h:71
QuestRowType::NPC
@ NPC
QuestRowType::Reward
@ Reward
QuestRowType::Name
@ Name
QuestRowType::Coordinates
@ Coordinates
QuestRowType::Giver
@ Giver
QuestRowType::Text
@ Text
QuestChange
QuestChange
Definition
questdb.h:118
QuestChange::New
@ New
QuestChange::Completed
@ Completed
QuestChange::None
@ None
QuestEffect
Definition
questdb.h:57
QuestEffect::statusEffectId
int statusEffectId
Definition
questdb.h:61
QuestEffect::npcId
int npcId
Definition
questdb.h:60
QuestEffect::map
std::string map
Definition
questdb.h:59
QuestEffect::values
std::vector< int > values
Definition
questdb.h:58
QuestEntry
Definition
questdb.h:108
QuestEntry::rows
const std::vector< QuestRow > & rows() const
Definition
questdb.h:114
QuestEntry::name
const std::string & name() const
Definition
questdb.h:113
QuestEntry::completed
bool completed
Definition
questdb.h:110
QuestEntry::varId
int varId
Definition
questdb.h:109
QuestEntry::state
const QuestState * state
Definition
questdb.h:111
QuestRow
Definition
questdb.h:81
QuestRow::x
int x
Definition
questdb.h:88
QuestRow::text
std::string text
Definition
questdb.h:87
QuestRow::QuestRow
QuestRow(QuestRowType type)
Definition
questdb.h:82
QuestRow::type
QuestRowType type
Definition
questdb.h:86
QuestRow::y
int y
Definition
questdb.h:89
QuestState
Definition
questdb.h:93
QuestState::name
std::string name
Definition
questdb.h:94
QuestState::group
std::string group
Definition
questdb.h:95
QuestState::incomplete
std::vector< int > incomplete
Definition
questdb.h:96
QuestState::rows
std::vector< QuestRow > rows
Definition
questdb.h:98
QuestState::complete
std::vector< int > complete
Definition
questdb.h:97
Quest
Definition
questdb.h:102
Quest::effects
std::vector< QuestEffect > effects
Definition
questdb.h:103
Quest::states
std::vector< QuestState > states
Definition
questdb.h:104
xml.h
Generated by
1.9.8