aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsilinoron <none@none>2010-08-14 12:17:05 -0700
committersilinoron <none@none>2010-08-14 12:17:05 -0700
commit8d0a0584118ec7b6f763a8ebc059a8dfc1d5536e (patch)
treee250ed865bd30a7d393af1551c9f2039df406b41 /src
parentd1d7c64c4363061a1f9504ac6d22351c78718c11 (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.cpp2
-rw-r--r--src/server/game/Chat/Commands/Level3.cpp3
-rw-r--r--src/server/game/Guilds/Guild.cpp14
-rw-r--r--src/server/game/Guilds/Guild.h2
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp25
-rw-r--r--src/server/game/Scripting/ScriptMgr.h23
-rw-r--r--src/server/game/Server/Protocol/Handlers/GuildHandler.cpp5
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);