diff --git a/apps/docker/Dockerfile b/apps/docker/Dockerfile index da2bcea15..e62b6b354 100644 --- a/apps/docker/Dockerfile +++ b/apps/docker/Dockerfile @@ -8,7 +8,6 @@ FROM ubuntu:$UBUNTU_VERSION AS skeleton ARG DOCKER=1 ARG DEBIAN_FRONTEND=noninteractive -ENV TZ=$TZ ENV AC_FORCE_CREATE_DB=1 RUN mkdir -pv \ @@ -29,11 +28,12 @@ RUN mkdir -pv \ /azerothcore/build # Configure Timezone -RUN apt-get update \ - && apt-get install -y tzdata ca-certificates \ - && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \ - && echo $TZ > /etc/timezone \ - && dpkg-reconfigure --frontend noninteractive tzdata +RUN apt-get update \ + && apt-get install -y --no-install-recommends tzdata ca-certificates \ + && ln -snf "/usr/share/zoneinfo/$TZ" /etc/localtime \ + && echo "$TZ" > /etc/timezone \ + && dpkg-reconfigure --frontend noninteractive tzdata \ + && rm -rf /var/lib/apt/lists/* WORKDIR /azerothcore @@ -145,7 +145,7 @@ ENTRYPOINT ["/usr/bin/env", "bash", "/azerothcore/entrypoint.sh"] ############### FROM runtime AS authserver -LABEL description "AzerothCore Auth Server" +LABEL description="AzerothCore Auth Server" ENV ACORE_COMPONENT=authserver # Don't run database migrations. We can leave that up to the db-import container @@ -167,7 +167,7 @@ CMD ["authserver"] FROM runtime AS worldserver -LABEL description "AzerothCore World Server" +LABEL description="AzerothCore World Server" ENV ACORE_COMPONENT=worldserver # Don't run database migrations. We can leave that up to the db-import container @@ -190,7 +190,7 @@ CMD ["worldserver"] FROM runtime AS db-import -LABEL description "AzerothCore Database Import tool" +LABEL description="AzerothCore Database Import tool" USER $DOCKER_USER @@ -203,7 +203,7 @@ COPY --chown=$DOCKER_USER:$DOCKER_USER\ --from=build \ /azerothcore/env/dist/bin/dbimport /azerothcore/env/dist/bin/dbimport -CMD /azerothcore/env/dist/bin/dbimport +CMD [ "/azerothcore/env/dist/bin/dbimport" ] ############### # Client Data # @@ -225,7 +225,7 @@ VOLUME /azerothcore/env/dist/data USER $DOCKER_USER -CMD bash -c "source /azerothcore/apps/installer/includes/functions.sh && inst_download_client_data" +CMD ["bash", "-c", "source /azerothcore/apps/installer/includes/functions.sh && inst_download_client_data" ] ################## # Map Extractors # @@ -233,7 +233,7 @@ CMD bash -c "source /azerothcore/apps/installer/includes/functions.sh && inst_do FROM runtime AS tools -LABEL description "AzerothCore Tools" +LABEL description="AzerothCore Tools" WORKDIR /azerothcore/env/dist/ diff --git a/apps/installer/includes/functions.sh b/apps/installer/includes/functions.sh index b9bdd9550..7e95f78fc 100644 --- a/apps/installer/includes/functions.sh +++ b/apps/installer/includes/functions.sh @@ -39,7 +39,7 @@ function inst_configureOS() { # TODO: implement different configurations by distro source "$AC_PATH_INSTALLER/includes/os_configs/$DISTRO.sh" ;; - bsd*) echo "BSD is not supported yet" ;; + *bsd*) echo "BSD is not supported yet" ;; msys*) source "$AC_PATH_INSTALLER/includes/os_configs/windows.sh" ;; *) echo "This platform is not supported" ;; esac diff --git a/data/sql/updates/db_world/2024_08_17_00.sql b/data/sql/updates/db_world/2024_08_17_00.sql new file mode 100644 index 000000000..3ecba4eb8 --- /dev/null +++ b/data/sql/updates/db_world/2024_08_17_00.sql @@ -0,0 +1,3 @@ +-- DB update 2024_08_13_03 -> 2024_08_17_00 +-- +UPDATE `creature_template` SET `flags_extra` = `flags_extra` |256, `mechanic_immune_mask` = `mechanic_immune_mask`|33554432 WHERE `entry` = 22950; diff --git a/data/sql/updates/db_world/2024_08_17_01.sql b/data/sql/updates/db_world/2024_08_17_01.sql new file mode 100644 index 000000000..4549e1bf8 --- /dev/null +++ b/data/sql/updates/db_world/2024_08_17_01.sql @@ -0,0 +1,3 @@ +-- DB update 2024_08_17_00 -> 2024_08_17_01 +-- +UPDATE `creature_template` SET `flags_extra` = `flags_extra` |256 WHERE `entry` = 22949; diff --git a/data/sql/updates/db_world/2024_08_17_02.sql b/data/sql/updates/db_world/2024_08_17_02.sql new file mode 100644 index 000000000..aa01248aa --- /dev/null +++ b/data/sql/updates/db_world/2024_08_17_02.sql @@ -0,0 +1,3 @@ +-- DB update 2024_08_17_01 -> 2024_08_17_02 +-- +UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`&~2048 WHERE `entry` = 22952; diff --git a/src/common/Utilities/StartProcess.cpp b/src/common/Utilities/StartProcess.cpp index a8b35578b..7f745d6ff 100644 --- a/src/common/Utilities/StartProcess.cpp +++ b/src/common/Utilities/StartProcess.cpp @@ -22,13 +22,7 @@ #include "Util.h" #include #include -#include -#include -#include -#include -#include -#include -#include +#include "boost/process.hpp" #include using namespace boost::process; diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index d85dbdfdb..0ec2ffa35 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -319,10 +319,16 @@ void PlayerMenu::SendQuestGiverQuestList(QEmote const& eEmote, std::string const if (QuestGreeting const* questGreeting = sObjectMgr->GetQuestGreeting(guid.GetTypeId(), guid.GetEntry())) { - LocaleConstant locale = _session->GetSessionDbLocaleIndex(); - std::string strGreeting = questGreeting->Greeting[DEFAULT_LOCALE]; - if (questGreeting->Greeting.size() > size_t(locale) && !questGreeting->Greeting.empty()) - strGreeting = questGreeting->Greeting[locale]; + std::string strGreeting; + // Check if greeting exists. Blizzlike that some creatures have empty greeting + if (!questGreeting->Greeting.empty()) + { + LocaleConstant locale = _session->GetSessionDbLocaleIndex(); + if (questGreeting->Greeting.size() > size_t(locale)) + strGreeting = questGreeting->Greeting[locale]; + else + strGreeting = questGreeting->Greeting[DEFAULT_LOCALE]; + } data << strGreeting; data << uint32(questGreeting->EmoteDelay); diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 041bd804d..e21110af2 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -3820,8 +3820,9 @@ void Spell::cancel(bool bySelf) if (Unit* unit = m_caster->GetGUID() == ihit->targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, ihit->targetGUID)) unit->RemoveOwnedAura(m_spellInfo->Id, m_originalCasterGUID, 0, AURA_REMOVE_BY_CANCEL); - if (m_spellInfo->HasAttribute(SPELL_ATTR0_COOLDOWN_ON_EVENT)) - m_caster->ToPlayer()->RemoveSpellCooldown(m_spellInfo->Id, true); + if (m_caster->GetTypeId() == TYPEID_PLAYER) + if (m_spellInfo->HasAttribute(SPELL_ATTR0_COOLDOWN_ON_EVENT)) + m_caster->ToPlayer()->RemoveSpellCooldown(m_spellInfo->Id, true); SendChannelUpdate(0); SendInterrupted(SPELL_FAILED_INTERRUPTED); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 70a6e0a33..d979d617c 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -6171,6 +6171,9 @@ void Spell::SummonGuardian(uint32 i, uint32 entry, SummonPropertiesEntry const* if (!caster) return; + if (caster->IsTotem()) + caster = caster->ToTotem()->GetOwner(); + // in another case summon new uint8 summonLevel = caster->GetLevel(); @@ -6284,6 +6287,14 @@ void Spell::SummonGuardian(uint32 i, uint32 entry, SummonPropertiesEntry const* //else if (summon->HasUnitTypeMask(UNIT_MASK_MINION) && m_targets.HasDst()) // ((Minion*)summon)->SetFollowAngle(m_caster->GetAngle(summon)); + // xinef: move this here, some auras are added in initstatsforlevel! + if (!summon->IsInCombat() && !summon->IsTrigger()) + { + // summon->AI()->EnterEvadeMode(); + summon->GetMotionMaster()->Clear(false); + summon->GetMotionMaster()->MoveFollow(caster, PET_FOLLOW_DIST, summon->GetFollowAngle(), MOTION_SLOT_ACTIVE); + } + if (properties && properties->Category == SUMMON_CATEGORY_ALLY) summon->SetFaction(caster->GetFaction()); diff --git a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp index 93e559147..eeff38ecc 100644 --- a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp +++ b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp @@ -659,13 +659,14 @@ class spell_illidari_council_judgement : public SpellScript void HandleScriptEffect(SpellEffIndex /*effIndex*/) { - Unit::AuraEffectList const& auras = GetCaster()->GetAuraEffectsByType(SPELL_AURA_DUMMY); - for (Unit::AuraEffectList::const_iterator i = auras.begin(); i != auras.end(); ++i) + auto const& auras = GetCaster()->GetAuraEffectsByType(SPELL_AURA_DUMMY); + for (auto i = auras.begin(); i != auras.end(); ++i) { if ((*i)->GetSpellInfo()->GetSpellSpecific() == SPELL_SPECIFIC_SEAL && (*i)->GetEffIndex() == EFFECT_2) if (sSpellMgr->GetSpellInfo((*i)->GetAmount())) { GetCaster()->CastSpell(GetHitUnit(), (*i)->GetAmount(), true); + GetCaster()->RemoveAurasDueToSpell((*i)->GetSpellInfo()->Id); break; } }