aboutsummaryrefslogtreecommitdiff
path: root/src/game/MiscHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/MiscHandler.cpp')
-rw-r--r--src/game/MiscHandler.cpp160
1 files changed, 60 insertions, 100 deletions
diff --git a/src/game/MiscHandler.cpp b/src/game/MiscHandler.cpp
index 742cc69ff25..6d0c94fa0ef 100644
--- a/src/game/MiscHandler.cpp
+++ b/src/game/MiscHandler.cpp
@@ -485,42 +485,48 @@ void WorldSession::HandleAddFriendOpcode( WorldPacket & recv_data )
void WorldSession::HandleAddFriendOpcodeCallBack(QueryResult *result, uint32 accountId, std::string friendNote)
{
- if(!result)
- return;
-
- uint64 friendGuid = MAKE_NEW_GUID((*result)[0].GetUInt32(), 0, HIGHGUID_PLAYER);
- uint32 team = Player::TeamForRace((*result)[1].GetUInt8());
-
- delete result;
-
+ uint64 friendGuid;
+ uint32 team;
+ FriendsResult friendResult;
+
WorldSession * session = sWorld.FindSession(accountId);
+
if(!session || !session->GetPlayer())
return;
+
+ friendResult = FRIEND_NOT_FOUND;
+ friendGuid = 0;
- FriendsResult friendResult = FRIEND_NOT_FOUND;
- if(friendGuid)
+ if(result)
{
- 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
+ friendGuid = MAKE_NEW_GUID((*result)[0].GetUInt32(), 0, HIGHGUID_PLAYER);
+ team = Player::TeamForRace((*result)[1].GetUInt8());
+
+ delete result;
+
+ if(friendGuid)
{
- Player* pFriend = ObjectAccessor::FindPlayer(friendGuid);
- if( pFriend && pFriend->IsInWorld() && pFriend->IsVisibleGloballyFor(session->GetPlayer()))
- friendResult = FRIEND_ADDED_ONLINE;
+ 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
- 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());
- }
+ Player* pFriend = ObjectAccessor::FindPlayer(friendGuid);
+ 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);
+ }
}
}
@@ -569,31 +575,37 @@ void WorldSession::HandleAddIgnoreOpcode( WorldPacket & recv_data )
void WorldSession::HandleAddIgnoreOpcodeCallBack(QueryResult *result, uint32 accountId)
{
- if(!result)
- return;
-
- uint64 IgnoreGuid = MAKE_NEW_GUID((*result)[0].GetUInt32(), 0, HIGHGUID_PLAYER);
-
- delete result;
-
+ uint64 IgnoreGuid;
+ FriendsResult ignoreResult;
+
WorldSession * session = sWorld.FindSession(accountId);
+
if(!session || !session->GetPlayer())
return;
+
+ ignoreResult = FRIEND_IGNORE_NOT_FOUND;
+ IgnoreGuid = 0;
- FriendsResult ignoreResult = FRIEND_IGNORE_NOT_FOUND;
- if(IgnoreGuid)
+ if(result)
{
- if(IgnoreGuid==session->GetPlayer()->GetGUID()) //not add yourself
- ignoreResult = FRIEND_IGNORE_SELF;
- else if( session->GetPlayer()->GetSocial()->HasIgnore(GUID_LOPART(IgnoreGuid)) )
- ignoreResult = FRIEND_IGNORE_ALREADY;
- else
- {
- ignoreResult = FRIEND_IGNORE_ADDED;
+ IgnoreGuid = MAKE_NEW_GUID((*result)[0].GetUInt32(), 0, HIGHGUID_PLAYER);
+
+ delete result;
- // ignore list full
- if(!session->GetPlayer()->GetSocial()->AddToSocialList(GUID_LOPART(IgnoreGuid), true))
- ignoreResult = FRIEND_IGNORE_FULL;
+ if(IgnoreGuid)
+ {
+ if(IgnoreGuid==session->GetPlayer()->GetGUID()) //not add yourself
+ ignoreResult = FRIEND_IGNORE_SELF;
+ else if( session->GetPlayer()->GetSocial()->HasIgnore(GUID_LOPART(IgnoreGuid)) )
+ ignoreResult = FRIEND_IGNORE_ALREADY;
+ else
+ {
+ ignoreResult = FRIEND_IGNORE_ADDED;
+
+ // ignore list full
+ if(!session->GetPlayer()->GetSocial()->AddToSocialList(GUID_LOPART(IgnoreGuid), true))
+ ignoreResult = FRIEND_IGNORE_FULL;
+ }
}
}
@@ -842,60 +854,8 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket & recv_data)
if(!at)
return;
- if(!GetPlayer()->isGameMaster())
- {
- uint32 missingLevel = 0;
- if(GetPlayer()->getLevel() < at->requiredLevel && !sWorld.getConfig(CONFIG_INSTANCE_IGNORE_LEVEL))
- missingLevel = at->requiredLevel;
-
- // must have one or the other, report the first one that's missing
- uint32 missingItem = 0;
- if(at->requiredItem)
- {
- if(!GetPlayer()->HasItemCount(at->requiredItem, 1) &&
- (!at->requiredItem2 || !GetPlayer()->HasItemCount(at->requiredItem2, 1)))
- missingItem = at->requiredItem;
- }
- else if(at->requiredItem2 && !GetPlayer()->HasItemCount(at->requiredItem2, 1))
- missingItem = at->requiredItem2;
-
- uint32 missingKey = 0;
- uint32 missingHeroicQuest = 0;
- if(GetPlayer()->GetDifficulty() == DIFFICULTY_HEROIC)
- {
- if(at->heroicKey)
- {
- if(!GetPlayer()->HasItemCount(at->heroicKey, 1) &&
- (!at->heroicKey2 || !GetPlayer()->HasItemCount(at->heroicKey2, 1)))
- missingKey = at->heroicKey;
- }
- else if(at->heroicKey2 && !GetPlayer()->HasItemCount(at->heroicKey2, 1))
- missingKey = at->heroicKey2;
-
- if(at->heroicQuest && !GetPlayer()->GetQuestRewardStatus(at->heroicQuest))
- missingHeroicQuest = at->heroicQuest;
- }
-
- uint32 missingQuest = 0;
- if(at->requiredQuest && !GetPlayer()->GetQuestRewardStatus(at->requiredQuest))
- missingQuest = at->requiredQuest;
-
- if(missingLevel || missingItem || missingKey || missingQuest || missingHeroicQuest)
- {
- // TODO: all this is probably wrong
- if(missingItem)
- SendAreaTriggerMessage(GetTrinityString(LANG_LEVEL_MINREQUIRED_AND_ITEM), at->requiredLevel, objmgr.GetItemPrototype(missingItem)->Name1);
- else if(missingKey)
- GetPlayer()->SendTransferAborted(at->target_mapId, TRANSFER_ABORT_DIFFICULTY2);
- else if(missingHeroicQuest)
- SendAreaTriggerMessage(at->heroicQuestFailedText.c_str());
- else if(missingQuest)
- SendAreaTriggerMessage(at->requiredFailedText.c_str());
- else if(missingLevel)
- SendAreaTriggerMessage(GetTrinityString(LANG_LEVEL_MINREQUIRED), missingLevel);
- return;
- }
- }
+ if(!GetPlayer()->Satisfy(objmgr.GetAccessRequirement(at->access_id), at->target_mapId, true))
+ return;
GetPlayer()->TeleportTo(at->target_mapId,at->target_X,at->target_Y,at->target_Z,at->target_Orientation,TELE_TO_NOT_LEAVE_TRANSPORT);
}