// package battle_wait -- заставляет ожидать начало битвы
package battle_wait
import (
"fmt"
// "log"
"strings"
"time"
"wartank/pkg/components/section"
"wartank/pkg/components/sectionnet"
"wartank/pkg/types"
)
// СражениеОжидание -- ожидатель начала битвы
type СражениеОжидание struct {
*section.Section
bot types.ИБот
net *sectionnet.SectionNet
}
// НовСражениеОжидание -- возвращает новый ожидатель битвы
func НовСражениеОжидание(bot types.ИБот) (*СражениеОжидание, error) {
section, err := section.NewSection(bot, "Ожидание сражения", `
Сражения`)
if err != nil {
return nil, fmt.Errorf("NewBattleWait(): in create ISection, err=\n\t%w", err)
}
сам := &СражениеОжидание{
Section: section,
bot: bot,
}
сам.net, err = sectionnet.NewSectionNet(сам, "http://wartank.ru/pve")
if err != nil {
return nil, fmt.Errorf("NewBattleWait(): in create *SectionNet, err=\n\t%w", err)
}
return сам, nil
}
// Ожидать -- ожидает начало сражения
func (сам *СражениеОжидание) Ожидать() {
// Зайти в цикл ожидания сражения
for {
countTime := сам.ВремяОпрос().Получ()
if countTime > 0 {
time.Sleep(time.Millisecond * 500)
// log.Printf("BattleWait.Wait(): countTime=%v\n", сам.CountDown().String())
continue
}
стрВрем := сам.ждать()
if стрВрем == "" {
return
}
if стрВрем > "01:00:00" {
time.Sleep(time.Hour * 1)
continue
}
if "00:00:05" < стрВрем && стрВрем < "00:00:59" {
time.Sleep(time.Second * 5)
continue
}
time.Sleep(time.Second * 1)
}
}
// Ждёт пока время не обнулится
func (сам *СражениеОжидание) ждать() string {
if err := сам.net.UpdateLst(); err != nil { // Здесь может уже обратный отсчёт перед сражением
return ""
}
var (
strOut string
lstBattle = сам.СписПолучить()
isFind bool
)
for _, strOut = range lstBattle {
if strings.Contains(strOut, `до начала `) {
isFind = true
break
}
// if strings.Contains(strOut, `>ОБЫЧНЫЕ<`) { // Это уже битва
// if len(сам.chBattle) == 0 {
// сам.chBattle <- 1
// }
// return
// }
}
if !isFind { // Сражение уже идёт
return ""
}
// Найдена строка ожидания начала сражения
lstTime := strings.Split(strOut, `до начала `)
strTime := lstTime[1]
lstTime = strings.Split(strTime, ` (`)
strTime = lstTime[0]
if err := сам.ParseCountDown(strTime); err != nil { // Возможно уже всё
// log._rintf("WARN BattleWait.Wait(): при установке времени ожидания сражения(%v)\n\terr=%v\n", strTime, err)
return ""
}
return strTime
}