From 0ab3147bdd7d9e9b1d64452cf59ba683b34cb3c4 Mon Sep 17 00:00:00 2001 From: Ilia Denisov Date: Sat, 14 Feb 2026 13:11:35 +0200 Subject: [PATCH] fix: ship group zero tech levels --- internal/controller/ship_group.go | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/internal/controller/ship_group.go b/internal/controller/ship_group.go index 1bea4c7..7c6b91c 100644 --- a/internal/controller/ship_group.go +++ b/internal/controller/ship_group.go @@ -519,16 +519,33 @@ TODO: Точность тех. уровней корабля а не округлённые уровни технологий. */ func (c *Cache) unsafeCreateShips(ri int, classID uuid.UUID, planet uint, quantity uint) { + st := c.MustShipType(ri, classID) + // TODO: test new group levels + level := func(t game.Tech) float64 { + if t == game.TechDrive && st.DriveBlockMass() > 0 { + return c.g.Race[ri].TechLevel(game.TechDrive) + } + if t == game.TechWeapons && st.WeaponsBlockMass() > 0 { + return c.g.Race[ri].TechLevel(game.TechDrive) + } + if t == game.TechShields && st.ShieldsBlockMass() > 0 { + return c.g.Race[ri].TechLevel(game.TechDrive) + } + if t == game.TechCargo && st.CargoBlockMass() > 0 { + return c.g.Race[ri].TechLevel(game.TechDrive) + } + return 0 + } c.appendShipGroup(ri, &game.ShipGroup{ OwnerID: c.g.Race[ri].ID, TypeID: classID, Destination: planet, Number: uint(quantity), Tech: map[game.Tech]game.Float{ - game.TechDrive: game.F(c.g.Race[ri].TechLevel(game.TechDrive)), - game.TechWeapons: game.F(c.g.Race[ri].TechLevel(game.TechWeapons)), - game.TechShields: game.F(c.g.Race[ri].TechLevel(game.TechShields)), - game.TechCargo: game.F(c.g.Race[ri].TechLevel(game.TechCargo)), + game.TechDrive: game.F(level(game.TechDrive)), + game.TechWeapons: game.F(level(game.TechWeapons)), + game.TechShields: game.F(level(game.TechShields)), + game.TechCargo: game.F(level(game.TechCargo)), }, }) }