Ticket #4010: wondervictorymessagesfix_v2.patch

File wondervictorymessagesfix_v2.patch, 3.9 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        var 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, OnPlayerWon = true)
     68{
     69    let timers = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger).wonderVictoryTimers;
     70    let messages = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger).wonderVictoryMessages;
     71
     72    if (!messages || !timers)
     73        return;
     74   
     75    let cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer);
     76    let cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
     77
     78    for (let message in messages)
     79    {
     80        cmpGuiInterface.DeleteTimeNotification(messages[message].ownMessage);
     81        cmpGuiInterface.DeleteTimeNotification(messages[message].otherMessage);
     82    }
     83
     84    for (let timer in timers)
     85        cmpTimer.CancelTimer(timers[timer]);
     86};
     87
    6188var cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger);
    6289cmpTrigger.RegisterTrigger("OnOwnershipChanged", "CheckWonderVictory", { "enabled": true });
     90cmpTrigger.RegisterTrigger("OnPlayerWon", "DeleteMessages", { "enabled": true });
    6391cmpTrigger.wonderVictoryTimers = {};
    6492cmpTrigger.wonderVictoryMessages = {};
  • binaries/data/mods/public/simulation/components/EndGameManager.js

     
    5959            continue;
    6060
    6161        if (playerID == cmpPlayer.GetPlayerID() || this.alliedVictory && cmpPlayer.IsMutualAlly(playerID))
     62        {
    6263            cmpPlayer.SetState("won");
     64            Engine.BroadcastMessage(MT_PlayerWon);
     65        }
    6366        else
    6467            Engine.PostMessage(playerEntityId, MT_PlayerDefeated, {
    6568                "playerId": i,
     
    106109        {
    107110            let cmpPlayer = QueryPlayerIDInterface(playerID);
    108111            if (cmpPlayer)
     112            {
    109113                cmpPlayer.SetState("won");
     114                Engine.BroadcastMessage(MT_PlayerWon);
     115            }
    110116        }
    111117
    112118        let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
  • binaries/data/mods/public/simulation/components/interfaces/EndGameManager.js

     
    11Engine.RegisterInterface("EndGameManager");
    22Engine.RegisterMessageType("PlayerDefeated");
    33Engine.RegisterMessageType("GameTypeChanged");
     4Engine.RegisterMessageType("PlayerWon");
  • binaries/data/mods/public/simulation/components/Trigger.js

     
    1414    "Interval",
    1515    "OwnershipChanged",
    1616    "PlayerCommand",
     17    "PlayerWon",
    1718    "Range",
    1819    "ResearchFinished",
    1920    "ResearchQueued",
     
    253254    // data is {"entity": ent, "from": playerId, "to": playerId}
    254255};
    255256
     257Trigger.prototype.OnPlayerWon = function(msg)
     258{
     259    this.CallEvent("PlayerWon", msg);
     260};
     261
    256262/**
    257263 * Execute a function after a certain delay.
    258264 *