Sfoglia il codice sorgente

SVI Переделка на новую архитектуру

SVI 1 anno fa
parent
commit
44b4af52e5

+ 0 - 70
app/lev3/bot/angar/death_match/battle.go

@@ -1,70 +0,0 @@
-// package death_match -- объект схватки
-package death_match
-
-import (
-	"time"
-
-	. "wartank/app/lev0/types"
-	"wartank/app/lev2/arena"
-	"wartank/app/lev2/arena_battle/battle_register"
-	"wartank/app/lev2/arena_battle/battle_wait"
-	"wartank/app/lev2/arena_battle/battle_worker"
-	. "wartank/kernel/kernel_types"
-)
-
-// Сражение -- объект схватки
-type Схватка struct {
-	ИАрена
-	бот    ИБот
-	клиент ИХттпВоркер
-
-	регистрация *battle_register.СхваткаРегистрация // Регистратор на сражение
-	ожидание    *battle_wait.СхваткаОжидание        // Ожидатель начала схватки
-	действие    *battle_worker.СхваткаИсполнитель   // Исполнитель схватки
-
-}
-
-// НовСражение -- возвращает новый *Battle
-func НовСхватка(конт ИЯдроКонтекст, бот ИБот) *Схватка {
-	сам := &Схватка{
-		бот:    бот,
-		клиент: бот.Сеть().ВебВоркер(),
-	}
-	аренаКонфиг := arena.АренаКонфиг{
-		Бот_:         бот,
-		АренаИмя_:    "Группа схватки",
-		СтрКонтроль_: `<span>до начала `,
-		ФнПуск_:      сам.пуск,
-	}
-	сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
-	сам.регистрация = battle_register.НовСражениеРегистрация(конт, бот)
-	сам.ожидание = battle_wait.НовСражениеОжидание(конт, бот)
-	сам.действие = battle_worker.НовСражениеИсполнитель(конт, бот)
-	// сам.shotTimeFull.Set(8000) // 8000 msec
-	return сам
-}
-
-func (сам *Схватка) Пуск() error {
-	go сам.пуск()
-	return nil
-}
-
-// запускает в работу сражение
-func (сам *Схватка) пуск() {
-	for {
-		select {
-		case <-сам.бот.Контекст().Done():
-			return
-		default:
-			сам.регистрация.Зарегистрироваться()
-			сам.ожидание.Ожидать()
-			сам.действие.Пуск()
-			time.Sleep(time.Second * 2) // Пауза между циклами, чтобы сервер не долбить запросами
-		}
-	}
-}
-
-// ЕслиНачало -- возвращает признак начала схватки (для браузера)
-func (сам *Схватка) ЕслиНачало() ИСтатПарам {
-	return сам.действие.Тревога()
-}

+ 0 - 48
app/lev3/bot/angar/death_match/death_worker/death_on/battle_sound/battle_sound.go

@@ -1,48 +0,0 @@
-package battle_sound
-
-import (
-	"time"
-	"wartank/app/lev1/sound"
-	"wartank/app/lev2/arena_battle/battle_worker/battle_worker/battle_sound/is_sound_play"
-)
-
-/*
-	Выполняет контроль за запуском одной озвучки битвы
-*/
-
-// BattleSound -- контроль одного раза запуска звука битвы
-type BattleSound struct {
-	isPlay *is_sound_play.IsPlay
-}
-
-// NewBattleSound -- возвращает новый  *BattleSound
-func NewBattleSound() *BattleSound {
-	return &BattleSound{
-		isPlay: is_sound_play.NewIsPlay(),
-	}
-}
-
-// Play -- играет музончик, если можно
-func (сам *BattleSound) Play() {
-	if сам.isPlay.Get() {
-		return
-	}
-	go сам.play()
-}
-
-// Проигрывает экслюзивно в отдельном потоке звук
-func (сам *BattleSound) play() {
-	сам.isPlay.Set()
-	val := 7
-	for val > 0 {
-		sound.Battle()
-		val--
-		time.Sleep(time.Second * 1)
-	}
-	val = 600 // Пауза для блокировки повторного включения начатой битвы
-	for val >= 0 {
-		val--
-		time.Sleep(time.Second * 1)
-	}
-	сам.isPlay.Reset()
-}

+ 0 - 48
app/lev3/bot/angar/death_match/death_worker/death_on/battlesound/battlesound.go

@@ -1,48 +0,0 @@
-package battle_sound
-
-import (
-	"time"
-	"wartank/app/lev1/sound"
-	"wartank/app/lev2/arena_battle/battle_worker/battle_worker/battle_sound/is_sound_play"
-)
-
-/*
-	Выполняет контроль за запуском одной озвучки битвы
-*/
-
-// BattleSound -- контроль одного раза запуска звука битвы
-type BattleSound struct {
-	isPlay *is_sound_play.IsPlay
-}
-
-// NewBattleSound -- возвращает новый  *BattleSound
-func NewBattleSound() *BattleSound {
-	return &BattleSound{
-		isPlay: is_sound_play.NewIsPlay(),
-	}
-}
-
-// Play -- играет музончик, если можно
-func (сам *BattleSound) Play() {
-	if сам.isPlay.Get() {
-		return
-	}
-	go сам.play()
-}
-
-// Проигрывает экслюзивно в отдельном потоке звук
-func (сам *BattleSound) play() {
-	сам.isPlay.Set()
-	val := 7
-	for val > 0 {
-		sound.Battle()
-		val--
-		time.Sleep(time.Second * 1)
-	}
-	val = 600 // Пауза для блокировки повторного включения начатой битвы
-	for val >= 0 {
-		val--
-		time.Sleep(time.Second * 1)
-	}
-	сам.isPlay.Reset()
-}

+ 0 - 105
app/lev3/bot/angar/death_match/death_worker/death_on/death_on.go

