diff --git a/binaries/data/mods/public/simulation/components/ResourceSupply.js b/binaries/data/mods/public/simulation/components/ResourceSupply.js
index 622c3f90c3..258ce32af3 100644
--- a/binaries/data/mods/public/simulation/components/ResourceSupply.js
+++ b/binaries/data/mods/public/simulation/components/ResourceSupply.js
@@ -6,6 +6,9 @@ ResourceSupply.prototype.Schema =
"1000" +
"food.meat" +
"" +
+ "" +
+ "" +
+ "" +
"" +
"" +
"" +
@@ -29,6 +32,11 @@ ResourceSupply.prototype.Init = function()
this.amount = this.GetMaxAmount();
};
+ResourceSupply.prototype.GetKillBeforeGather = function()
+{
+ return (this.template.KillBeforeGather == "true");
+};
+
ResourceSupply.prototype.GetMaxAmount = function()
{
return +this.template.Amount;
diff --git a/binaries/data/mods/public/simulation/components/UnitAI.js b/binaries/data/mods/public/simulation/components/UnitAI.js
index d593fe3840..abd564f0f7 100644
--- a/binaries/data/mods/public/simulation/components/UnitAI.js
+++ b/binaries/data/mods/public/simulation/components/UnitAI.js
@@ -117,7 +117,7 @@ var UnitFsmSpec = {
"Order.Gather": function(msg) {
// If the target is still alive, we need to kill it first
- if (this.TargetIsAlive(this.order.data.target))
+ if (this.MustKillGatherTarget(this.order.data.target))
{
// Make sure we can attack the target, else we'll get very stuck
if (!this.GetBestAttack())
@@ -727,6 +727,9 @@ UnitAI.prototype.GetRunSpeed = function()
return cmpMotion.GetRunSpeed();
};
+/**
+ * Returns true if the target exists and has non-zero hitpoints.
+ */
UnitAI.prototype.TargetIsAlive = function(ent)
{
var cmpHealth = Engine.QueryInterface(ent, IID_Health);
@@ -736,6 +739,22 @@ UnitAI.prototype.TargetIsAlive = function(ent)
return (cmpHealth.GetHitpoints() != 0);
};
+/**
+ * Returns true if the target exists and needs to be killed before
+ * beginning to gather resources from it.
+ */
+UnitAI.prototype.MustKillGatherTarget = function(ent)
+{
+ var cmpResourceSupply = Engine.QueryInterface(ent, IID_ResourceSupply);
+ if (!cmpResourceSupply)
+ return false;
+
+ if (!cmpResourceSupply.GetKillBeforeGather())
+ return false;
+
+ return this.TargetIsAlive(ent);
+};
+
/**
* Play a sound appropriate to the current entity.
*/
diff --git a/binaries/data/mods/public/simulation/templates/template_gaia_flora_bush_berry.xml b/binaries/data/mods/public/simulation/templates/template_gaia_flora_bush_berry.xml
index 61fbb1031f..a16549b498 100644
--- a/binaries/data/mods/public/simulation/templates/template_gaia_flora_bush_berry.xml
+++ b/binaries/data/mods/public/simulation/templates/template_gaia_flora_bush_berry.xml
@@ -13,6 +13,7 @@
+ false
120
food.fruit
diff --git a/binaries/data/mods/public/simulation/templates/template_gaia_flora_tree.xml b/binaries/data/mods/public/simulation/templates/template_gaia_flora_tree.xml
index f81dc41d8c..3cfb81612a 100644
--- a/binaries/data/mods/public/simulation/templates/template_gaia_flora_tree.xml
+++ b/binaries/data/mods/public/simulation/templates/template_gaia_flora_tree.xml
@@ -11,6 +11,7 @@
+ false
150
wood.tree
diff --git a/binaries/data/mods/public/simulation/templates/template_gaia_geo_mineral.xml b/binaries/data/mods/public/simulation/templates/template_gaia_geo_mineral.xml
index 871a349425..3fbbb48eae 100644
--- a/binaries/data/mods/public/simulation/templates/template_gaia_geo_mineral.xml
+++ b/binaries/data/mods/public/simulation/templates/template_gaia_geo_mineral.xml
@@ -12,6 +12,7 @@
+ false
500
metal.ore
diff --git a/binaries/data/mods/public/simulation/templates/template_gaia_geo_mineral_slabs.xml b/binaries/data/mods/public/simulation/templates/template_gaia_geo_mineral_slabs.xml
index f06ef45975..d0e0986ce2 100644
--- a/binaries/data/mods/public/simulation/templates/template_gaia_geo_mineral_slabs.xml
+++ b/binaries/data/mods/public/simulation/templates/template_gaia_geo_mineral_slabs.xml
@@ -5,7 +5,6 @@
5000
- metal.ore
6.0
diff --git a/binaries/data/mods/public/simulation/templates/template_gaia_geo_rock.xml b/binaries/data/mods/public/simulation/templates/template_gaia_geo_rock.xml
index 17c69bb85b..fd74a553b0 100644
--- a/binaries/data/mods/public/simulation/templates/template_gaia_geo_rock.xml
+++ b/binaries/data/mods/public/simulation/templates/template_gaia_geo_rock.xml
@@ -12,6 +12,7 @@
+ false
500
stone.rock
diff --git a/binaries/data/mods/public/simulation/templates/template_structure_resource_corral.xml b/binaries/data/mods/public/simulation/templates/template_structure_resource_corral.xml
index 828b59ae66..dd112381e3 100644
--- a/binaries/data/mods/public/simulation/templates/template_structure_resource_corral.xml
+++ b/binaries/data/mods/public/simulation/templates/template_structure_resource_corral.xml
@@ -13,6 +13,7 @@
+ false
200
food.milk
diff --git a/binaries/data/mods/public/simulation/templates/template_structure_resource_field.xml b/binaries/data/mods/public/simulation/templates/template_structure_resource_field.xml
index 232b585b01..fa2dae7408 100644
--- a/binaries/data/mods/public/simulation/templates/template_structure_resource_field.xml
+++ b/binaries/data/mods/public/simulation/templates/template_structure_resource_field.xml
@@ -16,6 +16,7 @@
+ false
1000
food.grain
diff --git a/binaries/data/mods/public/simulation/templates/template_unit_fauna_fish.xml b/binaries/data/mods/public/simulation/templates/template_unit_fauna_fish.xml
index 7a68316edd..7e4ca7678b 100644
--- a/binaries/data/mods/public/simulation/templates/template_unit_fauna_fish.xml
+++ b/binaries/data/mods/public/simulation/templates/template_unit_fauna_fish.xml
@@ -18,6 +18,7 @@
+ false
500
food.fish
diff --git a/binaries/data/mods/public/simulation/templates/template_unit_fauna_herd.xml b/binaries/data/mods/public/simulation/templates/template_unit_fauna_herd.xml
index 720953c477..54725bb2a3 100644
--- a/binaries/data/mods/public/simulation/templates/template_unit_fauna_herd.xml
+++ b/binaries/data/mods/public/simulation/templates/template_unit_fauna_herd.xml
@@ -4,6 +4,7 @@
remain
+ true
100
food.meat
diff --git a/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt.xml b/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt.xml
index 5159cf63ca..e1c8b3bcb7 100644
--- a/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt.xml
+++ b/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt.xml
@@ -4,6 +4,7 @@
remain
+ true
100
food.meat