Skip to content

Commit

Permalink
Add Lifeform technologies handling
Browse files Browse the repository at this point in the history
  • Loading branch information
YOLOP0wn committed Sep 24, 2022
1 parent 9bcaf81 commit 9260bba
Show file tree
Hide file tree
Showing 22 changed files with 1,737 additions and 67 deletions.
1 change: 1 addition & 0 deletions cmd/ogamed/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,7 @@ func start(c *cli.Context) error {
e.POST("/bot/planets/:planetID/resource-settings", wrapper.SetResourceSettingsHandler)
e.GET("/bot/planets/:planetID/resources-buildings", wrapper.GetResourcesBuildingsHandler)
e.GET("/bot/planets/:planetID/lifeform-buildings", wrapper.GetLfBuildingsHandler)
e.GET("/bot/planets/:planetID/lifeform-techs", wrapper.GetLfTechsHandler)
e.GET("/bot/planets/:planetID/defence", wrapper.GetDefenseHandler)
e.GET("/bot/planets/:planetID/ships", wrapper.GetShipsHandler)
e.GET("/bot/planets/:planetID/facilities", wrapper.GetFacilitiesHandler)
Expand Down
17 changes: 16 additions & 1 deletion pkg/extractor/extractor.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ type OverviewExtractorBytes interface {
ExtractCancelLfBuildingInfos(pageHTML []byte) (token string, id, listID int64, err error)
ExtractCancelResearchInfos(pageHTML []byte) (token string, techID, listID int64, err error)
ExtractCharacterClass(pageHTML []byte) (ogame.CharacterClass, error)
ExtractConstructions(pageHTML []byte) (buildingID ogame.ID, buildingCountdown int64, researchID ogame.ID, researchCountdown int64, lfBuildingID ogame.ID, lfBuildingCountdown int64)
ExtractConstructions(pageHTML []byte) (buildingID ogame.ID, buildingCountdown int64, researchID ogame.ID, researchCountdown int64, lfBuildingID ogame.ID, lfBuildingCountdown int64, lfTechID ogame.ID, lfTechCountdown int64)
ExtractDMCosts(pageHTML []byte) (ogame.DMCosts, error)
ExtractFleetDeutSaveFactor(pageHTML []byte) float64
ExtractOverviewProduction(pageHTML []byte) ([]ogame.Quantifiable, int64, error)
Expand Down Expand Up @@ -423,6 +423,20 @@ type LfBuildingsExtractorBytesDoc interface {
LfBuildingsExtractorDoc
}

type LfTechsExtractorBytes interface {
ExtractUpgradeToken(pageHTML []byte) (string, error)
ExtractLfTechs(pageHTML []byte) (ogame.LfTechs, error)
}

type LfTechsExtractorDoc interface {
ExtractLfTechsFromDoc(doc *goquery.Document) (ogame.LfTechs, error)
}

type LfTechsExtractorBytesDoc interface {
LfTechsExtractorBytes
LfTechsExtractorDoc
}

// ResourcesBuildingsExtractorBytes supplies page
type ResourcesBuildingsExtractorBytes interface {
ExtractResourcesBuildings(pageHTML []byte) (ogame.ResourcesBuildings, error)
Expand Down Expand Up @@ -478,6 +492,7 @@ type Extractor interface {
FullPageExtractorBytesDoc
HighscoreExtractorBytesDoc
LfBuildingsExtractorBytesDoc
LfTechsExtractorBytesDoc
MessagesCombatReportExtractorBytesDoc
MessagesEspionageReportExtractorBytesDoc
MessagesExpeditionExtractorBytesDoc
Expand Down
12 changes: 11 additions & 1 deletion pkg/extractor/v6/extractor.go
Original file line number Diff line number Diff line change
Expand Up @@ -809,7 +809,7 @@ func (e *Extractor) ExtractFederation(pageHTML []byte) url.Values {
}

// ExtractConstructions ...
func (e *Extractor) ExtractConstructions(pageHTML []byte) (buildingID ogame.ID, buildingCountdown int64, researchID ogame.ID, researchCountdown int64, lfBuildingID ogame.ID, lfBuildingCountdown int64) {
func (e *Extractor) ExtractConstructions(pageHTML []byte) (buildingID ogame.ID, buildingCountdown int64, researchID ogame.ID, researchCountdown int64, lfBuildingID ogame.ID, lfBuildingCountdown int64, lfTechID ogame.ID, lfTechCountdown int64) {
return extractConstructions(pageHTML)
}

Expand Down Expand Up @@ -893,3 +893,13 @@ func (e *Extractor) ExtractLfBuildings(pageHTML []byte) (ogame.LfBuildings, erro
func (e *Extractor) ExtractLfBuildingsFromDoc(doc *goquery.Document) (ogame.LfBuildings, error) {
panic("not implemented")
}

// ExtractLfTechs ...
func (e *Extractor) ExtractLfTechs(pageHTML []byte) (ogame.LfTechs, error) {
panic("not implemented")
}

// ExtractLfTechsFromDoc ...
func (e *Extractor) ExtractLfTechsFromDoc(doc *goquery.Document) (ogame.LfTechs, error) {
panic("not implemented")
}
2 changes: 1 addition & 1 deletion pkg/extractor/v6/extracts.go
Original file line number Diff line number Diff line change
Expand Up @@ -1913,7 +1913,7 @@ func extractFederation(pageHTML []byte) url.Values {
return payload
}

func extractConstructions(pageHTML []byte) (buildingID ogame.ID, buildingCountdown int64, researchID ogame.ID, researchCountdown int64, lfBuildingID ogame.ID, lfBuildingCountdown int64) {
func extractConstructions(pageHTML []byte) (buildingID ogame.ID, buildingCountdown int64, researchID ogame.ID, researchCountdown int64, lfBuildingID ogame.ID, lfBuildingCountdown int64, lfTechID ogame.ID, lfTechCountdown int64) {
buildingCountdownMatch := regexp.MustCompile(`getElementByIdWithCache\("Countdown"\),(\d+),`).FindSubmatch(pageHTML)
if len(buildingCountdownMatch) > 0 {
buildingCountdown = int64(utils.ToInt(buildingCountdownMatch[1]))
Expand Down
2 changes: 1 addition & 1 deletion pkg/extractor/v7/extractor.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ func (e Extractor) ExtractResourcesDetails(pageHTML []byte) (out ogame.Resources
}

// ExtractConstructions ...
func (e Extractor) ExtractConstructions(pageHTML []byte) (buildingID ogame.ID, buildingCountdown int64, researchID ogame.ID, researchCountdown int64, lfBuildingID ogame.ID, lfBuildingCountdown int64) {
func (e Extractor) ExtractConstructions(pageHTML []byte) (buildingID ogame.ID, buildingCountdown int64, researchID ogame.ID, researchCountdown int64, lfBuildingID ogame.ID, lfBuildingCountdown int64, lfTechID ogame.ID, lfTechCountdown int64) {
return ExtractConstructions(pageHTML, clockwork.NewRealClock())
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/extractor/v7/extracts.go
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ func extractResourcesDetails(pageHTML []byte) (out ogame.ResourcesDetails, err e
return
}

func ExtractConstructions(pageHTML []byte, clock clockwork.Clock) (buildingID ogame.ID, buildingCountdown int64, researchID ogame.ID, researchCountdown int64, lfBuildingID ogame.ID, lfBuildingCountdown int64) {
func ExtractConstructions(pageHTML []byte, clock clockwork.Clock) (buildingID ogame.ID, buildingCountdown int64, researchID ogame.ID, researchCountdown int64, lfBuildingID ogame.ID, lfBuildingCountdown int64, lfTechID ogame.ID, lfTechCountdown int64) {
buildingCountdownMatch := regexp.MustCompile(`var restTimebuilding = (\d+) -`).FindSubmatch(pageHTML)
if len(buildingCountdownMatch) > 0 {
buildingCountdown = int64(utils.ToInt(buildingCountdownMatch[1])) - clock.Now().Unix()
Expand Down
13 changes: 12 additions & 1 deletion pkg/extractor/v9/extractor.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ func (e *Extractor) ExtractResourcesDetailsFromFullPageFromDoc(doc *goquery.Docu
}

// ExtractConstructions ...
func (e *Extractor) ExtractConstructions(pageHTML []byte) (buildingID ogame.ID, buildingCountdown int64, researchID ogame.ID, researchCountdown int64, lfBuildingID ogame.ID, lfBuildingCountdown int64) {
func (e *Extractor) ExtractConstructions(pageHTML []byte) (buildingID ogame.ID, buildingCountdown int64, researchID ogame.ID, researchCountdown int64, lfBuildingID ogame.ID, lfBuildingCountdown int64, lfTechID ogame.ID, lfTechCountdown int64) {
return ExtractConstructions(pageHTML, clockwork.NewRealClock())
}

Expand All @@ -101,3 +101,14 @@ func (e *Extractor) ExtractLfBuildings(pageHTML []byte) (ogame.LfBuildings, erro
func (e *Extractor) ExtractLfBuildingsFromDoc(doc *goquery.Document) (ogame.LfBuildings, error) {
return extractLfBuildingsFromDoc(doc)
}

// ExtractLfTechs ...
func (e *Extractor) ExtractLfTechs(pageHTML []byte) (ogame.LfTechs, error) {
doc, _ := goquery.NewDocumentFromReader(bytes.NewReader(pageHTML))
return e.ExtractLfTechsFromDoc(doc)
}

// ExtractLfTechsFromDoc ...
func (e *Extractor) ExtractLfTechsFromDoc(doc *goquery.Document) (ogame.LfTechs, error) {
return extractLfTechsFromDoc(doc)
}
189 changes: 140 additions & 49 deletions pkg/extractor/v9/extracts.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ import (

func ExtractConstructions(pageHTML []byte, clock clockwork.Clock) (buildingID ogame.ID, buildingCountdown int64,
researchID ogame.ID, researchCountdown int64,
lfBuildingID ogame.ID, lfBuildingCountdown int64) {
lfBuildingID ogame.ID, lfBuildingCountdown int64,
lfTechID ogame.ID, lfTechCountdown int64) {
buildingCountdownMatch := regexp.MustCompile(`var restTimebuilding = (\d+) -`).FindSubmatch(pageHTML)
if len(buildingCountdownMatch) > 0 {
buildingCountdown = int64(utils.ToInt(buildingCountdownMatch[1])) - clock.Now().Unix()
Expand All @@ -37,6 +38,12 @@ func ExtractConstructions(pageHTML []byte, clock clockwork.Clock) (buildingID og
lfBuildingIDInt := utils.ToInt(regexp.MustCompile(`onclick="cancellfbuilding\((\d+),`).FindSubmatch(pageHTML)[1])
lfBuildingID = ogame.ID(lfBuildingIDInt)
}
lfTechCountdownMatch := regexp.MustCompile(`var restTimelfresearch = (\d+) -`).FindSubmatch(pageHTML)
if len(lfTechCountdownMatch) > 0 {
lfTechCountdown = int64(utils.ToInt(lfTechCountdownMatch[1])) - clock.Now().Unix()
lfTechIDInt := utils.ToInt(regexp.MustCompile(`onclick="cancellfresearch\((\d+),`).FindSubmatch(pageHTML)[1])
lfTechID = ogame.ID(lfTechIDInt)
}
return
}

Expand Down Expand Up @@ -567,62 +574,146 @@ func extractLfBuildingsFromDoc(doc *goquery.Document) (ogame.LfBuildings, error)
res := ogame.LfBuildings{}
if doc.Find("#lifeform a div").HasClass("lifeform1") {
res.Humans = true
res.ResidentialSector = GetNbr(doc, "lifeformTech11101")
res.BiosphereFarm = GetNbr(doc, "lifeformTech11102")
res.ResearchCentre = GetNbr(doc, "lifeformTech11103")
res.AcademyOfSciences = GetNbr(doc, "lifeformTech11104")
res.NeuroCalibrationCentre = GetNbr(doc, "lifeformTech11105")
res.HighEnergySmelting = GetNbr(doc, "lifeformTech11106")
res.FoodSilo = GetNbr(doc, "lifeformTech11107")
res.FusionPoweredProduction = GetNbr(doc, "lifeformTech11108")
res.Skyscraper = GetNbr(doc, "lifeformTech11109")
res.BiotechLab = GetNbr(doc, "lifeformTech11110")
res.Metropolis = GetNbr(doc, "lifeformTech11111")
res.PlanetaryShield = GetNbr(doc, "lifeformTech11112")

} else if doc.Find("#lifeform a div").HasClass("lifeform2") {
res.Rocktal = true
res.MeditationEnclave = GetNbr(doc, "lifeformTech12101")
res.CrystalFarm = GetNbr(doc, "lifeformTech12102")
res.RuneTechnologium = GetNbr(doc, "lifeformTech12103")
res.RuneForge = GetNbr(doc, "lifeformTech12104")
res.Oriktorium = GetNbr(doc, "lifeformTech12105")
res.MagmaForge = GetNbr(doc, "lifeformTech12106")
res.DisruptionChamber = GetNbr(doc, "lifeformTech12107")
res.Megalith = GetNbr(doc, "lifeformTech12108")
res.CrystalRefinery = GetNbr(doc, "lifeformTech12109")
res.DeuteriumSynthesiser = GetNbr(doc, "lifeformTech12110")
res.MineralResearchCentre = GetNbr(doc, "lifeformTech12111")
res.MetalRecyclingPlant = GetNbr(doc, "lifeformTech12112")

} else if doc.Find("#lifeform a div").HasClass("lifeform3") {
res.Mechas = true
res.AssemblyLine = GetNbr(doc, "lifeformTech13101")
res.FusionCellFactory = GetNbr(doc, "lifeformTech13102")
res.RoboticsResearchCentre = GetNbr(doc, "lifeformTech13103")
res.UpdateNetwork = GetNbr(doc, "lifeformTech12304")
res.QuantumComputerCentre = GetNbr(doc, "lifeformTech13105")
res.AutomatisedAssemblyCentre = GetNbr(doc, "lifeformTech13106")
res.HighPerformanceTransformer = GetNbr(doc, "lifeformTech13107")
res.MicrochipAssemblyLine = GetNbr(doc, "lifeformTech13108")
res.ProductionAssemblyHall = GetNbr(doc, "lifeformTech13109")
res.HighPerformanceSynthesiser = GetNbr(doc, "lifeformTech13110")
res.ChipMassProduction = GetNbr(doc, "lifeformTech13111")
res.NanoRepairBots = GetNbr(doc, "lifeformTech13112")

} else if doc.Find("#lifeform a div").HasClass("lifeform4") {
res.Kaelesh = true
res.Sanctuary = GetNbr(doc, "lifeformTech14101")
res.AntimatterCondenser = GetNbr(doc, "lifeformTech14102")
res.VortexChamber = GetNbr(doc, "lifeformTech14103")
res.HallsOfRealisation = GetNbr(doc, "lifeformTech14104")
res.ForumOfTranscendence = GetNbr(doc, "lifeformTech14105")
res.AntimatterConvector = GetNbr(doc, "lifeformTech14106")
res.CloningLaboratory = GetNbr(doc, "lifeformTech14107")
res.ChrysalisAccelerator = GetNbr(doc, "lifeformTech14108")
res.BioModifier = GetNbr(doc, "lifeformTech14109")
res.PsionicModulator = GetNbr(doc, "lifeformTech14110")
res.ShipManufacturingHall = GetNbr(doc, "lifeformTech14111")
res.SupraRefractor = GetNbr(doc, "lifeformTech14112")

} else {
res.None = true
}
res.ResidentialSector = GetNbr(doc, "lifeformTech11101")
res.BiosphereFarm = GetNbr(doc, "lifeformTech11102")
res.ResearchCentre = GetNbr(doc, "lifeformTech11103")
res.AcademyOfSciences = GetNbr(doc, "lifeformTech11104")
res.NeuroCalibrationCentre = GetNbr(doc, "lifeformTech11105")
res.HighEnergySmelting = GetNbr(doc, "lifeformTech11106")
res.FoodSilo = GetNbr(doc, "lifeformTech11107")
res.FusionPoweredProduction = GetNbr(doc, "lifeformTech11108")
res.Skyscraper = GetNbr(doc, "lifeformTech11109")
res.BiotechLab = GetNbr(doc, "lifeformTech11110")
res.Metropolis = GetNbr(doc, "lifeformTech11111")
res.PlanetaryShield = GetNbr(doc, "lifeformTech11112")
res.MeditationEnclave = GetNbr(doc, "lifeformTech12101")
res.CrystalFarm = GetNbr(doc, "lifeformTech12102")
res.RuneTechnologium = GetNbr(doc, "lifeformTech12103")
res.RuneForge = GetNbr(doc, "lifeformTech12104")
res.Oriktorium = GetNbr(doc, "lifeformTech12105")
res.MagmaForge = GetNbr(doc, "lifeformTech12106")
res.DisruptionChamber = GetNbr(doc, "lifeformTech12107")
res.Megalith = GetNbr(doc, "lifeformTech12108")
res.CrystalRefinery = GetNbr(doc, "lifeformTech12109")
res.DeuteriumSynthesiser = GetNbr(doc, "lifeformTech12110")
res.MineralResearchCentre = GetNbr(doc, "lifeformTech12111")
res.MetalRecyclingPlant = GetNbr(doc, "lifeformTech12112")
res.AssemblyLine = GetNbr(doc, "lifeformTech13101")
res.FusionCellFactory = GetNbr(doc, "lifeformTech13102")
res.RoboticsResearchCentre = GetNbr(doc, "lifeformTech13103")
res.UpdateNetwork = GetNbr(doc, "lifeformTech12304")
res.QuantumComputerCentre = GetNbr(doc, "lifeformTech13105")
res.AutomatisedAssemblyCentre = GetNbr(doc, "lifeformTech13106")
res.HighPerformanceTransformer = GetNbr(doc, "lifeformTech13107")
res.MicrochipAssemblyLine = GetNbr(doc, "lifeformTech13108")
res.ProductionAssemblyHall = GetNbr(doc, "lifeformTech13109")
res.HighPerformanceSynthesiser = GetNbr(doc, "lifeformTech13110")
res.ChipMassProduction = GetNbr(doc, "lifeformTech13111")
res.NanoRepairBots = GetNbr(doc, "lifeformTech13112")
res.Sanctuary = GetNbr(doc, "lifeformTech14101")
res.AntimatterCondenser = GetNbr(doc, "lifeformTech14102")
res.VortexChamber = GetNbr(doc, "lifeformTech14103")
res.HallsOfRealisation = GetNbr(doc, "lifeformTech14104")
res.ForumOfTranscendence = GetNbr(doc, "lifeformTech14105")
res.AntimatterConvector = GetNbr(doc, "lifeformTech14106")
res.CloningLaboratory = GetNbr(doc, "lifeformTech14107")
res.ChrysalisAccelerator = GetNbr(doc, "lifeformTech14108")
res.BioModifier = GetNbr(doc, "lifeformTech14109")
res.PsionicModulator = GetNbr(doc, "lifeformTech14110")
res.ShipManufacturingHall = GetNbr(doc, "lifeformTech14111")
res.SupraRefractor = GetNbr(doc, "lifeformTech14112")
return res, nil
}


func extractLfTechsFromDoc(doc *goquery.Document) (ogame.LfTechs, error) {
res := ogame.LfTechs{}
// Can have any lifeform techs whatever current planet lifeform is, so take everything
res.IntergalacticEnvoys = GetNbr(doc, "lifeformTech11201")
res.HighPerformanceExtractors = GetNbr(doc, "lifeformTech11202")
res.FusionDrives = GetNbr(doc, "lifeformTech11203")
res.StealthFieldGenerator = GetNbr(doc, "lifeformTech11204")
res.OrbitalDen = GetNbr(doc, "lifeformTech11205")
res.ResearchAI = GetNbr(doc, "lifeformTech11206")
res.HighPerformanceTerraformer = GetNbr(doc, "lifeformTech11207")
res.EnhancedProductionTechnologies = GetNbr(doc, "lifeformTech11208")
res.LightFighterMkII = GetNbr(doc, "lifeformTech11209")
res.CruiserMkII = GetNbr(doc, "lifeformTech11210")
res.ImprovedLabTechnology = GetNbr(doc, "lifeformTech11211")
res.PlasmaTerraformer = GetNbr(doc, "lifeformTech11112")
res.LowTemperatureDrives = GetNbr(doc, "lifeformTech11213")
res.BomberMkII = GetNbr(doc, "lifeformTech11214")
res.DestroyerMkII = GetNbr(doc, "lifeformTech11215")
res.BattlecruiserMkII = GetNbr(doc, "lifeformTech11216")
res.RobotAssistants = GetNbr(doc, "lifeformTech11217")
res.Supercomputer = GetNbr(doc, "lifeformTech11218")
res.VolcanicBatteries = GetNbr(doc, "lifeformTech12201")
res.AcousticScanning = GetNbr(doc, "lifeformTech12202")
res.HighEnergyPumpSystems = GetNbr(doc, "lifeformTech12203")
res.CargoHoldExpansionCivilianShips = GetNbr(doc, "lifeformTech12204")
res.MagmaPoweredProduction = GetNbr(doc, "lifeformTech12205")
res.GeothermalPowerPlants = GetNbr(doc, "lifeformTech12206")
res.DepthSounding = GetNbr(doc, "lifeformTech12207")
res.IonCrystalEnhancementHeavyFighter = GetNbr(doc, "lifeformTech12208")
res.ImprovedStellarator = GetNbr(doc, "lifeformTech12209")
res.HardenedDiamondDrillHeads = GetNbr(doc, "lifeformTech12210")
res.SeismicMiningTechnology = GetNbr(doc, "lifeformTech12211")
res.MagmaPoweredPumpSystems = GetNbr(doc, "lifeformTech12212")
res.IonCrystalModules = GetNbr(doc, "lifeformTech12213")
res.OptimisedSiloConstructionMethod = GetNbr(doc, "lifeformTech12214")
res.DiamondEnergyTransmitter = GetNbr(doc, "lifeformTech12215")
res.ObsidianShieldReinforcement = GetNbr(doc, "lifeformTech12216")
res.RuneShields = GetNbr(doc, "lifeformTech12217")
res.RocktalCollectorEnhancement = GetNbr(doc, "lifeformTech12218")
res.CatalyserTechnology = GetNbr(doc, "lifeformTech13201")
res.PlasmaDrive = GetNbr(doc, "lifeformTech13202")
res.EfficiencyModule = GetNbr(doc, "lifeformTech13203")
res.DepotAI = GetNbr(doc, "lifeformTech13204")
res.GeneralOverhaulLightFighter = GetNbr(doc, "lifeformTech13205")
res.AutomatedTransportLines = GetNbr(doc, "lifeformTech13206")
res.ImprovedDroneAI = GetNbr(doc, "lifeformTech13207")
res.ExperimentalRecyclingTechnology = GetNbr(doc, "lifeformTech13208")
res.GeneralOverhaulCruiser = GetNbr(doc, "lifeformTech13209")
res.SlingshotAutopilot = GetNbr(doc, "lifeformTech13210")
res.HighTemperatureSuperconductors = GetNbr(doc, "lifeformTech13211")
res.GeneralOverhaulBattleship = GetNbr(doc, "lifeformTech13212")
res.ArtificialSwarmIntelligence = GetNbr(doc, "lifeformTech13213")
res.GeneralOverhaulBattlecruiser = GetNbr(doc, "lifeformTech13214")
res.GeneralOverhaulBomber = GetNbr(doc, "lifeformTech13215")
res.GeneralOverhaulDestroyer = GetNbr(doc, "lifeformTech13216")
res.ExperimentalWeaponsTechnology = GetNbr(doc, "lifeformTech13217")
res.MechanGeneralEnhancement = GetNbr(doc, "lifeformTech13218")
res.HeatRecovery = GetNbr(doc, "lifeformTech14201")
res.SulphideProcess = GetNbr(doc, "lifeformTech14202")
res.PsionicNetwork = GetNbr(doc, "lifeformTech14203")
res.TelekineticTractorBeam = GetNbr(doc, "lifeformTech14204")
res.EnhancedSensorTechnology = GetNbr(doc, "lifeformTech14205")
res.NeuromodalCompressor = GetNbr(doc, "lifeformTech14206")
res.NeuroInterface = GetNbr(doc, "lifeformTech14207")
res.InterplanetaryAnalysisNetwork = GetNbr(doc, "lifeformTech14208")
res.OverclockingHeavyFighter = GetNbr(doc, "lifeformTech14209")
res.TelekineticDrive = GetNbr(doc, "lifeformTech14210")
res.SixthSense = GetNbr(doc, "lifeformTech14211")
res.Psychoharmoniser = GetNbr(doc, "lifeformTech14212")
res.EfficientSwarmIntelligence = GetNbr(doc, "lifeformTech14213")
res.OverclockingLargeCargo = GetNbr(doc, "lifeformTech14214")
res.GravitationSensors = GetNbr(doc, "lifeformTech14215")
res.OverclockingBattleship = GetNbr(doc, "lifeformTech14216")
res.PsionicShieldMatrix = GetNbr(doc, "lifeformTech14217")
res.KaeleshDiscovererEnhancement = GetNbr(doc, "lifeformTech14218")

return res, nil
}
Loading

0 comments on commit 9260bba

Please sign in to comment.