diff options
author | silinoron <none@none> | 2010-08-14 12:17:05 -0700 |
---|---|---|
committer | silinoron <none@none> | 2010-08-14 12:17:05 -0700 |
commit | 8d0a0584118ec7b6f763a8ebc059a8dfc1d5536e (patch) | |
tree | e250ed865bd30a7d393af1551c9f2039df406b41 /src | |
parent | d1d7c64c4363061a1f9504ac6d22351c78718c11 (diff) |
Add a GuildScript class with a handful of hooks.
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Chat/Chat.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Chat/Commands/Level3.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Guilds/Guild.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Guilds/Guild.h | 2 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 25 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 23 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Handlers/GuildHandler.cpp | 5 |
7 files changed, 67 insertions, 7 deletions
diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index 06fc58b0b56..d1849f8d72f 100644 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -1635,7 +1635,7 @@ valid examples: if (!foundName) { #ifdef TRINITY_DEBUG - sLog.outBasic("ChatHandler::isValidChatMessage no quest locale title matched") + sLog.outBasic("ChatHandler::isValidChatMessage no quest locale title matched"); #endif return false; } diff --git a/src/server/game/Chat/Commands/Level3.cpp b/src/server/game/Chat/Commands/Level3.cpp index 6c1fe594e0b..b1eb5aac6fa 100644 --- a/src/server/game/Chat/Commands/Level3.cpp +++ b/src/server/game/Chat/Commands/Level3.cpp @@ -3804,6 +3804,7 @@ bool ChatHandler::HandleGuildUninviteCommand(const char *args) return false; uint32 glId = target ? target->GetGuildId () : Player::GetGuildIdFromDB (target_guid); + if (!glId) return false; @@ -3811,7 +3812,7 @@ bool ChatHandler::HandleGuildUninviteCommand(const char *args) if (!targetGuild) return false; - targetGuild->DelMember (target_guid); + targetGuild->DelMember (target_guid, false, true); return true; } diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 2fb727f7230..6e59773b57a 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -31,6 +31,7 @@ #include "Language.h" #include "World.h" #include "Config.h" +#include "ScriptMgr.h" Guild::Guild() { @@ -126,6 +127,8 @@ bool Guild::AddMember(uint64 plGuid, uint32 plRank) return false; } + sScriptMgr.OnGuildAddMember(this, pl, plRank); + // remove all player signs from another petitions // this will be prevent attempt joining player to many guilds and corrupt guild data integrity Player::RemovePetitionsAndSigns(plGuid, 9); @@ -196,6 +199,8 @@ void Guild::SetMOTD(std::string motd) { MOTD = motd; + sScriptMgr.OnGuildMOTDChanged(this, motd); + // motd now can be used for encoding to DB CharacterDatabase.escape_string(motd); CharacterDatabase.PExecute("UPDATE guild SET motd='%s' WHERE guildid='%u'", motd.c_str(), m_Id); @@ -205,6 +210,8 @@ void Guild::SetGINFO(std::string ginfo) { GINFO = ginfo; + sScriptMgr.OnGuildInfoChanged(this, ginfo); + // ginfo now can be used for encoding to DB CharacterDatabase.escape_string(ginfo); CharacterDatabase.PExecute("UPDATE guild SET info='%s' WHERE guildid='%u'", ginfo.c_str(), m_Id); @@ -448,8 +455,11 @@ void Guild::SetLeader(uint64 guid) CharacterDatabase.PExecute("UPDATE guild SET leaderguid='%u' WHERE guildid='%u'", GUID_LOPART(guid), m_Id); } -void Guild::DelMember(uint64 guid, bool isDisbanding) +void Guild::DelMember(uint64 guid, bool isDisbanding, bool isKicked) { + Player *player = sObjectMgr.GetPlayer(guid); + sScriptMgr.OnGuildRemoveMember(this, player, isDisbanding, isKicked); + //guild master can be deleted when loading guild and guid doesn't exist in characters table //or when he is removed from guild by gm command if (m_LeaderGuid == guid && !isDisbanding) @@ -494,7 +504,6 @@ void Guild::DelMember(uint64 guid, bool isDisbanding) members.erase(GUID_LOPART(guid)); - Player *player = sObjectMgr.GetPlayer(guid); // If player not online data in data field will be loaded from guild tabs no need to update it !! if (player) { @@ -692,6 +701,7 @@ int32 Guild::GetRank(uint32 LowGuid) void Guild::Disband() { + sScriptMgr.OnGuildDisband(this); BroadcastEvent(GE_DISBANDED, 0, 0, "", "", ""); while (!members.empty()) diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h index b8e2ef01795..02840da82d3 100644 --- a/src/server/game/Guilds/Guild.h +++ b/src/server/game/Guilds/Guild.h @@ -315,7 +315,7 @@ class Guild void SetLeader(uint64 guid); bool AddMember(uint64 plGuid, uint32 plRank); void ChangeRank(uint64 guid, uint32 newRank); - void DelMember(uint64 guid, bool isDisbanding = false); + void DelMember(uint64 guid, bool isDisbanding = false, bool isKicked = false); //lowest rank is the count of ranks - 1 (the highest rank_id in table) uint32 GetLowestRank() const { return m_Ranks.size() - 1; } diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 52781455c96..dca0adeb8a5 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -1127,6 +1127,31 @@ void ScriptMgr::OnPlayerTextEmote(Player* player, uint32 text_emote, uint32 emot FOREACH_SCRIPT(PlayerScript)->OnTextEmote(player, text_emote, emoteNum, guid); } +void ScriptMgr::OnGuildAddMember(Guild *guild, Player *player, uint32& plRank) +{ + FOREACH_SCRIPT(GuildScript)->OnAddMember(guild, player, plRank); +} + +void ScriptMgr::OnGuildRemoveMember(Guild *guild, Player *player, bool isDisbanding, bool isKicked) +{ + FOREACH_SCRIPT(GuildScript)->OnRemoveMember(guild, player, isDisbanding, isKicked); +} + +void ScriptMgr::OnGuildMOTDChanged(Guild *guild, std::string newMotd) +{ + FOREACH_SCRIPT(GuildScript)->OnMOTDChanged(guild, newMotd); +} + +void ScriptMgr::OnGuildInfoChanged(Guild *guild, std::string newGInfo) +{ + FOREACH_SCRIPT(GuildScript)->OnGInfoChanged(guild, newGInfo); +} + +void ScriptMgr::OnGuildDisband(Guild *guild) +{ + FOREACH_SCRIPT(GuildScript)->OnDisband(guild); +} + SpellHandlerScript::SpellHandlerScript(const char* name) : ScriptObject(name) { diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 421892bcb59..b580e333957 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -702,6 +702,21 @@ public: virtual void OnTextEmote(Player* player, uint32 text_emote, uint32 emoteNum, uint64 guid) { } }; +class GuildScript : public ScriptObject +{ +protected: + GuildScript(const char* name); + +public: + bool IsDatabaseBound() const { return false; } + + virtual void OnAddMember(Guild *guild, Player *player, uint32& plRank) { } + virtual void OnRemoveMember(Guild *guild, Player *player, bool isDisbanding, bool isKicked) { } + virtual void OnMOTDChanged(Guild *guild, std::string newMotd) { } + virtual void OnGInfoChanged(Guild *guild, std::string newGInfo) { } + virtual void OnDisband(Guild *guild) { } +}; + // Placed here due to ScriptRegistry::AddScript dependency. #define sScriptMgr (*ACE_Singleton<ScriptMgr, ACE_Null_Mutex>::instance()) @@ -875,6 +890,7 @@ class ScriptMgr bool OnCriteriaCheck(AchievementCriteriaData const* data, Player* source, Unit* target); public: /* PlayerScript */ + void OnPVPKill(Player *killer, Player *killed); void OnCreatureKill(Player *killer, Creature *killed); void OnPlayerKilledByCreature(Creature *killer, Player *killed); @@ -888,6 +904,13 @@ class ScriptMgr void OnPlayerEmote(Player* player, uint32 emote); void OnPlayerTextEmote(Player* player, uint32 text_emote, uint32 emoteNum, uint64 guid); + public: /* GuildScript */ + void OnGuildAddMember(Guild *guild, Player *player, uint32& plRank); + void OnGuildRemoveMember(Guild *guild, Player *player, bool isDisbanding, bool isKicked); + void OnGuildMOTDChanged(Guild *guild, std::string newMotd); + void OnGuildInfoChanged(Guild *guild, std::string newGInfo); + void OnGuildDisband(Guild *guild); + public: /* ScriptRegistry */ // This is the global static registry of scripts. diff --git a/src/server/game/Server/Protocol/Handlers/GuildHandler.cpp b/src/server/game/Server/Protocol/Handlers/GuildHandler.cpp index 07eded4943d..d20284ae8f4 100644 --- a/src/server/game/Server/Protocol/Handlers/GuildHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/GuildHandler.cpp @@ -179,7 +179,7 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket) return; } - guild->DelMember(plGuid); + guild->DelMember(plGuid, false, true); // Put record into guildlog guild->LogGuildEvent(GUILD_EVENT_LOG_UNINVITE_PLAYER, GetPlayer()->GetGUIDLow(), GUID_LOPART(plGuid), 0); @@ -389,7 +389,8 @@ void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/) return; } - guild->DelMember(_player->GetGUID()); + guild->DelMember(_player->GetGUID(), false, false); + // Put record into guildlog guild->LogGuildEvent(GUILD_EVENT_LOG_LEAVE_GUILD, _player->GetGUIDLow(), 0, 0); |