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) }