Mana
Loading...
Searching...
No Matches
guild.cpp
Go to the documentation of this file.
1/*
2 * The Mana Client
3 * Copyright (C) 2004-2009 The Mana World Development Team
4 * Copyright (C) 2009-2012 The Mana Developers
5 *
6 * This file is part of The Mana Client.
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 */
21
22#include "guild.h"
23
24#include "actorspritemanager.h"
25
26GuildMember::GuildMember(Guild *guild, int id, const std::string &name):
27 Avatar(name), mId(id), mGuild(guild)
28{
29}
30
31GuildMember::GuildMember(Guild *guild, const std::string &name):
32 Avatar(name), mGuild(guild)
33{
34}
35
37
38Guild::Guild(short id):
39 mId(id)
40{
41 guilds[id] = this;
42}
43
44GuildMember *Guild::addMember(int id, const std::string &name)
45{
46 GuildMember *m;
47 if ((m = getMember(id)))
48 {
49 return m;
50 }
51
52 m = new GuildMember(this, id, name);
53
54 mMembers.push_back(m);
55
56 return m;
57}
58
59GuildMember *Guild::addMember(const std::string &name)
60{
61 GuildMember *m;
62 if ((m = getMember(name)))
63 {
64 return m;
65 }
66
67 m = new GuildMember(this, name);
68
69 mMembers.push_back(m);
70
71 return m;
72}
73
75{
76 for (auto member : mMembers)
77 if (member->mId == id)
78 return member;
79
80 return nullptr;
81}
82
83GuildMember *Guild::getMember(const std::string &name) const
84{
85 for (auto member : mMembers)
86 if (member->getName() == name)
87 return member;
88
89 return nullptr;
90}
91
93{
94 for (auto itr = mMembers.begin(), itr_end = mMembers.end();
95 itr != itr_end; ++itr)
96 {
97 if ((*itr)->mId == member->mId &&
98 (*itr)->getName() == member->getName())
99 {
100 mMembers.erase(itr);
101 }
102 }
103}
104
106{
107 for (auto itr = mMembers.begin(), itr_end = mMembers.end();
108 itr != itr_end; ++itr)
109 {
110 if ((*itr)->mId == id)
111 mMembers.erase(itr);
112 }
113}
114
115void Guild::removeMember(const std::string &name)
116{
117 for (auto itr = mMembers.begin(), itr_end = mMembers.end();
118 itr != itr_end; ++itr)
119 {
120 if ((*itr)->getName() == name)
121 {
122 mMembers.erase(itr);
123 }
124 }
125}
126
128{
129 for (auto member : mMembers)
130 {
131 Being *b = actorSpriteManager->findBeing(member->getID());
132 b->removeGuild(getId());
133 }
134}
135
137{
138 return mMembers[index];
139}
140
141void Guild::setRights(short rights)
142{
143 // to invite, rights must be greater than 0
144 if (rights > 0)
145 mCanInviteUsers = true;
146}
147
148bool Guild::isMember(GuildMember *member) const
149{
150 if (member->mGuild != nullptr && member->mGuild != this)
151 return false;
152
153 for (auto mMember : mMembers)
154 {
155 if (mMember->mId == member->mId &&
156 mMember->getName() == member->getName())
157 {
158 return true;
159 }
160 }
161
162 return false;
163}
164
165bool Guild::isMember(int id) const
166{
167 return getMember(id) != nullptr;
168}
169
170bool Guild::isMember(const std::string &name) const
171{
172 return getMember(name) != nullptr;
173}
174
175void Guild::getNames(std::vector<std::string> &names) const
176{
177 names.clear();
178
179 for (auto member : mMembers)
180 names.push_back(member->getName());
181}
182
184{
185 auto it = guilds.find(id);
186 if (it != guilds.end())
187 return it->second;
188
189 return new Guild(id);
190}
ActorSpriteManager * actorSpriteManager
Definition game.cpp:110
Being * findBeing(int id) const
Returns a specific Being, by id;.
const std::string & getName() const
Returns the avatar's name.
Definition avatar.h:34
Definition being.h:65
void removeGuild(int id)
Removers a guild from the being.
Definition being.cpp:504
Guild * mGuild
Definition guild.h:51
int mId
Definition guild.h:50
GuildMember(Guild *guild, int id, const std::string &name)
Definition guild.cpp:26
Definition guild.h:55
GuildMember * addMember(int id, const std::string &name)
Adds member to the list.
Definition guild.cpp:44
bool mCanInviteUsers
Definition guild.h:170
void getNames(std::vector< std::string > &names) const
Definition guild.cpp:175
static GuildMap guilds
Definition guild.h:160
Guild(short id)
Constructor with guild id passed to it.
Definition guild.cpp:38
GuildMember * getMember(int id) const
Find a member by ID.
Definition guild.cpp:74
void setRights(short rights)
Definition guild.cpp:141
bool isMember(GuildMember *member) const
Definition guild.cpp:148
void removeFromMembers()
Definition guild.cpp:127
static Guild * getGuild(int id)
Definition guild.cpp:183
void removeMember(GuildMember *member)
Removes a member from the guild.
Definition guild.cpp:92
std::map< int, Guild * > GuildMap
Definition guild.h:159
Avatar * getAvatarAt(int i) override
Definition guild.cpp:136
short getId() const
Get the id of the guild.
Definition guild.h:103
std::vector< GuildMember * > mMembers
Definition guild.h:167