|
|
@@ -1,873 +0,0 @@
|
|
|
-// package arena_base -- база в игре
|
|
|
-package arena_base
|
|
|
-
|
|
|
-import (
|
|
|
- "fmt"
|
|
|
- "log"
|
|
|
- "strconv"
|
|
|
- "strings"
|
|
|
- "sync"
|
|
|
- "time"
|
|
|
-
|
|
|
- "wartank/app/lev0/alias"
|
|
|
- "wartank/app/lev0/cons"
|
|
|
- . "wartank/app/lev0/types"
|
|
|
- "wartank/app/lev2/arena"
|
|
|
- "wartank/app/lev2/arena_arsenal"
|
|
|
- "wartank/app/lev2/arena_bank"
|
|
|
- "wartank/app/lev2/arena_fuel_storage"
|
|
|
- "wartank/app/lev2/arena_laborator"
|
|
|
- "wartank/app/lev2/arena_market"
|
|
|
- "wartank/app/lev2/arena_mine"
|
|
|
- "wartank/app/lev2/arena_polygon"
|
|
|
-)
|
|
|
-
|
|
|
-/*
|
|
|
- Объект базы в игре.
|
|
|
-*/
|
|
|
-
|
|
|
-const (
|
|
|
- времОжидПлат = "01:00" // Время ожидания платного ускорения
|
|
|
- времОжидБесплат = "30:00" // Время ожидания бесплатного ускорения
|
|
|
-)
|
|
|
-
|
|
|
-// База -- объект базы
|
|
|
-type АренаБаза struct {
|
|
|
- ИАрена
|
|
|
- бот ИБот
|
|
|
- арсенал ИАренаАрсенал
|
|
|
- банк *arena_bank.АренаБанк
|
|
|
- полигон *arena_polygon.АренаПолигон
|
|
|
- шахта ИАренаШахта
|
|
|
- рынок *arena_market.АренаРынок
|
|
|
- складТоплива *arena_fuel_storage.АренаСкладТоплива
|
|
|
- лаборатория *arena_laborator.АренаЛаборатория
|
|
|
- времОстат int // Сколько времени спать до опроса базы
|
|
|
- блок sync.Mutex
|
|
|
-}
|
|
|
-
|
|
|
-// НовБаза -- возвращает новую базу бота
|
|
|
-func НовБаза(конт ИБотКонтекст, ангар ИАнгар) (*АренаБаза, error) {
|
|
|
- log.Printf("НовБаза(): %q\n", ангар.Бот().Имя())
|
|
|
- сам := &АренаБаза{
|
|
|
- бот: ангар.Бот(),
|
|
|
- }
|
|
|
- аренаКонфиг := arena.АренаКонфиг{
|
|
|
- Бот_: ангар.Бот(),
|
|
|
- АренаИмя_: "База",
|
|
|
- СтрКонтроль_: `<title>База</title>`,
|
|
|
- ФнПуск_: сам.пуск,
|
|
|
- СтрУрл_: "https://wartank.ru/buildings",
|
|
|
- }
|
|
|
- сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
|
|
|
- var ош error
|
|
|
- { // Arsenal
|
|
|
- сам.арсенал, ош = arena_arsenal.НовАрсенал(конт, сам)
|
|
|
- if ош != nil {
|
|
|
- return nil, fmt.Errorf("NewBase(): in create IArsenal, err=\n\t%w", ош)
|
|
|
- }
|
|
|
- }
|
|
|
- { // Bank
|
|
|
- сам.банк, ош = arena_bank.НовБанк(конт, сам)
|
|
|
- if ош != nil {
|
|
|
- return nil, fmt.Errorf("NewBase(): in create IBank, err=\n\t%w", ош)
|
|
|
- }
|
|
|
- }
|
|
|
- { // Mine
|
|
|
- сам.шахта, ош = arena_mine.НовШахта(конт, сам)
|
|
|
- if ош != nil {
|
|
|
- return nil, fmt.Errorf("NewBase(): in create IMine, err=\n\t%w", ош)
|
|
|
- }
|
|
|
- }
|
|
|
- сам.рынок = arena_market.НовРынок(конт, сам)
|
|
|
- // Polygon
|
|
|
- сам.полигон = arena_polygon.НовПолигон(конт, сам)
|
|
|
- { // Лаборатория
|
|
|
- сам.лаборатория, ош = arena_laborator.НоваяЛаборатория(ангар.Бот())
|
|
|
- if ош != nil {
|
|
|
- return nil, fmt.Errorf("НовБаза(): при создании лаборатории, err=\n\t%w", ош)
|
|
|
- }
|
|
|
- }
|
|
|
- { // Склад топлива
|
|
|
- сам.складТоплива, ош = arena_fuel_storage.НовСкладТоплива(конт, сам)
|
|
|
- if ош != nil {
|
|
|
- return nil, fmt.Errorf("НовБаза(): при создании склада топлива, err=\n\t%w", ош)
|
|
|
- }
|
|
|
- }
|
|
|
- return сам, nil
|
|
|
-}
|
|
|
-
|
|
|
-// Запускает базу в обработку
|
|
|
-func (сам *АренаБаза) Пуск() {
|
|
|
- log.Printf("Base.Run()\n")
|
|
|
- if err := сам.runComponent(); err != nil {
|
|
|
- panic(fmt.Errorf("Base.Run(): run, err=\n\t%w", err))
|
|
|
- }
|
|
|
- go сам.пуск()
|
|
|
-}
|
|
|
-
|
|
|
-// Собственная работа
|
|
|
-func (сам *АренаБаза) пуск() {
|
|
|
- фнЦикл := func() {
|
|
|
- defer time.Sleep(time.Minute * 2)
|
|
|
- сам.Обновить()
|
|
|
- сам.проверитьПолигонУсиление() // Проверить усиление полигона
|
|
|
- if err := сам.проверитьБанк(); err != nil { // Проверка режимов банка
|
|
|
- log.Printf("ERRO Base.Run(): при проверке банка, err=\n\t%v\n", err)
|
|
|
- }
|
|
|
- сам.проверитьАрсенал() // Проверка арсенала
|
|
|
- сам.проверитьШахту() // Проверка шахты
|
|
|
- сам.setCountDown() // Установка счётчика времени
|
|
|
-
|
|
|
- }
|
|
|
- for {
|
|
|
- select {
|
|
|
- case <-сам.Контекст().Done():
|
|
|
- return
|
|
|
- // case <-сам.ВремяОпрос().КаналСиг():
|
|
|
- // фнЦикл()
|
|
|
- default:
|
|
|
- log.Printf("База.пуск()\n")
|
|
|
- фнЦикл()
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// Запускает компоненты
|
|
|
-func (сам *АренаБаза) runComponent() error {
|
|
|
- log.Printf("Base.runComponent()\n")
|
|
|
- сам.блок.Lock()
|
|
|
- defer сам.блок.Unlock()
|
|
|
- if err := сам.банк.Пуск(); err != nil {
|
|
|
- return fmt.Errorf("Base.runComponent(): in run IBank, err=\n\t%w", err)
|
|
|
- }
|
|
|
- сам.рынок.Пуск()
|
|
|
- сам.полигон.Пуск()
|
|
|
- сам.складТоплива.Пуск()
|
|
|
- сам.лаборатория.Пуск()
|
|
|
- return nil
|
|
|
-}
|
|
|
-
|
|
|
-// Выбирает время обновления базы по компонентам
|
|
|
-func (сам *АренаБаза) setCountDown() {
|
|
|
- timeBase := сам.банк.ВремяОстат().String()
|
|
|
- timeCount := timeBase
|
|
|
- timeArsenal := сам.арсенал.ВремяОстат().String()
|
|
|
- timeMine := сам.шахта.ВремяОстат().String()
|
|
|
- if timeArsenal < timeCount {
|
|
|
- timeCount = timeArsenal
|
|
|
- }
|
|
|
- if timeMine < timeCount {
|
|
|
- timeCount = timeMine
|
|
|
- }
|
|
|
- if timeCount <= "05" {
|
|
|
- сам.времОстат = 5
|
|
|
- return
|
|
|
- }
|
|
|
- if timeCount > "00:10:00" {
|
|
|
- сам.времОстат = 600
|
|
|
- }
|
|
|
- ош := сам.ОбратВремяУст(alias.Время(timeCount))
|
|
|
- if ош != nil {
|
|
|
- log.Printf("ERRO Base.setCountDown(): при установке обратного отсчёта времени, err=\n\t%v\n", ош)
|
|
|
- сам.Отменить()
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// Арсенал -- возвращает объект арсенала
|
|
|
-func (сам *АренаБаза) Арсенал() ИАренаАрсенал {
|
|
|
- return сам.арсенал
|
|
|
-}
|
|
|
-
|
|
|
-// Банк -- возвращает объект банка
|
|
|
-func (сам *АренаБаза) Банк() ИБанк {
|
|
|
- сам.блок.Lock()
|
|
|
- defer сам.блок.Unlock()
|
|
|
- return сам.банк
|
|
|
-}
|
|
|
-
|
|
|
-// Полигон -- возвращает объект полигона
|
|
|
-func (сам *АренаБаза) Полигон() ИАренаПолигон {
|
|
|
- return сам.полигон
|
|
|
-}
|
|
|
-
|
|
|
-// Шахта -- возвращает объект шахты
|
|
|
-func (сам *АренаБаза) Шахта() ИАренаШахта {
|
|
|
- return сам.шахта
|
|
|
-}
|
|
|
-
|
|
|
-// Рынок -- возвращает объект рынка
|
|
|
-func (сам *АренаБаза) Рынок() ИРынок {
|
|
|
- return сам.рынок
|
|
|
-}
|
|
|
-
|
|
|
-// Проверяет на забрать шахту
|
|
|
-func (сам *АренаБаза) проверитьШахту() {
|
|
|
- if сам.шахта.Руда().Получ() == 0 {
|
|
|
- сам.шахтаСтатаОбновить()
|
|
|
- }
|
|
|
- сам.шахтаАпгрейдФорсаж() // Нужно ли ускорить апгрейд шахты
|
|
|
- if сам.шахта.АренаСостояние().Состояние() == "upgrade" {
|
|
|
- return
|
|
|
- }
|
|
|
- сам.шахтаСтатаОбновить()
|
|
|
- сам.checkMineTime()
|
|
|
-}
|
|
|
-
|
|
|
-// Проверяет время ожидания шахты
|
|
|
-func (сам *АренаБаза) checkMineTime() {
|
|
|
- var (
|
|
|
- lstBase = сам.СписПолучить()
|
|
|
- strOut string
|
|
|
- еслиНайдено bool
|
|
|
- ind int
|
|
|
- )
|
|
|
- for ind, strOut = range lstBase {
|
|
|
- if !strings.Contains(strOut, `<span class="green2">Шахта - `) {
|
|
|
- continue
|
|
|
- }
|
|
|
- ind += 11
|
|
|
- strOut = lstBase[ind]
|
|
|
- еслиНайдено = true
|
|
|
- break
|
|
|
- }
|
|
|
- if !еслиНайдено {
|
|
|
- return
|
|
|
- }
|
|
|
- if !strings.Contains(strOut, `<td><div class="value-block lh1"><span><span>`) {
|
|
|
- return
|
|
|
- }
|
|
|
- /*
|
|
|
- lstTime := strings.Split(strOut, `<td><div class="value-block lh1"><span><span>`)
|
|
|
- strTime := lstTime[1]
|
|
|
- lstTime = strings.Split(strTime, `</span></span></div></td>`)
|
|
|
- strTime = lstTime[0]
|
|
|
- if err := сам.шахта.Уст(alias.Время(strTime)); err != nil {
|
|
|
- log.Printf("ERRO Base.checkMineTime(): при установке обратного отсчёта(%v), err=\n\t%v\n", strTime, err)
|
|
|
- }
|
|
|
- */
|
|
|
-}
|
|
|
-
|
|
|
-// Проверка статистики шахты
|
|
|
-func (сам *АренаБаза) шахтаСтатаОбновить() {
|
|
|
- var (
|
|
|
- lstMine = сам.СписПолучить()
|
|
|
- strOut string
|
|
|
- еслиНайдено bool
|
|
|
- ind int
|
|
|
- )
|
|
|
- { // Ищем руду
|
|
|
- for _, strOut = range lstMine {
|
|
|
- if strings.Contains(strOut, `<span class="nwr"><img class="rico vm" src="/images/icons/ore.png?2" alt="Руда" title="Руда"/>`) {
|
|
|
- еслиНайдено = true
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if еслиНайдено && strings.Contains(strOut, `<span class="nwr"><img class="rico vm" src="/images/icons/ore.png?2" alt="Руда" title="Руда"/> `) {
|
|
|
- списРуда := strings.Split(strOut, `<span class="nwr"><img class="rico vm" src="/images/icons/ore.png?2" alt="Руда" title="Руда"/> `)
|
|
|
- стрРуда := списРуда[1]
|
|
|
- списРуда = strings.Split(стрРуда, ` </span>`)
|
|
|
- стрРуда = списРуда[0]
|
|
|
- целРуда, err := strconv.Atoi(стрРуда)
|
|
|
- if err != nil {
|
|
|
- log.Printf("ERRO Base.checkMineStat(): руда(%v) не число, err=\n\t%v\n", стрРуда, err)
|
|
|
- return
|
|
|
- }
|
|
|
- сам.шахта.Руда().Уст(целРуда)
|
|
|
- }
|
|
|
- }
|
|
|
- { // Ищем железо
|
|
|
- for _, strOut = range lstMine {
|
|
|
- if strings.Contains(strOut, `<span class="nwr"><img class="rico vm" src="/images/icons/iron.png?2" alt="Железо" title="Железо"/> `) {
|
|
|
- еслиНайдено = true
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if еслиНайдено && strings.Contains(strOut, `<span class="nwr"><img class="rico vm" src="/images/icons/iron.png?2" alt="Железо" title="Железо"/> `) {
|
|
|
- lstFerrum := strings.Split(strOut, `<span class="nwr"><img class="rico vm" src="/images/icons/iron.png?2" alt="Железо" title="Железо"/> `)
|
|
|
- strFerrum := lstFerrum[1]
|
|
|
- lstFerrum = strings.Split(strFerrum, ` </span>`)
|
|
|
- strFerrum = lstFerrum[0]
|
|
|
- iFerrum, err := strconv.Atoi(strFerrum)
|
|
|
- if err != nil {
|
|
|
- log.Printf("ERRO Base.checkMineStat(): железо(%v) не число, err=\n\t%v\n", strFerrum, err)
|
|
|
- return
|
|
|
- }
|
|
|
- сам.шахта.Железо().Уст(iFerrum)
|
|
|
- }
|
|
|
- }
|
|
|
- { // Ищем сталь
|
|
|
- for _, strOut = range lstMine {
|
|
|
- if strings.Contains(strOut, `<span class="nwr"><img class="rico vm" src="/images/icons/steel.png?2" alt="Сталь" title="Сталь"/> `) {
|
|
|
- еслиНайдено = true
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if еслиНайдено && strings.Contains(strOut, `<span class="nwr"><img class="rico vm" src="/images/icons/steel.png?2" alt="Сталь" title="Сталь"/> `) {
|
|
|
- lstSteel := strings.Split(strOut, `<span class="nwr"><img class="rico vm" src="/images/icons/steel.png?2" alt="Сталь" title="Сталь"/> `)
|
|
|
- strSteel := lstSteel[1]
|
|
|
- lstSteel = strings.Split(strSteel, ` </span>`)
|
|
|
- strSteel = lstSteel[0]
|
|
|
- iSteel, err := strconv.Atoi(strSteel)
|
|
|
- if err != nil {
|
|
|
- log.Printf("ERRO Base.checkMineStat(): сталь(%v) не число, err=\n\t%v\n", strSteel, err)
|
|
|
- return
|
|
|
- }
|
|
|
- сам.шахта.Сталь().Уст(iSteel)
|
|
|
- }
|
|
|
- }
|
|
|
- { // Ищем свинец
|
|
|
- for _, strOut = range lstMine {
|
|
|
- if strings.Contains(strOut, `<span class="nwr"><img class="rico vm" src="/images/icons/plumbum.png?2" alt="Свинец" title="Свинец"/> `) {
|
|
|
- еслиНайдено = true
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if еслиНайдено && strings.Contains(strOut, `<span class="nwr"><img class="rico vm" src="/images/icons/plumbum.png?2" alt="Свинец" title="Свинец"/> `) {
|
|
|
- lstPlumbum := strings.Split(strOut, `<span class="nwr"><img class="rico vm" src="/images/icons/plumbum.png?2" alt="Свинец" title="Свинец"/> `)
|
|
|
- strPlumbum := lstPlumbum[1]
|
|
|
- lstPlumbum = strings.Split(strPlumbum, ` </span>`)
|
|
|
- strPlumbum = lstPlumbum[0]
|
|
|
- iPlumbum, err := strconv.Atoi(strPlumbum)
|
|
|
- if err != nil {
|
|
|
- log.Printf("ERRO Base.checkMineStat(): свинец(%v) не число, err=\n\t%v\n", strPlumbum, err)
|
|
|
- return
|
|
|
- }
|
|
|
- сам.шахта.Свинец().Уст(iPlumbum)
|
|
|
- }
|
|
|
- }
|
|
|
- { // Ищем время обработки и режим
|
|
|
- lstBase := сам.СписПолучить()
|
|
|
- /*
|
|
|
- for ind, strOut = range lstBase {
|
|
|
- if strings.Contains(strOut, `<span class="green2">Шахта - `) {
|
|
|
- еслиНайдено = true
|
|
|
- ind += 11
|
|
|
- strOut = lstBase[ind]
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- /*
|
|
|
- /*
|
|
|
- if еслиНайдено && strings.Contains(strOut, `<td><div class="value-block lh1"><span><span>`) {
|
|
|
- lstTime := strings.Split(strOut, `<td><div class="value-block lh1"><span><span>`)
|
|
|
- strTime := lstTime[1]
|
|
|
- lstTime = strings.Split(strTime, `</span></span></div></td>`)
|
|
|
- strTime = lstTime[0]
|
|
|
- if err := сам.шахта.Уст(alias.Время(strTime)); err != nil {
|
|
|
- log.Printf("ERRO Base.checkMineStat(): при установке времени ожидания шахты(%v)\n\terr=%v\n", strTime, err)
|
|
|
- }
|
|
|
- }
|
|
|
- */
|
|
|
-
|
|
|
- ind -= 3
|
|
|
- if ind < 0 {
|
|
|
- log.Printf("Base.checkMineStat(): отрицательный индекс(%v)!\n", ind)
|
|
|
- return
|
|
|
- }
|
|
|
- strOut = lstBase[ind]
|
|
|
- switch {
|
|
|
- case strings.Contains(strOut, `/images/icons/iron.png`): // Железо
|
|
|
- lstNum := strings.Split(strOut, `<td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/iron.png?2" alt="iron"/> `)
|
|
|
- strNum := lstNum[1]
|
|
|
- lstNum = strings.Split(strNum, `</div></td>`)
|
|
|
- strNum = lstNum[0]
|
|
|
- работа := alias.АренаРаботаИмя("Железо-" + strNum)
|
|
|
- сам.шахта.АренаСостояние().РаботаИмяУст(работа)
|
|
|
- case strings.Contains(strOut, `/images/icons/ore.png`): // Руда
|
|
|
- lstNum := strings.Split(strOut, `<td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/ore.png?2" alt="ore"/> `)
|
|
|
- strNum := lstNum[1]
|
|
|
- lstNum = strings.Split(strNum, `</div></td>`)
|
|
|
- strNum = lstNum[0]
|
|
|
- работа := alias.АренаРаботаИмя("Руда-" + strNum)
|
|
|
- сам.шахта.АренаСостояние().РаботаИмяУст(работа)
|
|
|
- case strings.Contains(strOut, `/images/icons/steel.png`): // Руда
|
|
|
- lstNum := strings.Split(strOut, `<td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/steel.png?2" alt="steel"/> `)
|
|
|
- strNum := lstNum[1]
|
|
|
- lstNum = strings.Split(strNum, `</div></td>`)
|
|
|
- strNum = lstNum[0]
|
|
|
- работа := alias.АренаРаботаИмя("Сталь-" + strNum)
|
|
|
- сам.шахта.АренаСостояние().РаботаИмяУст(работа)
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// Проверяет режимы арсенала
|
|
|
-func (сам *АренаБаза) проверитьАрсенал() {
|
|
|
- // countTime := сам.арсенал.ВремяОпрос().Получ()
|
|
|
- // if countTime > 3 {
|
|
|
- // return
|
|
|
- // }
|
|
|
- /*
|
|
|
- if err := сам.арсенал.СтатаОбновить(); err != nil {
|
|
|
- // log._rintf("ERRO Base.checkArsenal(): при обновлении арсенала, err=\n\t%v\n", err)
|
|
|
- return
|
|
|
- }
|
|
|
- */
|
|
|
- if работа := сам.арсенал.АренаСостояние().РаботаИмя(); работа == "" {
|
|
|
- сам.проверитьАрсеналРежим()
|
|
|
- }
|
|
|
- сам.проверитьАрсеналУскорение() // Нужно ли ускорить апгрейд арсенала
|
|
|
- if сам.арсенал.АренаСостояние().Состояние() == cons.РежимАпгрейд {
|
|
|
- return
|
|
|
- }
|
|
|
- сам.проверитьАрсеналВремя()
|
|
|
- сам.проверитьАрсеналРежим()
|
|
|
-}
|
|
|
-
|
|
|
-// Проверяет время готовности арсенала
|
|
|
-func (сам *АренаБаза) проверитьАрсеналВремя() {
|
|
|
- var (
|
|
|
- lstBase = сам.СписПолучить()
|
|
|
- ind int
|
|
|
- strOut string
|
|
|
- еслиНайдено bool
|
|
|
- )
|
|
|
- for ind, strOut = range lstBase {
|
|
|
- if !strings.Contains(strOut, `Производит снаряды, ремкомплекты<br/>`) {
|
|
|
- continue
|
|
|
- }
|
|
|
- ind += 10
|
|
|
- strOut = lstBase[ind]
|
|
|
- еслиНайдено = true
|
|
|
- break
|
|
|
- }
|
|
|
- if !еслиНайдено {
|
|
|
- return
|
|
|
- }
|
|
|
- if !strings.Contains(strOut, ":") {
|
|
|
- return
|
|
|
- }
|
|
|
- lstTime := strings.Split(strOut, `<td><div class="value-block lh1"><span><span>`)
|
|
|
- if len(lstTime) != 2 { // Возможно, производство
|
|
|
- return
|
|
|
- }
|
|
|
- /*
|
|
|
- strTime := lstTime[1]
|
|
|
- lstTime = strings.Split(strTime, `</span></span></div></td>`)
|
|
|
- strTime = lstTime[0]
|
|
|
- if err := сам.арсенал.Уст(alias.Время(strTime)); err != nil {
|
|
|
- log.Printf("ERRO Base.checkArsenalTime(): при установке времени ожидания арсенала(%v)\n\terr=%v\n", strTime, err)
|
|
|
- }
|
|
|
- */
|
|
|
-}
|
|
|
-
|
|
|
-// Проверяет режим производства арсенала
|
|
|
-func (сам *АренаБаза) проверитьАрсеналРежим() {
|
|
|
- var (
|
|
|
- strOut string
|
|
|
- lstBase = сам.СписПолучить()
|
|
|
- )
|
|
|
- for _, strOut = range lstBase {
|
|
|
- if strings.Contains(strOut, `HollowCharge.png`) {
|
|
|
- сам.арсенал.АренаСостояние().СостояниеУст("кумулятивы")
|
|
|
- return
|
|
|
- }
|
|
|
- if strings.Contains(strOut, `ArmorPiercing.png`) {
|
|
|
- сам.арсенал.АренаСостояние().СостояниеУст("бронебойки")
|
|
|
- return
|
|
|
- }
|
|
|
- if strings.Contains(strOut, `HighExplosive.png`) {
|
|
|
- сам.арсенал.АренаСостояние().СостояниеУст("фугасы")
|
|
|
- return
|
|
|
- }
|
|
|
- if strings.Contains(strOut, `repairkit.gif`) {
|
|
|
- сам.арсенал.АренаСостояние().СостояниеУст("ремки")
|
|
|
- return
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// Проверяет на ускорение апгрейда арсенала
|
|
|
-func (сам *АренаБаза) проверитьАрсеналУскорение() {
|
|
|
- var (
|
|
|
- ind int
|
|
|
- strOut = ""
|
|
|
- еслиНайдено bool
|
|
|
- lstBase = сам.СписПолучить()
|
|
|
- )
|
|
|
- { // Проверка на платное ускорение апгрейда + время
|
|
|
- for ind, strOut = range lstBase {
|
|
|
- if strings.Contains(strOut, `Производит снаряды, ремкомплекты<br/>`) {
|
|
|
- // Убедиться что есть строка платного ускорения
|
|
|
- еслиНайдено = true
|
|
|
- ind += 29
|
|
|
- strOut = lstBase[ind]
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if !еслиНайдено {
|
|
|
- return
|
|
|
- }
|
|
|
- { // Платное ускорение
|
|
|
- if strings.Contains(strOut, `Ускорить за`) {
|
|
|
- /*
|
|
|
- if err := сам.арсенал.ОбратВремяУст(времОжидПлат); err != nil {
|
|
|
- log.Printf("WARN Base.checkArsenalForce(): при установке платного времени ускорения апгрейда арсенала(%v)\n\terr=%v\n", времОжидПлат, err)
|
|
|
- }
|
|
|
- */
|
|
|
- сам.арсенал.АренаСостояние().СостояниеУст("апгрейд")
|
|
|
- сам.арсенал.АренаСостояние().СостояниеУст(cons.РежимАпгрейд)
|
|
|
- return
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- { // Проверка на бесплатное ускорение апгрейда
|
|
|
- еслиНайдено = false
|
|
|
- for ind, strOut = range lstBase {
|
|
|
- if strings.Contains(strOut, `Производит снаряды, ремкомплекты<br/>`) {
|
|
|
- // Убедиться что есть строка платного ускорения
|
|
|
- еслиНайдено = true
|
|
|
- ind += 26
|
|
|
- strOut = lstBase[ind]
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if !еслиНайдено {
|
|
|
- return
|
|
|
- }
|
|
|
- if !strings.Contains(strOut, `>Ускорение<`) {
|
|
|
- return
|
|
|
- }
|
|
|
- сам.арсенал.АренаСостояние().СостояниеУст(cons.РежимАпгрейд)
|
|
|
- lstLink := strings.Split(strOut, `<td style="width:50%;padding-left:1px;"><a class="simple-but border" href="`)
|
|
|
- strLink := lstLink[1]
|
|
|
- lstLink = strings.Split(strLink, `"><span><span>Ускорение</span></span></a>`)
|
|
|
- strLink = "https://wartank.ru/" + lstLink[0]
|
|
|
- lstBase, err := сам.Сеть().Get(strLink)
|
|
|
- if err != nil {
|
|
|
- // log._rintf("ERRO NetBank.checkArsenalForce(): при GET-запросе на бесплатном ускорении апгрейда арсенала, err=\n\t%v\n", err)
|
|
|
- return
|
|
|
- }
|
|
|
- // sound.ArsenalForce()
|
|
|
- if err := сам.СтрОбновить(lstBase); err != nil {
|
|
|
- // log._rintf("ERRO NetBank.checkArsenalForce(): при обновлении lstBase, err=\n\t%v\n", err)
|
|
|
- return
|
|
|
- }
|
|
|
- сам.арсенал.АренаСостояние().СостояниеУст("апгрейд")
|
|
|
- сам.арсенал.АренаСостояние().СостояниеУст(cons.РежимАпгрейд)
|
|
|
- /*
|
|
|
- if err := сам.арсенал.ОбратВремяУст(времОжидБесплат); err != nil {
|
|
|
- log.Printf("WARN Base.checkArsenalForce(): при установке бесплатного времени ускорения апгрейда арсенала(%v)\n\terr=%v\n", времОжидБесплат, err)
|
|
|
- }
|
|
|
- */
|
|
|
- }
|
|
|
- // Все проверки прошли -- это просто работа
|
|
|
- сам.арсенал.АренаСостояние().СостояниеУст(cons.РежимРабота)
|
|
|
-}
|
|
|
-
|
|
|
-// Проверяет режим банка
|
|
|
-func (сам *АренаБаза) проверитьБанк() error {
|
|
|
- if сам.банк.АренаСостояние().РаботаИмя() == "" {
|
|
|
- сам.checkBankMode()
|
|
|
- }
|
|
|
- сам.checkBankTime() // Проверка времени ожидания
|
|
|
- countTime := сам.банк.ВремяОстат().ПолучМилСек()
|
|
|
- if countTime > 5_000 {
|
|
|
- return nil
|
|
|
- }
|
|
|
- сам.checkBankForce() // Нужно ли ускорить апгрейд банка
|
|
|
- if сам.банк.АренаСостояние().Состояние() == cons.РежимАпгрейд {
|
|
|
- return nil
|
|
|
- }
|
|
|
- сам.checkBankProduct() // Запуск производства в банке
|
|
|
- return nil
|
|
|
-}
|
|
|
-
|
|
|
-// Проверяет режим работы банка
|
|
|
-func (сам *АренаБаза) checkBankMode() {
|
|
|
- var (
|
|
|
- strOut string
|
|
|
- еслиНайдено bool
|
|
|
- lstBase = сам.СписПолучить()
|
|
|
- )
|
|
|
- for _, strOut = range lstBase {
|
|
|
- if strings.Contains(strOut, `<td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/silver.png?2" alt="silver"/> `) {
|
|
|
- еслиНайдено = true
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if !еслиНайдено {
|
|
|
- return
|
|
|
- }
|
|
|
- lstSilver := strings.Split(strOut, `<td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/silver.png?2" alt="silver"/> `)
|
|
|
- strSilver := lstSilver[1]
|
|
|
- lstSilver = strings.Split(strSilver, `</div></td>`)
|
|
|
- работа := alias.АренаРаботаИмя("Серебро-" + lstSilver[0])
|
|
|
- сам.банк.АренаСостояние().РаботаИмяУст(работа)
|
|
|
- сам.банк.АренаСостояние().СостояниеУст(cons.РежимРабота)
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-// Проверяет на время ожидания банка
|
|
|
-func (сам *АренаБаза) checkBankTime() {
|
|
|
- var (
|
|
|
- strOut string
|
|
|
- ind int
|
|
|
- еслиНайдено bool
|
|
|
- lstBase = сам.СписПолучить()
|
|
|
- )
|
|
|
- for ind, strOut = range lstBase {
|
|
|
- if strings.Contains(strOut, `Производит серебро<br/>`) {
|
|
|
- еслиНайдено = true
|
|
|
- ind += 10
|
|
|
- strOut = lstBase[ind]
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if !еслиНайдено {
|
|
|
- return
|
|
|
- }
|
|
|
- if !strings.Contains(strOut, `<td><div class="value-block lh1"><span><span>`) {
|
|
|
- return
|
|
|
- }
|
|
|
- lstTime := strings.Split(strOut, `<td><div class="value-block lh1"><span><span>`)
|
|
|
- strTime := lstTime[1]
|
|
|
- lstTime = strings.Split(strTime, `</span></span></div></td>`)
|
|
|
- strTime = lstTime[0]
|
|
|
- if err := сам.банк.ОбратВремяУст(alias.Время(strTime)); err != nil {
|
|
|
- log.Printf("ERRO Base.checkBankTime(): при установке времени ожидания банка(%v)\n\terr=%v\n", strTime, err)
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// Проверяет на произвести в банке
|
|
|
-func (сам *АренаБаза) checkBankProduct() {
|
|
|
- var (
|
|
|
- strOut string
|
|
|
- ind int
|
|
|
- еслиНайдено bool
|
|
|
- lstBase = сам.СписПолучить()
|
|
|
- )
|
|
|
- for ind, strOut = range lstBase {
|
|
|
- if strings.Contains(strOut, `Производит серебро<br/>`) {
|
|
|
- еслиНайдено = true
|
|
|
- ind += 11
|
|
|
- strOut = lstBase[ind]
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if !еслиНайдено {
|
|
|
- return
|
|
|
- }
|
|
|
- if !strings.Contains(strOut, `>Производство</span>`) {
|
|
|
- return
|
|
|
- }
|
|
|
- сам.банк.UpdateLst()
|
|
|
- ош := сам.банк.ОбратВремяУст("01:00")
|
|
|
- if ош != nil {
|
|
|
- log.Printf("ERRO Base.checkBankProduct(): при установке обратного времени ожидания банка, err=\n\t%v\n", ош)
|
|
|
- сам.Отменить()
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// Проверка получения серебра из банка
|
|
|
-
|
|
|
-// Проверяет на ускорение апгрейда банка
|
|
|
-func (сам *АренаБаза) checkBankForce() {
|
|
|
- var (
|
|
|
- ind int
|
|
|
- strOut = ""
|
|
|
- isOut bool
|
|
|
- lstBase = сам.СписПолучить()
|
|
|
- )
|
|
|
- { // Проверка на платное ускорение апгрейда
|
|
|
- for ind, strOut = range lstBase {
|
|
|
- if strings.Contains(strOut, `Производит серебро<br/>`) {
|
|
|
- // Убедиться что есть строка платного ускорения
|
|
|
- isOut = true
|
|
|
- ind += 29
|
|
|
- strOut = lstBase[ind]
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if isOut && strings.Contains(strOut, `Ускорить за`) {
|
|
|
- if err := сам.банк.ОбратВремяУст(времОжидПлат); err != nil {
|
|
|
- log.Printf("WARN Base.checkBankForce(): при установке времени ожидания платного ускорения апгрейда банка(%v)\n\terr=%v\n", времОжидПлат, err)
|
|
|
- }
|
|
|
- сам.банк.АренаСостояние().РаботаИмяУст("")
|
|
|
- сам.банк.АренаСостояние().СостояниеУст(cons.РежимАпгрейд)
|
|
|
- return
|
|
|
- }
|
|
|
- }
|
|
|
- { // Проверка на бесплатное ускорение апгрейда
|
|
|
- isOut = false
|
|
|
- for ind, strOut = range lstBase {
|
|
|
- if strings.Contains(strOut, `Производит серебро<br/>`) {
|
|
|
- // Убедиться что есть строка платного ускорения
|
|
|
- isOut = true
|
|
|
- ind += 26
|
|
|
- strOut = lstBase[ind]
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if isOut && strings.Contains(strOut, `>Ускорение<`) {
|
|
|
-
|
|
|
- lstLink := strings.Split(strOut, `<td style="width:50%;padding-left:1px;"><a class="simple-but border" href="`)
|
|
|
- strLink := lstLink[1]
|
|
|
- lstLink = strings.Split(strLink, `"><span><span>Ускорение</span></span></a>`)
|
|
|
- strLink = "https://wartank.ru/" + lstLink[0]
|
|
|
- lstBase, err := сам.Сеть().Get(strLink)
|
|
|
- if err != nil {
|
|
|
- // log._rintf("ERRO NetBank.checkBankForce(): при GET-запросе на бесплатном ускорении апгрейда банка, err=\n\t%v\n", err)
|
|
|
- return
|
|
|
- }
|
|
|
- if err := сам.СтрОбновить(lstBase); err != nil {
|
|
|
- // log._rintf("ERRO NetBank.checkBankForce(): при обновлении lstBase, err=\n\t%v\n", err)
|
|
|
- return
|
|
|
- }
|
|
|
- сам.банк.АренаСостояние().РаботаИмяУст("")
|
|
|
- сам.банк.АренаСостояние().СостояниеУст(cons.РежимАпгрейд)
|
|
|
- if err := сам.банк.ОбратВремяУст(времОжидБесплат); err != nil {
|
|
|
- log.Printf("WARN Base.checkBankForce(): при установке времени бесплатного ускорения апгрейда банка(%v)\n\terr=%v\n", времОжидБесплат, err)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// Проверяет на ускорение апгрейда шахты
|
|
|
-func (сам *АренаБаза) шахтаАпгрейдФорсаж() {
|
|
|
- var (
|
|
|
- ind int
|
|
|
- strOut = ""
|
|
|
- isOut bool
|
|
|
- lstBase = сам.СписПолучить()
|
|
|
- )
|
|
|
- { // Проверка на платное ускорение апгрейда
|
|
|
- for ind, strOut = range lstBase {
|
|
|
- if strings.Contains(strOut, `Производит ресурсы<br/>`) {
|
|
|
- // Убедиться что есть строка платного ускорения
|
|
|
- isOut = true
|
|
|
- ind += 29
|
|
|
- strOut = lstBase[ind]
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if isOut && strings.Contains(strOut, `Ускорить за`) {
|
|
|
- сам.шахта.АренаСостояние().РаботаИмяУст("")
|
|
|
- сам.шахта.АренаСостояние().СостояниеУст(cons.РежимАпгрейд)
|
|
|
- /*
|
|
|
- if err := сам.шахта.ОбратВремяУст(времОжидПлат); err != nil {
|
|
|
- log.Printf("WARN Base.checkMineForce(): при установке времени платного апгрейда шахты(%v)\n\terr=%v\n", времОжидПлат, err)
|
|
|
- }
|
|
|
- */
|
|
|
- return
|
|
|
- }
|
|
|
- }
|
|
|
- { // Проверка на время бесплатного ускорение апгрейда
|
|
|
- isOut = false
|
|
|
- for ind, strOut = range lstBase {
|
|
|
- if strings.Contains(strOut, `Производит ресурсы<br/>`) {
|
|
|
- // Убедиться что есть строка платного ускорения
|
|
|
- isOut = true
|
|
|
- ind += 26
|
|
|
- strOut = lstBase[ind]
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if isOut && strings.Contains(strOut, `>Ускорение<`) {
|
|
|
- lstLink := strings.Split(strOut, `<td style="width:50%;padding-left:1px;"><a class="simple-but border" href="`)
|
|
|
- strLink := lstLink[1]
|
|
|
- lstLink = strings.Split(strLink, `"><span><span>Ускорение</span></span></a>`)
|
|
|
- strLink = "https://wartank.ru/" + lstLink[0]
|
|
|
- lstBase, err := сам.Сеть().Get(strLink)
|
|
|
- if err != nil {
|
|
|
- // log._rintf("ERRO NetBank.checkMineForce(): при GET-запросе на бесплатном ускорении апгрейда шахты, err=\n\t%v\n", err)
|
|
|
- return
|
|
|
- }
|
|
|
- if err := сам.СтрОбновить(lstBase); err != nil {
|
|
|
- // log._rintf("ERRO NetBank.checkMineForce(): при обновлении lstBase, err=\n\t%v\n", err)
|
|
|
- return
|
|
|
- }
|
|
|
- /*
|
|
|
- if err := сам.шахта.ОбратВремяУст(времОжидБесплат); err != nil {
|
|
|
- log.Printf("WARN Base.checkMineForce(): при установке времени апгрейда шахты(%v)\n\terr=%v\n", времОжидБесплат, err)
|
|
|
- }
|
|
|
- */
|
|
|
- // sound.MineForce()
|
|
|
- сам.шахта.АренаСостояние().РаботаИмяУст("")
|
|
|
- сам.шахта.АренаСостояние().СостояниеУст(cons.РежимАпгрейд)
|
|
|
- return
|
|
|
- }
|
|
|
- }
|
|
|
- // Все проверки прошли -- это просто работа
|
|
|
- сам.шахта.АренаСостояние().СостояниеУст(cons.РежимРабота)
|
|
|
-}
|
|
|
-
|
|
|
-// Проверяет на ускорение апгрейда полигона
|
|
|
-func (сам *АренаБаза) проверитьПолигонУсиление() {
|
|
|
- var (
|
|
|
- ind int
|
|
|
- strOut = ""
|
|
|
- isOut bool
|
|
|
- lstBase = сам.СписПолучить()
|
|
|
- )
|
|
|
- countTime := сам.полигон.ВремяОстат().ПолучМилСек()
|
|
|
- if countTime > 3_000 {
|
|
|
- return
|
|
|
- }
|
|
|
- { // Проверка на платное ускорение апгрейда
|
|
|
- for ind, strOut = range lstBase {
|
|
|
- if strings.Contains(strOut, `Производит усиление танка<br/>`) {
|
|
|
- // Убедиться что есть строка платного ускорения
|
|
|
- isOut = true
|
|
|
- ind += 29
|
|
|
- strOut = lstBase[ind]
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if isOut && strings.Contains(strOut, `Ускорить за`) {
|
|
|
- // strTime := lstBase[ind-21]
|
|
|
- // lstTime := strings.Split(strTime, `<td><div class="value-block lh1"><span><span>`)
|
|
|
- // strTime = lstTime[1]
|
|
|
- // lstTime = strings.Split(strTime, `</span></span></div></td>`)
|
|
|
- // strTime = lstTime[0]
|
|
|
- // if err := сам.polygon.CountDown().Set(strTime); err != nil {
|
|
|
- // // log._rintf("WARN Base.checkMineForce(): при установке времени апгрейда полигона(%v)\n\terr=%v\n", strTime, err)
|
|
|
- // }
|
|
|
- сам.полигон.АренаСостояние().РаботаИмяУст("")
|
|
|
- сам.полигон.АренаСостояние().СостояниеУст(cons.РежимАпгрейд)
|
|
|
- if err := сам.полигон.ОбратВремяУст(времОжидПлат); err != nil {
|
|
|
- log.Printf("WARN Base.checkPolygonForce(): при установке платного времени апгрейда полигона(%v)\n\terr=%v\n", времОжидПлат, err)
|
|
|
- }
|
|
|
- return
|
|
|
- }
|
|
|
- }
|
|
|
- { // Проверка на бесплатное ускорение апгрейда
|
|
|
- isOut = false
|
|
|
- for ind, strOut = range lstBase {
|
|
|
- if strings.Contains(strOut, `Производит усиление танка<br/>`) {
|
|
|
- // Убедиться что есть строка платного ускорения
|
|
|
- isOut = true
|
|
|
- ind += 26
|
|
|
- strOut = lstBase[ind]
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if isOut && strings.Contains(strOut, `>Ускорение<`) {
|
|
|
- lstLink := strings.Split(strOut, `<td style="width:50%;padding-left:1px;"><a class="simple-but border" href="`)
|
|
|
- strLink := lstLink[1]
|
|
|
- lstLink = strings.Split(strLink, `"><span><span>Ускорение</span></span></a>`)
|
|
|
- strLink = "https://wartank.ru/" + lstLink[0]
|
|
|
- lstBase, err := сам.Сеть().Get(strLink)
|
|
|
- if err != nil {
|
|
|
- // log._rintf("ERRO NetBank.checkPolygonForce(): при GET-запросе на бесплатном ускорении апгрейда полигона, err=\n\t%v\n", err)
|
|
|
- return
|
|
|
- }
|
|
|
- if err := сам.СтрОбновить(lstBase); err != nil {
|
|
|
- // log._rintf("ERRO NetBank.checkPolygonForce(): при обновлении lstBase, err=\n\t%v\n", err)
|
|
|
- return
|
|
|
- }
|
|
|
- // sound.MineForce()
|
|
|
- сам.полигон.АренаСостояние().РаботаИмяУст("")
|
|
|
- сам.полигон.АренаСостояние().СостояниеУст(cons.РежимАпгрейд)
|
|
|
- // Установить время ожидания для обновления
|
|
|
- if err := сам.полигон.ОбратВремяУст(времОжидБесплат); err != nil {
|
|
|
- log.Printf("WARN Base.checkPolygonForce(): при установке времени бесплатного апгрейда полигона(%v)\n\terr=%v\n", времОжидБесплат, err)
|
|
|
- }
|
|
|
- // log._rintf("INFO NetBank.checkPolygonForce(): ускорено строительство полигона\n")
|
|
|
- return
|
|
|
- }
|
|
|
- }
|
|
|
- // Все проверки прошли -- это просто работа
|
|
|
- сам.полигон.АренаСостояние().СостояниеУст(cons.РежимРабота)
|
|
|
-}
|