Skip to content

fix(Core/Scripting): UnitScript::DealDamage always returns the original damage value #22206

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 2 commits into
base: master
Choose a base branch
from

Conversation

Macs-Account
Copy link

@Macs-Account Macs-Account commented May 26, 2025

Changes Proposed:

This PR proposes changes to:

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

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

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.

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.

@github-actions github-actions bot added CORE Related to the core file-cpp Used to trigger the matrix build labels May 26, 2025
@Macs-Account
Copy link
Author

Basically, this script takes in a damage value, gets a new value based on the results of the DealDamage script, then
INTENDED -- Returns the new damage value
ACTUAL -- Returns the original damage value

@PkllonG

This comment was marked as spam.

@sogladev sogladev changed the title Fix a bug where UnitScript::DealDamage always returns the original damage value fix(Core/Scripting): UnitScript::DealDamage always returns the original damage value May 30, 2025
Comment on lines 61 to 66
auto const& dmg = script->DealDamage(AttackerUnit, pVictim, damage, damagetype);
if (dmg != damage)
{
return damage;
return dmg;
}
}
Copy link
Member

@sogladev sogladev May 30, 2025

Choose a reason for hiding this comment

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

Suggested change
auto const& dmg = script->DealDamage(AttackerUnit, pVictim, damage, damagetype);
if (dmg != damage)
{
return damage;
return dmg;
}
}
damage = script->DealDamage(AttackerUnit, pVictim, damage, damagetype);
}

Looking through the git history the above looks like the intended behavior

original function:

uint32 ScriptMgr::DealDamage(Unit* AttackerUnit, Unit *pVictim, uint32 damage, DamageEffectType damagetype)

with macro expansion

uint32 ScriptMgr::DealDamage(Unit* AttackerUnit, Unit *pVictim, uint32 damage, DamageEffectType damagetype)
{
  if (ScriptRegistry<UnitScript>::ScriptPointerList.empty())
    return damage;
  for (ScriptRegistry<UnitScript>::ScriptMapIterator itr =
           ScriptRegistry<UnitScript>::ScriptPointerList.begin();
       itr != ScriptRegistry<UnitScript>::ScriptPointerList.end(); ++itr)
    damage = itr->second->DealDamage(AttackerUnit, pVictim, damage, damagetype);
  return damage;
}

Copy link
Author

Choose a reason for hiding this comment

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

Yea good catch, as it was written only the first script was actually ever being ran (alongside returning the wrong value -- this was really wrong!). I will adjust the code

@Macs-Account
Copy link
Author

@sogladev Am I supposed to resolve the requested change or are you? Sorry, I am new to this process

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CORE Related to the core file-cpp Used to trigger the matrix build To Be Merged
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants