From c1967848d2063ba32fef93170b27f14229603cff Mon Sep 17 00:00:00 2001 From: Ykkrosh Date: Wed, 13 Oct 2010 15:14:15 +0000 Subject: [PATCH] # Fix units killing their own farms This was SVN commit r8343. --- .../simulation/components/ResourceSupply.js | 8 +++++++ .../public/simulation/components/UnitAI.js | 21 ++++++++++++++++++- .../template_gaia_flora_bush_berry.xml | 1 + .../templates/template_gaia_flora_tree.xml | 1 + .../templates/template_gaia_geo_mineral.xml | 1 + .../template_gaia_geo_mineral_slabs.xml | 1 - .../templates/template_gaia_geo_rock.xml | 1 + .../template_structure_resource_corral.xml | 1 + .../template_structure_resource_field.xml | 1 + .../templates/template_unit_fauna_fish.xml | 1 + .../templates/template_unit_fauna_herd.xml | 1 + .../templates/template_unit_fauna_hunt.xml | 1 + 12 files changed, 37 insertions(+), 2 deletions(-) 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