@@ -1,105 +0,0 @@
-package death_on
-
-import (
-	"context"
-	"time"
-
-	. "wartank/app/lev0/types"
-	"wartank/app/lev2/arena"
-	"wartank/app/lev2/arena_death/death_worker/death_on/health"
-	"wartank/app/lev2/arena_death/death_worker/death_on/manevr"
-	"wartank/app/lev2/arena_death/death_worker/death_on/shot"
-	"wartank/app/lev2/arena_death/death_worker/death_on/shot/is_shot"
-	. "wartank/kernel/kernel_types"
-)
-
-/*
-	Предоставляет сетевой компонент при непосредственном сражении
-*/
-
-// СхваткаДействие -- непосредственно танкует в сражении
-type СхваткаДействие struct {
-	ИАрена
-	бот        ИБот
-	кнт        context.Context // Контекст сражения
-	фнОтменить func()          // Функция отмены сражения
-
-	выстрел     *shot.Выстрел    // Объект выстрела
-	здоровье    *health.Здоровье // Текущее здоровье танка
-	манёвр      *manevr.Манёвр   // Возможность маневрирования
-	логин       string
-	еслиВыстрел *is_shot.IsShot // Признак необходимости маскирования (запрет стрельбы, когда слабое здоровье)
-}
-
-// НовСхваткаДействие -- возвращает новый *СхваткаДействие
-func НовСхваткаДействие(конт ИЯдроКонтекст, бот ИБот) *СхваткаДействие {
-	// Ограничить время сражения бота
-	кнтСражение, фнОтменить := context.WithTimeout(бот.Контекст(), time.Second*305)
-	сам := &СхваткаДействие{
-		бот:         бот,
-		кнт:         кнтСражение,
-		фнОтменить:  фнОтменить,
-		логин:       бот.Имя(),
-		еслиВыстрел: is_shot.NewIsShot(),
-	}
-	аренаКонфиг := arena.АренаКонфиг{
-		Бот_:         сам.бот,
-		АренаИмя_:    "Исполнитель схватки",
-		СтрКонтроль_: `<title>Схватка</title>`,
-		ФнПуск_:      сам.пуск,
-		СтрУрл_:      "https://wartank.ru/de",
-	}
-	сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
-	go сам.пуск()
-	return сам
-}
-
-// запускает сражение
-func (сам *СхваткаДействие) пуск() {
-	defer func() {
-		сам.фнОтменить()
-		// log._rintf("СхваткаДействие.run(): сражение завершено\n")
-	}()
-	{ // Подготовка к сражению
-		var err error
-		сам.выстрел, err = shot.НовВыстрел(сам) // Объект выстрела
-		if err != nil {
-			// log._rintf("ERRO СхваткаДействие.Run(): при создании выстрела танка, err=\n\t%v\n", err)
-			return
-		}
-		сам.здоровье, err = health.НовЗдоровье(сам)
-		if err != nil {
-			// log._rintf("ERRO СхваткаДействие.Run(): при создании здоровья танка, err=\n\t%v\n", err)
-			return
-		}
-		сам.манёвр, err = manevr.НовМанёвр(сам)
-		if err != nil {
-			// log._rintf("ERRO СхваткаДействие.Run(): при создании маневра танка, err=\n\t%v\n", err)
-			return
-		}
-	}
-	// Рабочий цикл сражения
-	<-сам.кнт.Done()
-}
-
-func (сам *СхваткаДействие) МанёврНадоУст() {
-	if сам.манёвр == nil {
-		return
-	}
-	сам.манёвр.УстНадо()
-}
-
-// ВыстрелБлок -- признак запрета стрельбы при слабом здоровье
-func (сам *СхваткаДействие) ВыстрелБлок() ИЕслиВыстрел {
-	return сам.еслиВыстрел
-}
-
-// Кнт -- возвращает контекст отмены сражения
-func (сам *СхваткаДействие) Контекст() context.Context {
-	return сам.кнт
-}
-
-// ОтменитьДействие -- вызов функции отмены контекста сражения
-func (сам *СхваткаДействие) Отменить() {
-	сам.фнОтменить()
-}

+ 0 - 173
app/lev3/bot/angar/death_match/death_worker/death_on/manevr/manevr.go

@@ -1,173 +0,0 @@
-package manevr
-
-import (
-	"fmt"
-	// "log"
-	"strings"
-	"time"
-
-	"github.com/sirupsen/logrus"
-
-	"wartank/app/lev2/arena_battle/battle_worker/battle_worker/health/repair_time"
-	"wartank/app/lev2/arena_battle/battle_worker/battle_worker/manevr/is_manevr"
-
-	// "wartank/internal/components/sound"
-	. "wartank/app/lev0/types"
-)
-
-/*
-	Пытается маневрировать после выстрела
-*/
-
-// Манёвр -- маневрирует после выстрела
-type Манёвр struct {
-	ИСражениеДействие                         // FIXME:
-	еслиМанёврНадо    *is_manevr.IsManevr     // Требование выполнить манёвр
-	времяЖдать        *repair_time.RepairTime // Время до восстановления манёвра
-	chTick            chan int                // Тики для поиска маневра
-}
-
-// НовМанёвр -- возвращает новый *Manevr
-func НовМанёвр(действие ИСражениеДействие) (*Манёвр, error) {
-	{ // Предусловия
-		if действие == nil {
-			return nil, fmt.Errorf("НовМанёвр(): действие==nil")
-		}
-	}
-	сам := &Манёвр{
-		ИСражениеДействие: действие,
-		еслиМанёврНадо:    is_manevr.NewIsManevr(),
-		времяЖдать:        repair_time.NewRepairTime(),
-		chTick:            make(chan int, 1),
-	}
-	_ = сам.времяЖдать.Set("0") // При запуске боя есть возможность маневрировать
-	go сам.makeTick()
-	go сам.пуск()
-	return сам, nil
-}
-
-// Генерирует тик для уменьшения времени ожидания восстановления возможности манёвра
-func (сам *Манёвр) makeTick() {
-	defer func() {
-		close(сам.chTick)
-		// log._rintf("Manevr.makeTick(): сражение завершено\n")
-	}()
-	for {
-		select {
-		case <-сам.Контекст().Done():
-			return
-		default:
-			if сам.времяЖдать.Получ() <= 0 {
-				сам.chTick <- 1
-			}
-			сам.времяЖдать.Dec()
-			time.Sleep(time.Second * 1)
-		}
-	}
-}
-
-// Рабочий цикл поиска маневра (~)
-func (сам *Манёвр) пуск() {
-	for range сам.chTick {
-		if !сам.еслиМанёврНадо.Get() { // Если нет требования манёвра -- пропускаем
-			continue
-		}
-		сам.манёвр()
-		сам.времяМанёврНайти() // Найти время после манёвра
-	}
-}
-
-// Ищет время для манёвра
-func (сам *Манёвр) времяМанёврНайти() {
-	var (
-		еслиНайдено bool
-		ind         int
-		lstBattleOn = сам.СписПолучить()
-		strOut      string
-	)
-	for ind, strOut = range lstBattleOn {
-		// <a href="pve?4-88.ILinkListener-currentControl-maneuverLink" class="simple-but blue"><span><span>5 секунд</span></span></a>
-		if strings.Contains(strOut, `-currentControl-maneuverLink`) {
-			еслиНайдено = true
-			break
-		}
-	}
-	if !еслиНайдено { // Или манёвр успел восстановиться, или конец сражения
-		if strings.Contains(strOut, `<span>Маневр</span>`) {
-			_ = сам.времяЖдать.Set("0")
-			return
-		}
-		logrus.WithField("strOut", strOut).Warn("Манёвр.времяМанёврНайти(): ошибка в поиске времени манёвра")
-		сам.Отменить()
-		return
-	}
-	{ // Найти время манёвра
-		lstTime := strings.Split(strOut, `ILinkListener-currentControl-maneuverLink" class="simple-but blue"><span><span>`)
-		if len(lstTime) != 2 {
-			logrus.WithField("ind", ind).
-				WithField("lstBattleOn[-1]", lstBattleOn[ind-1]).
-				WithField("lstBattleOn[ind]", strOut).
-				WithField("lstBattleOn[+1]", lstBattleOn[ind+1]).
-				Errorf("Manevr.findManevrTime(): нет двух полей во времени ожидания")
-			сам.Отменить()
-			return
-		}
-		strTime := lstTime[1]
-		lstTime = strings.Split(strTime, ` секунд</span></span></a>`)
-		strTime = lstTime[0]
-		if err := сам.времяЖдать.Set(strTime); err != nil {
-			logrus.WithError(err).Error("Manevr.findManevrTime(): при обновлении времени ожидания манёвра")
-			сам.Отменить()
-			return
-		}
-	}
-	logrus.WithField("время", сам.времяЖдать.Получ()).Info("Manevr.findManevrTime(): до манёвра")
-}
-
-// Манёвр по возможности
-func (сам *Манёвр) манёвр() {
-	var (
-		еслиНайдено = false
-		lstBattleOn = сам.СписПолучить()
-		strOut      = ""
-	)
-	for _, strOut = range lstBattleOn {
-		// <a href="pve?4-21.ILinkListener-currentControl-maneuverLink" class="simple-but blue"><span><span>Маневр</span></span></a>
-		if strings.Contains(strOut, `<span>Маневр</span>`) {
-			еслиНайдено = true
-			break
-		}
-	}
-	if !еслиНайдено { // Либо ждём восстановления манёвра, либо сражение закончилось
-		return
-	}
-	{ // Попытка манёвра
-		lstLink := strings.Split(strOut, `<a href="`)
-		strLink := lstLink[1]
-		lstLink = strings.Split(strLink, `" class="simple-but blue"><span><span>Маневр</span></span></a>`)
-		strLink = "https://wartank.ru/" + lstLink[0]
-		lstBattleOn, err := сам.Сеть().Get(strLink)
-		if err != nil {
-			logrus.WithError(err).Error("Manevr.Manevr(): при выполнении GET-команды маневра")
-			сам.Отменить()
-			return
-		}
-		if err = сам.СтрОбновить(lstBattleOn); err != nil {
-			logrus.WithError(err).Error("Manevr.Manevr(): при обновлении lstBattle")
-			сам.Отменить()
-			return
-		}
-		// sound.Manevr()
-	}
-	сам.еслиМанёврНадо.Сброс()
-}
-
-// ЕслиГотов -- возвращает готовность манёвра
-func (сам *Манёвр) ЕслиГотов() bool {
-	return сам.времяЖдать.ЕслиМожно()
-}
-
-// УстНадо -- устанавливает признак необходимости манёвра
-func (сам *Манёвр) УстНадо() {
-	сам.еслиМанёврНадо.Set()
-}

