Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/maps/scenarios/ress_gathering.js
- This file was added.
const REG_UNIT_TEMPLATE = "units/athen/infantry_spearman_b"; | |||||
const TREE_TEMPLATE = "gaia/tree/acacia"; | |||||
const FARM_TEMPLATE = "structures/athen/field"; | |||||
const STOREHOUSE = "structures/athen/storehouse"; | |||||
const FARMSTEAD = "structures/athen/farmstead"; | |||||
const ATTACKER = 2; | |||||
var QuickSpawn = function(x, z, template, owner = 1) | |||||
{ | |||||
let ent = Engine.AddEntity(template); | |||||
let cmpEntOwnership = Engine.QueryInterface(ent, IID_Ownership); | |||||
if (cmpEntOwnership) | |||||
cmpEntOwnership.SetOwner(owner); | |||||
let cmpEntPosition = Engine.QueryInterface(ent, IID_Position); | |||||
cmpEntPosition.JumpTo(x, z); | |||||
return ent; | |||||
}; | |||||
var WalkTo = function(x, z, queued, ent, owner=1) | |||||
{ | |||||
ProcessCommand(owner, { | |||||
"type": "walk", | |||||
"entities": Array.isArray(ent) ? ent : [ent], | |||||
"x": x, | |||||
"z": z, | |||||
"queued": queued, | |||||
"force": true, | |||||
}); | |||||
return ent; | |||||
}; | |||||
var Do = function(name, data, ent, owner = 1) | |||||
{ | |||||
let comm = { | |||||
"type": name, | |||||
"entities": Array.isArray(ent) ? ent : [ent], | |||||
"queued": false | |||||
}; | |||||
for (let k in data) | |||||
comm[k] = data[k]; | |||||
ProcessCommand(owner, comm); | |||||
}; | |||||
var farming = (gx, gy) => { | |||||
let dropsite = QuickSpawn(gx + 50, gy + 50, FARMSTEAD); | |||||
let cmpModifiersManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_ModifiersManager); | |||||
cmpModifiersManager.AddModifiers("root", { | |||||
"TerritoryInfluence/Root": [{ "affects": ["Structure"], "replace": true }], | |||||
}, dropsite); | |||||
for (let i = 20; i < 80; i += 20) | |||||
for (let j = 20; j < 80; j += 20) | |||||
{ | |||||
let farm = QuickSpawn(gx + i, gy + j, FARM_TEMPLATE); | |||||
Do("gather", { "target": farm }, QuickSpawn(gx + i, gy + j, REG_UNIT_TEMPLATE)); | |||||
Do("gather", { "target": farm }, QuickSpawn(gx + i, gy + j+2, REG_UNIT_TEMPLATE)); | |||||
Do("gather", { "target": farm }, QuickSpawn(gx + i, gy + j-2, REG_UNIT_TEMPLATE)); | |||||
} | |||||
}; | |||||
var woodcutting = (gx, gy) => { | |||||
let dropsite = QuickSpawn(gx + 50, gy, STOREHOUSE); | |||||
let cmpModifiersManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_ModifiersManager); | |||||
cmpModifiersManager.AddModifiers("root", { | |||||
"TerritoryInfluence/Root": [{ "affects": ["Structure"], "replace": true }], | |||||
}, dropsite); | |||||
for (let i = 10; i <= 90; i += 6) | |||||
for (let j = 10; j <= 90; j += 6) | |||||
QuickSpawn(gx + i, gy + j, TREE_TEMPLATE); | |||||
for (let i = 10; i <= 90; i += 5) | |||||
Do("gather-near-position", { "x": gx + i, "z": gy + 10, "resourceType": { "generic": "wood", "specific": "tree" }, "resourceTemplate": TREE_TEMPLATE }, | |||||
QuickSpawn(gx + i, gy, REG_UNIT_TEMPLATE)); | |||||
}; | |||||
var cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger); | |||||
Trigger.prototype.Setup = function() | |||||
{ | |||||
let start = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer).GetTime(); | |||||
let gx = 100; | |||||
let gy = 100; | |||||
for (let i = 0; i < 20; ++i) | |||||
{ | |||||
farming(gx, gy); | |||||
gx += 100; | |||||
if (gx > 20*16*4-20) | |||||
{ | |||||
gx = 100; | |||||
gy += 100; | |||||
} | |||||
} | |||||
for (let i = 0; i < 20; ++i) | |||||
{ | |||||
woodcutting(gx, gy); | |||||
gx += 100; | |||||
if (gx > 20*16*4-20) | |||||
{ | |||||
gx = 100; | |||||
gy += 100; | |||||
} | |||||
} | |||||
}; | |||||
Trigger.prototype.EndGame = function() | |||||
{ | |||||
Engine.QueryInterface(4, IID_Player).SetState("defeated", "trigger"); | |||||
Engine.QueryInterface(3, IID_Player).SetState("won", "trigger"); | |||||
}; | |||||
cmpTrigger.DoAfterDelay(2000, "Setup", {}); | |||||
cmpTrigger.DoAfterDelay(300000, "EndGame", {}); | |||||
/* | |||||
var cmpModifiersManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_ModifiersManager); | |||||
// Reduce player 1 vision range (or patrolling units reacct) | |||||
cmpModifiersManager.AddModifiers("no_promotion", { | |||||
"Vision/Range": [{ "affects": ["Unit"], "replace": 5 }], | |||||
}, 3); // player 1 is ent 3 | |||||
// Prevent promotions, messes up things. | |||||
cmpModifiersManager.AddModifiers("no_promotion_A", { | |||||
"Promotion/RequiredXp": [{ "affects": ["Unit"], "replace": 50000 }], | |||||
}, 3); | |||||
cmpModifiersManager.AddModifiers("no_promotion_B", { | |||||
"Promotion/RequiredXp": [{ "affects": ["Unit"], "replace": 50000 }], | |||||
}, 4); // player 2 is ent 4 | |||||
*/ |
Wildfire Games · Phabricator