View Issue Details
ID | Project | Category | Date Submitted | Last Update | |
---|---|---|---|---|---|
0022362 | AI War 2 | Bug - Other | Dec 13, 2019 5:20 pm | Dec 13, 2019 5:41 pm | |
Reporter | StarKelp | Assigned To | |||
Status | resolved | Resolution | fixed | ||
Product Version | BETA 1.015 Testing The Outguard Waters | ||||
Fixed in Version | 1.016 Back From Beta | ||||
Summary | 0022362: BaseFaction.GetAIDefensePlacerForPlanet is seemingly always failing | ||||
Description | public virtual AIDefensePlacer GetAIDefensePlacerForPlanet( Faction faction, Planet planet, ArcenSimContext Context ) { //note from Chris: this should be something that comes back for ANY planet, or else it's going to break. Non-AI planets also use this. if ( faction.Type != FactionType.AI ) return AITypeDataTable.Instance.DefaultRow.Implementation.GetAIDefensePlacerForPlanet( faction, planet, Context ); return faction.GetSentinelsExternal().AIType.Implementation.GetAIDefensePlacerForPlanet( faction, planet, Context ); } This appears to always fail to find a faction and default to the 'DefaultRow' on account of, for some reason, not having a proper faction. (I'm unclear exactly, as the code around that is pretty deep and confuses me.) In addition, this DefaultRow wouldn't even be the selected AI type, resulting in many planets not following its own ai's rules. The following code fixed it to always use a custom DefencePlacer when one is specified, and is listed here for review. public virtual AIDefensePlacer GetAIDefensePlacerForPlanet( Faction faction, Planet planet, ArcenSimContext Context ) { //note from Chris: this should be something that comes back for ANY planet, or else it's going to break. Non-AI planets also use this. if ( faction.Type != FactionType.AI ) { if ( planet.InitialOwningAIFactionIndex != -1 ) // Has been previous owned by an ai, so use that ai's information. return World_AIW2.Instance.GetFactionByIndex( planet.InitialOwningAIFactionIndex ).GetSentinelsExternal().AIType.Implementation.GetAIDefensePlacerForPlanet( faction, planet, Context ); else // Seemingly never owned by an ai, so use the primary ai's information. return World_AIW2.Instance.AIFactions[0].GetSentinelsExternal().AIType.Implementation.GetAIDefensePlacerForPlanet( faction, planet, Context ); } // If currently owned, nice. Just return data from it. return faction.GetSentinelsExternal().AIType.Implementation.GetAIDefensePlacerForPlanet( faction, planet, Context ); } | ||||
Tags | No tags attached. | ||||
|
When/where are you trying to call this function? Sim code? Seeding code? |
|
This is a good code change, I approve. |
|
Thats the thing. I don't quite know. I never directly call it, but call an overrided version that that is meant to call? Its a bit on the complicated side for me I fear to properly explain. The above code is inside of BaseFaction.cs. The code of mine that is related is in AiType.cs, and put below. public class AITypeController_TypeName : BaseAITypeImplementation { public override AIDefensePlacer GetAIDefensePlacerForPlanet( Faction faction, Planet planet, ArcenSimContext Context ) { return AIDefensePlacerTable.Instance.GetRowByName( "TypeName", false, null ); } } |
|
It's called by both -- during the game, and during mapgen. |
Date Modified | Username | Field | Change |
---|---|---|---|
Dec 13, 2019 5:20 pm | StarKelp | New Issue | |
Dec 13, 2019 5:23 pm | BadgerBadger | Note Added: 0054985 | |
Dec 13, 2019 5:25 pm | Chris_McElligottPark | Note Added: 0054986 | |
Dec 13, 2019 5:30 pm | StarKelp | Note Added: 0054987 | |
Dec 13, 2019 5:41 pm | Chris_McElligottPark | Status | new => resolved |
Dec 13, 2019 5:41 pm | Chris_McElligottPark | Resolution | open => fixed |
Dec 13, 2019 5:41 pm | Chris_McElligottPark | Fixed in Version | => 1.016 Back From Beta |
Dec 13, 2019 5:41 pm | Chris_McElligottPark | Note Added: 0054988 |