+ 0 - 65
app/lev3/bot/angar/death_match/death_worker/death_worker.go

@@ -1,65 +0,0 @@
-// package death_worker -- исполнение схватки
-package death_worker
-
-import (
-	"time"
-
-	. "wartank/app/lev0/types"
-	"wartank/app/lev1/stat_param"
-	"wartank/app/lev2/arena"
-	"wartank/app/lev2/arena_death/death_worker/death_on"
-	"wartank/app/lev2/arena_death/death_worker/death_on/battle_sound"
-	. "wartank/kernel/kernel_types"
-)
-
-// СражениеДействие -- исполнение схватки
-type СхваткаИсполнитель struct {
-	ИАрена
-	конт ИЯдроКонтекст
-	бот  ИБот
-
-	еслиНачало ИСтатПарам
-
-	// Непосредственное сражение
-	действие *death_on.СхваткаДействие
-
-	sound *battle_sound.BattleSound // Однопоточное проигрывание звука
-}
-
-// НовСражениеДействие -- возвращает новый исполнитель схватки
-func НовСхваткаИсполнитель(конт ИЯдроКонтекст, bot ИБот) *СхваткаИсполнитель {
-	сам := &СхваткаИсполнитель{
-		конт:       конт,
-		бот:        bot,
-		еслиНачало: stat_param.НовСтатПарам("тревога"),
-		sound:      battle_sound.NewBattleSound(),
-	}
-	аренаКонфиг := arena.АренаКонфиг{
-		Бот_:         bot,
-		АренаИмя_:    "Ход сражения",
-		СтрКонтроль_: `<title>Сражения</title>`,
-		ФнПуск_:      сам.пуск,
-		СтрУрл_:      "https://wartank.ru/pve",
-	}
-	сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
-	return сам
-}
-
-// пуск исполнителя схватки
-func (сам *СхваткаИсполнитель) пуск() {
-	сам.еслиНачало = stat_param.НовСтатПарам("тревога")
-}
-
-// Танковать -- выполняет битву
-func (сам *СхваткаИсполнитель) Танковать() {
-	сам.действие = death_on.НовСхваткаДействие(сам.конт, сам.бот) // IBattleOn (онлайн)
-	сам.sound.Play()
-	time.Sleep(time.Second * 10) // Задержка для звука на странице
-	<-сам.действие.Контекст().Done()
-	// log._rintf("Battle.runBaton(): сражение завершено\n")
-}
-
-// Тревога -- возвращает признак начала сражения (для браузера)
-func (сам *СхваткаИсполнитель) Тревога() ИСтатПарам {
-	return сам.еслиНачало
-}

+ 0 - 223
app/lev3/bot/angar/division/divwar/divwar.go

