| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291 |
- package arena_convoy
- import (
- "log"
- "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.АренаКонфиг{
- Бот_: сам.бот,
- АренаИмя_: "Конвой",
- СтрКонтроль_: `<title>Конвой</title>`,
- ФнПуск_: сам.пуск,
- СтрУрл_: "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")
- if ош != nil {
- log.Printf("Конвой.обновитьВремя(): при обновлении времени, ош=\n\t%v\n", ош)
- сам.Отменить()
- return
- }
- // Найти строку с упоминанием оставшегося времени конвоя
- 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
- }
- // <div class="bot"><a class="simple-but border red" w:id="startFight" href="convoy?7-1.ILinkListener-root-startFight"><span><span>В БОЙ!</span></span></a></div>
- if strings.Contains(lastTime, `ILinkListener-root-startFight`) {
- return
- }
- if strings.Contains(lastTime, `ILinkListener-root-findEnemy`) {
- return
- }
- // <div class="bot"><a class="simple-but border" w:id="startMasking" href="convoy?12-1.ILinkListener-root-startMasking"><span><span>В БОЙ!</span></span></a></div>
- if strings.Contains(lastTime, `ILinkListener-root-startMasking`) {
- return
- }
- }
- switch {
- case еслиНайдено: // Большая пауза между конвоями
- // Ждём окончания ожидания конвоя
- lstTime := strings.Split(strLastTime, `До следующего конвоя: `)
- strLastTime = lstTime[1]
- if err := сам.ОбратВремяУст(АВремя(strLastTime)); err != nil {
- // log._rintf("WARN Конвой.обновитьВремя(): при установке времени ожидания конвоя(%v)\n\terr=%v\n", strLastTime, err)
- err := сам.ОбратВремяУст("10")
- if err != nil {
- log.Printf("Конвой.обновитьВремя(): при установке времени ожидания конвоя(%v)\n\terr=%v\n", strLastTime, err)
- сам.Отменить()
- }
- }
- case isMask: // Если маскировка между конвоями
- // Ждём окончания ожидания конвоя
- lstTime := strings.Split(strLastTime, `Полная маскировка через `)
- strLastTime = lstTime[1]
- if err := сам.ОбратВремяУст(АВремя(strLastTime)); err != nil {
- // log._rintf("ERRO BКонвой.обновитьВремя(): при установке времени банка для 1го режима(%v)\n\terr=%v\n", strLastTime, err)
- err := сам.ОбратВремяУст("10")
- if err != nil {
- log.Printf("Конвой.обновитьВремя(): при установке времени банка для 1го режима(%v)\n\terr=%v\n", strLastTime, err)
- сам.Отменить()
- }
- }
- }
- }
- // Забирает награду в конвое "Активируй боевую силу"
- func (сам *АренаКонвой) проверитьМиссияРазведкаКонвой() {
- var (
- strOut string
- еслиНайдено bool
- )
- сам.Сеть().Обновить()
- lstConvoy := сам.СписПолучить()
- // <a class="simple-but border" href="convoy?21-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
- for _, strOut = range lstConvoy {
- if strings.Contains(strOut, `.ILinkListener-missions-cc-0-c-awardLink`) {
- еслиНайдено = true
- break
- }
- }
- if !еслиНайдено {
- return
- }
- // <a class="simple-but border" href="convoy?21-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
- _ссылка := strings.TrimPrefix(strOut, `<a class="simple-but border" href="`)
- _ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Получить награду</span></span></a>`)
- // https://wartank.ru/convoy?23-1.ILinkListener-missions-cc-0-c-awardLink
- ссылка := "https://wartank.ru/" + _ссылка
- lstConvoy = сам.Сеть().ВебВоркер().Получ(ссылка)
- if err := сам.СтрОбновить(lstConvoy); err != nil {
- log.Printf("Конвой.проверитьМиссияРазведкаКонвой(): пр обновлении lstConvoy, err=\n\t%v\n", err)
- return
- }
- log.Printf("Конвой.проверитьМиссияРазведкаКонвой(): награда получена\n")
- }
- // Забирает награду в конвое "Мастер дозора"
- func (сам *АренаКонвой) проверитьМиссияМастерРазведки() {
- var (
- strOut string
- еслиНайдено bool
- lstConvoy = сам.СписПолучить()
- ind int
- )
- if len(lstConvoy) == 0 {
- сам.Обновить()
- lstConvoy = сам.СписПолучить()
- }
- for ind, strOut = range lstConvoy {
- if strings.Contains(strOut, `Проведи разведку в конвое<br/>`) {
- еслиНайдено = true
- ind += 23
- strOut = lstConvoy[ind]
- break
- }
- }
- if !еслиНайдено {
- return
- }
- // <a class="simple-but border" href="convoy?61-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
- if !strings.Contains(strOut, `ILinkListener-missions-cc-0-c-awardLink`) {
- return
- }
- lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
- strLink := lstLink[1]
- lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
- // 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
- }
- if err := сам.СтрОбновить(lstConvoy); err != nil {
- // log._rintf("ERRO Конвой.checkMaster(): пр обновлении lstConvoy, err=\n\t%v\n", err)
- return
- }
- // log._rintf("INFO Конвой.checkMaster(): награда получена\n")
- }
- // Забирает награду в конвое "Уничтожь 6 врагов в конвое"
- func (сам *АренаКонвой) проверитьМиссия6фрагов() {
- var (
- strOut string
- еслиНайдено bool
- )
- сам.Обновить()
- lstConvoy := сам.СписПолучить()
- // <a class="simple-but border" href="convoy?8-1.ILinkListener-missions-cc-1-c-awardLink"><span><span>Получить награду</span></span></a>
- for _, strOut = range lstConvoy {
- if strings.Contains(strOut, `.ILinkListener-missions-cc-1-c-awardLink`) {
- еслиНайдено = true
- break
- }
- }
- if !еслиНайдено {
- return
- }
- // <a class="simple-but border" href="convoy?8-1.ILinkListener-missions-cc-1-c-awardLink"><span><span>Получить награду</span></span></a>
- _ссылка := strings.TrimPrefix(strOut, `<a class="simple-but border" href="`)
- _ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Получить награду</span></span></a>`)
- // https://wartank.ru/convoy?15-1.ILinkListener-missions-cc-1-c-awardLink
- ссылка := "https://wartank.ru/" + _ссылка
- lstConvoy = сам.Сеть().ВебВоркер().Получ(ссылка)
- if err := сам.СтрОбновить(lstConvoy); err != nil {
- log.Printf("Конвой.проверитьМиссия6фрагов(): при обновлении lstConvoy, ош=\n\t%v\n", err)
- return
- }
- log.Printf("Конвой.проверитьМиссия6фрагов(): награда получена\n")
- }
|