diff options
author | maximius <none@none> | 2009-10-17 15:51:44 -0700 |
---|---|---|
committer | maximius <none@none> | 2009-10-17 15:51:44 -0700 |
commit | e585187b248f48b3c6e9247b49fa07c6565d65e5 (patch) | |
tree | 637c5b7ddacf41040bef4ea4f75a97da64c6a9bc /src/game/Guild.h | |
parent | 26b5e033ffde3d161382fc9addbfa99738379641 (diff) |
*Backed out changeset 3be01fb200a5
--HG--
branch : trunk
Diffstat (limited to 'src/game/Guild.h')
-rw-r--r-- | src/game/Guild.h | 59 |
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; |