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