@@ -1,223 +0,0 @@
-package div_war
-
-import (
-	"fmt"
-	"log"
-	"strings"
-	"sync"
-	"time"
-
-	"wartank/app/lev0/alias"
-	. "wartank/app/lev0/types"
-	"wartank/app/lev1/stat_param"
-	"wartank/app/lev2/arena"
-	"wartank/app/lev2/arena_division/div_war/div_war_net"
-	"wartank/app/lev2/arena_division/div_war/div_war_on"
-	"wartank/app/lev2/arena_division/div_war/div_war_on/div_war_sound"
-	. "wartank/kernel/kernel_types"
-)
-
-/*
-	Объект ожидания битвы дивизий
-*/
-
-// DivWar -- объект ожидания битвы дивизий
-type DivWar struct {
-	ИАрена
-	конт  ИЯдроКонтекст
-	bot   ИБот
-	alarm ИСтатПарам
-	net   *div_war_net.DivWarNet
-	conn  ИХттпВоркер
-
-	// Непосредственная битва
-	дивОн *div_war_on.DivWarOn
-	login string // Для непосредственной битвы дивизий
-	block sync.Mutex
-
-	chDivWar chan int // Сигнал начала битвы дивизий
-
-	sound *div_war_sound.DivWarSound // Однопоточное проигрывание звука
-}
-
-// NewDivWar -- возвращает новый *DivWar
-func NewDivWar(конт ИЯдроКонтекст, bot ИБот) (*DivWar, error) {
-	if bot == nil {
-		return nil, fmt.Errorf("NewDivWar(): IBot == nil")
-	}
-	сам := &DivWar{
-		конт:     конт,
-		bot:      bot,
-		alarm:    stat_param.НовСтатПарам("тревога"),
-		chDivWar: make(chan int, 1),
-		sound:    div_war_sound.NewDivWarSound(),
-		conn:     bot.Сеть().ВебВоркер(),
-		login:    "prospero tank",
-	}
-	аренаКонфиг := arena.АренаКонфиг{
-		Бот_:         bot,
-		АренаИмя_:    "Битва дивизий",
-		СтрКонтроль_: `<span>до начала `,
-		ФнПуск_:      сам.пуск,
-	}
-	сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
-	// сам.shotTimeFull.Set(8000) // 8000 msec
-	var err error
-	{ // Net
-		сам.net, err = div_war_net.NewDivWarNet(bot)
-		if err != nil {
-			return nil, fmt.Errorf("NewDivWar(): при создании DivWarNet, err=\n\t%w", err)
-		}
-	}
-	go сам.run()
-	go сам.резервТик()
-	return сам, nil
-}
-
-// запускает в работу битву дивизий
-func (сам *DivWar) пуск() {
-}
-
-func (сам *DivWar) резервТик() {
-	for {
-		select {
-		case <-сам.bot.Контекст().Done():
-			return
-		default:
-			ct0 := сам.ВремяОстат().ПолучМилСек()
-			time.Sleep(time.Second * 7)
-			ct1 := сам.ВремяОстат().ПолучМилСек()
-			if ct1.Сек() != ct0.Сек() {
-				continue
-			}
-			if сам.дивОн != nil {
-				continue
-			}
-			сам.chDivWar <- 1
-		}
-	}
-}
-
-// запускает в работу битву дивизий
-func (сам *DivWar) run() {
-	сам.chDivWar <- 1
-	for {
-		select {
-		case <-сам.bot.Контекст().Done():
-			return
-		case <-сам.ВремяОстат().КаналСиг(): // Время обновить данные по сражению
-			сам.findTimeCount()
-			сам.upDivWar()
-		case <-сам.chDivWar: // Сигнал к началу сражения
-			сам.block.Lock()
-			if сам.дивОн != nil {
-				continue
-			}
-			сам.alarm.Уст(1)
-			сам.sound.Play()
-			go сам.DivWar()              // Запустить цикл непосредственного сражения
-			time.Sleep(time.Second * 10) // Задержка для звука на странице
-			сам.alarm.Уст(0)
-		}
-	}
-}
-
-// Ищет время до начала битвы дивизий
-func (сам *DivWar) findTimeCount() {
-	сам.net.Обновить()
-	var (
-		strOut      string
-		lstDivWar   = сам.СписПолучить()
-		еслиНайдено bool
-		ind         int
-	)
-	for ind, strOut = range lstDivWar {
-		if strings.Contains(strOut, `до начала: `) {
-			ind++
-			strOut = lstDivWar[ind]
-			еслиНайдено = true
-			break
-		}
-		if strings.Contains(strOut, `>ОБЫЧНЫЕ<`) { // Это уже битва
-			сам.chDivWar <- 1
-			return
-		}
-	}
-	if !еслиНайдено { // Битва дивизий уже идёт
-		сам.chDivWar <- 1
-		return
-	}
-	lstTime := strings.Split(strOut, `<span>`)
-	strTime := lstTime[1]
-	lstTime = strings.Split(strTime, `</span>`)
-	strTime = lstTime[0]
-	if err := сам.ОбратВремяУст(alias.Время(strTime)); err != nil {
-		// log._rintf("WARN DivWar.findTimeCount(): при установке времени ожидания битвы дивизий(%v)\n\terr=%v\n", strTime, err)
-		return
-	}
-}
-
-// При необходимости поднимает взвод в атаку, вызывается только если обнаружено приглашение (+)
-func (сам *DivWar) upDivWar() {
-	var (
-		strOut      string
-		lstDivWar   = сам.СписПолучить()
-		еслиНайдено bool
-	)
-	for _, strOut = range lstDivWar {
-		if strings.Contains(strOut, `>Взвод, подъем! В атаку!<`) {
-			еслиНайдено = true
-			break
-		}
-		if strings.Contains(strOut, `<div class="white medium cntr bold mb5">Вы в рядах участников</div>`) {
-			// log._rintf("INFO DivWar.upDivWar(): уже зарегистрирован\n")
-			return
-		}
-	}
-	if !еслиНайдено {
-		return
-	}
-	// Найдено приглашение на участие
-	lstUp := strings.Split(strOut, `<a class="simple-but border" href="`)
-	linkUp := lstUp[1]
-	lstUp = strings.Split(linkUp, `"><span><span>Взвод, подъем! В атаку!</span></span></a>`)
-	linkUp = "https://wartank.ru/" + lstUp[0]
-	lstDivWar, err := сам.net.Get(linkUp)
-	if err != nil {
-		// log._rintf("ERRO DivWar.upDivWar(): при выполнении GET-команды на подъём в атаку, err=\n\t%v\n", err)
-		return
-	}
-	if err = сам.СтрОбновить(lstDivWar); err != nil {
-		log.Printf("DivWar.upDivWar(): при обновлении lstDivWar, err=\n\t%v\n", err)
-	}
-	// log._rintf("INFO DivWar.upDivWar(): регистрация прошла успешно\n")
-}
-
-// Ведёт сражение
-func (сам *DivWar) DivWar() {
-	defer func() {
-		сам.дивОн = nil
-		сам.block.Unlock()
-		if err := сам.ОбратВремяУст("01"); err != nil {
-			panic(fmt.Errorf("DivWar.DivWar(): при установке CountDown, err=\n\t%w", err))
-		}
-		// log.Printf("INFO DivWar.DivWar(): сражение завершено\n")
-	}()
-	var err error
-	сам.дивОн, err = div_war_on.NewDivWarOn(сам.конт, сам.bot) // IDivWarOn (онлайн)
-	if err != nil {
-		// log._rintf("ERRO DivWar.DivWarOn(): при создании IDivWarOn, err=\n\t%v\n", err)
-		time.Sleep(time.Millisecond * 250)
-		return
-	}
-	// Цикл ожидания окончания сражения
-	for !сам.дивОн.ЕслиКонец().Получ() {
-		time.Sleep(time.Second * 1)
-	}
-
-}
-
-// Alarm -- возвращает признак начала сражения (для браузера)
-func (сам *DivWar) Alarm() ИСтатПарам {
-	return сам.alarm
-}

