Ticket #1184: garrisonfix-03082012.patch
File garrisonfix-03082012.patch, 18.6 KB (added by , 12 years ago) |
---|
-
binaries/data/mods/public/simulation/components/GarrisonHolder.js
1 1 function GarrisonHolder() {} 2 2 3 3 GarrisonHolder.prototype.Schema = 4 "<element name='Max' >" +4 "<element name='Max' a:help='Maximum number of entities which can be garrisoned inside this holder'>" + 5 5 "<data type='positiveInteger'/>" + 6 6 "</element>" + 7 "<element name='List' >" +7 "<element name='List' a:help='Classes of entities which are allowed to garrison inside this holder (from Identity)'>" + 8 8 "<attribute name='datatype'>" + 9 9 "<value>tokens</value>" + 10 10 "</attribute>" + 11 11 "<text/>" + 12 12 "</element>" + 13 "<element name='EjectHealth' >" +13 "<element name='EjectHealth' a:help='Percentage of maximum health below which this holder no longer allows garrisoning'>" + 14 14 "<ref name='nonNegativeDecimal'/>" + 15 15 "</element>" + 16 "<element name='BuffHeal' >" +16 "<element name='BuffHeal' a:help='Number of hit points that will be restored to this holder's garrisoned units each second'>" + 17 17 "<data type='positiveInteger'/>" + 18 "</element>" + 19 "<element name='LoadingRange' a:help='The maximum distance from this holder at which entities are allowed to garrison. Should be about 2.0 for land entities and preferably greater for ships'>" + 20 "<ref name='nonNegativeDecimal'/>" + 18 21 "</element>"; 19 22 20 23 /** … … 30 33 }; 31 34 32 35 /** 36 * Return range at which entities can garrison here 37 */ 38 GarrisonHolder.prototype.GetLoadingRange = function() 39 { 40 var max = +this.template.LoadingRange; 41 return { "max": max, "min": 0 }; 42 }; 43 44 /** 33 45 * Return the list of entities garrisoned inside 34 46 */ 35 47 GarrisonHolder.prototype.GetEntities = function() -
binaries/data/mods/public/simulation/components/UnitAI.js
374 374 } 375 375 else 376 376 { 377 // TODO: this is probably bogus if the unit was 378 // unable to move at all - we need to do some range checks 379 // before actually garrisoning 377 // We do a range check before actually garrisoning 380 378 this.StopMoving(); 381 379 this.SetNextState("INDIVIDUAL.GARRISON.GARRISONED"); 382 380 } … … 1232 1230 "GARRISONED": { 1233 1231 "enter": function() { 1234 1232 var target = this.order.data.target; 1235 // Check that we can still garrison here and that garrisoning succeeds1236 1233 var cmpGarrisonHolder = Engine.QueryInterface(target, IID_GarrisonHolder); 1237 if (this.CanGarrison(target) && cmpGarrisonHolder.Garrison(this.entity)) 1234 1235 // Check that we can garrison here 1236 if (this.CanGarrison(target)) 1238 1237 { 1239 this.isGarrisoned = true; 1238 // Check that we're in range of the garrison target 1239 if (this.CheckGarrisonRange(target)) 1240 { 1241 // Check that garrisoning succeeds 1242 if (cmpGarrisonHolder.Garrison(this.entity)) 1243 { 1244 this.isGarrisoned = true; 1245 return; 1246 } 1247 } 1248 else 1249 { 1250 // Unable to reach the target, try again 1251 // (or follow if it's a moving target) 1252 if (this.MoveToTarget(target)) 1253 { 1254 this.SetNextState("APPROACHING"); 1255 return; 1256 } 1257 } 1240 1258 } 1241 else 1242 { 1243 // Garrisoning failed for some reason, so finish the order 1244 if (this.FinishOrder()) 1245 return; 1246 } 1259 1260 // Garrisoning failed for some reason, so finish the order 1261 this.FinishOrder(); 1262 return; 1247 1263 }, 1248 1264 1249 1265 "Order.Ungarrison": function() { … … 2008 2024 return cmpUnitMotion.IsInTargetRange(target, range.min, range.max); 2009 2025 }; 2010 2026 2027 UnitAI.prototype.CheckGarrisonRange = function(target) 2028 { 2029 var cmpGarrisonHolder = Engine.QueryInterface(target, IID_GarrisonHolder); 2030 var range = cmpGarrisonHolder.GetLoadingRange(); 2031 2032 var cmpUnitMotion = Engine.QueryInterface(this.entity, IID_UnitMotion); 2033 return cmpUnitMotion.IsInTargetRange(target, range.min, range.max); 2034 } 2035 2011 2036 /** 2012 2037 * Returns true if the target entity is visible through the FoW/SoD. 2013 2038 */ … … 2516 2541 this.SetHeldPosition(pos.x, pos.z); 2517 2542 2518 2543 this.SetStance(stance); 2519 if (stance == "stand" || stance == "defensive" || stance == "passive") 2544 // Stop moving if switching to stand ground 2545 // TODO: Also stop existing orders in a sensible way 2546 if (stance == "stand") 2520 2547 this.StopMoving(); 2521 2548 2522 2549 // Reset the range query, since the range depends on stance -
binaries/data/mods/public/simulation/templates/structures/rome_army_camp.xml
39 39 </Footprint> 40 40 <GarrisonHolder> 41 41 <Max>20</Max> 42 <EjectHealth>0.1</EjectHealth> 43 <List datatype="tokens">Support Infantry Cavalry Siege</List> 44 <BuffHeal>1</BuffHeal> 42 <List datatype="tokens">Support Infantry Cavalry Siege</List> 45 43 </GarrisonHolder> 46 44 <Health> 47 45 <Max>3500</Max> -
binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre.xml
45 45 </Footprint> 46 46 <GarrisonHolder> 47 47 <Max>20</Max> 48 <EjectHealth>0.1</EjectHealth> 49 <List datatype="tokens">Support Infantry Cavalry</List> 50 <BuffHeal>1</BuffHeal> 48 <EjectHealth>0.1</EjectHealth> 49 <List datatype="tokens">Support Infantry Cavalry</List> 50 <BuffHeal>1</BuffHeal> 51 <LoadingRange>2</LoadingRange> 51 52 </GarrisonHolder> 52 53 <Health> 53 54 <Max>3000</Max> -
binaries/data/mods/public/simulation/templates/template_structure_civic_temple.xml
27 27 </Footprint> 28 28 <GarrisonHolder> 29 29 <Max>15</Max> 30 <EjectHealth>0.1</EjectHealth> 31 <List datatype="tokens">Support Infantry Cavalry</List> 32 <BuffHeal>2</BuffHeal> 30 <EjectHealth>0.1</EjectHealth> 31 <List datatype="tokens">Support Infantry Cavalry</List> 32 <BuffHeal>2</BuffHeal> 33 <LoadingRange>2</LoadingRange> 33 34 </GarrisonHolder> 34 35 <Health> 35 36 <Max>2000</Max> -
binaries/data/mods/public/simulation/templates/template_structure_defense_defense_tower.xml
37 37 </Footprint> 38 38 <GarrisonHolder> 39 39 <Max>5</Max> 40 <EjectHealth>0.1</EjectHealth> 41 <List datatype="tokens">Support Infantry</List> 42 <BuffHeal>1</BuffHeal> 40 <EjectHealth>0.1</EjectHealth> 41 <List datatype="tokens">Support Infantry</List> 42 <BuffHeal>1</BuffHeal> 43 <LoadingRange>2</LoadingRange> 43 44 </GarrisonHolder> 44 45 <Health> 45 46 <Max>1200</Max> -
binaries/data/mods/public/simulation/templates/template_structure_defense_outpost.xml
23 23 </Footprint> 24 24 <GarrisonHolder> 25 25 <Max>1</Max> 26 <EjectHealth>0.1</EjectHealth> 27 <List datatype="tokens">Support Infantry</List> 28 <BuffHeal>1</BuffHeal> 26 <EjectHealth>0.1</EjectHealth> 27 <List datatype="tokens">Support Infantry</List> 28 <BuffHeal>1</BuffHeal> 29 <LoadingRange>2</LoadingRange> 29 30 </GarrisonHolder> 30 31 <Health> 31 32 <Max>800</Max> -
binaries/data/mods/public/simulation/templates/template_structure_defense_wall_tower.xml
36 36 </Footprint> 37 37 <GarrisonHolder> 38 38 <Max>5</Max> 39 <EjectHealth>0.1</EjectHealth> 40 <List datatype="tokens">Support Infantry</List> 41 <BuffHeal>1</BuffHeal> 39 <EjectHealth>0.1</EjectHealth> 40 <List datatype="tokens">Support Infantry</List> 41 <BuffHeal>1</BuffHeal> 42 <LoadingRange>2</LoadingRange> 42 43 </GarrisonHolder> 43 44 <Health> 44 45 <Max>2500</Max> -
binaries/data/mods/public/simulation/templates/template_structure_military_barracks.xml
20 20 </Footprint> 21 21 <GarrisonHolder> 22 22 <Max>10</Max> 23 <EjectHealth>0.1</EjectHealth> 24 <List datatype="tokens">Infantry Cavalry</List> 25 <BuffHeal>1</BuffHeal> 23 <EjectHealth>0.1</EjectHealth> 24 <List datatype="tokens">Infantry Cavalry</List> 25 <BuffHeal>1</BuffHeal> 26 <LoadingRange>2</LoadingRange> 26 27 </GarrisonHolder> 27 28 <Health> 28 29 <Max>2000</Max> -
binaries/data/mods/public/simulation/templates/template_structure_military_fortress.xml
38 38 </Footprint> 39 39 <GarrisonHolder> 40 40 <Max>20</Max> 41 <EjectHealth>0.1</EjectHealth> 42 <List datatype="tokens">Support Infantry Cavalry Siege</List> 43 <BuffHeal>1</BuffHeal> 41 <EjectHealth>0.1</EjectHealth> 42 <List datatype="tokens">Support Infantry Cavalry Siege</List> 43 <BuffHeal>1</BuffHeal> 44 <LoadingRange>2</LoadingRange> 44 45 </GarrisonHolder> 45 46 <Health> 46 47 <Max>4200</Max> -
binaries/data/mods/public/simulation/templates/template_structure_resource_corral.xml
17 17 </Footprint> 18 18 <GarrisonHolder> 19 19 <Max>10</Max> 20 <EjectHealth>0.1</EjectHealth> 21 <List datatype="tokens">Animal</List> 22 <BuffHeal>1</BuffHeal> 20 <EjectHealth>0.1</EjectHealth> 21 <List datatype="tokens">Animal</List> 22 <BuffHeal>1</BuffHeal> 23 <LoadingRange>2</LoadingRange> 23 24 </GarrisonHolder> 24 25 <Health> 25 26 <Max>500</Max> -
binaries/data/mods/public/simulation/templates/template_structure_special.xml
18 18 </Footprint> 19 19 <GarrisonHolder> 20 20 <Max>5</Max> 21 <EjectHealth>0.1</EjectHealth> 22 <List datatype="tokens">Support Infantry Cavalry</List> 23 <BuffHeal>1</BuffHeal> 21 <EjectHealth>0.1</EjectHealth> 22 <List datatype="tokens">Support Infantry Cavalry</List> 23 <BuffHeal>1</BuffHeal> 24 <LoadingRange>2</LoadingRange> 24 25 </GarrisonHolder> 25 26 <Health> 26 27 <Max>2000</Max> -
binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_bireme.xml
33 33 <EjectHealth>0</EjectHealth> 34 34 <List datatype="tokens">Support Infantry Cavalry</List> 35 35 <BuffHeal>1</BuffHeal> 36 <LoadingRange>10</LoadingRange> 36 37 </GarrisonHolder> 37 38 <Health> 38 39 <Max>800</Max> -
binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_fishing.xml
23 23 <EjectHealth>0</EjectHealth> 24 24 <List datatype="tokens">Support Infantry</List> 25 25 <BuffHeal>1</BuffHeal> 26 <LoadingRange>10</LoadingRange> 26 27 </GarrisonHolder> 27 28 <Identity> 28 29 <GenericName>Fishing Boat</GenericName> -
binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_merchant.xml
16 16 <EjectHealth>0</EjectHealth> 17 17 <List datatype="tokens">Support Infantry Cavalry</List> 18 18 <BuffHeal>1</BuffHeal> 19 <LoadingRange>10</LoadingRange> 19 20 </GarrisonHolder> 20 21 <Health> 21 22 <Max>400</Max> -
binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_quinquereme.xml
33 33 <EjectHealth>0</EjectHealth> 34 34 <List datatype="tokens">Support Infantry Cavalry Siege</List> 35 35 <BuffHeal>1</BuffHeal> 36 <LoadingRange>10</LoadingRange> 36 37 </GarrisonHolder> 37 38 <Health> 38 39 <Max>2000</Max> -
binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_trireme.xml
37 37 <EjectHealth>0</EjectHealth> 38 38 <List datatype="tokens">Support Infantry Cavalry Siege</List> 39 39 <BuffHeal>1</BuffHeal> 40 <LoadingRange>10</LoadingRange> 40 41 </GarrisonHolder> 41 42 <Health> 42 43 <Max>1400</Max> -
binaries/data/mods/public/simulation/templates/template_unit_mechanical_siege_ram.xml
48 48 <metal>100</metal> 49 49 </Resources> 50 50 </Cost> 51 <GarrisonHolder> 52 <Max>5</Max> 53 <EjectHealth>0.1</EjectHealth> 54 <List datatype="tokens">Support Infantry</List> 55 <BuffHeal>1</BuffHeal> 56 <LoadingRange>2</LoadingRange> 57 </GarrisonHolder> 51 58 <Health> 52 59 <Max>200</Max> 53 60 </Health> -
binaries/data/mods/public/simulation/templates/template_unit_mechanical_siege_tower.xml
25 25 </Cost> 26 26 <GarrisonHolder> 27 27 <Max>20</Max> 28 <EjectHealth>0.1</EjectHealth> 29 <List datatype="tokens">Support Infantry</List> 30 <BuffHeal>1</BuffHeal> 28 <EjectHealth>0.1</EjectHealth> 29 <List datatype="tokens">Support Infantry</List> 30 <BuffHeal>1</BuffHeal> 31 <LoadingRange>2</LoadingRange> 31 32 </GarrisonHolder> 32 33 <Health> 33 34 <Max>800</Max> -
binaries/data/mods/public/simulation/templates/units/celt_mechanical_siege_ram.xml
16 16 </Footprint> 17 17 <GarrisonHolder> 18 18 <Max>10</Max> 19 <EjectHealth>0.1</EjectHealth>20 <List datatype="tokens">Support Infantry</List>21 <BuffHeal>1</BuffHeal>22 19 </GarrisonHolder> 23 20 <Health> 24 21 <Max>250</Max> -
binaries/data/mods/public/simulation/templates/units/iber_mechanical_siege_ram.xml
4 4 <Square width="6.75" depth="9.0"/> 5 5 <Height>3.0</Height> 6 6 </Footprint> 7 <GarrisonHolder>8 <Max>5</Max>9 <EjectHealth>0.1</EjectHealth>10 <List datatype="tokens">Support Infantry</List>11 <BuffHeal>1</BuffHeal>12 </GarrisonHolder>13 7 <Identity> 14 8 <Civ>iber</Civ> 15 9 <SpecificName>Ariete</SpecificName> -
binaries/data/mods/public/simulation/templates/units/rome_mechanical_siege_ram.xml
20 20 <Square width="8.0" depth="12.0"/> 21 21 <Height>3.0</Height> 22 22 </Footprint> 23 <GarrisonHolder>24 <Max>5</Max>25 <EjectHealth>0.1</EjectHealth>26 <List datatype="tokens">Support Infantry</List>27 <BuffHeal>1</BuffHeal>28 </GarrisonHolder>29 23 <Identity> 30 24 <Civ>rome</Civ> 31 25 <SpecificName>Aries</SpecificName>