Ticket #4010: wondervictorymessagesfix_v3.patch

File wondervictorymessagesfix_v3.patch, 2.3 KB (added by Sandarac, 8 years ago)
  • binaries/data/mods/public/maps/scripts/WonderVictory.js

     
    2828    // Add -1 to notify observers too
    2929    let players = [-1];
    3030    for (let i = 1; i < numPlayers; ++i)
     31    {
     32        let playerEntityId = cmpPlayerManager.GetPlayerByID(i);
     33        let cmpPlayer = Engine.QueryInterface(playerEntityId, IID_Player);
     34        if (cmpPlayer.GetState() == "won")
     35            return;
    3136        if (i != data.to)
    3237            players.push(i);
     38    }
    3339
    3440    let cmpPlayer = QueryOwnerInterface(ent, IID_Player);
    3541    let cmpEndGameManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_EndGameManager);
     
    5864    this.wonderVictoryMessages[ent] = messages;
    5965};
    6066
     67Trigger.prototype.DeleteMessages = function(ent)
     68{
     69    let timers = this.wonderVictoryTimers;
     70    let messages = this.wonderVictoryMessages;
     71    if (!messages || !timers)
     72        return;
     73
     74    let cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer);
     75    let cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
     76
     77    for (let message in messages)
     78    {
     79        cmpGuiInterface.DeleteTimeNotification(messages[message].ownMessage);
     80        cmpGuiInterface.DeleteTimeNotification(messages[message].otherMessage);
     81    }
     82
     83    for (let timer in timers)
     84        cmpTimer.CancelTimer(timers[timer]);
     85};
     86
    6187var cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger);
    6288cmpTrigger.RegisterTrigger("OnOwnershipChanged", "CheckWonderVictory", { "enabled": true });
    6389cmpTrigger.wonderVictoryTimers = {};
  • binaries/data/mods/public/simulation/components/EndGameManager.js

     
    131131    this.AlliedVictoryCheck();
    132132};
    133133
     134EndGameManager.prototype.OnGlobalPlayerWon = function(msg)
     135{
     136    if (this.gameType != "wonder")
     137        return;
     138
     139    let cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger);
     140    cmpTrigger.DeleteMessages();
     141};
     142
    134143Engine.RegisterSystemComponentType(IID_EndGameManager, "EndGameManager", EndGameManager);