aboutsummaryrefslogtreecommitdiff
path: root/src/game/Guild.h
diff options
context:
space:
mode:
authormaximius <none@none>2009-10-17 15:51:44 -0700
committermaximius <none@none>2009-10-17 15:51:44 -0700
commite585187b248f48b3c6e9247b49fa07c6565d65e5 (patch)
tree637c5b7ddacf41040bef4ea4f75a97da64c6a9bc /src/game/Guild.h
parent26b5e033ffde3d161382fc9addbfa99738379641 (diff)
*Backed out changeset 3be01fb200a5
--HG-- branch : trunk
Diffstat (limited to 'src/game/Guild.h')
-rw-r--r--src/game/Guild.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/game/Guild.h b/src/game/Guild.h
index 94edb4465ac..8df8d01d264 100644
--- a/src/game/Guild.h
+++ b/src/game/Guild.h
@@ -17,14 +17,20 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+
#ifndef TRINITYCORE_GUILD_H
#define TRINITYCORE_GUILD_H
+
#define WITHDRAW_MONEY_UNLIMITED 0xFFFFFFFF
#define WITHDRAW_SLOT_UNLIMITED 0xFFFFFFFF
+
#include "Item.h"
+
class Item;
+
#define GUILD_RANKS_MIN_COUNT 5
#define GUILD_RANKS_MAX_COUNT 10
+
enum GuildDefaultRanks
{
//these ranks can be modified, but they cannot be deleted
@@ -36,6 +42,7 @@ enum GuildDefaultRanks
//When promoting member server does: rank--;!
//When demoting member server does: rank++;!
};
+
enum GuildRankRights
{
GR_RIGHT_EMPTY = 0x00000040,
@@ -58,6 +65,7 @@ enum GuildRankRights
GR_RIGHT_CREATE_GUILD_EVENT = 0x00100000, // wotlk
GR_RIGHT_ALL = 0x001DF1FF
};
+
enum Typecommand
{
GUILD_CREATE_S = 0x00,
@@ -68,6 +76,7 @@ enum Typecommand
GUILD_BANK_S = 0x15,
GUILD_UNK3 = 0x16
};
+
enum CommandErrors
{
GUILD_PLAYER_NO_MORE_IN_GUILD = 0x00,
@@ -95,6 +104,7 @@ enum CommandErrors
GUILD_BANK_TAB_IS_FULL = 0x1B,
GUILD_BANK_ITEM_NOT_FOUND = 0x1C
};
+
enum GuildEvents
{
GE_PROMOTION = 0x00,
@@ -117,12 +127,14 @@ enum GuildEvents
GE_UNK6 = 0x11, // string 0000000000002710 is 1 gold
GE_UNK7 = 0x12
};
+
enum PetitionTurns
{
PETITION_TURN_OK = 0,
PETITION_TURN_ALREADY_IN_GUILD = 2,
PETITION_TURN_NEED_MORE_SIGNATURES = 4,
};
+
enum PetitionSigns
{
PETITION_SIGN_OK = 0,
@@ -131,14 +143,17 @@ enum PetitionSigns
PETITION_SIGN_CANT_SIGN_OWN = 3,
PETITION_SIGN_NOT_SERVER = 4,
};
+
enum GuildBankRights
{
GUILD_BANK_RIGHT_VIEW_TAB = 0x01,
GUILD_BANK_RIGHT_PUT_ITEM = 0x02,
GUILD_BANK_RIGHT_UPDATE_TEXT = 0x04,
+
GUILD_BANK_RIGHT_DEPOSIT_ITEM = GUILD_BANK_RIGHT_VIEW_TAB | GUILD_BANK_RIGHT_PUT_ITEM,
GUILD_BANK_RIGHT_FULL = 0xFF,
};
+
enum GuildBankEventLogTypes
{
GUILD_BANK_LOG_DEPOSIT_ITEM = 1,
@@ -151,6 +166,7 @@ enum GuildBankEventLogTypes
GUILD_BANK_LOG_UNK1 = 8,
GUILD_BANK_LOG_UNK2 = 9,
};
+
enum GuildEventLogTypes
{
GUILD_EVENT_LOG_INVITE_PLAYER = 1,
@@ -160,6 +176,7 @@ enum GuildEventLogTypes
GUILD_EVENT_LOG_UNINVITE_PLAYER = 5,
GUILD_EVENT_LOG_LEAVE_GUILD = 6,
};
+
enum GuildEmblem
{
ERR_GUILDEMBLEM_SUCCESS = 0,
@@ -169,6 +186,7 @@ enum GuildEmblem
ERR_GUILDEMBLEM_NOTENOUGHMONEY = 4,
ERR_GUILDEMBLEM_INVALIDVENDOR = 5
};
+
inline uint32 GetGuildBankTabPrice(uint8 Index)
{
switch(Index)
@@ -184,6 +202,7 @@ inline uint32 GetGuildBankTabPrice(uint8 Index)
}
return 0;
}
+
struct GuildEventLogEntry
{
uint8 EventType;
@@ -192,6 +211,7 @@ struct GuildEventLogEntry
uint8 NewRank;
uint64 TimeStamp;
};
+
struct GuildBankEventLogEntry
{
uint8 EventType;
@@ -200,6 +220,7 @@ struct GuildBankEventLogEntry
uint8 ItemStackCount;
uint8 DestTabId;
uint64 TimeStamp;
+
const bool isMoneyEvent()
{
return EventType == GUILD_BANK_LOG_DEPOSIT_MONEY ||
@@ -207,6 +228,7 @@ struct GuildBankEventLogEntry
EventType == GUILD_BANK_LOG_REPAIR_MONEY;
}
};
+
struct GuildBankTab
{
Item* Slots[GUILD_BANK_MAX_SLOTS];
@@ -214,14 +236,18 @@ struct GuildBankTab
std::string Icon;
std::string Text;
};
+
struct GuildItemPosCount
{
GuildItemPosCount(uint8 _slot, uint32 _count) : Slot(_slot), Count(_count) {}
+
bool isContainedIn(std::vector<GuildItemPosCount> const& vec) const;
+
uint8 Slot;
uint32 Count;
};
typedef std::vector<GuildItemPosCount> GuildItemPosCountVec;
+
struct MemberSlot
{
uint64 LogoutTime;
@@ -237,6 +263,7 @@ struct MemberSlot
uint32 BankResetTimeTab[GUILD_BANK_MAX_TABS];
uint32 BankRemSlotsTab[GUILD_BANK_MAX_TABS];
};
+
struct RankInfo
{
RankInfo(const std::string& _name, uint32 _rights, uint32 _money) : Name(_name), Rights(_rights), BankMoneyPerDay(_money)
@@ -247,57 +274,71 @@ struct RankInfo
TabSlotPerDay[i] = 0;
}
}
+
std::string Name;
uint32 Rights;
uint32 BankMoneyPerDay;
uint32 TabRight[GUILD_BANK_MAX_TABS];
uint32 TabSlotPerDay[GUILD_BANK_MAX_TABS];
};
+
class Guild
{
public:
Guild();
~Guild();
+
bool Create(Player* leader, std::string gname);
void CreateDefaultGuildRanks(int locale_idx);
void Disband();
+
typedef std::map<uint32, MemberSlot> MemberList;
typedef std::vector<RankInfo> RankList;
+
uint32 GetId(){ return m_Id; }
const uint64& GetLeader(){ return m_LeaderGuid; }
std::string const& GetName() const { return m_Name; }
std::string const& GetMOTD() const { return MOTD; }
std::string const& GetGINFO() const { return GINFO; }
+
uint32 GetCreatedYear() const { return m_CreatedYear; }
uint32 GetCreatedMonth() const { return m_CreatedMonth; }
uint32 GetCreatedDay() const { return m_CreatedDay; }
+
uint32 GetEmblemStyle() const { return m_EmblemStyle; }
uint32 GetEmblemColor() const { return m_EmblemColor; }
uint32 GetBorderStyle() const { return m_BorderStyle; }
uint32 GetBorderColor() const { return m_BorderColor; }
uint32 GetBackgroundColor() const { return m_BackgroundColor; }
+
void SetLeader(uint64 guid);
bool AddMember(uint64 plGuid, uint32 plRank);
void ChangeRank(uint64 guid, uint32 newRank);
void DelMember(uint64 guid, bool isDisbanding = false);
//lowest rank is the count of ranks - 1 (the highest rank_id in table)
uint32 GetLowestRank() const { return m_Ranks.size() - 1; }
+
void SetMOTD(std::string motd);
void SetGINFO(std::string ginfo);
void SetPNOTE(uint64 guid, std::string pnote);
void SetOFFNOTE(uint64 guid, std::string offnote);
void SetEmblem(uint32 emblemStyle, uint32 emblemColor, uint32 borderStyle, uint32 borderColor, uint32 backgroundColor);
+
uint32 GetMemberSize() const { return members.size(); }
+
bool LoadGuildFromDB(uint32 GuildId);
bool LoadRanksFromDB(uint32 GuildId);
bool LoadMembersFromDB(uint32 GuildId);
+
void SetMemberStats(uint64 guid);
+
void BroadcastToGuild(WorldSession *session, const std::string& msg, uint32 language = LANG_UNIVERSAL);
void BroadcastToOfficers(WorldSession *session, const std::string& msg, uint32 language = LANG_UNIVERSAL);
void BroadcastPacketToRank(WorldPacket *packet, uint32 rankId);
void BroadcastPacket(WorldPacket *packet);
+
template<class Do>
void BroadcastWorker(Do& _do, Player* except = NULL)
{
@@ -306,11 +347,13 @@ class Guild
if(player != except)
_do(player);
}
+
void CreateRank(std::string name,uint32 rights);
void DelRank();
std::string GetRankName(uint32 rankId);
uint32 GetRankRights(uint32 rankId);
uint32 GetRanksSize() const { return m_Ranks.size(); }
+
void SetRankName(uint32 rankId, std::string name);
void SetRankRights(uint32 rankId, uint32 rights);
bool HasRankRight(uint32 rankId, uint32 right)
@@ -334,20 +377,25 @@ class Guild
}
return NULL;
}
+
void Roster(WorldSession *session = NULL); // NULL = broadcast
void Query(WorldSession *session);
+
void UpdateLogoutTime(uint64 guid);
// Guild EventLog
void LoadGuildEventLogFromDB();
void UnloadGuildEventLog();
void DisplayGuildEventLog(WorldSession *session);
void LogGuildEvent(uint8 EventType, uint32 PlayerGuid1, uint32 PlayerGuid2, uint8 NewRank);
+
// ** Guild bank **
// Content & item deposit/withdraw
void DisplayGuildBankContent(WorldSession *session, uint8 TabId);
+
void SwapItems( Player * pl, uint8 BankTab, uint8 BankTabSlot, uint8 BankTabDst, uint8 BankTabSlotDst, uint32 SplitedAmount);
void MoveFromBankToChar( Player * pl, uint8 BankTab, uint8 BankTabSlot, uint8 PlayerBag, uint8 PlayerSlot, uint32 SplitedAmount);
void MoveFromCharToBank( Player * pl, uint8 PlayerBag, uint8 PlayerSlot, uint8 BankTab, uint8 BankTabSlot, uint32 SplitedAmount);
+
// Tabs
void DisplayGuildBankTabsInfo(WorldSession *session);
void CreateNewBankTab();
@@ -384,8 +432,10 @@ class Guild
void DisplayGuildBankLogs(WorldSession *session, uint8 TabId);
void LogBankEvent(uint8 EventType, uint8 TabId, uint32 PlayerGuidLow, uint32 ItemOrMoney, uint8 ItemStackCount=0, uint8 DestTabId=0);
bool AddGBankItemToDB(uint32 GuildId, uint32 BankTab , uint32 BankTabSlot , uint32 GUIDLow, uint32 Entry );
+
protected:
void AddRank(const std::string& name,uint32 rights,uint32 money);
+
uint32 m_Id;
std::string m_Name;
uint64 m_LeaderGuid;
@@ -394,29 +444,37 @@ class Guild
uint32 m_CreatedYear;
uint32 m_CreatedMonth;
uint32 m_CreatedDay;
+
uint32 m_EmblemStyle;
uint32 m_EmblemColor;
uint32 m_BorderStyle;
uint32 m_BorderColor;
uint32 m_BackgroundColor;
+
RankList m_Ranks;
+
MemberList members;
+
typedef std::vector<GuildBankTab*> TabListMap;
TabListMap m_TabListMap;
+
/** These are actually ordered lists. The first element is the oldest entry.*/
typedef std::list<GuildEventLogEntry> GuildEventLog;
typedef std::list<GuildBankEventLogEntry> GuildBankEventLog;
GuildEventLog m_GuildEventLog;
GuildBankEventLog m_GuildBankEventLog_Money;
GuildBankEventLog m_GuildBankEventLog_Item[GUILD_BANK_MAX_TABS];
+
uint32 m_GuildEventLogNextGuid;
uint32 m_GuildBankEventLogNextGuid_Money;
uint32 m_GuildBankEventLogNextGuid_Item[GUILD_BANK_MAX_TABS];
+
bool m_GuildBankLoaded;
bool m_EventLogLoaded;
uint32 m_OnlineMembers;
uint64 m_GuildBankMoney;
uint8 m_PurchasedTabs;
+
private:
// used only from high level Swap/Move functions
Item* GetItem(uint8 TabId, uint8 SlotId);
@@ -425,6 +483,7 @@ class Guild
void RemoveItem(uint8 tab, uint8 slot );
void DisplayGuildBankContentUpdate(uint8 TabId, int32 slot1, int32 slot2 = -1);
void DisplayGuildBankContentUpdate(uint8 TabId, GuildItemPosCountVec const& slots);
+
// internal common parts for CanStore/StoreItem functions
void AppendDisplayGuildBankSlot( WorldPacket& data, GuildBankTab const *tab, int32 slot );
uint8 _CanStoreItem_InSpecificSlot( uint8 tab, uint8 slot, GuildItemPosCountVec& dest, uint32& count, bool swap, Item *pSrcItem ) const;