Ticket #2976: 2976.diff
File 2976.diff, 13.1 KB (added by , 9 years ago) |
---|
-
binaries/data/mods/public/gui/gamesetup/victory_conditions/conquest.js
diff --git a/binaries/data/mods/public/gui/gamesetup/victory_conditions/conquest.js b/binaries/data/mods/public/gui/gamesetup/victory_conditions/conquest.js index b168bee..a8f953f 100644
a b 1 var vc = {}; 2 3 vc.name = translate("Conquest"); 4 vc.description = translate("Defeat all opponents"); 5 6 /* 7 NOT SUPPORTED YET 8 vc.requirementsCheck = function(mapSettings) 9 { 10 // nothing required 11 return true; 12 }; 13 */ 14 15 vc.scripts = ["scripts/Conquest.js"]; 16 17 g_VictoryConditions.conquest = vc; 18 vc = null; 1 g_VictoryConditions.conquest = { 2 "name" : translate("Conquest"), 3 "description" : translate("Defeat all opponents"), 4 "scripts" : ["scripts/ConquestBase.js", "scripts/TriggerHelper.js", "scripts/Conquest.js"] 5 }; 6 No newline at end of file -
new file inaries/data/mods/public/gui/gamesetup/victory_conditions/conquestStructures.js
diff --git a/binaries/data/mods/public/gui/gamesetup/victory_conditions/conquestStructures.js b/binaries/data/mods/public/gui/gamesetup/victory_conditions/conquestStructures.js new file mode 100644 index 0000000..ba8886c
- + 1 g_VictoryConditions.conquestStructure = { 2 "name" : translate("Conquest Structure"), 3 "description" : translate("Destroy all structures of enemies"), 4 "scripts" : ["scripts/ConquestBase.js", "scripts/TriggerHelper.js", "scripts/ConquestStructures.js"] 5 }; 6 No newline at end of file -
new file inaries/data/mods/public/gui/gamesetup/victory_conditions/conquestUnits.js
diff --git a/binaries/data/mods/public/gui/gamesetup/victory_conditions/conquestUnits.js b/binaries/data/mods/public/gui/gamesetup/victory_conditions/conquestUnits.js new file mode 100644 index 0000000..421f457
- + 1 g_VictoryConditions.conquestStructure = { 2 "name" : translate("Conquest Units"), 3 "description" : translate("Destroy all units of enemies"), 4 "scripts" : ["scripts/ConquestBase.js", "scripts/TriggerHelper.js", "scripts/ConquestUnits.js"] 5 }; 6 No newline at end of file -
binaries/data/mods/public/gui/gamesetup/victory_conditions/wonder.js
diff --git a/binaries/data/mods/public/gui/gamesetup/victory_conditions/wonder.js b/binaries/data/mods/public/gui/gamesetup/victory_conditions/wonder.js index 9e0034b..65c2532 100644
a b 1 var vc = {}; 2 3 vc.name = translate("Wonder"); 4 vc.description = translate("Build a wonder to win"); 5 6 /* 7 NOT SUPPORTED YET 8 vc.requirementsCheck = function(mapSettings) 9 { 10 // nothing required 11 return true; 12 }; 13 */ 14 15 vc.scripts = ["scripts/Conquest.js", "scripts/WonderVictory.js"]; 16 17 g_VictoryConditions.wonder = vc; 18 vc = null; 1 g_VictoryConditions.wonder = { 2 "name" : translate("Wonder"), 3 "description" : translate("Build a wonder to win"), 4 "scripts" : ["scripts/Conquest.js", "scripts/WonderVictory.js"] 5 }; 6 No newline at end of file -
binaries/data/mods/public/maps/scripts/Conquest.js
diff --git a/binaries/data/mods/public/maps/scripts/Conquest.js b/binaries/data/mods/public/maps/scripts/Conquest.js index 867fa20..eda0de0 100644
a b 1 /*2 * Check players the next turn. Avoids problems in Atlas, with promoting entities etc3 */4 Trigger.prototype.CheckConquestCriticalEntities = function()5 {6 if (this.checkingConquestCriticalEntities)7 return;8 // wait a turn for actually checking the players9 this.DoAfterDelay(0, "CheckConquestCriticalEntitiesNow", null);10 this.checkingConquestCriticalEntities = true;11 };12 13 /*14 * Check players immediately. Might cause problems with converting/promoting entities.15 */16 Trigger.prototype.CheckConquestCriticalEntitiesNow = function()17 {18 this.checkingConquestCriticalEntities = false;19 // for all other game types, defeat that player20 var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);21 var cmpEndGameManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_EndGameManager);22 23 // Ignore gaia24 var numPlayers = cmpPlayerManager.GetNumPlayers();25 var cmpPlayers = [];26 27 var allies = [];28 var onlyAlliesLeft = true;29 // If the player is currently active but needs to be defeated,30 // mark that player as defeated31 // cache the cmpPlayer instances of the other players and search the allies32 for (var i = 1; i < numPlayers; i++)33 {34 // cmpPlayer should always exist for the player ids from 1 to numplayers35 // so no tests on the existance of cmpPlayer are needed36 var playerEntityId = cmpPlayerManager.GetPlayerByID(i);37 cmpPlayers[i] = Engine.QueryInterface(playerEntityId, IID_Player);38 if (cmpPlayers[i].GetState() != "active")39 continue;40 if (cmpPlayers[i].GetConquestCriticalEntitiesCount() == 0)41 Engine.PostMessage(playerEntityId, MT_PlayerDefeated, { "playerId": i } );42 else43 {44 if (!allies.length || cmpPlayers[allies[0]].IsMutualAlly(i))45 allies.push(i);46 else47 onlyAlliesLeft = false;48 }49 }50 51 // check if there are winners, or the game needs to continue52 if (!allies.length || !onlyAlliesLeft || !(cmpEndGameManager.alliedVictory || allies.length == 1))53 return;54 55 for each (var p in allies)56 cmpPlayers[p].SetState("won");57 58 // Reveal the map to all players59 var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);60 cmpRangeManager.SetLosRevealAll(-1, true);61 };62 63 1 var cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger); 2 cmpTrigger.classFilter = "ConquestCritical"; 64 3 65 4 var data = {"enabled": true}; 66 cmpTrigger.RegisterTrigger("OnOwnershipChanged", " CheckConquestCriticalEntities", data);67 // also check at the start of the game 68 cmpTrigger. DoAfterDelay(0, "CheckConquestCriticalEntitiesNow", null);69 cmpTrigger.checkingConquestCriticalEntities = false; 5 cmpTrigger.RegisterTrigger("OnOwnershipChanged", "HandlerOwnerShipChanged", data); 6 cmpTrigger.RegisterTrigger("OnStructureBuilt", "AddStructure", data); 7 cmpTrigger.RegisterTrigger("OnTrainingFinished", "TrainingFinished", data); 8 TrainingFinished 70 9 10 cmpTrigger.DoAfterDelay(0, "StartGameCount", null); -
new file inaries/data/mods/public/maps/scripts/ConquestBase.js
diff --git a/binaries/data/mods/public/maps/scripts/ConquestBase.js b/binaries/data/mods/public/maps/scripts/ConquestBase.js new file mode 100644 index 0000000..a6a3abc
- + 1 Trigger.prototype.HandlerOwnerShipChanged = function(msg) 2 { 3 if (!this.dataInit || this.classFilter == "") 4 return; 5 6 if (!TriggerHelper.EntityHasClass(msg.entity, this.classFilter)) 7 return; 8 9 if (msg.from == -1) 10 return; 11 12 if (!this.entitiesByPlayer[msg.from]) 13 { 14 warn("Unknow player " + msg.from); 15 return; 16 } 17 18 let entities = this.entitiesByPlayer[msg.from].entities; 19 let index = entities.indexOf(msg.entity); 20 if (index >= 0) 21 { 22 entities.splice(index, 1); 23 if (entities.length == 0) 24 Engine.PostMessage(this.entitiesByPlayer[msg.from].player, MT_PlayerDefeated, { "playerId": msg.from } ); 25 } 26 27 if (msg.to <= 0 || !this.entitiesByPlayer[msg.to]) 28 return; 29 30 let entitiesTo = this.entitiesByPlayer[msg.to].entities; 31 entitiesTo.push(msg.entity); 32 } 33 34 Trigger.prototype.AddStructure = function(msg) 35 { 36 if (this.classFilter == "" || !TriggerHelper.EntityHasClass(msg.building, this.classFilter)) 37 return; 38 39 let cmpOwnership = Engine.QueryInterface(msg.building, IID_Ownership); 40 if (!cmpOwnership) 41 { 42 warn("structure without Owner") 43 return; 44 } 45 46 let player = cmpOwnership.GetOwner(); 47 if (!this.entitiesByPlayer[player]) 48 { 49 warn("Unknow player " + player); 50 return; 51 } 52 this.entitiesByPlayer[player].entities.push(msg.building); 53 } 54 55 Trigger.prototype.TrainingFinished = function(msg) 56 { 57 if (this.classFilter == "" || !msg.entities.length || !msg.entities.every(elem => TriggerHelper.EntityHasClass(elem, this.classFilter))) 58 return; 59 60 let player = msg.owner; 61 if (!this.entitiesByPlayer[player]) 62 { 63 warn("Unknow player " + player); 64 return; 65 } 66 Array.prototype.push.apply(this.entitiesByPlayer[player].entities, msg.entities); 67 } 68 69 Trigger.prototype.StartGameCount = function() 70 { 71 if (this.classFilter == "") 72 { 73 warn("classFilter undefined"); 74 return; 75 } 76 77 let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); 78 let cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); 79 let numPlayers = cmpPlayerManager.GetNumPlayers(); 80 for (let i = 1; i < numPlayers; i++) 81 { 82 this.entitiesByPlayer[i] = {"entities" : []}; 83 this.entitiesByPlayer[i].player = cmpPlayerManager.GetPlayerByID(i); 84 let entities = cmpRangeManager.GetEntitiesByPlayer(i); 85 for (let entity of entities) 86 { 87 if (!TriggerHelper.EntityHasClass(+entity, this.classFilter)) 88 continue; 89 if (Engine.QueryInterface(+entity, IID_Foundation)) 90 continue; 91 this.entitiesByPlayer[i].entities.push(+entity); 92 } 93 } 94 this.dataInit = true; 95 } 96 97 var cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger); 98 99 cmpTrigger.entitiesByPlayer = {}; 100 cmpTrigger.dataInit = false; 101 cmpTrigger.classFilter = ""; 102 No newline at end of file -
new file inaries/data/mods/public/maps/scripts/ConquestStructures.js
diff --git a/binaries/data/mods/public/maps/scripts/ConquestStructures.js b/binaries/data/mods/public/maps/scripts/ConquestStructures.js new file mode 100644 index 0000000..4135fd4
- + 1 var cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger); 2 cmpTrigger.classFilter = "Structure"; 3 4 var data = {"enabled": true}; 5 cmpTrigger.RegisterTrigger("OnOwnershipChanged", "HandlerOwnerShipChanged", data); 6 cmpTrigger.RegisterTrigger("OnStructureBuilt", "AddStructure", data); 7 8 cmpTrigger.DoAfterDelay(0, "StartGameCount", null); 9 No newline at end of file -
new file inaries/data/mods/public/maps/scripts/ConquestUnits.js
diff --git a/binaries/data/mods/public/maps/scripts/ConquestUnits.js b/binaries/data/mods/public/maps/scripts/ConquestUnits.js new file mode 100644 index 0000000..fd36133
- + 1 var cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger); 2 cmpTrigger.classFilter = "Unit"; 3 4 var data = {"enabled": true}; 5 cmpTrigger.RegisterTrigger("OnOwnershipChanged", "HandlerOwnerShipChanged", data); 6 cmpTrigger.RegisterTrigger("OnTrainingFinished", "TrainingFinished", data); 7 8 9 cmpTrigger.DoAfterDelay(0, "StartGameCount", null); 10 No newline at end of file -
binaries/data/mods/public/simulation/components/EndGameManager.js
diff --git a/binaries/data/mods/public/simulation/components/EndGameManager.js b/binaries/data/mods/public/simulation/components/EndGameManager.js index 1b75b48..062e32d 100644
a b EndGameManager.prototype.MarkPlayerAsWon = function(playerID) 50 50 if (playerID == cmpPlayer.GetPlayerID() || this.alliedVictory && cmpPlayer.IsMutualAlly(playerID)) 51 51 cmpPlayer.SetState("won") 52 52 else 53 Engine.PostMessage(playerEntityId, MT_PlayerDefeated, { "playerId": i } );53 Engine.PostMessage(playerEntityId, MT_PlayerDefeated, { "playerId": i, "skip": true } ); 54 54 } 55 55 56 56 // Reveal the map to all players … … EndGameManager.prototype.SetAlliedVictory = function(flag) 63 63 this.alliedVictory = flag; 64 64 }; 65 65 66 EndGameManager.prototype.OnGlobalPlayerDefeated = function(msg) 67 { 68 if (msg.skip) 69 return; 70 71 var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); 72 73 // Ignore gaia 74 var numPlayers = cmpPlayerManager.GetNumPlayers(); 75 var cmpPlayers = []; 76 77 var allies = []; 78 var onlyAlliesLeft = true; 79 // If the player is currently active but needs to be defeated, 80 // mark that player as defeated 81 // cache the cmpPlayer instances of the other players and search the allies 82 for (var i = 1; i < numPlayers; i++) 83 { 84 // cmpPlayer should always exist for the player ids from 1 to numplayers 85 // so no tests on the existance of cmpPlayer are needed 86 var playerEntityId = cmpPlayerManager.GetPlayerByID(i); 87 cmpPlayers[i] = Engine.QueryInterface(playerEntityId, IID_Player); 88 if (cmpPlayers[i].GetState() != "active") 89 continue; 90 91 if (!allies.length || cmpPlayers[allies[0]].IsMutualAlly(i)) 92 allies.push(i); 93 else 94 onlyAlliesLeft = false; 95 } 96 97 // check if there are winners, or the game needs to continue 98 if (!allies.length || !onlyAlliesLeft || !(this.alliedVictory || allies.length == 1)) 99 return; 100 101 for each (var p in allies) 102 cmpPlayers[p].SetState("won"); 103 104 // Reveal the map to all players 105 var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); 106 cmpRangeManager.SetLosRevealAll(-1, true); 107 } 108 66 109 Engine.RegisterSystemComponentType(IID_EndGameManager, "EndGameManager", EndGameManager); -
binaries/data/mods/public/simulation/components/Trigger.js
diff --git a/binaries/data/mods/public/simulation/components/Trigger.js b/binaries/data/mods/public/simulation/components/Trigger.js index 99bbddb..343d72c 100644
a b Trigger.prototype.eventNames = 18 18 "PlayerCommand", 19 19 "Interval", 20 20 "Range", 21 "TreasureCollected" ,21 "TreasureCollected" 22 22 ]; 23 23 24 24 Trigger.prototype.Init = function()