| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- // 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, "Ожидание сражения", `<title>Сражения</title>`)
- 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, `<span>до начала `) {
- еслиНайдено = true
- break
- }
- // if strings.Contains(strOut, `>ОБЫЧНЫЕ<`) { // Это уже битва
- // if len(сам.chBattle) == 0 {
- // сам.chBattle <- 1
- // }
- // return
- // }
- }
- if !еслиНайдено { // Сражение уже идёт
- return ""
- }
- // Найдена строка ожидания начала сражения
- lstTime := strings.Split(strOut, `<span>до начала `)
- 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
- }
|