package arena_bank import ( "fmt" "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" "wartank/app/lev2/arena/arena_bank/bank_mode" ) /* Предоставляет объект банка на базе */ // Банк -- объект банка на базе type АренаБанк struct { ИАрена сереброБот ИСтатПарам режим1 *bank_mode.BankMode // 1 режим работы на выбор режим2 *bank_mode.BankMode // 2 режим работы на выбор } // НовБанк -- возвращает новый арену банка func НовБанк(конт ILocalCtx) ИАренаБанк { сам := &АренаБанк{ сереброБот: lev1.НовСтатПарам("серебро бота"), режим1: bank_mode.NewBankMode(конт), режим2: bank_mode.NewBankMode(конт), } аренаКонфиг := arena.АренаКонфиг{ Бот_: конт.Get("бот").Val().(ИБот), АренаИмя_: "Банк", СтрКонтроль_: `Серебро
`, ФнПуск_: сам.пуск, СтрУрл_: "https://wartank.ru/production/Bank", } сам.ИАрена = arena.НовАрена(конт, аренаКонфиг) конт.Set("арена_банк", сам, "Арена банка бота") return сам } // запускает банк в опрос func (сам *АренаБанк) пуск() { log.Printf("Банк.пуск()\n") fnRun := func() { defer time.Sleep(time.Minute * 5) if сам.построитьУлучшить() { time.Sleep(time.Minute * 25) return } if сам.проверитьУскорить() { time.Sleep(time.Minute * 25) return } сам.Обновить() if ош := сам.получитьВсеРежимы(); ош != nil { log.Printf("ERRO Банк.пуск(): при получении списка режимов банка, err=\n\t%v\n", ош) } _, ош := сам.сделатьСеребро() if ош != nil { log.Printf("ERRO Банк.пуск(): при пуске производства банка, err=\n\t%v\n", ош) } } for { // <-сам.ВремяОпрос().КаналСиг() fnRun() } } // Проверка на ускорение строительства func (сам *АренаБанк) проверитьУскорить() bool { var ( стрСсылка = "" еслиНайдено = false ) списБанк := сам.Сеть().ВебВоркер().Получ("https://wartank.ru/buildings") // Ускорение for _, стрСсылка = range списБанк { if strings.Contains(стрСсылка, `.ILinkListener-buildings-1-building-rootBlock-actionPanel-freeBoostLink`) { еслиНайдено = true break } } if !еслиНайдено { return false } _ссылка := strings.TrimPrefix(стрСсылка, `Ускорение`) ссылка := "https://wartank.ru/" + _ссылка _ = сам.Сеть().ВебВоркер().Получ(ссылка) return true } // Проверяет необходимость постройки полигона func (сам *АренаБанк) построитьУлучшить() bool { var списБанк []string { // Зайти на страницу постройки // https://wartank.ru/building-upgrade/Bank списБанк = сам.Сеть().ВебВоркер().Получ("https://wartank.ru/building-upgrade/Bank") стрСсылка := "" еслиНайти := false // for _, стрСсылка = range списБанк { if strings.Contains(стрСсылка, `href="Bank?`) { еслиНайти = true break } } if !еслиНайти { // Время полигона вышло return false } _ссылка := strings.TrimPrefix(стрСсылка, ``) ссылка := "https://wartank.ru/building-upgrade/" + _ссылка // https://wartank.ru/building-upgrade/Bank?162-1.ILinkListener-upgradeLink-link списБанк = сам.Сеть().ВебВоркер().Получ(ссылка) } { // Заказать постройку // https://wartank.ru/building-upgrade/Bank стрСсылка := "" еслиНайти := false // for _, стрСсылка = range списБанк { if strings.Contains(стрСсылка, `href="Bank?`) { еслиНайти = true break } } if еслиНайти { // Время полигона вышло _ссылка := strings.TrimPrefix(стрСсылка, ``) ссылка := "https://wartank.ru/building-upgrade/" + _ссылка // https://wartank.ru/building-upgrade/Bank?162-1.ILinkListener-upgradeLink-link списБанк = сам.Сеть().ВебВоркер().Получ(ссылка) } } { // подтверждение постройки // да, подтверждаю стрСсылка := "" еслиНайти := false for _, стрСсылка = range списБанк { if strings.Contains(стрСсылка, `.ILinkListener-confirmLink`) { еслиНайти = true break } } if !еслиНайти { // Время полигона вышло return false } _ссылка := strings.TrimPrefix(стрСсылка, `да, подтверждаю") ссылка := "https://wartank.ru/" + _ссылка // https://wartank.ru/wicket/page?135-1.ILinkListener-confirmLink _ = сам.Сеть().ВебВоркер().Получ(ссылка) } log.Printf("Банк.построитьПровер(): построен успешно\n") return true } // РежимРаботы2 -- возвращает объект режима2 func (сам *АренаБанк) РежимРаботы2() ИБанкРежим { return сам.режим2 } // РежимРаботы1 -- возвращает объект режима1 func (сам *АренаБанк) РежимРаботы1() ИБанкРежим { return сам.режим1 } // СереброБот -- возвращает серебро от бота func (сам *АренаБанк) СереброБот() ИСтатПарам { return сам.сереброБот } // Запускает в производство серебро func (сам *АренаБанк) сделатьСеребро() (АМилСек, error) { var ( lstBank = сам.СписПолучить() ind int strOut string strLink string еслиНайдено bool ) time1 := сам.РежимРаботы1().ВремяСделать() time2 := сам.РежимРаботы2().ВремяСделать() if time1 > time2 { time1 = time2 } for ind, strOut = range lstBank { if strings.Contains(strOut, time1) { ind += 7 strLink = lstBank[ind] еслиНайдено = true break } } if еслиНайдено && strings.Contains(strLink, `>Начать производство`) { lstLink := strings.Split(strLink, `Начать производство`) strLink = "https://wartank.ru/production/" + lstLink[0] lstBank, err := сам.Сеть().Get(strLink) if err != nil { return 0, fmt.Errorf("BankNet.makeProduct(): при выполнении GET-запроса начать производство, err=%w", err) } for _, strOut := range lstBank { if strings.Contains(strOut, `База`) { // Это база, а не банк return 30, nil } } if err = сам.СтрОбновить(lstBank); err != nil { return 0, fmt.Errorf("BankNet.makeProduct(): при обновлении lstBank, err=%w", err) } if err := сам.ОбратВремяУст(АВремя(time1)); err != nil { log.Printf("WARN Банк.makeProduct(): при установке времени производства банка(%v)\n\terr=%v\n", time1, err) } } return сам.ВремяОстат().ПолучМилСек(), nil } // Получает все режимы банка func (сам *АренаБанк) получитьВсеРежимы() error { var ( lstBank = сам.СписПолучить() ind int strMode string strMode1 string strMode2 string ) { // Получить первый режим for ind, strMode = range lstBank { if strings.Contains(strMode, `Кол-во: `) { strMode1 = strMode break } } lstMode := strings.Split(strMode1, `Кол-во: `) strMode1 = lstMode[1] lstMode = strings.Split(strMode1, `
`) strMode1 = lstMode[0] iNum1, err := strconv.Atoi(strMode1) if err != nil { return fmt.Errorf("BankNet.getAllMode(): numSilver1(%v) not number, err=\n\t%w", strMode1, err) } сам.РежимРаботы1().Серебро().Уст(iNum1) // Установить время производства strTime1 := lstBank[ind+2] сам.РежимРаботы1().ВремяСделатьУст(strTime1) if iNum1 <= 2 { // Если банк слишком слабый return nil } } { // Получить второй режим for _ind := ind + 2; _ind < len(lstBank); _ind++ { strMode := lstBank[_ind] if strings.Contains(strMode, `Кол-во: `) { strMode2 = strMode ind = _ind break } } lstMode := strings.Split(strMode2, `Кол-во: `) strMode2 = lstMode[1] lstMode = strings.Split(strMode2, `
`) strMode2 = lstMode[0] iNum2, err := strconv.Atoi(strMode2) if err != nil { return fmt.Errorf("BankNet.getAllMode(): numSilver2(%v) not number, err=\n\t%w", strMode2, err) } сам.РежимРаботы2().Серебро().Уст(iNum2) // Установить время производства strTime2 := lstBank[ind+2] сам.РежимРаботы2().ВремяСделатьУст(strTime2) } return nil }