Эх сурвалжийг харах

d02 Переделка под правильную структуру

SVI 3 жил өмнө
parent
commit
1e47ef7b64
35 өөрчлөгдсөн 412 нэмэгдсэн , 594 устгасан
  1. 15 15
      server/gui/win_main/win_main.go
  2. 0 2
      server/serv_bots/serv_bots.go
  3. 37 49
      server/serv_bots/warbot/angar/angar.go
  4. 14 20
      server/serv_bots/warbot/angar/angar_attack/angar_attack.go
  5. 7 12
      server/serv_bots/warbot/angar/angarnet/angarnet.go
  6. 26 30
      server/serv_bots/warbot/angar/base/arsenal/arsenal.go
  7. 5 4
      server/serv_bots/warbot/angar/base/arsenal/arsenalnet/arsenalnet.go
  8. 12 24
      server/serv_bots/warbot/angar/base/bank/bank.go
  9. 5 4
      server/serv_bots/warbot/angar/base/bank/banknet/banknet.go
  10. 53 77
      server/serv_bots/warbot/angar/base/base.go
  11. 6 5
      server/serv_bots/warbot/angar/base/basenet/basenet.go
  12. 13 18
      server/serv_bots/warbot/angar/base/market/market.go
  13. 5 4
      server/serv_bots/warbot/angar/base/market/marketnet/marketnet.go
  14. 18 29
      server/serv_bots/warbot/angar/base/mine/mine.go
  15. 5 12
      server/serv_bots/warbot/angar/base/mine/minenet/minenet.go
  16. 21 28
      server/serv_bots/warbot/angar/base/polygon/polygon.go
  17. 5 4
      server/serv_bots/warbot/angar/base/polygon/polygonnet/polygonnet.go
  18. 2 8
      server/serv_bots/warbot/angar/battle/battle.go
  19. 8 14
      server/serv_bots/warbot/angar/battle/battle_register/battle_register.go
  20. 8 14
      server/serv_bots/warbot/angar/battle/battle_wait/battle_wait.go
  21. 12 18
      server/serv_bots/warbot/angar/battle/battle_worker/battle_worker.go
  22. 7 12
      server/serv_bots/warbot/angar/battle/battle_worker/battleon/battleon.go
  23. 5 14
      server/serv_bots/warbot/angar/battle/battlenet/battlenet.go
  24. 11 17
      server/serv_bots/warbot/angar/convoy/convoy.go
  25. 5 14
      server/serv_bots/warbot/angar/convoy/convoynet/convoynet.go
  26. 2 2
      server/serv_bots/warbot/angar/division/divwar/divwar.go
  27. 13 17
      server/serv_bots/warbot/angar/fuel/fuel.go
  28. 10 17
      server/serv_bots/warbot/angar/missions/missions.go
  29. 5 4
      server/serv_bots/warbot/angar/missions/missionsnet/missionsnet.go
  30. 8 8
      server/serv_bots/warbot/angar/netstat/netstat.go
  31. 6 6
      server/serv_bots/warbot/tank/tankstat/static_param/static_param.go
  32. 4 18
      server/serv_bots/warbot/warbot.go
  33. 6 3
      server/serv_bots/warbot/warbot_net/bot_net_conn/bot_net_conn.go
  34. 25 54
      server/serv_bots/warbot/warbot_net/bot_net_login/bot_net_login.go
  35. 28 17
      server/serv_bots/warbot/warbot_net/warbot_net.go

+ 15 - 15
server/gui/win_main/win_main.go

