From a7cd1168802de5fa5fc19a8e31ab2877312af4b4 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Fri, 4 Nov 2022 17:23:18 -0300 Subject: [PATCH 01/30] fix(Scripts/TempleOfAhnQiraj): Replace Sartura's Gaze mechanic with a threat wipe (#13691) Update boss_sartura.cpp --- .../Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp index 75f1126b8..190c8eb93 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp @@ -105,7 +105,7 @@ struct boss_sartura : public BossAI void UpdateAI(uint32 diff) override { - if (!UpdateVictimWithGaze()) + if (!UpdateVictim()) return; events.Update(diff); @@ -117,7 +117,8 @@ struct boss_sartura : public BossAI case EVENT_SARTURA_WHIRLWIND: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 100.0f, true)) { - SetGazeOn(target); + me->GetThreatMgr().ResetAllThreat(); + me->AddThreat(target, 1000.0f); } DoCastSelf(SPELL_WHIRLWIND); events.ScheduleEvent(EVENT_SARTURA_WHIRLWIND_RANDOM, 2s, 7s); @@ -126,11 +127,13 @@ struct boss_sartura : public BossAI case EVENT_SARTURA_WHIRLWIND_RANDOM: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true)) { - SetGazeOn(target); + me->GetThreatMgr().ResetAllThreat(); + me->AddThreat(target, 1000.0f); } events.Repeat(2s, 7s); break; case EVENT_SARTURA_WHIRLWIND_END: + me->GetThreatMgr().ResetAllThreat(); me->SetReactState(REACT_AGGRESSIVE); events.CancelEvent(EVENT_SARTURA_WHIRLWIND_RANDOM); events.ScheduleEvent(EVENT_SARTURA_WHIRLWIND, 5s, 11s); @@ -186,7 +189,7 @@ struct npc_sartura_royal_guard : public ScriptedAI void UpdateAI(uint32 diff) override { - if (!UpdateVictimWithGaze()) + if (!UpdateVictim()) return; events.Update(diff); @@ -198,7 +201,8 @@ struct npc_sartura_royal_guard : public ScriptedAI case EVENT_GUARD_WHIRLWIND: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 100.0f, true)) { - SetGazeOn(target); + me->GetThreatMgr().ResetAllThreat(); + me->AddThreat(target, 1000.0f); } DoCastSelf(SPELL_GUARD_WHIRLWIND); events.ScheduleEvent(EVENT_GUARD_WHIRLWIND_RANDOM, 2s, 7s); @@ -207,11 +211,13 @@ struct npc_sartura_royal_guard : public ScriptedAI case EVENT_GUARD_WHIRLWIND_RANDOM: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true)) { - SetGazeOn(target); + me->GetThreatMgr().ResetAllThreat(); + me->AddThreat(target, 1000.0f); } events.Repeat(2s, 7s); break; case EVENT_GUARD_WHIRLWIND_END: + me->GetThreatMgr().ResetAllThreat(); me->SetReactState(REACT_AGGRESSIVE); events.CancelEvent(EVENT_GUARD_WHIRLWIND_RANDOM); events.ScheduleEvent(EVENT_GUARD_WHIRLWIND, 500ms, 9s); From fc914f03f186099fe5c583b2020e0cb284573b3f Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Fri, 4 Nov 2022 17:55:06 -0300 Subject: [PATCH 02/30] fix(Scripts/TempleOfAhnQiraj): Fix Ouro not using abilities if there's only one player and he's out of his melee range (#13692) fix(Scripts/TempleOfAhnQiraj): Fix Ouro not using abilities if --- src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp index 6b8d086ac..85b20099a 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp @@ -292,9 +292,7 @@ struct boss_ouro : public BossAI void UpdateAI(uint32 diff) override { - //Return since we have no target - if (!UpdateVictim()) - return; + UpdateVictim(); _scheduler.Update(diff, [this] { From 6cb85d2ff426d395030674a00678fa7bee8af7a0 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Fri, 4 Nov 2022 19:17:50 -0300 Subject: [PATCH 03/30] =?UTF-8?q?fix(Scripts/TempleOfAhnQiraj):=20Fix=20cr?= =?UTF-8?q?ash=20caused=20by=20permanently=20spawni=E2=80=A6=20(#13698)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(Scripts/TempleOfAhnQiraj): Fix crash caused by permanently spawning a tentacle --- .../Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp | 72 ++++++++++--------- 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp index e5e6fab05..b1d1fc203 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp @@ -602,11 +602,14 @@ struct npc_eye_tentacle : public ScriptedAI portal->SetReactState(REACT_PASSIVE); _portalGUID = portal->GetGUID(); - if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit()) + if (me->ToTempSummon()) { - if (Creature* creature = summoner->ToCreature()) + if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit()) { - creature->AI()->JustSummoned(portal); + if (Creature* creature = summoner->ToCreature()) + { + creature->AI()->JustSummoned(portal); + } } } } @@ -673,11 +676,14 @@ struct npc_claw_tentacle : public ScriptedAI portal->SetReactState(REACT_PASSIVE); _portalGUID = portal->GetGUID(); - if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit()) + if (me->ToTempSummon()) { - if (Creature* creature = summoner->ToCreature()) + if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit()) { - creature->AI()->JustSummoned(portal); + if (Creature* creature = summoner->ToCreature()) + { + creature->AI()->JustSummoned(portal); + } } } } @@ -740,11 +746,14 @@ struct npc_giant_claw_tentacle : public ScriptedAI portal->SetReactState(REACT_PASSIVE); _portalGUID = portal->GetGUID(); - if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit()) + if (me->ToTempSummon()) { - if (Creature* creature = summoner->ToCreature()) + if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit()) { - creature->AI()->JustSummoned(portal); + if (Creature* creature = summoner->ToCreature()) + { + creature->AI()->JustSummoned(portal); + } } } } @@ -771,24 +780,10 @@ struct npc_giant_claw_tentacle : public ScriptedAI void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); - - _scheduler.Schedule(2s, [this](TaskContext context) - { - DoCastVictim(SPELL_HAMSTRING); - context.Repeat(10s); - }).Schedule(5s, [this](TaskContext context) - { - DoCastSelf(SPELL_THRASH); - context.Repeat(10s); - }).Schedule(3s, [this](TaskContext /*context*/) - { - _canAttack = true; - }); - - ScheduleMeleeCheck(); + ScheduleTasks(); } - void ScheduleMeleeCheck() + void ScheduleTasks() { // Check if a target is in melee range _scheduler.Schedule(10s, [this](TaskContext task) @@ -810,6 +805,17 @@ struct npc_giant_claw_tentacle : public ScriptedAI } task.Repeat(); + }).Schedule(2s, [this](TaskContext context) + { + DoCastVictim(SPELL_HAMSTRING); + context.Repeat(10s); + }).Schedule(5s, [this](TaskContext context) + { + DoCastSelf(SPELL_THRASH); + context.Repeat(10s); + }).Schedule(3s, [this](TaskContext /*context*/) + { + _canAttack = true; }); } @@ -856,13 +862,8 @@ struct npc_giant_claw_tentacle : public ScriptedAI DoCastAOE(SPELL_MASSIVE_GROUND_RUPTURE, true); me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); - ScheduleMeleeCheck(); + ScheduleTasks(); } - - _scheduler.Schedule(3s, [this](TaskContext /*context*/) - { - _canAttack = true; - }); } void UpdateAI(uint32 diff) override @@ -896,11 +897,14 @@ struct npc_giant_eye_tentacle : public ScriptedAI portal->SetReactState(REACT_PASSIVE); _portalGUID = portal->GetGUID(); - if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit()) + if (me->ToTempSummon()) { - if (Creature* creature = summoner->ToCreature()) + if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit()) { - creature->AI()->JustSummoned(portal); + if (Creature* creature = summoner->ToCreature()) + { + creature->AI()->JustSummoned(portal); + } } } } From 5c88f9269e2f38ed7a7db48cac6101bc36969b20 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Fri, 4 Nov 2022 19:24:57 -0300 Subject: [PATCH 04/30] fix(Scripts/TempleOfAhnQiraj): Don't store object references in scripts (#13694) --- .../TempleOfAhnQiraj/temple_of_ahnqiraj.cpp | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp index b30d52c6a..532c1c5f9 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp @@ -243,14 +243,14 @@ struct npc_obsidian_eradicator : public ScriptedAI { _scheduler.CancelAll(); me->SetPower(POWER_MANA, 0); - _targets.clear(); + _targetGUIDs.clear(); } void EnterCombat(Unit* /*who*/) override { _scheduler.Schedule(3500ms, [this](TaskContext context) { - if (_targets.empty()) + if (_targetGUIDs.empty()) { Map::PlayerList const& players = me->GetMap()->GetPlayers(); for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) @@ -259,17 +259,20 @@ struct npc_obsidian_eradicator : public ScriptedAI { if (player->IsAlive() && !player->IsGameMaster() && !player->IsSpectator() && player->GetPower(POWER_MANA) > 0) { - _targets.push_back(player); + _targetGUIDs.push_back(player->GetGUID()); } } } - Acore::Containers::RandomResize(_targets, 10); + Acore::Containers::RandomResize(_targetGUIDs, 10); } - for (Unit* target : _targets) + for (ObjectGuid guid : _targetGUIDs) { - DoCast(target, SPELL_DRAIN_MANA_ERADICATOR, true); + if (Unit* target = ObjectAccessor::GetUnit(*me, guid)) + { + DoCast(target, SPELL_DRAIN_MANA_ERADICATOR, true); + } } if (me->GetPowerPct(POWER_MANA) >= 100.f) @@ -294,7 +297,7 @@ struct npc_obsidian_eradicator : public ScriptedAI private: TaskScheduler _scheduler; - std::list _targets; + GuidList _targetGUIDs; }; struct npc_anubisath_warder : public ScriptedAI @@ -376,14 +379,14 @@ struct npc_obsidian_nullifier : public ScriptedAI { _scheduler.CancelAll(); me->SetPower(POWER_MANA, 0); - _targets.clear(); + _targetGUIDs.clear(); } void EnterCombat(Unit* /*who*/) override { _scheduler.Schedule(6s, [this](TaskContext context) { - if (_targets.empty()) + if (_targetGUIDs.empty()) { Map::PlayerList const& players = me->GetMap()->GetPlayers(); for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) @@ -392,18 +395,20 @@ struct npc_obsidian_nullifier : public ScriptedAI { if (player->IsAlive() && !player->IsGameMaster() && !player->IsSpectator() && player->GetPower(POWER_MANA) > 0) { - _targets.push_back(player); + _targetGUIDs.push_back(player->GetGUID()); } } } - Acore::Containers::RandomResize(_targets, 11); + Acore::Containers::RandomResize(_targetGUIDs, 11); } - for (Unit* target : _targets) + for (ObjectGuid guid : _targetGUIDs) { - if (target) + if (Unit* target = ObjectAccessor::GetUnit(*me, guid)) + { DoCast(target, SPELL_DRAIN_MANA_NULLIFIER, true); + } } if (me->GetPowerPct(POWER_MANA) >= 100.f) @@ -433,7 +438,7 @@ struct npc_obsidian_nullifier : public ScriptedAI private: TaskScheduler _scheduler; - std::list _targets; + GuidList _targetGUIDs; }; struct npc_ahnqiraji_critter : public ScriptedAI From e5ff59ec17507c2a7877298f06951627e6b7b567 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Fri, 4 Nov 2022 19:27:02 -0300 Subject: [PATCH 05/30] =?UTF-8?q?fix(Core/Unit):=20Check=20if=20the=20unit?= =?UTF-8?q?=20is=20within=20melee=20range=20before=20proces=E2=80=A6=20(#1?= =?UTF-8?q?3697)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(Core/Unit): Check if the unit is within melee range before processing extra attack procs --- src/server/game/Entities/Unit/Unit.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 7ed63bd8c..9a2e2b9ff 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -469,7 +469,10 @@ void Unit::Update(uint32 p_time) extraAttacksTargets.erase(itr); if (Unit* victim = ObjectAccessor::GetUnit(*this, targetGuid)) { - HandleProcExtraAttackFor(victim, count); + if (victim->IsWithinMeleeRange(this)) + { + HandleProcExtraAttackFor(victim, count); + } } } _lastExtraAttackSpell = 0; From 53874ea0ba634752c6a79e2f0e8d18aea8793081 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Fri, 4 Nov 2022 19:28:48 -0300 Subject: [PATCH 06/30] fix(DB/quest_template_addon): Add repeatable flag to Imperial Qiraji quests (#13688) Create rev_1667582937946491700.sql --- data/sql/updates/pending_db_world/rev_1667582937946491700.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1667582937946491700.sql diff --git a/data/sql/updates/pending_db_world/rev_1667582937946491700.sql b/data/sql/updates/pending_db_world/rev_1667582937946491700.sql new file mode 100644 index 000000000..64b03ae95 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1667582937946491700.sql @@ -0,0 +1,2 @@ +-- +UPDATE `quest_template_addon` SET `SpecialFlags` = `SpecialFlags`|1 WHERE `id` IN (8789, 8790); From c3d511e3bf5111ad848904a46720dc299ed0751f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Mauger?= Date: Fri, 4 Nov 2022 23:29:42 +0100 Subject: [PATCH 07/30] fix(DB/areatrigger_tavern) Fix neutral rest area in Booty Bay (#13656) --- data/sql/updates/pending_db_world/rev_1667430602678974600.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1667430602678974600.sql diff --git a/data/sql/updates/pending_db_world/rev_1667430602678974600.sql b/data/sql/updates/pending_db_world/rev_1667430602678974600.sql new file mode 100644 index 000000000..91beb0666 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1667430602678974600.sql @@ -0,0 +1,3 @@ +-- +SET @FACTION_BOTH := 6; +UPDATE `areatrigger_tavern` SET `faction` = @FACTION_BOTH WHERE `id` = 862; From 5f366c76bfb33530b7b5e04b5ba9bb800fcae296 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Fri, 4 Nov 2022 22:31:40 +0000 Subject: [PATCH 08/30] chore(DB): import pending files Referenced commit(s): c3d511e3bf5111ad848904a46720dc299ed0751f --- .../rev_1667430602678974600.sql => db_world/2022_11_04_00.sql} | 1 + .../rev_1667582937946491700.sql => db_world/2022_11_04_01.sql} | 1 + 2 files changed, 2 insertions(+) rename data/sql/updates/{pending_db_world/rev_1667430602678974600.sql => db_world/2022_11_04_00.sql} (70%) rename data/sql/updates/{pending_db_world/rev_1667582937946491700.sql => db_world/2022_11_04_01.sql} (69%) diff --git a/data/sql/updates/pending_db_world/rev_1667430602678974600.sql b/data/sql/updates/db_world/2022_11_04_00.sql similarity index 70% rename from data/sql/updates/pending_db_world/rev_1667430602678974600.sql rename to data/sql/updates/db_world/2022_11_04_00.sql index 91beb0666..93580c9da 100644 --- a/data/sql/updates/pending_db_world/rev_1667430602678974600.sql +++ b/data/sql/updates/db_world/2022_11_04_00.sql @@ -1,3 +1,4 @@ +-- DB update 2022_11_03_08 -> 2022_11_04_00 -- SET @FACTION_BOTH := 6; UPDATE `areatrigger_tavern` SET `faction` = @FACTION_BOTH WHERE `id` = 862; diff --git a/data/sql/updates/pending_db_world/rev_1667582937946491700.sql b/data/sql/updates/db_world/2022_11_04_01.sql similarity index 69% rename from data/sql/updates/pending_db_world/rev_1667582937946491700.sql rename to data/sql/updates/db_world/2022_11_04_01.sql index 64b03ae95..7755ee260 100644 --- a/data/sql/updates/pending_db_world/rev_1667582937946491700.sql +++ b/data/sql/updates/db_world/2022_11_04_01.sql @@ -1,2 +1,3 @@ +-- DB update 2022_11_04_00 -> 2022_11_04_01 -- UPDATE `quest_template_addon` SET `SpecialFlags` = `SpecialFlags`|1 WHERE `id` IN (8789, 8790); From 3176f8014f4b7f6b637f2b44befe583ac7e322e1 Mon Sep 17 00:00:00 2001 From: BeefSteak Date: Fri, 4 Nov 2022 23:10:19 +0000 Subject: [PATCH 09/30] fix(DB/Creature) Lisaile Fireweaver (#13679) * Create rev_1667492399768442000.sql * Update rev_1667492399768442000.sql --- data/sql/updates/pending_db_world/rev_1667492399768442000.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1667492399768442000.sql diff --git a/data/sql/updates/pending_db_world/rev_1667492399768442000.sql b/data/sql/updates/pending_db_world/rev_1667492399768442000.sql new file mode 100644 index 000000000..45d075735 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1667492399768442000.sql @@ -0,0 +1,3 @@ +-- +UPDATE `creature` SET `spawntimesecs`=120 WHERE `guid`=84701 AND `id1`=18583; + From 43315906d14a7dfaa48a82b3d2e52051eb917b0e Mon Sep 17 00:00:00 2001 From: Eddy Vega <61223313+Si1ker@users.noreply.github.com> Date: Fri, 4 Nov 2022 17:10:58 -0600 Subject: [PATCH 10/30] fix(Scripts/TempleOfAhnQiraj): Huhuran/BugTrio - EnterCombat (#13653) init Co-authored-by: Si1ker --- .../Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp | 14 ++++++++++++++ .../Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp | 3 ++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp index bf0a762ab..16354a9b9 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp @@ -79,15 +79,29 @@ public: void EnterCombatWithTrio(Unit* who) { + BossAI::EnterCombat(who); + if (Creature* vem = instance->GetCreature(DATA_VEM)) + { if (vem->GetGUID() != me->GetGUID()) + { vem->GetAI()->AttackStart(who); + } + } if (Creature* kri = instance->GetCreature(DATA_KRI)) + { if (kri->GetGUID() != me->GetGUID()) + { kri->GetAI()->AttackStart(who); + } + } if (Creature* yauj = instance->GetCreature(DATA_YAUJ)) + { if (yauj->GetGUID() != me->GetGUID()) + { yauj->GetAI()->AttackStart(who); + } + } } void EvadeAllBosses(EvadeReason why) diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp index 18dbf9327..e48ec6356 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp @@ -61,8 +61,9 @@ struct boss_huhuran : public BossAI _hardEnrage = false; } - void EnterCombat(Unit* /*who*/) override + void EnterCombat(Unit* who) override { + BossAI::EnterCombat(who); events.ScheduleEvent(EVENT_FRENZY, 12s, 21s); events.ScheduleEvent(EVENT_WYVERN_STING, 25s, 43s); events.ScheduleEvent(EVENT_ACID_SPIT, 1s, 20s); From 5a189b90b505fc76b2d30f663cb4f93b2d5c6a7b Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Fri, 4 Nov 2022 23:13:05 +0000 Subject: [PATCH 11/30] chore(DB): import pending files Referenced commit(s): 43315906d14a7dfaa48a82b3d2e52051eb917b0e --- .../rev_1667492399768442000.sql => db_world/2022_11_04_02.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1667492399768442000.sql => db_world/2022_11_04_02.sql} (65%) diff --git a/data/sql/updates/pending_db_world/rev_1667492399768442000.sql b/data/sql/updates/db_world/2022_11_04_02.sql similarity index 65% rename from data/sql/updates/pending_db_world/rev_1667492399768442000.sql rename to data/sql/updates/db_world/2022_11_04_02.sql index 45d075735..11145c80c 100644 --- a/data/sql/updates/pending_db_world/rev_1667492399768442000.sql +++ b/data/sql/updates/db_world/2022_11_04_02.sql @@ -1,3 +1,4 @@ +-- DB update 2022_11_04_01 -> 2022_11_04_02 -- UPDATE `creature` SET `spawntimesecs`=120 WHERE `guid`=84701 AND `id1`=18583; From 5dadd5e366b055dc69b0e2e0d35b5054da1395b6 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Fri, 4 Nov 2022 22:48:56 -0300 Subject: [PATCH 12/30] =?UTF-8?q?fix(DB/Creature):=20Remove=20wrong=20MECH?= =?UTF-8?q?ANIC=5FSLOW=5FATTACK=20immunity=20from=20cre=E2=80=A6=20(#13700?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(DB/Creature): Remove wrong MECHANIC_SLOW_ATTACK immunity from creatures Co-authored-by: ariel- --- data/sql/updates/pending_db_world/rev_1667610825649871800.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1667610825649871800.sql diff --git a/data/sql/updates/pending_db_world/rev_1667610825649871800.sql b/data/sql/updates/pending_db_world/rev_1667610825649871800.sql new file mode 100644 index 000000000..edb394a82 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1667610825649871800.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask` & 0xFFFFFF7F; From 20cf69c86c11e11d2af8c22d91ed8b183c950d61 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 5 Nov 2022 01:51:01 +0000 Subject: [PATCH 13/30] chore(DB): import pending files Referenced commit(s): 5dadd5e366b055dc69b0e2e0d35b5054da1395b6 --- .../rev_1667610825649871800.sql => db_world/2022_11_05_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1667610825649871800.sql => db_world/2022_11_05_00.sql} (68%) diff --git a/data/sql/updates/pending_db_world/rev_1667610825649871800.sql b/data/sql/updates/db_world/2022_11_05_00.sql similarity index 68% rename from data/sql/updates/pending_db_world/rev_1667610825649871800.sql rename to data/sql/updates/db_world/2022_11_05_00.sql index edb394a82..4986fe7b1 100644 --- a/data/sql/updates/pending_db_world/rev_1667610825649871800.sql +++ b/data/sql/updates/db_world/2022_11_05_00.sql @@ -1,2 +1,3 @@ +-- DB update 2022_11_04_02 -> 2022_11_05_00 -- UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask` & 0xFFFFFF7F; From 8b7fb759c2073a0f065ab1598999205dfc270ed7 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 5 Nov 2022 12:39:58 -0300 Subject: [PATCH 14/30] =?UTF-8?q?feat(Core/Scripting):=20Expand=20ModifySp?= =?UTF-8?q?ellDamageTaken()=20to=20include=20the=20=E2=80=A6=20(#13707)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat(Core/Scripting): Expand ModifySpellDamageTaken() to include the spell data --- src/server/game/Entities/Unit/Unit.cpp | 2 +- src/server/game/Scripting/ScriptDefines/UnitScript.cpp | 4 ++-- src/server/game/Scripting/ScriptMgr.h | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 9a2e2b9ff..f330e39da 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -1305,7 +1305,7 @@ void Unit::CalculateSpellDamageTaken(SpellNonMeleeDamage* damageInfo, int32 dama uint32 crTypeMask = victim->GetCreatureTypeMask(); // Script Hook For CalculateSpellDamageTaken -- Allow scripts to change the Damage post class mitigation calculations - sScriptMgr->ModifySpellDamageTaken(damageInfo->target, damageInfo->attacker, damage); + sScriptMgr->ModifySpellDamageTaken(damageInfo->target, damageInfo->attacker, damage, spellInfo); int32 cleanDamage = 0; if (Unit::IsDamageReducedByArmor(damageSchoolMask, spellInfo)) diff --git a/src/server/game/Scripting/ScriptDefines/UnitScript.cpp b/src/server/game/Scripting/ScriptDefines/UnitScript.cpp index 8076640d3..dd5f20709 100644 --- a/src/server/game/Scripting/ScriptDefines/UnitScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/UnitScript.cpp @@ -69,11 +69,11 @@ void ScriptMgr::ModifyMeleeDamage(Unit* target, Unit* attacker, uint32& damage) }); } -void ScriptMgr::ModifySpellDamageTaken(Unit* target, Unit* attacker, int32& damage) +void ScriptMgr::ModifySpellDamageTaken(Unit* target, Unit* attacker, int32& damage, SpellInfo const* spellInfo) { ExecuteScript([&](UnitScript* script) { - script->ModifySpellDamageTaken(target, attacker, damage); + script->ModifySpellDamageTaken(target, attacker, damage, spellInfo); }); } diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 43d7ef4fb..986cc6f99 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -428,7 +428,7 @@ public: virtual void ModifyMeleeDamage(Unit* /*target*/, Unit* /*attacker*/, uint32& /*damage*/) { } // Called when Spell Damage is being Dealt - virtual void ModifySpellDamageTaken(Unit* /*target*/, Unit* /*attacker*/, int32& /*damage*/) { } + virtual void ModifySpellDamageTaken(Unit* /*target*/, Unit* /*attacker*/, int32& /*damage*/, SpellInfo const* /*spellInfo*/) { } // Called when Heal is Recieved virtual void ModifyHealReceived(Unit* /*target*/, Unit* /*healer*/, uint32& /*heal*/, SpellInfo const* /*spellInfo*/) { } @@ -2432,7 +2432,7 @@ public: /* UnitScript */ void OnDamage(Unit* attacker, Unit* victim, uint32& damage); void ModifyPeriodicDamageAurasTick(Unit* target, Unit* attacker, uint32& damage); void ModifyMeleeDamage(Unit* target, Unit* attacker, uint32& damage); - void ModifySpellDamageTaken(Unit* target, Unit* attacker, int32& damage); + void ModifySpellDamageTaken(Unit* target, Unit* attacker, int32& damage, SpellInfo const* spellInfo); void ModifyHealReceived(Unit* target, Unit* healer, uint32& addHealth, SpellInfo const* spellInfo); uint32 DealDamage(Unit* AttackerUnit, Unit* pVictim, uint32 damage, DamageEffectType damagetype); void OnBeforeRollMeleeOutcomeAgainst(Unit const* attacker, Unit const* victim, WeaponAttackType attType, int32& attackerMaxSkillValueForLevel, int32& victimMaxSkillValueForLevel, int32& attackerWeaponSkill, int32& victimDefenseSkill, int32& crit_chance, int32& miss_chance, int32& dodge_chance, int32& parry_chance, int32& block_chance); From bb9e80ded1ecc6f49f58b4f88e9a48395d18aafa Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 5 Nov 2022 15:04:02 -0300 Subject: [PATCH 15/30] =?UTF-8?q?fix(Core/Unit):=20Exclude=20Sword=20Speci?= =?UTF-8?q?alization=20and=20Hack=20and=20Slash=20from=20=E2=80=A6=20(#137?= =?UTF-8?q?06)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(Core/Unit): Exclude Sword Specialization and Hack and Slash from the extra attack range check * fix logic --- src/server/game/Entities/Unit/Unit.cpp | 5 +++-- src/server/game/Entities/Unit/Unit.h | 6 ++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index f330e39da..af91a9597 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -469,7 +469,8 @@ void Unit::Update(uint32 p_time) extraAttacksTargets.erase(itr); if (Unit* victim = ObjectAccessor::GetUnit(*this, targetGuid)) { - if (victim->IsWithinMeleeRange(this)) + if (_lastExtraAttackSpell == SPELL_SWORD_SPECIALIZATION || _lastExtraAttackSpell == SPELL_HACK_AND_SLASH + || victim->IsWithinMeleeRange(this)) { HandleProcExtraAttackFor(victim, count); } @@ -9376,7 +9377,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg // Patch 2.2.0 Sword Specialization (Warrior, Rogue) extra attack can no longer proc additional extra attacks // 3.3.5 Sword Specialization (Warrior), Hack and Slash (Rogue) - if (lastExtraAttackSpell == 16459 || lastExtraAttackSpell == 66923) + if (lastExtraAttackSpell == SPELL_SWORD_SPECIALIZATION || lastExtraAttackSpell == SPELL_HACK_AND_SLASH) { return false; } diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 95d52eedc..547e62b14 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -717,6 +717,12 @@ enum MeleeHitOutcome MELEE_HIT_GLANCING, MELEE_HIT_CRIT, MELEE_HIT_CRUSHING, MELEE_HIT_NORMAL }; +enum ExtraAttackSpells +{ + SPELL_SWORD_SPECIALIZATION = 16459, + SPELL_HACK_AND_SLASH = 66923 +}; + class DispelInfo { public: From 5e120e483ca8643eff21f095207707aa868cf0f7 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sat, 5 Nov 2022 18:42:55 -0300 Subject: [PATCH 16/30] fix(DB/SAI): Change Qiraji Mindslayer Mana Burn cast to ON_DEATH instead of UPDATE_IC (#13715) * Create rev_1667681347229290600.sql * comment --- data/sql/updates/pending_db_world/rev_1667681347229290600.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1667681347229290600.sql diff --git a/data/sql/updates/pending_db_world/rev_1667681347229290600.sql b/data/sql/updates/pending_db_world/rev_1667681347229290600.sql new file mode 100644 index 000000000..4c5d7370d --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1667681347229290600.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 15246) AND (`source_type` = 0) AND (`id` IN (1)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(15246, 0, 1, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 11, 26049, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Qiraji Mindslayer - On Just Died - Cast \'Mana Burn\''); From c70744336794f3ad6387314a511112aad1469a7c Mon Sep 17 00:00:00 2001 From: BeefSteak Date: Sat, 5 Nov 2022 21:43:39 +0000 Subject: [PATCH 17/30] fix(DB/GameObject): instant spawn on 61-64 quest interactables (#13712) * fix(DB/gameobject): instant spaww on quest interactables * Update data/sql/updates/pending_db_world/rev_1667666190202265500.sql Co-authored-by: Gultask <100873791+Gultask@users.noreply.github.com> Co-authored-by: Gultask <100873791+Gultask@users.noreply.github.com> --- .../updates/pending_db_world/rev_1667666190202265500.sql | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1667666190202265500.sql diff --git a/data/sql/updates/pending_db_world/rev_1667666190202265500.sql b/data/sql/updates/pending_db_world/rev_1667666190202265500.sql new file mode 100644 index 000000000..20b82c5f5 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1667666190202265500.sql @@ -0,0 +1,8 @@ +-- Quest: A Pilgrim's Plight +UPDATE `gameobject` SET `spawntimesecs`=1 WHERE `guid`=25340 AND `id`=184478; +-- Quest: The Dread Relic +UPDATE `gameobject` SET `spawntimesecs`=0 WHERE `guid`=26109 AND `id`=185220; +-- Quest: The Shadow Tomb +UPDATE `gameobject` SET `spawntimesecs`=0 WHERE `id` IN (185224, 185225, 185226) AND `guid` IN (26110, 26111, 47565); +-- Quest: A Damp Dark Place +UPDATE `gameobject` SET `spawntimesecs`=0 WHERE `guid`=22527 AND `id`=182122; From f367797119f145bc5e22e4953ef9c79c03150ce3 Mon Sep 17 00:00:00 2001 From: Pyromanihack <82369562+Pyromanihack@users.noreply.github.com> Date: Sat, 5 Nov 2022 22:44:26 +0100 Subject: [PATCH 18/30] fix(DB/Creature) Slain Auchenai Warrior & Slain Sha'tar Vindicator (#13695) * Create An Improper Burial.sql * Update An Improper Burial.sql * Rename An Improper Burial.sql to AnImproperBurial.sql * Update AnImproperBurial.sql * Update AnImproperBurial.sql * Update AnImproperBurial.sql * Update AnImproperBurial.sql * Update AnImproperBurial.sql * Update data/sql/updates/pending_db_world/AnImproperBurial.sql Co-authored-by: Gultask <100873791+Gultask@users.noreply.github.com> Co-authored-by: Gultask <100873791+Gultask@users.noreply.github.com> --- .../pending_db_world/AnImproperBurial.sql | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 data/sql/updates/pending_db_world/AnImproperBurial.sql diff --git a/data/sql/updates/pending_db_world/AnImproperBurial.sql b/data/sql/updates/pending_db_world/AnImproperBurial.sql new file mode 100644 index 000000000..4966f1041 --- /dev/null +++ b/data/sql/updates/pending_db_world/AnImproperBurial.sql @@ -0,0 +1,43 @@ + +-- Set CALLKILLEDMONSTER non repeteable +UPDATE `smart_scripts` SET `event_flags` = `event_flags`|1 WHERE `entryorguid` IN (21859, 21846) AND `source_type`=0 AND `id`=0 AND `link`=1; + +-- Add spawns imported from TC +DELETE FROM `creature` WHERE `id1` IN (21846, 21859) AND `id2` IN (21846, 21859) AND `guid` BETWEEN @GUID+0 AND @GUID+35; +INSERT INTO `creature` (`guid`, `id1`, `id2`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `MovementType`) VALUES +(@GUID+0 , 21846, 21859, 530, 3519, 0, 1, 1, -3780.56, 5215.07, -23.1934, 0.0349066, 7, 0), +(@GUID+1 , 21846, 21859, 530, 3519, 0, 1, 1, -3777.38, 5184.86, -24.4552, 3.9968, 7, 0), +(@GUID+2 , 21846, 21859, 530, 3519, 0, 1, 1, -3772.17, 5211.63, -22.8059, 5.49779, 7, 0), +(@GUID+3 , 21846, 21859, 530, 3519, 0, 1, 1, -3770.83, 5121.01, -21.4213, 0.959931, 7, 0), +(@GUID+4 , 21846, 21859, 530, 3519, 0, 1, 1, -3766.29, 5062.47, -18.9817, 3.57792, 7, 0), +(@GUID+5 , 21846, 21859, 530, 3519, 0, 1, 1, -3764.99, 5095.88, -19.0595, 0.122173, 7, 0), +(@GUID+6 , 21846, 21859, 530, 3519, 0, 1, 1, -3762.46, 5171.85, -22.9264, 1.0821, 7, 0), +(@GUID+7 , 21846, 21859, 530, 3519, 0, 1, 1, -3759.02, 5140.41, -22.8351, 4.81711, 7, 0), +(@GUID+8 , 21846, 21859, 530, 3519, 0, 1, 1, -3758.07, 5261.12, -15.3995, 2.77507, 7, 0), +(@GUID+9 , 21846, 21859, 530, 3519, 0, 1, 1, -3753.9, 5294.92, -16.9184, 1.43117, 7, 0), +(@GUID+10, 21846, 21859, 530, 3519, 0, 1, 1, -3753.17, 5078.65, -18.2274, 0.872665, 7, 0), +(@GUID+11, 21846, 21859, 530, 3519, 0, 1, 1, -3750.03, 5125.17, -21.9827, 5.35816, 7, 0), +(@GUID+12, 21846, 21859, 530, 3519, 0, 1, 1, -3749.58, 5195.27, -22.6601, 3.68264, 7, 0), +(@GUID+13, 21846, 21859, 530, 3519, 0, 1, 1, -3741.7, 5160.73, -22.2081, 4.50295, 7, 0), +(@GUID+14, 21846, 21859, 530, 3519, 0, 1, 1, -3741.05, 5171.27, -21.8304, 2.14675, 7, 0), +(@GUID+15, 21846, 21859, 530, 3519, 0, 1, 1, -3739.48, 5271.71, -16.0977, 0.523599, 7, 0), +(@GUID+16, 21846, 21859, 530, 3519, 0, 1, 1, -3734.78, 5327.33, -13.0874, 3.9619, 7, 0), +(@GUID+17, 21846, 21859, 530, 3519, 0, 1, 1, -3733.21, 5061.52, -17.6918, 0.628319, 7, 0), +(@GUID+18, 21846, 21859, 530, 3519, 0, 1, 1, -3731.54, 5160.66, -22.2169, 3.4383, 7, 0), +(@GUID+19, 21846, 21859, 530, 3519, 0, 1, 1, -3726.95, 5263.67, -17.9404, 3.66519, 7, 0), +(@GUID+20, 21846, 21859, 530, 3519, 0, 1, 1, -3721.04, 5275.86, -18.5205, 1.25664, 7, 0), +(@GUID+21, 21846, 21859, 530, 3519, 0, 1, 1, -3720.57, 5205.87, -20.2053, 2.53073, 7, 0), +(@GUID+22, 21846, 21859, 530, 3519, 0, 1, 1, -3718.09, 5217.56, -21.3539, 2.75762, 7, 0), +(@GUID+23, 21846, 21859, 530, 3519, 0, 1, 1, -3713.32, 5257.14, -20.3728, 3.82227, 7, 0), +(@GUID+24, 21846, 21859, 530, 3519, 0, 1, 1, -3711.44, 5290.39, -18.9303, 0.0698132, 7, 0), +(@GUID+25, 21846, 21859, 530, 3519, 0, 1, 1, -3691.57, 5220.81, -21.1431, 2.54818, 7, 0), +(@GUID+26, 21846, 21859, 530, 3519, 0, 1, 1, -3689.51, 5295.31, -20.0296, 3.33358, 7, 0), +(@GUID+27, 21846, 21859, 530, 3519, 0, 1, 1, -3688.32, 5336.11, -15.1771, 3.735, 7, 0), +(@GUID+28, 21846, 21859, 530, 3519, 0, 1, 1, -3687.49, 5351.75, -13.172, 3.1765, 7, 0), +(@GUID+29, 21846, 21859, 530, 3519, 0, 1, 1, -3679.08, 5287.66, -20.6681, 0.0698132, 7, 0), +(@GUID+30, 21846, 21859, 530, 3519, 0, 1, 1, -3678.04, 5293.5, -20.3924, 1.78024, 7, 0), +(@GUID+31, 21846, 21859, 530, 3519, 0, 1, 1, -3676.77, 5334.48, -16.1081, 0.575959, 7, 0), +(@GUID+32, 21846, 21859, 530, 3519, 0, 1, 1, -3643.76, 5323.48, -18.2017, 4.08407, 7, 0), +(@GUID+33, 21846, 21859, 530, 3519, 0, 1, 1, -3640.03, 5318.27, -19.0845, 3.38594, 7, 0), +(@GUID+34, 21846, 21859, 530, 3519, 0, 1, 1, -3634.82, 5283.14, -21.9279, 4.5204, 7, 0), +(@GUID+35, 21846, 21859, 530, 3519, 0, 1, 1, -3783.05, 5215.14, -23.515, 1.76278, 7, 0); From 943cd087bb4ab2d6c58cdb7f137b5fbb680a8cc1 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 5 Nov 2022 21:46:33 +0000 Subject: [PATCH 19/30] chore(DB): import pending files Referenced commit(s): f367797119f145bc5e22e4953ef9c79c03150ce3 --- .../AnImproperBurial.sql => db_world/2022_11_05_01.sql} | 1 + .../rev_1667666190202265500.sql => db_world/2022_11_05_02.sql} | 1 + .../rev_1667681347229290600.sql => db_world/2022_11_05_03.sql} | 1 + 3 files changed, 3 insertions(+) rename data/sql/updates/{pending_db_world/AnImproperBurial.sql => db_world/2022_11_05_01.sql} (98%) rename data/sql/updates/{pending_db_world/rev_1667666190202265500.sql => db_world/2022_11_05_02.sql} (91%) rename data/sql/updates/{pending_db_world/rev_1667681347229290600.sql => db_world/2022_11_05_03.sql} (94%) diff --git a/data/sql/updates/pending_db_world/AnImproperBurial.sql b/data/sql/updates/db_world/2022_11_05_01.sql similarity index 98% rename from data/sql/updates/pending_db_world/AnImproperBurial.sql rename to data/sql/updates/db_world/2022_11_05_01.sql index 4966f1041..026d45d59 100644 --- a/data/sql/updates/pending_db_world/AnImproperBurial.sql +++ b/data/sql/updates/db_world/2022_11_05_01.sql @@ -1,3 +1,4 @@ +-- DB update 2022_11_05_00 -> 2022_11_05_01 -- Set CALLKILLEDMONSTER non repeteable UPDATE `smart_scripts` SET `event_flags` = `event_flags`|1 WHERE `entryorguid` IN (21859, 21846) AND `source_type`=0 AND `id`=0 AND `link`=1; diff --git a/data/sql/updates/pending_db_world/rev_1667666190202265500.sql b/data/sql/updates/db_world/2022_11_05_02.sql similarity index 91% rename from data/sql/updates/pending_db_world/rev_1667666190202265500.sql rename to data/sql/updates/db_world/2022_11_05_02.sql index 20b82c5f5..18464a425 100644 --- a/data/sql/updates/pending_db_world/rev_1667666190202265500.sql +++ b/data/sql/updates/db_world/2022_11_05_02.sql @@ -1,3 +1,4 @@ +-- DB update 2022_11_05_01 -> 2022_11_05_02 -- Quest: A Pilgrim's Plight UPDATE `gameobject` SET `spawntimesecs`=1 WHERE `guid`=25340 AND `id`=184478; -- Quest: The Dread Relic diff --git a/data/sql/updates/pending_db_world/rev_1667681347229290600.sql b/data/sql/updates/db_world/2022_11_05_03.sql similarity index 94% rename from data/sql/updates/pending_db_world/rev_1667681347229290600.sql rename to data/sql/updates/db_world/2022_11_05_03.sql index 4c5d7370d..9969d30ab 100644 --- a/data/sql/updates/pending_db_world/rev_1667681347229290600.sql +++ b/data/sql/updates/db_world/2022_11_05_03.sql @@ -1,3 +1,4 @@ +-- DB update 2022_11_05_02 -> 2022_11_05_03 -- DELETE FROM `smart_scripts` WHERE (`entryorguid` = 15246) AND (`source_type` = 0) AND (`id` IN (1)); INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES From d693378a3a846772a1fd7a1618895c86e5901564 Mon Sep 17 00:00:00 2001 From: BeefSteak Date: Sun, 6 Nov 2022 17:52:43 +0000 Subject: [PATCH 20/30] fix(DB/creature): High Admiral "Shelly" Jorrik Rep and spawn (#13714) --- data/sql/updates/pending_db_world/repandspawn.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 data/sql/updates/pending_db_world/repandspawn.sql diff --git a/data/sql/updates/pending_db_world/repandspawn.sql b/data/sql/updates/pending_db_world/repandspawn.sql new file mode 100644 index 000000000..fef606659 --- /dev/null +++ b/data/sql/updates/pending_db_world/repandspawn.sql @@ -0,0 +1,5 @@ +-- lots of Reputation changes +DELETE FROM `creature_onkill_reputation` WHERE `creature_id`=26081; +INSERT INTO `creature_onkill_reputation` (`creature_id`, `RewOnKillRepFaction1`, `RewOnKillRepFaction2`, `MaxStanding1`, `IsTeamAward1`, `RewOnKillRepValue1`, `MaxStanding2`, `IsTeamAward2`, `RewOnKillRepValue2`, `TeamDependent`) VALUES (26081, 87, 21, 5, 0, 5, 7, 1, -25, 0); +-- Spawn to 8 hours +UPDATE `creature` SET `spawntimesecs`=28800 WHERE `guid`=1975960 AND `id1`=26081; From e029853799fc808c99a766efc04289f8f80defab Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 6 Nov 2022 17:54:44 +0000 Subject: [PATCH 21/30] chore(DB): import pending files Referenced commit(s): d693378a3a846772a1fd7a1618895c86e5901564 --- .../repandspawn.sql => db_world/2022_11_06_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/repandspawn.sql => db_world/2022_11_06_00.sql} (91%) diff --git a/data/sql/updates/pending_db_world/repandspawn.sql b/data/sql/updates/db_world/2022_11_06_00.sql similarity index 91% rename from data/sql/updates/pending_db_world/repandspawn.sql rename to data/sql/updates/db_world/2022_11_06_00.sql index fef606659..4c501800f 100644 --- a/data/sql/updates/pending_db_world/repandspawn.sql +++ b/data/sql/updates/db_world/2022_11_06_00.sql @@ -1,3 +1,4 @@ +-- DB update 2022_11_05_03 -> 2022_11_06_00 -- lots of Reputation changes DELETE FROM `creature_onkill_reputation` WHERE `creature_id`=26081; INSERT INTO `creature_onkill_reputation` (`creature_id`, `RewOnKillRepFaction1`, `RewOnKillRepFaction2`, `MaxStanding1`, `IsTeamAward1`, `RewOnKillRepValue1`, `MaxStanding2`, `IsTeamAward2`, `RewOnKillRepValue2`, `TeamDependent`) VALUES (26081, 87, 21, 5, 0, 5, 7, 1, -25, 0); From 6177ce4688fc34af7cebb0d47a15be1553fbffc1 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Mon, 7 Nov 2022 00:26:47 -0300 Subject: [PATCH 22/30] feat(Core/Scripting): Create OnStoreNewItem() hook (#13725) --- src/server/game/Entities/Player/PlayerStorage.cpp | 2 +- src/server/game/Scripting/ScriptDefines/PlayerScript.cpp | 8 ++++++++ src/server/game/Scripting/ScriptMgr.h | 4 ++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/server/game/Entities/Player/PlayerStorage.cpp b/src/server/game/Entities/Player/PlayerStorage.cpp index bfd19ceff..56f11af58 100644 --- a/src/server/game/Entities/Player/PlayerStorage.cpp +++ b/src/server/game/Entities/Player/PlayerStorage.cpp @@ -2594,7 +2594,7 @@ Item* Player::StoreNewItem(ItemPosCountVec const& dest, uint32 item, bool update CharacterDatabase.Execute(stmt); } - sScriptMgr->OnLootItem(this, pItem, count, ObjectGuid::Empty); + sScriptMgr->OnStoreNewItem(this, pItem, count); } return pItem; } diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp index a8794e821..8c09e7b60 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp @@ -582,6 +582,14 @@ void ScriptMgr::OnLootItem(Player* player, Item* item, uint32 count, ObjectGuid }); } +void ScriptMgr::OnStoreNewItem(Player* player, Item* item, uint32 count) +{ + ExecuteScript([&](PlayerScript* script) + { + script->OnStoreNewItem(player, item, count); + }); +} + void ScriptMgr::OnCreateItem(Player* player, Item* item, uint32 count) { ExecuteScript([&](PlayerScript* script) diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 986cc6f99..3adf5264d 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -1180,6 +1180,9 @@ public: //After looting item virtual void OnLootItem(Player* /*player*/, Item* /*item*/, uint32 /*count*/, ObjectGuid /*lootguid*/) { } + //After looting item (includes master loot). + virtual void OnStoreNewItem(Player* /*player*/, Item* /*item*/, uint32 /*count*/) { } + //After creating item (eg profession item creation) virtual void OnCreateItem(Player* /*player*/, Item* /*item*/, uint32 /*count*/) { } @@ -2275,6 +2278,7 @@ public: /* PlayerScript */ void GetCustomArenaPersonalRating(Player const* player, uint8 slot, uint32& rating) const; void OnGetMaxPersonalArenaRatingRequirement(Player const* player, uint32 minSlot, uint32& maxArenaRating) const; void OnLootItem(Player* player, Item* item, uint32 count, ObjectGuid lootguid); + void OnStoreNewItem(Player* player, Item* item, uint32 count); void OnCreateItem(Player* player, Item* item, uint32 count); void OnQuestRewardItem(Player* player, Item* item, uint32 count); void OnGroupRollRewardItem(Player* player, Item* item, uint32 count, RollVote voteType, Roll* roll); From e4016823d7ee5e77aa6cb162a3eed584d7b35a87 Mon Sep 17 00:00:00 2001 From: Yehonal Date: Mon, 7 Nov 2022 13:20:48 +0100 Subject: [PATCH 23/30] feat(CORE): docker permissions and rework (#13454) - fix docker permissions with mounted volumes on new docker versions (https://github.com/docker/desktop-linux/issues/31) - fix ac-tools image - cleanup unused env - add `cap_add: SYS_NICE` to allow setting process high priority - fix ccache in docker - allow to switch between root user (default) to acore user in any container - fix cache of the downloaded client data - split docker github actions in 2 parts - versioning mysql images - performance improvements --- .devcontainer/devcontainer.json | 2 +- .editorconfig | 2 +- .github/workflows/build_dbimport.yml | 1 + .github/workflows/core_build.yml | 2 +- .github/workflows/core_matrix_build.yml | 11 +- .github/workflows/core_modules_build.yml | 11 +- .github/workflows/docker_build.yml | 87 ++++- .github/workflows/import_pending.yml | 2 +- .github/workflows/issue-labeler.yml | 2 +- .github/workflows/macos_build.yml | 5 +- .github/workflows/tools_build.yml | 2 +- .github/workflows/windows_build.yml | 5 +- apps/bash_shared/common.sh | 2 +- apps/ci/ci-conf-core.sh | 3 - apps/ci/ci-conf-db.sh | 3 - apps/ci/ci-install.sh | 3 - apps/compiler/compiler.sh | 2 + apps/compiler/includes/functions.sh | 4 + apps/docker/Dockerfile | 71 ++-- apps/docker/config-docker.sh | 2 + apps/docker/docker-cmd.ts | 48 ++- apps/installer/main.sh | 6 +- apps/installer/main.ts | 43 +++ apps/installer/utils.ts | 17 + conf/dist/env.ac | 12 - conf/dist/env.docker | 14 +- docker-compose.yml | 397 +++++++++++++-------- env/docker/data/Cameras/.gitkeep | 0 env/docker/data/dbc/.gitkeep | 0 env/docker/data/maps/.gitkeep | 0 env/docker/data/mmaps/.gitkeep | 0 env/docker/data/vmaps/.gitkeep | 0 env/docker/etc/authserver.conf.dockerdist | 2 +- env/docker/etc/dbimport.conf.dockerdist | 1 - env/docker/etc/worldserver.conf.dockerdist | 1 - var/extractors/Cameras/.gitkeep | 0 36 files changed, 513 insertions(+), 250 deletions(-) create mode 100644 apps/installer/main.ts create mode 100644 apps/installer/utils.ts create mode 100644 env/docker/data/Cameras/.gitkeep create mode 100644 env/docker/data/dbc/.gitkeep create mode 100644 env/docker/data/maps/.gitkeep create mode 100644 env/docker/data/mmaps/.gitkeep create mode 100644 env/docker/data/vmaps/.gitkeep create mode 100644 var/extractors/Cameras/.gitkeep diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 15221f1aa..a7cc6c681 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -49,5 +49,5 @@ // "postCreateCommand": "apt-get update && apt-get install -y curl", // Uncomment to connect as a non-root user if you've added one. See https://aka.ms/vscode-remote/containers/non-root. - "remoteUser": "acore" + "remoteUser": "root" } diff --git a/.editorconfig b/.editorconfig index 4a0e9e614..66e87791e 100644 --- a/.editorconfig +++ b/.editorconfig @@ -7,7 +7,7 @@ insert_final_newline = true trim_trailing_whitespace = true max_line_length = 80 -[*.{json,ts,js}] +[*.{json,ts,js,yml}] charset = utf-8 indent_style = space indent_size = 2 diff --git a/.github/workflows/build_dbimport.yml b/.github/workflows/build_dbimport.yml index c4016339e..45d988ff8 100644 --- a/.github/workflows/build_dbimport.yml +++ b/.github/workflows/build_dbimport.yml @@ -21,6 +21,7 @@ jobs: name: ${{ matrix.compiler }} env: COMPILER: ${{ matrix.compiler }} + if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft steps: - uses: actions/checkout@v2 - name: Cache diff --git a/.github/workflows/core_build.yml b/.github/workflows/core_build.yml index 7c43a1bb7..53135ab89 100644 --- a/.github/workflows/core_build.yml +++ b/.github/workflows/core_build.yml @@ -21,7 +21,7 @@ jobs: name: ${{ matrix.os }}-${{ matrix.compiler }} env: COMPILER: ${{ matrix.compiler }} - if: github.repository == 'azerothcore/azerothcore-wotlk' + if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft steps: - uses: actions/checkout@v2 - name: Cache diff --git a/.github/workflows/core_matrix_build.yml b/.github/workflows/core_matrix_build.yml index a0f4d47f9..e0f6e40ac 100644 --- a/.github/workflows/core_matrix_build.yml +++ b/.github/workflows/core_matrix_build.yml @@ -29,7 +29,16 @@ jobs: name: ${{ matrix.os }}-${{ matrix.compiler }} env: COMPILER: ${{ matrix.compiler }} - if: github.repository == 'azerothcore/azerothcore-wotlk' && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'file-cpp') || github.event.label.name == 'file-cpp' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build') + if: | + github.repository == 'azerothcore/azerothcore-wotlk' + && !github.event.pull_request.draft + && ( + github.ref == 'refs/heads/master' + || contains(github.event.pull_request.labels.*.name, 'file-cpp' + || github.event.label.name == 'file-cpp' + || contains(github.event.pull_request.labels.*.name, 'run-build') + || github.event.label.name == 'run-build') + ) steps: - uses: actions/checkout@v2 - name: Cache diff --git a/.github/workflows/core_modules_build.yml b/.github/workflows/core_modules_build.yml index 7003d96f9..6f50e7306 100644 --- a/.github/workflows/core_modules_build.yml +++ b/.github/workflows/core_modules_build.yml @@ -23,7 +23,16 @@ jobs: name: ${{ matrix.os }}-${{ matrix.compiler }}-${{ matrix.modules }}-modules env: COMPILER: ${{ matrix.compiler }} - if: github.repository == 'azerothcore/azerothcore-wotlk' && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'file-cpp') || github.event.label.name == 'file-cpp' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build') + if: | + github.repository == 'azerothcore/azerothcore-wotlk' + && !github.event.pull_request.draft + && ( + github.ref == 'refs/heads/master' + || contains(github.event.pull_request.labels.*.name, 'file-cpp' + || github.event.label.name == 'file-cpp' + || contains(github.event.pull_request.labels.*.name, 'run-build') + || github.event.label.name == 'run-build') + ) steps: - uses: actions/checkout@v2 - name: Checkout modules diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml index 1c91ef860..850f7affe 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -11,13 +11,16 @@ concurrency: cancel-in-progress: true jobs: - docker-build-n-deploy: + docker-build-n-deploy-dev: strategy: fail-fast: true matrix: os: [ubuntu-20.04] runs-on: ${{ matrix.os }} - if: github.repository == 'azerothcore/azerothcore-wotlk' && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build') + if: | + github.repository == 'azerothcore/azerothcore-wotlk' + && !github.event.pull_request.draft + && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build') env: COMPOSE_DOCKER_CLI_BUILD: 1 DOCKER_BUILDKIT: 1 @@ -40,14 +43,6 @@ jobs: docker --version docker compose --version - # TODO: make it work - # - uses: whoan/docker-build-with-cache-action@v5 - # with: - # image_tag: master - # username: ${{ secrets.DOCKERHUB_USERNAME }} - # password: ${{ secrets.DOCKERHUB_TOKEN }} - # compose_file: docker-compose.yml - - name: Login to Docker Hub if: github.repository == 'azerothcore/azerothcore-wotlk' && steps.extract_branch.outputs.branch == 'master' uses: docker/login-action@v1 @@ -55,19 +50,17 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - # before cache - # needed to avoid ccache injected into these images - name: Build Dev if: github.repository == 'azerothcore/azerothcore-wotlk' env: #DOCKER_IMAGE_TAG: ${{ steps.extract_branch.outputs.branch }} - DOCKER_EXTENDS_BIND: abstract-no-bind DOCKER_CLIENT_TIMEOUT: 400 COMPOSE_HTTP_TIMEOUT: 400 run: | export DOCKER_USER_ID=$(id -u) export DOCKER_GROUP_ID=$(id -u) + # pull the images first to load the docker cache layers + ./acore.sh docker pull ./acore.sh docker build - name: Deploy Dev @@ -76,6 +69,47 @@ jobs: if: github.repository == 'azerothcore/azerothcore-wotlk' && steps.extract_branch.outputs.branch == 'master' run: | docker compose --profile dev --profile local push + output=$(./acore.sh version | grep "AzerothCore Rev.") && version=${output#"AzerothCore Rev."} + DOCKER_IMAGE_TAG=$version docker compose --profile local push + + docker-build-n-deploy-prod: + strategy: + fail-fast: true + matrix: + os: [ubuntu-20.04] + runs-on: ${{ matrix.os }} + if: | + github.repository == 'azerothcore/azerothcore-wotlk' + && !github.event.pull_request.draft + && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build') + env: + COMPOSE_DOCKER_CLI_BUILD: 1 + DOCKER_BUILDKIT: 1 + BUILDKIT_INLINE_CACHE: 1 + + steps: + - name: Extract branch name + shell: bash + run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" + id: extract_branch + + - uses: actions/checkout@v2 + + - name: Configure + run: | + sudo rm -rf /usr/local/lib/android + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf "$AGENT_TOOLSDIRECTORY" + docker --version + docker compose --version + + - name: Login to Docker Hub + if: github.repository == 'azerothcore/azerothcore-wotlk' && steps.extract_branch.outputs.branch == 'master' + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Cache uses: actions/cache@v2 @@ -90,16 +124,17 @@ jobs: if: github.repository == 'azerothcore/azerothcore-wotlk' env: #DOCKER_IMAGE_TAG: ${{ steps.extract_branch.outputs.branch }} - DOCKER_EXTENDS_BIND: abstract-no-bind - DOCKER_AC_BUILD_TARGET: build DOCKER_CLIENT_TIMEOUT: 220 COMPOSE_HTTP_TIMEOUT: 220 run: | export DOCKER_USER_ID=$(id -u) export DOCKER_GROUP_ID=$(id -u) + # pull the images first to load the docker cache layers + ./acore.sh docker prod:pull ./acore.sh docker prod:build - docker compose run --no-deps --name build ac-build echo "image created" - docker cp build:/azerothcore/var/ccache var/docker/ + # create the container to allow the copy right after + docker compose create ac-build-prod + docker compose cp ac-build-prod:/azerothcore/var/ccache var/docker/ echo "ccache exported" - name: Deploy Production images @@ -108,3 +143,19 @@ jobs: if: github.repository == 'azerothcore/azerothcore-wotlk' && steps.extract_branch.outputs.branch == 'master' run: | docker compose --profile prod push + output=$(./acore.sh version | grep "AzerothCore Rev.") && version=${output#"AzerothCore Rev."} + DOCKER_IMAGE_TAG=$version docker compose --profile prod push + + + dispatch-acore-docker: + needs: [ docker-build-n-deploy-prod , docker-build-n-deploy-dev] + runs-on: ubuntu-latest + steps: + - name: Repository Dispatch + if: github.repository == 'azerothcore/azerothcore-wotlk' && steps.extract_branch.outputs.branch == 'master' + uses: peter-evans/repository-dispatch@v2 + with: + token: ${{ secrets.ACORE_DOCKER_REPO_ACCESS_TOKEN }} + repository: azerothcore/acore-docker + # event-type: my-event + client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}"}' diff --git a/.github/workflows/import_pending.yml b/.github/workflows/import_pending.yml index 60f211da7..c9a7ffaaf 100644 --- a/.github/workflows/import_pending.yml +++ b/.github/workflows/import_pending.yml @@ -9,7 +9,7 @@ jobs: strategy: fail-fast: false runs-on: ubuntu-20.04 - if: github.repository == 'azerothcore/azerothcore-wotlk' + if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft steps: - uses: actions/checkout@v2 with: diff --git a/.github/workflows/issue-labeler.yml b/.github/workflows/issue-labeler.yml index e91fda799..cc032a770 100644 --- a/.github/workflows/issue-labeler.yml +++ b/.github/workflows/issue-labeler.yml @@ -5,7 +5,7 @@ on: jobs: issue_labeler: - if: github.repository == 'azerothcore/azerothcore-wotlk' + if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft runs-on: ubuntu-latest name: Issue Labeler steps: diff --git a/.github/workflows/macos_build.yml b/.github/workflows/macos_build.yml index 5d58a15e6..984fe9132 100644 --- a/.github/workflows/macos_build.yml +++ b/.github/workflows/macos_build.yml @@ -20,7 +20,10 @@ jobs: - macos-12 runs-on: ${{ matrix.os }} name: ${{ matrix.os }} - if: github.repository == 'azerothcore/azerothcore-wotlk' && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build') + if: | + github.repository == 'azerothcore/azerothcore-wotlk' + && !github.event.pull_request.draft + && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build') steps: - uses: actions/checkout@v2 - name: Cache diff --git a/.github/workflows/tools_build.yml b/.github/workflows/tools_build.yml index 73aecd18b..242dea748 100644 --- a/.github/workflows/tools_build.yml +++ b/.github/workflows/tools_build.yml @@ -21,7 +21,7 @@ jobs: name: ${{ matrix.os }}-${{ matrix.compiler }} env: COMPILER: ${{ matrix.compiler }} - if: github.repository == 'azerothcore/azerothcore-wotlk' + if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft steps: - uses: actions/checkout@v2 - name: Cache diff --git a/.github/workflows/windows_build.yml b/.github/workflows/windows_build.yml index 527abc33e..04f42a702 100644 --- a/.github/workflows/windows_build.yml +++ b/.github/workflows/windows_build.yml @@ -20,7 +20,10 @@ jobs: name: ${{ matrix.os }} env: BOOST_ROOT: C:\local\boost_1_79_0 - if: github.repository == 'azerothcore/azerothcore-wotlk' && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build') + if: | + github.repository == 'azerothcore/azerothcore-wotlk' + && !github.event.pull_request.draft + && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build') steps: - uses: actions/checkout@v2 - name: Configure OS diff --git a/apps/bash_shared/common.sh b/apps/bash_shared/common.sh index c8d8880cf..027a49bed 100644 --- a/apps/bash_shared/common.sh +++ b/apps/bash_shared/common.sh @@ -9,7 +9,7 @@ USER_CONF_PATH=${USER_CONF_PATH:-"$AC_PATH_CONF/config.sh"} if [ -f "$USER_CONF_PATH" ]; then source "$USER_CONF_PATH" # should overwrite previous else - echo "NOTICE: file <$USER_CONF_PATH> has not been found, you should create and configure it." + echo "NOTICE: file <$USER_CONF_PATH> not found, we use default configuration only." fi # diff --git a/apps/ci/ci-conf-core.sh b/apps/ci/ci-conf-core.sh index 4fd3fa4c2..591ad7078 100644 --- a/apps/ci/ci-conf-core.sh +++ b/apps/ci/ci-conf-core.sh @@ -14,9 +14,6 @@ CBUILD_TESTING=ON CSCRIPTPCH=OFF CCOREPCH=OFF CCUSTOMOPTIONS='-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_FLAGS="-Werror" -DCMAKE_CXX_FLAGS="-Werror"' -DB_CHARACTERS_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';" -DB_AUTH_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';" -DB_WORLD_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';" CONFIG_SH case $COMPILER in diff --git a/apps/ci/ci-conf-db.sh b/apps/ci/ci-conf-db.sh index e0fc17bce..2bcfb9deb 100644 --- a/apps/ci/ci-conf-db.sh +++ b/apps/ci/ci-conf-db.sh @@ -12,9 +12,6 @@ CTOOLS_BUILD=db-only CSCRIPTPCH=OFF CCOREPCH=OFF CCUSTOMOPTIONS='-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_FLAGS="-Werror" -DCMAKE_CXX_FLAGS="-Werror"' -DB_CHARACTERS_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';" -DB_AUTH_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';" -DB_WORLD_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';" CONFIG_SH case $COMPILER in diff --git a/apps/ci/ci-install.sh b/apps/ci/ci-install.sh index c333d9685..ce0372cb8 100644 --- a/apps/ci/ci-install.sh +++ b/apps/ci/ci-install.sh @@ -14,9 +14,6 @@ CTOOLS=ON CSCRIPTPCH=OFF CCOREPCH=OFF CCUSTOMOPTIONS='-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_FLAGS="-Werror" -DCMAKE_CXX_FLAGS="-Werror"' -DB_CHARACTERS_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';" -DB_AUTH_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';" -DB_WORLD_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';" CONFIG_SH time sudo apt-get update -y diff --git a/apps/compiler/compiler.sh b/apps/compiler/compiler.sh index 140d5fa97..dcb94a6b6 100755 --- a/apps/compiler/compiler.sh +++ b/apps/compiler/compiler.sh @@ -29,6 +29,7 @@ comp_options=( "compile: Compile only" "all: clean, configure and compile" "ccacheClean: Clean ccache files, normally not needed" + "ccacheShowStats: show ccache statistics" "quit: Close this menu") comp_functions=( "comp_build" @@ -37,6 +38,7 @@ comp_functions=( "comp_compile" "comp_all" "comp_ccacheClean" + "comp_ccacheShowStats" "comp_quit") PS3='[ Please enter your choice ]: ' diff --git a/apps/compiler/includes/functions.sh b/apps/compiler/includes/functions.sh index 842f65b85..25cc507bc 100644 --- a/apps/compiler/includes/functions.sh +++ b/apps/compiler/includes/functions.sh @@ -17,6 +17,8 @@ function comp_ccacheEnable() { export CCACHE_CPP2=${CCACHE_CPP2:-true} # optimization for clang export CCACHE_COMPRESS=${CCACHE_COMPRESS:-1} export CCACHE_COMPRESSLEVEL=${CCACHE_COMPRESSLEVEL:-9} + export CCACHE_COMPILERCHECK=${CCACHE_COMPILERCHECK:-content} + export CCACHE_LOGFILE=${CCACHE_LOGFILE:-"$CCACHE_DIR/cache.debug"} #export CCACHE_NODIRECT=true export CCUSTOMOPTIONS="$CCUSTOMOPTIONS -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache" @@ -106,6 +108,8 @@ function comp_compile() { cd $BUILDPATH + comp_ccacheEnable + comp_ccacheResetStats time cmake --build . --config $CTYPE -j $MTHREADS diff --git a/apps/docker/Dockerfile b/apps/docker/Dockerfile index c70a2b118..97aed784e 100644 --- a/apps/docker/Dockerfile +++ b/apps/docker/Dockerfile @@ -45,7 +45,11 @@ RUN addgroup --gid $GROUP_ID acore && \ # must be created to set the correct permissions on them RUN mkdir -p /azerothcore/env/dist/bin -RUN mkdir -p /azerothcore/env/dist/data +RUN mkdir -p /azerothcore/env/dist/data/Cameras +RUN mkdir -p /azerothcore/env/dist/data/dbc +RUN mkdir -p /azerothcore/env/dist/data/maps +RUN mkdir -p /azerothcore/env/dist/data/mmaps +RUN mkdir -p /azerothcore/env/dist/data/vmaps RUN mkdir -p /azerothcore/env/dist/logs RUN mkdir -p /azerothcore/env/dist/temp RUN mkdir -p /azerothcore/env/dist/etc @@ -59,10 +63,14 @@ RUN chown -R $DOCKER_USER:$DOCKER_USER /azerothcore USER $DOCKER_USER -# copy everything so we can work directly within the container -# using tools such as vscode dev-container -# NOTE: this folder is different by the /azerothcore (which is binded instead) -COPY --chown=$DOCKER_USER:$DOCKER_USER . /azerothcore +# copy only necessary files for the acore dashboard +COPY --chown=$DOCKER_USER:$DOCKER_USER apps /azerothcore/apps +COPY --chown=$DOCKER_USER:$DOCKER_USER bin /azerothcore/bin +COPY --chown=$DOCKER_USER:$DOCKER_USER conf /azerothcore/conf +COPY --chown=$DOCKER_USER:$DOCKER_USER data /azerothcore/data +COPY --chown=$DOCKER_USER:$DOCKER_USER deps /azerothcore/deps +COPY --chown=$DOCKER_USER:$DOCKER_USER acore.json /azerothcore/acore.json +COPY --chown=$DOCKER_USER:$DOCKER_USER acore.sh /azerothcore/acore.sh # Download deno and make sure the dashboard works RUN bash /azerothcore/acore.sh quit @@ -79,6 +87,13 @@ FROM base as dev LABEL description="AC dev image for dev containers" +USER $DOCKER_USER + +# copy everything so we can work directly within the container +# using tools such as vscode dev-container +# NOTE: this folder is different by the /azerothcore (which is binded instead) +COPY --chown=$DOCKER_USER:$DOCKER_USER . /azerothcore + #================================================================ # # SERVICE BASE: prepare the OS for the production-ready services @@ -115,26 +130,21 @@ RUN apt-get update && apt-get install -y dos2unix gdb gdbserver google-perftools # change timezone in container RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata -# copy the sources from the host machine -COPY --chown=$DOCKER_USER:$DOCKER_USER apps /azerothcore/apps -COPY --chown=$DOCKER_USER:$DOCKER_USER bin /azerothcore/bin -COPY --chown=$DOCKER_USER:$DOCKER_USER conf /azerothcore/conf -COPY --chown=$DOCKER_USER:$DOCKER_USER data /azerothcore/data -COPY --chown=$DOCKER_USER:$DOCKER_USER deps /azerothcore/deps -COPY --chown=$DOCKER_USER:$DOCKER_USER acore.json /azerothcore/acore.json -COPY --chown=$DOCKER_USER:$DOCKER_USER acore.sh /azerothcore/acore.sh - # Correct permissions for non-root operations RUN chown -R $DOCKER_USER:$DOCKER_USER /home/acore RUN chown -R $DOCKER_USER:$DOCKER_USER /run RUN chown -R $DOCKER_USER:$DOCKER_USER /opt -RUN chown $DOCKER_USER:$DOCKER_USER /azerothcore +COPY --chown=$DOCKER_USER:$DOCKER_USER --from=base /azerothcore /azerothcore USER $DOCKER_USER # must be created to avoid permissions errors -RUN mkdir -p /azerothcore/env/dist/data +RUN mkdir -p /azerothcore/env/dist/data/Cameras +RUN mkdir -p /azerothcore/env/dist/data/dbc +RUN mkdir -p /azerothcore/env/dist/data/maps +RUN mkdir -p /azerothcore/env/dist/data/mmaps +RUN mkdir -p /azerothcore/env/dist/data/vmaps RUN mkdir -p /azerothcore/env/dist/logs RUN mkdir -p /azerothcore/env/dist/etc RUN mkdir -p /azerothcore/env/dist/bin @@ -157,12 +167,16 @@ LABEL description="AC authserver image for local environment" CMD ./acore.sh run-authserver +USER $DOCKER_USER + FROM servicebase as worldserver-local LABEL description="AC worldserver image for local environment" CMD ./acore.sh run-worldserver +USER $DOCKER_USER + #================================================================ # # BUILD: compile sources @@ -171,12 +185,20 @@ CMD ./acore.sh run-worldserver FROM base as build ARG DOCKER_USER=acore +USER $DOCKER_USER LABEL description="AC Image used by the build stage to generate production images" RUN mkdir -p /azerothcore/env/etc/ +# .git is needed by the compiler +COPY --chown=$DOCKER_USER:$DOCKER_USER ./.git /azerothcore/.git +COPY --chown=$DOCKER_USER:$DOCKER_USER ./CMakeLists.txt /azerothcore/CMakeLists.txt +COPY --chown=$DOCKER_USER:$DOCKER_USER ./deps /azerothcore/deps +COPY --chown=$DOCKER_USER:$DOCKER_USER ./src /azerothcore/src +COPY --chown=$DOCKER_USER:$DOCKER_USER ./modules /azerothcore/modules # check if we have ccache files available outside +RUN rm -rf /azerothcore/var/ccache/* COPY --chown=$DOCKER_USER:$DOCKER_USER var/docker/ccache /azerothcore/var/ccache COPY --chown=$DOCKER_USER:$DOCKER_USER env/docker/etc/authserver.conf.dockerdist /azerothcore/env/dist/etc/authserver.conf.dockerdist COPY --chown=$DOCKER_USER:$DOCKER_USER env/docker/etc/worldserver.conf.dockerdist /azerothcore/env/dist/etc/worldserver.conf.dockerdist @@ -207,6 +229,7 @@ FROM authserver-local as authserver LABEL description="AC Production: authserver" ARG DOCKER_USER=acore +USER $DOCKER_USER COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/etc /azerothcore/env/dist/etc COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/authserver /azerothcore/env/dist/bin/authserver @@ -222,6 +245,7 @@ FROM worldserver-local as worldserver LABEL description="AC Production: worldserver" ARG DOCKER_USER=acore +USER $DOCKER_USER RUN mkdir -p /azerothcore/env/dist/bin/lua_scripts COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/etc /azerothcore/env/dist/etc @@ -258,9 +282,8 @@ RUN addgroup --gid $GROUP_ID acore && \ ENV DATAPATH=/azerothcore/env/dist/data ENV DATAPATH_ZIP=/tmp/data.zip -RUN --mount=type=bind,target=/azerothcore-temp,readwrite /azerothcore-temp/acore.sh client-data && chown -R $DOCKER_USER:$DOCKER_USER /azerothcore - -RUN apt-get remove --purge -y tzdata curl unzip && apt-get autoremove -y +RUN mkdir -p "$DATAPATH" +RUN --mount=type=bind,target=/azerothcore-temp,readwrite --mount=type=cache,target=/azerothcore/env/dist/data /azerothcore-temp/acore.sh client-data && chown -R $DOCKER_USER:$DOCKER_USER /azerothcore USER $DOCKER_USER @@ -302,14 +325,14 @@ USER $DOCKER_USER WORKDIR /azerothcore/env/client/ +RUN mkdir -p /azerothcore/env/client/Cameras RUN mkdir -p /azerothcore/env/client/dbc RUN mkdir -p /azerothcore/env/client/maps RUN mkdir -p /azerothcore/env/client/mmaps RUN mkdir -p /azerothcore/env/client/vmaps -# Need fix -# COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/mapextractor /azerothcore/env/client/mapextractor -# COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/mmaps_generator /azerothcore/env/client/mmaps_generator -# COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/vmap4assembler /azerothcore/env/client/vmap4assembler -# COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/vmap4extractor /azerothcore/env/client/vmap4extractor +COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/map_extractor /azerothcore/env/client/map_extractor +COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/mmaps_generator /azerothcore/env/client/mmaps_generator +COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/vmap4_assembler /azerothcore/env/client/vmap4_assembler +COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/vmap4_extractor /azerothcore/env/client/vmap4_extractor diff --git a/apps/docker/config-docker.sh b/apps/docker/config-docker.sh index 8c3ac4206..7f5482480 100644 --- a/apps/docker/config-docker.sh +++ b/apps/docker/config-docker.sh @@ -1,5 +1,7 @@ CUR_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +CTOOLS_BUILD=all + # allow the user to override configs if [ -f "$AC_PATH_CONF/config.sh" ]; then source "$AC_PATH_CONF/config.sh" # should overwrite previous diff --git a/apps/docker/docker-cmd.ts b/apps/docker/docker-cmd.ts index ce03f34ce..43884f956 100644 --- a/apps/docker/docker-cmd.ts +++ b/apps/docker/docker-cmd.ts @@ -39,9 +39,19 @@ shellCommandFactory( "build", "Build the authserver and worldserver", [ - "docker compose --profile local build --parallel", + "docker compose --profile local --profile dev --profile dev-build build --parallel", + "docker image prune -f", + "docker compose run --rm --no-deps ac-dev-build bash apps/docker/docker-build-dev.sh", + ], + env +); + +shellCommandFactory( + "pull", + "Pull build and local images", + [ + "docker compose --profile local --profile dev --profile dev-build pull --parallel", "docker image prune -f", - "docker compose run --rm ac-build bash apps/docker/docker-build-dev.sh", ], env ); @@ -50,20 +60,9 @@ shellCommandFactory( "build:nocache", "Build the authserver and worldserver without docker cache", [ - "docker compose --profile local build --no-cache --parallel", + "docker compose --profile local --profile dev --profile dev-build build --no-cache --parallel", "docker image prune -f", - "docker compose run --rm ac-build bash apps/docker/docker-build-dev.sh", - ], - env -); - -shellCommandFactory( - "build:compile", - "Run the compilation process only, without rebuilding all docker images", - [ - "docker compose build --parallel ac-build", - "docker image prune -f", - "docker compose run --rm ac-build bash apps/docker/docker-build-dev.sh", + "docker compose run --rm --no-deps ac-dev-build bash apps/docker/docker-build-dev.sh", ], env ); @@ -73,7 +72,8 @@ shellCommandFactory( "Clean build files", [ "docker image prune -f", - `docker compose run --rm ac-build bash acore.sh compiler clean`, + `docker compose run --rm --no-deps ac-dev-server bash acore.sh compiler clean`, + `docker compose run --rm --no-deps ac-dev-server bash acore.sh compiler ccacheClean`, ], env ); @@ -81,7 +81,7 @@ shellCommandFactory( shellCommandFactory( "client-data", "Download client data inside the ac-data volume", - ["docker compose run --rm ac-build bash acore.sh client-data"], + ["docker compose run --rm --no-deps ac-dev-server bash acore.sh client-data"], env ); @@ -94,7 +94,7 @@ shellCommandFactory( shellCommandFactory( "dev:build", - "Build using the dev server, it uses volumes to compile which can be faster on linux & WSL", + "Build using the dev server", ["docker compose run --rm ac-dev-server bash acore.sh compiler build"], env ); @@ -118,28 +118,28 @@ shellCommandFactory( shellCommandFactory( "prod:build", - "Build producion services", + "[TEST ONLY] Build producion services", ["docker compose --profile prod build --parallel", "docker image prune -f"], env ); shellCommandFactory( "prod:pull", - "Pull production services from the remote registry", + "[TEST ONLY] Pull production services from the remote registry", ["docker compose --profile prod pull"], env ); shellCommandFactory( "prod:up", - "Start production services (foreground)", + "[TEST ONLY] Start production services (foreground)", ["docker compose --profile prod-app up"], env ); shellCommandFactory( "prod:up:d", - "Start production services (background)", + "[TEST ONLY] Start production services (background)", ["docker compose --profile prod-app up -d"], env ); @@ -176,7 +176,7 @@ program } services.pop(); - services = services.slice(2); + services = services.slice(1); res.close(); // Don't forget to close it @@ -304,8 +304,6 @@ async function checkDockerVersion() { } async function main() { - // Handle it however you like - // e.g. display usage while (true) { const version = await checkDockerVersion(); if (version !== true) { diff --git a/apps/installer/main.sh b/apps/installer/main.sh index 7475c8f2f..91d6cb1dc 100644 --- a/apps/installer/main.sh +++ b/apps/installer/main.sh @@ -67,7 +67,11 @@ function _switch() { DOCKER=1 denoRunFile "$AC_PATH_APPS/docker/docker-cmd.ts" "${@:2}" exit ;; - ""|"quit"|"14") + ""|"v"|"version"|"14") + denoRunFile "$AC_PATH_APPS/installer/main.ts" "version" + exit + ;; + ""|"quit"|"15") echo "Goodbye!" exit ;; diff --git a/apps/installer/main.ts b/apps/installer/main.ts new file mode 100644 index 000000000..135ccc645 --- /dev/null +++ b/apps/installer/main.ts @@ -0,0 +1,43 @@ +import { Command } from "https://cdn.deno.land/cmd/versions/v1.2.0/raw/mod.ts"; +import { getAcoreReleaseVersion } from "./utils.ts"; +import { Input } from "https://deno.land/x/cliffy@v0.25.2/prompt/mod.ts"; + +const program = new Command(); + +program + .name("acore.sh") + .description("Shell scripts for docker") + .version("1.0.0"); + +// program +// .command("quit") +// .description("Close docker command") +// .action(() => { +// process.exit(0); +// }); + +program + .command("version") + .description("Get the version of the current AzerothCore revision") + .action(async () => { + console.log(await getAcoreReleaseVersion()); + }); + +async function main() { + let exit = false; + do { + if (Deno.args.length === 0) { + program.outputHelp(); + const command = await Input.prompt({ + message: "Enter the command:", + }); + console.log(command); + await program.parseAsync(command.split(" ")); + } else { + exit = true; + await program.parseAsync(Deno.args); + process.exit(0); + } + } while (!exit); +} +main(); diff --git a/apps/installer/utils.ts b/apps/installer/utils.ts new file mode 100644 index 000000000..90d70ec6a --- /dev/null +++ b/apps/installer/utils.ts @@ -0,0 +1,17 @@ +import * as path from "https://deno.land/std/path/mod.ts"; +import makeloc from "https://deno.land/x/dirname@1.1.2/mod.ts"; + +const { __dirname } = makeloc(import.meta); + +// specify the needed paths here +const ACORE_JSON = path.resolve(__dirname + "/../../acore.json"); + +export async function getAcoreReleaseVersion() { + // read the acore.json file to work with the versioning + const decoder = new TextDecoder("utf-8"); + //console.debug(`Open ${ACORE_JSON}`) + const data = await Deno.readFile(ACORE_JSON); + const acoreInfo = JSON.parse(decoder.decode(data)); + + return `AzerothCore Rev. ${acoreInfo.version}`; +} diff --git a/conf/dist/env.ac b/conf/dist/env.ac index ed6169223..3f17c4d82 100644 --- a/conf/dist/env.ac +++ b/conf/dist/env.ac @@ -13,18 +13,6 @@ CTYPE=RelWithDebInfo CSCRIPTS=static AC_CCACHE=true -# -# DATABASE -# - -OUTPUT_FOLDER=/azerothcore/var/build/sql/ - -DB_AUTH_CONF="MYSQL_USER='root'; MYSQL_PASS='password'; MYSQL_HOST='ac-database'; MYSQL_PORT='3306';" - -DB_CHARACTERS_CONF="MYSQL_USER='root'; MYSQL_PASS='password'; MYSQL_HOST='ac-database'; MYSQL_PORT='3306';" - -DB_WORLD_CONF="MYSQL_USER='root'; MYSQL_PASS='password'; MYSQL_HOST='ac-database'; MYSQL_PORT='3306';" - # # SIMPLE RESTARTER # diff --git a/conf/dist/env.docker b/conf/dist/env.docker index 61f8fd965..030f20d9f 100644 --- a/conf/dist/env.docker +++ b/conf/dist/env.docker @@ -5,10 +5,15 @@ DOCKER_AC_ENV_FILE= -DOCKER_VOL_DATA= +DOCKER_VOL_ROOT= +DOCKER_VOL_CONF= DOCKER_VOL_ETC= DOCKER_VOL_LOGS= -DOCKER_VOL_CONF= +DOCKER_VOL_DATA_CAMERAS= +DOCKER_VOL_DATA_DBC= +DOCKER_VOL_DATA_MAPS= +DOCKER_VOL_DATA_VMAPS= +DOCKER_VOL_DATA_MMAPS= DOCKER_WORLD_EXTERNAL_PORT= DOCKER_SOAP_EXTERNAL_PORT= @@ -20,8 +25,3 @@ DOCKER_USER= DOCKER_USER_ID= DOCKER_GROUP_ID= -# To maximize the performance on MAC you can change the DOCKER_EXTENDS_BIND variable -# to "abstract-no-bind", however it won't bind the host directory inside the container. -# It means that you need to work directly within the container using a tool -# like the VScode dev-container of the remote-extension suite -DOCKER_EXTENDS_BIND= diff --git a/docker-compose.yml b/docker-compose.yml index 6217ed7be..416d424a5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -20,36 +20,17 @@ x-ac-shared-conf: &ac-shared-conf working_dir: /azerothcore environment: AC_DISABLE_INTERACTIVE: "1" - depends_on: - ac-database: - condition: service_healthy + +x-ac-service-conf: &ac-service-conf + <<: *ac-shared-conf + # List can't be merged. See: https://forums.docker.com/t/how-to-merge-a-list-of-volumes-from-an-extension-field-into-the-service-definition/77454 + # volumes: + # - ${DOCKER_VOL_ETC:-./env/docker/etc}:/azerothcore/env/dist/etc + # # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544 + # - ${DOCKER_VOL_LOGS:-./env/docker/logs}:/azerothcore/env/dist/logs:delegated + services: -#============================ -# -# Abstract services to extend -# -#============================ - - abstract-bind: - image: local/azerothcore/abstract-bind - volumes: - - .:/azerothcore - # expose some dist folder outside allowing the host to use them - - ${DOCKER_VOL_CONF:-./conf}:/azerothcore/conf - - ${DOCKER_VOL_BIN:-ac-bin}:/azerothcore/env/dist/bin - - ${DOCKER_VOL_ETC:-./env/docker/etc}:/azerothcore/env/dist/etc - # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544 - - ${DOCKER_VOL_LOGS:-./env/docker/logs}:/azerothcore/env/dist/logs:delegated - - ${DOCKER_VOL_DATA:-./env/docker/data}:/azerothcore/env/dist/data:delegated - profiles: [abstract-service] # do not run this - - abstract-no-bind: - image: local/azerothcore/abstract-no-bind - volumes: - - ac-proj:/azerothcore - profiles: [abstract-service] # do not run this - #======================= # # DATABASE @@ -77,97 +58,57 @@ services: timeout: 10s retries: 40 -#======================= -# -# APP Services -# -#======================= - - ac-worldserver: - <<: *ac-shared-conf - extends: ${DOCKER_EXTENDS_BIND:-abstract-bind} - stdin_open: true - tty: true - command: ./acore.sh run-worldserver - image: acore/ac-wotlk-worldserver-local:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally - restart: unless-stopped - env_file: - ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} - user: ${DOCKER_USER:-acore} - privileged: true - build: - context: . - target: worldserver-local - dockerfile: ./apps/docker/Dockerfile - args: - USER_ID: ${DOCKER_USER_ID:-1000} - GROUP_ID: ${DOCKER_GROUP_ID:-1000} - DOCKER_USER: ${DOCKER_USER:-acore} - <<: *cache-from - ports: - - ${DOCKER_WORLD_EXTERNAL_PORT:-8085}:8085 - - ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878 - profiles: [local, app, worldserver] - - ac-authserver: - <<: *ac-shared-conf - extends: ${DOCKER_EXTENDS_BIND:-abstract-bind} - tty: true - command: ./acore.sh run-authserver - image: acore/ac-wotlk-authserver-local:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally - restart: unless-stopped - env_file: - ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} - user: ${DOCKER_USER:-acore} - build: - context: . - target: authserver-local - dockerfile: ./apps/docker/Dockerfile - args: - USER_ID: ${DOCKER_USER_ID:-1000} - GROUP_ID: ${DOCKER_GROUP_ID:-1000} - DOCKER_USER: ${DOCKER_USER:-acore} - <<: *cache-from - ports: - - ${DOCKER_AUTH_EXTERNAL_PORT:-3724}:3724 - profiles: [local, app, authserver] - #====================== # # Dev services # #====================== - ac-build: - <<: *ac-shared-conf - extends: ${DOCKER_EXTENDS_BIND:-abstract-bind} - image: acore/ac-wotlk-dev-server:${DOCKER_IMAGE_TAG:-master} - build: - context: . - target: ${DOCKER_AC_BUILD_TARGET:-dev} - dockerfile: ./apps/docker/Dockerfile - args: - USER_ID: ${DOCKER_USER_ID:-1000} - GROUP_ID: ${DOCKER_GROUP_ID:-1000} - DOCKER_USER: ${DOCKER_USER:-acore} - <<: *cache-from - env_file: - ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} - working_dir: /azerothcore/ - volumes: - - ${DOCKER_VOL_BUILD:-ac-build}:/azerothcore/var/build - # with this conf you can use an external path for it (useful for CI) - - ${DOCKER_VOL_CCACHE:-ac-ccache}:/azerothcore/var/ccache - # use internal copied files instead of volumes - - /azerothcore/src - - /azerothcore/data - - /azerothcore/modules - profiles: [local, build] - ac-dev-server: - <<: *ac-shared-conf - extends: ${DOCKER_EXTENDS_BIND:-abstract-bind} - tty: true + # + # Used for the build process to avoid the host binding of the /azerothcore + # and speedup the compilation by avoiding the host-container filesystem conversion issue + # on non-ext filesystems. Reference https://stackoverflow.com/a/63437557/1964544 + # + ac-dev-build: + <<: [ *ac-shared-conf ] # merge with image: acore/ac-wotlk-dev-server:${DOCKER_IMAGE_TAG:-master} + user: ${DOCKER_USER:-root} + cap_add: + - SYS_NICE # CAP_SYS_NICE + build: + context: . + target: dev + dockerfile: ./apps/docker/Dockerfile + args: + USER_ID: ${DOCKER_USER_ID:-1000} + GROUP_ID: ${DOCKER_GROUP_ID:-1000} + DOCKER_USER: ${DOCKER_USER:-acore} + <<: *cache-from + security_opt: + - seccomp:unconfined + env_file: + ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} + volumes: + # expose some dist folder outside allowing the host to use them + - ${DOCKER_VOL_CONF:-./conf}:/azerothcore/conf + - ${DOCKER_VOL_BIN:-ac-bin-dev}:/azerothcore/env/dist/bin + - ${DOCKER_VOL_ETC:-./env/docker/etc}:/azerothcore/env/dist/etc + - ac-build-dev:/azerothcore/var/build + - ac-ccache-dev:/azerothcore/var/ccache + profiles: [dev-build] + + # + # Dev server with the ./azerothcore folder binded from the host + # Please use Linux, WSL2 or any ext-compatible filesystem + # to avoid performance issues + # + ac-dev-server: + <<: [ *ac-shared-conf ] # merge with + tty: true + image: acore/ac-wotlk-dev-server:${DOCKER_IMAGE_TAG:-master} + user: ${DOCKER_USER:-root} + cap_add: + - SYS_NICE # CAP_SYS_NICE build: context: . target: dev @@ -181,36 +122,182 @@ services: - seccomp:unconfined env_file: ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} - user: ${DOCKER_USER:-acore} - environment: - DBLIST: AUTH,CHARACTERS,WORLD ports: - ${DOCKER_AUTH_EXTERNAL_PORT:-3724}:3724 - ${DOCKER_WORLD_EXTERNAL_PORT:-8085}:8085 - ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878 volumes: + - ${DOCKER_VOL_ROOT:-.}:/azerothcore:cached + # expose some dist folder outside allowing the host to use them + - ${DOCKER_VOL_CONF:-./conf}:/azerothcore/conf + - ${DOCKER_VOL_BIN:-ac-bin-dev}:/azerothcore/env/dist/bin + - ${DOCKER_VOL_ETC:-./env/docker/etc}:/azerothcore/env/dist/etc + # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544 + - ${DOCKER_VOL_LOGS:-./env/docker/logs}:/azerothcore/env/dist/logs:delegated - ac-build-dev:/azerothcore/var/build - ac-ccache-dev:/azerothcore/var/ccache + # client data + - ${DOCKER_VOL_DATA_CAMERAS:-./env/docker/data/Cameras}:/azerothcore/env/dist/data/Cameras + - ${DOCKER_VOL_DATA_DBC:-./env/docker/data/dbc}:/azerothcore/env/dist/data/dbc + - ${DOCKER_VOL_DATA_MAPS:-./env/docker/data/maps}:/azerothcore/env/dist/data/maps + - ${DOCKER_VOL_DATA_VMAPS:-./env/docker/data/vmaps}:/azerothcore/env/dist/data/vmaps + - ${DOCKER_VOL_DATA_MMAPS:-./env/docker/data/mmaps}:/azerothcore/env/dist/data/mmaps + # remount again for the extractors + - ${DOCKER_VOL_DATA_CAMERAS:-./env/docker/data/Cameras}:/azerothcore/env/dist/bin/Cameras + - ${DOCKER_VOL_DATA_DBC:-./env/docker/data/dbc}:/azerothcore/env/dist/bin/dbc + - ${DOCKER_VOL_DATA_MAPS:-./env/docker/data/maps}:/azerothcore/env/dist/bin/maps + - ${DOCKER_VOL_DATA_VMAPS:-./env/docker/data/vmaps}:/azerothcore/env/dist/bin/vmaps + - ${DOCKER_VOL_DATA_MMAPS:-./env/docker/data/mmaps}:/azerothcore/env/dist/bin/mmaps # this is not the directory of the extracted data! It's the client folder used by the extractors - - ${DOCKER_CLIENT_DATA_FOLDER:-./var/client}:/azerothcore/env/dist/bin/Data + - ${DOCKER_AC_CLIENT_FOLDER:-./var/client}:/azerothcore/env/dist/bin/Data profiles: [dev] + depends_on: + ac-database: + condition: service_healthy + + ac-db-import: + <<: *ac-shared-conf + image: acore/ac-wotlk-worldserver-local:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally + command: ./env/dist/bin/dbimport + volumes: + # read-only binaries compiled by ac-dev-server + - ${DOCKER_VOL_BIN:-ac-bin-dev}:/azerothcore/env/dist/bin:ro + - ${DOCKER_VOL_ETC:-./env/docker/etc}:/azerothcore/env/dist/etc + # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544 + - ${DOCKER_VOL_LOGS:-./env/docker/logs}:/azerothcore/env/dist/logs:delegated + profiles: [local, app, db-import-local] + depends_on: + ac-database: + condition: service_healthy + +#======================= +# +# APP Services +# +#======================= + + ac-worldserver: + <<: *ac-service-conf # merge with ac-service-conf + stdin_open: true + tty: true + cap_add: + - SYS_NICE # CAP_SYS_NICE + command: ./acore.sh run-worldserver + image: acore/ac-wotlk-worldserver-local:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally + restart: unless-stopped + env_file: + ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} + user: ${DOCKER_USER:-root} + privileged: true + build: + context: . + target: worldserver-local + dockerfile: ./apps/docker/Dockerfile + args: + USER_ID: ${DOCKER_USER_ID:-1000} + GROUP_ID: ${DOCKER_GROUP_ID:-1000} + DOCKER_USER: ${DOCKER_USER:-acore} + <<: *cache-from + ports: + - ${DOCKER_WORLD_EXTERNAL_PORT:-8085}:8085 + - ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878 + volumes: + # read-only binaries compiled by ac-dev-server + - ${DOCKER_VOL_BIN:-ac-bin-dev}:/azerothcore/env/dist/bin:ro + - ${DOCKER_VOL_ETC:-./env/docker/etc}:/azerothcore/env/dist/etc + # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544 + - ${DOCKER_VOL_LOGS:-./env/docker/logs}:/azerothcore/env/dist/logs:delegated + # client data + - ${DOCKER_VOL_DATA_CAMERAS:-./env/docker/data/Cameras}:/azerothcore/env/dist/data/Cameras + - ${DOCKER_VOL_DATA_DBC:-./env/docker/data/dbc}:/azerothcore/env/dist/data/dbc + - ${DOCKER_VOL_DATA_MAPS:-./env/docker/data/maps}:/azerothcore/env/dist/data/maps + - ${DOCKER_VOL_DATA_VMAPS:-./env/docker/data/vmaps}:/azerothcore/env/dist/data/vmaps + - ${DOCKER_VOL_DATA_MMAPS:-./env/docker/data/mmaps}:/azerothcore/env/dist/data/mmaps + profiles: [local, app, worldserver] + depends_on: + ac-database: + condition: service_healthy + ac-db-import: + condition: service_completed_successfully + + ac-authserver: + <<: *ac-service-conf # merge with ac-service-conf + tty: true + command: ./acore.sh run-authserver + image: acore/ac-wotlk-authserver-local:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally + restart: unless-stopped + env_file: + ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} + user: ${DOCKER_USER:-root} + build: + context: . + target: authserver-local + dockerfile: ./apps/docker/Dockerfile + args: + USER_ID: ${DOCKER_USER_ID:-1000} + GROUP_ID: ${DOCKER_GROUP_ID:-1000} + DOCKER_USER: ${DOCKER_USER:-acore} + <<: *cache-from + volumes: + # read-only binaries compiled by ac-dev-server + - ${DOCKER_VOL_BIN:-ac-bin-dev}:/azerothcore/env/dist/bin:ro + - ${DOCKER_VOL_ETC:-./env/docker/etc}:/azerothcore/env/dist/etc + # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544 + - ${DOCKER_VOL_LOGS:-./env/docker/logs}:/azerothcore/env/dist/logs:delegated + ports: + - ${DOCKER_AUTH_EXTERNAL_PORT:-3724}:3724 + profiles: [local, app, authserver] + depends_on: + ac-database: + condition: service_healthy + ac-db-import: + condition: service_completed_successfully #====================== # # Production services # +# The following services are used to test the production images +# Do not use them unless you know what you're doing! +# We do not offer support for them +# +# For a production-ready docker-compose, please check the official repo: https://github.com/azerothcore/acore-docker +# #====================== + ac-database-prod: + <<: *networks + image: mysql:8.0 + restart: unless-stopped + cap_add: + - SYS_NICE # CAP_SYS_NICE + ports: + - ${DOCKER_DB_EXTERNAL_PORT:-3306}:3306 + environment: + - MYSQL_ROOT_PASSWORD=${DOCKER_DB_ROOT_PASSWORD:-password} + volumes: + - type: volume + source: ac-database-prod + target: /var/lib/mysql + healthcheck: + test: "/usr/bin/mysql --user=root --password=$$MYSQL_ROOT_PASSWORD --execute \"SHOW DATABASES;\"" + interval: 5s + timeout: 10s + retries: 40 + profiles: [prod] + ac-worldserver-prod: - <<: *ac-shared-conf + <<: *ac-service-conf # merge with ac-service-conf stdin_open: true tty: true + cap_add: + - SYS_NICE # CAP_SYS_NICE command: ./acore.sh run-worldserver image: acore/ac-wotlk-worldserver:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally restart: unless-stopped env_file: ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} - user: ${DOCKER_USER:-acore} + user: ${DOCKER_USER:-root} privileged: true build: context: . @@ -226,21 +313,25 @@ services: - ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878 volumes: - ${DOCKER_VOL_LOGS:-./env/docker/logs}:/azerothcore/env/dist/logs:delegated - volumes_from: - - ac-client-data-server:ro - depends_on: - - ac-client-data-server + - ${DOCKER_VOL_CLIENT_DATA_PROD:-ac-client-data-prod}:/azerothcore/env/dist/data:ro profiles: [prod, prod-app, prod-worldserver] + depends_on: + ac-database-prod: + condition: service_healthy + ac-db-import-prod: + condition: service_completed_successfully + ac-client-data-init: + condition: service_started ac-authserver-prod: - <<: *ac-shared-conf + <<: *ac-service-conf # merge with ac-service-conf tty: true command: ./acore.sh run-authserver image: acore/ac-wotlk-authserver:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally restart: unless-stopped env_file: ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} - user: ${DOCKER_USER:-acore} + user: ${DOCKER_USER:-root} build: context: . target: authserver @@ -255,10 +346,16 @@ services: ports: - ${DOCKER_AUTH_EXTERNAL_PORT:-3724}:3724 profiles: [prod, prod-app, prod-authserver] + depends_on: + ac-database-prod: + condition: service_healthy + ac-db-import-prod: + condition: service_completed_successfully - ac-client-data-server: + + ac-client-data-init: image: acore/ac-wotlk-client-data:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally - user: ${DOCKER_USER:-acore} + user: ${DOCKER_USER:-root} build: context: . target: client-data @@ -269,12 +366,12 @@ services: DOCKER_USER: ${DOCKER_USER:-acore} <<: *cache-from volumes: - - /azerothcore/env/dist/data + - ${DOCKER_VOL_CLIENT_DATA_PROD:-ac-client-data-prod}:/azerothcore/env/dist/data:ro profiles: [prod, prod-app, clientdata] ac-tools: image: acore/ac-wotlk-tools:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally - user: ${DOCKER_USER:-acore} + user: ${DOCKER_USER:-root} build: context: . target: tools @@ -286,34 +383,54 @@ services: <<: *cache-from working_dir: /azerothcore/env/client/ volumes: - - ${DOCKER_CLIENT_DATA_FOLDER:-./var/client}:/azerothcore/env/client/Data - - ${DOCKER_VOL_TOOLS_DBC:-./var/extractors/dbc}:/azerothcore/env/client/dbc - - ${DOCKER_VOL_TOOLS_MAPS:-./var/extractors/maps}:/azerothcore/env/client/maps - - ${DOCKER_VOL_TOOLS_VMAPS:-./var/extractors/vmaps}:/azerothcore/env/client/vmaps - - ${DOCKER_VOL_TOOLS_MMAPS:-./var/extractors/mmaps}:/azerothcore/env/client/mmaps + # this is not the directory of the extracted data! It's the client folder used by the extractors + - ${DOCKER_AC_CLIENT_FOLDER:-./var/client}:/azerothcore/env/dist/bin/Data profiles: [prod, tools] - ac-db-import: + ac-db-import-prod: <<: *ac-shared-conf image: acore/ac-wotlk-worldserver:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally command: ./env/dist/bin/dbimport - profiles: [db-import] + profiles: [prod, prod-app, db-import-prod] + + # + # Only for internal tests + # + ac-build-prod: + <<: *ac-shared-conf + build: + context: . + target: build + dockerfile: ./apps/docker/Dockerfile + args: + USER_ID: ${DOCKER_USER_ID:-1000} + GROUP_ID: ${DOCKER_GROUP_ID:-1000} + DOCKER_USER: ${DOCKER_USER:-acore} + <<: *cache-from + env_file: + ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} + working_dir: /azerothcore/ + profiles: [prod-build] volumes: ac-database: - ac-bin: + ac-database-prod: + ac-bin-dev: ac-build-dev: - ac-build: ac-ccache-dev: - ac-ccache: ac-proj: + ac-client-data-prod: # not used, but you can use them by setting # the DOCKER_VOL_* env variabiles + ac-root: ac-conf: ac-etc: ac-logs: - ac-client-data: - ac-client-data-prod: + ac-client-data-cameras: + ac-client-data-dbc: + ac-client-data-maps: + ac-client-data-vmaps: + ac-client-data-mmaps: networks: ac-network: diff --git a/env/docker/data/Cameras/.gitkeep b/env/docker/data/Cameras/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/env/docker/data/dbc/.gitkeep b/env/docker/data/dbc/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/env/docker/data/maps/.gitkeep b/env/docker/data/maps/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/env/docker/data/mmaps/.gitkeep b/env/docker/data/mmaps/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/env/docker/data/vmaps/.gitkeep b/env/docker/data/vmaps/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/env/docker/etc/authserver.conf.dockerdist b/env/docker/etc/authserver.conf.dockerdist index 1a470661e..15eb0e107 100644 --- a/env/docker/etc/authserver.conf.dockerdist +++ b/env/docker/etc/authserver.conf.dockerdist @@ -16,7 +16,7 @@ TempDir = "/azerothcore/env/dist/temp" LoginDatabaseInfo = "ac-database;3306;root;password;acore_auth" # Add more configuration overwrites by copying settings from from authserver.conf.dist -LogLevel = 3 + SQLDriverLogFile = "SQLDriver.log" SQLDriverQueryLogging = 1 diff --git a/env/docker/etc/dbimport.conf.dockerdist b/env/docker/etc/dbimport.conf.dockerdist index 183cf873e..e9f97375a 100644 --- a/env/docker/etc/dbimport.conf.dockerdist +++ b/env/docker/etc/dbimport.conf.dockerdist @@ -13,7 +13,6 @@ WorldDatabaseInfo = "ac-database;3306;root;password;acore_world" CharacterDatabaseInfo = "ac-database;3306;root;password;acore_characters" # Add more configuration overwrites by copying settings from worldserver.conf.dist -LogLevel = 2 # Disable idle connections automatic kick since it doesn't work well on macOS + Docker CloseIdleConnections = 0 diff --git a/env/docker/etc/worldserver.conf.dockerdist b/env/docker/etc/worldserver.conf.dockerdist index c5dc18fe5..a51ef16d5 100644 --- a/env/docker/etc/worldserver.conf.dockerdist +++ b/env/docker/etc/worldserver.conf.dockerdist @@ -18,7 +18,6 @@ WorldDatabaseInfo = "ac-database;3306;root;password;acore_world" CharacterDatabaseInfo = "ac-database;3306;root;password;acore_characters" # Add more configuration overwrites by copying settings from worldserver.conf.dist -LogLevel = 2 # Disable idle connections automatic kick since it doesn't work well on macOS + Docker CloseIdleConnections = 0 diff --git a/var/extractors/Cameras/.gitkeep b/var/extractors/Cameras/.gitkeep new file mode 100644 index 000000000..e69de29bb From 4e7c57f7e6704f04e1ea7ab10c7fe00c737bf8eb Mon Sep 17 00:00:00 2001 From: Yehonal Date: Mon, 7 Nov 2022 14:48:22 +0100 Subject: [PATCH 24/30] fix(CORE/docker): image tag creation --- .github/workflows/docker_build.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml index 850f7affe..81b8ffd49 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -62,6 +62,8 @@ jobs: # pull the images first to load the docker cache layers ./acore.sh docker pull ./acore.sh docker build + output=$(./acore.sh version | grep "AzerothCore Rev. ") && version=${output#"AzerothCore Rev. "} + DOCKER_IMAGE_TAG=$version docker compose --profile dev --profile local build - name: Deploy Dev #env: @@ -69,7 +71,7 @@ jobs: if: github.repository == 'azerothcore/azerothcore-wotlk' && steps.extract_branch.outputs.branch == 'master' run: | docker compose --profile dev --profile local push - output=$(./acore.sh version | grep "AzerothCore Rev.") && version=${output#"AzerothCore Rev."} + output=$(./acore.sh version | grep "AzerothCore Rev. ") && version=${output#"AzerothCore Rev. "} DOCKER_IMAGE_TAG=$version docker compose --profile local push docker-build-n-deploy-prod: @@ -132,6 +134,8 @@ jobs: # pull the images first to load the docker cache layers ./acore.sh docker prod:pull ./acore.sh docker prod:build + output=$(./acore.sh version | grep "AzerothCore Rev. ") && version=${output#"AzerothCore Rev. "} + DOCKER_IMAGE_TAG=$version ./acore.sh docker prod:build # create the container to allow the copy right after docker compose create ac-build-prod docker compose cp ac-build-prod:/azerothcore/var/ccache var/docker/ @@ -143,7 +147,7 @@ jobs: if: github.repository == 'azerothcore/azerothcore-wotlk' && steps.extract_branch.outputs.branch == 'master' run: | docker compose --profile prod push - output=$(./acore.sh version | grep "AzerothCore Rev.") && version=${output#"AzerothCore Rev."} + output=$(./acore.sh version | grep "AzerothCore Rev. ") && version=${output#"AzerothCore Rev. "} DOCKER_IMAGE_TAG=$version docker compose --profile prod push From 9dbadbd6d98df8f22f0694eac10e85e743b4dc56 Mon Sep 17 00:00:00 2001 From: Yehonal Date: Mon, 7 Nov 2022 16:36:12 +0100 Subject: [PATCH 25/30] fix(CI/docker_build): missing step --- .github/workflows/docker_build.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml index 81b8ffd49..37f2af9b7 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -155,6 +155,11 @@ jobs: needs: [ docker-build-n-deploy-prod , docker-build-n-deploy-dev] runs-on: ubuntu-latest steps: + - name: Extract branch name + shell: bash + run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" + id: extract_branch + - name: Repository Dispatch if: github.repository == 'azerothcore/azerothcore-wotlk' && steps.extract_branch.outputs.branch == 'master' uses: peter-evans/repository-dispatch@v2 From e0313219e3f7cef9303b9886a2386ff2b112984f Mon Sep 17 00:00:00 2001 From: Yehonal Date: Mon, 7 Nov 2022 17:30:00 +0100 Subject: [PATCH 26/30] feat(CORE/docker): cachebust for the client data --- .github/workflows/docker_build.yml | 1 + apps/docker/Dockerfile | 1 + docker-compose.yml | 1 + 3 files changed, 3 insertions(+) diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml index 37f2af9b7..b3611ade6 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -57,6 +57,7 @@ jobs: DOCKER_CLIENT_TIMEOUT: 400 COMPOSE_HTTP_TIMEOUT: 400 run: | + export CACHEBUST=$EPOCHSECONDS export DOCKER_USER_ID=$(id -u) export DOCKER_GROUP_ID=$(id -u) # pull the images first to load the docker cache layers diff --git a/apps/docker/Dockerfile b/apps/docker/Dockerfile index 97aed784e..2919700ed 100644 --- a/apps/docker/Dockerfile +++ b/apps/docker/Dockerfile @@ -283,6 +283,7 @@ ENV DATAPATH=/azerothcore/env/dist/data ENV DATAPATH_ZIP=/tmp/data.zip RUN mkdir -p "$DATAPATH" +ARG CACHEBUST=1 RUN --mount=type=bind,target=/azerothcore-temp,readwrite --mount=type=cache,target=/azerothcore/env/dist/data /azerothcore-temp/acore.sh client-data && chown -R $DOCKER_USER:$DOCKER_USER /azerothcore USER $DOCKER_USER diff --git a/docker-compose.yml b/docker-compose.yml index 416d424a5..e4d428244 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -364,6 +364,7 @@ services: USER_ID: ${DOCKER_USER_ID:-1000} GROUP_ID: ${DOCKER_GROUP_ID:-1000} DOCKER_USER: ${DOCKER_USER:-acore} + CACHEBUST: ${CACHEBUST:-1} <<: *cache-from volumes: - ${DOCKER_VOL_CLIENT_DATA_PROD:-ac-client-data-prod}:/azerothcore/env/dist/data:ro From 839731d5d5c31f7e2eaf17069fcd979c5a474354 Mon Sep 17 00:00:00 2001 From: Yehonal Date: Mon, 7 Nov 2022 17:44:47 +0100 Subject: [PATCH 27/30] fix(CORE/docker): client data image deployment --- .github/workflows/docker_build.yml | 2 +- apps/docker/Dockerfile | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml index b3611ade6..cac3b23dc 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -167,5 +167,5 @@ jobs: with: token: ${{ secrets.ACORE_DOCKER_REPO_ACCESS_TOKEN }} repository: azerothcore/acore-docker - # event-type: my-event + event-type: azerothcore-new-images client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}"}' diff --git a/apps/docker/Dockerfile b/apps/docker/Dockerfile index 2919700ed..63f68d834 100644 --- a/apps/docker/Dockerfile +++ b/apps/docker/Dockerfile @@ -279,12 +279,15 @@ RUN addgroup --gid $GROUP_ID acore && \ passwd -d acore && \ echo 'acore ALL=(ALL:ALL) NOPASSWD: ALL' >> /etc/sudoers -ENV DATAPATH=/azerothcore/env/dist/data +ENV DATAPATH=/azerothcore/env/dist/data-temp ENV DATAPATH_ZIP=/tmp/data.zip RUN mkdir -p "$DATAPATH" +RUN mkdir -p "/azerothcore/env/dist/data" ARG CACHEBUST=1 -RUN --mount=type=bind,target=/azerothcore-temp,readwrite --mount=type=cache,target=/azerothcore/env/dist/data /azerothcore-temp/acore.sh client-data && chown -R $DOCKER_USER:$DOCKER_USER /azerothcore +RUN --mount=type=bind,target=/azerothcore-temp,readwrite --mount=type=cache,target=/azerothcore/env/dist/data-temp /azerothcore-temp/acore.sh client-data && cp -rT /azerothcore/env/dist/data-temp/ /azerothcore/env/dist/data && chown -R $DOCKER_USER:$DOCKER_USER /azerothcore + +ENV DATAPATH=/azerothcore/env/dist/data USER $DOCKER_USER From d2051363458bea3c5deaf5682b3f8b7fd808039d Mon Sep 17 00:00:00 2001 From: Yehonal Date: Mon, 7 Nov 2022 18:02:29 +0100 Subject: [PATCH 28/30] fix(CORE/docker): restore old client-data image creation --- apps/docker/Dockerfile | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/apps/docker/Dockerfile b/apps/docker/Dockerfile index 63f68d834..a425f174c 100644 --- a/apps/docker/Dockerfile +++ b/apps/docker/Dockerfile @@ -279,15 +279,14 @@ RUN addgroup --gid $GROUP_ID acore && \ passwd -d acore && \ echo 'acore ALL=(ALL:ALL) NOPASSWD: ALL' >> /etc/sudoers -ENV DATAPATH=/azerothcore/env/dist/data-temp +# ENV DATAPATH=/azerothcore/env/dist/data-temp +ENV DATAPATH=/azerothcore/env/dist/data ENV DATAPATH_ZIP=/tmp/data.zip RUN mkdir -p "$DATAPATH" -RUN mkdir -p "/azerothcore/env/dist/data" ARG CACHEBUST=1 -RUN --mount=type=bind,target=/azerothcore-temp,readwrite --mount=type=cache,target=/azerothcore/env/dist/data-temp /azerothcore-temp/acore.sh client-data && cp -rT /azerothcore/env/dist/data-temp/ /azerothcore/env/dist/data && chown -R $DOCKER_USER:$DOCKER_USER /azerothcore - -ENV DATAPATH=/azerothcore/env/dist/data +# RUN --mount=type=bind,target=/azerothcore-temp,readwrite --mount=type=cache,target=/azerothcore/env/dist/data-temp /azerothcore-temp/acore.sh client-data && cp -rT /azerothcore/env/dist/data-temp/ /azerothcore/env/dist/data && chown -R $DOCKER_USER:$DOCKER_USER /azerothcore +RUN --mount=type=bind,target=/azerothcore-temp,readwrite /azerothcore-temp/acore.sh client-data && chown -R $DOCKER_USER:$DOCKER_USER /azerothcore USER $DOCKER_USER From b6b257327249b1b1ce4855116cfbc809fd7571c2 Mon Sep 17 00:00:00 2001 From: Yehonal Date: Mon, 7 Nov 2022 20:38:59 +0100 Subject: [PATCH 29/30] fix(CI): missing --profile dev --- .github/workflows/docker_build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml index cac3b23dc..eb6afa024 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -73,7 +73,7 @@ jobs: run: | docker compose --profile dev --profile local push output=$(./acore.sh version | grep "AzerothCore Rev. ") && version=${output#"AzerothCore Rev. "} - DOCKER_IMAGE_TAG=$version docker compose --profile local push + DOCKER_IMAGE_TAG=$version docker compose --profile dev --profile local push docker-build-n-deploy-prod: strategy: From c2d23b3578cfbf5a11eb80683e8f1ef38fdb26a8 Mon Sep 17 00:00:00 2001 From: Yehonal Date: Mon, 7 Nov 2022 21:08:49 +0100 Subject: [PATCH 30/30] feat(CORE/docker): try to leverage inline cache --- .github/workflows/docker_build.yml | 6 +++ docker-compose.yml | 79 +++++++----------------------- 2 files changed, 24 insertions(+), 61 deletions(-) diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml index eb6afa024..c11c067da 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -43,6 +43,9 @@ jobs: docker --version docker compose --version + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + - name: Login to Docker Hub if: github.repository == 'azerothcore/azerothcore-wotlk' && steps.extract_branch.outputs.branch == 'master' uses: docker/login-action@v1 @@ -107,6 +110,9 @@ jobs: docker --version docker compose --version + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + - name: Login to Docker Hub if: github.repository == 'azerothcore/azerothcore-wotlk' && steps.extract_branch.outputs.branch == 'master' uses: docker/login-action@v1 diff --git a/docker-compose.yml b/docker-compose.yml index e4d428244..a69a289f8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,14 @@ x-networks: &networks networks: - ac-network -x-cache-from: &cache-from +x-build-params: &build-params + context: . + dockerfile: ./apps/docker/Dockerfile + args: + USER_ID: ${DOCKER_USER_ID:-1000} + GROUP_ID: ${DOCKER_GROUP_ID:-1000} + DOCKER_USER: ${DOCKER_USER:-acore} + BUILDKIT_INLINE_CACHE: 1 cache_from: - acore/ac-wotlk-authserver:${DOCKER_IMAGE_TAG:-master} - acore/ac-wotlk-authserver-local:${DOCKER_IMAGE_TAG:-master} @@ -76,14 +83,8 @@ services: cap_add: - SYS_NICE # CAP_SYS_NICE build: - context: . target: dev - dockerfile: ./apps/docker/Dockerfile - args: - USER_ID: ${DOCKER_USER_ID:-1000} - GROUP_ID: ${DOCKER_GROUP_ID:-1000} - DOCKER_USER: ${DOCKER_USER:-acore} - <<: *cache-from + <<: *build-params security_opt: - seccomp:unconfined env_file: @@ -110,14 +111,8 @@ services: cap_add: - SYS_NICE # CAP_SYS_NICE build: - context: . target: dev - dockerfile: ./apps/docker/Dockerfile - args: - USER_ID: ${DOCKER_USER_ID:-1000} - GROUP_ID: ${DOCKER_GROUP_ID:-1000} - DOCKER_USER: ${DOCKER_USER:-acore} - <<: *cache-from + <<: *build-params security_opt: - seccomp:unconfined env_file: @@ -190,14 +185,8 @@ services: user: ${DOCKER_USER:-root} privileged: true build: - context: . target: worldserver-local - dockerfile: ./apps/docker/Dockerfile - args: - USER_ID: ${DOCKER_USER_ID:-1000} - GROUP_ID: ${DOCKER_GROUP_ID:-1000} - DOCKER_USER: ${DOCKER_USER:-acore} - <<: *cache-from + <<: *build-params ports: - ${DOCKER_WORLD_EXTERNAL_PORT:-8085}:8085 - ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878 @@ -230,14 +219,8 @@ services: ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} user: ${DOCKER_USER:-root} build: - context: . target: authserver-local - dockerfile: ./apps/docker/Dockerfile - args: - USER_ID: ${DOCKER_USER_ID:-1000} - GROUP_ID: ${DOCKER_GROUP_ID:-1000} - DOCKER_USER: ${DOCKER_USER:-acore} - <<: *cache-from + <<: *build-params volumes: # read-only binaries compiled by ac-dev-server - ${DOCKER_VOL_BIN:-ac-bin-dev}:/azerothcore/env/dist/bin:ro @@ -300,14 +283,8 @@ services: user: ${DOCKER_USER:-root} privileged: true build: - context: . target: worldserver - dockerfile: ./apps/docker/Dockerfile - args: - USER_ID: ${DOCKER_USER_ID:-1000} - GROUP_ID: ${DOCKER_GROUP_ID:-1000} - DOCKER_USER: ${DOCKER_USER:-acore} - <<: *cache-from + <<: *build-params ports: - ${DOCKER_WORLD_EXTERNAL_PORT:-8085}:8085 - ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878 @@ -333,14 +310,8 @@ services: ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} user: ${DOCKER_USER:-root} build: - context: . target: authserver - dockerfile: ./apps/docker/Dockerfile - args: - USER_ID: ${DOCKER_USER_ID:-1000} - GROUP_ID: ${DOCKER_GROUP_ID:-1000} - DOCKER_USER: ${DOCKER_USER:-acore} - <<: *cache-from + <<: *build-params volumes: - ${DOCKER_VOL_LOGS:-./env/docker/logs}:/azerothcore/env/dist/logs:delegated ports: @@ -357,15 +328,13 @@ services: image: acore/ac-wotlk-client-data:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally user: ${DOCKER_USER:-root} build: - context: . target: client-data - dockerfile: ./apps/docker/Dockerfile + <<: *build-params args: USER_ID: ${DOCKER_USER_ID:-1000} GROUP_ID: ${DOCKER_GROUP_ID:-1000} DOCKER_USER: ${DOCKER_USER:-acore} - CACHEBUST: ${CACHEBUST:-1} - <<: *cache-from + BUILDKIT_INLINE_CACHE: 1 volumes: - ${DOCKER_VOL_CLIENT_DATA_PROD:-ac-client-data-prod}:/azerothcore/env/dist/data:ro profiles: [prod, prod-app, clientdata] @@ -374,14 +343,8 @@ services: image: acore/ac-wotlk-tools:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally user: ${DOCKER_USER:-root} build: - context: . target: tools - dockerfile: ./apps/docker/Dockerfile - args: - USER_ID: ${DOCKER_USER_ID:-1000} - GROUP_ID: ${DOCKER_GROUP_ID:-1000} - DOCKER_USER: ${DOCKER_USER:-acore} - <<: *cache-from + <<: *build-params working_dir: /azerothcore/env/client/ volumes: # this is not the directory of the extracted data! It's the client folder used by the extractors @@ -400,14 +363,8 @@ services: ac-build-prod: <<: *ac-shared-conf build: - context: . target: build - dockerfile: ./apps/docker/Dockerfile - args: - USER_ID: ${DOCKER_USER_ID:-1000} - GROUP_ID: ${DOCKER_GROUP_ID:-1000} - DOCKER_USER: ${DOCKER_USER:-acore} - <<: *cache-from + <<: *build-params env_file: ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} working_dir: /azerothcore/