+ 0 - 83
app/lev3/bot/angar/fuel/fuel.go

@@ -1,83 +0,0 @@
-// package fuel -- топливо в баке
-package fuel
-
-import (
-	"fmt"
-	"log"
-	"strconv"
-	"strings"
-	"time"
-
-	. "wartank/app/lev0/types"
-	"wartank/app/lev1/stat_param"
-)
-
-// Топливо -- топливо в баке, +1 каждые 15 сек
-type Топливо struct {
-	ангар   ИАнгар
-	топливо ИСтатПарам
-}
-
-// НовТопливо -- возвращает новый топливный бак
-func НовТопливо(конт ИБотКонтекст, ангар ИАнгар) (*Топливо, error) {
-	if ангар == nil {
-		return nil, fmt.Errorf("NewFuel(): IAngar == nil")
-	}
-	сам := &Топливо{
-		ангар:   ангар,
-		топливо: stat_param.НовСтатПарам("топливо"),
-	}
-	return сам, nil
-}
-
-// Run -- должен работать в отдельном потоке, контролит топливо
-func (сам *Топливо) Run() {
-	// Каждые 15 сек +1 топливо
-	for {
-		time.Sleep(time.Second * 15)
-		топливо := сам.топливо.Получ()
-		топливо++
-		сам.топливо.Уст(топливо)
-		// log.Printf("Fuel.Run: val=%v\n", fuel)
-	}
-}
-
-// Обновить -- ищет в теле текста ангара топливо
-func (сам *Топливо) Обновить() {
-	// _mt.Println("\tAngarNet.findFuel()")
-	lstAngar := сам.ангар.СписПолучить()
-	var strOut string
-	for _, strFuel := range lstAngar {
-		if strings.Contains(strFuel, `<img title="Топливо" `) {
-			strOut = strFuel
-			break
-		}
-	}
-	// Выделить топливо
-	lstFuel := strings.Split(strOut, `<img title="Топливо" alt="Топливо" src="/images/icons/fuel.png?2"/> `)
-	// Здесь бывает ошибка (когда возвращена пустая строка)
-	if len(lstFuel) != 2 {
-		log.Printf("ERRO Топливо.Обновить(): %q, при поиске строки топлива, стр=\n\t%v\n", сам.ангар.Бот().Имя(), strOut)
-		return
-	}
-	if lstFuel[1] == "" {
-		log.Printf("ERRO Топливо.Обновить(): %q, пустое значение в строке топлива, стр=\n\t%v\n", сам.ангар.Бот().Имя(), strOut)
-		return
-	}
-	strFuel := lstFuel[1]
-	iFuel, err := strconv.Atoi(strFuel)
-	if err != nil {
-		// log._rintf("ERRO Fuel.findFuel(): fuel(%v) not number, err=\n\t%v\n", strFuel, err)
-		return
-	}
-	сам.топливо.Уст(iFuel)
-	if iFuel <= 314 { // Минимальное значение "топливного склада-1" -- 315
-		return
-	}
-	// log._rintf("Fuel.findFuel():iFuel=%v\n", iFuel)
-}
-
-// Fuel -- возвращает объект статического параметра топлива
-func (сам *Топливо) Fuel() ИСтатПарам {
-	return сам.топливо
-}

+ 0 - 416
app/lev3/bot/angar/stat_convoy_fixme/stat_convoy_fixme.go

