// package tank_params -- параметры танка повышение
package tank_params
import (
"fmt"
"log"
"strconv"
"strings"
"time"
"wartank/pkg/components/kernel/logger"
"wartank/pkg/types"
)
// ТанкПараметры -- параметры танка повышение
type ТанкПараметры struct {
бот types.ИБот
номер string // Номер танка в игре
лог types.ИЛоггер
}
// НовТанкПараметры -- возвращает новые параметры танка
func НовТанкПараметры(бот types.ИБот) *ТанкПараметры {
лог:=logger.НовЛоггер("ТанкПараметры")
лог.Инфо("НовТанкПараметры()\n")
лог.Паника(бот==nil, "НовТанкПараметры(): ИБот == nil")
сам := &ТанкПараметры{
бот: бот,
лог: лог,
}
return сам
}
// Пуск -- запуск в работу
func (сам *ТанкПараметры) Пуск() {
go сам.пуск()
}
// Запускает в работу в отдельном потоке
func (сам *ТанкПараметры) пуск() {
time.Sleep(time.Second * 4)
ош := сам.номерПолуч()
if ош != nil {
log.Printf("ТанкПараметры.пуск(): при получении параметров танка, ош=\n\t%v\n", ош)
сам.бот.Сервер().Отменить()
return
}
for {
select {
case <-сам.бот.Контекст().Done():
return
default:
сам.работать()
}
}
}
// Основной метод работы
func (сам *ТанкПараметры) работать() {
defer time.Sleep(time.Second * 300)
сам.улучшить()
}
// Улучшает параметры танка
func (сам *ТанкПараметры) улучшить() {
// https://wartank.ru/pimp/34479487
клиент := сам.бот.Сеть().ВебВоркер()
фнУлучшить := func() bool{
лстСтр := клиент.Получ("https://wartank.ru/pimp/" + сам.номер)
var (
стрВых string
еслиНашли bool
)
//
for _, стрВых = range лстСтр {
if strings.Contains(стрВых, ``)
// https://wartank.ru/pimp/34479487?21-1.ILinkListener-modules-slots-0-slot-root-pimpLink-link
стрСсылка := "https://wartank.ru/pimp/" + стрВых
_ = клиент.Получ(стрСсылка)
return true
}
счётОш := 5
for счётОш > 0 {
if фнУлучшить(){
break
}
счётОш--
time.Sleep(time.Millisecond * 350)
}
}
// Получает собственный номер танка с сервера
func (сам *ТанкПараметры) номерПолуч() error {
клиент := сам.бот.Сеть().ВебВоркер()
лстСтр := клиент.Получ("https://wartank.ru/angar")
var (
стрНомер string
еслиНашёл bool
)
// https://wartank.ru/power/34479487
for _, стрНомер = range лстСтр {
if strings.Contains(стрНомер, `href="power/`) {
еслиНашёл = true
break
}
}
if !еслиНашёл {
return fmt.Errorf("ТанкПараметры.номерПолуч(): не нашёл собственный номер на сервере")
}
стрВыход := strings.TrimPrefix(стрНомер, `Повысить параметры`)
_, ош := strconv.Atoi(стрВыход)
if ош != nil {
return fmt.Errorf("ТанкПараметры.номерПолуч(): ошибка преобразования собственного номера(%s), ош=\n\t%w", стрВыход, ош)
}
сам.номер = стрВыход
return nil
}