@@ -232,11 +232,11 @@ func (sf *WinMain) showStat() {
 			continue
 		}
 		{ // Левый фрейм статы
-			sf.lblFuel.Text = fmt.Sprint(bot.Angar().Fuel().Get())
+			sf.lblFuel.Text = fmt.Sprint(bot.Angar().Fuel().Val())
 			sf.lblFuel.Refresh()
-			sf.lblGold.Text = fmt.Sprint(bot.Angar().Gold().Get())
+			sf.lblGold.Text = fmt.Sprint(bot.Angar().Gold().Val())
 			sf.lblGold.Refresh()
-			strSilver := fmt.Sprint(bot.Angar().SilverAll().Get())
+			strSilver := fmt.Sprint(bot.Angar().SilverAll().Val())
 			strSlv := ""
 			i := 0
 			for i0 := len(strSilver) - 1; i0 >= 0; i0-- {
@@ -251,29 +251,29 @@ func (sf *WinMain) showStat() {
 			}
 			sf.lblSilver.Text = strSlv
 			sf.lblSilver.Refresh()
-			sf.lblGlory.Text = fmt.Sprint(bot.Angar().Convoy().Glory().Get())
+			sf.lblGlory.Text = fmt.Sprint(bot.Angar().Convoy().Glory().Val())
 			sf.lblGlory.Refresh()
-			sf.lblRuda.Text = fmt.Sprint(bot.Angar().Base().Mine().Ruda().Get())
+			sf.lblRuda.Text = fmt.Sprint(bot.Angar().Base().Mine().Ruda().Val())
 			sf.lblRuda.Refresh()
-			sf.lblFerrum.Text = fmt.Sprint(bot.Angar().Base().Mine().Ferrum().Get())
+			sf.lblFerrum.Text = fmt.Sprint(bot.Angar().Base().Mine().Ferrum().Val())
 			sf.lblFerrum.Refresh()
-			sf.lblSteel.Text = fmt.Sprint(bot.Angar().Base().Mine().Steel().Get())
+			sf.lblSteel.Text = fmt.Sprint(bot.Angar().Base().Mine().Steel().Val())
 			sf.lblSteel.Refresh()
-			sf.lblPlumbum.Text = fmt.Sprint(bot.Angar().Base().Mine().Plumbum().Get())
+			sf.lblPlumbum.Text = fmt.Sprint(bot.Angar().Base().Mine().Plumbum().Val())
 			sf.lblPlumbum.Refresh()
 		}
 		{ // Правый фрейм статы
-			sf.lblAtack.Text = fmt.Sprint(bot.Tank().TankStat().Attack().Get())
+			sf.lblAtack.Text = fmt.Sprint(bot.Tank().TankStat().Attack().Val())
 			sf.lblAtack.Refresh()
-			sf.lblArmor.Text = fmt.Sprint(bot.Tank().TankStat().Armor().Get())
+			sf.lblArmor.Text = fmt.Sprint(bot.Tank().TankStat().Armor().Val())
 			sf.lblArmor.Refresh()
-			sf.lblFyne.Text = fmt.Sprint(bot.Tank().TankStat().Fyne().Get())
+			sf.lblFyne.Text = fmt.Sprint(bot.Tank().TankStat().Fyne().Val())
 			sf.lblFyne.Refresh()
-			sf.lblHard.Text = fmt.Sprint(bot.Tank().TankStat().Hard().Get())
+			sf.lblHard.Text = fmt.Sprint(bot.Tank().TankStat().Hard().Val())
 			sf.lblHard.Refresh()
-			sf.lblPower.Text = fmt.Sprint(bot.Tank().TankStat().Power().Get())
+			sf.lblPower.Text = fmt.Sprint(bot.Tank().TankStat().Power().Val())
 			sf.lblPower.Refresh()
-			strForce := fmt.Sprintf("%v (+%v)", bot.Tank().TankStat().Force().Name(), bot.Tank().TankStat().Force().Get())
+			strForce := fmt.Sprintf("%v (+%v)", bot.Tank().TankStat().Force().Name(), bot.Tank().TankStat().Force().Val())
 			sf.lblForce.SetText(strForce)
 		}
 		{ // Вкладка базы
@@ -283,7 +283,7 @@ func (sf *WinMain) showStat() {
 			polyTime := bot.Angar().Base().Polygon().CountDown().String()
 			sf.lblPolygonTime.SetText("Время: " + polyTime)
 			// polyMode := bot.Angar().Base().Polygon().ModeCurrent().Work()
-			strForce := fmt.Sprintf("%v (+%v)", bot.Tank().TankStat().Force().Name(), bot.Tank().TankStat().Force().Get())
+			strForce := fmt.Sprintf("%v (+%v)", bot.Tank().TankStat().Force().Name(), bot.Tank().TankStat().Force().Val())
 			sf.lblPolygonMode.SetText("Режим: " + strForce)
 
 			mineTime := bot.Angar().Base().Mine().CountDown().String()

+ 0 - 2
server/serv_bots/serv_bots.go

@@ -72,7 +72,6 @@ func (sf *ServBots) Load() error {
 		if err != nil {
 			return fmt.Errorf("ServBots.load(): in create bot %q, err=\n\t%w", name, err)
 		}
-		bot.Make()
 		if bot.IsAutoGame() {
 			go bot.Run()
 		}
@@ -87,7 +86,6 @@ func (sf *ServBots) BotStart(name string) error {
 	if bot == nil {
 		return fmt.Errorf("ServBots.BotStart(): bot(%v) not found", name)
 	}
-	bot.Make()
 	err := bot.Run()
 	if err != nil {
 		return fmt.Errorf("ServBots.BotStart(): in run bot(%v), err=\n\t%w", name, err)

+ 37 - 49
server/serv_bots/warbot/angar/angar.go

@@ -4,7 +4,6 @@ import (
 	"fmt"
 	"sync"
 
-	// "log"
 	"strconv"
 	"strings"
 
@@ -20,6 +19,8 @@ import (
 	"wartank/server/serv_bots/warbot/angar/missions"
 	"wartank/server/serv_bots/warbot/angar/netstat"
 	"wartank/server/serv_bots/warbot/tank/tankstat/static_param"
+
+	"github.com/sirupsen/logrus"
 )
 
 /*
@@ -32,7 +33,6 @@ type Angar struct {
 	net     *angarnet.AngarNet
 	netKill *angar_attack.AngarAttack
 
-	server types.IServer
 	bot    types.IBot
 	convoy *convoy.Convoy
 	battle *battle.Battle
@@ -55,12 +55,13 @@ type Angar struct {
 
 // NewAngar -- возвращает новый *Angar
 func NewAngar(bot types.IBot) (*Angar, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewAngar(): IBot == nil")
+	section, err := section.NewSection(bot, `<title>Ангар</title>`)
+	if err != nil {
+		return nil, fmt.Errorf("NewAngar(): in create ISection, err=\n\t%w", err)
 	}
 
 	sf := &Angar{
-		server:   bot.Server(),
+		Section:  section,
 		bot:      bot,
 		gold:     static_param.NewStaticParam("gold"),
 		level:    static_param.NewStaticParam("level"),
@@ -70,84 +71,67 @@ func NewAngar(bot types.IBot) (*Angar, error) {
 		silverAll:    static_param.NewStaticParam("silver_all"),
 		silverOnline: static_param.NewStaticParam("silver_online"),
 	}
-	return sf, nil
-}
-
-// Одноразовый вызов для создания компонентов при запуске в работу
-func (sf *Angar) Make() error {
-	sf.block.Lock()
-	defer sf.block.Unlock()
-	var err error
-	{ // Section
-		sf.Section, err = section.NewSection(sf.bot, `<title>Ангар</title>`)
-		if err != nil {
-			return fmt.Errorf("Angar.make(): in create *Section, err=\n\t%w", err)
-		}
-	}
 	{ // Сеть
-		sf.net, err = angarnet.NewAngarNet(sf.bot)
+		sf.net, err = angarnet.NewAngarNet(sf)
 		if err != nil {
-			return fmt.Errorf("Angar.make(): in create <AngarNet>, err=\n\t%w", err)
+			return nil, fmt.Errorf("NewAngar(): in create <AngarNet>, err=\n\t%w", err)
 		}
 	}
 	{ // Сеть атаки
-		sf.netKill, err = angar_attack.NewAngarAttack(sf.bot)
+		sf.netKill, err = angar_attack.NewAngarAttack(sf)
 		if err != nil {
-			return fmt.Errorf("Angar.make(): in create <AngarAttackNet>, err=\n\t%w", err)
+			return nil, fmt.Errorf("NewAngar(): in create <AngarAttackNet>, err=\n\t%w", err)
 		}
 	}
 	{ // Статистика
 		sf.stat, err = netstat.NewNetStat(sf.bot)
 		if err != nil {
-			return fmt.Errorf("Angar.make(): in create NetResource, err=\n\t%w", err)
+			return nil, fmt.Errorf("NewAngar(): in create NetResource, err=\n\t%w", err)
 		}
 	}
 	{ // Convoy
 		sf.convoy, err = convoy.NewConvoy(sf.bot)
 		if err != nil {
-			return fmt.Errorf("Angar.make(): in create IConvoy, err=\n\t%w", err)
+			return nil, fmt.Errorf("NewAngar(): in create IConvoy, err=\n\t%w", err)
 		}
 	}
 	{ // Сражение
 		sf.battle, err = battle.NewBattle(sf.bot)
 		if err != nil {
-			return fmt.Errorf("Angar.make(): in create IBattle, err=\n\t%w", err)
+			return nil, fmt.Errorf("NewAngar(): in create IBattle, err=\n\t%w", err)
 		}
 	}
 	{ // Битва мастеров
 		sf.batMas, err = batmas.NewBatMas(sf.bot)
 		if err != nil {
-			return fmt.Errorf("Angar.make(): in create *BatMas, err=\n\t%w", err)
+			return nil, fmt.Errorf("NewAngar(): in create *BatMas, err=\n\t%w", err)
 		}
 		// go sf.batMas.Run()
 	}
 	{ // База
-		sf.base, err = base.NewBase(sf.bot)
+		sf.base, err = base.NewBase(sf)
 		if err != nil {
-			return fmt.Errorf("Angar.make(): in make IBase, err=\n\t%w", err)
+			return nil, fmt.Errorf("NewAngar(): in make IBase, err=\n\t%w", err)
 		}
 	}
 	{ // Миссии
 		sf.award, err = missions.NewMissions(sf.bot)
 		if err != nil {
-			return fmt.Errorf("Angar.make(): in make *Missions, err=\n\t%w", err)
+			return nil, fmt.Errorf("NewAngar(): in make *Missions, err=\n\t%w", err)
 		}
 	}
 	{ // Топливо
-		sf.fuel, err = fuel.NewFuel(sf.bot)
+		sf.fuel, err = fuel.NewFuel(sf)
 		if err != nil {
-			return fmt.Errorf("Angar.make(): in make *Missions, err=\n\t%w", err)
+			return nil, fmt.Errorf("NewAngar(): in make *Missions, err=\n\t%w", err)
 		}
 	}
-	return nil
+	return sf, nil
 }
 
 // запускает обработку ангара
 func (sf *Angar) Run() error {
 	{ // Запуск компонентов
-		if err := sf.net.Run(); err != nil {
-			return fmt.Errorf("Angar.Run(): при пуске сетевой секции ангара, err=\n\t%w", err)
-		}
 		if err := sf.netKill.Run(); err != nil {
 			return fmt.Errorf("Angar.Run(): при пуске сетевой секции опыт за топливо, err=\n\t%w", err)
 		}
@@ -174,7 +158,7 @@ func (sf *Angar) Run() error {
 		count := 0
 		for {
 			select {
-			case <-sf.server.Done(): // Отмена контекста
+			case <-sf.bot.Ctx().Done(): // Отмена контекста
 				sf.CountDown().Stop()
 				return
 			case <-sf.CountDown().ChanSig(): // Метка времени
@@ -187,7 +171,11 @@ func (sf *Angar) Run() error {
 				default:
 					count--
 				}
-				sf.CountDown().Set(60)
+				if err := sf.Section.SetCountDown(60); err != nil {
+					sf.CancelZone()
+					logrus.WithError(err).Errorln("Angar.Run(): in update ICountTime")
+					return
+				}
 			}
 		}
 	}()
@@ -256,20 +244,20 @@ func (sf *Angar) SilverOnline() types.IStatParam {
 
 // SilverUpdate -- на основе фактического серебра -- обновляет вырабатанное серебро
 func (sf *Angar) SilverUpdate(silverFact int) {
-	if sf.silverAll.Get() == 0 { // Если запуск
-		sf.silverAll.Set(silverFact)
+	if sf.silverAll.Val() == 0 { // Если запуск
+		sf.silverAll.SetVal(silverFact)
 		return
 	}
-	if sf.silverAll.Get() > silverFact { // Если потрачего серебро
-		sf.silverAll.Set(silverFact)
+	if sf.silverAll.Val() > silverFact { // Если потрачего серебро
+		sf.silverAll.SetVal(silverFact)
 		return
 	}
-	if sf.silverAll.Get() < silverFact { // Если заработано
-		so := sf.silverOnline.Get()
-		sd := silverFact - sf.silverAll.Get()
-		sf.silverOnline.Set(so + sd)
+	if sf.silverAll.Val() < silverFact { // Если заработано
+		so := sf.silverOnline.Val()
+		sd := silverFact - sf.silverAll.Val()
+		sf.silverOnline.SetVal(so + sd)
 	}
-	sf.silverAll.Set(silverFact)
+	sf.silverAll.SetVal(silverFact)
 }
 
 // Base -- возвращает базу
@@ -320,7 +308,7 @@ func (sf *Angar) findSilver() {
 		// log._rintf("ERRO AngarNet.findSilver(): silver(%v) not number, err=\n\t%v\n", strSilver, err)
 		return
 	}
-	sf.silverAll.Set(iSilver)
+	sf.silverAll.SetVal(iSilver)
 }
 
 // Ищет в теле текста ангара золото
@@ -349,5 +337,5 @@ func (sf *Angar) findGold() {
 		// log._rintf("ERRO AngarNet.findGold(): gold(%v) not number, err=\n\t%v\n", strGold, err)
 		return
 	}
-	sf.bot.Angar().Gold().Set(iGold)
+	sf.bot.Angar().Gold().SetVal(iGold)
 }

+ 14 - 20
server/serv_bots/warbot/angar/angar_attack/angar_attack.go

@@ -1,4 +1,4 @@
-// package angar_attack
+// package angar_attack -- объект боя на топливе
 package angar_attack
 
 import (
@@ -12,32 +12,26 @@ import (
 	"wartank/pkg/types"
 )
 
-/*
-	Объект боя на топливе
-*/
-
 // AngarAttack -- объект боя на топливе
 type AngarAttack struct {
 	*sectionnet.SectionNet
 	angar types.IAngar
-	bot   types.IBot
 }
 
 // NewAngarAttack -- возвращает новый *AngarAttackNet
-func NewAngarAttack(bot types.IBot) (*AngarAttack, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewAngarAttack(): IBot == nil")
+func NewAngarAttack(angar types.IAngar) (*AngarAttack, error) {
+	sectionNet, err := sectionnet.NewSectionNet(angar, "http://wartank.ru/battle")
+	if err != nil {
+		return nil, fmt.Errorf("NewAngarAttack(): in create SectionNet, err=\n\t%w", err)
 	}
-
 	sf := &AngarAttack{
-		angar: bot.Angar(),
-		bot:   bot,
+		SectionNet: sectionNet,
+		angar:      angar,
 	}
 	return sf, nil
 }
 
 func (sf *AngarAttack) Run() error {
-	sf.SectionNet = sectionnet.NewSectionNet(sf.bot, sf.angar, "http://wartank.ru/battle")
 	go sf.run()
 	return nil
 }
@@ -45,7 +39,7 @@ func (sf *AngarAttack) Run() error {
 func (sf *AngarAttack) run() {
 	for {
 		time.Sleep(time.Second * 15) // Минимальный интервал ожттдания прибавки топлива
-		fuel := sf.angar.Fuel().Get()
+		fuel := sf.angar.Fuel().Val()
 		if fuel < 314 { // Минимальная ёмкость бака -- 315
 			continue
 		}
@@ -88,9 +82,9 @@ func (sf *AngarAttack) makeAtack() (lstBattle []string, err error) {
 	if err != nil {
 		return nil, fmt.Errorf("AngarAttack.makeAtack(): in make GET-request to battle, err=\n\t%w", err)
 	}
-	fuel := sf.angar.Fuel().Get()
+	fuel := sf.angar.Fuel().Val()
 	fuel -= 30
-	sf.angar.Fuel().Set(fuel)
+	sf.angar.Fuel().SetVal(fuel)
 	return lstBattle, nil
 }
 
@@ -222,9 +216,9 @@ func (sf *AngarAttack) makeShooting(lstShoot2 []string) error {
 		if err != nil {
 			return fmt.Errorf("AngarAttack.makeShooting(): in Get-response shoot2, err=\n\t%w", err)
 		}
-		fuel := sf.angar.Fuel().Get()
+		fuel := sf.angar.Fuel().Val()
 		fuel -= 30
-		sf.angar.Fuel().Set(fuel)
+		sf.angar.Fuel().SetVal(fuel)
 		return nil
 	}
 	if err := fnShoot2(); err != nil {
@@ -295,9 +289,9 @@ func (sf *AngarAttack) makeShooting(lstShoot2 []string) error {
 		if _, err = sf.Get(linkShoot3); err != nil {
 			return fmt.Errorf("AngarAttack.makeShooting(): in Get-response shoot3, err=\n\t%w", err)
 		}
-		fuel := sf.angar.Fuel().Get()
+		fuel := sf.angar.Fuel().Val()
 		fuel -= 30
-		sf.angar.Fuel().Set(fuel)
+		sf.angar.Fuel().SetVal(fuel)
 		return nil
 	}
 	if err := fnShoot3(); err != nil {

+ 7 - 12
server/serv_bots/warbot/angar/angarnet/angarnet.go

@@ -14,25 +14,20 @@ import (
 // AngarNet -- объект сетевого ангара
 type AngarNet struct {
 	*sectionnet.SectionNet
-	server types.IServer
-	bot    types.IBot
+	angar types.IAngar
 }
 
 // NewAngarNet -- возвращает новый *AngarNet
-func NewAngarNet(bot types.IBot) (*AngarNet, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewAngarNet(): IBot is nil")
+func NewAngarNet(angar types.IAngar) (*AngarNet, error) {
+	sectionNet, err := sectionnet.NewSectionNet(angar, "http://wartank.ru/angar")
+	if err != nil {
+		return nil, fmt.Errorf("NewAngarNet(): in create *SectionNet, err=\n\t%w", err)
 	}
 
 	sf := &AngarNet{
-		server: bot.Server(),
-		bot:    bot,
+		SectionNet: sectionNet,
+		angar:      angar,
 	}
 
 	return sf, nil
 }
-
-func (sf *AngarNet) Run() error {
-	sf.SectionNet = sectionnet.NewSectionNet(sf.bot, sf.bot.Angar(), "http://wartank.ru/angar")
-	return nil
-}

+ 26 - 30
server/serv_bots/warbot/angar/base/arsenal/arsenal.go

@@ -28,37 +28,33 @@ type Arsenal struct {
 }
 
 // NewArsenal -- возвращает новый *Arsenal
-func NewArsenal(bot types.IBot) (*Arsenal, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewArsenal(): IBot == nil")
+func NewArsenal(base types.IBase) (*Arsenal, error) {
+	section, err := section.NewSection(base.Bot(), `<span class="green2">Ремкомплект</span><br/>`)
+	if err != nil {
+		return nil, fmt.Errorf("NewArsenal(): in create ISection, err=\n\t%w", err)
 	}
 
 	sf := &Arsenal{
-		bot:   bot,
-		base:  bot.Angar().Base(),
-		fugas: static_param.NewStaticParam("fugas"),
-		armor: static_param.NewStaticParam("armor"),
-		kumul: static_param.NewStaticParam("kumul"),
-		remka: static_param.NewStaticParam("remka"),
+		Section: section,
+		bot:     base.Bot(),
+		base:    base,
+		fugas:   static_param.NewStaticParam("fugas"),
+		armor:   static_param.NewStaticParam("armor"),
+		kumul:   static_param.NewStaticParam("kumul"),
+		remka:   static_param.NewStaticParam("remka"),
+	}
+	{ // ArsenalNet
+		sf.net, err = arsenalnet.NewArsenalNet(sf)
+		if err != nil {
+			return nil, fmt.Errorf("NewArsenal(): in create NetArsenal, err=\n\t%w", err)
+		}
 	}
 
 	return sf, nil
 }
 
 func (sf *Arsenal) Run() error {
-	var err error
-	{ // ISection
-		sf.Section, err = section.NewSection(sf.bot, `<span class="green2">Ремкомплект</span><br/>`)
-		if err != nil {
-			return fmt.Errorf("Arsenal.Run(): in create *Section, err=\n\t%w", err)
-		}
-	}
-	{ // ArsenalNet
-		sf.net, err = arsenalnet.NewArsenalNet(sf.bot)
-		if err != nil {
-			return fmt.Errorf("Arsenal.Run(): in create NetArsenal, err=\n\t%w", err)
-		}
-	}
+
 	go sf.run()
 	return nil
 }
@@ -129,7 +125,7 @@ func (sf *Arsenal) UpdateArsenal() (err error) {
 		if err != nil {
 			return fmt.Errorf("ArsenalNet.updateArsenal(): fugas(%v) not number, err=\n\t%w", strFugas, err)
 		}
-		sf.Fugas().Set(iFugas)
+		sf.Fugas().SetVal(iFugas)
 	}
 	{ // Найти маркер бронебойного снаряда
 		for _, strArmor := range lstArsenal {
@@ -146,7 +142,7 @@ func (sf *Arsenal) UpdateArsenal() (err error) {
 		if err != nil {
 			return fmt.Errorf("ArsenalNet.updateArsenal(): armor(%v) not number, err=\n\t%w", strArmor, err)
 		}
-		sf.Armor().Set(iArmor)
+		sf.Armor().SetVal(iArmor)
 	}
 	{ // Найти маркер кумулятивного снаряда
 		for _, strKumul := range lstArsenal {
@@ -163,7 +159,7 @@ func (sf *Arsenal) UpdateArsenal() (err error) {
 		if err != nil {
 			return fmt.Errorf("ArsenalNet.updateArsenal(): kumul(%v) not number, err=\n\t%w", strKumul, err)
 		}
-		sf.Kumul().Set(iKumul)
+		sf.Kumul().SetVal(iKumul)
 	}
 	{ // Найти маркер ремкомплекта
 		for ind, strRemka := range lstArsenal {
@@ -180,7 +176,7 @@ func (sf *Arsenal) UpdateArsenal() (err error) {
 		if err != nil {
 			return fmt.Errorf("ArsenalNet.updateArsenal(): remka(%v) not number, err=\n\t%w", strRemka, err)
 		}
-		sf.Remka().Set(iRemka)
+		sf.Remka().SetVal(iRemka)
 	}
 	return nil
 }
@@ -200,16 +196,16 @@ func (sf *Arsenal) makeArsenal() {
 	}
 	// _mt.Println("\tArsenalNet.makeArsenal()")
 	{ // Контроль ремки по времени суток и минимальному количеству
-		iRemka := sf.Remka().Get()
+		iRemka := sf.Remka().Val()
 		if iRemka < 70 {
 			fnMakeRemka()
 			return
 		}
 	}
 	{ // Контроль по числу снарядов. В равных долях без приоритетов
-		iFugas := sf.Fugas().Get()
-		iKumul := sf.Kumul().Get()
-		iArmor := sf.Armor().Get()
+		iFugas := sf.Fugas().Val()
+		iKumul := sf.Kumul().Val()
+		iArmor := sf.Armor().Val()
 
 		typeArmor := "fugas"
 		typeVal := iFugas

+ 5 - 4
server/serv_bots/warbot/angar/base/arsenal/arsenalnet/arsenalnet.go

@@ -17,13 +17,14 @@ type ArsenalNet struct {
 }
 
 // NewArsenalNet -- возвращает новый *ArsenalNet
-func NewArsenalNet(bot types.IBot) (*ArsenalNet, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewArsenalNet(): IBot == nil")
+func NewArsenalNet(arsenal types.IArsenal) (*ArsenalNet, error) {
+	sectionNet, err := sectionnet.NewSectionNet(arsenal, "http://wartank.ru/production/Armory")
+	if err != nil {
+		return nil, fmt.Errorf("NewArsenalNet(): in create SectionNet, err=\n\t%w", err)
 	}
 
 	sf := &ArsenalNet{
-		SectionNet: sectionnet.NewSectionNet(bot, bot.Angar().Base().Arsenal(), "http://wartank.ru/production/Armory"),
+		SectionNet: sectionNet,
 	}
 
 	return sf, nil

+ 12 - 24
server/serv_bots/warbot/angar/base/bank/bank.go

@@ -20,7 +20,6 @@ import (
 // Bank -- объект банка на базе
 type Bank struct {
 	*section.Section
-	bot       types.IBot
 	net       *banknet.BankNet
 	silverBot types.IStatParam
 	mode1     *bankmode.BankMode
@@ -28,39 +27,28 @@ type Bank struct {
 }
 
 // NewBank -- возвращает новый *Bank
-func NewBank(bot types.IBot) (*Bank, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewBank(): IBot == nil")
+func NewBank(base types.IBase) (*Bank, error) {
+	section, err := section.NewSection(base.Bot(), `<span class="green2">Серебро</span><br/>`)
+	if err != nil {
+		return nil, fmt.Errorf("NewBank(): in create *Section, err=\n\t%w", err)
 	}
 
 	sf := &Bank{
-		bot:       bot,
+		Section:   section,
 		silverBot: static_param.NewStaticParam("silver_bot"),
 		mode1:     bankmode.NewBankMode(),
 		mode2:     bankmode.NewBankMode(),
 	}
-
+	sf.net, err = banknet.NewBankNet(sf)
+	if err != nil {
+		return nil, fmt.Errorf("NewBank(): in create NetBank, err=\n\t%w", err)
+	}
 	return sf, nil
 }
 
+// Run -- запускает банк в работу
 func (sf *Bank) Run() error {
 	log.Printf("Bank.Run()\n")
-	var err error
-	{ // Section
-		// sf.Section, err = section.NewSection(`<div class="thumb fl"><img src="/images/silver.jpg" alt="Серебро" title="Серебро"/>`, sf.chCall)
-		// <span class="green2">Серебро</span><br/>
-		sf.Section, err = section.NewSection(sf.bot, `<span class="green2">Серебро</span><br/>`)
-		if err != nil {
-			return fmt.Errorf("Bank.Run(): in create *Section, err=\n\t%w", err)
-		}
-	}
-	{ // BankNet
-		sf.net, err = banknet.NewBankNet(sf, sf.bot)
-		if err != nil {
-			return fmt.Errorf("Bank.Run(): in create NetBank, err=\n\t%w", err)
-		}
-	}
-	// sf.CountDown().S_t(1)
 	go sf.run()
 	return nil
 }
@@ -179,7 +167,7 @@ func (sf *Bank) getAllMode() error {
 		if err != nil {
 			return fmt.Errorf("BankNet.getAllMode(): numSilver1(%v) not number, err=\n\t%w", strMode1, err)
 		}
-		sf.Mode1().Silver().Set(iNum1)
+		sf.Mode1().Silver().SetVal(iNum1)
 		// Установить время производства
 		strTime1 := lstBank[ind+2]
 		sf.Mode1().TimeSet(strTime1)
@@ -204,7 +192,7 @@ func (sf *Bank) getAllMode() error {
 		if err != nil {
 			return fmt.Errorf("BankNet.getAllMode(): numSilver2(%v) not number, err=\n\t%w", strMode2, err)
 		}
-		sf.Mode2().Silver().Set(iNum2)
+		sf.Mode2().Silver().SetVal(iNum2)
 		// Установить время производства
 		strTime2 := lstBank[ind+2]
 		sf.Mode2().TimeSet(strTime2)

+ 5 - 4
server/serv_bots/warbot/angar/base/bank/banknet/banknet.go

@@ -18,14 +18,15 @@ type BankNet struct {
 }
 
 // NewBankNet -- возвращает новый *BankNet
-func NewBankNet(bank types.IBank, bot types.IBot) (*BankNet, error) {
+func NewBankNet(bank types.IBank) (*BankNet, error) {
 	log.Printf("NewBankNet()\n")
-	if bot == nil {
-		return nil, fmt.Errorf("NewBankNet(): IBot == nil")
+	sectionNet, err := sectionnet.NewSectionNet(bank, "http://wartank.ru/production/Bank")
+	if err != nil {
+		return nil, fmt.Errorf("NewBankNet(): in create *SectionNet, err=\n\t%w", err)
 	}
 
 	sf := &BankNet{
-		SectionNet: sectionnet.NewSectionNet(bot, bank, "http://wartank.ru/production/Bank"),
+		SectionNet: sectionNet,
 	}
 
 	return sf, nil

+ 53 - 77
server/serv_bots/warbot/angar/base/base.go

@@ -17,7 +17,6 @@ import (
 	"wartank/server/serv_bots/warbot/angar/base/market"
 	"wartank/server/serv_bots/warbot/angar/base/mine"
 	"wartank/server/serv_bots/warbot/angar/base/polygon"
-	"wartank/server/serv_bots/warbot/angar/battle"
 )
 
 /*
@@ -34,7 +33,6 @@ const (
 type Base struct {
 	*section.Section
 	net       *basenet.BaseNet
-	bot       types.IBot
 	arsenal   *arsenal.Arsenal
 	bank      *bank.Bank
 	polygon   *polygon.Polygon
@@ -45,110 +43,65 @@ type Base struct {
 	block     sync.Mutex
 }
 
-// NewBase -- возвращает новый *Base
-func NewBase(bot types.IBot) (*Base, error) {
+// NewBase -- возвращает новую базу бота
+func NewBase(angar types.IAngar) (*Base, error) {
 	log.Printf("NewBase()\n")
-	if bot == nil {
-		return nil, fmt.Errorf("NewBase(): IBot == nil")
+	section, err := section.NewSection(angar.Bot(), `<title>База</title>`)
+	if err != nil {
+		return nil, fmt.Errorf("NewBase(): in create ISection, err=\n\t%w", err)
 	}
 	sf := &Base{
-		bot: bot,
+		Section: section,
 	}
-	return sf, nil
-}
-
-func (sf *Base) make() error {
-	log.Printf("Base.make()\n")
-	sf.block.Lock()
-	defer sf.block.Unlock()
-	var err error
-	{ // Arsenal
-		sf.arsenal, err = arsenal.NewArsenal(sf.bot)
+	{ // База в сети
+		sf.net, err = basenet.NewBaseNet(sf)
 		if err != nil {
-			return fmt.Errorf("Base.make(): in create IArsenal, err=\n\t%w", err)
+			return nil, fmt.Errorf("NewBase(): in create NetBase, err=\n\t%w", err)
 		}
 	}
-	{ // Bank
-		sf.bank, err = bank.NewBank(sf.bot)
+	{ // Arsenal
+		sf.arsenal, err = arsenal.NewArsenal(sf)
 		if err != nil {
-			return fmt.Errorf("Base.make(): in create IBank, err=\n\t%w", err)
+			return nil, fmt.Errorf("NewBase(): in create IArsenal, err=\n\t%w", err)
 		}
 	}
-	{ // Mine
-		sf.mine, err = mine.NewMine(sf.bot)
+	{ // Bank
+		sf.bank, err = bank.NewBank(sf)
 		if err != nil {
-			return fmt.Errorf("Base.make(): in create IMine, err=\n\t%w", err)
+			return nil, fmt.Errorf("NewBase(): in create IBank, err=\n\t%w", err)
 		}
 	}
-	{ // Battle
-		sf.battle, err = battle.NewBattle(sf.bot)
+	{ // Mine
+		sf.mine, err = mine.NewMine(sf)
 		if err != nil {
-			return fmt.Errorf("Base.make(): in create IBattle, err=\n\t%w", err)
+			return nil, fmt.Errorf("NewBase(): in create IMine, err=\n\t%w", err)
 		}
 	}
 	{ // Market
-		sf.market, err = market.NewMarket(sf.bot)
+		sf.market, err = market.NewMarket(sf)
 		if err != nil {
-			return fmt.Errorf("Base.make(): при создании IMarket, err=\n\t%w", err)
+			return nil, fmt.Errorf("NewBase(): при создании IMarket, err=\n\t%w", err)
 		}
 	}
 	{ // Polygon
-		sf.polygon, err = polygon.NewPolygon(sf.bot)
+		sf.polygon, err = polygon.NewPolygon(sf)
 		if err != nil {
-			return fmt.Errorf("Base.make(): in create IPolygon, err=\n\t%w", err)
+			return nil, fmt.Errorf("NewBase(): in create IPolygon, err=\n\t%w", err)
 		}
 	}
-	{ // Section
-		sf.Section, err = section.NewSection(sf.bot, `<title>База</title>`)
-		if err != nil {
-			return fmt.Errorf("Base.make(): in create *Section, err=\n\t%w", err)
-		}
-	}
-	{ // База в сети
-		sf.net, err = basenet.NewBaseNet(sf.bot)
-		if err != nil {
-			return fmt.Errorf("Base.make(): in create NetBase, err=\n\t%w", err)
-		}
-	}
-	return nil
-}
-
-// Запускает компоненты
-func (sf *Base) run() error {
-	log.Printf("Base.run()\n")
-	sf.block.Lock()
-	defer sf.block.Unlock()
-	if err := sf.arsenal.Run(); err != nil {
-		return fmt.Errorf("Base.run(): in run IArsenal, err=\n\t%w", err)
-	}
-	if err := sf.bank.Run(); err != nil {
-		return fmt.Errorf("Base.run(): in run IBank, err=\n\t%w", err)
-	}
-	if err := sf.mine.Run(); err != nil {
-		return fmt.Errorf("Base.run(): in run IMine, err=\n\t%w", err)
-	}
-	if err := sf.market.Run(); err != nil {
-		return fmt.Errorf("Base.run(): in run IMarket, err=\n\t%w", err)
-	}
-	if err := sf.polygon.Run(); err != nil {
-		return fmt.Errorf("Base.run(): in run IPolygon, err=\n\t%w", err)
-	}
-	return nil
+	return sf, nil
 }
 
 // Запускает базу в обработку
 func (sf *Base) Run() error {
 	log.Printf("Base.Run()\n")
-	if err := sf.make(); err != nil {
-		return fmt.Errorf("Base.Run(): make, err=\n\t%w", err)
-	}
 	if err := sf.run(); err != nil {
 		return fmt.Errorf("Base.Run(): run, err=\n\t%w", err)
 	}
 	go func() {
 		for {
 			select {
-			case <-sf.bot.Ctx().Done():
+			case <-sf.Ctx().Done():
 				sf.CountDown().Stop()
 			case <-sf.CountDown().ChanSig():
 				if err := sf.net.UpdateLst("Base.run()"); err != nil { // Обновить состояние базы
@@ -169,6 +122,29 @@ func (sf *Base) Run() error {
 	return nil
 }
 
+// Запускает компоненты
+func (sf *Base) run() error {
+	log.Printf("Base.run()\n")
+	sf.block.Lock()
+	defer sf.block.Unlock()
+	if err := sf.arsenal.Run(); err != nil {
+		return fmt.Errorf("Base.run(): in run IArsenal, err=\n\t%w", err)
+	}
+	if err := sf.bank.Run(); err != nil {
+		return fmt.Errorf("Base.run(): in run IBank, err=\n\t%w", err)
+	}
+	if err := sf.mine.Run(); err != nil {
+		return fmt.Errorf("Base.run(): in run IMine, err=\n\t%w", err)
+	}
+	if err := sf.market.Run(); err != nil {
+		return fmt.Errorf("Base.run(): in run IMarket, err=\n\t%w", err)
+	}
+	if err := sf.polygon.Run(); err != nil {
+		return fmt.Errorf("Base.run(): in run IPolygon, err=\n\t%w", err)
+	}
+	return nil
+}
+
 func (sf *Base) setCountDown() {
 	timeBase := sf.bank.CountDown().Get()
 	timeCount := timeBase
@@ -227,7 +203,7 @@ func (sf *Base) checkMine() {
 	if countTime > 3 {
 		return
 	}
-	if sf.mine.Ruda().Get() == 0 {
+	if sf.mine.Ruda().Val() == 0 {
 		sf.checkMineStat()
 	}
 	sf.checkMineForce() // Нужно ли ускорить апгрейд шахты
@@ -336,7 +312,7 @@ func (sf *Base) checkMineStat() {
 				log.Printf("ERRO Base.checkMineStat(): руда(%v) не число, err=\n\t%v\n", strRuda, err)
 				return
 			}
-			sf.mine.Ruda().Set(iRuda)
+			sf.mine.Ruda().SetVal(iRuda)
 		}
 	}
 	{ // Ищем железо
@@ -356,7 +332,7 @@ func (sf *Base) checkMineStat() {
 				log.Printf("ERRO Base.checkMineStat(): железо(%v) не число, err=\n\t%v\n", strFerrum, err)
 				return
 			}
-			sf.mine.Ferrum().Set(iFerrum)
+			sf.mine.Ferrum().SetVal(iFerrum)
 		}
 	}
 	{ // Ищем сталь
@@ -376,7 +352,7 @@ func (sf *Base) checkMineStat() {
 				log.Printf("ERRO Base.checkMineStat(): сталь(%v) не число, err=\n\t%v\n", strSteel, err)
 				return
 			}
-			sf.mine.Steel().Set(iSteel)
+			sf.mine.Steel().SetVal(iSteel)
 		}
 	}
 	{ // Ищем свинец
@@ -396,7 +372,7 @@ func (sf *Base) checkMineStat() {
 				log.Printf("ERRO Base.checkMineStat(): свинец(%v) не число, err=\n\t%v\n", strPlumbum, err)
 				return
 			}
-			sf.mine.Plumbum().Set(iPlumbum)
+			sf.mine.Plumbum().SetVal(iPlumbum)
 		}
 	}
 	{ // Ищем время обработки и режим
@@ -470,7 +446,7 @@ func (sf *Base) checkMineProduct() {
 	if !strings.Contains(strOut, `"><span><span>Производство</span></span></a>`) {
 		return
 	}
-	sf.mine.NumProduct().Set(0)
+	sf.mine.NumProduct().SetVal(0)
 	sf.mine.CountDown().Set(1)
 }
 

+ 6 - 5
server/serv_bots/warbot/angar/base/basenet/basenet.go

@@ -18,14 +18,15 @@ type BaseNet struct {
 }
 
 // NewBaseNet -- возвращает новый *BaseNet
-func NewBaseNet(bot types.IBot) (*BaseNet, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewBaseNet(): IBot == nil")
+func NewBaseNet(base types.IBase) (*BaseNet, error) {
+	strUrl := "http://wartank.ru/buildings"
+	sectionNet, err := sectionnet.NewSectionNet(base, strUrl)
+	if err != nil {
+		return nil, fmt.Errorf("NewBaseNet(): in create SectionNet, err=\n\t%w", err)
 	}
 
-	strUrl := "http://wartank.ru/buildings"
 	sf := &BaseNet{
-		SectionNet: sectionnet.NewSectionNet(bot, bot.Angar().Base(), strUrl),
+		SectionNet: sectionNet,
 		strUrl:     strUrl,
 	}
 	return sf, nil

+ 13 - 18
server/serv_bots/warbot/angar/base/market/market.go

@@ -21,31 +21,26 @@ type Market struct {
 }
 
 // NewMarket -- возвращает новый рынок
-func NewMarket(bot types.IBot) (*Market, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewMarket(): IBot == nil")
+func NewMarket(base types.IBase) (*Market, error) {
+	section, err := section.NewSection(base.Bot(), `<title>Рынок</title>`)
+	if err != nil {
+		return nil, fmt.Errorf("NewMarket(): in create *Section, err=\n\t%w", err)
 	}
-
 	sf := &Market{
-		bot: bot,
-	}
-	return sf, nil
-}
-
-func (sf *Market) Run() error {
-	var err error
-	{ // Секция
-		sf.Section, err = section.NewSection(sf.bot, `<title>Рынок</title>`)
-		if err != nil {
-			return fmt.Errorf("Market.Run(): in create *Section, err=\n\t%w", err)
-		}
+		Section: section,
+		bot:     base.Bot(),
 	}
 	{ // Маркет
-		sf.net, err = marketnet.NewMarketNet(sf.bot)
+		sf.net, err = marketnet.NewMarketNet(sf)
 		if err != nil {
-			return fmt.Errorf("Market.Run(): in create NetMarket, err=\n\t%w", err)
+			return nil, fmt.Errorf("NewMarket(): in create NetMarket, err=\n\t%w", err)
 		}
 	}
+	return sf, nil
+}
+
+// Run -- запускает всю работу рынка в отдельном потоке
+func (sf *Market) Run() error {
 	go sf.run()
 	return nil
 }

+ 5 - 4
server/serv_bots/warbot/angar/base/market/marketnet/marketnet.go

@@ -17,13 +17,14 @@ type MarketNet struct {
 }
 
 // NewMarketNet -- возвращает новый *MarketNet
-func NewMarketNet(bot types.IBot) (*MarketNet, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewMarketNet(): IBot == nil")
+func NewMarketNet(market types.IMarket) (*MarketNet, error) {
+	sectionNet, err := sectionnet.NewSectionNet(market, "http://wartank.ru/market")
+	if err != nil {
+		return nil, fmt.Errorf("NewMarketNet(): in create *SectionNet, err=\n\t%w", err)
 	}
 
 	sf := &MarketNet{
-		SectionNet: sectionnet.NewSectionNet(bot, bot.Angar().Base().Market(), "http://wartank.ru/market"),
+		SectionNet: sectionNet,
 	}
 
 	return sf, nil

+ 18 - 29
server/serv_bots/warbot/angar/base/mine/mine.go

@@ -30,40 +30,29 @@ type Mine struct {
 }
 
 // NewMine -- возвращает новый *Mine
-func NewMine(bot types.IBot) (*Mine, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewMine(): IBot == nil")
+func NewMine(base types.IBase) (*Mine, error) {
+	section, err := section.NewSection(base.Bot(), `<span class="green2">Руда</span><br/>`)
+	if err != nil {
+		return nil, fmt.Errorf("NewMine(): in create *Section, err=\n\t%w", err)
 	}
 	sf := &Mine{
-		bot:        bot,
-		base:       bot.Angar().Base(),
+		Section:    section,
+		bot:        base.Bot(),
+		base:       base,
 		ruda:       static_param.NewStaticParam("ruda"),
 		ferrum:     static_param.NewStaticParam("ferrum"),
 		steel:      static_param.NewStaticParam("steel"),
 		plumbum:    static_param.NewStaticParam("plumbum"),
 		numProduct: static_param.NewStaticParam("plumbum"),
 	}
+	sf.net, err = minenet.NewMineNet(sf)
+	if err != nil {
+		return nil, fmt.Errorf("NewMine(): in create NetMine, err=\n\t%w", err)
+	}
 	return sf, nil
 }
 
 func (sf *Mine) Run() error {
-	var err error
-	{ // Секция
-		sf.Section, err = section.NewSection(sf.bot, `<span class="green2">Руда</span><br/>`)
-		if err != nil {
-			return fmt.Errorf("Mine.Run(): in create *Section, err=\n\t%w", err)
-		}
-	}
-
-	{ // Шахта
-		sf.net, err = minenet.NewMineNet(sf.bot)
-		if err != nil {
-			return fmt.Errorf("Mine.Run(): in create NetMine, err=\n\t%w", err)
-		}
-		if err := sf.net.Run(); err != nil {
-			return fmt.Errorf("Mine.Run(): in run NetMine, err=\n\t%w", err)
-		}
-	}
 	go sf.run()
 	return nil
 }
@@ -164,23 +153,23 @@ func (sf *Mine) selectProduct() error {
 	}
 	fnProduct()
 	sf.ModeCurrent().WorkSet("руда")
-	ruda := sf.Ruda().Get()
+	ruda := sf.Ruda().Val()
 
-	ferrum := sf.Ferrum().Get()
+	ferrum := sf.Ferrum().Val()
 	if mapProduct["ferrum"] {
 		if ruda >= ferrum*2 {
 			sf.ModeCurrent().WorkSet("железо")
 		}
 	}
 
-	steel := sf.Steel().Get()
+	steel := sf.Steel().Val()
 	if mapProduct["steel"] {
 		if ferrum >= steel*2 {
 			sf.ModeCurrent().WorkSet("сталь")
 		}
 	}
 
-	plumbum := sf.Plumbum().Get()
+	plumbum := sf.Plumbum().Val()
 	if mapProduct["plumbum"] {
 		if steel > plumbum*2 {
 			sf.ModeCurrent().WorkSet("свинец")
@@ -248,7 +237,7 @@ func (sf *Mine) makeRuda() {
 		// log._rintf("ERRO MineNet.makeRuda(): кол-во(%v) не число, err=\n\t%v\n", strNum, err)
 		return
 	}
-	sf.NumProduct().Set(iNum)
+	sf.NumProduct().SetVal(iNum)
 }
 
 // Создаёт железо
@@ -308,7 +297,7 @@ func (sf *Mine) makeFerrum() {
 		// log._rintf("ERRO MineNet.makeFerrum(): кол-во(%v) не число, err=\n\t%v\n", strNum, err)
 		return
 	}
-	sf.NumProduct().Set(iNum)
+	sf.NumProduct().SetVal(iNum)
 }
 
 // Создаёт сталь
@@ -368,5 +357,5 @@ func (sf *Mine) makeSteel() {
 		// log._rintf("ERRO MineNet.makeSteel(): кол-во(%v) не число, err=\n\t%v\n", strNum, err)
 		return
 	}
-	sf.NumProduct().Set(iNum)
+	sf.NumProduct().SetVal(iNum)
 }

+ 5 - 12
server/serv_bots/warbot/angar/base/mine/minenet/minenet.go

@@ -2,7 +2,6 @@ package minenet
 
 import (
 	"fmt"
-
 	"wartank/pkg/components/sectionnet"
 	"wartank/pkg/types"
 )
@@ -14,22 +13,16 @@ import (
 // MineNet -- опрашивает шахту на базе
 type MineNet struct {
 	*sectionnet.SectionNet
-	bot types.IBot
 }
 
 // NewMineNet -- возвращает новый *MineNet
-func NewMineNet(bot types.IBot) (*MineNet, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewMineNet(): IBot == nil")
+func NewMineNet(mine types.IMine) (*MineNet, error) {
+	sectionNet, err := sectionnet.NewSectionNet(mine, "http://wartank.ru/production/Mine")
+	if err != nil {
+		return nil, fmt.Errorf("NewMineNet(): in create *SectionNet, err=\n\t%w", err)
 	}
-
 	sf := &MineNet{
-		bot: bot,
+		SectionNet: sectionNet,
 	}
 	return sf, nil
 }
-
-func (sf *MineNet) Run() error {
-	sf.SectionNet = sectionnet.NewSectionNet(sf.bot, sf.bot.Angar().Base().Mine(), "http://wartank.ru/production/Mine")
-	return nil
-}

+ 21 - 28
server/serv_bots/warbot/angar/base/polygon/polygon.go

@@ -23,32 +23,25 @@ type Polygon struct {
 }
 
 // NewPolygon -- возвращает новый *Polygon
-func NewPolygon(bot types.IBot) (*Polygon, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewPolygon(): IBot == nil")
+func NewPolygon(base types.IBase) (*Polygon, error) {
+	section, err := section.NewSection(base.Bot(), `<title>Полигон</title>`)
+	if err != nil {
+		return nil, fmt.Errorf("NewPolygon(): in create *Section, err=\n\t%w", err)
 	}
 	sf := &Polygon{
-		bot:      bot,
-		tankStat: bot.Tank().TankStat(),
+		Section:  section,
+		bot:      base.Bot(),
+		tankStat: base.Bot().Tank().TankStat(),
+	}
+	sf.net, err = polygonnet.NewPolygonNet(sf)
+	if err != nil {
+		return nil, fmt.Errorf("NewPolygon(): in create NetPolygon, err=\n\t%w", err)
 	}
-
 	return sf, nil
 }
 
+// Run -- запускает работу полигона в отдельном потоке
 func (sf *Polygon) Run() error {
-	var err error
-	{ // Секция
-		sf.Section, err = section.NewSection(sf.bot, `<title>Полигон</title>`)
-		if err != nil {
-			return fmt.Errorf("Polygon.Run(): in create *Section, err=\n\t%w", err)
-		}
-	}
-	{ // Polygon
-		sf.net, err = polygonnet.NewPolygonNet(sf.bot)
-		if err != nil {
-			return fmt.Errorf("Polygon.Run(): in create NetPolygon, err=\n\t%w", err)
-		}
-	}
 	go sf.run()
 	return nil
 }
@@ -150,7 +143,7 @@ func (sf *Polygon) checkForce() {
 		// log._rintf("NetPolygon.checkTime(): force(%v) not number, err=\n\t%v\n", strOut, err)
 		return
 	}
-	sf.tankStat.Force().Set(iForce)
+	sf.tankStat.Force().SetVal(iForce)
 }
 
 // Выбирает самый слабый параметр и усиливает его
@@ -165,10 +158,10 @@ func (sf *Polygon) addForce() {
 		return
 	}
 	stat := sf.tankStat
-	iAttack := stat.Attack().Get()
-	iArmor := stat.Armor().Get()
-	iFyne := stat.Fyne().Get()
-	iHard := stat.Hard().Get()
+	iAttack := stat.Attack().Val()
+	iArmor := stat.Armor().Val()
+	iFyne := stat.Fyne().Val()
+	iHard := stat.Hard().Val()
 
 	strParam := "attack"
 	iParam := iHard
@@ -237,7 +230,7 @@ func (sf *Polygon) addForce() {
 				// log._rintf("ERRO NetPolygon.addForce(): strForceAttack(%v) not int, err=\n\t%v\n", strForce, err)
 				return
 			}
-			sf.tankStat.Force().Set(iForce)
+			sf.tankStat.Force().SetVal(iForce)
 			sf.tankStat.Force().SetName("attack")
 			sf.ModeCurrent().Set("атака")
 		}
@@ -276,7 +269,7 @@ func (sf *Polygon) addForce() {
 				// log._rintf("ERRO NetPolygon.addForce(): strForceArmor(%v) not int, err=\n\t%v\n", strForce, err)
 				return
 			}
-			sf.tankStat.Force().Set(iForce)
+			sf.tankStat.Force().SetVal(iForce)
 			sf.tankStat.Force().SetName("armor")
 			sf.ModeCurrent().Set("броня")
 		}
@@ -315,7 +308,7 @@ func (sf *Polygon) addForce() {
 				// log._rintf("ERRO NetPolygon.addForce(): strForceFyne(%v) not int, err=\n\t%v\n", strForce, err)
 				return
 			}
-			sf.tankStat.Force().Set(iForce)
+			sf.tankStat.Force().SetVal(iForce)
 			sf.tankStat.Force().SetName("fyne")
 			sf.ModeCurrent().Set("точность")
 		}
@@ -351,7 +344,7 @@ func (sf *Polygon) addForce() {
 				// log._rintf("ERRO NetPolygon.addForce(): strForceHard(%v) not int, err=\n\t%v\n", strForce, err)
 				return
 			}
-			sf.tankStat.Force().Set(iForce)
+			sf.tankStat.Force().SetVal(iForce)
 			sf.tankStat.Force().SetName("hard")
 			sf.ModeCurrent().Set("прочность")
 		}

+ 5 - 4
server/serv_bots/warbot/angar/base/polygon/polygonnet/polygonnet.go

@@ -17,13 +17,14 @@ type PolygonNet struct {
 }
 
 // NewPolygonNet -- возвращает новый *PolygonNet
-func NewPolygonNet(bot types.IBot) (*PolygonNet, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewPolygonNet(): IBot == nil")
+func NewPolygonNet(polygon types.IPolygon) (*PolygonNet, error) {
+	sectionNet, err := sectionnet.NewSectionNet(polygon, "http://wartank.ru/polygon")
+	if err != nil {
+		return nil, fmt.Errorf("NewPolygonNet(): in create *SectionNet, err=\n\t%w", err)
 	}
 
 	sf := &PolygonNet{
-		SectionNet: sectionnet.NewSectionNet(bot, bot.Angar().Base().Polygon(), "http://wartank.ru/polygon"),
+		SectionNet: sectionNet,
 	}
 
 	return sf, nil

+ 2 - 8
server/serv_bots/warbot/angar/battle/battle.go

@@ -1,3 +1,4 @@
+// package battle -- объект сражения
 package battle
 
 import (
@@ -12,11 +13,7 @@ import (
 	"wartank/server/serv_bots/warbot/angar/battle/battle_worker"
 )
 
-/*
-	Объект ожидания сражения на базе
-*/
-
-// Battle -- объект ожидания сражения на базе
+// Battle -- объект сражения
 type Battle struct {
 	*section.Section
 	bot  types.IBot
@@ -67,9 +64,6 @@ func (sf *Battle) Run() error {
 			return fmt.Errorf("Battle.Run(): in create *Section, err=\n\t%w", err)
 		}
 	}
-	sf.battleRegister.Run()
-	sf.battleWaiter.Run()
-	sf.battleWorker.Run()
 	go sf.run()
 	return nil
 }

+ 8 - 14
server/serv_bots/warbot/angar/battle/battle_register/battle_register.go

@@ -20,27 +20,21 @@ type BattleRegister struct {
 
 // NewBattleRegister -- возвращает новый ожидатель битвы
 func NewBattleRegister(bot types.IBot) (*BattleRegister, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewBattleRegister(): IBot == nil")
+	section, err := section.NewSection(bot, `<title>Сражения</title>`)
+	if err != nil {
+		return nil, fmt.Errorf("NewBattleRegister(): in create ISection, err=\n\t%w", err)
 	}
 	sf := &BattleRegister{
-		bot: bot,
+		Section: section,
+		bot:     bot,
 	}
-	var err error
-	{ // ISection (ожидание)
-		sf.Section, err = section.NewSection(bot, `<title>Сражения</title>`)
-		if err != nil {
-			return nil, fmt.Errorf("NewBattleRegister(): in create *Section, err=\n\t%w", err)
-		}
+	sf.net, err = sectionnet.NewSectionNet(sf, "http://wartank.ru/pve")
+	if err != nil {
+		return nil, fmt.Errorf("NewBattleRegister(): in create *SectionNet, err=\n\t%w", err)
 	}
 	return sf, nil
 }
 
-// Run -- запускает регистратор в работу
-func (sf *BattleRegister) Run() {
-	sf.net = sectionnet.NewSectionNet(sf.bot, sf, "http://wartank.ru/pve")
-}
-
 // Register -- регистрирует танк на сражение
 func (sf *BattleRegister) Register() {
 	if err := sf.net.UpdateLst("Ближайшее сражение"); err != nil { // Здесь может уже обратный отсчёт перед сражением

+ 8 - 14
server/serv_bots/warbot/angar/battle/battle_wait/battle_wait.go

@@ -21,28 +21,22 @@ type BattleWait struct {
 
 // NewBattleWait -- возвращает новый ожидатель битвы
 func NewBattleWait(bot types.IBot) (*BattleWait, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewBattleWait():IServBot == nil")
+	section, err := section.NewSection(bot, `<title>Сражения</title>`)
+	if err != nil {
+		return nil, fmt.Errorf("NewBattleWait(): in create ISection, err=\n\t%w", err)
 	}
 
 	sf := &BattleWait{
-		bot: bot,
+		Section: section,
+		bot:     bot,
 	}
-	var err error
-	{ // ISection (ожидание)
-		sf.Section, err = section.NewSection(bot, `<title>Сражения</title>`)
-		if err != nil {
-			return nil, fmt.Errorf("NewBattleWait(): in create *Section, err=\n\t%w", err)
-		}
+	sf.net, err = sectionnet.NewSectionNet(sf, "http://wartank.ru/pve")
+	if err != nil {
+		return nil, fmt.Errorf("NewBattleWait(): in create *SectionNet, err=\n\t%w", err)
 	}
 	return sf, nil
 }
 
-// Run -- запускает ожидание в работу
-func (sf *BattleWait) Run() {
-	sf.net = sectionnet.NewSectionNet(sf.bot, sf, "http://wartank.ru/pve")
-}
-
 // Wait -- ожидает начало сражения
 func (sf *BattleWait) Wait() {
 	if err := sf.net.UpdateLst("Ближайшее сражение"); err != nil { // Здесь может уже обратный отсчёт перед сражением

+ 12 - 18
server/serv_bots/warbot/angar/battle/battle_worker/battle_worker.go

@@ -29,29 +29,23 @@ type BattleWorker struct {
 
 // NewBattleWorker -- возвращает новый исполнитель битвы
 func NewBattleWorker(bot types.IBot) (*BattleWorker, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewBattleWorker(): IBot == nil")
+	section, err := section.NewSection(bot, `<title>Сражения</title>`)
+	if err != nil {
+		return nil, fmt.Errorf("NewBattleWorker(): in create *Section, err=\n\t%w", err)
 	}
 	sf := &BattleWorker{
-		bot:   bot,
-		alarm: static_param.NewStaticParam("alarm"),
-		sound: battlesound.NewBattleSound(),
+		Section: section,
+		bot:     bot,
+		alarm:   static_param.NewStaticParam("alarm"),
+		sound:   battlesound.NewBattleSound(),
 	}
-	var err error
-	{ // ISection (ожидание)
-		sf.Section, err = section.NewSection(sf.bot, `<title>Сражения</title>`)
-		if err != nil {
-			return nil, fmt.Errorf("NewBattleWorker(): in create *Section, err=\n\t%w", err)
-		}
+	sf.net, err = sectionnet.NewSectionNet(sf, "http://wartank.ru/pve")
+	if err != nil {
+		return nil, fmt.Errorf("NewBattleWorker(): in create *SectionNet, err=\n\t%w", err)
 	}
 	return sf, nil
 }
 
-// Run -- запускает ожидание в работу
-func (sf *BattleWorker) Run() {
-	sf.net = sectionnet.NewSectionNet(sf.bot, sf, "http://wartank.ru/pve")
-}
-
 // Work -- выполняет битву
 func (sf *BattleWorker) Work() {
 	var err error
@@ -59,10 +53,10 @@ func (sf *BattleWorker) Work() {
 	if err != nil {
 		return
 	}
-	sf.alarm.Set(1)
+	sf.alarm.SetVal(1)
 	sf.sound.Play()
 	time.Sleep(time.Second * 10) // Задержка для звука на странице
-	sf.alarm.Set(0)
+	sf.alarm.SetVal(0)
 	// Ожидание завершения
 	<-sf.baton.Ctx().Done()
 	sf.baton = nil

+ 7 - 12
server/serv_bots/warbot/angar/battle/battle_worker/battleon/battleon.go

@@ -37,12 +37,14 @@ type BattleOn struct {
 
 // NewBattleOn -- возвращает новый *BattleOn
 func NewBattleOn(bot types.IBot) (*BattleOn, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewBattleOn(): IBot == nil")
+	section, err := section.NewSection(bot, `<title>Сражения</title>`)
+	if err != nil {
+		return nil, fmt.Errorf("NewBattleOn(): in create ISection, err=\n\t%w", err)
 	}
 
 	ctxBattle, fnCancelBattle := context.WithTimeout(bot.Server().CtxApp(), time.Second*305)
 	sf := &BattleOn{
+		Section:        section,
 		bot:            bot,
 		ctxBattle:      ctxBattle,
 		fnCancelBattle: fnCancelBattle,
@@ -50,12 +52,9 @@ func NewBattleOn(bot types.IBot) (*BattleOn, error) {
 		isShot:         isshot.NewIsShot(),
 		chTick:         make(chan int, 2),
 	}
-	var err error
-	{ // ISection (ожидание)
-		sf.Section, err = section.NewSection(bot, `<title>Сражения</title>`)
-		if err != nil {
-			return nil, fmt.Errorf("NewBattleOn(): in create *Section, err=\n\t%w", err)
-		}
+	sf.net, err = sectionnet.NewSectionNet(sf, "http://wartank.ru/pve")
+	if err != nil {
+		return nil, fmt.Errorf("NewBattleOn(): in create *SectionNet, err=\n\t%w", err)
 	}
 	go sf.makeTick()
 	go sf.run()
@@ -83,10 +82,6 @@ func (sf *BattleOn) makeTick() {
 
 // запускает сражение
 func (sf *BattleOn) run() {
-	{ // Создание сети
-		sf.net = sectionnet.NewSectionNet(sf.bot, sf.bot.Angar().Battle(), "http://wartank.ru/pve")
-		sf.net.Run()
-	}
 	defer func() {
 		sf.fnCancelBattle()
 		// log._rintf("BattleOn.run(): сражение завершено\n")

+ 5 - 14
server/serv_bots/warbot/angar/battle/battlenet/battlenet.go

@@ -2,7 +2,6 @@ package battlenet
 
 import (
 	"fmt"
-
 	"wartank/pkg/components/sectionnet"
 	"wartank/pkg/types"
 )
@@ -14,24 +13,16 @@ import (
 // BattleNet -- танкует в сражении
 type BattleNet struct {
 	*sectionnet.SectionNet
-	server types.IServer
-	bot    types.IBot
 }
 
 // NewBattleNet -- возвращает новый *BattleNet
-func NewBattleNet(bot types.IBot) (*BattleNet, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewBattleNet(): IBot == nil")
+func NewBattleNet(battle types.IBattle) (*BattleNet, error) {
+	sectionNet, err := sectionnet.NewSectionNet(battle, "http://wartank.ru/pve")
+	if err != nil {
+		return nil, fmt.Errorf("NewBattleNet(): in create *SectionNet, err=\n\t%w", err)
 	}
-
 	sf := &BattleNet{
-		server: bot.Server(),
-		bot:    bot,
+		SectionNet: sectionNet,
 	}
 	return sf, nil
 }
-
-// Запусает сеть в работу
-func (sf *BattleNet) Run() {
-	sf.SectionNet = sectionnet.NewSectionNet(sf.bot, sf.bot.Angar().Battle(), "http://wartank.ru/pve")
-}

+ 11 - 17
server/serv_bots/warbot/angar/convoy/convoy.go

@@ -30,31 +30,25 @@ type Convoy struct {
 
 // NewConvoy -- возвращает новый *Convoy
 func NewConvoy(bot types.IBot) (*Convoy, error) {
+	section, err := section.NewSection(bot, `<title>Конвой</title>`)
+	if err != nil {
+		return nil, fmt.Errorf("NewConvoy(): in create ISection, err=\n\t%w", err)
+	}
 	sf := &Convoy{
+		Section:  section,
 		bot:      bot,
 		glory:    static_param.NewStaticParam("glory"),
 		chAttack: make(chan int, 5),
 	}
+	sf.net, err = convoynet.NewConvoyNet(sf)
+	if err != nil {
+		return nil, fmt.Errorf("NewConvoy(): in create *SectionNet, err=\n\t%w", err)
+	}
 	return sf, nil
 }
 
+// Run -- запускает конвой в работу
 func (sf *Convoy) Run() error {
-	var err error
-	{ // Section
-		sf.Section, err = section.NewSection(sf.bot, `<title>Конвой</title>`)
-		if err != nil {
-			return fmt.Errorf("Convoy.Run(): in create *Section, err=\n\t%w", err)
-		}
-	}
-	{ // SectionNet
-		sf.net, err = convoynet.NewConvoyNet(sf.bot)
-		if err != nil {
-			return fmt.Errorf("Convoy.Run(): in create *SectionNet, err=\n\t%w", err)
-		}
-		if err := sf.net.Run(); err != nil {
-			return fmt.Errorf("Convoy.Run(): in run *SectionNet, err=\n\t%w", err)
-		}
-	}
 	go sf.reservTick()
 	go sf.run()
 	return nil
@@ -139,7 +133,7 @@ func (sf *Convoy) updateGlory() {
 		// log._rintf("ERRO ConvoyNet.updateGlory(): слава(%v) не число, err=\n\t%v\n", strGlory, err)
 		return
 	}
-	sf.glory.Set(iGlory)
+	sf.glory.SetVal(iGlory)
 }
 
 // Обновляет оставшееся время конвоя

+ 5 - 14
server/serv_bots/warbot/angar/convoy/convoynet/convoynet.go

@@ -2,7 +2,6 @@ package convoynet
 
 import (
 	"fmt"
-
 	"wartank/pkg/components/sectionnet"
 	"wartank/pkg/types"
 )
@@ -14,24 +13,16 @@ import (
 // ConvoyNet -- танкует с конвоем в сети
 type ConvoyNet struct {
 	*sectionnet.SectionNet
-	server types.IServer
-	bot    types.IBot
 }
 
 // NewConvoyNet -- возвращает новый *ConvoyNet
-func NewConvoyNet(bot types.IBot) (*ConvoyNet, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewConvoyNet(): IBot == nil")
+func NewConvoyNet(convoy types.IConvoy) (*ConvoyNet, error) {
+	sectionNet, err := sectionnet.NewSectionNet(convoy, "http://wartank.ru/convoy")
+	if err != nil {
+		return nil, fmt.Errorf("NewConvoyNet(): in create *SectionNet, err=\n\t%w", err)
 	}
-
 	sf := &ConvoyNet{
-		server: bot.Server(),
-		bot:    bot,
+		SectionNet: sectionNet,
 	}
 	return sf, nil
 }
-
-func (sf *ConvoyNet) Run() error {
-	sf.SectionNet = sectionnet.NewSectionNet(sf.bot, sf.bot.Angar().Convoy(), "http://wartank.ru/convoy")
-	return nil
-}

+ 2 - 2
server/serv_bots/warbot/angar/division/divwar/divwar.go

@@ -108,11 +108,11 @@ func (sf *DivWar) run() {
 			if sf.divon != nil {
 				continue
 			}
-			sf.alarm.Set(1)
+			sf.alarm.SetVal(1)
 			sf.sound.Play()
 			go sf.DivWar()               // Запустить цикл непосредственного сражения
 			time.Sleep(time.Second * 10) // Задержка для звука на странице
-			sf.alarm.Set(0)
+			sf.alarm.SetVal(0)
 		}
 	}
 }

+ 13 - 17
server/serv_bots/warbot/angar/fuel/fuel.go

@@ -13,22 +13,18 @@ import (
 
 // Fuel -- топливо в баке
 type Fuel struct {
-	server types.IServer
-	angar  types.IAngar
-	bot    types.IBot
-	fuel   types.IStatParam
+	angar types.IAngar
+	fuel  types.IStatParam
 }
 
 // NewFuel -- возвращает новый топливный бак
-func NewFuel(bot types.IBot) (*Fuel, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewFuel(): IBot == nil")
+func NewFuel(angar types.IAngar) (*Fuel, error) {
+	if angar == nil {
+		return nil, fmt.Errorf("NewFuel(): IAngar == nil")
 	}
 	sf := &Fuel{
-		server: bot.Server(),
-		angar:  bot.Angar(),
-		bot:    bot,
-		fuel:   static_param.NewStaticParam("fuel"),
+		angar: angar,
+		fuel:  static_param.NewStaticParam("fuel"),
 	}
 	return sf, nil
 }
@@ -38,15 +34,15 @@ func (sf *Fuel) Run() {
 	count := 0 // Каждые 1500 сек (100 топлива проверять принудительно)
 	for {
 		time.Sleep(time.Second * 15)
-		if sf.fuel.Get() == 0 || count >= 100 {
+		if sf.fuel.Val() == 0 || count >= 100 {
 			sf.findFuel()
 			count = 0
 			continue
 		}
 		count++
-		fuel := sf.angar.Fuel().Get()
+		fuel := sf.fuel.Val()
 		fuel++
-		sf.angar.Fuel().Set(fuel)
+		sf.fuel.SetVal(fuel)
 		// log.Printf("Fuel.Run: val=%v\n", fuel)
 	}
 }
@@ -54,10 +50,10 @@ func (sf *Fuel) Run() {
 // Ищет в теле текста ангара топливо
 func (sf *Fuel) findFuel() {
 	// _mt.Println("\tAngarNet.findFuel()")
-	if sf.fuel.Get() > 314 {
+	if sf.fuel.Val() > 314 {
 		return
 	}
-	lstAngar := sf.bot.Angar().GetLst()
+	lstAngar := sf.angar.GetLst()
 	var strOut string
 	for _, strFuel := range lstAngar {
 		if strings.Contains(strFuel, `<img title="Топливо" `) {
@@ -73,7 +69,7 @@ func (sf *Fuel) findFuel() {
 		// log._rintf("ERRO Fuel.findFuel(): fuel(%v) not number, err=\n\t%v\n", strFuel, err)
 		return
 	}
-	sf.bot.Angar().Fuel().Set(iFuel)
+	sf.fuel.SetVal(iFuel)
 	if iFuel <= 314 { // Минимальное значение "топливного склада-1" -- 315
 		return
 	}

+ 10 - 17
server/serv_bots/warbot/angar/missions/missions.go

@@ -23,30 +23,23 @@ type Missions struct {
 
 // NewMissions -- возвращает новый *Missions
 func NewMissions(bot types.IBot) (*Missions, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewMissions(): IBot == nil")
+	section, err := section.NewSection(bot, `<title>Миссии</title>`)
+	if err != nil {
+		return nil, fmt.Errorf("NewMissions(): in create *Section, err=\n\t%w", err)
 	}
 	sf := &Missions{
-		bot: bot,
+		Section: section,
+		bot:     bot,
+	}
+	sf.net, err = missionsnet.NewMissionsNet(sf)
+	if err != nil {
+		return nil, fmt.Errorf("NewMissions(): in create *SectionNet, err=\n\t%w", err)
 	}
-
 	return sf, nil
 }
 
+// Run -- запускает в работу сбор миссий
 func (sf *Missions) Run() error {
-	var err error
-	{ // Section
-		sf.Section, err = section.NewSection(sf.bot, `<title>Миссии</title>`)
-		if err != nil {
-			return fmt.Errorf("Missions.Run(): in create *Section, err=\n\t%w", err)
-		}
-	}
-	{ // SectionNet
-		sf.net, err = missionsnet.NewMissionsNet(sf.bot)
-		if err != nil {
-			return fmt.Errorf("Missions.Run(): in create *SectionNet, err=\n\t%w", err)
-		}
-	}
 	go sf.run()
 	return nil
 }

+ 5 - 4
server/serv_bots/warbot/angar/missions/missionsnet/missionsnet.go

@@ -17,13 +17,14 @@ type MissionsNet struct {
 }
 
 // NewMissionsNet -- возвращает новый *MissionsNet
-func NewMissionsNet(bot types.IBot) (*MissionsNet, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewMissionsNet(): IBot == nil")
+func NewMissionsNet(mission types.IMissions) (*MissionsNet, error) {
+	sectionNet, err := sectionnet.NewSectionNet(mission, "http://wartank.ru/missions/")
+	if err != nil {
+		return nil, fmt.Errorf("NewMissionsNet(): in create *SectionNet, err=\n\t%w", err)
 	}
 
 	sf := &MissionsNet{
-		SectionNet: sectionnet.NewSectionNet(bot, bot.Angar().Missions(), "http://wartank.ru/missions/"),
+		SectionNet: sectionNet,
 	}
 	return sf, nil
 }

+ 8 - 8
server/serv_bots/warbot/angar/netstat/netstat.go

@@ -82,7 +82,7 @@ func (sf *NetStat) findPower() (err error) {
 	if err != nil {
 		return fmt.Errorf("NetStat.findPower(): power(%v) not number, err=\n\t%w", strPower, err)
 	}
-	sf.bot.Tank().TankStat().Power().Set(iPower)
+	sf.bot.Tank().TankStat().Power().SetVal(iPower)
 	return nil
 }
 
@@ -115,7 +115,7 @@ func (sf *NetStat) findHard() (err error) {
 	if err != nil {
 		return fmt.Errorf("NetStat.findHard(): hard(%v) not number, err=\n\t%w", strHard, err)
 	}
-	sf.bot.Tank().TankStat().Hard().Set(iHard)
+	sf.bot.Tank().TankStat().Hard().SetVal(iHard)
 	return nil
 }
 
@@ -149,7 +149,7 @@ func (sf *NetStat) findFyne() (err error) {
 	if err != nil {
 		return fmt.Errorf("NetStat.findFyne(): fyne(%v) not number, err=\n\t%w", strFyne, err)
 	}
-	sf.bot.Tank().TankStat().Fyne().Set(iFyne)
+	sf.bot.Tank().TankStat().Fyne().SetVal(iFyne)
 	return nil
 }
 
@@ -183,7 +183,7 @@ func (sf *NetStat) findArmor() (err error) {
 	if err != nil {
 		return fmt.Errorf("NetStat.findArmor(): armor(%v) not number, err=\n\t%w", strArmor, err)
 	}
-	sf.bot.Tank().TankStat().Armor().Set(iArmor)
+	sf.bot.Tank().TankStat().Armor().SetVal(iArmor)
 	return nil
 }
 
@@ -212,7 +212,7 @@ func (sf *NetStat) findLevelTank() {
 		// log._rintf("ERRO NetStat.findLevelTank(): level(%v) не число, err=\n\t%v\n", strLevel, err)
 		return
 	}
-	sf.bot.Angar().Level().Set(iLevel)
+	sf.bot.Angar().Level().SetVal(iLevel)
 }
 
 // Ищет в теле текста ангара прогресс уровня танка танка
@@ -239,7 +239,7 @@ func (sf *NetStat) findLevelProgress() error {
 	if err != nil {
 		return fmt.Errorf("NetStat.findLevelProgress(): progress(%v) not number, err=\n\t%w", strProg, err)
 	}
-	sf.bot.Angar().Progress().Set(iProg)
+	sf.bot.Angar().Progress().SetVal(iProg)
 	return nil
 }
 
@@ -268,7 +268,7 @@ func (sf *NetStat) findAtack() (err error) {
 	if err != nil {
 		return fmt.Errorf("NetStat.findAtack(): atack(%v) not number, err=\n\t%w", strAtack, err)
 	}
-	sf.bot.Tank().TankStat().Attack().Set(iAtack)
+	sf.bot.Tank().TankStat().Attack().SetVal(iAtack)
 	return nil
 }
 
@@ -296,6 +296,6 @@ func (sf *NetStat) findOnline() (err error) {
 	if err != nil {
 		return fmt.Errorf("NetStat.findOnline(): online(%v) not number, err=\n\t%w", iOnline, err)
 	}
-	sf.bot.Angar().Online().Set(iOnline)
+	sf.bot.Angar().Online().SetVal(iOnline)
 	return nil
 }

+ 6 - 6
server/serv_bots/warbot/tank/tankstat/static_param/static_param.go

@@ -13,8 +13,8 @@ import (
 
 // StaticParam -- потокобезопасный параметр танка
 type StaticParam struct {
-	name  string
-	val   int
+	name  string // Имя параметра
+	val   int    // Значение параметра
 	block sync.RWMutex
 }
 
@@ -29,15 +29,15 @@ func NewStaticParam(name string) *StaticParam {
 	return sf
 }
 
-// Set -- устанавливает параметр
-func (sf *StaticParam) Set(val int) {
+// SetVal -- устанавливает значение параметра
+func (sf *StaticParam) SetVal(val int) {
 	sf.block.Lock()
 	defer sf.block.Unlock()
 	sf.val = val
 }
 
-// Get -- возвращает значение хранимого параметра
-func (sf *StaticParam) Get() int {
+// Val -- значение хранимого параметра
+func (sf *StaticParam) Val() int {
 	sf.block.RLock()
 	defer sf.block.RUnlock()
 	return sf.val

+ 4 - 18
server/serv_bots/warbot/warbot.go

@@ -72,13 +72,14 @@ func NewWarBot(server types.IServer, name string) (*WarBot, error) {
 			return nil, fmt.Errorf("NewWarBot(): in make IBotNet, err=\n\t%w", err)
 		}
 	}
-	if sf.config.IsAutoRun_ {
-		sf.isAutoRun.Set()
-	}
 	sf.angar, err = angar.NewAngar(sf)
 	if err != nil {
 		return nil, fmt.Errorf("NewWarBot(): bot(%q) in make IAngar, err=\n\t%w", sf.name, err)
 	}
+	if sf.config.IsAutoRun_ {
+		sf.isAutoRun.Set()
+		sf.Run()
+	}
 	return sf, nil
 }
 
@@ -102,21 +103,6 @@ func (sf *WarBot) Pass() string {
 	return sf.pass
 }
 
-// Make -- создание компонентов бота
-func (sf *WarBot) Make() error {
-	if sf.isRun.Get() {
-		return nil
-	}
-	err := sf.botNet.Login()
-	if err != nil {
-		return fmt.Errorf("WarBot.Make(): bot(%q) in net login, err=\n\t%w", sf.name, err)
-	}
-	if err := sf.angar.Make(); err != nil {
-		return fmt.Errorf("WarBot.Make(): при создании компонентов ангара, err=\n\t%w", err)
-	}
-	return nil
-}
-
 // Run -- запускает бот в работу
 func (sf *WarBot) Run() (err error) {
 	if sf.isRun.Get() {

+ 6 - 3
server/serv_bots/warbot/warbot_net/bot_net_conn/bot_net_conn.go

@@ -1,3 +1,4 @@
+// package bot_net_conn -- сетевое соединение бота
 package bot_net_conn
 
 import (
@@ -9,11 +10,13 @@ import (
 	"wartank/server/serv_bots/warbot/warbot_net/bot_cookie"
 )
 
+// BotNetConn -- сетевое соединение бота
 type BotNetConn struct {
-	client *http.Client
-	cookie *bot_cookie.BotCookie
+	client *http.Client          // Фактический клиент бота
+	cookie *bot_cookie.BotCookie // Кукисы бота
 }
 
+// NewBotNetConn -- возвращает новое сетевое соединение бота
 func NewBotNetConn() *BotNetConn {
 	sf := &BotNetConn{
 		client: &http.Client{
@@ -27,7 +30,7 @@ func NewBotNetConn() *BotNetConn {
 	return sf
 }
 
-// Client -- возвращает клиента
+// Client -- возвращает сетевого клиента
 func (sf *BotNetConn) Client() *http.Client {
 	return sf.client
 }

+ 25 - 54
server/serv_bots/warbot/warbot_net/bot_net_login/bot_net_login.go

@@ -1,3 +1,4 @@
+// package bot_net_login -- сетевой вход на сервер бота
 package bot_net_login
 
 import (
@@ -8,77 +9,64 @@ import (
 	"strings"
 
 	"wartank/pkg/types"
-	"wartank/server/serv_bots/warbot/warbot_net/bot_cookie"
 )
 
-/*
-	Исходник предоставляет тип для сетевого входа на сервер.
-*/
-
-type IBotNet interface {
-	Client() *http.Client
-	Cookie() *bot_cookie.BotCookie
-}
-
 // BotNetLogin -- объект сетевого входа на сервер
 type BotNetLogin struct {
-	bot    types.IBot
+	botNet types.IBotNet
 	conn   *http.Client
 	cookie types.IBotCookie
 }
 
 // NewBotNetLogin -- возвращает новый *NetLogin
-func NewBotNetLogin(bot types.IBot) (*BotNetLogin, error) {
+func NewBotNetLogin(botNet types.IBotNet) (*BotNetLogin, error) {
 	{ // Предусловия
-		if bot == nil {
-			return nil, fmt.Errorf("NewBotNetLogin(): IServBot is nil")
+		if botNet == nil {
+			return nil, fmt.Errorf("NewBotNetLogin(): IBotNet is nil")
 		}
 	}
 
 	sf := &BotNetLogin{
-		bot:    bot,
-		conn:   bot.BotNet().Conn(),
-		cookie: bot.BotNet().Cookie(),
+		botNet: botNet,
+		conn:   botNet.Conn(),
+		cookie: botNet.Cookie(),
+	}
+	if err := sf.connect(); err != nil {
+		return nil, fmt.Errorf("NewBotLogin() in connect to server, err=\n\t%w", err)
 	}
 	return sf, nil
 }
 
-// Connect -- должен вызываться один раз и работать в отдельном потоке
-func (sf *BotNetLogin) Connect() (err error) {
-	// _mt.Println("\n===BotNetLogin.Connect()===")
+// Вызывается один раз
+func (sf *BotNetLogin) connect() (err error) {
 	linkBegin, err := sf.getMainPage()
 	if err != nil {
-		return fmt.Errorf("BotNetLogin.Connect(): при получении главной страницы, err=\n\t%w", err)
+		return fmt.Errorf("BotNetLogin.connect(): при получении главной страницы, err=\n\t%w", err)
 	}
 	switch linkBegin != "" {
 	case true: // Это вход на базу
 		strBodyLogin, err := sf.getPageLogin(linkBegin)
 		if err != nil {
-			return fmt.Errorf("BotNetLogin.Connect(): при получении страницы логина, err=\n\t%w", err)
+			return fmt.Errorf("BotNetLogin.connect(): при получении страницы логина, err=\n\t%w", err)
 		}
 		if err = sf.makePostLogin(strBodyLogin); err != nil {
-			return fmt.Errorf("BotNetLogin.Connect(): при выполнении логина, err=\n\t%w", err)
+			return fmt.Errorf("BotNetLogin.connect(): при выполнении логина, err=\n\t%w", err)
 		}
 		return nil
 	default: // Логин уже был
 		req, err1 := http.NewRequest("GET", "http://wartank.ru/angar", nil)
 		if err1 != nil {
-			return fmt.Errorf("BotNetLogin.Connect(): in get page angar, err=\n\t%w", err1)
+			return fmt.Errorf("BotNetLogin.connect(): in get page angar, err=\n\t%w", err1)
 
 		}
 		resp, err2 := sf.conn.Do(req)
-		defer func() {
-			err3 := resp.Body.Close()
-			if err3 != nil {
-				err = fmt.Errorf("BotNetLogin.Connect(): in close body, err=\n\t%w", err3)
-			}
-		}()
 		if err2 != nil {
-			return fmt.Errorf("BotNetLogin.Connect(): in make request, err=\n\t%w", err2)
+			return fmt.Errorf("BotNetLogin.connect(): in make request, err=\n\t%w", err2)
 		}
+		defer resp.Body.Close()
 		_, err := io.ReadAll(resp.Body)
 		if err != nil {
-			return fmt.Errorf("BotNetLogin.Connect(): in read body response, err=\n\t%w", err)
+			return fmt.Errorf("BotNetLogin.connect(): in read body response, err=\n\t%w", err)
 		}
 	}
 	return nil
@@ -88,20 +76,10 @@ func (sf *BotNetLogin) Connect() (err error) {
 func (sf *BotNetLogin) getMainPage() (linkBegin string, err error) {
 	// _mt.Println("\BotNetLogin.getMainPage()")
 	resp, err := sf.conn.Get("http://wartank.ru/")
-	defer func() {
-		if _panic := recover(); _panic != nil {
-			err = fmt.Errorf("BotNetLogin.getMainPage(): перехвачена паника в конце вызова главной страницы, panic=%v", _panic)
-		}
-	}()
-	defer func() {
-		err = resp.Body.Close()
-		if err != nil {
-			err = fmt.Errorf("NetLogin.getMainPage(): при закрытии тела ответапосле запроса главной страницы,err=%w", err)
-		}
-	}()
 	if err != nil {
 		return "", fmt.Errorf("BotNetLogin.getMainPage(): err=\n\t%w", err)
 	}
+	defer resp.Body.Close()
 	// Получить куки из ответа
 	cookies := resp.Cookies()
 	if len(cookies) > 0 {
@@ -137,15 +115,10 @@ func (sf *BotNetLogin) getMainPage() (linkBegin string, err error) {
 func (sf *BotNetLogin) getPageLogin(linkBegin string) (strBodyLogin string, err error) {
 	// _mt.Println("\BotNetLogin.getPageLogin()")
 	resp, err := sf.conn.Get(linkBegin)
-	defer func() {
-		err = resp.Body.Close()
-		if err != nil {
-			err = fmt.Errorf("NetLogin.getPageLogin(): in close body,err=%w", err)
-		}
-	}()
 	if err != nil {
 		return "", fmt.Errorf("NetLogin.getPageLogin(): in mske GET-request for send login page, err=\n\t%w", err)
 	}
+	defer resp.Body.Close()
 	// sf.cookie = resp.Cookies()
 	binData, err := io.ReadAll(resp.Body)
 	if err != nil {
@@ -179,16 +152,14 @@ func (sf *BotNetLogin) makePostLogin(strBody string) (err error) {
 	{ // Конструируем ПОСТ-форму логина
 		form := url.Values{}
 		form.Add("id1_hf_0", "")
-		form.Add("login", sf.bot.Name())
-		form.Add("password", sf.bot.Pass())
+		form.Add("login", sf.botNet.Bot().Name())
+		form.Add("password", sf.botNet.Bot().Pass())
 
 		resp, err := sf.conn.PostForm(postLink, form)
-		defer func() {
-			_ = resp.Body.Close()
-		}()
 		if err != nil {
 			return fmt.Errorf("BotNetLogin.makePostLogin(): in get POST-login response, err=\n\t%w", err)
 		}
+		defer resp.Body.Close()
 		if _, err = io.ReadAll(resp.Body); err != nil {
 			return fmt.Errorf("BotNetLogin.makePostLogin(): in read body POST-login response, err=\n\t%w", err)
 		}

+ 28 - 17
server/serv_bots/warbot/warbot_net/warbot_net.go

@@ -1,6 +1,7 @@
 package warbot_net
 
 import (
+	"context"
 	"fmt"
 	"net/http"
 
@@ -17,45 +18,55 @@ import (
 
 // WarBotNet -- веб-клиент для выполнения запросов на веб-сервер
 type WarBotNet struct {
-	server     types.IServer
 	bot        types.IBot
 	botNetConn *bot_net_conn.BotNetConn
 	login      *bot_net_login.BotNetLogin
 	isOnline   *safebool.SafeBool
 	net        *netclient.NetClient
+	ctx        context.Context
+	fnCancel   func()
 }
 
 // NewWarBotNet -- возвращает новый *NetClient
-func NewWarBotNet(bot types.IBot) (gc *WarBotNet, err error) {
+func NewWarBotNet(bot types.IBot) (*WarBotNet, error) {
 	fmt.Printf("NewWarBotNet()\n")
 	if bot == nil {
 		return nil, fmt.Errorf("NewWarBotNet(): IBot == nil")
 	}
-
+	ctx, fnCancel := context.WithCancel(bot.Ctx())
 	sf := &WarBotNet{
-		server:     bot.Server(),
 		bot:        bot,
 		botNetConn: bot_net_conn.NewBotNetConn(),
 		isOnline:   safebool.NewSafeBool(),
+		ctx:        ctx,
+		fnCancel:   fnCancel,
 	}
-	return sf, nil
-}
-
-// Login -- пытается законнектиться к серверу
-func (sf *WarBotNet) Login() error {
-	var err error
+	sf.net = netclient.NewNetClient(sf)
 	{ // Подключаем сетевой логин
-		sf.login, err = bot_net_login.NewBotNetLogin(sf.bot)
+		var err error
+		sf.login, err = bot_net_login.NewBotNetLogin(sf)
 		if err != nil {
-			return fmt.Errorf("WarBotNet.Login(): in create NetLogin, err=\n\t%w", err)
+			return nil, fmt.Errorf("NewWarBotNet(): in create BotNetLogin, err=\n\t%w", err)
 		}
 	}
-	if err = sf.login.Connect(); err != nil {
-		return fmt.Errorf("WarBotNet.Login(): in login connect, err=\n\t%w", err)
-	}
 	sf.isOnline.Set()
-	sf.net = netclient.NewNetClient(sf.server, sf.bot)
-	return nil
+	_ = types.IBotNet(sf)
+	return sf, nil
+}
+
+// Bot -- возвращает ссылку на своего бота
+func (sf *WarBotNet) Bot() types.IBot {
+	return sf.bot
+}
+
+// Ctx -- контекст сети бота
+func (sf *WarBotNet) Ctx() context.Context {
+	return sf.ctx
+}
+
+// CancelBotNet -- отменяет контекст сети бота
+func (sf *WarBotNet) CancelBotNet() {
+	sf.fnCancel()
 }
 
 // IsOnline -- возвращает признак нахождения в онлайне