fix(Core/Players): Players should nt able to rest in unfriendly taver… (#13493)
* fix(Core/Players): Players should nt able to rest in unfriendly taverns. Original author: @Rushor Fixes #13459 * Update.
This commit is contained in:
@@ -0,0 +1,126 @@
|
|||||||
|
--
|
||||||
|
ALTER TABLE `areatrigger_tavern` ADD COLUMN `faction` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `name`;
|
||||||
|
|
||||||
|
SET @FACTION_ALLIANCE := 2;
|
||||||
|
SET @FACTION_HORDE := 4;
|
||||||
|
SET @FACTION_BOTH := 6;
|
||||||
|
|
||||||
|
UPDATE `areatrigger_tavern` SET `faction` = @FACTION_ALLIANCE WHERE `id` IN (
|
||||||
|
71,
|
||||||
|
562,
|
||||||
|
682,
|
||||||
|
707,
|
||||||
|
708,
|
||||||
|
709,
|
||||||
|
710,
|
||||||
|
712,
|
||||||
|
713,
|
||||||
|
715,
|
||||||
|
716,
|
||||||
|
717,
|
||||||
|
1024,
|
||||||
|
1042,
|
||||||
|
2266,
|
||||||
|
2786,
|
||||||
|
4090,
|
||||||
|
4240,
|
||||||
|
4241,
|
||||||
|
4337,
|
||||||
|
4374,
|
||||||
|
4376,
|
||||||
|
4377,
|
||||||
|
4381,
|
||||||
|
4383,
|
||||||
|
4499,
|
||||||
|
4961,
|
||||||
|
4964,
|
||||||
|
4965,
|
||||||
|
4966,
|
||||||
|
4993,
|
||||||
|
4528,
|
||||||
|
4558,
|
||||||
|
4753,
|
||||||
|
4756,
|
||||||
|
4769,
|
||||||
|
4867,
|
||||||
|
5182);
|
||||||
|
|
||||||
|
UPDATE `areatrigger_tavern` SET `faction` = @FACTION_HORDE WHERE `id` IN (
|
||||||
|
178,
|
||||||
|
719,
|
||||||
|
720,
|
||||||
|
721,
|
||||||
|
722,
|
||||||
|
742,
|
||||||
|
843,
|
||||||
|
844,
|
||||||
|
862,
|
||||||
|
982,
|
||||||
|
1022,
|
||||||
|
1025,
|
||||||
|
1606,
|
||||||
|
1646,
|
||||||
|
2267,
|
||||||
|
2286,
|
||||||
|
2610,
|
||||||
|
3547,
|
||||||
|
3690,
|
||||||
|
3886,
|
||||||
|
4108,
|
||||||
|
4109,
|
||||||
|
4265,
|
||||||
|
4336,
|
||||||
|
4373,
|
||||||
|
4375,
|
||||||
|
4378,
|
||||||
|
4380,
|
||||||
|
4486,
|
||||||
|
4494,
|
||||||
|
4526,
|
||||||
|
5323,
|
||||||
|
5360,
|
||||||
|
4967,
|
||||||
|
4970,
|
||||||
|
4979,
|
||||||
|
4868,
|
||||||
|
4910,
|
||||||
|
5045,
|
||||||
|
4861,
|
||||||
|
4775,
|
||||||
|
4755,
|
||||||
|
4595);
|
||||||
|
|
||||||
|
UPDATE `areatrigger_tavern` SET `faction` = @FACTION_BOTH WHERE `id` IN (
|
||||||
|
98,
|
||||||
|
743,
|
||||||
|
1023,
|
||||||
|
2287,
|
||||||
|
3985,
|
||||||
|
4058,
|
||||||
|
4300,
|
||||||
|
4382,
|
||||||
|
4498,
|
||||||
|
4521,
|
||||||
|
4555,
|
||||||
|
4577,
|
||||||
|
5183,
|
||||||
|
5200,
|
||||||
|
5204,
|
||||||
|
5217,
|
||||||
|
5227,
|
||||||
|
5314,
|
||||||
|
5315,
|
||||||
|
5316,
|
||||||
|
5317,
|
||||||
|
5327,
|
||||||
|
5062,
|
||||||
|
5164,
|
||||||
|
5030,
|
||||||
|
4975,
|
||||||
|
4976,
|
||||||
|
4977,
|
||||||
|
4607,
|
||||||
|
4608,
|
||||||
|
4640,
|
||||||
|
4714,
|
||||||
|
4847);
|
||||||
@@ -6320,7 +6320,7 @@ void ObjectMgr::LoadTavernAreaTriggers()
|
|||||||
|
|
||||||
_tavernAreaTriggerStore.clear(); // need for reload case
|
_tavernAreaTriggerStore.clear(); // need for reload case
|
||||||
|
|
||||||
QueryResult result = WorldDatabase.Query("SELECT id FROM areatrigger_tavern");
|
QueryResult result = WorldDatabase.Query("SELECT id, faction FROM areatrigger_tavern");
|
||||||
|
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
@@ -6346,7 +6346,9 @@ void ObjectMgr::LoadTavernAreaTriggers()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
_tavernAreaTriggerStore.insert(Trigger_ID);
|
uint32 faction = fields[1].Get<uint32>();
|
||||||
|
|
||||||
|
_tavernAreaTriggerStore.emplace(Trigger_ID, faction);
|
||||||
} while (result->NextRow());
|
} while (result->NextRow());
|
||||||
|
|
||||||
LOG_INFO("server.loading", ">> Loaded {} Tavern Triggers in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
|
LOG_INFO("server.loading", ">> Loaded {} Tavern Triggers in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
|
||||||
|
|||||||
@@ -840,9 +840,15 @@ public:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] bool IsTavernAreaTrigger(uint32 Trigger_ID) const
|
[[nodiscard]] bool IsTavernAreaTrigger(uint32 triggerID, uint32 faction) const
|
||||||
{
|
{
|
||||||
return _tavernAreaTriggerStore.find(Trigger_ID) != _tavernAreaTriggerStore.end();
|
auto itr = _tavernAreaTriggerStore.find(triggerID);
|
||||||
|
if (itr != _tavernAreaTriggerStore.end())
|
||||||
|
{
|
||||||
|
return (itr->second & faction) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] GossipText const* GetGossipText(uint32 Text_ID) const;
|
[[nodiscard]] GossipText const* GetGossipText(uint32 Text_ID) const;
|
||||||
@@ -1448,7 +1454,7 @@ private:
|
|||||||
|
|
||||||
typedef std::unordered_map<uint32, GossipText> GossipTextContainer;
|
typedef std::unordered_map<uint32, GossipText> GossipTextContainer;
|
||||||
typedef std::unordered_map<uint32, uint32> QuestAreaTriggerContainer;
|
typedef std::unordered_map<uint32, uint32> QuestAreaTriggerContainer;
|
||||||
typedef std::set<uint32> TavernAreaTriggerContainer;
|
typedef std::unordered_map<uint32, uint32> TavernAreaTriggerContainer;
|
||||||
|
|
||||||
QuestAreaTriggerContainer _questAreaTriggerStore;
|
QuestAreaTriggerContainer _questAreaTriggerStore;
|
||||||
TavernAreaTriggerContainer _tavernAreaTriggerStore;
|
TavernAreaTriggerContainer _tavernAreaTriggerStore;
|
||||||
|
|||||||
@@ -747,7 +747,8 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recv_data)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isTavernAreatrigger = sObjectMgr->IsTavernAreaTrigger(triggerId);
|
uint32 teamFaction = player->GetTeamId(true) == TEAM_ALLIANCE ? FACTION_MASK_ALLIANCE : FACTION_MASK_HORDE;
|
||||||
|
bool isTavernAreatrigger = sObjectMgr->IsTavernAreaTrigger(triggerId, teamFaction);
|
||||||
if (!player->IsInAreaTriggerRadius(atEntry, isTavernAreatrigger ? 5.f : 0.f))
|
if (!player->IsInAreaTriggerRadius(atEntry, isTavernAreatrigger ? 5.f : 0.f))
|
||||||
{
|
{
|
||||||
LOG_DEBUG("network", "HandleAreaTriggerOpcode: Player {} ({}) too far (trigger map: {} player map: {}), ignore Area Trigger ID: {}",
|
LOG_DEBUG("network", "HandleAreaTriggerOpcode: Player {} ({}) too far (trigger map: {} player map: {}), ignore Area Trigger ID: {}",
|
||||||
|
|||||||
Reference in New Issue
Block a user