فهرست منبع

SVI ВВедение политики нулевой терпимости к ошибкам

SVI 1 سال پیش
والد
کامیت
62f0f197a3
59فایلهای تغییر یافته به همراه400 افزوده شده و 683 حذف شده
  1. 2 2
      cmd/server/main.go
  2. 2 2
      desc_lorca/desc_lorca.go
  3. 9 2
      pkg/arena/arena.go
  4. 2 2
      pkg/arena/arena_context/arena_context.go
  5. 7 4
      pkg/arena/arena_string/arena_string.go
  6. 5 9
      pkg/components/arena_net/arena_net.go
  7. 9 31
      pkg/components/arena_net/http_worker/http_worker.go
  8. 1 5
      pkg/components/arena_net/scene_web_worker/scene_web_worker.go
  9. 0 1
      pkg/components/kernel/keeper/keeper_test.go
  10. 3 3
      pkg/components/kernel/kernel.go
  11. 0 1
      pkg/components/kernel/kernel_test.go
  12. 3 3
      pkg/components/kernel/logger/logger.go
  13. 2 2
      pkg/components/kernel/slog/slog.go
  14. 9 9
      pkg/components/kernel/store/store.go
  15. 1 1
      pkg/types/ibot_cookie.go
  16. 1 1
      pkg/types/ihttp_worker.go
  17. 2 2
      pkg/types/islog.go
  18. 4 4
      server/serv_bots/dict_warbot/dict_warbot.go
  19. 1 1
      server/serv_bots/serv_bots.go
  20. 46 71
      server/serv_bots/warbot/angar/angar.go
  21. 11 50
      server/serv_bots/warbot/angar/base/arsenal/arsenal.go
  22. 12 45
      server/serv_bots/warbot/angar/base/bank/bank.go
  23. 1 1
      server/serv_bots/warbot/angar/base/bank/bank_mode/bank_mode.go
  24. 1 0
      server/serv_bots/warbot/angar/base/base.go
  25. 11 48
      server/serv_bots/warbot/angar/base/fuel/fuel.go
  26. 5 17
      server/serv_bots/warbot/angar/base/labor/labor.go
  27. 10 43
      server/serv_bots/warbot/angar/base/market/market.go
  28. 14 58
      server/serv_bots/warbot/angar/base/mine/mine.go
  29. 9 36
      server/serv_bots/warbot/angar/base/polygon/polygon.go
  30. 2 1
      server/serv_bots/warbot/angar/battle/battle.go
  31. 1 0
      server/serv_bots/warbot/angar/battle/battle_register/battle_register.go
  32. 1 0
      server/serv_bots/warbot/angar/battle/battle_wait/battle_wait.go
  33. 2 1
      server/serv_bots/warbot/angar/battle/battle_worker/battle_worker.go
  34. 2 2
      server/serv_bots/warbot/angar/battle/battle_worker/battleon/battleon.go
  35. 12 32
      server/serv_bots/warbot/angar/convoy/convoy.go
  36. 3 3
      server/serv_bots/warbot/angar/death_match/battle_wait/battle_wait.go
  37. 1 1
      server/serv_bots/warbot/angar/death_match/death_register/death_register.go
  38. 1 1
      server/serv_bots/warbot/angar/death_match/death_worker/death_on/death_on.go
  39. 1 1
      server/serv_bots/warbot/angar/death_match/death_worker/death_worker.go
  40. 1 1
      server/serv_bots/warbot/angar/division/div_war/div_war.go
  41. 1 1
      server/serv_bots/warbot/angar/division/div_war/divwaron/divwaron.go
  42. 1 1
      server/serv_bots/warbot/angar/division/divwar/divwar.go
  43. 1 1
      server/serv_bots/warbot/angar/division/divwar/divwaron/divwaron.go
  44. 1 1
      server/serv_bots/warbot/angar/fuel/fuel.go
  45. 21 14
      server/serv_bots/warbot/angar/fuel_attack/fuel_attack.go
  46. 5 4
      server/serv_bots/warbot/angar/masters/bat_masters.go
  47. 3 2
      server/serv_bots/warbot/angar/missions/missions.go
  48. 6 15
      server/serv_bots/warbot/angar/tank_params/tank_params.go
  49. 45 0
      server/serv_bots/warbot/stat_resurs/stat_resurs.go
  50. 1 1
      server/serv_bots/warbot/stat_tank/static_param/static_param.go
  51. 13 13
      server/serv_bots/warbot/stat_tank/tank_stat.go
  52. 4 8
      server/serv_bots/warbot/warbot.go
  53. 10 7
      server/serv_bots/warbot/warbot_net/bot_cookie/bot_cookie.go
  54. 47 85
      server/serv_bots/warbot/warbot_net/bot_net_login/bot_net_login.go
  55. 13 15
      server/serv_bots/warbot/warbot_net/warbot_net.go
  56. 7 7
      server/serv_web/serv_web.go
  57. 5 5
      server/serv_web/web_api/web_api.go
  58. 1 1
      server/serv_web/web_gui/web_gui.go
  59. 5 5
      server/server_stat/server_stat.go

+ 2 - 2
cmd/server/main.go

@@ -1,4 +1,4 @@
-// package main -- пускач длся сервера на файбере
+// package main -- пускач для сервера на файбере
 //
 //	Команда запуска обновлятора noip.com
 //	noip-duc -g p78su.ddns.net,p78git.ddns.net --daemonize -u prospero78su -p Lera_07091978
@@ -52,5 +52,5 @@ func main() {
 		сервер.Отменить()
 	}()
 	ош := сервер.Пуск()
-	лог.Проверить(ош == nil, "Сервер.Пуск(): ошибка при запуске сервера, ош=\n\t%v\n", ош)
+	лог.Паника(ош != nil, "Сервер.Пуск(): ошибка при запуске сервера, ош=\n\t%v\n", ош)
 }

+ 2 - 2
desc_lorca/desc_lorca.go

