Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/binaries/data/mods/public/maps/scripts/ConquestCommon.js
Trigger.prototype.ConquestOwnershipChanged = function(msg) | Trigger.prototype.ConquestOwnershipChanged = function(msg) | ||||
{ | { | ||||
if (!this.conquestDataInit || !this.conquestClassFilter) | if (!this.conquestDataInit) | ||||
return; | return; | ||||
if (!TriggerHelper.EntityMatchesClassList(msg.entity, this.conquestClassFilter)) | for (let query of this.conquestQueries) | ||||
return; | { | ||||
if (!TriggerHelper.EntityMatchesClassList(msg.entity, query.classFilter)) | |||||
continue; | |||||
if (msg.to > 0) | if (msg.to > 0) | ||||
this.conquestEntitiesByPlayer[msg.to].push(msg.entity); | query.entitiesByPlayer[msg.to].push(msg.entity); | ||||
if (msg.from > 0) | if (msg.from <= 0) | ||||
{ | continue; | ||||
let entities = this.conquestEntitiesByPlayer[msg.from]; | |||||
let entities = query.entitiesByPlayer[msg.from]; | |||||
let index = entities.indexOf(msg.entity); | let index = entities.indexOf(msg.entity); | ||||
if (index != -1) | if (index != -1) | ||||
entities.splice(index, 1); | entities.splice(index, 1); | ||||
if (!entities.length) | if (!entities.length) | ||||
{ | { | ||||
let cmpPlayer = QueryPlayerIDInterface(msg.from); | let cmpPlayer = QueryPlayerIDInterface(msg.from); | ||||
if (cmpPlayer) | if (cmpPlayer) | ||||
cmpPlayer.SetState("defeated", this.conquestDefeatReason); | cmpPlayer.SetState("defeated", query.defeatReason); | ||||
} | } | ||||
} | } | ||||
}; | }; | ||||
Trigger.prototype.ConquestStartGameCount = function() | Trigger.prototype.ConquestStartGameCount = function() | ||||
{ | { | ||||
if (!this.conquestClassFilter) | if (!this.conquestQueries.length) | ||||
{ | { | ||||
warn("ConquestStartGameCount: conquestClassFilter undefined"); | warn("ConquestStartGameCount: no conquestQueries set"); | ||||
return; | return; | ||||
} | } | ||||
let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); | let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); | ||||
let entitiesByPlayer = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetAllPlayers().map(playerID => | |||||
cmpRangeManager.GetEntitiesByPlayer(playerID)); | |||||
let numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers(); | for (let query of this.conquestQueries) | ||||
for (let i = 1; i < numPlayers; ++i) | query.entitiesByPlayer = entitiesByPlayer.map( | ||||
this.conquestEntitiesByPlayer[i] = | ents => ents.filter( | ||||
cmpRangeManager.GetEntitiesByPlayer(i).filter(ent => | ent => TriggerHelper.EntityMatchesClassList(ent, query.classFilter))); | ||||
TriggerHelper.EntityMatchesClassList(ent, this.conquestClassFilter)); | |||||
this.conquestDataInit = true; | this.conquestDataInit = true; | ||||
}; | }; | ||||
Trigger.prototype.ConquestAddVictoryCondition = function(data) | |||||
{ | |||||
this.conquestQueries.push(data); | |||||
}; | |||||
{ | { | ||||
let cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger); | let cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger); | ||||
cmpTrigger.conquestEntitiesByPlayer = {}; | |||||
cmpTrigger.conquestDataInit = false; | cmpTrigger.conquestDataInit = false; | ||||
cmpTrigger.conquestClassFilter = ""; | cmpTrigger.conquestQueries = []; | ||||
cmpTrigger.RegisterTrigger("OnOwnershipChanged", "ConquestOwnershipChanged", { "enabled": true }); | cmpTrigger.RegisterTrigger("OnOwnershipChanged", "ConquestOwnershipChanged", { "enabled": true }); | ||||
cmpTrigger.DoAfterDelay(0, "ConquestStartGameCount", null); | cmpTrigger.DoAfterDelay(0, "ConquestStartGameCount", null); | ||||
} | } |
Wildfire Games · Phabricator