Skip to content

feat(Core/WorldState): init Scourge Invasion pre-wrath event #22286

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 16 commits into
base: master
Choose a base branch
from

Conversation

sogladev
Copy link
Member

@sogladev sogladev commented Jun 7, 2025

Changes Proposed:

This PR proposes changes to:

  • Core (units, players, creatures, game systems).
  • Scripts (bosses, spell scripts, creature scripts).
  • Database (SAI, creatures, etc).

The pre-wotlk event shares large similarities to the pre-naxx event, so this proposes a port of the pre-naxx scourge invasion from other cores (vmangos and cmangos).

This PR is limited to: Zone Invasions, City Attacks, AD emissary, relevant quests, and vendors. Instances, more quests, and missing spawns are future work

An overview of the event:

  • Zombie Infestation: (Events): Zombie Infestation unimplemented. #16256 not in this PR
  • Scourge Invasion:
    • Major city spawns
      • city necropoli gobjects and low level spawns outside major cities.
      • city necropoli gobjects outside Silvermoon City and Exodar
      • (missing spawns) low level scourge spawns outside Silvermoon City and Exodar (wrath only)
    • Zone Invasions
      • handling: commands, attack timers, select zones, 50/100/150 invasions defeated AD spawns
      • AI: spawn creatures, defeat creatures to damage crystal, damage necropoli, despawn necropoli,...
      • item "Haunted Memento" 40110 missing from common spawns (Skeletal Shocktrooper, Spectral Soldier, Ghoul Berserker)
    • City Attacks:
      • (missing spawns): frost dragon spawns in Stormwind Harbor and Orgrimmar (wrath only)
      • pallid horror, flameshocker AI
      • waypoint actions: spawning guards,...
      • crystal quests
    • Argent Dawn emissary gossip
    • Event Start Mail containing https://wowgaming.altervista.org/aowow/?item=22723
    • Invasions + City quests
    • Argent Dawn necrotic rune vendors
    • Instance bosses
      • instance bosses + Karazhan boss spawns
      • (untested) instance bosses AI
      • (missing data) instance boss Karazhan AI

Commands

Enable/disable the Scourge Invasion event with 1/0

.worldstate scourgeinvasion state 1

Display a printout of event status

.worldstate scourgeinvasion show

increment battles won counter (50/100/150 spawns AD mobs)

.worldstate scourgeinvasion battleswon 5

Instance in bosses are activated by starting.

.instance unbind all
.event start 120

Zone Invasions

Zone Invasions spawn necropoli and camps in: Winterspring, Tanaris, Azshara, Blasted Lands, Eastern Plaguelands, Burning Steppes.
When an attack is active, it shows up on the world map as a "purple skull" icon.

Each zone has an associated timer (1 hour); once defeated, it cannot be activated again until this time has passed. The current implementation activates all zones at the start, which may be wrong.

2-3 floating Necropoli will be active in a zone. Each necropoli will have 3 camps consisting of a purple circle gobject, some doodads, and a necrotic crystal.

A necrotic crystal will periodically spawn 1-3 scourge.

  • Common spawns: 1 camp type out of 3 combinations, which sets which 2 entries are spawned. Common creatures drop money, and sometimes a Necrotic Rune
  • Rare spawns: small chance <1% to spawn a rare. Rares should drop a guaranteed blue gear item
    Spawns have an instakill ability that kills anything besides players and their summons/pets.

Killing the scourge, both common and uncommon, should damage the crystal.
The spell states 15 damage, but this may be too little for a level 70 Necrotic Crystal and new in Wrath, a "Haunted Memento" item. It may take too many scourge kills to spawn the damaged crystal.

Once a crystal dies, it summons a damaged crystal and 4 Cultist Engineers spawn, and start a channel. Their channel can be interrupted by turning in 8 Necrotic Runes, which kills the cultist and spawns an elite Shadow of Doom. Shadow of Doom drops 30 Necrotic Runes.
Killing the cultist damages the crystal, and so does killing the Shadow of Doom. Once all 4 cultists are defeated and the elites, the damaged crystal dies, and damages the Necropolis (hidden lvl 1 creature with 42 hp), and the camp disappears. Spawned creatures will stick around for ~2 minutes, but should eventually despawn.

Once all camps are defeated, the necropolis should "die" and fly back up in the air.

Presumably spawning of the game object Necropoli should have an animation, but this is missing data and is cosmetic. Currently, an attack spawns with a loaded circle and a necrotic crystal. It does take ~1min or so for the Necropolis to activate its crystal due to auras having ~35 seconds to tick and travel time.

For testing, the invasion progress can be sped up by using .die on scourge, the crystals, and on the hidden necropolis health npc. And setting the defeated zones counter with commands.

City Attacks