@@ -19,7 +19,7 @@ func НовДесктопЛорка() *ДесктопЛорка {
 	лог := logger.НовЛоггер("ДесктопЛорка")
 	лог.Инфо("НовДесктопЛорка()\n")
 	гип, ош := lorca_gui.НовЛоркаГуи()
-	лог.Проверить(ош == nil, "НовДесктопЛорка(): при создании ЛоркаГуи, ош=\n\t%v\n", ош)
+	лог.Паника(ош != nil, "НовДесктопЛорка(): при создании ЛоркаГуи, ош=\n\t%v\n", ош)
 	сам := &ДесктопЛорка{
 		гипЛорка: гип,
 		лог:      лог,
@@ -37,7 +37,7 @@ func (сам *ДесктопЛорка) Отменить() {
 func (сам *ДесктопЛорка) Пуск() {
 	go func() {
 		ош := сам.сервер.Пуск()
-		сам.лог.Проверить(ош == nil, "Пуск(): при запуске сервера, ош=\n\t%v\n", ош)
+		сам.лог.Паника(ош != nil, "Пуск(): при запуске сервера, ош=\n\t%v\n", ош)
 	}()
 	сам.сервер.Wg().Wait()
 }

+ 9 - 2
pkg/arena/arena.go

@@ -16,7 +16,8 @@ import (
 type АренаКонфиг struct {
 	Бот_         types.ИБот
 	АренаИмя_    alias.АренаИмя
-	СтрКонтроль_ string
+	СтрКонтроль_ string // Контрольная строка для арены
+	СтрУрл_      string // Адрес арены
 	ФнПуск_      func()
 }
 
@@ -34,6 +35,9 @@ func (конф *АренаКонфиг) контроль() {
 	if конф.АренаИмя_ == "" {
 		panic("АренаКонфиг.СценаИмя_ == \"\"")
 	}
+	if конф.СтрУрл_ == "" {
+		panic("АренаКонфиг.СтрУрл_ == \"\"")
+	}
 }
 
 // Арена -- арена игры
@@ -69,6 +73,9 @@ func (сам *Арена) Пуск() {
 // Обновить -- обновляет арену
 func (сам *Арена) Обновить() {
 	списСтр := сам.СписПолучить()
+	if len(списСтр) == 0 {
+		списСтр = сам.Бот().Сеть().ВебВоркер().Получ(сам.конф.СтрУрл_)
+	}
 	ош := сам.СтрОбновить(списСтр)
 	if ош != nil {
 		log.Printf("Арена.Обновить(): ош=\n\t%v\n", ош)
@@ -86,7 +93,7 @@ func (сам *Арена) СтрОбновить(lstString []string) error {
 
 // СписПолучить -- возвращает список строк секции
 func (сам *Арена) СписПолучить() []string {
-	return сам.списСтр.Get()
+	return сам.списСтр.Получ()
 }
 
 // ОбратВремяУст -- устанавливает новое значение обратного счётчика времени

+ 2 - 2
pkg/arena/arena_context/arena_context.go

@@ -25,8 +25,8 @@ type АренаКонтекст struct {
 func НовАренаКонтекст(бот types.ИБот, сценаИмя alias.АренаИмя) *АренаКонтекст {
 	лог := logger.НовЛоггер("АренаКонтекст " + string(сценаИмя))
 	лог.Инфо("НовАренаКонтекст() " + string(сценаИмя) + "\n")
-	лог.Проверить(бот != nil, "НовАренаКонтекст(): ИБот==nil")
-	лог.Проверить(сценаИмя != "", "НовАренаКонтекст(): сценаИмя не задано")
+	лог.Паника(бот == nil, "НовАренаКонтекст(): ИБот==nil")
+	лог.Паника(сценаИмя == "", "НовАренаКонтекст(): сценаИмя не задано")
 	кнт, фнОтмена := context.WithCancel(бот.Контекст())
 	сам := &АренаКонтекст{
 		бот:       бот,

+ 7 - 4
pkg/arena/arena_string/arena_string.go

@@ -19,7 +19,7 @@ type АренаСтроки struct {
 func НовАренаСтроки(strControl string) *АренаСтроки {
 	лог := logger.НовЛоггер("АренаСтроки")
 	лог.Отладка("НовАренаСтроки(): strControl=%q", strControl)
-	лог.Проверить(strControl != "", "НовАренаСтроки(): strControl is empty")
+	лог.Паника(strControl == "", "НовАренаСтроки(): strControl is empty")
 	сам := &АренаСтроки{
 		val:        make([]string, 0),
 		strControl: strControl,
@@ -27,8 +27,8 @@ func НовАренаСтроки(strControl string) *АренаСтроки {
 	return сам
 }
 
-// Get -- возвращает список строк для анализа
-func (сам *АренаСтроки) Get() []string {
+// Получ -- возвращает список строк для анализа
+func (сам *АренаСтроки) Получ() []string {
 	сам.block.RLock()
 	defer сам.block.RUnlock()
 	return сам.val
@@ -39,7 +39,10 @@ func (сам *АренаСтроки) Set(lstString []string) error {
 	сам.block.Lock()
 	defer сам.block.Unlock()
 	if lstString == nil {
-		return fmt.Errorf("АренаСтроки.Set(): lstString is nil")
+		return fmt.Errorf("АренаСтроки.Set(): lstString == nil")
+	}
+	if len(lstString) == 0 {
+		return fmt.Errorf("АренаСтроки.Set(): lstString ничего не содержит")
 	}
 	isOk := false
 	for _, strControl := range lstString {

+ 5 - 9
pkg/components/arena_net/arena_net.go

@@ -23,8 +23,8 @@ type АренаСеть struct {
 func НовАренаСеть(сцена types.ИСценаСтр, стрУрл string) *АренаСеть {
 	лог := logger.НовЛоггер("АренаСеть")
 	лог.Инфо("НовАренаСеть(): strUrl=%q\n", стрУрл)
-	лог.Проверить(сцена != nil, "НовАренаСеть(): ИСценаСтр == nil")
-	лог.Проверить(стрУрл != "", "НовАренаСеть(): стрУрл пустой\n")
+	лог.Паника(сцена == nil, "НовАренаСеть(): ИСценаСтр == nil")
+	лог.Паника(стрУрл == "", "НовАренаСеть(): стрУрл пустой\n")
 	сам := &АренаСеть{
 		ИБотСеть: сцена.Бот().Сеть(),
 		сцена:    сцена,
@@ -43,9 +43,8 @@ func (сам *АренаСеть) Обновить() {
 	// FIXME: попытка разобраться, что за фигня творится
 	// time.Sleep(time.Millisecond * 500)
 	сам.лог.Отладка("Обновить(): бот=%s\tсцена=%v\n", сам.сцена.Бот().Имя(), сам.сцена.Имя())
-	lstString, ош := сам.клиент.Получ(сам.стрУрл)
-	сам.лог.Проверить(ош == nil, "Обновить(): при выполнении запроса, ош=\n\t%v\n", ош)
-	if ош = сам.сцена.СтрОбновить(lstString); ош != nil {
+	lstString := сам.клиент.Получ(сам.стрУрл)
+	if ош := сам.сцена.СтрОбновить(lstString); ош != nil {
 		сам.лог.Ошибка("Обновить(): при обновлении строк сцены, ош=\n\t%v\n", ош)
 	}
 }
@@ -58,9 +57,6 @@ func (сам *АренаСеть) Get(strLink string) (lstString []string, err e
 	if !strings.Contains(strLink, сам.стрУрл) {
 		return nil, fmt.Errorf("АренаСеть.Get(): strLink(%v) не содержит strUrl(%v)", strLink, сам.стрУрл)
 	}
-	lstString, err = сам.клиент.Получ(strLink)
-	if err != nil {
-		return nil, fmt.Errorf("АренаСеть.Get(): err=\n\t%v", err)
-	}
+	lstString = сам.клиент.Получ(strLink)
 	return lstString, nil
 }

+ 9 - 31
pkg/components/arena_net/http_worker/http_worker.go

@@ -3,7 +3,6 @@ package http_worker
 
 import (
 	"context"
-	"fmt"
 	"io"
 	"net/http"
 	"strings"
@@ -41,47 +40,26 @@ func НовХттпВоркер(botNet types.ИБотСеть, conn *http.Client
 }
 
 // Получ -- потокобезопасно возвращает список строк по ссылке
-func (сам *ХттпВоркер) Получ(strLink string) ([]string, error) {
+func (сам *ХттпВоркер) Получ(strLink string) []string {
 	блок.Lock()
 	defer блок.Unlock()
-	// if strLink == "https://wartank.ru/production/Mine" {
-	сам.лог.Отладка("Получ(): link=%v\n", strLink)
-	// }
+
 	ctxCancel, fnCancel := context.WithTimeout(сам.botNet.Контекст(), time.Second*10)
 	defer fnCancel()
 	запрос, ош := http.NewRequestWithContext(ctxCancel, "GET", strLink, nil)
-	if ош != nil {
-		сам.статистика.IncErr()
-		return nil, fmt.Errorf("ХттпВоркер.Получ(): при создании запроса, err=\n\t%w", ош)
-	}
+	сам.лог.Паника(ош != nil, "ХттпВоркер.Получ(): при создании запроса, err=\n\t%v\n", ош)
 	запрос.Header.Set("User-Agent", "Mozilla Firefox 106.1")
 	ответ, ош := сам.conn.Do(запрос)
-	if ош != nil {
-		сам.статистика.IncErr()
-		return nil, fmt.Errorf("ХттпВоркер.Получ(): при выполнении GET-запроса, err=\n\t%w", ош)
-	}
+	сам.лог.Паника(ош != nil, "ХттпВоркер.Получ(): при выполнении GET-запроса, err=\n\t%v\n", ош)
 	defer ответ.Body.Close()
-
-	if ответ.StatusCode != http.StatusOK {
-		сам.статистика.IncErr()
-		return nil, fmt.Errorf("ХттпВоркер.Получ(): code=%v, status=%v", ответ.StatusCode, ответ.Status)
-	}
+	сам.лог.Паника(ответ.StatusCode != http.StatusOK, "ХттпВоркер.Получ(): code=%v, status=%v", ответ.StatusCode, ответ.Status)
 	binData, ош := io.ReadAll(ответ.Body)
-	if ош != nil {
-		сам.статистика.IncErr()
-		return nil, fmt.Errorf("ХттпВоркер.Получ(): при чтении тела ответа, err=\n\t%w", ош)
-	}
-	if len(binData) == 0 {
-		сам.статистика.IncErr()
-		return nil, fmt.Errorf("ХттпВоркер.Получ(): пустое тело ответа, err=\n\t%w", ош)
-	}
+	сам.лог.Паника(ош != nil, "ХттпВоркер.Получ(): при чтении тела ответа, err=\n\t%v\n", ош)
+	сам.лог.Паника(len(binData) == 0, "ХттпВоркер.Получ(): пустое тело ответа")
 	lenData := len(binData) + len(strLink)
 	сам.статистика.AddByte(lenData)
 
 	lstString := strings.Split(string(binData), "\n")
-	if len(lstString) == 0 {
-		сам.статистика.IncErr()
-		return nil, fmt.Errorf("ХттпВоркер.Получ(): lstString is empty")
-	}
-	return lstString, nil
+	сам.лог.Паника(len(lstString) == 0, "ХттпВоркер.Получ(): пустая строка ответа")
+	return lstString
 }

+ 1 - 5
pkg/components/arena_net/scene_web_worker/scene_web_worker.go

@@ -2,7 +2,6 @@
 package scene_web_worker
 
 import (
-	"fmt"
 	"sync"
 	"wartank/pkg/components/kernel/logger"
 	"wartank/pkg/types"
@@ -39,9 +38,6 @@ func (сам *СценаВебВоркер) Получ(ссылка string) (lst
 	// if ссылка == "https://wartank.ru/production/Mine" {
 	сам.лог.Отладка("СценаВебВоркер.Получ(): link=%v\n", ссылка)
 	// }
-	списОтвет, err := сам.вебВоркер.Получ(ссылка)
-	if err != nil {
-		return nil, fmt.Errorf("СценаВебВоркер.Получ(): при выполнении GET-запроса, err=\n\t%w", err)
-	}
+	списОтвет := сам.вебВоркер.Получ(ссылка)
 	return списОтвет, nil
 }

+ 0 - 1
pkg/components/kernel/keeper/keeper_test.go

@@ -5,7 +5,6 @@ import (
 	"syscall"
 	"testing"
 	"time"
-
 	"wartank/pkg/components/kernel/slog"
 	"wartank/pkg/mock/mock_env"
 	"wartank/pkg/mock/mockkernel"

+ 3 - 3
pkg/components/kernel/kernel.go

@@ -1,4 +1,4 @@
-// Package kernel -- объект ядра прилоэжения
+// Package kernel -- объект ядра приложения
 //
 //	Содержит базовый функционал сервиса
 package kernel
@@ -43,7 +43,7 @@ func НовЯдро() types.ИЯдро {
 	var ош error
 	сам.ctxApp, сам.fnCancel = context.WithCancel(сам.ctxBg)
 	сам.хран, ош = store.НовХранилище(сам, "./store")
-	сам.лог.Проверить(сам.хран != nil, "НовЯдро(): in creste IStore, ош=\n\t%v\n", ош)
+	сам.лог.Паника(сам.хран == nil, "НовЯдро(): при создании ИХранилище, ош=\n\t%v\n", ош)
 	сам.блок.Lock()
 	сам.лог = logger.НовЛоггер("Ядро")
 	сам.блок.Unlock()
@@ -57,7 +57,7 @@ func (сам *Ядро) Хранилище() types.ИХранилище {
 	return сам.хран
 }
 
-// Wg -- возвращает объект групповой сихнронизации
+// Wg -- возвращает объект групповой синхронизации
 func (сам *Ядро) Wg() types.IWgName {
 	return сам.wg
 }

+ 0 - 1
pkg/components/kernel/kernel_test.go

@@ -9,7 +9,6 @@ import (
 // Тестер для базового объекта приложения
 type tester struct {
 	t    *testing.T
-	err  error
 	kern types.ИЯдро
 }
 

+ 3 - 3
pkg/components/kernel/logger/logger.go

@@ -21,11 +21,11 @@ func НовЛоггер(префикс string) *Логгер {
 	return сам
 }
 
-// Проверить -- проверяет на совпадение условия
-func (сам *Логгер) Проверить(условие bool, формат string, аргументы ...interface{}) {
+// Паника -- проверяет на совпадение условия
+func (сам *Логгер) Паника(условие bool, формат string, аргументы ...interface{}) {
 	блок.Lock()
 	defer блок.Unlock()
-	if !условие {
+	if условие {
 		panic(fmt.Sprintf("ПАНИК "+сам.префикс+"."+формат, аргументы...))
 	}
 }

+ 2 - 2
pkg/components/kernel/slog/slog.go

@@ -65,8 +65,8 @@ func НовСлог(kern types.ИЯдро) (*Слог, error) {
 	return сам, nil
 }
 
-// Проверить -- проверяет на правильное утверждение
-func (сам *Слог) Проверить(усл bool, формат string, значения ...interface{}) {
+// Паника -- проверяет на правильное утверждение
+func (сам *Слог) Паника(усл bool, формат string, значения ...interface{}) {
 	if !усл {
 		panic(fmt.Sprintf(формат, значения...))
 	}

+ 9 - 9
pkg/components/kernel/store/store.go

@@ -19,7 +19,7 @@ const (
 // Хранилище -- главный тип плагина хранилища
 type Хранилище struct {
 	ядро   types.ИЯдро
-	genm   string              // Путь к хранилищу
+	путь   string              // Путь к хранилищу
 	isWork *safe_bool.БезопБул // Признак открытой базы
 	бд     *leveldb.DB         // Объект хранилища
 	блок   sync.Mutex          // Блокировка для безопасности потоков
@@ -30,11 +30,11 @@ type Хранилище struct {
 func НовХранилище(ядро types.ИЯдро, путь string) (*Хранилище, error) {
 	лог := logger.НовЛоггер("Хранилище")
 	лог.Инфо("НовХранилище()\n")
-	лог.Проверить(ядро != nil, "НовХранилище(): ИЯдро == nil\n")
-	лог.Проверить(путь != "", "НовХранилище(): путь пустой\n")
+	лог.Паника(ядро == nil, "НовХранилище(): ИЯдро == nil\n")
+	лог.Паника(путь == "", "НовХранилище(): путь пустой\n")
 	сам := &Хранилище{
 		ядро:   ядро,
-		genm:   путь,
+		путь:   путь,
 		isWork: safe_bool.НовБезопБул(),
 		лог:    лог,
 	}
@@ -105,7 +105,7 @@ func (sf *Хранилище) Удалить(key string) error {
 func (сам *Хранилище) открыть() {
 	сам.блок.Lock()
 	defer сам.блок.Unlock()
-	бд, ош := leveldb.OpenFile(сам.genm, nil)
+	бд, ош := leveldb.OpenFile(сам.путь, nil)
 	фнОткрыть := func() {
 		сам.бд = бд
 		сам.isWork.Уст()
@@ -116,8 +116,8 @@ func (сам *Хранилище) открыть() {
 		return
 	}
 	сам.лог.Внимание("Хранилище.открыть(): при открытии БД, ош=\n\t%v\n", ош)
-	бд, ош = leveldb.RecoverFile(сам.genm, nil)
-	сам.лог.Проверить(ош == nil, "Хранилище.открыть(): при восстановлении БД, ош=\n\t%v\n", ош)
+	бд, ош = leveldb.RecoverFile(сам.путь, nil)
+	сам.лог.Паника(ош != nil, "Хранилище.открыть(): при восстановлении БД, ош=\n\t%v\n", ош)
 	фнОткрыть()
 }
 
@@ -128,7 +128,7 @@ func (сам *Хранилище) закрыть() {
 	defer сам.блок.Unlock()
 	сам.isWork.Сброс()
 	err := сам.бд.Close()
-	сам.лог.Проверить(err == nil, "Хранилище.закрыть(): при закрытии БД, err=\n\t%v\n", err)
+	сам.лог.Паника(err != nil, "Хранилище.закрыть(): при закрытии БД, err=\n\t%v\n", err)
 	ош := сам.ядро.Wg().Done(стрХранилище)
-	сам.лог.Проверить(ош == nil, "Хранилище.закрыть(): при удалении группы ожидания, ош=\n\t%v\n", ош)
+	сам.лог.Паника(ош != nil, "Хранилище.закрыть(): при удалении группы ожидания, ош=\n\t%v\n", ош)
 }

+ 1 - 1
pkg/types/ibot_cookie.go

@@ -7,7 +7,7 @@ import (
 // ИБотКуки -- куки серверного бота
 type ИБотКуки interface {
 	// Уст -- устанавливает куки бота
-	Уст(куки []*http.Cookie) error
+	Уст(куки []*http.Cookie)
 	// Получ -- возвращает куки бота
 	Получ() []*http.Cookie
 }

+ 1 - 1
pkg/types/ihttp_worker.go

@@ -3,5 +3,5 @@ package types
 // ИХттпВоркер -- интерфейс потокобезопасного HTTP-воркера бота
 type ИХттпВоркер interface {
 	// Получ -- потокобезопасно возвращает список строк по ссылке
-	Получ(ссылка string) ([]string, error)
+	Получ(ссылка string) []string
 }

+ 2 - 2
pkg/types/islog.go

@@ -14,6 +14,6 @@ type ИЛоггер interface {
 	Внимание(str string, lst ...interface{})
 	// Ошибка -- вывод ошибки
 	Ошибка(str string, lst ...interface{})
-	// Проверить -- проверяет на правильное утверждение
-	Проверить(усл bool, формат string, значения ...interface{})
+	// Паника -- проверяет на паническое утверждение
+	Паника(усл bool, формат string, значения ...interface{})
 }

+ 4 - 4
server/serv_bots/dict_warbot/dict_warbot.go

@@ -29,7 +29,7 @@ type СловарьБотов struct {
 func НовСловарьБотов(сервер types.ИСервер) *СловарьБотов {
 	лог := logger.НовЛоггер("СловарьБотов")
 	лог.Инфо("НовСловарьБотов()\n")
-	лог.Проверить(сервер != nil, "НовСловарьБотов(): ИСервер==nil")
+	лог.Паника(сервер == nil, "НовСловарьБотов(): ИСервер==nil")
 	сам := &СловарьБотов{
 		сервер:  сервер,
 		хран:    сервер.Хранилище(),
@@ -88,7 +88,7 @@ func (сам *СловарьБотов) load() {
 	binNumber, err := сам.хран.Получ(strBotList)
 	if err != nil {
 		if !strings.Contains(err.Error(), "not found") {
-			сам.лог.Проверить(false, "СловарьБотов.load(): при загрзке списка ботов, ош=\n\t%n\t", err)
+			сам.лог.Паника(true, "СловарьБотов.load(): при загрузке списка ботов, ош=\n\t%n\t", err)
 		}
 	}
 	strNumbers := string(binNumber)
@@ -101,14 +101,14 @@ func (сам *СловарьБотов) load() {
 			continue
 		}
 		iNumber, err := strconv.Atoi(strNumber)
-		сам.лог.Проверить(err == nil, "СловарьБотов.load(): при получении номера бота, ош=\n\t%v\n", err)
+		сам.лог.Паника(err != nil, "СловарьБотов.load(): при получении номера бота, ош=\n\t%v\n", err)
 		number := alias.БотНомер(iNumber)
 		_, isOk := сам.словарь[number]
 		if isOk {
 			continue
 		}
 		bot, err := warbot.ЗагрузитьВарБот(сам.сервер, number)
-		сам.лог.Проверить(err == nil, "СловарьБотов.load(): при загрузке бота, ош=\n\t%v\n", err)
+		сам.лог.Паника(err != nil, "СловарьБотов.load(): при загрузке бота, ош=\n\t%v\n", err)
 		if bot.АвтоИграЕсли() {
 			go bot.Пуск()
 		}

+ 1 - 1
server/serv_bots/serv_bots.go

@@ -20,7 +20,7 @@ type БотоФерма struct {
 func НовБотоФерма(серв types.ИСервер) *БотоФерма {
 	лог := серв.Слог()
 	лог.Инфо("НовБотоФерма()\n")
-	лог.Проверить(серв != nil, "НовБотоФерма(): ИСервер == nil")
+	лог.Паника(серв == nil, "НовБотоФерма(): ИСервер == nil")
 	сам := &БотоФерма{
 		серв: серв,
 		хран: серв.Хранилище(),

+ 46 - 71
server/serv_bots/warbot/angar/angar.go

@@ -5,7 +5,6 @@ import (
 	"log"
 	"strconv"
 	"strings"
-	"sync"
 	"time"
 	"wartank/pkg/alias"
 	"wartank/pkg/arena"
@@ -14,13 +13,13 @@ import (
 	"wartank/server/serv_bots/warbot/angar/base"
 	"wartank/server/serv_bots/warbot/angar/battle"
 	"wartank/server/serv_bots/warbot/angar/convoy"
-	"wartank/server/serv_bots/warbot/angar/fuel"
 	"wartank/server/serv_bots/warbot/angar/fuel_attack"
 	"wartank/server/serv_bots/warbot/angar/masters"
 	"wartank/server/serv_bots/warbot/angar/missions"
 	"wartank/server/serv_bots/warbot/angar/netstat"
 	"wartank/server/serv_bots/warbot/angar/tank_params"
-	"wartank/server/serv_bots/warbot/tank_stat/static_param"
+	"wartank/server/serv_bots/warbot/stat_resurs"
+	"wartank/server/serv_bots/warbot/stat_tank/static_param"
 )
 
 /*
@@ -30,30 +29,21 @@ import (
 // Ангар -- ангар для танка
 type Ангар struct {
 	types.ИАрена
-	слог       types.ИЛоггер
-	сеть       types.ИАренаСеть
-	топливоБой *fuel_attack.ТопливоБой
+	слог types.ИЛоггер
+	сеть types.ИАренаСеть
+	бот  types.ИБот
 
-	бот types.ИБот
-	// конвой   *convoy.Конвой
-	сражение *battle.Сражение
-	битва    *masters.БитваМастеров
-	база     *base.База
-	миссии   types.ИМиссии
-
-	золото        types.ИСтатПарам
-	уровень       types.ИСтатПарам
-	progress      types.ИСтатПарам
-	топливо       *fuel.Топливо
+	уровень  types.ИСтатПарам
+	progress types.ИСтатПарам
+	// топливо       *fuel.Топливо
 	игроковОнлайн types.ИСтатПарам
 
-	сереброВсего types.ИСтатПарам
 	silverOnline types.ИСтатПарам
 
 	сетьТанкСтат *netstat.NetStat
 	танкПарам    *tank_params.ТанкПараметры
-	блок         sync.Mutex
 	словАрена    map[alias.АренаИмя]types.ИАрена
+	ресурсы      *stat_resurs.СтатРесурсы
 }
 
 // НовАнгар -- возвращает новый *Angar
@@ -66,11 +56,9 @@ func НовАнгар(бот types.ИБот) (*Ангар, error) {
 	сам := &Ангар{
 		слог:          бот.Сервер().Слог(),
 		бот:           бот,
-		золото:        static_param.НовСтатПарам("gold"),
 		уровень:       static_param.НовСтатПарам("level"),
 		progress:      static_param.НовСтатПарам("progress"),
 		игроковОнлайн: static_param.НовСтатПарам("online"),
-		сереброВсего:  static_param.НовСтатПарам("silver_all"),
 		silverOnline:  static_param.НовСтатПарам("silver_online"),
 		танкПарам:     танкПарам,
 		словАрена:     make(map[alias.АренаИмя]types.ИАрена),
@@ -80,16 +68,16 @@ func НовАнгар(бот types.ИБот) (*Ангар, error) {
 		АренаИмя_:    "Ангар",
 		СтрКонтроль_: "<title>Ангар</title>",
 		ФнПуск_:      сам.пуск,
+		СтрУрл_:      "https://wartank.ru/angar",
 	}
 	сам.ИАрена = arena.НовАрена(аренаКонф)
 	сам.сеть = arena_net.НовАренаСеть(сам, "https://wartank.ru/angar")
 	var err error
-	{ // Сеть атаки
-		сам.топливоБой, err = fuel_attack.НовТопливоБой(сам)
-		if err != nil {
-			return nil, fmt.Errorf("НовАнгар(): in create <AngarAttackNet>, err=\n\t%w", err)
-		}
+	топливоБой, err := fuel_attack.НовТопливоБой(сам)
+	if err != nil {
+		return nil, fmt.Errorf("НовАнгар(): in create <AngarAttackNet>, err=\n\t%w", err)
 	}
+	сам.словАрена["топливоБой"] = топливоБой
 	{ // Статистика
 		сам.сетьТанкСтат, err = netstat.NewNetStat(сам.бот)
 		if err != nil {
@@ -98,30 +86,21 @@ func НовАнгар(бот types.ИБот) (*Ангар, error) {
 	}
 	конвой := convoy.НовКонвой(сам.бот)
 	сам.словАрена["конвой"] = конвой
-	// Сражение
-	сам.сражение = battle.НовСражение(сам.бот)
-	{ // Битва мастеров
-		сам.битва = masters.НовБитваМастеров(сам.бот)
-		// go сам.batMas.Run()
-	}
-	{ // База
-		сам.база, err = base.НовБаза(сам)
-		if err != nil {
-			return nil, fmt.Errorf("НовАнгар(): in make IBase, err=\n\t%w", err)
-		}
-	}
-	{ // Миссии
-		сам.миссии, err = missions.НовМиссии(сам.бот)
-		if err != nil {
-			return nil, fmt.Errorf("НовАнгар(): in make *Missions, err=\n\t%w", err)
-		}
+	сражение := battle.НовСражение(сам.бот)
+	сам.словАрена["сражение"] = сражение
+	битваМастеров := masters.НовБитваМастеров(сам.бот)
+	сам.словАрена["битваМастеров"] = битваМастеров
+	база, err := base.НовБаза(сам)
+	if err != nil {
+		return nil, fmt.Errorf("НовАнгар(): in make IBase, err=\n\t%w", err)
 	}
-	{ // Топливо
-		сам.топливо, err = fuel.НовТопливо(сам)
-		if err != nil {
-			return nil, fmt.Errorf("НовАнгар(): in make *Missions, err=\n\t%w", err)
-		}
+	сам.словАрена["база"] = база
+	миссии, err := missions.НовМиссии(сам.бот)
+	if err != nil {
+		return nil, fmt.Errorf("НовАнгар(): in make *Missions, err=\n\t%w", err)
 	}
+	сам.словАрена["миссии"] = миссии
+	сам.ресурсы = stat_resurs.НовСтатРесурсы(сам)
 	_ = types.ИАнгар(сам)
 	return сам, nil
 }
@@ -136,19 +115,14 @@ func (сам *Ангар) Обновить() {
 		return
 	}
 	сам.словАрена["конвой"].Пуск()
-	сам.топливо.Обновить()
+	сам.ресурсы.Топливо().Обновить()
 }
 
 // Запускает обработку ангара
 func (сам *Ангар) пуск() {
 	{ // Запуск компонентов
-		сам.топливоБой.Пуск()
-		сам.сражение.Пуск()
-		сам.битва.Пуск()
-		сам.база.Пуск()
-		сам.миссии.Пуск()
 		сам.танкПарам.Пуск()
-		go сам.топливо.Run()
+		go сам.ресурсы.Топливо().Run()
 	}
 	фнЦикл := func() bool {
 		сам.Обновить()
@@ -158,6 +132,9 @@ func (сам *Ангар) пуск() {
 			log.Printf("Ангар.Run(): in update ICountTime, err=\n\t%v\n", err)
 			return false
 		}
+		for _, арена := range сам.словАрена {
+			арена.Пуск()
+		}
 		return true
 	}
 	go func() {
@@ -194,12 +171,12 @@ func (сам *Ангар) РесурсыОбновить() {
 
 // IMissions -- возвращает ссылку на объект миссий
 func (сам *Ангар) Миссии() types.ИМиссии {
-	return сам.миссии
+	return сам.словАрена["миссии"].(types.ИМиссии)
 }
 
 // Сражение -- возвращает объект сражения
 func (сам *Ангар) Сражение() types.ИСражениеСцена {
-	return сам.сражение
+	return сам.словАрена["сражение"].(types.ИСражениеСцена)
 }
 
 // Конвой -- возвращает объект конвоя
@@ -209,12 +186,12 @@ func (сам *Ангар) Конвой() types.ИКонвой {
 
 // Золото -- возвращает объект золота
 func (сам *Ангар) Золото() types.ИСтатПарам {
-	return сам.золото
+	return сам.ресурсы.Золото()
 }
 
 // Топливо -- возвращает объект топлива
 func (сам *Ангар) Топливо() types.ИСтатПарам {
-	return сам.топливо.Fuel()
+	return сам.ресурсы.Топливо().Fuel()
 }
 
 // Уровень -- возвращает объект уровня игрока
@@ -234,7 +211,7 @@ func (сам *Ангар) ИгрокиОнлайн() types.ИСтатПарам
 
 // СереброВсего -- возвращает объект всего серебра в ангаре
 func (сам *Ангар) СереброВсего() types.ИСтатПарам {
-	return сам.сереброВсего
+	return сам.ресурсы.СереброВсего()
 }
 
 // СереброЗаработаноСессия -- возвращает объект серебра за сессию в ангаре
@@ -244,27 +221,25 @@ func (сам *Ангар) СереброЗаработаноСессия() types
 
 // СереброОбновить -- на основе фактического серебра -- обновляет выработанное серебро
 func (сам *Ангар) СереброОбновить(silverFact int) {
-	if сам.сереброВсего.Получ() == 0 { // Если запуск
-		сам.сереброВсего.Уст(silverFact)
+	if сам.СереброВсего().Получ() == 0 { // Если запуск
+		сам.СереброВсего().Уст(silverFact)
 		return
 	}
-	if сам.сереброВсего.Получ() > silverFact { // Если потрачено серебро
-		сам.сереброВсего.Уст(silverFact)
+	if сам.СереброВсего().Получ() > silverFact { // Если потрачено серебро
+		сам.СереброВсего().Уст(silverFact)
 		return
 	}
-	if сам.сереброВсего.Получ() < silverFact { // Если заработано
+	if сам.СереброВсего().Получ() < silverFact { // Если заработано
 		so := сам.silverOnline.Получ()
-		sd := silverFact - сам.сереброВсего.Получ()
+		sd := silverFact - сам.СереброВсего().Получ()
 		сам.silverOnline.Уст(so + sd)
 	}
-	сам.сереброВсего.Уст(silverFact)
+	сам.СереброВсего().Уст(silverFact)
 }
 
 // База -- возвращает базу
 func (сам *Ангар) База() types.ИБаза {
-	сам.блок.Lock()
-	defer сам.блок.Unlock()
-	return сам.база
+	return сам.словАрена["база"].(types.ИБаза)
 }
 
 /* Проверяет на исполнение конвоя
@@ -309,7 +284,7 @@ func (сам *Ангар) сереброНайти() {
 		// log._rintf("ERRO AngarNet.findSilver(): silver(%v) not number, err=\n\t%v\n", strSilver, err)
 		return
 	}
-	сам.сереброВсего.Уст(iSilver)
+	сам.СереброВсего().Уст(iSilver)
 }
 
 // Ищет в теле текста ангара золото

+ 11 - 50
server/serv_bots/warbot/angar/base/arsenal/arsenal.go

@@ -13,7 +13,7 @@ import (
 	"wartank/pkg/components/kernel/logger"
 	"wartank/pkg/components/web_log"
 	"wartank/pkg/types"
-	"wartank/server/serv_bots/warbot/tank_stat/static_param"
+	"wartank/server/serv_bots/warbot/stat_tank/static_param"
 )
 
 const (
@@ -68,6 +68,7 @@ func НовАрсенал(база types.ИБаза) (types.ИАрсенал, er
 		АренаИмя_:    "Арсенал",
 		СтрКонтроль_: `<span class="green2">Ремкомплект</span><br/>`,
 		ФнПуск_:      сам.пуск,
+		СтрУрл_:      "https://wartank.ru/production/Armory",
 	}
 	сам.ИАрена = arena.НовАрена(аренаКонфиг)
 	сам.вЛог = web_log.НовВебЛог(true)
@@ -151,24 +152,14 @@ func (сам *Арсенал) пуск() {
 // Проверяет необходимость постройки
 func (сам *Арсенал) проверитьПостроить() bool {
 	сам.вЛог.Добавить("Арсенал.проверитьПостроить()\n")
-	_, ош := сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/Armory")
-	if ош != nil {
-		сам.лог.Ошибка("проверитьПостроить(): при выполнении запроса, ош=\n\t%v\n", ош)
-		сам.вЛог.Добавить("ОШИБКА Арсенал.проверитьПостроить(): при выполнении запроса, err=\n\t%v\n", ош)
-		return false
-	}
+	_ = сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/Armory")
 	return true
 }
 
 // Обновляет текущий уровень арсенала (может быть не построена)
 func (сам *Арсенал) уровеньОбновить() bool {
 	сам.вЛог.Добавить("Арсенал.уровеньОбновить()\n")
-	списСтр, ош := сам.сеть.ВебВоркер().Получ("http://wartank.ru/buildings")
-	if ош != nil {
-		сам.лог.Ошибка("уровеньОбновить(): при выполнении запроса, ош=\n\t%v\n", ош)
-		сам.вЛог.Добавить("ОШИБКА Арсенал.уровеньОбновить(): in make request, err=\n\t%v\n", ош)
-		return false
-	}
+	списСтр := сам.сеть.ВебВоркер().Получ("http://wartank.ru/buildings")
 	// <span class="green2">Оружейная - 0</span><br/>
 	var (
 		еслиНайти = false
@@ -201,12 +192,7 @@ func (сам *Арсенал) уровеньОбновить() bool {
 // Строит арсенал при нулевом уровне
 func (сам *Арсенал) построить() (bool, error) {
 	сам.вЛог.Добавить("Арсенал.построить()\n")
-	списСтр, ош := сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/Armory")
-	if ош != nil {
-		сам.лог.Ошибка("построить(): при выполнении запроса, ош=\n\t%v\n", ош)
-		сам.вЛог.Добавить("Арсенал.построить(): при выполнении запроса, err=\n\t%v\n", ош)
-		return false, fmt.Errorf("")
-	}
+	списСтр := сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/Armory")
 	// <span class="green2">Арсенал - 0</span><br/>
 	var (
 		еслиНайти = false
@@ -228,12 +214,7 @@ func (сам *Арсенал) построить() (bool, error) {
 	_стр = strings.TrimSuffix(_стр, `">`)
 	ссылка := "https://wartank.ru/building-upgrade/" + _стр
 	// https://wartank.ru/building-upgrade/Armory?35-1.ILinkListener-upgradeLink-link
-	списСтр, ош = сам.сеть.ВебВоркер().Получ(ссылка)
-	if ош != nil {
-		сам.лог.Ошибка("построить(): при GET-команде 'построить арсенал', ош=\n\t%v\n", ош)
-		сам.вЛог.Добавить("ОШИБКА Арсенал.построить(): при GET-команде 'построить арсенал', err=\n\t%v\n", ош)
-		return false, fmt.Errorf("")
-	}
+	списСтр = сам.сеть.ВебВоркер().Получ(ссылка)
 	еслиНайти = false
 	// "<a class=\"simple-but border mb5\" href=\"Armory?14-1.ILinkListener-upgradeLink-link\">"
 	for _, стр = range списСтр {
@@ -258,15 +239,10 @@ func (сам *Арсенал) проапгрейдить() bool {
 		еслиНайти = false
 		списСтр   []string
 		стр       = ""
-		ош        error
 	)
 	фнКупить := func() bool {
 		defer time.Sleep(time.Millisecond * 1000)
-		списСтр, ош = сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/Armory")
-		if ош != nil {
-			сам.вЛог.Добавить("ОШИБКА Арсенал.проапгрейдить().фнКупить(): при GET-команде 'купить постройку арсенала', err=\n\t%v\n", ош)
-			return false
-		}
+		списСтр = сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/Armory")
 		for _, стр = range списСтр {
 			// <a class="simple-but border mb5" href="Armory?5-1.ILinkListener-upgradeLink-link">
 			if strings.Contains(стр, `ILinkListener-upgradeLink-link`) {
@@ -284,11 +260,7 @@ func (сам *Арсенал) проапгрейдить() bool {
 		// https://wartank.ru/building-upgrade/Armory?4-1.ILinkListener-upgradeLink-link
 		// <a class="simple-but border mb5" href="Armory?50-1.ILinkListener-upgradeLink-link">
 		ссылка := "https://wartank.ru/building-upgrade/" + _стр
-		списСтр, ош = сам.сеть.ВебВоркер().Получ(ссылка)
-		if ош != nil {
-			сам.вЛог.Добавить("ОШИБКА Арсенал.проапгрейдить().фнКупить(): при GET-команде 'купить постройку арсенала', err=\n\t%v\n", ош)
-			return false
-		}
+		списСтр = сам.сеть.ВебВоркер().Получ(ссылка)
 		// Проверить, что постройка состоялась
 		for _, стр := range списСтр {
 			if strings.Contains(стр, "ILinkListener-upgradeLink-link") {
@@ -317,11 +289,7 @@ func (сам *Арсенал) проапгрейдить() bool {
 		_стр = strings.TrimSuffix(_стр, `"><span><span>да, подтверждаю</span></span></a>`)
 		// https://wartank.ru/wicket/page?6-1.ILinkListener-confirmLink
 		ссылка := "https://wartank.ru" + _стр
-		списСтр, ош = сам.сеть.ВебВоркер().Получ(ссылка)
-		if ош != nil {
-			сам.вЛог.Добавить("ОШИБКА Арсенал.проапгрейдить().фнПодтверждение(): при GET-команде 'подтвердить постройку склада топлива', err=\n\t%v\n", ош)
-			return false
-		}
+		списСтр = сам.сеть.ВебВоркер().Получ(ссылка)
 		// Проверить, что постройка состоялась
 		for _, стр := range списСтр {
 			if strings.Contains(стр, "<title>Вы сделали слишком большую паузу</title>") {
@@ -668,11 +636,7 @@ func (сам *Арсенал) сделатьРемку() bool {
 		еслиНайдено bool
 		инд         int
 	)
-	lstArsenal, ош := сам.сеть.ВебВоркер().Получ("https://wartank.ru/production/Armory")
-	if ош != nil {
-		log.Printf("Арсенал.сделатьРемку(): при получении страницы арсенала, err=\n\t%v\n", ош)
-		return false
-	}
+	lstArsenal := сам.сеть.ВебВоркер().Получ("https://wartank.ru/production/Armory")
 	// <span class="green2">Ремкомплект</span><br/>
 	for инд, стрВых = range lstArsenal {
 		if strings.Contains(стрВых, `<span class="green2">Ремкомплект</span><br/>`) {
@@ -694,10 +658,7 @@ func (сам *Арсенал) сделатьРемку() bool {
 	// https://wartank.ru/production/Armory?37-1.ILinkListener-productions-3-production-startProduceLink
 	ссылка := "https://wartank.ru/production/" + _ссылка
 	time.Sleep(time.Millisecond * 50)
-	if _, err := сам.сеть.ВебВоркер().Получ(ссылка); err != nil {
-		log.Printf("Арсенал.сделатьРемку(): при отдаче команды сделать ремку, err=\n\t%v\n", err)
-		return false
-	}
+	 _= сам.сеть.ВебВоркер().Получ(ссылка)
 	сам.АренаСостояние().СостояниеУст(стрРемки)
 	return true
 }

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

@@ -11,7 +11,7 @@ import (
 	"wartank/pkg/components/arena_net"
 	"wartank/pkg/types"
 	"wartank/server/serv_bots/warbot/angar/base/bank/bank_mode"
-	"wartank/server/serv_bots/warbot/tank_stat/static_param"
+	"wartank/server/serv_bots/warbot/stat_tank/static_param"
 )
 
 /*
@@ -40,6 +40,7 @@ func НовБанк(база types.ИБаза) (*Банк, error) {
 		АренаИмя_:    "Банк",
 		СтрКонтроль_: `<span class="green2">Серебро</span><br/>`,
 		ФнПуск_:      сам.пуск,
+		СтрУрл_:      "https://wartank.ru/production/Bank",
 	}
 	сам.ИАрена = arena.НовАрена(аренаКонфиг)
 	сам.сеть = arena_net.НовАренаСеть(сам, "https://wartank.ru/production/Bank")
@@ -94,11 +95,7 @@ func (сам *Банк) проверитьУскорить() bool {
 		стрСсылка   = ""
 		еслиНайдено = false
 	)
-	списБанк, ош := сам.сеть.ВебВоркер().Получ("https://wartank.ru/buildings")
-	if ош != nil {
-		log.Printf("Банк.проверУскорить(): при получении страницы базы, ош=\n\t%v\n", ош)
-		return false
-	}
+	списБанк := сам.сеть.ВебВоркер().Получ("https://wartank.ru/buildings")
 	// <td style="width:50%;padding-left:1px;"><a class="simple-but border" href="buildings?1-1.ILinkListener-buildings-1-building-rootBlock-actionPanel-freeBoostLink"><span><span>Ускорение</span></span></a>
 	for _, стрСсылка = range списБанк {
 		if strings.Contains(стрСсылка, `.ILinkListener-buildings-1-building-rootBlock-actionPanel-freeBoostLink`) {
@@ -112,11 +109,7 @@ func (сам *Банк) проверитьУскорить() bool {
 	_ссылка := strings.TrimPrefix(стрСсылка, `<td style="width:50%;padding-left:1px;"><a class="simple-but border" href="`)
 	_ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Ускорение</span></span></a>`)
 	ссылка := "https://wartank.ru/" + _ссылка
-	_, ош = сам.сеть.ВебВоркер().Получ(ссылка)
-	if ош != nil {
-		log.Printf("Банк.проверУскорить(): при выполнении ускорения, ош=\n\t%v\n", ош)
-		return false
-	}
+	_= сам.сеть.ВебВоркер().Получ(ссылка)
 	return true
 }
 
@@ -126,11 +119,7 @@ func (сам *Банк) забрать() {
 		strOut      string
 		еслиНайдено bool
 	)
-	списБанк, ош := сам.сеть.ВебВоркер().Получ("https://wartank.ru/buildings")
-	if ош != nil {
-		log.Printf("Банк.забрать(): при выполнении GET-запроса 'получить страницу базы', ош=\n\t%v\n", ош)
-		return
-	}
+	списБанк := сам.сеть.ВебВоркер().Получ("https://wartank.ru/buildings")
 	// <a class="simple-but border" href="buildings?0-1.ILinkListener-buildings-1-building-rootBlock-actionPanel-takeProductionLink"><span><span>Забрать</span></span></a>
 	for _, strOut = range списБанк {
 		if strings.Contains(strOut, `.ILinkListener-buildings-1-building-rootBlock-actionPanel-takeProductionLink`) {
@@ -145,26 +134,16 @@ func (сам *Банк) забрать() {
 	_ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Забрать</span></span></a>`)
 	// https://wartank.ru/buildings?3-1.ILinkListener-buildings-1-building-rootBlock-actionPanel-takeProductionLink
 	ссылка := "https://wartank.ru/" + _ссылка
-	_, ош = сам.сеть.ВебВоркер().Получ(ссылка)
-	if ош != nil {
-		log.Printf("Банк.забрать(): при выполнении GET-запроса 'забрать серебро', err=\n\t%v\n", ош)
-		return
-	}
+	_ = сам.сеть.ВебВоркер().Получ(ссылка)
 }
 
 // Проверяет необходимость постройки полигона
 func (сам *Банк) построитьУлучшить() bool {
-	var (
-		списБанк []string
-		ош       error
-	)
+	var 		списБанк []string
+	
 	{ // Зайти на страницу постройки
 		// https://wartank.ru/building-upgrade/Bank
-		списБанк, ош = сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/Bank")
-		if ош != nil {
-			log.Printf("Банк.построитьПровер(): при чтении страницы строительства банка, ош=\n\t%v\n", ош)
-			return false
-		}
+		списБанк = сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/Bank")
 		стрСсылка := ""
 		еслиНайти := false
 		// <a class="simple-but border mb5" href="Bank?192-1.ILinkListener-upgradeLink-link">
@@ -181,11 +160,7 @@ func (сам *Банк) построитьУлучшить() bool {
 		_ссылка = strings.TrimSuffix(_ссылка, `">`)
 		ссылка := "https://wartank.ru/building-upgrade/" + _ссылка
 		// https://wartank.ru/building-upgrade/Bank?162-1.ILinkListener-upgradeLink-link
-		списБанк, ош = сам.сеть.ВебВоркер().Получ(ссылка)
-		if ош != nil {
-			log.Printf("Банк.построитьПровер(): при выполнении запроса на строительство, ош=\n\t%v\n", ош)
-			return false
-		}
+		списБанк = сам.сеть.ВебВоркер().Получ(ссылка)
 	}
 	{ // Заказать постройку
 		// https://wartank.ru/building-upgrade/Bank
@@ -203,11 +178,7 @@ func (сам *Банк) построитьУлучшить() bool {
 			_ссылка = strings.TrimSuffix(_ссылка, `">`)
 			ссылка := "https://wartank.ru/building-upgrade/" + _ссылка
 			// https://wartank.ru/building-upgrade/Bank?162-1.ILinkListener-upgradeLink-link
-			списБанк, ош = сам.сеть.ВебВоркер().Получ(ссылка)
-			if ош != nil {
-				log.Printf("Банк.построитьПровер(): при выполнении запроса на строительство, ош=\n\t%v\n", ош)
-				return false
-			}
+			списБанк = сам.сеть.ВебВоркер().Получ(ссылка)
 		}
 	}
 	{ // подтверждение постройки
@@ -227,11 +198,7 @@ func (сам *Банк) построитьУлучшить() bool {
 		_ссылка = strings.TrimSuffix(_ссылка, "\"><span><span>да, подтверждаю</span></span></a>")
 		ссылка := "https://wartank.ru/" + _ссылка
 		// https://wartank.ru/wicket/page?135-1.ILinkListener-confirmLink
-		_, ош = сам.сеть.ВебВоркер().Получ(ссылка)
-		if ош != nil {
-			log.Printf("Банк.построитьПровер(): при выполнении запроса на строительство, ош=\n\t%v\n", ош)
-			return false
-		}
+		_ = сам.сеть.ВебВоркер().Получ(ссылка)
 	}
 	log.Printf("Банк.построитьПровер(): построен успешно\n")
 	return true

+ 1 - 1
server/serv_bots/warbot/angar/base/bank/bank_mode/bank_mode.go

@@ -2,7 +2,7 @@ package bank_mode
 
 import (
 	"wartank/pkg/types"
-	"wartank/server/serv_bots/warbot/tank_stat/static_param"
+	"wartank/server/serv_bots/warbot/stat_tank/static_param"
 )
 
 /*

+ 1 - 0
server/serv_bots/warbot/angar/base/base.go

@@ -58,6 +58,7 @@ func НовБаза(ангар types.ИАнгар) (*База, error) {
 		АренаИмя_:    "База",
 		СтрКонтроль_: `<title>База</title>`,
 		ФнПуск_:      сам.пуск,
+		СтрУрл_:      "https://wartank.ru/buildings",
 	}
 	сам.ИАрена = arena.НовАрена(аренаКонфиг)
 	strUrl := "https://wartank.ru/buildings"

+ 11 - 48
server/serv_bots/warbot/angar/base/fuel/fuel.go

@@ -10,7 +10,7 @@ import (
 	"wartank/pkg/arena"
 	"wartank/pkg/components/arena_net"
 	"wartank/pkg/types"
-	"wartank/server/serv_bots/warbot/tank_stat/static_param"
+	"wartank/server/serv_bots/warbot/stat_tank/static_param"
 )
 
 // СкладТоплива -- склад топлива
@@ -42,6 +42,7 @@ func НовСкладТоплива(база types.ИБаза) (*СкладТо
 		АренаИмя_:    "Склад_топлива",
 		СтрКонтроль_: `<span class="green2">Склад топлива - `,
 		ФнПуск_:      сам.пуск,
+		СтрУрл_:      "https://wartank.ru/angar",
 	}
 	сам.ИАрена = arena.НовАрена(аренаКонфиг)
 	сам.сеть = arena_net.НовАренаСеть(сам, "https://wartank.ru/fuelStore")
@@ -82,11 +83,7 @@ func (сам *СкладТоплива) количествоПолучить() {
 		strOut      string
 		еслиНайдено bool
 	)
-	lstMine, err := сам.сеть.ВебВоркер().Получ("https://wartank.ru/buildings")
-	if err != nil {
-		log.Printf("СкладТоплива.количествоПолучить(): при обновлении строк шахты, ош=\n\t%v\n", err)
-		return
-	}
+	lstMine := сам.сеть.ВебВоркер().Получ("https://wartank.ru/buildings")
 	/*
 		<img class="ico vm" src="/images/icons/fuel.png?2" alt="Топливо" title="Топливо"> 720
 	*/
@@ -110,11 +107,7 @@ func (сам *СкладТоплива) количествоПолучить() {
 
 // Проверяет ускорение строительства
 func (сам *СкладТоплива) ускорениеПровер() {
-	списСтр, ош := сам.сеть.ВебВоркер().Получ("http://wartank.ru/buildings")
-	if ош != nil {
-		log.Printf("СкладТоплива.ускорениеПровер(): in make request, err=\n\t%v\n", ош)
-		return
-	}
+	списСтр := сам.сеть.ВебВоркер().Получ("http://wartank.ru/buildings")
 	// <span class="green2">Склад топлива -
 	var (
 		еслиНайти = false
@@ -133,11 +126,7 @@ func (сам *СкладТоплива) ускорениеПровер() {
 
 // Обновляет текущий уровень шахты (может быть не построена)
 func (сам *СкладТоплива) уровеньОбновить() bool {
-	списСтр, ош := сам.сеть.ВебВоркер().Получ("http://wartank.ru/buildings")
-	if ош != nil {
-		log.Printf("СкладТоплива.уровеньОбновить(): in make request, err=\n\t%v\n", ош)
-		return false
-	}
+	списСтр := сам.сеть.ВебВоркер().Получ("http://wartank.ru/buildings")
 	// <span class="green2">Склад топлива -
 	var (
 		еслиНайти = false
@@ -185,15 +174,10 @@ func (сам *СкладТоплива) проапгрейдить() bool {
 		еслиНайти = false
 		списСтр   []string
 		стр       = ""
-		ош        error
 	)
 	фнКупить := func() bool {
 		defer time.Sleep(time.Millisecond * 1000)
-		списСтр, ош = сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/FuelStorage")
-		if ош != nil {
-			log.Printf("СкладТоплива.проапгрейдить().фнКупить(): при GET-команде 'купить постройку склада топлива', err=\n\t%v\n", ош)
-			return false
-		}
+		списСтр = сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/FuelStorage")
 		for _, стр = range списСтр {
 			// <a class="simple-but border mb5" href="FuelStorage?5-1.ILinkListener-upgradeLink-link">
 			if strings.Contains(стр, `ILinkListener-upgradeLink-link`) {
@@ -210,11 +194,7 @@ func (сам *СкладТоплива) проапгрейдить() bool {
 		// https://wartank.ru/building-upgrade/FuelStorage?4-1.ILinkListener-upgradeLink-link
 		// <a class="simple-but border mb5" href="FuelStorage?50-1.ILinkListener-upgradeLink-link">
 		ссылка := "https://wartank.ru/building-upgrade/" + _стр
-		списСтр, ош = сам.сеть.ВебВоркер().Получ(ссылка)
-		if ош != nil {
-			log.Printf("СкладТоплива.проапгрейдить().фнКупить(): при GET-команде 'купить постройку склада топлива', err=\n\t%v\n", ош)
-			return false
-		}
+		списСтр = сам.сеть.ВебВоркер().Получ(ссылка)
 		// Проверить, что постройка состоялась
 		for _, стр := range списСтр {
 			if strings.Contains(стр, "ILinkListener-upgradeLink-link") {
@@ -242,11 +222,7 @@ func (сам *СкладТоплива) проапгрейдить() bool {
 		_стр = strings.TrimSuffix(_стр, `"><span><span>да, подтверждаю</span></span></a>`)
 		// https://wartank.ru/wicket/page?6-1.ILinkListener-confirmLink
 		ссылка := "https://wartank.ru" + _стр
-		списСтр, ош = сам.сеть.ВебВоркер().Получ(ссылка)
-		if ош != nil {
-			log.Printf("СкладТоплива.проапгрейдить().фнПодтверждение(): при GET-команде 'подтвердить постройку склада топлива', err=\n\t%v\n", ош)
-			return false
-		}
+		списСтр = сам.сеть.ВебВоркер().Получ(ссылка)
 		// Проверить, что постройка состоялась
 		for _, стр := range списСтр {
 			if strings.Contains(стр, "<title>Вы сделали слишком большую паузу</title>") {
@@ -281,15 +257,10 @@ func (сам *СкладТоплива) построить() bool {
 		еслиНайти = false
 		списСтр   []string
 		стр       = ""
-		ош        error
 	)
 	фнКупить := func() bool {
 		defer time.Sleep(time.Millisecond * 1000)
-		списСтр, ош = сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/FuelStorage")
-		if ош != nil {
-			log.Printf("СкладТоплива.построить().фнКупить(): при GET-команде 'купить постройку склада топлива', err=\n\t%v\n", ош)
-			return false
-		}
+		списСтр = сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/FuelStorage")
 		for _, стр = range списСтр {
 			// <a class="simple-but border mb5" href="FuelStorage?71-1.ILinkListener-upgradeLink-link">
 			if strings.Contains(стр, `ILinkListener-upgradeLink-link`) {
@@ -307,11 +278,7 @@ func (сам *СкладТоплива) построить() bool {
 		// <a class="simple-but border mb5" href="FuelStorage?50-1.ILinkListener-upgradeLink-link">
 		// https://wartank.ru/building-upgrade/FuelStorage?72-1.ILinkListener-upgradeLink-link
 		ссылка := "https://wartank.ru/building-upgrade/" + _стр
-		списСтр, ош = сам.сеть.ВебВоркер().Получ(ссылка)
-		if ош != nil {
-			log.Printf("СкладТоплива.построить().фнКупить(): при GET-команде 'купить постройку склада топлива', err=\n\t%v\n", ош)
-			return false
-		}
+		списСтр = сам.сеть.ВебВоркер().Получ(ссылка)
 		// Проверить, что постройка состоялась
 		for _, стр := range списСтр {
 			if strings.Contains(стр, "ILinkListener-upgradeLink-link") {
@@ -340,11 +307,7 @@ func (сам *СкладТоплива) построить() bool {
 		// https://wartank.ru/wicket/page?4-1.ILinkListener-confirmLink
 		// <a class="simple-but border mb5" href="FuelStorage?50-1.ILinkListener-upgradeLink-link">
 		ссылка := "https://wartank.ru" + _стр
-		списСтр, ош = сам.сеть.ВебВоркер().Получ(ссылка)
-		if ош != nil {
-			log.Printf("СкладТоплива.построить().фнПодтверждение(): при GET-команде 'подтвердить постройку склада топлива', err=\n\t%v\n", ош)
-			return false
-		}
+		списСтр = сам.сеть.ВебВоркер().Получ(ссылка)
 		// Проверить, что постройка состоялась
 		for _, стр := range списСтр {
 			if strings.Contains(стр, "<title>Вы сделали слишком большую паузу</title>") {

+ 5 - 17
server/serv_bots/warbot/angar/base/labor/labor.go

@@ -30,7 +30,7 @@ func (сам *Лаборатория) Пуск() {
 	go сам.пуск()
 }
 
-// Запукает в работу в отдельном потоке
+// Запускает в работу в отдельном потоке
 func (сам *Лаборатория) пуск() {
 	time.Sleep(time.Millisecond * 4500)
 	for {
@@ -57,10 +57,7 @@ func (сам *Лаборатория) улучшить() error {
 	// https://wartank.ru/buildings
 	клиент := сам.бот.Сеть().ВебВоркер()
 	фнПостроить := func() error {
-		лстСтр, ош := клиент.Получ("https://wartank.ru/buildings")
-		if ош != nil {
-			return fmt.Errorf("Лаборатория.улучшить(): при получении страницы постройки лаборатории с сервера, ош=\n\t%w", ош)
-		}
+		лстСтр := клиент.Получ("https://wartank.ru/buildings")
 		еслиНашли := false
 		// <td style="width:50%;padding-left:1px;"><a class="simple-but border mb5" href="building-upgrade/Laboratory"><span><span>Построить</span></span></a></td>
 		for _, стр := range лстСтр {
@@ -73,17 +70,11 @@ func (сам *Лаборатория) улучшить() error {
 			return nil
 		}
 		// https://wartank.ru/building-upgrade/Laboratory
-		_, ош = клиент.Получ("https://wartank.ru/building-upgrade/Laboratory")
-		if ош != nil {
-			return fmt.Errorf("Лаборатория.улучшить(): при построении лаборатории, ош=\n\t%w", ош)
-		}
+		_ = клиент.Получ("https://wartank.ru/building-upgrade/Laboratory")
 		return nil
 	}
 	фнКупить := func() error {
-		лстСтр, ош := клиент.Получ("https://wartank.ru/building-upgrade/Laboratory")
-		if ош != nil {
-			return fmt.Errorf("Лаборатория.улучшить(): при получении страницы покупки лаборатории с сервера, ош=\n\t%w", ош)
-		}
+		лстСтр := клиент.Получ("https://wartank.ru/building-upgrade/Laboratory")
 		стрВых := ""
 		// <a class="simple-but border mb5" href="Laboratory?118-1.ILinkListener-upgradeLink-link">
 		for _, стрВых = range лстСтр {
@@ -98,10 +89,7 @@ func (сам *Лаборатория) улучшить() error {
 		стрВых = strings.TrimSuffix(стрВых, `">`)
 		// https://wartank.ru/building-upgrade/Laboratory?117-1.ILinkListener-upgradeLink-link
 		стрВых = "https://wartank.ru/building-upgrade/" + стрВых
-		_, ош = клиент.Получ(стрВых)
-		if ош != nil {
-			return fmt.Errorf("Лаборатория.улучшить(): при покупки лаборатории, ош=\n\t%w", ош)
-		}
+		_ = клиент.Получ(стрВых)
 		return nil
 	}
 	счётОш := 5

+ 10 - 43
server/serv_bots/warbot/angar/base/market/market.go

@@ -10,7 +10,7 @@ import (
 	"wartank/pkg/arena"
 	"wartank/pkg/components/arena_net"
 	"wartank/pkg/types"
-	"wartank/server/serv_bots/warbot/tank_stat/static_param"
+	"wartank/server/serv_bots/warbot/stat_tank/static_param"
 )
 
 // Рынок -- объект рынка
@@ -32,6 +32,7 @@ func НовРынок(база types.ИБаза) *Рынок {
 		АренаИмя_:    "Рынок",
 		СтрКонтроль_: `<title>Рынок</title>`,
 		ФнПуск_:      сам.пуск,
+		СтрУрл_:      "https://wartank.ru/market",
 	}
 	сам.ИАрена = arena.НовАрена(аренаКонфиг)
 	сам.сеть = arena_net.НовАренаСеть(сам, "https://wartank.ru/market")
@@ -68,11 +69,7 @@ func (сам *Рынок) пуск() {
 
 // Проверяет ускорение строительства
 func (сам *Рынок) ускорениеПровер() {
-	списСтр, ош := сам.сеть.ВебВоркер().Получ("http://wartank.ru/buildings")
-	if ош != nil {
-		log.Printf("Рынок.ускорениеПровер(): in make request, err=\n\t%v\n", ош)
-		return
-	}
+	списСтр := сам.сеть.ВебВоркер().Получ("http://wartank.ru/buildings")
 	// <span class="green2">Склад топлива -
 	var (
 		еслиНайти = false
@@ -91,11 +88,7 @@ func (сам *Рынок) ускорениеПровер() {
 
 // Обновляет текущий уровень рынка (может быть не построен)
 func (сам *Рынок) уровеньОбновить() bool {
-	списСтр, ош := сам.сеть.ВебВоркер().Получ("http://wartank.ru/buildings")
-	if ош != nil {
-		log.Printf("Рынок.уровеньОбновить(): in make request, err=\n\t%v\n", ош)
-		return false
-	}
+	списСтр := сам.сеть.ВебВоркер().Получ("http://wartank.ru/buildings")
 	// <span class="green2">Рынок -
 	var (
 		еслиНайти = false
@@ -144,15 +137,10 @@ func (сам *Рынок) построить() bool {
 		еслиНайти = false
 		списСтр   []string
 		стр       = ""
-		ош        error
 	)
 	фнКупить := func() bool {
 		defer time.Sleep(time.Millisecond * 1000)
-		списСтр, ош = сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/Market")
-		if ош != nil {
-			log.Printf("Рынок.построить().фнКупить(): при GET-команде 'купить постройку склада топлива', err=\n\t%v\n", ош)
-			return false
-		}
+		списСтр = сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/Market")
 		for _, стр = range списСтр {
 			// <a class="simple-but border mb5" href="Market?19-1.ILinkListener-upgradeLink-link">
 			if strings.Contains(стр, `ILinkListener-upgradeLink-link`) {
@@ -169,11 +157,7 @@ func (сам *Рынок) построить() bool {
 		// https://wartank.ru/building-upgrade/Market?18-1.ILinkListener-upgradeLink-link
 		// <a class="simple-but border mb5" href="Market?19-1.ILinkListener-upgradeLink-link">
 		ссылка := "https://wartank.ru/building-upgrade/" + _стр
-		списСтр, ош = сам.сеть.ВебВоркер().Получ(ссылка)
-		if ош != nil {
-			log.Printf("Рынок.построить().фнКупить(): при GET-команде 'купить постройку склада топлива', err=\n\t%v\n", ош)
-			return false
-		}
+		списСтр = сам.сеть.ВебВоркер().Получ(ссылка)
 		// Проверить, что постройка состоялась
 		for _, стр := range списСтр {
 			if strings.Contains(стр, "ILinkListener-upgradeLink-link") {
@@ -201,11 +185,7 @@ func (сам *Рынок) построить() bool {
 		_стр = strings.TrimSuffix(_стр, `"><span><span>да, подтверждаю</span></span></a>`)
 		// https://wartank.ru/wicket/page?20-1.ILinkListener-confirmLink
 		ссылка := "https://wartank.ru" + _стр
-		списСтр, ош = сам.сеть.ВебВоркер().Получ(ссылка)
-		if ош != nil {
-			log.Printf("Рынок.построить().фнПодтверждение(): при GET-команде 'подтвердить постройку склада топлива', err=\n\t%v\n", ош)
-			return false
-		}
+		списСтр = сам.сеть.ВебВоркер().Получ(ссылка)
 		// Проверить, что постройка состоялась
 		for _, стр := range списСтр {
 			if strings.Contains(стр, "<title>Вы сделали слишком большую паузу</title>") {
@@ -237,15 +217,10 @@ func (сам *Рынок) проапгрейдить() bool {
 		еслиНайти = false
 		списСтр   []string
 		стр       = ""
-		ош        error
 	)
 	фнКупить := func() bool {
 		defer time.Sleep(time.Millisecond * 1000)
-		списСтр, ош = сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/Market")
-		if ош != nil {
-			log.Printf("Рынок.проапгрейдить().фнКупить(): при GET-команде 'купить постройку рынка', err=\n\t%v\n", ош)
-			return false
-		}
+		списСтр = сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/Market")
 		for _, стр = range списСтр {
 			// <a class="simple-but border mb5" href="Market?5-1.ILinkListener-upgradeLink-link">
 			if strings.Contains(стр, `ILinkListener-upgradeLink-link`) {
@@ -262,11 +237,7 @@ func (сам *Рынок) проапгрейдить() bool {
 		// https://wartank.ru/building-upgrade/Market?4-1.ILinkListener-upgradeLink-link
 		// <a class="simple-but border mb5" href="Market?50-1.ILinkListener-upgradeLink-link">
 		ссылка := "https://wartank.ru/building-upgrade/" + _стр
-		списСтр, ош = сам.сеть.ВебВоркер().Получ(ссылка)
-		if ош != nil {
-			log.Printf("Рынок.проапгрейдить().фнКупить(): при GET-команде 'купить постройку рынка', err=\n\t%v\n", ош)
-			return false
-		}
+		списСтр = сам.сеть.ВебВоркер().Получ(ссылка)
 		// Проверить, что постройка состоялась
 		for _, стр := range списСтр {
 			if strings.Contains(стр, "ILinkListener-upgradeLink-link") {
@@ -294,11 +265,7 @@ func (сам *Рынок) проапгрейдить() bool {
 		_стр = strings.TrimSuffix(_стр, `"><span><span>да, подтверждаю</span></span></a>`)
 		// https://wartank.ru/wicket/page?6-1.ILinkListener-confirmLink
 		ссылка := "https://wartank.ru" + _стр
-		списСтр, ош = сам.сеть.ВебВоркер().Получ(ссылка)
-		if ош != nil {
-			log.Printf("Рынок.проапгрейдить().фнПодтверждение(): при GET-команде 'подтвердить постройку рынка', err=\n\t%v\n", ош)
-			return false
-		}
+		списСтр = сам.сеть.ВебВоркер().Получ(ссылка)
 		// Проверить, что постройка состоялась
 		for _, стр := range списСтр {
 			if strings.Contains(стр, "<title>Вы сделали слишком большую паузу</title>") {

+ 14 - 58
server/serv_bots/warbot/angar/base/mine/mine.go

@@ -11,7 +11,7 @@ import (
 	"wartank/pkg/arena"
 	"wartank/pkg/components/arena_net"
 	"wartank/pkg/types"
-	"wartank/server/serv_bots/warbot/tank_stat/static_param"
+	"wartank/server/serv_bots/warbot/stat_tank/static_param"
 )
 
 // Шахта -- объект шахты на базе
@@ -53,6 +53,7 @@ func НовШахта(база types.ИБаза) (types.ИБазаШахта, er
 		АренаИмя_:    "Шахта",
 		СтрКонтроль_: `<span class="green2">Руда</span><br/>`,
 		ФнПуск_:      сам.пуск,
+		СтрУрл_:      "https://wartank.ru/production/Mine",
 	}
 	сам.ИАрена = arena.НовАрена(аренаКонфиг)
 	сам.лог = сам.ВебЛог()
@@ -138,11 +139,7 @@ func (сам *Шахта) количествоПолучить() (bool, error) {
 		еслиНайдено bool
 		режим       string
 	)
-	lstMine, err := сам.сеть.ВебВоркер().Получ("https://wartank.ru/buildings")
-	if err != nil {
-		сам.лог.Добавить("ОШИБКА Шахта.количествоПолучить(): при обновлении строк шахты, ош=\n\t%v\n", err)
-		return false, fmt.Errorf("")
-	}
+	lstMine := сам.сеть.ВебВоркер().Получ("https://wartank.ru/buildings")
 	/*
 		Режим (руда-1):
 		<td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/ore.png?2" alt="ore"/>&nbsp;1</div></td>
@@ -253,11 +250,7 @@ func (сам *Шахта) шахтаЗабрать() bool {
 		strOut      string
 		еслиНайдено bool
 	)
-	списШахта, ош := сам.сеть.ВебВоркер().Получ("https://wartank.ru/buildings")
-	if ош != nil {
-		сам.лог.Добавить("ОШИБКА Шахта.шахтаЗабрать(): при GET-запросе, ош=\n\t%v\n", ош)
-		return false
-	}
+	списШахта := сам.сеть.ВебВоркер().Получ("https://wartank.ru/buildings")
 	// <a class="simple-but border" href="buildings?35-1.ILinkListener-buildings-0-building-rootBlock-actionPanel-takeProductionLink"><span><span>Забрать</span></span></a>
 	for _, strOut = range списШахта {
 		if strings.Contains(strOut, `.ILinkListener-buildings-0-building-rootBlock-actionPanel-takeProductionLink`) {
@@ -273,12 +266,8 @@ func (сам *Шахта) шахтаЗабрать() bool {
 	_ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Забрать</span></span></a>`)
 	ссылка := "https://wartank.ru/" + _ссылка
 	// http://wartank.ru/buildings?5-1.ILinkListener-buildings-0-building-rootBlock-actionPanel-takeProductionLink
-	lstBase1, err := сам.сеть.ВебВоркер().Получ(ссылка)
-	if err != nil {
-		сам.лог.Добавить("ОШИБКА Шахта.шахтаЗабрать(): при выполнении GET-запроса 'забрать', err=\n\t%v\n", err)
-		return false
-	}
-	if err = сам.СтрОбновить(lstBase1); err != nil {
+	lstBase1 := сам.сеть.ВебВоркер().Получ(ссылка)
+	if err := сам.СтрОбновить(lstBase1); err != nil {
 		сам.лог.Добавить("Шахта.шахтаЗабрать(): при обновлении lstMine, err=\n\t%v\n", err)
 		return false
 	}
@@ -289,11 +278,7 @@ func (сам *Шахта) шахтаЗабрать() bool {
 // Проверяет ускорение строительства FIXME: не работает
 func (сам *Шахта) ускорениеПровер() {
 	сам.лог.Добавить("")
-	списСтр, ош := сам.сеть.ВебВоркер().Получ("http://wartank.ru/buildings")
-	if ош != nil {
-		сам.лог.Добавить("ОШИБКА Шахта.ускорениеПровер(): при получении списка строк, err=\n\t%v\n", ош)
-		return
-	}
+	списСтр := сам.сеть.ВебВоркер().Получ("http://wartank.ru/buildings")
 	// <span class="green2">Шахта - 0</span><br/>
 	var (
 		еслиНайти bool
@@ -320,11 +305,7 @@ func (сам *Шахта) Уровень() types.ИСтатПарам {
 // Обновляет текущий уровень шахты (может быть не построена)
 func (сам *Шахта) уровеньОбновить() bool {
 	сам.лог.Добавить("Шахта.уровеньОбновить()\n")
-	списСтр, ош := сам.сеть.ВебВоркер().Получ("http://wartank.ru/buildings")
-	if ош != nil {
-		сам.лог.Добавить("ОШИБКА Шахта.уровеньОбновить(): in make request, err=\n\t%v\n", ош)
-		return false
-	}
+	списСтр := сам.сеть.ВебВоркер().Получ("http://wartank.ru/buildings")
 	// <span class="green2">Шахта - 0</span><br/>
 	var (
 		еслиНайти = false
@@ -360,11 +341,7 @@ func (сам *Шахта) построить() bool {
 		еслиНайти = false
 		стр       = ""
 	)
-	списСтр, ош := сам.сеть.ВебВоркер().Получ("http://wartank.ru/buildings")
-	if ош != nil {
-		сам.лог.Добавить("Шахта.уровеньОбновить(): при выполнении запроса, ош=\n\t%v\n", ош)
-		return false
-	}
+	списСтр := сам.сеть.ВебВоркер().Получ("http://wartank.ru/buildings")
 	for _, стр = range списСтр {
 		if strings.Contains(стр, `href="building-upgrade/Mine"><span><span>Построить</span></span>`) {
 			еслиНайти = true
@@ -379,11 +356,7 @@ func (сам *Шахта) построить() bool {
 	_стр := strings.TrimPrefix(стр, `<td style="width:50%;padding-left:1px;"><a class="simple-but border mb5" href="`)
 	_стр = strings.TrimSuffix(_стр, `"><span><span>Построить</span></span></a></td>`)
 	ссылка := "https://wartank.ru/" + _стр
-	списСтр, ош = сам.сеть.ВебВоркер().Получ(ссылка)
-	if ош != nil {
-		сам.лог.Добавить("ОШИБКА Шахта.построить(): при выполнении GET-команды 'построить шахту', err=\n\t%v\n", ош)
-		return false
-	}
+	списСтр = сам.сеть.ВебВоркер().Получ(ссылка)
 	еслиНайти = false
 	// "<a class=\"simple-but border mb5\" href=\"Mine?14-1.ILinkListener-upgradeLink-link\">"
 	for _, стр = range списСтр {
@@ -400,11 +373,7 @@ func (сам *Шахта) построить() bool {
 	_стр = strings.TrimSuffix(_стр, "\">")
 	// http://wartank.ru/building-upgrade/Mine?16-1.ILinkListener-upgradeLink-link
 	ссылка = "https://wartank.ru/building-upgrade/" + _стр
-	_, ош = сам.сеть.ВебВоркер().Получ(ссылка)
-	if ош != nil {
-		сам.лог.Добавить("ОШИБКА Шахта.построить(): при GET-команде 'купить постройку шахты', err=\n\t%v\n", ош)
-		return false
-	}
+	_ = сам.сеть.ВебВоркер().Получ(ссылка)
 	return true
 }
 
@@ -415,15 +384,10 @@ func (сам *Шахта) проапгрейдить() bool {
 		еслиНайти = false
 		списСтр   []string
 		стр       = ""
-		ош        error
 	)
 	фнКупить := func() (bool, error) {
 		defer time.Sleep(time.Millisecond * 1000)
-		списСтр, ош = сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/Mine")
-		if ош != nil {
-			сам.лог.Добавить("ОШИБКА Шахта.проапгрейдить().фнКупить(): при GET-команде 'купить постройку шахты', err=\n\t%v\n", ош)
-			return false, fmt.Errorf("не получены строки")
-		}
+		списСтр = сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/Mine")
 		for _, стр = range списСтр {
 			// <a class="simple-but border mb5" href="Mine?5-1.ILinkListener-upgradeLink-link">
 			if strings.Contains(стр, `ILinkListener-upgradeLink-link`) {
@@ -441,11 +405,7 @@ func (сам *Шахта) проапгрейдить() bool {
 		// https://wartank.ru/building-upgrade/Mine?4-1.ILinkListener-upgradeLink-link
 		// <a class="simple-but border mb5" href="FuelStorage?50-1.ILinkListener-upgradeLink-link">
 		ссылка := "https://wartank.ru/building-upgrade/" + _стр
-		списСтр, ош = сам.сеть.ВебВоркер().Получ(ссылка)
-		if ош != nil {
-			сам.лог.Добавить("ОШИБКА Шахта.проапгрейдить().фнКупить(): при GET-команде 'купить постройку шахты', err=\n\t%v\n", ош)
-			return false, fmt.Errorf("не получены строки")
-		}
+		списСтр = сам.сеть.ВебВоркер().Получ(ссылка)
 		// Проверить, что постройка состоялась
 		for _, стр := range списСтр {
 			if strings.Contains(стр, "ILinkListener-upgradeLink-link") {
@@ -474,11 +434,7 @@ func (сам *Шахта) проапгрейдить() bool {
 		_стр = strings.TrimSuffix(_стр, `"><span><span>да, подтверждаю</span></span></a>`)
 		// https://wartank.ru/wicket/page?6-1.ILinkListener-confirmLink
 		ссылка := "https://wartank.ru" + _стр
-		списСтр, ош = сам.сеть.ВебВоркер().Получ(ссылка)
-		if ош != nil {
-			сам.лог.Добавить("Шахта.проапгрейдить().фнПодтверждение(): при GET-команде 'подтвердить постройку шахты', err=\n\t%v\n", ош)
-			return false
-		}
+		списСтр = сам.сеть.ВебВоркер().Получ(ссылка)
 		// Проверить, что постройка состоялась
 		for _, стр := range списСтр {
 			if strings.Contains(стр, "<title>Вы сделали слишком большую паузу</title>") {

+ 9 - 36
server/serv_bots/warbot/angar/base/polygon/polygon.go

@@ -13,7 +13,7 @@ import (
 	"wartank/pkg/components/safe_string"
 	"wartank/pkg/cons"
 	"wartank/pkg/types"
-	"wartank/server/serv_bots/warbot/tank_stat/static_param"
+	"wartank/server/serv_bots/warbot/stat_tank/static_param"
 )
 
 /*
@@ -58,6 +58,7 @@ func НовПолигон(база types.ИБаза) *Полигон {
 		АренаИмя_:    "Полигон",
 		СтрКонтроль_: `<span class="green2">Полигон</span><br/>`,
 		ФнПуск_:      сам.пуск,
+		СтрУрл_:      "https://wartank.ru/polygon",
 	}
 	сам.ИАрена = arena.НовАрена(аренаКонфиг)
 	сам.сеть = arena_net.НовАренаСеть(сам, "https://wartank.ru/polygon")
@@ -155,11 +156,7 @@ func (сам *Полигон) пуск() {
 
 // Построить
 func (сам *Полигон) построить() bool {
-	списСтр, ош := сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/Polygon")
-	if ош != nil {
-		сам.лог.Ошибка("построить(): при обновлении страницы строительства полигона, ош=\n\t%v\n", ош)
-		return false
-	}
+	списСтр := сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/Polygon")
 	ссылка0 := "" // ссылка на постройку
 
 	{ // Поиск ссылки на покупку
@@ -177,11 +174,7 @@ func (сам *Полигон) построить() bool {
 		ссылка0 = strings.TrimSuffix(ссылка0, `">`)
 		// https://wartank.ru/building-upgrade/Polygon?40-1.ILinkListener-upgradeLink-link
 		ссылка0 = "http://wartank.ru/building-upgrade/" + ссылка0
-		списСтр, ош = сам.сеть.ВебВоркер().Получ(ссылка0)
-		if ош != nil {
-			сам.лог.Ошибка("построить(): при обновлении страницы строительства полигона, ош=\n\t%v\n", ош)
-			return false
-		}
+		списСтр = сам.сеть.ВебВоркер().Получ(ссылка0)
 	}
 	ссылка1 := "" // ссылка на улучшение здания
 
@@ -200,11 +193,7 @@ func (сам *Полигон) построить() bool {
 		ссылка1 = strings.TrimSuffix(ссылка1, `">`)
 		// https://wartank.ru/building-upgrade/Polygon?48-1.ILinkListener-upgradeLink-link
 		ссылка1 = "http://wartank.ru/building-upgrade/" + ссылка1
-		списСтр, ош = сам.сеть.ВебВоркер().Получ(ссылка1)
-		if ош != nil {
-			сам.лог.Ошибка("построить(): при подтверждении покупки полигона, ош=\n\t%v\n", ош)
-			return false
-		}
+		списСтр = сам.сеть.ВебВоркер().Получ(ссылка1)
 	}
 	ссылка2 := "" // подтверждение покупки
 	{             // Подтверждение покупки
@@ -223,11 +212,7 @@ func (сам *Полигон) построить() bool {
 		// https://wartank.ru/wicket/page?52-1.ILinkListener-confirmLink
 		ссылка2 = "http://wartank.ru/wicket/" + ссылка2
 		//ссылка2="https://wartank.ru/wicket/page?25-1.ILinkListener-confirmLink"
-		_, ош = сам.сеть.ВебВоркер().Получ(ссылка2)
-		if ош != nil {
-			сам.лог.Ошибка("построить(): при подтверждении покупки полигона, ош=\n\t%v\n", ош)
-			return false
-		}
+		_ = сам.сеть.ВебВоркер().Получ(ссылка2)
 	}
 	return true
 }
@@ -238,11 +223,7 @@ func (сам *Полигон) уровеньПолучить() bool {
 		стрВых      = ""
 		еслиНайдено bool
 	)
-	lstBase, err := сам.сеть.ВебВоркер().Получ("https://wartank.ru/buildings")
-	if err != nil {
-		log.Printf("Полигон.уровеньПолучить(): при обновлении строк базы, err=\n\t%v\n", err)
-		return false
-	}
+	lstBase := сам.сеть.ВебВоркер().Получ("https://wartank.ru/buildings")
 	// <span class="green2">Полигон - 5</span><br/>
 	for _, стрВых = range lstBase {
 		if strings.Contains(стрВых, `<span class="green2">Полигон - `) {
@@ -269,11 +250,7 @@ func (сам *Полигон) проверитьУскорение() bool {
 		strOut      = ""
 		еслиНайдено bool
 	)
-	lstBase, err := сам.сеть.ВебВоркер().Получ("https://wartank.ru/buildings")
-	if err != nil {
-		log.Printf("Полигон.проверитьУскорение(): при обновлении строк базы, err=\n\t%v\n", err)
-		return false
-	}
+	lstBase := сам.сеть.ВебВоркер().Получ("https://wartank.ru/buildings")
 	// Проверка на платное ускорение апгрейда + время
 	{ // Платное ускорение
 		if strings.Contains(strOut, `Ускорить за`) {
@@ -334,11 +311,7 @@ func (сам *Полигон) проверитьУскорение() bool {
 // Проверяет необходимость постройки полигона
 func (сам *Полигон) построитьПровер() bool {
 	// https://wartank.ru/building-upgrade/Polygon
-	списПолигон, ош := сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/Polygon")
-	if ош != nil {
-		log.Printf("Полигон.построитьПровер(): при чтении страницы строительства полигона, ош=\n\t%v\n", ош)
-		return false
-	}
+	списПолигон := сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/Polygon")
 	стрСсылка := ""
 	еслиНайти := false
 	// <a class="simple-but border mb5" href="Polygon?66-1.ILinkListener-upgradeLink-link">

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

@@ -28,11 +28,12 @@ func НовСражение(бот types.ИБот) *Сражение {
 		бот:    бот,
 		клиент: бот.Сеть().ВебВоркер(),
 	}
-	аренаКонфиг:= arena.АренаКонфиг{
+	аренаКонфиг := arena.АренаКонфиг{
 		Бот_:         бот,
 		АренаИмя_:    "Группа сражения",
 		СтрКонтроль_: "<span>до начала ",
 		ФнПуск_:      сам.пуск,
+		СтрУрл_:      "https://wartank.ru/battle",
 	}
 	сам.ИАрена = arena.НовАрена(аренаКонфиг)
 	сам.регистрация = battle_register.НовСражениеРегистрация(бот)

+ 1 - 0
server/serv_bots/warbot/angar/battle/battle_register/battle_register.go

@@ -29,6 +29,7 @@ func НовСражениеРегистрация(бот types.ИБот) *Схв
 		АренаИмя_:    "Сражение",
 		СтрКонтроль_: `<title>Сражения</title>`,
 		ФнПуск_:      сам.пуск,
+		СтрУрл_:      "https://wartank.ru/pve",
 	}
 	сам.ИАрена = arena.НовАрена(аренаКонфиг)
 	сам.сеть = arena_net.НовАренаСеть(сам, "https://wartank.ru/pve")

+ 1 - 0
server/serv_bots/warbot/angar/battle/battle_wait/battle_wait.go

@@ -27,6 +27,7 @@ func НовСражениеОжидание(бот types.ИБот) *Схватк
 		АренаИмя_:    "Ожидание сражения",
 		СтрКонтроль_: `<title>Сражения</title>`,
 		ФнПуск_:      сам.пуск,
+		СтрУрл_:      "https://wartank.ru/pve",
 	}
 	сам.ИАрена = arena.НовАрена(аренаКонфиг)
 	сам.сеть = arena_net.НовАренаСеть(сам, "https://wartank.ru/pve")

+ 2 - 1
server/serv_bots/warbot/angar/battle/battle_worker/battle_worker.go

@@ -8,7 +8,7 @@ import (
 	"wartank/pkg/types"
 	"wartank/server/serv_bots/warbot/angar/battle/battle_worker/battle_worker"
 	"wartank/server/serv_bots/warbot/angar/battle/battle_worker/battle_worker/battle_sound"
-	"wartank/server/serv_bots/warbot/tank_stat/static_param"
+	"wartank/server/serv_bots/warbot/stat_tank/static_param"
 )
 
 // СражениеДействие -- исполнение битвы
@@ -37,6 +37,7 @@ func НовСражениеИсполнитель(bot types.ИБот) *Схва
 		АренаИмя_:    "Ход сражения",
 		СтрКонтроль_: `<title>Сражения</title>`,
 		ФнПуск_:      сам.пуск,
+		СтрУрл_:      "https://wartank.ru/pve",
 	}
 	сам.ИАрена = arena.НовАрена(аренаКонфиг)
 	сам.сеть = arena_net.НовАренаСеть(сам, "https://wartank.ru/pve")

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

@@ -42,13 +42,13 @@ func НовСражениеДействие(бот types.ИБот) *Сражен
 		логин:       бот.Имя(),
 		еслиВыстрел: is_shot.NewIsShot(),
 	}
-	аренаКонфиг:=arena.АренаКонфиг{
+	аренаКонфиг := arena.АренаКонфиг{
 		Бот_:         сам.бот,
 		АренаИмя_:    "Исполнитель сражения",
 		СтрКонтроль_: `<title>Сражения</title>`,
 		ФнПуск_:      сам.пуск,
 	}
-	сам.ИАрена=arena.НовАрена(аренаКонфиг)
+	сам.ИАрена = arena.НовАрена(аренаКонфиг)
 	сам.сеть = arena_net.НовАренаСеть(сам, "https://wartank.ru/pve")
 	go сам.пуск()
 	_ = types.ИСражениеДействие(сам)

+ 12 - 32
server/serv_bots/warbot/angar/convoy/convoy.go

@@ -10,7 +10,7 @@ import (
 	"wartank/pkg/arena"
 	"wartank/pkg/components/arena_net"
 	"wartank/pkg/types"
-	"wartank/server/serv_bots/warbot/tank_stat/static_param"
+	"wartank/server/serv_bots/warbot/stat_tank/static_param"
 )
 
 /*
@@ -28,14 +28,15 @@ type Конвой struct {
 // НовКонвой -- возвращает новый *Convoy
 func НовКонвой(бот types.ИБот) *Конвой {
 	сам := &Конвой{
-		бот:    бот,
-		слава:  static_param.НовСтатПарам("glory"),
+		бот:   бот,
+		слава: static_param.НовСтатПарам("glory"),
 	}
-	аренаКонфиг:=arena.АренаКонфиг{
+	аренаКонфиг := arena.АренаКонфиг{
 		Бот_:         сам.бот,
 		АренаИмя_:    "Конвой",
 		СтрКонтроль_: `<title>Конвой</title>`,
 		ФнПуск_:      сам.пуск,
+		СтрУрл_:      "https://wartank.ru/convoy",
 	}
 	сам.ИАрена = arena.НовАрена(аренаКонфиг)
 	сам.сеть = arena_net.НовАренаСеть(сам, "https://wartank.ru/convoy")
@@ -192,11 +193,7 @@ func (сам *Конвой) найтиВбой() string {
 		strOut      = ""
 		еслиНайдено bool
 	)
-	lstConvoy, err := сам.сеть.ВебВоркер().Получ("https://wartank.ru/convoy")
-	if err != nil {
-		log.Printf("Конвой.атакаНачать(): при обновлении lstConvoy, ош=\n\t%v\n", err)
-		return ""
-	}
+	lstConvoy := сам.сеть.ВебВоркер().Получ("https://wartank.ru/convoy")
 	if сам.бот.Имя() == "prospero tank" {
 		log.Printf("")
 	}
@@ -261,12 +258,8 @@ func (сам *Конвой) атакаНачать() {
 	}
 	strLink := strOut
 	// Можно начать разведку
-	lstConvoy, err := сам.сеть.ВебВоркер().Получ(strLink)
-	if err != nil {
-		log.Printf("ERRO Конвой.атакаНачать(): при выполнении GET-команды 'В атаку!', err=\n\t%v\n", err)
-		return
-	}
-	if err = сам.СтрОбновить(lstConvoy); err != nil {
+	lstConvoy := сам.сеть.ВебВоркер().Получ(strLink)
+	if err := сам.СтрОбновить(lstConvoy); err != nil {
 		for _, strOut = range lstConvoy {
 			if strings.Contains(strOut, `<title>Ошибка на сервере. Сообщение админу уже отправлено.</title>`) {
 				// log._rintf("ERRO Конвой.атакаНачать(): при обновлении lstConvoy, strOut=\n\t%v\n", strOut)
@@ -310,13 +303,8 @@ func (сам *Конвой) начатьРазведку() {
 	// https://wartank.ru/convoy?52-1.ILinkListener-root-findEnemy
 	link := "https://wartank.ru/" + _link
 	{ // Выполнить атаку
-		var err error
-		lstConvoy, err = сам.сеть.ВебВоркер().Получ(link)
-		if err != nil {
-			log.Printf("Конвой.attack(): in get page find attack, err=\n\t%v\n", err)
-			return
-		}
-		if err = сам.СтрОбновить(lstConvoy); err != nil {
+		lstConvoy = сам.сеть.ВебВоркер().Получ(link)
+		if err := сам.СтрОбновить(lstConvoy); err != nil {
 			log.Printf("Конвой.attack(): при обновлении lstConvoy, err=\n\t%v\n", err)
 			return
 		}
@@ -346,11 +334,7 @@ func (сам *Конвой) проверитьМиссияРазведкаКон
 	_ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Получить награду</span></span></a>`)
 	// https://wartank.ru/convoy?23-1.ILinkListener-missions-cc-0-c-awardLink
 	ссылка := "https://wartank.ru/" + _ссылка
-	lstConvoy, err := сам.сеть.ВебВоркер().Получ(ссылка)
-	if err != nil {
-		log.Printf("Конвой.проверитьМиссияРазведкаКонвой(): при выполнении команды GET, err=\n\t%v\n", err)
-		return
-	}
+	lstConvoy = сам.сеть.ВебВоркер().Получ(ссылка)
 	if err := сам.СтрОбновить(lstConvoy); err != nil {
 		log.Printf("Конвой.проверитьМиссияРазведкаКонвой(): пр обновлении lstConvoy, err=\n\t%v\n", err)
 		return
@@ -425,11 +409,7 @@ func (сам *Конвой) проверитьМиссия6фрагов() {
 	_ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Получить награду</span></span></a>`)
 	// https://wartank.ru/convoy?15-1.ILinkListener-missions-cc-1-c-awardLink
 	ссылка := "https://wartank.ru/" + _ссылка
-	lstConvoy, ош := сам.сеть.ВебВоркер().Получ(ссылка)
-	if ош != nil {
-		log.Printf("Конвой.проверитьМиссия6фрагов(): при выполнении команды GET, err=\n\t%v\n", ош)
-		return
-	}
+	lstConvoy = сам.сеть.ВебВоркер().Получ(ссылка)
 	if err := сам.СтрОбновить(lstConvoy); err != nil {
 		log.Printf("Конвой.проверитьМиссия6фрагов(): при обновлении lstConvoy, ош=\n\t%v\n", err)
 		return

+ 3 - 3
server/serv_bots/warbot/angar/death_match/battle_wait/battle_wait.go

@@ -20,9 +20,9 @@ type СражениеОжидание struct {
 // НовСражениеОжидание -- возвращает новый ожидатель битвы
 func НовСражениеОжидание(бот types.ИБот) *СражениеОжидание {
 	сам := &СражениеОжидание{
-		бот:    бот,
+		бот: бот,
 	}
-	аренаКонфиг:=arena.АренаКонфиг{
+	аренаКонфиг := arena.АренаКонфиг{
 		Бот_:         бот,
 		АренаИмя_:    "Ожидание сражения",
 		СтрКонтроль_: `<title>Сражения</title>`,
@@ -35,7 +35,7 @@ func НовСражениеОжидание(бот types.ИБот) *Сражен
 
 // выполняет работу сражения
 func (сам *СражениеОжидание) пуск() {
-	
+
 }
 
 // Ожидать -- ожидает начало сражения

+ 1 - 1
server/serv_bots/warbot/angar/death_match/death_register/death_register.go

@@ -24,7 +24,7 @@ func НовСхваткаРегистрация(бот types.ИБот) *Схва
 		бот:          бот,
 		счётРегистер: 10_000,
 	}
-	аренаКонфиг:=arena.АренаКонфиг{
+	аренаКонфиг := arena.АренаКонфиг{
 		Бот_:         бот,
 		АренаИмя_:    "Сражение",
 		СтрКонтроль_: `<title>Сражения</title>`,

+ 1 - 1
server/serv_bots/warbot/angar/death_match/death_worker/death_on/death_on.go

@@ -42,7 +42,7 @@ func НовСхваткаДействие(бот types.ИБот) *Схватка
 		логин:       бот.Имя(),
 		еслиВыстрел: is_shot.NewIsShot(),
 	}
-	аренаКонфиг:=arena.АренаКонфиг{
+	аренаКонфиг := arena.АренаКонфиг{
 		Бот_:         сам.бот,
 		АренаИмя_:    "Исполнитель схватки",
 		СтрКонтроль_: `<title>Схватка</title>`,

+ 1 - 1
server/serv_bots/warbot/angar/death_match/death_worker/death_worker.go

@@ -8,7 +8,7 @@ import (
 	"wartank/pkg/types"
 	"wartank/server/serv_bots/warbot/angar/death_match/death_worker/death_on"
 	"wartank/server/serv_bots/warbot/angar/death_match/death_worker/death_on/battle_sound"
-	"wartank/server/serv_bots/warbot/tank_stat/static_param"
+	"wartank/server/serv_bots/warbot/stat_tank/static_param"
 )
 
 // СражениеДействие -- исполнение схватки

+ 1 - 1
server/serv_bots/warbot/angar/division/div_war/div_war.go

@@ -12,7 +12,7 @@ import (
 	"wartank/server/serv_bots/warbot/angar/division/div_war/div_war_net"
 	"wartank/server/serv_bots/warbot/angar/division/div_war/div_war_on"
 	"wartank/server/serv_bots/warbot/angar/division/div_war/div_war_on/div_war_sound"
-	"wartank/server/serv_bots/warbot/tank_stat/static_param"
+	"wartank/server/serv_bots/warbot/stat_tank/static_param"
 )
 
 /*

+ 1 - 1
server/serv_bots/warbot/angar/division/div_war/divwaron/divwaron.go

@@ -49,7 +49,7 @@ func NewDivWarOn(bot types.ИБот) (*DivWarOn, error) {
 		isMasking:      safe_bool.НовБезопБул(),
 		isEnd:          safe_bool.НовБезопБул(),
 	}
-	аренаКонфиг:= arena.АренаКонфиг{
+	аренаКонфиг := arena.АренаКонфиг{
 		Бот_:         bot,
 		АренаИмя_:    "Сражение",
 		СтрКонтроль_: `<title>Сражения</title>`,

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

@@ -12,7 +12,7 @@ import (
 	"wartank/server/serv_bots/warbot/angar/division/div_war/div_war_net"
 	"wartank/server/serv_bots/warbot/angar/division/div_war/div_war_on"
 	"wartank/server/serv_bots/warbot/angar/division/div_war/div_war_on/div_war_sound"
-	"wartank/server/serv_bots/warbot/tank_stat/static_param"
+	"wartank/server/serv_bots/warbot/stat_tank/static_param"
 )
 
 /*

+ 1 - 1
server/serv_bots/warbot/angar/division/divwar/divwaron/divwaron.go

@@ -49,7 +49,7 @@ func NewDivWarOn(bot types.ИБот) (*DivWarOn, error) {
 		isMasking:      safe_bool.НовБезопБул(),
 		isEnd:          safe_bool.НовБезопБул(),
 	}
-	аренаКонфиг:= arena.АренаКонфиг{
+	аренаКонфиг := arena.АренаКонфиг{
 		Бот_:         bot,
 		АренаИмя_:    "Сражение",
 		СтрКонтроль_: `<title>Сражения</title>`,

+ 1 - 1
server/serv_bots/warbot/angar/fuel/fuel.go

@@ -8,7 +8,7 @@ import (
 	"strings"
 	"time"
 	"wartank/pkg/types"
-	"wartank/server/serv_bots/warbot/tank_stat/static_param"
+	"wartank/server/serv_bots/warbot/stat_tank/static_param"
 )
 
 // Топливо -- топливо в баке, +1 каждые 15 сек

+ 21 - 14
server/serv_bots/warbot/angar/fuel_attack/fuel_attack.go

@@ -7,6 +7,7 @@ import (
 	"os"
 	"strings"
 	"time"
+	"wartank/pkg/arena"
 	"wartank/pkg/components/arena_net"
 	"wartank/pkg/cons"
 	"wartank/pkg/types"
@@ -14,24 +15,30 @@ import (
 
 // ТопливоБой -- объект боя на топливе
 type ТопливоБой struct {
-	types.ИАренаСеть
-	ангар types.ИАнгар
+	types.ИАрена
+	ангар     types.ИАнгар
+	аренаСеть *arena_net.АренаСеть
 }
 
 // НовТопливоБой -- возвращает новый *ТопливоБойNet
-func НовТопливоБой(angar types.ИАнгар) (*ТопливоБой, error) {
-	аренаСеть := arena_net.НовАренаСеть(angar, "https://wartank.ru/battle")
+func НовТопливоБой(ангар types.ИАнгар) (*ТопливоБой, error) {
+	аренаСеть := arena_net.НовАренаСеть(ангар, "https://wartank.ru/battle")
 	сам := &ТопливоБой{
-		ИАренаСеть: аренаСеть,
-		ангар:      angar,
+		ангар:     ангар,
+		аренаСеть: аренаСеть,
 	}
+	аренаКонфиг := arena.АренаКонфиг{
+		Бот_:         ангар.Бот(),
+		АренаИмя_:    "ТопливоБой",
+		СтрКонтроль_: `<title>Бой</title>`,
+		ФнПуск_:      сам.пуск,
+		СтрУрл_:      "https://wartank.ru/angar",
+	}
+	сам.ИАрена = arena.НовАрена(аренаКонфиг)
+	_ = types.ИАрена(сам)
 	return сам, nil
 }
 
-func (сам *ТопливоБой) Пуск() {
-	go сам.пуск()
-}
-
 func (сам *ТопливоБой) пуск() {
 	for {
 		time.Sleep(time.Second * 30) // Минимальный интервал ожидания прибавки топлива
@@ -79,7 +86,7 @@ func (сам *ТопливоБой) начатьБой() (списСтрБой [
 	бойСсылка := списАнгар[1]
 	списАнгар = strings.Split(бойСсылка, `"><span><span>В бой!</span></span></a>`)
 	бойСсылка = "https://wartank.ru/" + списАнгар[0]
-	списСтрБой, err = сам.Get(бойСсылка)
+	списСтрБой, err = сам.аренаСеть.Get(бойСсылка)
 	if err != nil {
 		return nil, fmt.Errorf("ТопливоБой.начатьБой(): in make GET-request to battle, err=\n\t%w", err)
 	}
@@ -136,7 +143,7 @@ func (сам *ТопливоБой) выбратьБойСлабый(списС
 		списСтрБой = strings.Split(ссылкаБой, `"><img class="tank-img" alt="tank" src="/tankimg?`)
 		ссылкаБой = "https://wartank.ru/" + списСтрБой[0]
 	}
-	списСтрВыстрел1, err = сам.Get(ссылкаБой)
+	списСтрВыстрел1, err = сам.аренаСеть.Get(ссылкаБой)
 	if err != nil {
 		return nil, fmt.Errorf("ТопливоБой.makeSelectBattle(): in GET-response select battle tank, err=\n\t%w", err)
 	}
@@ -210,7 +217,7 @@ func (сам *ТопливоБой) сделатьВыстрелы(lstShoot2 []s
 			lstShoot2 = strings.Split(linkShoot2, `"><span><span>Добить</span></span></a>`)
 			linkShoot2 = "https://wartank.ru/" + lstShoot2[0]
 		}
-		списВыстрел3, err = сам.Get(linkShoot2)
+		списВыстрел3, err = сам.аренаСеть.Get(linkShoot2)
 		if err != nil {
 			return fmt.Errorf("ТопливоБой.makeShooting(): in Get-response shoot2, err=\n\t%w", err)
 		}
@@ -284,7 +291,7 @@ func (сам *ТопливоБой) сделатьВыстрелы(lstShoot2 []s
 			linkShoot3 = "https://wartank.ru/" + списВыстрел3[0]
 		}
 
-		if _, err = сам.Get(linkShoot3); err != nil {
+		if _, err = сам.аренаСеть.Get(linkShoot3); err != nil {
 			return fmt.Errorf("ТопливоБой.makeShooting(): in Get-response shoot3, err=\n\t%w", err)
 		}
 		fuel := сам.ангар.Топливо().Получ()

+ 5 - 4
server/serv_bots/warbot/angar/masters/bat_masters.go

@@ -29,16 +29,17 @@ type БитваМастеров struct {
 func НовБитваМастеров(бот types.ИБот) *БитваМастеров {
 	лог := logger.НовЛоггер("БитваМастеров")
 	лог.Инфо("НовБитваМастеров()\n")
-	лог.Проверить(бот != nil, "НовБитваМастеров(): ИБот == nil\n")
+	лог.Паника(бот == nil, "НовБитваМастеров(): ИБот == nil\n")
 	сам := &БитваМастеров{
-		бот:    бот,
-		лог:    лог,
+		бот: бот,
+		лог: лог,
 	}
-	аренаКонфиг:=arena.АренаКонфиг{
+	аренаКонфиг := arena.АренаКонфиг{
 		Бот_:         бот,
 		АренаИмя_:    "Битва мастеров",
 		СтрКонтроль_: `/> Битва мастеров <`,
 		ФнПуск_:      сам.пуск,
+		СтрУрл_:      "https://wartank.ru/pvp",
 	}
 	сам.ИАрена = arena.НовАрена(аренаКонфиг)
 	сам.сеть = arena_net.НовАренаСеть(сам, "https://wartank.ru/pvp")

+ 3 - 2
server/serv_bots/warbot/angar/missions/missions.go

@@ -22,13 +22,14 @@ type Миссии struct {
 // НовМиссии -- возвращает новый *Миссии
 func НовМиссии(бот types.ИБот) (*Миссии, error) {
 	сам := &Миссии{
-		бот:   бот,
+		бот: бот,
 	}
-	аренаКонфиг:=arena.АренаКонфиг{
+	аренаКонфиг := arena.АренаКонфиг{
 		Бот_:         бот,
 		АренаИмя_:    "Миссии",
 		СтрКонтроль_: "<title>Миссии</title>",
 		ФнПуск_:      сам.пуск,
+		СтрУрл_:      "https://wartank.ru/missions/", // https://wartank.ru/missions/
 	}
 	сам.ИАрена = arena.НовАрена(аренаКонфиг)
 	сам.сеть = arena_net.НовАренаСеть(сам, "https://wartank.ru/missions/")

+ 6 - 15
server/serv_bots/warbot/angar/tank_params/tank_params.go

@@ -32,7 +32,7 @@ func (сам *ТанкПараметры) Пуск() {
 	go сам.пуск()
 }
 
-// Запукает в работу в отдельном потоке
+// Запускает в работу в отдельном потоке
 func (сам *ТанкПараметры) пуск() {
 	time.Sleep(time.Second * 4)
 	ош := сам.номерПолуч()
@@ -65,10 +65,7 @@ func (сам *ТанкПараметры) улучшить() error {
 	// https://wartank.ru/pimp/34479487
 	клиент := сам.бот.Сеть().ВебВоркер()
 	фнУлучшить := func() error {
-		лстСтр, ош := клиент.Получ("https://wartank.ru/pimp/" + сам.номер)
-		if ош != nil {
-			return fmt.Errorf("ТанкПараметры.улучшить(): при получении страницы улучшения танка с сервера, ош=\n\t%w", ош)
-		}
+		лстСтр := клиент.Получ("https://wartank.ru/pimp/" + сам.номер)
 		var (
 			стрВых    string
 			еслиНашли bool
@@ -86,11 +83,8 @@ func (сам *ТанкПараметры) улучшить() error {
 		стрВых = strings.TrimPrefix(стрВых, `<a class="simple-but border mb5" href="`)
 		стрВых = strings.TrimSuffix(стрВых, `">`)
 		// https://wartank.ru/pimp/34479487?21-1.ILinkListener-modules-slots-0-slot-root-pimpLink-link
-		стрСсыль := "https://wartank.ru/pimp/" + стрВых
-		_, ош = клиент.Получ(стрСсыль)
-		if ош != nil {
-			return fmt.Errorf("ТанкПараметры.улучшить(): при улучшении танка с сервера, ош=\n\t%w", ош)
-		}
+		стрСсылка := "https://wartank.ru/pimp/" + стрВых
+		_ = клиент.Получ(стрСсылка)
 		return nil
 	}
 	счётОш := 5
@@ -109,10 +103,7 @@ func (сам *ТанкПараметры) улучшить() error {
 // Получает собственный номер танка с сервера
 func (сам *ТанкПараметры) номерПолуч() error {
 	клиент := сам.бот.Сеть().ВебВоркер()
-	лстСтр, ош := клиент.Получ("https://wartank.ru/angar")
-	if ош != nil {
-		return fmt.Errorf("ТанкПараметры.номерПолуч(): при получении страницы ангара с сервера, ош=\n\t%w", ош)
-	}
+	лстСтр := клиент.Получ("https://wartank.ru/angar")
 	var (
 		стрНомер  string
 		еслиНашёл bool
@@ -129,7 +120,7 @@ func (сам *ТанкПараметры) номерПолуч() error {
 	}
 	стрВыход := strings.TrimPrefix(стрНомер, `<a class="simple-but border" href="power/`)
 	стрВыход = strings.TrimSuffix(стрВыход, `"><span><span>Повысить параметры</span></span></a>`)
-	_, ош = strconv.Atoi(стрВыход)
+	_, ош := strconv.Atoi(стрВыход)
 	if ош != nil {
 		return fmt.Errorf("ТанкПараметры.номерПолуч(): ошибка преобразования собственного номера(%s), ош=\n\t%w", стрВыход, ош)
 	}

+ 45 - 0
server/serv_bots/warbot/stat_resurs/stat_resurs.go

@@ -0,0 +1,45 @@
+// package stat_resurs -- статистика ресурсов
+package stat_resurs
+
+import (
+	"fmt"
+	"wartank/pkg/types"
+	"wartank/server/serv_bots/warbot/angar/fuel"
+	"wartank/server/serv_bots/warbot/stat_tank/static_param"
+)
+
+// СтатРесурсы -- статистика ресурсов
+type СтатРесурсы struct {
+	золото       types.ИСтатПарам
+	сереброВсего types.ИСтатПарам
+	топливо      *fuel.Топливо
+}
+
+// НовСтатРесурсы -- новая статистика ресурсов
+func НовСтатРесурсы(ангар types.ИАнгар) *СтатРесурсы {
+	сам := &СтатРесурсы{
+		золото:       static_param.НовСтатПарам("gold"),
+		сереброВсего: static_param.НовСтатПарам("silver_all"),
+	}
+	var ош error
+	сам.топливо, ош = fuel.НовТопливо(ангар)
+	if ош != nil {
+		panic(fmt.Errorf("НовСтатРесурсы(): in make *Missions, err=\n\t%w", ош))
+	}
+	return сам
+}
+
+// Топливо -- возвращает топливо
+func (сам *СтатРесурсы) Топливо() *fuel.Топливо {
+	return сам.топливо
+}
+
+// СереброВсего -- возвращает общее количество серебро
+func (сам *СтатРесурсы) СереброВсего() types.ИСтатПарам {
+	return сам.сереброВсего
+}
+
+// Золото -- возвращает количество золотых ресурсов
+func (сам *СтатРесурсы) Золото() types.ИСтатПарам {
+	return сам.золото
+}

+ 1 - 1
server/serv_bots/warbot/tank_stat/static_param/static_param.go → server/serv_bots/warbot/stat_tank/static_param/static_param.go

@@ -23,7 +23,7 @@ type СтатПарам struct {
 func НовСтатПарам(имя string) *СтатПарам {
 	лог := logger.НовЛоггер("СтатПарам")
 	лог.Инфо("НовСтатПарам(%s)\n", имя)
-	лог.Проверить(имя != "", "НовСтатПарам(): имя параметра пустое\n")
+	лог.Паника(имя == "", "НовСтатПарам(): имя параметра пустое\n")
 	сам := &СтатПарам{
 		имя: имя,
 	}

+ 13 - 13
server/serv_bots/warbot/tank_stat/tank_stat.go → server/serv_bots/warbot/stat_tank/tank_stat.go

@@ -1,8 +1,8 @@
-package tank_stat
+package stat_tank
 
 import (
 	"wartank/pkg/types"
-	"wartank/server/serv_bots/warbot/tank_stat/static_param"
+	"wartank/server/serv_bots/warbot/stat_tank/static_param"
 )
 
 /*
@@ -10,8 +10,8 @@ import (
 	Броня, атака, прочность и т.п.
 */
 
-// ТанкСтат -- статические параметры танка
-type ТанкСтат struct {
+// СтатТанк -- статические параметры танка
+type СтатТанк struct {
 	атака     types.ИСтатПарам // Сила атаки танка
 	точность  types.ИСтатПарам // Точность танка
 	прочность types.ИСтатПарам // Броня танка
@@ -21,8 +21,8 @@ type ТанкСтат struct {
 }
 
 // НовТанкСтат -- возвращает новый *TankStat
-func НовТанкСтат() *ТанкСтат {
-	сам := &ТанкСтат{
+func НовТанкСтат() *СтатТанк {
+	сам := &СтатТанк{
 		атака:     static_param.НовСтатПарам("атака"),
 		точность:  static_param.НовСтатПарам("точность"),
 		прочность: static_param.НовСтатПарам("прочность"),
@@ -34,37 +34,37 @@ func НовТанкСтат() *ТанкСтат {
 }
 
 // Атака -- возвращает объект силы атаки
-func (сам *ТанкСтат) Атака() types.ИСтатПарам {
+func (сам *СтатТанк) Атака() types.ИСтатПарам {
 	return сам.атака
 }
 
 // Прочность -- возвращает объект прочности танка
-func (сам *ТанкСтат) Прочность() types.ИСтатПарам {
+func (сам *СтатТанк) Прочность() types.ИСтатПарам {
 	return сам.броня
 }
 
 // Точность -- возвращает объект точности танка
-func (сам *ТанкСтат) Точность() types.ИСтатПарам {
+func (сам *СтатТанк) Точность() types.ИСтатПарам {
 	return сам.точность
 }
 
 // Броня -- возвращает объект брони танка
-func (сам *ТанкСтат) Броня() types.ИСтатПарам {
+func (сам *СтатТанк) Броня() types.ИСтатПарам {
 	return сам.прочность
 }
 
 // Мощь -- возвращает объект мощи танка
-func (сам *ТанкСтат) Мощь() types.ИСтатПарам {
+func (сам *СтатТанк) Мощь() types.ИСтатПарам {
 	return сам.power
 }
 
 // Форсаж -- возвращает объект форсированного параметра
-func (сам *ТанкСтат) Форсаж() types.ИСтатПарам {
+func (сам *СтатТанк) Форсаж() types.ИСтатПарам {
 	return сам.усиление
 }
 
 // Форсаж -- возвращает объект форсированного параметра
-func (сам *ТанкСтат) ФорсажОбнов(парам string, знач int) {
+func (сам *СтатТанк) ФорсажОбнов(парам string, знач int) {
 	сам.усиление = static_param.НовСтатПарам("force")
 	сам.усиление.Уст(знач)
 }

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

@@ -11,7 +11,7 @@ import (
 	"wartank/pkg/components/safe_bool"
 	"wartank/pkg/types"
 	"wartank/server/serv_bots/warbot/angar"
-	"wartank/server/serv_bots/warbot/tank_stat"
+	"wartank/server/serv_bots/warbot/stat_tank"
 	"wartank/server/serv_bots/warbot/warbot_config"
 	"wartank/server/serv_bots/warbot/warbot_net"
 )
@@ -114,7 +114,7 @@ func создатьЯдроВарБот(серв types.ИСервер, конф
 	сам := &ВарБот{
 		сервер:         серв,
 		store:          серв.Хранилище(),
-		стата:          tank_stat.НовТанкСтат(),
+		стата:          stat_tank.НовТанкСтат(),
 		еслиРаботает:   safe_bool.НовБезопБул(),
 		еслиАвтозапуск: safe_bool.НовБезопБул(),
 		конфиг:         конфиг,
@@ -122,12 +122,8 @@ func создатьЯдроВарБот(серв types.ИСервер, конф
 		фтОтмена:       fnCancel,
 	}
 	var err error
-	{ // WarBotNet
-		сам.сеть, err = warbot_net.НовВарБотСеть(сам)
-		if err != nil {
-			return nil, fmt.Errorf("NewWarBot(): in make IBotNet, err=\n\t%w", err)
-		}
-	}
+	// WarBotNet
+	сам.сеть = warbot_net.НовВарБотСеть(сам)
 	сам.ангар, err = angar.НовАнгар(сам)
 	if err != nil {
 		return nil, fmt.Errorf("NewWarBot(): bot(%q) in make IAngar, err=\n\t%w", сам.Имя(), err)

+ 10 - 7
server/serv_bots/warbot/warbot_net/bot_cookie/bot_cookie.go

@@ -1,9 +1,10 @@
 package bot_cookie
 
 import (
-	"fmt"
 	"net/http"
 	"sync"
+	"wartank/pkg/components/kernel/logger"
+	"wartank/pkg/types"
 )
 
 /*
@@ -14,20 +15,23 @@ import (
 type BotCookie struct {
 	cookie []*http.Cookie
 	block  sync.RWMutex
+	лог types.ИЛоггер
 }
 
 // NewBotCookie -- возвращает новый *NetCookie
 func NewBotCookie() BotCookie {
-	return BotCookie{}
+	лог:=logger.НовЛоггер("NetCookie")
+	лог.Инфо("NetCookie()\n")
+	return BotCookie{
+		лог: лог,
+	}
 }
 
 // Уст -- устанавливает кукисы
-func (сам *BotCookie) Уст(cook []*http.Cookie) error {
+func (сам *BotCookie) Уст(cook []*http.Cookie) {
 	сам.block.Lock()
 	defer сам.block.Unlock()
-	if cook == nil {
-		return fmt.Errorf("NetCookie.Уст(): cookie is nil")
-	}
+	сам.лог.Паника(cook == nil, "NetCookie.Уст(): cookie == nil")
 	сам.cookie = cook
 	cookie := http.Cookie{
 		Name:  "JSESSIONID",
@@ -55,7 +59,6 @@ func (сам *BotCookie) Уст(cook []*http.Cookie) error {
 		Value: "w",
 	}
 	сам.cookie = append(сам.cookie, &cookie)
-	return nil
 }
 
 // Получ -- возвращает хранимые кукисы

+ 47 - 85
server/serv_bots/warbot/warbot_net/bot_net_login/bot_net_login.go

@@ -2,12 +2,11 @@
 package bot_net_login
 
 import (
-	"fmt"
 	"io"
 	"net/http"
 	"net/url"
 	"strings"
-
+	"wartank/pkg/components/kernel/logger"
 	"wartank/pkg/types"
 )
 
@@ -16,81 +15,55 @@ type БотСетьЛогин struct {
 	сеть types.ИБотСеть
 	conn *http.Client // Сырой клиент HTTP
 	куки types.ИБотКуки
+	лог  types.ИЛоггер
 }
 
 // НовБотСетьЛогин -- возвращает новый *БотСетьЛогин
-func НовБотСетьЛогин(ботСеть types.ИБотСеть, conn *http.Client) (*БотСетьЛогин, error) {
-	{ // Предусловия
-		if ботСеть == nil {
-			return nil, fmt.Errorf("НовБотСетьЛогин(): ИБотСеть пустышка")
-		}
-	}
+func НовБотСетьЛогин(ботСеть types.ИБотСеть, conn *http.Client) *БотСетьЛогин {
+	лог := logger.НовЛоггер("БотСетьЛогин")
+	лог.Инфо("НовБотСетьЛогин()\n")
+	лог.Паника(ботСеть == nil, "НовБотСетьЛогин(): ИБотСеть==nil")
 
 	сам := &БотСетьЛогин{
 		сеть: ботСеть,
 		conn: conn,
 		куки: ботСеть.Куки(),
+		лог:  лог,
 	}
-	if err := сам.подключить(); err != nil {
-		return nil, fmt.Errorf("НовБотСетьЛогин() in connect to server, err=\n\t%w", err)
-	}
-	return сам, nil
+	сам.подключить()
+	return сам
 }
 
 // Вызывается один раз
-func (сам *БотСетьЛогин) подключить() (err error) {
-	ссылкаНачать, err := сам.получСтрГлав()
-	if err != nil {
-		return fmt.Errorf("БотСетьЛогин.подключить(): при получении главной страницы, err=\n\t%w", err)
-	}
-	switch ссылкаНачать != "" {
-	case true: // Это вход на базу
-		стрСтрЛогин, ош := сам.получСтрЛогин(ссылкаНачать)
-		if ош != nil {
-			return fmt.Errorf("БотСетьЛогин.подключить(): при получении страницы логина, err=\n\t%w", ош)
-		}
-		if ош = сам.выполнитьЛогин(стрСтрЛогин); ош != nil {
-			return fmt.Errorf("БотСетьЛогин.подключить(): при выполнении логина, err=\n\t%w", ош)
-		}
-		return nil
-	default: // Логин уже был
-		запр, ош1 := http.NewRequest("GET", "https://wartank.ru/angar", nil)
-		if ош1 != nil {
-			return fmt.Errorf("БотСетьЛогин.подключить(): in get page angar, err=\n\t%w", ош1)
-
-		}
-		resp, ош2 := сам.conn.Do(запр)
-		if ош2 != nil {
-			return fmt.Errorf("БотСетьЛогин.подключить(): in make request, err=\n\t%w", ош2)
-		}
-		defer resp.Body.Close()
-		_, ош := io.ReadAll(resp.Body)
-		if ош != nil {
-			return fmt.Errorf("БотСетьЛогин.подключить(): in read body response, err=\n\t%w", ош)
-		}
-	}
-	return nil
+func (сам *БотСетьЛогин) подключить() {
+	ссылкаНачать := сам.получСтрГлав()
+	if ссылкаНачать != "" { // Это вход на базу
+		стрСтрЛогин := сам.получСтрЛогин(ссылкаНачать)
+		сам.выполнитьЛогин(стрСтрЛогин)
+		return
+	}
+	// Логин уже был
+	запр, ош1 := http.NewRequest("GET", "https://wartank.ru/angar", nil)
+	сам.лог.Паника(ош1 != nil, "БотСетьЛогин.подключить(): при получении страницы ангара, err=\n\t%v\n", ош1)
+	resp, ош2 := сам.conn.Do(запр)
+	сам.лог.Паника(ош2 != nil, "БотСетьЛогин.подключить(): при выполнении запроса, err=\n\t%v\n", ош2)
+	defer resp.Body.Close()
+	_, ош := io.ReadAll(resp.Body)
+	сам.лог.Паника(ош != nil, "БотСетьЛогин.подключить(): при получении тела страницы ангара, err=\n\t%v\n", ош)
 }
 
 // Прочитать главную страницу для получения кукисов
-func (сам *БотСетьЛогин) получСтрГлав() (string, error) {
-	// _mt.Println("\БотСетьЛогин.getMainPage()")
+func (сам *БотСетьЛогин) получСтрГлав() string {
 	ответ, ош := сам.conn.Get("https://wartank.ru/")
-	if ош != nil {
-		return "", fmt.Errorf("БотСетьЛогин.получСтрГлав(): err=\n\t%w", ош)
-	}
+	сам.лог.Паника(ош != nil, "БотСетьЛогин.получСтрГлав(): err=\n\t%v\n", ош)
 	defer ответ.Body.Close()
 	// Получить куки из ответа
 	куки := ответ.Cookies()
 	if len(куки) > 0 {
-		if ош = сам.куки.Уст(куки); ош != nil {
-			return "", fmt.Errorf("БотСетьЛогин.получСтрГлав(): при установки куки, err=\n\t%w", ош)
-		}
+		сам.куки.Уст(куки)
 	}
 	бинДанные, ош := io.ReadAll(ответ.Body)
-	if ош != nil {
-		return "", fmt.Errorf("БотСетьЛогин.получСтрГлав(): при чтении тела ответа, err=\n\t%w", ош)
-	}
+	сам.лог.Паника(ош != nil, "БотСетьЛогин.получСтрГлав(): при чтении тела ответа, err=\n\t%v\n", ош)
 	// Вырезать из тела страницы ссылку на вход
 	списСтр := strings.Split(string(бинДанные), "\n")
 	var (
@@ -104,36 +77,30 @@ func (сам *БотСетьЛогин) получСтрГлав() (string, erro
 		}
 	}
 	if стрВых == "" { // Уже был логин
-		return "", nil
+		return ""
 	}
 	{ // Получить ссылку на вход
 		списСсылка := strings.Split(стрВых, `href="`)
 		списСсылка = strings.Split(списСсылка[1], `"><span><span>`)
 		ссылкаНач = "https://wartank.ru/" + списСсылка[0]
 	}
-	return ссылкаНач, nil
+	return ссылкаНач
 }
 
 // Получает страницу логина
-func (сам *БотСетьЛогин) получСтрЛогин(linkBegin string) (string, error) {
+func (сам *БотСетьЛогин) получСтрЛогин(linkBegin string) string {
 	// _mt.Println("\БотСетьЛогин.getPageLogin()")
 	ответ, ош := сам.conn.Get(linkBegin)
-	if ош != nil {
-		return "", fmt.Errorf("БотСетьЛогин.получСтрЛогин(): in mske GET-request for send login page, err=\n\t%w", ош)
-	}
+	сам.лог.Паника(ош != nil, "БотСетьЛогин.получСтрЛогин(): in make GET-request for send login page, err=\n\t%v\n", ош)
 	defer ответ.Body.Close()
-	// сам.cookie = resp.Cookies()
 	данные, ош := io.ReadAll(ответ.Body)
-	if ош != nil {
-		return "", fmt.Errorf("БотСетьЛогин.получСтрЛогин(): in read body response, err=\n\t%w", ош)
-	}
+	сам.лог.Паника(ош != nil, "БотСетьЛогин.получСтрЛогин(): in read body response, err=\n\t%v\n", ош)
 	стрТелоЛогин := string(данные)
-	// сам.app.AddLog(fmt.Sprintf("БотСетьЛогин.получСтрЛогин(): page_login=\n%v\n\n", strBodyLogin))
-	return стрТелоЛогин, nil
+	return стрТелоЛогин
 }
 
 // Выполняет логин через POST-запрос
-func (сам *БотСетьЛогин) выполнитьЛогин(strBody string) (err error) {
+func (сам *БотСетьЛогин) выполнитьЛогин(strBody string) {
 	// _mt.Println("\БотСетьЛогин.makePostLogin()")
 	var strBodyMain string
 	{ // Получить форму логина
@@ -152,22 +119,17 @@ func (сам *БотСетьЛогин) выполнитьЛогин(strBody str
 		lstLink = strings.Split(strLink, `"><div style=`)
 		postLink = "https://wartank.ru/" + lstLink[0]
 	}
-	{ // Конструируем ПОСТ-форму логина
-		form := url.Values{}
-		form.Add("id1_hf_0", "")
-		form.Add("login", сам.сеть.Бот().Имя())
-		form.Add("password", сам.сеть.Бот().Пароль())
+	// Конструируем ПОСТ-форму логина
+	form := url.Values{}
+	form.Add("id1_hf_0", "")
+	form.Add("login", сам.сеть.Бот().Имя())
+	form.Add("password", сам.сеть.Бот().Пароль())
+
+	resp, err := сам.conn.PostForm(postLink, form)
+	сам.лог.Паника(resp.StatusCode != 200, "БотСетьЛогин.makePostLogin():  in get POST-login response, err=\n\t%v\n", err)
+	defer resp.Body.Close()
+	сам.лог.Паника(err != nil, "БотСетьЛогин.makePostLogin(): in read body POST-login response, err=\n\t%v\n", err)
+	urlObj, _ := url.Parse("https://wartank.ru/")
+	сам.conn.Jar.SetCookies(urlObj, сам.куки.Получ())
 
-		resp, err := сам.conn.PostForm(postLink, form)
-		if err != nil {
-			return fmt.Errorf("БотСетьЛогин.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("БотСетьЛогин.makePostLogin(): in read body POST-login response, err=\n\t%w", err)
-		}
-		urlObj, _ := url.Parse("https://wartank.ru/")
-		сам.conn.Jar.SetCookies(urlObj, сам.куки.Получ())
-	}
-	return nil
 }

+ 13 - 15
server/serv_bots/warbot/warbot_net/warbot_net.go

@@ -2,9 +2,8 @@ package warbot_net
 
 import (
 	"context"
-	"fmt"
-	"log"
 	"wartank/pkg/components/arena_net/http_worker"
+	"wartank/pkg/components/kernel/logger"
 	"wartank/pkg/components/safe_bool"
 	"wartank/pkg/types"
 	"wartank/server/serv_bots/warbot/warbot_net/bot_net_login"
@@ -24,14 +23,16 @@ type ВарБотСеть struct {
 	вебВоркер  types.ИХттпВоркер
 	ctx        context.Context
 	фнОтмена   func()
+	лог types.ИЛоггер
 }
 
 // НовВарБотСеть -- возвращает новый коннект к сети бота
-func НовВарБотСеть(бот types.ИБот) (*ВарБотСеть, error) {
-	if бот == nil {
-		return nil, fmt.Errorf("НовВарБотСеть(): IBot == nil")
-	}
-	log.Printf("НовВарБотСеть(): имя=%q\n", бот.Имя())
+func НовВарБотСеть(бот types.ИБот) *ВарБотСеть {
+	лог:=logger.НовЛоггер("ВарБотСеть")
+	лог.Инфо("НовВарБотСеть()\n")
+	лог.Паника(бот == nil, "НовВарБотСеть(): ИБот == nil")
+
+	лог.Инфо("НовВарБотСеть(): имя=%q\n", бот.Имя())
 	ctx, фнОтмена := context.WithCancel(бот.Контекст())
 	сам := &ВарБотСеть{
 		бот:        бот,
@@ -39,18 +40,15 @@ func НовВарБотСеть(бот types.ИБот) (*ВарБотСеть, e
 		еслиОнлайн: safe_bool.НовБезопБул(),
 		ctx:        ctx,
 		фнОтмена:   фнОтмена,
+		лог:        лог,
 	}
 	сам.вебВоркер = http_worker.НовХттпВоркер(сам, сам.вебСокет.ВебСокет())
-	{ // Подключаем сетевой логин
-		var err error
-		сам.логин, err = bot_net_login.НовБотСетьЛогин(сам, сам.вебСокет.ВебСокет())
-		if err != nil {
-			return nil, fmt.Errorf("НовВарБотСеть(): при создании BotNetLogin, err=\n\t%w", err)
-		}
-	}
+	// Подключаем сетевой логин
+	сам.логин = bot_net_login.НовБотСетьЛогин(сам, сам.вебСокет.ВебСокет())
+
 	сам.еслиОнлайн.Уст()
 	_ = types.ИБотСеть(сам)
-	return сам, nil
+	return сам
 }
 
 // Бот -- возвращает ссылку на своего бота

+ 7 - 7
server/serv_web/serv_web.go

@@ -27,7 +27,7 @@ type СервВеб struct {
 func НовСервВеб(серв types.ИСервер) *СервВеб {
 	лог := logger.НовЛоггер("СервВеб")
 	лог.Инфо("НовСервВеб()\n")
-	лог.Проверить(серв != nil, "НовСервВеб(): ИСервер==nil")
+	лог.Паника(серв == nil, "НовСервВеб(): ИСервер==nil")
 	рендер := html.New("./web/tmpl", ".tmpl.html")
 
 	конф := fiber.Config{
@@ -88,10 +88,10 @@ func НовСервВеб(серв types.ИСервер) *СервВеб {
 		файбер: *fiber.New(конф),
 		лог:    лог,
 	}
-	копресКонфиг := compress.Config{
+	компресКонфиг := compress.Config{
 		Level: compress.LevelBestCompression,
 	}
-	сам.файбер.Use(compress.New(копресКонфиг))
+	сам.файбер.Use(compress.New(компресКонфиг))
 	сам.файбер.Static("/static", "./web/static", fiber.Static{
 		Compress:      true,
 		ByteRange:     true,
@@ -119,12 +119,12 @@ func (сам *СервВеб) Сервер() types.ИСервер {
 	return сам.серв
 }
 
-// Пуск -- запускае веб-сервер в работу
+// Пуск -- запускает веб-сервер в работу
 func (сам *СервВеб) Пуск() {
 	фнПуск := func() {
 		сам.лог.Инфо("СервВеб.Пуск().фнПуск(): порт=%q\n", сам.порт)
 		ош := сам.файбер.Listen(":" + сам.порт)
-		сам.лог.Проверить(ош == nil, "СервВеб.Пуск(): при работе веб-сервера, ош=\n\t%v\n", ош)
+		сам.лог.Паника(ош != nil, "СервВеб.Пуск(): при работе веб-сервера, ош=\n\t%v\n", ош)
 	}
 	stage := os.Getenv("STAGE")
 	switch stage {
@@ -135,7 +135,7 @@ func (сам *СервВеб) Пуск() {
 	case "prod2":
 		сам.порт = "18062"
 	default:
-		сам.лог.Проверить(false, "СервВеб.Пуск(): не установлена переменная STAGE")
+		сам.лог.Паника(true, "СервВеб.Пуск(): не установлена переменная STAGE")
 	}
 	go фнПуск()
 }
@@ -158,7 +158,7 @@ func (сам *СервВеб) постБотСтат(кнт *fiber.Ctx) error {
 	бот := ботоФерма.Get(номер)
 	if бот == nil {
 		return кнт.JSON(fiber.Map{
-			"error": fmt.Sprintf("СервВеб.постБотСтат(): бот c имнем %q не существует", номер),
+			"error": fmt.Sprintf("СервВеб.постБотСтат(): бот c именем %q не существует", номер),
 		})
 	}
 	диктБот := map[string]string{}

+ 5 - 5
server/serv_web/web_api/web_api.go

@@ -23,7 +23,7 @@ type ВебАпи struct {
 // НовВебАпи -- возвращает новый веб-сервер для API
 func НовВебАпи(вебСервер types.ИВебСервер) *ВебАпи {
 	лог := logger.НовЛоггер("ВебАпи")
-	лог.Проверить(вебСервер != nil, "НовВебАпи(): ИВебСервер==nil")
+	лог.Паника(вебСервер == nil, "НовВебАпи(): ИВебСервер==nil")
 	сам := &ВебАпи{
 		серв:   вебСервер.Сервер(),
 		файбер: *вебСервер.Файбер(),
@@ -54,7 +54,7 @@ func НовВебАпи(вебСервер types.ИВебСервер) *ВебА
 	сам.файбер.Get("/api/bot/:number/arsenal/mode", сам.арсеналРежим)
 	сам.файбер.Get("/api/bot/:number/arsenal/count_product", сам.полигонРаботаКоличество)
 	сам.файбер.Get("/api/bot/:number/arsenal/name_product", сам.арсеналРаботаИмя)
-	сам.файбер.Get("/api/bot/:number/arsenal/back_time", сам.ареналВремяОсталось)
+	сам.файбер.Get("/api/bot/:number/arsenal/back_time", сам.арсеналВремяОсталось)
 	сам.файбер.Get("/api/bot/:number/arsenal/log", сам.арсеналЛог)
 	return сам
 }
@@ -119,7 +119,7 @@ func (сам *ВебАпи) арсеналУровень(кнт *fiber.Ctx) erro
 }
 
 // Возвращает время, которое осталось на арсенале
-func (сам *ВебАпи) ареналВремяОсталось(кнт *fiber.Ctx) error {
+func (сам *ВебАпи) арсеналВремяОсталось(кнт *fiber.Ctx) error {
 	номер, ош := кнт.ParamsInt("number")
 	if ош != nil {
 		сообщ := fmt.Sprintf("[Время: неправильный номер бота(%q), err=%v]", номер, ош.Error())
@@ -198,7 +198,7 @@ func (сам *ВебАпи) полигонРаботаИмя(кнт *fiber.Ctx)
 	return кнт.SendString("[Тип: " + имя + "]")
 }
 
-// Возвращает количесто добычи на полигоне
+// Возвращает количество добычи на полигоне
 func (сам *ВебАпи) полигонРаботаКоличество(кнт *fiber.Ctx) error {
 	номер, ош := кнт.ParamsInt("number")
 	if ош != nil {
@@ -317,7 +317,7 @@ func (сам *ВебАпи) шахтаРаботаИмя(кнт *fiber.Ctx) erro
 	return кнт.SendString("[Тип: " + имя + "]")
 }
 
-// Возвращает количесто добычи в шахте
+// Возвращает количество добычи в шахте
 func (сам *ВебАпи) шахтаРаботаКоличество(кнт *fiber.Ctx) error {
 	номер, ош := кнт.ParamsInt("number")
 	if ош != nil {

+ 1 - 1
server/serv_web/web_gui/web_gui.go

@@ -22,7 +22,7 @@ type ВебГуи struct {
 // НовВебГуи -- возвращает новый веб-сервер для графики
 func НовВебГуи(вебСервер types.ИВебСервер) *ВебГуи {
 	лог := logger.НовЛоггер("ВебГуи")
-	лог.Проверить(вебСервер != nil, "НовВебГуи(): ИВебСервер==nil")
+	лог.Паника(вебСервер == nil, "НовВебГуи(): ИВебСервер==nil")
 	сам := &ВебГуи{
 		серв:   вебСервер.Сервер(),
 		файбер: вебСервер.Файбер(),

+ 5 - 5
server/server_stat/server_stat.go

@@ -24,7 +24,7 @@ type СерверСтат struct {
 func НовСерверСтат(серв types.ИСервер) *СерверСтат {
 	лог := logger.НовЛоггер("СерверСтат")
 	лог.Инфо("НовСерверСтат()\n")
-	лог.Проверить(серв != nil, "НовСерверСтат: ИСервер == nil")
+	лог.Паника(серв == nil, "НовСерверСтат: ИСервер == nil")
 	сам := &СерверСтат{
 		серв:         серв,
 		CчётСтарт_:   0,
@@ -46,10 +46,10 @@ func (сам *СерверСтат) загр() {
 		if strings.Contains(ош.Error(), "not found") {
 			return
 		}
-		сам.лог.Проверить(false, "СерверСтат.загр(): при загрузке статистики из хранилища, ош=\n\t%v\n", ош)
+		сам.лог.Паника(true, "СерверСтат.загр(): при загрузке статистики из хранилища, ош=\n\t%v\n", ош)
 	}
 	ош = json.Unmarshal(бинДанные, сам)
-	сам.лог.Проверить(ош == nil, "СерверСтат.загр(): при декодировании статистики из JSON, ош=\n\t%v\n", ош)
+	сам.лог.Паника(ош != nil, "СерверСтат.загр(): при декодировании статистики из JSON, ош=\n\t%v\n", ош)
 	go сам.пуск()
 }
 
@@ -76,9 +76,9 @@ func (сам *СерверСтат) пуск() {
 // Сохраняет статистику сервера
 func (сам *СерверСтат) сохр() {
 	бинДанные, ош := json.Marshal(сам)
-	сам.лог.Проверить(ош == nil, "СерверСтат.сохр(): при кодировании статистики в JSON, ош=\n\t%v\n", ош)
+	сам.лог.Паника(ош != nil, "СерверСтат.сохр(): при кодировании статистики в JSON, ош=\n\t%v\n", ош)
 	ош = сам.серв.Хранилище().Уст("server_stat", бинДанные)
-	сам.лог.Проверить(ош == nil, "СерверСтат.сохр(): при сохранении статистики в хранилище, ош=\n\t%v\n", ош)
+	сам.лог.Паника(ош != nil, "СерверСтат.сохр(): при сохранении статистики в хранилище, ош=\n\t%v\n", ош)
 }
 
 // СчётСтарт -- счётчик запусков