Planeshift
guildmanager.h
Go to the documentation of this file.
1 /*
2  * guildmanager.h
3  *
4  * Copyright (C) 2003 Atomic Blue (info@planeshift.it, http://www.atomicblue.org)
5  *
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation (version 2 of the License)
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17  *
18  */
19 
20 
21 #ifndef __GUILDMANAGER_H__
22 #define __GUILDMANAGER_H__
23 
24 //=============================================================================
25 // Crystal Space Includes
26 //=============================================================================
27 #include <iutil/document.h>
28 
29 //=============================================================================
30 // Project Includes
31 //=============================================================================
33 
34 //=============================================================================
35 // Local Includes
36 //=============================================================================
37 #include "msgmanager.h" // Parent class
38 
40 class ChatManager;
41 class PendingGuildInvite;
42 class PendingGuildWarInvite;
43 
44 
53 {
54 public:
56  {
57  this->guild = guild;
58  this->clientnum = clientnum;
59  this->onlineOnly = onlineOnly;
60  }
61  int guild;
62  int clientnum;
63  bool onlineOnly;
64 };
65 
66 
67 class GuildManager : public MessageManager<GuildManager>
68 {
69  friend class PendingAllianceInvite;
70 public:
71 
73  virtual ~GuildManager();
74 
75  void HandleJoinGuild(PendingGuildInvite* invite);
76  void AcceptWar(PendingGuildWarInvite* invite);
77 
78  void ResendGuildData(int id);
79 
83  void RequirementsDeadline(int guild_id);
84 
88  void CheckMinimumRequirements(psGuildInfo* guild, gemActor* notify);
89 
90 
91 protected:
92  int GetClientLevel(Client* client);
93  bool CheckAllianceOperation(Client* client, bool checkLeaderGuild, psGuildInfo* &guild, psGuildAlliance* &alliance);
94 
95  void HandleCmdMessage(MsgEntry* me,Client* client);
96  void HandleGUIMessage(MsgEntry* me,Client* client);
97  void HandleMOTDSet(MsgEntry* me,Client* client);
98  void HandleSubscribeGuildData(Client* client,iDocumentNode* root);
99  void UnsubscribeGuildData(Client* client);
100  void HandleSetOnline(Client* client,iDocumentNode* root);
102  void HandleSetGuildNotifications(Client* client,iDocumentNode* root);
104  void HandleSetAllianceNotifications(Client* client,iDocumentNode* root);
106  void HandleSetLevelRight(Client* client,iDocumentNode* root);
107  void HandleRemoveMember(Client* client,iDocumentNode* root);
108  void HandleSetMemberLevel(Client* client,iDocumentNode* root);
109  void HandleSetMemberPoints(Client* client,iDocumentNode* root);
110 
117  void HandleSetMaxMemberPoints(Client* client,iDocumentNode* root);
118  void HandleSetMemberNotes(Client* client,iDocumentNode* root, bool isPublic);
119 
123  bool CheckClientRights(Client* client, GUILD_PRIVILEGE priv);
124 
130  bool CheckClientRights(Client* client, GUILD_PRIVILEGE priv, const char* denialMsg);
131 
135  bool RetrieveOnlineOnly(iDocumentNode* root);
136 
140  bool RetrieveGuildNotifications(iDocumentNode* root);
141 
145  bool RetrieveAllianceNotifications(iDocumentNode* root);
146 
147 
148  void SendGuildData(Client* client);
149  void SendLevelData(Client* client);
150  void SendMemberData(Client* client, bool onlineOnly);
151  void SendAllianceData(Client* client);
152 
153  csString MakeAllianceMemberXML(psGuildInfo* member, bool allianceLeader);
154 
162  bool ParseRightString(csString privilege, GUILD_PRIVILEGE &right);
163 
164  void CreateGuild(psGuildCmdMessage &msg,Client* client);
165 
169  void EndGuild(psGuildInfo* guild,int clientnum);
170 
174  void EndGuild(psGuildCmdMessage &msg,Client* client);
175 
176  void ChangeGuildName(psGuildCmdMessage &msg,Client* client);
177  bool FilterGuildName(const char* name);
178  void Invite(psGuildCmdMessage &msg,Client* client);
179  void Remove(psGuildCmdMessage &msg,Client* client);
180  void Rename(psGuildCmdMessage &msg,Client* client);
181  void Promote(psGuildCmdMessage &msg,Client* client);
182 
193  void GetMemberPermissions(psGuildCmdMessage &msg,Client* client);
194 
203  void SetMemberPermissions(psGuildCmdMessage &msg,Client* client);
204  void ListMembers(psGuildCmdMessage &msg,Client* client);
205  void Secret(psGuildCmdMessage &msg, Client* client);
206  void Web(psGuildCmdMessage &msg, Client* client);
207  void MOTD(psGuildCmdMessage &msg, Client* client);
208  void GuildWar(psGuildCmdMessage &msg, Client* client);
209  void GuildYield(psGuildCmdMessage &msg, Client* client);
210 
211  void NewAlliance(psGuildCmdMessage &msg, Client* client);
212  void AllianceInvite(psGuildCmdMessage &msg, Client* client);
213  void AllianceRemove(psGuildCmdMessage &msg, Client* client);
214  void AllianceLeave(psGuildCmdMessage &msg, Client* client);
215  void AllianceLeader(psGuildCmdMessage &msg, Client* client);
216  void EndAlliance(psGuildCmdMessage &msg, Client* client);
217 
229  void EndAlliance(psGuildAlliance* alliance, int clientNum);
230  void RemoveMemberFromAlliance(Client* client, psGuildInfo* guild, psGuildAlliance* alliance,
231  psGuildInfo* removedGuild);
232 
233  bool AddPlayerToGuild(int guild,const char* guildname,Client* client,int level);
234  GuildNotifySubscription* FindNotifySubscr(Client* client);
235 
247  void SendNotifications(int guild, int msg);
248 
252  void SendAllianceNotifications(psGuildAlliance* alliance);
253 
260  void SendNoAllianceNotifications(psGuildAlliance* alliance);
261  void SendNoAllianceNotifications(psGuildInfo* guild);
262 
263  void SendGuildPoints(psGuildCmdMessage &msg,Client* client);
264 
265  void UnsubscribeWholeGuild(psGuildInfo* guild);
266 
267  bool IsLeader(Client* client);
268 
271  csArray<GuildNotifySubscription*> notifySubscr;
272 
273  csRef<iDocumentSystem> xml;
274 };
275 
278 #endif
279 
Information about client that asked us to tell him when some guild data change.
Definition: guildmanager.h:52
Holds data for a guild.
Definition: psguildinfo.h:159
The structure of 1 queue entry (pointer to a message)
Definition: message.h:143
csArray< GuildNotifySubscription * > notifySubscr
Definition: guildmanager.h:271
A guild alliance between 2+ guilds.
Definition: psguildinfo.h:731
ClientConnectionSet * clients
Definition: guildmanager.h:270
ChatManager * chatserver
Definition: guildmanager.h:269
Any semi-autonomous object, either a player or an NPC.
Definition: gem.h:1170
This class collects data of a netclient.
Definition: client.h:95
int clientnum
Client Id.
Definition: guildmanager.h:62
GuildNotifySubscription(int guild, int clientnum, bool onlineOnly)
Definition: guildmanager.h:55
csRef< iDocumentSystem > xml
Definition: guildmanager.h:273
Guild commands sent from client to server.
Definition: messages.h:1114
GUILD_PRIVILEGE
Privileges that may be specifically given/taken from members of a guild.
Definition: psguildinfo.h:61
This class is a list of several CLient objects, it&#39;s designed for finding clients very fast based on ...
Definition: clients.h:58
bool onlineOnly
Should we send members that are online only, or all members ?
Definition: guildmanager.h:63
Provides a manager to facilitate subscriptions.
Definition: msgmanager.h:106