From ced8ceed47389a374173abefb46fe26266b75ebc Mon Sep 17 00:00:00 2001 From: Itms Date: Wed, 13 Jul 2016 06:51:59 +0000 Subject: [PATCH] Properly handle wonder victory messages after a player has won. Patch by Sandarac, reviewed by elexis, fixes #4010 This was SVN commit r18514. --- .../mods/public/maps/scripts/WonderVictory.js | 19 +++++++++++++++++++ .../public/simulation/components/Trigger.js | 12 ++++++++++++ 2 files changed, 31 insertions(+) diff --git a/binaries/data/mods/public/maps/scripts/WonderVictory.js b/binaries/data/mods/public/maps/scripts/WonderVictory.js index 524de11ab5..d630963c3c 100644 --- a/binaries/data/mods/public/maps/scripts/WonderVictory.js +++ b/binaries/data/mods/public/maps/scripts/WonderVictory.js @@ -28,8 +28,13 @@ Trigger.prototype.CheckWonderVictory = function(data) // Add -1 to notify observers too let players = [-1]; for (let i = 1; i < numPlayers; ++i) + { + let cmpPlayer = QueryPlayerIDInterface(i); + if (cmpPlayer.GetState() == "won") + return; if (i != data.to) players.push(i); + } let cmpPlayer = QueryOwnerInterface(ent, IID_Player); let cmpEndGameManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_EndGameManager); @@ -58,7 +63,21 @@ Trigger.prototype.CheckWonderVictory = function(data) this.wonderVictoryMessages[ent] = messages; }; +Trigger.prototype.DeleteMessages = function(ent) +{ + let cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface); + let cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer); + + for (let ent in this.wonderVictoryMessages) + { + cmpGuiInterface.DeleteTimeNotification(this.wonderVictoryMessages[ent].ownMessage); + cmpGuiInterface.DeleteTimeNotification(this.wonderVictoryMessages[ent].otherMessage); + cmpTimer.CancelTimer(this.wonderVictoryTimers[ent]); + } +}; + var cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger); cmpTrigger.RegisterTrigger("OnOwnershipChanged", "CheckWonderVictory", { "enabled": true }); +cmpTrigger.RegisterTrigger("OnPlayerWon", "DeleteMessages", { "enabled": true }); cmpTrigger.wonderVictoryTimers = {}; cmpTrigger.wonderVictoryMessages = {}; diff --git a/binaries/data/mods/public/simulation/components/Trigger.js b/binaries/data/mods/public/simulation/components/Trigger.js index e43e5831e1..4c63254689 100644 --- a/binaries/data/mods/public/simulation/components/Trigger.js +++ b/binaries/data/mods/public/simulation/components/Trigger.js @@ -14,6 +14,8 @@ Trigger.prototype.eventNames = "Interval", "OwnershipChanged", "PlayerCommand", + "PlayerDefeated", + "PlayerWon", "Range", "ResearchFinished", "ResearchQueued", @@ -253,6 +255,16 @@ Trigger.prototype.OnGlobalOwnershipChanged = function(msg) // data is {"entity": ent, "from": playerId, "to": playerId} }; +Trigger.prototype.OnGlobalPlayerDefeated = function(msg) +{ + this.CallEvent("PlayerDefeated", msg); +}; + +Trigger.prototype.OnGlobalPlayerWon = function(msg) +{ + this.CallEvent("PlayerWon", msg); +}; + /** * Execute a function after a certain delay. *