Merge branch 'master' into ovv/systemd-socket-activation

This commit is contained in:
Quentin Dawans 2025-05-21 16:49:05 +02:00 committed by GitHub
commit ffeb7daf5c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
16 changed files with 282 additions and 10 deletions

19
AUTHORS
View File

@ -34,3 +34,22 @@ The third-party libraries have their own way of addressing authorship, and the a
a third-party library reflects who did the importing instead of who wrote the code within the commit.
The Authors of third-party libraries are not explicitly mentioned, and usually is possible to obtain from the files belonging to the third-party libraries.
## Cross-project collaboration
At AzerothCore, we actively promote collaboration with other MaNGOS-based open-source projects that are actively maintained. This also includes cherry-picking commits from relevant projects such as:
* TrinityCore: https://github.com/trinitycore
* CMaNGOS: https://github.com/cmangos/
* vMaNGOS: https://github.com/vmangos
* and others
It is strictly required for any contributor importing code to credit the original author by:
- linking the original PR (or commit)
- adding a [Co-authored-by](https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-with-multiple-authors) line in the PR description
This will automatically include the original author in our list of [Contributors](https://github.com/azerothcore/azerothcore-wotlk/graphs/contributors).
If you notice a violation of the above, please report it to the Staff immediately.
We encourage other projects to adopt similar practices to promote healthy cross-project collaboration and proper attribution.

85
apps/extractor/extractor.sh Executable file
View File

@ -0,0 +1,85 @@
#!/bin/bash
function Base {
echo "Extract Base"
rm -rf dbc maps Cameras
./map_extractor
Menu
}
function VMaps {
echo "Extract VMaps"
mkdir -p Buildings vmaps
rm -rf Buildings/* vmaps/*
./vmap4_extractor
./vmap4_assembler Buildings vmaps
rmdir -rf Buildings
Menu
}
function MMaps {
echo "This may take a few hours to complete. Please be patient."
mkdir -p mmaps
rm -rf mmaps/*
./mmaps_generator
Menu
}
function All {
echo "This may take a few hours to complete. Please be patient."
rm -rf dbc maps Cameras
mkdir -p Buildings vmaps mmaps
rm -rf Buildings/* vmaps/* mmaps/*
./map_extractor
./vmap4_extractor
./vmap4_assembler Buildings vmaps
rmdir -rf Buildings
./mmaps_generator
Menu
}
function Menu {
echo ""
echo "..............................................."
echo "AzerothCore dbc, maps, vmaps, mmaps extractor"
echo "..............................................."
echo "PRESS 1, 2, 3 OR 4 to select your task, or 5 to EXIT."
echo "..............................................."
echo ""
echo "WARNING! when extracting the vmaps extractor will"
echo "output the text below, it's intended and not an error:"
echo ".........................................."
echo "Extracting World\Wmo\Band\Final_Stage.wmo"
echo "No such file."
echo "Couldn't open RootWmo!!!"
echo "Done!"
echo " .........................................."
echo ""
echo "Press 1, 2, 3 or 4 to start extracting or 5 to exit."
echo "1 - Extract base files (NEEDED) and cameras."
echo "2 - Extract vmaps (needs maps to be extracted before you run this) (OPTIONAL, highly recommended)"
echo "3 - Extract mmaps (needs vmaps to be extracted before you run this, may take hours) (OPTIONAL, highly recommended)"
echo "4 - Extract all (may take hours)"
echo "5 - EXIT"
echo ""
read -rp "Type 1, 2, 3, 4 or 5 then press ENTER: " choice
case $choice in
1) Base ;;
2) VMaps ;;
3) MMaps ;;
4) All ;;
5) exit 0;;
*) echo "Invalid choice."; read -rp "Type 1, 2, 3, 4 or 5 then press ENTER: " choice ;;
esac
}
if [ -d "./Data" ] && [ -f "map_extractor" ] && [ -f "vmap4_extractor" ] && [ -f "vmap4_assembler" ] && [ -f "mmaps_generator" ]; then
echo "The required files and folder exist in the current directory."
chmod +x map_extractor vmap4_extractor vmap4_assembler mmaps_generator
Menu
else
echo "One or more of the required files or folder is missing from the current directory."
echo "Place map_extractor vmap4_extractor vmap4_assembler mmaps_generator"
echo "In your WoW folder with WoW.exe"
fi

85
apps/extractor/extractor_es.sh Executable file
View File

@ -0,0 +1,85 @@
#!/bin/bash
function Base {
echo "Extrayendo archivos base"
rm -rf dbc maps Cameras
./map_extractor
Menu
}
function VMaps {
echo "Extrayendo VMaps"
mkdir -p Buildings vmaps
rm -rf Buildings/* vmaps/*
./vmap4_extractor
./vmap4_assembler Buildings vmaps
rmdir -rf Buildings
Menu
}
function MMaps {
echo "Esto puede tardar unas horas en completarse. Por favor, tenga paciencia."
mkdir -p mmaps
rm -rf mmaps/*
./mmaps_generator
Menu
}
function All {
echo "Esto puede tardar varias horas en completarse. Por favor, tenga paciencia."
rm -rf dbc maps Cameras
mkdir -p Buildings vmaps mmaps
rm -rf Buildings/* vmaps/* mmaps/*
./map_extractor
./vmap4_extractor
./vmap4_assembler Buildings vmaps
rmdir -rf Buildings
./mmaps_generator
Menu
}
function Menu {
echo ""
echo "..............................................."
echo "Extractor de dbc, maps, vmaps, mmaps de AzerothCore"
echo "..............................................."
echo "PRESIONE 1, 2, 3 O 4 para seleccionar su tarea, o 5 para SALIR."
echo "..............................................."
echo ""
echo "ADVERTENCIA: al extraer los vmaps del extractor"
echo "la salida del texto de abajo, es intencional y no un error:"
echo ".........................................."
echo "Extracting World\Wmo\Band\Final_Stage.wmo"
echo "No such file."
echo "Couldn't open RootWmo!!!"
echo "Done!"
echo ".........................................."
echo ""
echo "Presione 1, 2, 3 o 4 para iniciar la extracción o 5 para salir."
echo "1 - Extraer los archivos base (NECESARIOS) y las cámaras."
echo "2 - Extraer vmaps (necesita que los mapas se extraigan antes de ejecutar esto) (OPCIONAL, muy recomendable)"
echo "3 - Extraer mmaps (necesita que los vmaps se extraigan antes de ejecutar esto, puede llevar horas) (OPCIONAL, muy recomendable)"
echo "4 - Extraer todo (puede llevar varias horas)"
echo "5 - SALIR"
echo ""
read -rp "Escriba 1, 2, 3, 4 o 5 y pulse ENTER: " choice
case $choice in
1) Base ;;
2) VMaps ;;
3) MMaps ;;
4) All ;;
5) exit 0;;
*) echo "Opción inválida."; read -rp "Escriba 1, 2, 3, 4 o 5 y presione ENTER: " choice ;;
esac
}
if [ -d "./Data" ] && [ -f "map_extractor" ] && [ -f "vmap4_extractor" ] && [ -f "vmap4_assembler" ] && [ -f "mmaps_generator" ]; then
echo "Los archivos y carpetas requeridos existen en el directorio actual."
chmod +x map_extractor vmap4_extractor vmap4_assembler mmaps_generator
Menu
else
echo "Uno o más archivos o carpetas requeridos no se encuentran en el directorio actual."
echo "Coloque map_extractor vmap4_extractor vmap4_assembler mmaps_generator"
echo "en su directorio de WoW junto con WoW.exe"
fi

View File

@ -0,0 +1,4 @@
-- DB update 2025_05_10_04 -> 2025_05_12_00
-- Add No_Taunt flag
UPDATE `creature_template` SET `flags_extra` = `flags_extra` |256 WHERE (`entry` = 25315);

View File

@ -0,0 +1,10 @@
-- DB update 2025_05_12_00 -> 2025_05_12_01
-- Update comments and edit row 2.
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 28529;
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 28529);
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`, `event_param6`, `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
(28529, 0, 0, 0, 0, 0, 100, 0, 0, 0, 2000, 3000, 0, 0, 11, 6660, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Crusader - In Combat - Cast \'Shoot\''),
(28529, 0, 1, 0, 4, 0, 50, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Crusader - On Aggro - Say Line 0'),
(28529, 0, 2, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 0, 205, 23, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Crusader - On Reset - Set combat distance to 23');

View File

@ -0,0 +1,2 @@
-- DB update 2025_05_12_01 -> 2025_05_13_00
UPDATE `creature_model_info` SET `BoundingRadius` = 6, `CombatReach` = 15 WHERE `DisplayID` = 23200;

View File

@ -0,0 +1,11 @@
-- DB update 2025_05_13_00 -> 2025_05_15_00
--
DELETE FROM `spell_script_names` WHERE `spell_id` = 46102;
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(46102, 'spell_spell_fury_aura');
-- Remove 'Deal periodic damage'
SET @procFlags = (0x4000 | 0x10000);
DELETE FROM `spell_proc_event` WHERE `entry` = 46102;
INSERT INTO `spell_proc_event` (`entry`, `procFlags`) VALUES
(46102, @procFlags);

View File

@ -0,0 +1,3 @@
-- DB update 2025_05_15_00 -> 2025_05_18_00
-- Sets the SAI Link to 0 from 1 for Ziggurat Defender (has only 1 cast, nothing to link to)
UPDATE `smart_scripts` SET `link` = 0 WHERE (`source_type` = 0 AND `entryorguid` = 26202 AND `id` = 0);

View File

@ -0,0 +1,17 @@
-- DB update 2025_05_18_00 -> 2025_05_19_00
-- Deletes `Dalaran Wizard's Robe` (5110) from References: `World Drop - White World Drop - NPC Levels` 14-15 (1011415), 15-15 (1011515), 15-16 (1011516), 16-16 (1011616)
DELETE FROM `reference_loot_template` WHERE `Item` = 5110;
DELETE FROM `creature_loot_template` WHERE `Item` = 5110;
INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(1867, 5110, 0, 3, 0, 1, 0, 1, 1, 'Dalaran Apprentice - Dalaran Wizard\'s Robe'),
(1888, 5110, 0, 4, 0, 1, 0, 1, 1, 'Dalaran Watcher - Dalaran Wizard\'s Robe'),
(1889, 5110, 0, 4, 0, 1, 0, 1, 1, 'Dalaran Wizard - Dalaran Wizard\'s Robe'),
(1912, 5110, 0, 3, 0, 1, 0, 1, 1, 'Dalaran Protector - Dalaran Wizard\'s Robe'),
(1913, 5110, 0, 4, 0, 1, 0, 1, 1, 'Dalaran Warder - Dalaran Wizard\'s Robe'),
(1914, 5110, 0, 3, 0, 1, 0, 1, 1, 'Dalaran Mage - Dalaran Wizard\'s Robe'),
(1915, 5110, 0, 4, 0, 1, 0, 1, 1, 'Dalaran Conjuror - Dalaran Wizard\'s Robe'),
(1920, 5110, 0, 1.6, 0, 1, 0, 1, 1, 'Dalaran Spellscribe - Dalaran Wizard\'s Robe'),
(2120, 5110, 0, 1.8, 0, 1, 0, 1, 1, 'Archmage Ataeric - Dalaran Wizard\'s Robe'),
(3577, 5110, 0, 4, 0, 1, 0, 1, 1, 'Dalaran Brewmaster - Dalaran Wizard\'s Robe'),
(3578, 5110, 0, 3, 0, 1, 0, 1, 1, 'Dalaran Miner - Dalaran Wizard\'s Robe');

View File

@ -0,0 +1,2 @@
-- DB update 2025_05_19_00 -> 2025_05_20_00
UPDATE `creature_loot_template` SET `Chance` = 6 WHERE `Item` = 34334 AND `Entry` = 25315;

View File

@ -0,0 +1,4 @@
-- DB update 2025_05_20_00 -> 2025_05_21_00
--
DELETE FROM `spell_custom_attr` WHERE `spell_id`=45770;
INSERT INTO `spell_custom_attr` (`spell_id`, `attributes`) VALUES (45770, 4194304);

View File

@ -4897,8 +4897,10 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_70_YARDS);
});
// Encapsulate
ApplySpellFix({ 45662 }, [](SpellInfo* spellInfo)
ApplySpellFix({
45662, // Encapsulate
45642 // Fire Bloom
}, [](SpellInfo* spellInfo)
{
spellInfo->AttributesEx7 |= SPELL_ATTR7_TREAT_AS_NPC_AOE;
});

View File

@ -1755,7 +1755,6 @@ void World::SetInitialWorldSettings()
LOG_INFO("server.loading", "Loading WorldStates..."); // must be loaded before battleground, outdoor PvP and conditions
sWorldState->LoadWorldStates();
sWorldState->Load();
LOG_INFO("server.loading", "Loading Conditions...");
sConditionMgr->LoadConditions();
@ -1880,6 +1879,9 @@ void World::SetInitialWorldSettings()
uint32 nextGameEvent = sGameEventMgr->StartSystem();
_timers[WUPDATE_EVENTS].SetInterval(nextGameEvent); //depend on next event
LOG_INFO("server.loading", "Loading WorldState...");
sWorldState->Load(); // must be called after loading game events
// Delete all characters which have been deleted X days before
Player::DeleteOldCharacters();

View File

@ -141,6 +141,7 @@ struct npc_kiljaeden_controller : public NullCreatureAI
void Reset() override
{
scheduler.CancelAll();
instance->SetBossState(DATA_KILJAEDEN, NOT_STARTED);
summons.DespawnAll();
ResetOrbs();
@ -286,11 +287,11 @@ struct boss_kiljaeden : public BossAI
DoCastSelf(SPELL_SHADOW_SPIKE);
});
ScheduleTimedEvent(3s, [&] {
ScheduleTimedEvent(31s, [&] {
DoCastSelf(SPELL_FLAME_DART);
}, 10s);
}, 20s);
ScheduleTimedEvent(50s, [&] {
ScheduleTimedEvent(55s, [&] {
Talk(EMOTE_KJ_DARKNESS);
DoCastAOE(SPELL_DARKNESS_OF_A_THOUSAND_SOULS);
}, 45s);
@ -326,7 +327,11 @@ struct boss_kiljaeden : public BossAI
ScheduleBasicAbilities();
});
ScheduleTimedEvent(50s, [&] {
ScheduleTimedEvent(28s, [&] {
DoCastSelf(SPELL_FLAME_DART);
}, 20s);
ScheduleTimedEvent(64s, [&] {
me->RemoveAurasDueToSpell(SPELL_ARMAGEDDON_PERIODIC);
Talk(EMOTE_KJ_DARKNESS);
DoCastAOE(SPELL_DARKNESS_OF_A_THOUSAND_SOULS);
@ -394,7 +399,11 @@ struct boss_kiljaeden : public BossAI
ScheduleBasicAbilities();
ScheduleTimedEvent(30s, [&] {
ScheduleTimedEvent(16s, [&] {
DoCastSelf(SPELL_FLAME_DART);
}, 20s);
ScheduleTimedEvent(15s, [&] {
me->RemoveAurasDueToSpell(SPELL_ARMAGEDDON_PERIODIC);
Talk(EMOTE_KJ_DARKNESS);
DoCastAOE(SPELL_DARKNESS_OF_A_THOUSAND_SOULS);

View File

@ -336,6 +336,22 @@ private:
TaskScheduler scheduler;
};
class spell_spell_fury_aura : public AuraScript
{
PrepareAuraScript(spell_spell_fury_aura);
void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (GetUnitOwner()->ToPlayer())
ModStackAmount(5);
}
void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_spell_fury_aura::OnApply, EFFECT_0, SPELL_AURA_MOD_CASTING_SPEED_NOT_STACK, AURA_EFFECT_HANDLE_REAL);
}
};
void AddSC_instance_sunwell_plateau()
{
new instance_sunwell_plateau();
@ -345,4 +361,5 @@ void AddSC_instance_sunwell_plateau()
RegisterSpellScriptWithArgs(spell_sunwell_teleport, "spell_teleport_to_apex_point", SPELL_TELEPORT_TO_APEX_POINT);
RegisterSpellScriptWithArgs(spell_sunwell_teleport, "spell_teleport_to_witchs_sanctum", SPELL_TELEPORT_TO_WITCHS_SANCTUM);
RegisterSpellScriptWithArgs(spell_sunwell_teleport, "spell_teleport_to_sunwell_plateau", SPELL_TELEPORT_TO_SUNWELL_PLATEAU);
RegisterSpellScript(spell_spell_fury_aura);
}

View File

@ -122,9 +122,9 @@ public:
if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID))
{
if (GetClosestCreatureWithEntry(me, NPC_SOUTH_GATE, 200.0f))
player->KilledMonsterCredit(NPC_SOUTH_GATE_CREDIT);
player->RewardPlayerAndGroupAtEvent(NPC_SOUTH_GATE_CREDIT, player);
else if (GetClosestCreatureWithEntry(me, NPC_NORTH_GATE, 200.0f))
player->KilledMonsterCredit(NPC_NORTH_GATE_CREDIT);
player->RewardPlayerAndGroupAtEvent(NPC_NORTH_GATE_CREDIT, player);
// complete quest part
if (Creature* bunny = GetClosestCreatureWithEntry(me, NPC_EXPLOSION_BUNNY, 200.0f))
bunny->CastSpell(nullptr, SPELL_EXPLOSION, TRIGGERED_NONE);