A Pallid Horror, a large elite undead, spawns with 5–9 Flameshockers.

In Stormwind, the large elite paths from the Cathedral crypts, and paths toward either the Trade District or Stormwind Keep.
In Undercity, it spawns near the side entrance / the lower levels trade quarter and paths towards Sylvanas / the upper level trade quarter.
The event ends when the Pallid Horror is defeated. Upon its death, a crystal NPC spawns from the corpse, which offers a quest.
Flameshockers will periodically spawn and attack nearby NPCs

(missing data) Wrath only frost dragons attack:
https://www.youtube.com/watch?v=CH0VR5OKeNY
https://www.youtube.com/watch?v=xZrJS6bQ0Eg

Issues Addressed:

  • Closes

SOURCE:

The changes have been validated through:

  • Live research (checked on live servers, e.g Classic WotLK, Retail, etc.)

  • Sniffs (remember to share them with the open source community!)

  • Video evidence, knowledge databases or other public sources (e.g forums, Wowhead, etc.)

  • The changes promoted by this pull request come partially or entirely from another project (cherry-pick). Cherry-picks must be committed using the proper --author tag in order to be accepted, thus crediting the original authors, unless otherwise unable to be found

  • CMangos port of Vmangos cmangos/mangos-wotlk@a71e7e5

  • VMangos vmangos/core@0c2ee99

Tests Performed:

This PR has been:

  • Tested in-game by the author.
  • Tested in-game by other community members/someone else other than the author/has been live on production servers.
  • This pull request requires further testing and may have edge cases to be tested.

How to Test the Changes:

  • This pull request can be tested by following the reproduction steps provided in the linked issue
  • This pull request requires further testing. Provide steps to test your changes. If it requires any specific setup e.g multiple players please specify it as well.

See description, I did not list all details below, just the important stuff that should be working

  • Enable the invasion with .worldstate scourgeinvasion state 1
  • Open the world map and confirm that invaded zones are displayed on the map
  • Zone Invasion
    • Farm Necrotic Runes from undead enemies
    • Observe if killing a Necrotic Crystal does not take too long
    • Defeat Scourge rares and loot blue gear
    • Confirm that Haunted Memento drops from common Scourge
    • Check that when killing a Crystal, a Damaged Crystal + Cultist Engineers spawn
    • Cultists offer a conditional gossip if a player has enough Necrotic Runes
    • Completing an Cultist gossip, kills the Cultist and spawns a Shadow of Doom
    • Shadow of Doom death damages the Damaged Crystal
    • Shadow of Doom drops 30 Necrotic Runes that are BoP and, are need/greed rolled when in a group
    • Only when defeating the cultists and their Shadow of Dooms the Damaged Crystal dies
    • The zap from shadow of doom death, damages the Necropolis; After 3 zaps (3 crystal deaths) the Necropolis dies and flies up in the air.
    • 2-3 (zone dependant) Necropolis deaths clear the zone
    • Check that the Damaged Crystal can be interacted with/killed if an invasion is left alone for some time
      • Kill or avoid Shadows of Doom and wait 1 hour
      • Confirm Cultist Engineers respawn correctly
      • Confirm that the Damaged Crystal can be killed
  • City Attacks
    • A Pallid Horror patrols
    • On death, a crystal NPC spawns
    • See if the quest is completable for both Horde (Undercity) and Alliance (Stormwind)
  • Restart the server and verify:
    • Invasions resume where they left off
  • Vendors become available only after "Under the Shadow" quest is completed
    • Check content of the vendor
  • Pick up and complete Scourge Invasion quests from:
    • Capital cities
    • Light's Hope Chapel
  • Confirm instance bosses are spawned
    .instance unbind all
    .event start 120
    
  • Longer tasks
    • Invasions rotate between different zones over time
    • Active objects don't cause performance issues

Known Issues and TODO List:

  • [ ]
  • [ ]

How to Test AzerothCore PRs

When a PR is ready to be tested, it will be marked as [WAITING TO BE TESTED].

You can help by testing PRs and writing your feedback here on the PR's page on GitHub. Follow the instructions here:

http://www.azerothcore.org/wiki/How-to-test-a-PR

REMEMBER: when testing a PR that changes something generic (i.e. a part of code that handles more than one specific thing), the tester should not only check that the PR does its job (e.g. fixing spell XXX) but especially check that the PR does not cause any regression (i.e. introducing new bugs).

For example: if a PR fixes spell X by changing a part of code that handles spells X, Y, and Z, we should not only test X, but we should test Y and Z as well.

@sogladev sogladev added the WIP Work in Progress. label Jun 7, 2025
@heyitsbench
Copy link
Contributor

heyitsbench commented Jun 7, 2025

low level scourge spawns outside Silvermoon City and Exodar (wrath only)

I have sniffs of this data if you would be interested.

