* Various functions to broadcast output to GMs only - Patch by Machiavelli

--HG--
branch : trunk
This commit is contained in:
Blaymoira
2008-12-22 21:56:16 +01:00
parent 5313601ea6
commit 5ca3aacaaf
7 changed files with 182 additions and 59 deletions

View File

@@ -2273,6 +2273,23 @@ void World::SendGlobalMessage(WorldPacket *packet, WorldSession *self, uint32 te
}
}
void World::SendGlobalGMMessage(WorldPacket *packet, WorldSession *self, uint32 team)
{
SessionMap::iterator itr;
for (itr = m_sessions.begin(); itr != m_sessions.end(); itr++)
{
if (itr->second &&
itr->second->GetPlayer() &&
itr->second->GetPlayer()->IsInWorld() &&
itr->second != self &&
itr->second->GetSecurity() >SEC_PLAYER &&
(team == 0 || itr->second->GetPlayer()->GetTeam() == team) )
{
itr->second->SendPacket(packet);
}
}
}
/// Send a System Message to all players (except self if mentioned)
void World::SendWorldText(int32 string_id, ...)
{
@@ -2327,6 +2344,60 @@ void World::SendWorldText(int32 string_id, ...)
delete data_cache[i][j];
}
void World::SendGMText(int32 string_id, ...)
{
std::vector<std::vector<WorldPacket*> > data_cache; // 0 = default, i => i-1 locale index
for(SessionMap::iterator itr = m_sessions.begin(); itr != m_sessions.end(); ++itr)
{
if(!itr->second || !itr->second->GetPlayer() || !itr->second->GetPlayer()->IsInWorld() )
continue;
uint32 loc_idx = itr->second->GetSessionDbLocaleIndex();
uint32 cache_idx = loc_idx+1;
std::vector<WorldPacket*>* data_list;
// create if not cached yet
if(data_cache.size() < cache_idx+1 || data_cache[cache_idx].empty())
{
if(data_cache.size() < cache_idx+1)
data_cache.resize(cache_idx+1);
data_list = &data_cache[cache_idx];
char const* text = objmgr.GetTrinityString(string_id,loc_idx);
char buf[1000];
va_list argptr;
va_start( argptr, string_id );
vsnprintf( buf,1000, text, argptr );
va_end( argptr );
char* pos = &buf[0];
while(char* line = ChatHandler::LineFromMessage(pos))
{
WorldPacket* data = new WorldPacket();
ChatHandler::FillMessageData(data, NULL, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, NULL, 0, line, NULL);
data_list->push_back(data);
}
}
else
data_list = &data_cache[cache_idx];
for(int i = 0; i < data_list->size(); ++i)
if(itr->second->GetSecurity()>0)
itr->second->SendPacket((*data_list)[i]);
}
// free memory
for(int i = 0; i < data_cache.size(); ++i)
for(int j = 0; j < data_cache[i].size(); ++j)
delete data_cache[i][j];
}
/// Send a System Message to all players (except self if mentioned)
void World::SendGlobalText(const char* text, WorldSession *self)
{