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:
UltraNix
2022-10-29 12:15:18 +02:00
committed by GitHub
parent b50675dbe9
commit f3820bd375
4 changed files with 141 additions and 6 deletions

View File

@@ -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);

View File

@@ -6320,7 +6320,7 @@ void ObjectMgr::LoadTavernAreaTriggers()
_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)
{
@@ -6346,7 +6346,9 @@ void ObjectMgr::LoadTavernAreaTriggers()
continue;
}
_tavernAreaTriggerStore.insert(Trigger_ID);
uint32 faction = fields[1].Get<uint32>();
_tavernAreaTriggerStore.emplace(Trigger_ID, faction);
} while (result->NextRow());
LOG_INFO("server.loading", ">> Loaded {} Tavern Triggers in {} ms", count, GetMSTimeDiffToNow(oldMSTime));

View File

@@ -840,9 +840,15 @@ public:
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;
@@ -1448,7 +1454,7 @@ private:
typedef std::unordered_map<uint32, GossipText> GossipTextContainer;
typedef std::unordered_map<uint32, uint32> QuestAreaTriggerContainer;
typedef std::set<uint32> TavernAreaTriggerContainer;
typedef std::unordered_map<uint32, uint32> TavernAreaTriggerContainer;
QuestAreaTriggerContainer _questAreaTriggerStore;
TavernAreaTriggerContainer _tavernAreaTriggerStore;

View File

@@ -747,7 +747,8 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recv_data)
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))
{
LOG_DEBUG("network", "HandleAreaTriggerOpcode: Player {} ({}) too far (trigger map: {} player map: {}), ignore Area Trigger ID: {}",