(missing spawns): frost dragon spawns (wrath only)

I might be wrong, but I believe this is a part of the Zombie Infestation event rather than the Scourge Invasion. Wowpedia has the city attacks for the Zombie Infestation labelled as the Scourge Invasion of Orgrimmar and Stormwind, whereas the Scourge Invasion had Undercity and Stormwind being attacked by the Scourge iirc.

Argent Dawn emissary gossip
(untested) quests
(untested) vendors

Should also have sniffs of these.

(missing data) instance boss Karazhan AI

Have no sniffs of this, but am currently working on it here.

Copy link
Contributor

@TheSCREWEDSoftware TheSCREWEDSoftware left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

-- Creates the reference loot (40110) for Haunted Memento (40110)
DELETE FROM `reference_loot_template` WHERE `Entry` = 40110 AND `Item` = 40110;
INSERT INTO `reference_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(40110, 40110, 0, 100, 0, 1, 1, 1, 1, 'Scourge Invasion Event - Item: Haunted Memento');

-- Adds the reference loot (40110) above for the Haunted Memento (40110) to Ghoul Berserker (16141), Skeletal Shocktrooper (16298) and Spectral Soldier (16299)
DELETE FROM `creature_loot_template` WHERE `Entry` IN (16141, 16298, 16299) AND `Item` = 40110 AND `Reference` = 40110;
INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(16141, 40110, 40110, 2, 0, 1, 1, 1, 1, 'Reference Loot: Scourge Invasion Event - Item: Haunted Memento'),
(16298, 40110, 40110, 2, 0, 1, 1, 1, 1, 'Reference Loot: Scourge Invasion Event - Item: Haunted Memento'),
(16299, 40110, 40110, 2, 0, 1, 1, 1, 1, 'Reference Loot: Scourge Invasion Event - Item: Haunted Memento');

-- Reference loot (40110) is only active during the Scourge Invasion Event (17)
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 10 AND `SourceGroup` = 40110 AND `SourceEntry` = 40110 AND `SourceId` = 0 AND `ElseGroup` = 0 AND `ConditionTypeOrReference` = 12 AND `ConditionTarget` = 0 AND `ConditionValue1` = 17 AND `ConditionValue2` = 0 AND `ConditionValue3` = 0;
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
(10, 40110, 40110, 0, 0, 12, 0, 17, 0, 0, 0, 0, 0, '', 'Reference Loot: Item: Haunted Memento only drops during the Scourge Invasion Event (17)');

Refering to item "Haunted Memento" 40110 missing from common spawns (Skeletal Shocktrooper, Spectral Soldier, Ghoul Berserker) section

Tested and video below (in the video the rates were changed from 2% to 100%)

Desktop.2025.06.16.-.06.12.14.10.mp4

@sogladev
Copy link
Member Author

@TheSCREWEDSoftware Thanks for looking into this. I'll check it out and include it in this PR

@TheSCREWEDSoftware
Copy link
Contributor

TheSCREWEDSoftware commented Jun 17, 2025

I will be mergering your PR (this* #22309 ), so if you want to remove the changes here (about the table)

sogladev and others added 12 commits June 19, 2025 01:18
init chat command handling

add scourge invasion printout

sql: add events

sql: fill in event creature spawns

sql: add scourge invasion spawns

add lord blackwood wp

update visibility of necropolis health

set spell implicit target conditions

disable gravity for proxy and critters

update logs to gameevent

add herald creature text

sql: add gameobjects

sql: add spell target conditions

Allow the Boss-Summon spell to hit the Cultist
Allow the death spell of shadow of doom to hit the necrotic shard

add spawner, server side scripts, mouth random say

sql: disable LoS for 28395

this allows the necropolis to target its proxies

set select flag

prevent invasion mobs from killing spawners

fix crystal spawns and respawns

add scourge strike to not hit players and their summons

add invasion AI, gossip

fix despawn animation of necropili

Add missing auras

refactor, port world invasion spawns from vmangos

CMangos port of Vmangos cmangos/mangos-wotlk@a71e7e5

CMangos-wotlk port of Vmangos
cmangos/mangos-wotlk@a71e7e5
VMangos
vmangos/core@0c2ee99

Co-authored-by: Orozxy <[email protected]>
Co-authored-by: ratkosrb <[email protected]>o
Co-authored-by: Killerwife <[email protected]>
add NPC immune flag to emissary
creatures only spawn when the gameevent is active
@sogladev sogladev marked this pull request as ready for review June 20, 2025 21:20
@github-actions github-actions bot added DB related to the SQL database CORE Related to the core Script file-cpp Used to trigger the matrix build labels Jun 20, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CORE Related to the core DB related to the SQL database file-cpp Used to trigger the matrix build Script WIP Work in Progress.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants