Index: binaries/data/mods/public/simulation/helpers/Attacking.js =================================================================== --- binaries/data/mods/public/simulation/helpers/Attacking.js +++ binaries/data/mods/public/simulation/helpers/Attacking.js @@ -271,6 +271,8 @@ Object.assign(targetState, cmpReceiver[receiver.method](attackData[effectType], attacker, attackerOwner, bonusMultiplier)); } + if (!Object.keys(targetState).length) + return; if (targetState.killed) this.TargetKilled(attacker, target, attackerOwner); Index: binaries/data/mods/public/simulation/helpers/tests/test_Attacking.js =================================================================== --- binaries/data/mods/public/simulation/helpers/tests/test_Attacking.js +++ binaries/data/mods/public/simulation/helpers/tests/test_Attacking.js @@ -59,6 +59,30 @@ TS_ASSERT(this.resultString.indexOf(this.attackData.Capture) === -1); } + /** + * Check that the Attacked message is [not] sent if [no] receivers exist. + */ + testAttackedMessage() { + Engine.PostMessage = () => TS_ASSERT(false); + Attacking.HandleAttackEffects("Test", this.attackData, this.TESTED_ENTITY_ID, INVALID_ENTITY, INVALID_PLAYER); + + AddMock(this.TESTED_ENTITY_ID, IID_Capturable, { + "Capture": () => ({ "captureChange": 0 }), + }); + let count = 0; + Engine.PostMessage = () => count++; + Attacking.HandleAttackEffects("Test", this.attackData, this.TESTED_ENTITY_ID, INVALID_ENTITY, INVALID_PLAYER); + TS_ASSERT_EQUALS(count, 1); + + AddMock(this.TESTED_ENTITY_ID, IID_Health, { + "TakeDamage": () => ({ "HPchange": 0 }), + }); + count = 0; + Engine.PostMessage = () => count++; + Attacking.HandleAttackEffects("Test", this.attackData, this.TESTED_ENTITY_ID, INVALID_ENTITY, INVALID_PLAYER); + TS_ASSERT_EQUALS(count, 1); + } + /** * Regression test that bonus multiplier is handled correctly. */ @@ -76,4 +100,5 @@ new testHandleAttackEffects().testMultipleEffects(); new testHandleAttackEffects().testSkippedEffect(); +new testHandleAttackEffects().testAttackedMessage(); new testHandleAttackEffects().testBonusMultiplier();