Properly handle wonder victory messages after a player has won.

Patch by Sandarac, reviewed by elexis, fixes #4010

This was SVN commit r18514.
This commit is contained in:
Itms
2016-07-13 06:51:59 +00:00
parent d29806ff2d
commit ced8ceed47
2 changed files with 31 additions and 0 deletions
@@ -28,8 +28,13 @@ Trigger.prototype.CheckWonderVictory = function(data)
// Add -1 to notify observers too // Add -1 to notify observers too
let players = [-1]; let players = [-1];
for (let i = 1; i < numPlayers; ++i) for (let i = 1; i < numPlayers; ++i)
{
let cmpPlayer = QueryPlayerIDInterface(i);
if (cmpPlayer.GetState() == "won")
return;
if (i != data.to) if (i != data.to)
players.push(i); players.push(i);
}
let cmpPlayer = QueryOwnerInterface(ent, IID_Player); let cmpPlayer = QueryOwnerInterface(ent, IID_Player);
let cmpEndGameManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_EndGameManager); let cmpEndGameManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_EndGameManager);
@@ -58,7 +63,21 @@ Trigger.prototype.CheckWonderVictory = function(data)
this.wonderVictoryMessages[ent] = messages; 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); var cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger);
cmpTrigger.RegisterTrigger("OnOwnershipChanged", "CheckWonderVictory", { "enabled": true }); cmpTrigger.RegisterTrigger("OnOwnershipChanged", "CheckWonderVictory", { "enabled": true });
cmpTrigger.RegisterTrigger("OnPlayerWon", "DeleteMessages", { "enabled": true });
cmpTrigger.wonderVictoryTimers = {}; cmpTrigger.wonderVictoryTimers = {};
cmpTrigger.wonderVictoryMessages = {}; cmpTrigger.wonderVictoryMessages = {};
@@ -14,6 +14,8 @@ Trigger.prototype.eventNames =
"Interval", "Interval",
"OwnershipChanged", "OwnershipChanged",
"PlayerCommand", "PlayerCommand",
"PlayerDefeated",
"PlayerWon",
"Range", "Range",
"ResearchFinished", "ResearchFinished",
"ResearchQueued", "ResearchQueued",
@@ -253,6 +255,16 @@ Trigger.prototype.OnGlobalOwnershipChanged = function(msg)
// data is {"entity": ent, "from": playerId, "to": playerId} // 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. * Execute a function after a certain delay.
* *