package arena_convoy
import (
"strconv"
"strings"
"time"
. "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
. "wartank/app/lev0/alias"
. "wartank/app/lev0/types"
"wartank/app/lev1"
"wartank/app/lev2/arena"
)
/*
Объект конвоя в ангаре
*/
// АренаКонвой -- объект конвоя в ангаре
type АренаКонвой struct {
ИАрена
бот ИБот
слава ИСтатПарам // Количество славы
}
// НовКонвой -- возвращает новый *Convoy
func НовКонвой(конт ILocalCtx) *АренаКонвой {
сам := &АренаКонвой{
бот: конт.Get("бот").Val().(ИБот),
слава: lev1.НовСтатПарам("слава"),
}
аренаКонфиг := arena.АренаКонфиг{
Бот_: сам.бот,
АренаИмя_: "Конвой",
СтрКонтроль_: `
Конвой`,
ФнПуск_: сам.пуск,
СтрУрл_: "https://wartank.ru/convoy",
}
сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
конт.Set("конвой", сам, "Арена конвоя бота")
_ = ИАренаКонвой(сам)
return сам
}
// Слава -- возвращает славу конвоя
func (сам *АренаКонвой) Слава() ИСтатПарам {
return сам.слава
}
// UpdateLst -- принудительно обновляет состояние конвоя
func (сам *АренаКонвой) UpdateLst() {
сам.Обновить()
}
// обрабатывает конвой
func (сам *АренаКонвой) пуск() {
фнЦикл := func() {
сам.проверитьМиссия6фрагов()
сам.проверитьМиссияРазведкаКонвой()
сам.проверитьМиссияМастерРазведки()
сам.призыВзять()
}
for {
select {
case <-сам.бот.КонтБот().Ctx().Done():
return
default:
фнЦикл()
time.Sleep(time.Second * 3)
фнЦикл() // Для второго шага
time.Sleep(time.Minute * 20)
}
}
}
func (сам *АренаКонвой) призыВзять() {
if false {
сам.обновитьВремя()
}
for {
сам.проверитьМиссияРазведкаКонвой()
сам.проверитьМиссияМастерРазведки()
сам.проверитьМиссия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")
// Найти строку с упоминанием оставшегося времени конвоя
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
}
//
if strings.Contains(lastTime, `ILinkListener-root-startFight`) {
return
}
if strings.Contains(lastTime, `ILinkListener-root-findEnemy`) {
return
}
//
if strings.Contains(lastTime, `ILinkListener-root-startMasking`) {
return
}
}
switch {
case еслиНайдено: // Большая пауза между конвоями
// Ждём окончания ожидания конвоя
lstTime := strings.Split(strLastTime, `До следующего конвоя: `)
strLastTime = lstTime[1]
сам.ОбратВремяУст(АВремя(strLastTime))
case isMask: // Если маскировка между конвоями
// Ждём окончания ожидания конвоя
lstTime := strings.Split(strLastTime, `Полная маскировка через `)
strLastTime = lstTime[1]
сам.ОбратВремяУст(АВремя(strLastTime))
}
}
// Забирает награду в конвое "Активируй боевую силу"
func (сам *АренаКонвой) проверитьМиссияРазведкаКонвой() {
var (
strOut string
еслиНайдено bool
)
сам.Сеть().Обновить()
lstConvoy := сам.СписПолучить()
// Получить награду
for _, strOut = range lstConvoy {
if strings.Contains(strOut, `.ILinkListener-missions-cc-0-c-awardLink`) {
еслиНайдено = true
break
}
}
if !еслиНайдено {
return
}
// Получить награду
_ссылка := strings.TrimPrefix(strOut, `Получить награду`)
// https://wartank.ru/convoy?23-1.ILinkListener-missions-cc-0-c-awardLink
ссылка := "https://wartank.ru/" + _ссылка
lstConvoy = сам.Сеть().ВебВоркер().Получ(ссылка)
сам.СтрОбновить(lstConvoy)
}
// Забирает награду в конвое "Мастер дозора"
func (сам *АренаКонвой) проверитьМиссияМастерРазведки() {
var (
strOut string
еслиНайдено bool
lstConvoy = сам.СписПолучить()
ind int
)
if len(lstConvoy) == 0 {
сам.Обновить()
lstConvoy = сам.СписПолучить()
}
for ind, strOut = range lstConvoy {
if strings.Contains(strOut, `Проведи разведку в конвое
`) {
еслиНайдено = true
ind += 23
strOut = lstConvoy[ind]
break
}
}
if !еслиНайдено {
return
}
// Получить награду
if !strings.Contains(strOut, `ILinkListener-missions-cc-0-c-awardLink`) {
return
}
lstLink := strings.Split(strOut, `Получить награду`)
// 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
}
сам.СтрОбновить(lstConvoy)
}
// Забирает награду в конвое "Уничтожь 6 врагов в конвое"
func (сам *АренаКонвой) проверитьМиссия6фрагов() {
var (
strOut string
еслиНайдено bool
)
сам.Обновить()
lstConvoy := сам.СписПолучить()
// Получить награду
for _, strOut = range lstConvoy {
if strings.Contains(strOut, `.ILinkListener-missions-cc-1-c-awardLink`) {
еслиНайдено = true
break
}
}
if !еслиНайдено {
return
}
// Получить награду
_ссылка := strings.TrimPrefix(strOut, `Получить награду`)
// https://wartank.ru/convoy?15-1.ILinkListener-missions-cc-1-c-awardLink
ссылка := "https://wartank.ru/" + _ссылка
lstConvoy = сам.Сеть().ВебВоркер().Получ(ссылка)
сам.СтрОбновить(lstConvoy)
}