bool Player::SendBattleGroundChat(uint32 msgtype, std::string message) { // Select distance to broadcast to. float distance = msgtype == CHAT_MSG_SAY ? sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY) : sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_YELL); if (Battleground* pBattleGround = GetBattleground()) { if (pBattleGround->isArena()) // Only fake chat in BG's. CFBG should not interfere with arenas. return false; for (Battleground::BattlegroundPlayerMap::const_iterator itr = pBattleGround->GetPlayers().begin(); itr != pBattleGround->GetPlayers().end(); ++itr) { if (Player* pPlayer = ObjectAccessor::FindPlayer(itr->first)) { if (GetDistance2d(pPlayer->GetPositionX(), pPlayer->GetPositionY()) <= distance) { WorldPacket data(SMSG_MESSAGECHAT, 200); if (GetTeam() == pPlayer->GetTeam()) BuildPlayerChat(&data, msgtype, message, LANG_UNIVERSAL); else if (msgtype != CHAT_MSG_EMOTE) BuildPlayerChat(&data, msgtype, message, pPlayer->GetTeam() == ALLIANCE ? LANG_ORCISH : LANG_COMMON); pPlayer->GetSession()->SendPacket(&data); } } } return true; } else return false; }
bool CPlayer::SendBattleGroundChat(ChatMsg msgtype, std::string message) { // Select distance to broadcast to. float distance = sWorld.getConfig(CONFIG_FLOAT_LISTEN_RANGE_SAY); if (msgtype == CHAT_MSG_YELL) sWorld.getConfig(CONFIG_FLOAT_LISTEN_RANGE_YELL); else if (msgtype == CHAT_MSG_EMOTE) sWorld.getConfig(CONFIG_FLOAT_LISTEN_RANGE_TEXTEMOTE); BattleGround* pBattleGround = GetBattleGround(); if (!pBattleGround || pBattleGround->isArena()) // Only fake chat in BG's. CFBG should not interfere with arenas. return false; for (auto& itr : pBattleGround->GetPlayers()) { if (Player* pPlayer = sObjectMgr.GetPlayer(itr.first)) { if (GetDistance2d(pPlayer->GetPositionX(), pPlayer->GetPositionY()) <= distance) { WorldPacket data(SMSG_MESSAGECHAT, 200); if (GetTeam() == pPlayer->GetTeam()) ChatHandler::BuildChatPacket(data, msgtype, message.c_str(), LANG_UNIVERSAL, GetChatTag(), GetObjectGuid(), GetName()); else if (msgtype != CHAT_MSG_EMOTE) ChatHandler::BuildChatPacket(data, msgtype, message.c_str(), pPlayer->GetOTeam() == ALLIANCE ? LANG_ORCISH : LANG_COMMON, GetChatTag(), GetObjectGuid(), GetName()); pPlayer->GetSession()->SendPacket(&data); } } } return true; }
bool Player::OnSurvey(uint32& entry, float& x, float& y, float& z, float &orientation) { entry = 0; uint16 skill_now = GetSkillValue(SKILL_ARCHAEOLOGY); if (!skill_now) return false; uint16 site_id = GetResearchSiteID(); if (!site_id) return false; uint8 i = 0; for(; i < MAX_RESEARCH_SITES; ++i) if (GetUInt16Value(PLAYER_FIELD_RESERACH_SITE_1 + i / 2, i % 2) == site_id) break; MANGOS_ASSERT(i < MAX_RESEARCH_SITES); DigSite &site = _digSites[i]; if (site.site_id != site_id) { if (!GenerateDigSiteLoot(site_id, site)) return false; site.site_id = site_id; } orientation = GetAngle(site.loot_x, site.loot_y); float dist_now = GetDistance2d(site.loot_x, site.loot_y); if (dist_now >= ARCHAEOLOGY_DIG_SITE_FAR_DIST) { entry = GO_FAR_SURVEYBOT; return false; } if (dist_now >= ARCHAEOLOGY_DIG_SITE_MED_DIST) { entry = GO_MEDIUM_SURVEYBOT; return false; } if (dist_now >= ARCHAEOLOGY_DIG_SITE_FIND_DIST) { entry = GO_CLOSE_SURVEYBOT; return false; } if (skill_now < 50) UpdateSkill(SKILL_ARCHAEOLOGY, 1); entry = site.find_id; x = site.loot_x; y = site.loot_y; z = GetMap()->GetTerrain()->GetHeightStatic(x, y, GetPositionZ(), true, 5); if (site.count < 2) { ++site.count; if (!GenerateDigSiteLoot(site_id, site)) return true; } else { site.clear(); UseResearchSite(site_id); } _archaeologyChanged = true; return true; }