@@ -1,416 +0,0 @@
-package stat_convoy_fixme
-
-import (
-	"fmt"
-	"log"
-	"strconv"
-	"strings"
-	"time"
-
-	"wartank/app/lev0/alias"
-	. "wartank/app/lev0/types"
-	"wartank/app/lev1/stat_param"
-	"wartank/app/lev2/arena"
-)
-
-/*
-	Объект конвоя в ангаре
-*/
-
-// Конвой -- объект конвоя в ангаре
-type СтатКонвой struct {
-	ИАрена
-	бот   ИБот
-	слава ИСтатПарам // Количество славы
-}
-
-// НовКонвой -- возвращает новый *Convoy
-func НовСтатКонвой(конт ИБотКонтекст, бот ИБот) *СтатКонвой {
-	сам := &СтатКонвой{
-		бот:   бот,
-		слава: stat_param.НовСтатПарам("слава"),
-	}
-	аренаКонфиг := arena.АренаКонфиг{
-		Бот_:         сам.бот,
-		АренаИмя_:    "Конвой",
-		СтрКонтроль_: `<title>Конвой</title>`,
-		ФнПуск_:      сам.пуск,
-		СтрУрл_:      "https://wartank.ru/convoy",
-	}
-	сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
-	return сам
-}
-
-// UpdateLst -- принудительно обновляет состояние конвоя
-func (сам *СтатКонвой) UpdateLst() {
-	сам.Обновить()
-}
-
-// Слава --возвращает счётчик славы конвоя
-func (сам *СтатКонвой) Слава() ИСтатПарам {
-	return сам.слава
-}
-
-// обрабатывает конвой
-func (сам *СтатКонвой) пуск() {
-	фнЦикл := func() {
-		сам.проверитьМиссия6фрагов()
-		сам.проверитьМиссияРазведкаКонвой()
-		сам.проверитьМиссияМастерРазведки()
-		сам.атаковать()
-	}
-	for {
-		select {
-		case <-сам.бот.Контекст().Done():
-			return
-		default:
-			фнЦикл()
-			time.Sleep(time.Second * 3)
-			фнЦикл() // Для второго шага
-			time.Sleep(time.Minute * 20)
-		}
-	}
-}
-
-func (сам *СтатКонвой) атаковать() {
-	if false {
-		сам.обновитьВремя()
-	}
-	for {
-		стрВбой := сам.найтиВбой()
-		if стрВбой == "" {
-			return
-		}
-		сам.атакаНачать() // в этом месте только атаковать
-		сам.проверитьМиссияРазведкаКонвой()
-		сам.проверитьМиссияМастерРазведки()
-		сам.проверитьМиссия6фрагов()
-		сам.Обновить()
-	}
-}
-
-// Обновляет славу по требованию
-func (сам *СтатКонвой) Обновить() {
-	// Найти строку с упоминанием оставшегося времени конвоя
-	lstConvoy := сам.СписПолучить()
-	var (
-		strGlory    string
-		еслиНайдено bool
-	)
-	for _, lastTime := range lstConvoy {
-		if strings.Contains(lastTime, `alt="Слава" title="Слава"> `) {
-			strGlory = lastTime
-			еслиНайдено = true
-			break
-		}
-	}
-	if !еслиНайдено { // Не найдена строка со славой -- это атака
-		return
-	}
-	// Ищем количество славы
-	lstGlory := strings.Split(strGlory, `alt="Слава" title="Слава"> `)
-	strGlory = lstGlory[1]
-	iGlory, err := strconv.Atoi(strGlory)
-	if err != nil {
-		// log._rintf("ERRO ConvoyNet.updateGlory(): слава(%v) не число, err=\n\t%v\n", strGlory, err)
-		return
-	}
-	сам.слава.Уст(iGlory)
-}
-
-// Обновляет оставшееся время конвоя
-func (сам *СтатКонвой) обновитьВремя() {
-	// Время подходит надо обновляться
-	сам.Обновить()
-	ош := сам.ОбратВремяУст("20")
-	if ош != nil {
-		log.Printf("Конвой.обновитьВремя(): при обновлении времени, ош=\n\t%v\n", ош)
-		сам.бот.Сервер().Отменить()
-		return
-	}
-	// Найти строку с упоминанием оставшегося времени конвоя
-	lstConvoy := сам.СписПолучить()
-	var (
-		strLastTime string
-		еслиНайдено bool
-		isMask      bool
-	)
-	for _, lastTime := range lstConvoy {
-		if strings.Contains(lastTime, `До следующего конвоя: `) {
-			strLastTime = lastTime
-			еслиНайдено = true
-			break
-		}
-		if strings.Contains(lastTime, `Полная маскировка через `) {
-			strLastTime = lastTime
-			isMask = true
-			break
-		}
-		// <div class="bot"><a class="simple-but border red" w:id="startFight" href="convoy?7-1.ILinkListener-root-startFight"><span><span>В БОЙ!</span></span></a></div>
-		if strings.Contains(lastTime, `ILinkListener-root-startFight`) {
-			return
-		}
-		if strings.Contains(lastTime, `ILinkListener-root-findEnemy`) {
-			return
-		}
-		// <div class="bot"><a class="simple-but border" w:id="startMasking" href="convoy?12-1.ILinkListener-root-startMasking"><span><span>В БОЙ!</span></span></a></div>
-		if strings.Contains(lastTime, `ILinkListener-root-startMasking`) {
-			return
-		}
-	}
-	switch {
-	case еслиНайдено: // Большая пауза между конвоями
-		// Ждём окончания ожидания конвоя
-		lstTime := strings.Split(strLastTime, `До следующего конвоя: `)
-		strLastTime = lstTime[1]
-		if err := сам.ОбратВремяУст(alias.Время(strLastTime)); err != nil {
-			// log._rintf("WARN Конвой.обновитьВремя(): при установке времени ожидания конвоя(%v)\n\terr=%v\n", strLastTime, err)
-			err := сам.ОбратВремяУст("10")
-			if err != nil {
-				log.Printf("Конвой.обновитьВремя(): при установке времени ожидания конвоя(%v)\n\terr=%v\n", strLastTime, err)
-				сам.бот.Сервер().Отменить()
-			}
-		}
-	case isMask: // Если маскировка между конвоями
-		// Ждём окончания ожидания конвоя
-		lstTime := strings.Split(strLastTime, `Полная маскировка через `)
-		strLastTime = lstTime[1]
-		if err := сам.ОбратВремяУст(alias.Время(strLastTime)); err != nil {
-			// log._rintf("ERRO BКонвой.обновитьВремя(): при установке времени банка для 1го режима(%v)\n\terr=%v\n", strLastTime, err)
-			err := сам.ОбратВремяУст("10")
-			if err != nil {
-				log.Printf("Конвой.обновитьВремя(): при установке времени банка для 1го режима(%v)\n\terr=%v\n", strLastTime, err)
-				сам.бот.Сервер().Отменить()
-			}
-		}
-	}
-}
-
-func (сам *СтатКонвой) найтиВбой() string {
-	var (
-		strOut      = ""
-		еслиНайдено bool
-	)
-	lstConvoy := сам.Сеть().ВебВоркер().Получ("https://wartank.ru/convoy")
-	if сам.бот.Имя() == "prospero tank" {
-		log.Printf("")
-	}
-	for _, strOut = range lstConvoy {
-		// <div class="bot"><a class="simple-but border" w:id="findEnemy" href="convoy?50-1.ILinkListener-root-findEnemy"><span><span>Начать разведку</span></span></a></div>
-		если1 := strings.Contains(strOut, `.ILinkListener-root-findEnemy"`)
-		if если1 {
-			_ссылка := strings.TrimPrefix(strOut, `<div class="bot"><a class="simple-but border" w:id="findEnemy" href="`)
-			_ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Начать разведку</span></span></a></div>`)
-			strOut = "https://wartank.ru/" + _ссылка
-			еслиНайдено = true
-			break
-		}
-		если2 := strings.Contains(strOut, `<span>В БОЙ!</span>`)
-		if если2 {
-			lstLink := strings.Split(strOut, `<div class="bot"><a class="simple-but border" w:id="startMasking" href="`)
-			if len(lstLink) == 1 {
-				lstLink = strings.Split(strOut, `<div class="bot"><a class="simple-but border red" w:id="startFight" href="`)
-			}
-			strOut = lstLink[1]
-			lstLink = strings.Split(strOut, `"><span><span>В БОЙ!</span></span></a></div>`)
-			strOut = "https://wartank.ru/" + lstLink[0]
-			еслиНайдено = true
-			break
-		}
-		// <div class="bot"><a class="simple-but border" w:id="findEnemy" href="convoy?15-1.ILinkListener-root-findEnemy"><span><span>Начать разведку</span></span></a></div>
-		если3 := strings.Contains(strOut, "<span>Начать разведку</span>")
-		if если3 {
-			_ссылка := strings.TrimPrefix(strOut, `<<div class="bot"><a class="simple-but border" w:id="findEnemy" href="`)
-			_ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Начать разведку</span></span></a></div>`)
-			strOut = "https://wartank.ru/" + _ссылка
-			еслиНайдено = true
-			break
-		}
-		if strings.Contains(strOut, `>ОБЫЧНЫЕ<`) {
-			lstLink := strings.Split(strOut, `<a href="`)
-			strOut = lstLink[1]
-			lstLink = strings.Split(strOut, `" class="simple-but gray"><span><span>ОБЫЧНЫЕ</span></span></a>`)
-			strOut = "https://wartank.ru/" + lstLink[0]
-			еслиНайдено = true
-			break
-		}
-	}
-	if !еслиНайдено { // Время ожидания
-		// if err := сам.SetCountDown(1); err != nil {
-		// 	panic(fmt.Errorf("Конвой.атакаНачать(): прb установке CountDown, err=\n\t%w", err))
-		// }
-		return ""
-	}
-	return strOut
-}
-
-// Проводит атаку на конвой
-func (сам *СтатКонвой) атакаНачать() {
-	// Найти контрольную строку
-	strOut := сам.найтиВбой()
-	if strOut == "" { // Время ожидания
-		// if err := сам.SetCountDown(1); err != nil {
-		// 	panic(fmt.Errorf("Конвой.атакаНачать(): прb установке CountDown, err=\n\t%w", err))
-		// }
-		return
-	}
-	strLink := strOut
-	// Можно начать разведку
-	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)
-				return
-			}
-		}
-		for _, strOut = range lstConvoy {
-			if strings.Contains(strOut, `<title>База</title>`) {
-				// log._rintf("ERRO Конвой.атакаНачать(): при обновлении lstConvoy (найдено lstBase), strOut=\n\t%v\n", strOut)
-				return
-			}
-		}
-		// log._rintf("ERRO Конвой.атакаНачать(): при обновлении lstConvoy, err=\n\t%v\n", err)
-		return
-	}
-	сам.начатьРазведку()
-	if err := сам.ОбратВремяУст("01"); err != nil {
-		panic(fmt.Errorf("Конвой.атакаНачать(): при установке CountDown, err=\n\t%w", err))
-	}
-}
-
-// Выполняет атаку на конвой
-func (сам *СтатКонвой) начатьРазведку() {
-	// Вырезать ссылку на атаку
-	strOut := ""
-	еслиНайдено := false
-	lstConvoy := сам.СписПолучить()
-	// <div class="bot"><a class="simple-but border" w:id="findEnemy" href="convoy?50-1.ILinkListener-root-findEnemy"><span><span>Начать разведку</span></span></a></div>
-	for _, strOut = range lstConvoy {
-		if strings.Contains(strOut, `.ILinkListener-root-findEnemy`) {
-			еслиНайдено = true
-			break
-		}
-	}
-	if !еслиНайдено { // Нечего атаковать
-		return
-	}
-	// Атакуем конвой
-	_link := strings.TrimPrefix(strOut, `<div class="bot"><a class="simple-but border" w:id="findEnemy" href="`)
-	_link = strings.TrimSuffix(_link, `"><span><span>Начать разведку</span></span></a></div>`)
-	// https://wartank.ru/convoy?52-1.ILinkListener-root-findEnemy
-	link := "https://wartank.ru/" + _link
-	{ // Выполнить атаку
-		lstConvoy = сам.Сеть().ВебВоркер().Получ(link)
-		if err := сам.СтрОбновить(lstConvoy); err != nil {
-			log.Printf("Конвой.attack(): при обновлении lstConvoy, err=\n\t%v\n", err)
-			return
-		}
-	}
-}
-
-// Забирает награду в конвое "Активируй боевую силу"
-func (сам *СтатКонвой) проверитьМиссияРазведкаКонвой() {
-	var (
-		strOut      string
-		еслиНайдено bool
-	)
-	сам.Обновить()
-	lstConvoy := сам.СписПолучить()
-	// <a class="simple-but border" href="convoy?21-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
-	for _, strOut = range lstConvoy {
-		if strings.Contains(strOut, `.ILinkListener-missions-cc-0-c-awardLink`) {
-			еслиНайдено = true
-			break
-		}
-	}
-	if !еслиНайдено {
-		return
-	}
-	// <a class="simple-but border" href="convoy?21-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
-	_ссылка := strings.TrimPrefix(strOut, `<a class="simple-but border" href="`)
-	_ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Получить награду</span></span></a>`)
-	// https://wartank.ru/convoy?23-1.ILinkListener-missions-cc-0-c-awardLink
-	ссылка := "https://wartank.ru/" + _ссылка
-	lstConvoy = сам.Сеть().ВебВоркер().Получ(ссылка)
-	if err := сам.СтрОбновить(lstConvoy); err != nil {
-		log.Printf("Конвой.проверитьМиссияРазведкаКонвой(): пр обновлении lstConvoy, err=\n\t%v\n", err)
-		return
-	}
-	log.Printf("Конвой.проверитьМиссияРазведкаКонвой(): награда получена\n")
-}
-
-// Забирает награду в конвое "Мастер дозора"
-func (сам *СтатКонвой) проверитьМиссияМастерРазведки() {
-	var (
-		strOut      string
-		еслиНайдено bool
-		lstConvoy   = сам.СписПолучить()
-		ind         int
-	)
-	if len(lstConvoy) == 0 {
-		сам.Обновить()
-		lstConvoy = сам.СписПолучить()
-	}
-	for ind, strOut = range lstConvoy {
-		if strings.Contains(strOut, `Проведи разведку в конвое<br/>`) {
-			еслиНайдено = true
-			ind += 23
-			strOut = lstConvoy[ind]
-			break
-		}
-	}
-	if !еслиНайдено {
-		return
-	}
-	// <a class="simple-but border" href="convoy?61-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
-	if !strings.Contains(strOut, `ILinkListener-missions-cc-0-c-awardLink`) {
-		return
-	}
-	lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
-	strLink := lstLink[1]
-	lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
-	// https://wartank.ru/convoy?61-1.ILinkListener-missions-cc-0-c-awardLink
-	strLink = "https://wartank.ru/" + lstLink[0]
-	lstConvoy, err := сам.Сеть().Get(strLink)
-	if err != nil {
-		// log._rintf("ERRO Конвой.checkMaster(): при выполнении команды GET, err=\n\t%v\n", err)
-		return
-	}
-	if err := сам.СтрОбновить(lstConvoy); err != nil {
-		// log._rintf("ERRO Конвой.checkMaster(): пр обновлении lstConvoy, err=\n\t%v\n", err)
-		return
-	}
-	// log._rintf("INFO Конвой.checkMaster(): награда получена\n")
-}
-
-// Забирает награду в конвое "Уничтожь 6 врагов в конвое"
-func (сам *СтатКонвой) проверитьМиссия6фрагов() {
-	var (
-		strOut      string
-		еслиНайдено bool
-	)
-	сам.Обновить()
-	lstConvoy := сам.СписПолучить()
-	// <a class="simple-but border" href="convoy?8-1.ILinkListener-missions-cc-1-c-awardLink"><span><span>Получить награду</span></span></a>
-	for _, strOut = range lstConvoy {
-		if strings.Contains(strOut, `.ILinkListener-missions-cc-1-c-awardLink`) {
-			еслиНайдено = true
-			break
-		}
-	}
-	if !еслиНайдено {
-		return
-	}
-	// <a class="simple-but border" href="convoy?8-1.ILinkListener-missions-cc-1-c-awardLink"><span><span>Получить награду</span></span></a>
-	_ссылка := strings.TrimPrefix(strOut, `<a class="simple-but border" href="`)
-	_ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Получить награду</span></span></a>`)
-	// https://wartank.ru/convoy?15-1.ILinkListener-missions-cc-1-c-awardLink
-	ссылка := "https://wartank.ru/" + _ссылка
-	lstConvoy = сам.Сеть().ВебВоркер().Получ(ссылка)
-	if err := сам.СтрОбновить(lstConvoy); err != nil {
-		log.Printf("Конвой.проверитьМиссия6фрагов(): при обновлении lstConvoy, ош=\n\t%v\n", err)
-		return
-	}
-	log.Printf("Конвой.проверитьМиссия6фрагов(): награда получена\n")
-}

+ 7 - 7
app/lev3/bot/bot.go

@@ -11,9 +11,9 @@ import (
 	. "wartank/app/lev0/alias"
 	. "wartank/app/lev0/types"
 	"wartank/app/lev2/arena_angar"
+	"wartank/app/lev3/bot/bot_config"
 	"wartank/app/lev3/bot/bot_net"
 	"wartank/app/lev3/bot/bot_stat/tank_stat"
-	"wartank/app/lev3/bot/warbot_config"
 	"wartank/kernel"
 	. "wartank/kernel/kernel_types"
 )
@@ -28,9 +28,9 @@ type Бот struct {
 	сеть           ИБотСеть
 	еслиРаботает   ИБезопБул
 	еслиАвтозапуск ИБезопБул
-	конфиг         *warbot_config.ВарБотКонфиг // Конфиг бота для хранения в базе
-	кнт            context.Context             // Контекст бота
-	фтОтмена       func()                      // Функция отменя контекста бота
+	конфиг         *bot_config.БотКонфиг // Конфиг бота для хранения в базе
+	кнт            context.Context       // Контекст бота
+	фтОтмена       func()                // Функция отменя контекста бота
 	лог            ИЯдроЛог
 	конт           ИБотКонтекст
 }
@@ -50,7 +50,7 @@ func ЗагрузитьВарБот(конт ИЯдроКонтекст, ном
 		}
 		лог.Паника(err != nil, "ЗагрузитьВарБот(): in load bot '%v' from store, err=\n\t%v\n", номер, err)
 	}
-	конфиг := &warbot_config.ВарБотКонфиг{}
+	конфиг := &bot_config.БотКонфиг{}
 	конфиг.Unmarshal(binData)
 	сам := создатьЯдроВарБот(конт, конфиг)
 	go сам.рестарт()
@@ -72,7 +72,7 @@ func НовВарБот(конт ИЯдроКонтекст, номер АБот
 	лог.Паника(логин == "", "НовВарБот(): логин пустой")
 	лог.Паника(пароль == "", "НовВарБот(): пароль пустой")
 	log.Printf("НовВарБот(): name=%q\n", логин)
-	config := &warbot_config.ВарБотКонфиг{
+	config := &bot_config.БотКонфиг{
 		ЕслиАвтозапуск_: еслиАвто,
 		Логин_:          логин,
 		Пароль_:         пароль,
@@ -85,7 +85,7 @@ func НовВарБот(конт ИЯдроКонтекст, номер АБот
 }
 
 // Создаёт ядро бота
-func создатьЯдроВарБот(конт ИЯдроКонтекст, конфиг *warbot_config.ВарБотКонфиг) *Бот {
+func создатьЯдроВарБот(конт ИЯдроКонтекст, конфиг *bot_config.БотКонфиг) *Бот {
 	лог := kernel.НовЛог("ВарБот")
 	лог.Инфо("создатьЯдроВарБот()\n")
 	лог.Паника(конфиг == nil, "создатьЯдроВарБот(): ВарБотКонфиг==nil")

+ 9 - 9
app/lev3/bot/warbot_config/warbot_config.go → app/lev3/bot/bot_config/bot_config.go

@@ -1,5 +1,5 @@
-// package warbot_config -- конфиг бота для хранения в базе
-package warbot_config
+// package bot_config -- конфиг бота для хранения в базе
+package bot_config
 
 import (
 	"encoding/json"
@@ -9,8 +9,8 @@ import (
 	"wartank/kernel"
 )
 
-// ВарБотКонфиг -- конфиг бота для хранения в базе
-type ВарБотКонфиг struct {
+// БотКонфиг -- конфиг бота для хранения в базе
+type БотКонфиг struct {
 	ЕслиАвтозапуск_ bool      `json:"is_auto_run,omitempty"` // Признак автостарта при загрузке
 	Логин_          string    `json:"login"`                 // Логин бота
 	Пароль_         string    `json:"password"`              // Пароль бота
@@ -19,28 +19,28 @@ type ВарБотКонфиг struct {
 }
 
 // Marshall -- сериализует конфиг в JSON
-func (сам *ВарБотКонфиг) Marshall() []byte {
+func (сам *БотКонфиг) Marshall() []byte {
 	binData, _ := json.Marshal(сам)
 	return binData
 }
 
 // Unmarshal -- десериализует себя из байтового потока
-func (сам *ВарБотКонфиг) Unmarshal(binData []byte) {
-	лог := kernel.НовЛог("ВарБотКонфиг")
+func (сам *БотКонфиг) Unmarshal(binData []byte) {
+	лог := kernel.НовЛог("БотКонфиг")
 	лог.Отладка("Unmarshal()")
 	err := json.Unmarshal(binData, сам)
 	лог.Паника(err != nil, "Unmarshal(): err=\n\t%v\n", err)
 }
 
 // Логин -- возвращает логин
-func (сам *ВарБотКонфиг) Логин() string {
+func (сам *БотКонфиг) Логин() string {
 	сам.блок.RLock()
 	defer сам.блок.RUnlock()
 	return сам.Логин_
 }
 
 // Номер -- возвращает номер бота
-func (сам *ВарБотКонфиг) Номер() АБотНомер {
+func (сам *БотКонфиг) Номер() АБотНомер {
 	сам.блок.RLock()
 	defer сам.блок.RUnlock()
 	return сам.Номер_