New server options to block adding GMs to friends by players and to block inviting GMs to parties

--HG--
branch : trunk
This commit is contained in:
Genars & Aokromes
2009-05-14 23:07:17 +02:00
parent 419c448bc9
commit 80a6d723f5
5 changed files with 44 additions and 20 deletions
+6
View File
@@ -83,6 +83,12 @@ void WorldSession::HandleGroupInviteOpcode( WorldPacket & recv_data )
return; return;
} }
// restrict invite to GMs
if (!sWorld.getConfig(CONFIG_ALLOW_GM_GROUP) && !GetPlayer()->isGameMaster() && player->isGameMaster())
{
SendPartyResult(PARTY_OP_INVITE, membername, PARTY_RESULT_CANT_FIND_TARGET);
return;
}
// can't group with // can't group with
if(!sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && GetPlayer()->GetTeam() != player->GetTeam()) if(!sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && GetPlayer()->GetTeam() != player->GetTeam())
{ {
+22 -19
View File
@@ -46,6 +46,7 @@
#include "Pet.h" #include "Pet.h"
#include "SocialMgr.h" #include "SocialMgr.h"
#include "CellImpl.h" #include "CellImpl.h"
#include "AccountMgr.h"
void WorldSession::HandleRepopRequestOpcode( WorldPacket & /*recv_data*/ ) void WorldSession::HandleRepopRequestOpcode( WorldPacket & /*recv_data*/ )
{ {
@@ -555,12 +556,13 @@ void WorldSession::HandleAddFriendOpcode( WorldPacket & recv_data )
sLog.outDebug( "WORLD: %s asked to add friend : '%s'", sLog.outDebug( "WORLD: %s asked to add friend : '%s'",
GetPlayer()->GetName(), friendName.c_str() ); GetPlayer()->GetName(), friendName.c_str() );
CharacterDatabase.AsyncPQuery(&WorldSession::HandleAddFriendOpcodeCallBack, GetAccountId(), friendNote, "SELECT guid, race FROM characters WHERE name = '%s'", friendName.c_str()); CharacterDatabase.AsyncPQuery(&WorldSession::HandleAddFriendOpcodeCallBack, GetAccountId(), friendNote, "SELECT guid, race, account FROM characters WHERE name = '%s'", friendName.c_str());
} }
void WorldSession::HandleAddFriendOpcodeCallBack(QueryResult *result, uint32 accountId, std::string friendNote) void WorldSession::HandleAddFriendOpcodeCallBack(QueryResult *result, uint32 accountId, std::string friendNote)
{ {
uint64 friendGuid; uint64 friendGuid;
uint64 friendAcctid;
uint32 team; uint32 team;
FriendsResult friendResult; FriendsResult friendResult;
@@ -576,33 +578,34 @@ void WorldSession::HandleAddFriendOpcodeCallBack(QueryResult *result, uint32 acc
{ {
friendGuid = MAKE_NEW_GUID((*result)[0].GetUInt32(), 0, HIGHGUID_PLAYER); friendGuid = MAKE_NEW_GUID((*result)[0].GetUInt32(), 0, HIGHGUID_PLAYER);
team = Player::TeamForRace((*result)[1].GetUInt8()); team = Player::TeamForRace((*result)[1].GetUInt8());
friendAcctid = (*result)[2].GetUInt32();
delete result; delete result;
if(friendGuid) if ( session->GetSecurity() >= SEC_MODERATOR || sWorld.getConfig(CONFIG_ALLOW_GM_FRIEND) || accmgr.GetSecurity(friendAcctid) < SEC_MODERATOR)
{ if(friendGuid)
if(friendGuid==session->GetPlayer()->GetGUID())
friendResult = FRIEND_SELF;
else if(session->GetPlayer()->GetTeam() != team && !sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_ADD_FRIEND) && session->GetSecurity() < SEC_MODERATOR)
friendResult = FRIEND_ENEMY;
else if(session->GetPlayer()->GetSocial()->HasFriend(GUID_LOPART(friendGuid)))
friendResult = FRIEND_ALREADY;
else
{ {
Player* pFriend = ObjectAccessor::FindPlayer(friendGuid); if(friendGuid==session->GetPlayer()->GetGUID())
if( pFriend && pFriend->IsInWorld() && pFriend->IsVisibleGloballyFor(session->GetPlayer())) friendResult = FRIEND_SELF;
friendResult = FRIEND_ADDED_ONLINE; else if(session->GetPlayer()->GetTeam() != team && !sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_ADD_FRIEND) && session->GetSecurity() < SEC_MODERATOR)
friendResult = FRIEND_ENEMY;
else if(session->GetPlayer()->GetSocial()->HasFriend(GUID_LOPART(friendGuid)))
friendResult = FRIEND_ALREADY;
else else
friendResult = FRIEND_ADDED_OFFLINE;
if(!session->GetPlayer()->GetSocial()->AddToSocialList(GUID_LOPART(friendGuid), false))
{ {
friendResult = FRIEND_LIST_FULL; Player* pFriend = ObjectAccessor::FindPlayer(friendGuid);
sLog.outDebug( "WORLD: %s's friend list is full.", session->GetPlayer()->GetName()); if( pFriend && pFriend->IsInWorld() && pFriend->IsVisibleGloballyFor(session->GetPlayer()))
friendResult = FRIEND_ADDED_ONLINE;
else
friendResult = FRIEND_ADDED_OFFLINE;
if(!session->GetPlayer()->GetSocial()->AddToSocialList(GUID_LOPART(friendGuid), false))
{
friendResult = FRIEND_LIST_FULL;
sLog.outDebug( "WORLD: %s's friend list is full.", session->GetPlayer()->GetName());
}
} }
session->GetPlayer()->GetSocial()->SetFriendNote(GUID_LOPART(friendGuid), friendNote); session->GetPlayer()->GetSocial()->SetFriendNote(GUID_LOPART(friendGuid), friendNote);
} }
}
} }
sSocialMgr.SendFriendStatus(session->GetPlayer(), friendResult, GUID_LOPART(friendGuid), false); sSocialMgr.SendFriendStatus(session->GetPlayer(), friendResult, GUID_LOPART(friendGuid), false);
+3 -1
View File
@@ -768,7 +768,9 @@ void World::LoadConfigSettings(bool reload)
m_configs[CONFIG_GM_IN_GM_LIST] = sConfig.GetBoolDefault("GM.InGMList",false); m_configs[CONFIG_GM_IN_GM_LIST] = sConfig.GetBoolDefault("GM.InGMList",false);
m_configs[CONFIG_GM_IN_WHO_LIST] = sConfig.GetBoolDefault("GM.InWhoList",false); m_configs[CONFIG_GM_IN_WHO_LIST] = sConfig.GetBoolDefault("GM.InWhoList",false);
m_configs[CONFIG_GM_LOG_TRADE] = sConfig.GetBoolDefault("GM.LogTrade", false); m_configs[CONFIG_GM_LOG_TRADE] = sConfig.GetBoolDefault("GM.LogTrade", false);
m_configs[CONFIG_START_GM_LEVEL] = sConfig.GetIntDefault("GM.StartLevel", 1); m_configs[CONFIG_START_GM_LEVEL] = sConfig.GetIntDefault("GM.StartLevel", 1);
m_configs[CONFIG_ALLOW_GM_GROUP] = sConfig.GetBoolDefault("GM.AllowInvite", false);
m_configs[CONFIG_ALLOW_GM_FRIEND] = sConfig.GetBoolDefault("GM.AllowFriend", false);
if(m_configs[CONFIG_START_GM_LEVEL] < m_configs[CONFIG_START_PLAYER_LEVEL]) if(m_configs[CONFIG_START_GM_LEVEL] < m_configs[CONFIG_START_PLAYER_LEVEL])
{ {
sLog.outError("GM.StartLevel (%i) must be in range StartPlayerLevel(%u)..%u. Set to %u.", sLog.outError("GM.StartLevel (%i) must be in range StartPlayerLevel(%u)..%u. Set to %u.",
+2
View File
@@ -130,6 +130,8 @@ enum WorldConfigs
CONFIG_GM_IN_WHO_LIST, CONFIG_GM_IN_WHO_LIST,
CONFIG_GM_LOG_TRADE, CONFIG_GM_LOG_TRADE,
CONFIG_START_GM_LEVEL, CONFIG_START_GM_LEVEL,
CONFIG_ALLOW_GM_GROUP,
CONFIG_ALLOW_GM_FRIEND,
CONFIG_GROUP_VISIBILITY, CONFIG_GROUP_VISIBILITY,
CONFIG_MAIL_DELIVERY_DELAY, CONFIG_MAIL_DELIVERY_DELAY,
CONFIG_UPTIME_UPDATE, CONFIG_UPTIME_UPDATE,
+11
View File
@@ -884,6 +884,15 @@ Channel.SilentlyGMJoin = 0
# GM starting level (1-255) # GM starting level (1-255)
# Default: 1 # Default: 1
# #
# GM.AllowInvite
# Is GM accepting invites from players by default or not
# Default: 0 (false)
# 1 (true)
#
# GM.AllowFriend
# Are players allowed to add GMs to their friend list
# Default: 0 (false)
# 1 (true)
################################################################################################################### ###################################################################################################################
GM.LoginState = 2 GM.LoginState = 2
@@ -894,6 +903,8 @@ GM.InGMList = 0
GM.InWhoList = 0 GM.InWhoList = 0
GM.LogTrade = 1 GM.LogTrade = 1
GM.StartLevel = 70 GM.StartLevel = 70
GM.AllowInvite = 0
GM.AllowFriend = 0
################################################################################################################### ###################################################################################################################
# VISIBILITY AND RADIUSES # VISIBILITY AND RADIUSES