package base import ( "fmt" "log" "strconv" "strings" "sync" "time" "wartank/pkg/components/section" "wartank/pkg/components/sound" "wartank/pkg/types" "wartank/server/serv_bots/warbot/angar/base/arsenal" "wartank/server/serv_bots/warbot/angar/base/bank" "wartank/server/serv_bots/warbot/angar/base/basenet" "wartank/server/serv_bots/warbot/angar/base/market" "wartank/server/serv_bots/warbot/angar/base/mine" "wartank/server/serv_bots/warbot/angar/base/polygon" ) /* Объект базы в игре. */ const ( времОжидПлат = 60 // Время ожидания платного ускорения времОжидБесплат = 1810 // Время ожидания бесплатного ускорения ) // База -- объект базы type База struct { *section.Section сеть *basenet.BaseNet арсенал *arsenal.Арсенал банк *bank.Банк полигон *polygon.Polygon шахта *mine.Шахта ранок *market.Рынок времОстат int // Сколько времени спать до опроса базы блок sync.Mutex } // НовБаза -- возвращает новую базу бота func НовБаза(ангар types.ИАнгар) (*База, error) { section, err := section.NewSection(ангар.Бот(), "База", `База`) if err != nil { return nil, fmt.Errorf("NewBase(): in create ISection, err=\n\t%w", err) } log.Printf("NewBase(): %q\n", section.Бот().Имя()) sf := &База{ Section: section, } { // База в сети sf.сеть, err = basenet.NewBaseNet(sf) if err != nil { return nil, fmt.Errorf("NewBase(): in create NetBase, err=\n\t%w", err) } } { // Arsenal sf.арсенал, err = arsenal.НовАрсенал(sf) if err != nil { return nil, fmt.Errorf("NewBase(): in create IArsenal, err=\n\t%w", err) } } { // Bank sf.банк, err = bank.НовБанк(sf) if err != nil { return nil, fmt.Errorf("NewBase(): in create IBank, err=\n\t%w", err) } } { // Mine sf.шахта, err = mine.НовШахта(sf) if err != nil { return nil, fmt.Errorf("NewBase(): in create IMine, err=\n\t%w", err) } } { // Market sf.ранок, err = market.НовРынок(sf) if err != nil { return nil, fmt.Errorf("NewBase(): при создании IMarket, err=\n\t%w", err) } } { // Polygon sf.полигон, err = polygon.NewPolygon(sf) if err != nil { return nil, fmt.Errorf("NewBase(): in create IPolygon, err=\n\t%w", err) } } return sf, nil } // Запускает базу в обработку func (sf *База) Пуск() error { log.Printf("Base.Run()\n") if err := sf.runComponent(); err != nil { return fmt.Errorf("Base.Run(): run, err=\n\t%w", err) } go sf.пуск() return nil } // Собственная работа func (sf *База) пуск() { фнЦикл := func() { if err := sf.сеть.UpdateLst(); err != nil { // Обновить состояние базы log.Printf("ERRO Base.Run(): при обновлении базы, err=\n\t%v\n", err) } sf.проверитьПолигонУсиление() // Проверить усиление полигона if err := sf.проверитьБанк(); err != nil { // Проверка режимов банка log.Printf("ERRO Base.Run(): при проверке банка, err=\n\t%v\n", err) } sf.проверитьАрсенал() // Проверка арсенала sf.проверитьШахту() // Проверка шахты sf.setCountDown() // Установка счётчика времени time.Sleep(time.Second * time.Duration(sf.времОстат)) } for { select { case <-sf.Кнт().Done(): sf.ВремяОпрос().Стоп() return // case <-sf.ВремяОпрос().КаналСиг(): // фнЦикл() default: фнЦикл() time.Sleep(time.Minute * 1) } } } // Запускает компоненты func (sf *База) runComponent() error { log.Printf("Base.run()\n") sf.блок.Lock() defer sf.блок.Unlock() if err := sf.арсенал.Пуск(); err != nil { return fmt.Errorf("Base.run(): in run IArsenal, err=\n\t%w", err) } if err := sf.банк.Пуск(); err != nil { return fmt.Errorf("Base.run(): in run IBank, err=\n\t%w", err) } if err := sf.шахта.Пуск(); err != nil { return fmt.Errorf("Base.run(): in run IMine, err=\n\t%w", err) } if err := sf.ранок.Пуск(); err != nil { return fmt.Errorf("Base.run(): in run IMarket, err=\n\t%w", err) } if err := sf.полигон.Run(); err != nil { return fmt.Errorf("Base.run(): in run IPolygon, err=\n\t%w", err) } return nil } // Выбирает время обновления базы по компонентам func (sf *База) setCountDown() { timeBase := sf.банк.ВремяОпрос().Получ() timeCount := timeBase timeArsenal := sf.арсенал.ВремяОпрос().Получ() timeMine := sf.шахта.ВремяОпрос().Получ() if timeArsenal < timeCount { timeCount = timeArsenal } if timeMine < timeCount { timeCount = timeMine } if timeCount <= 1 { sf.времОстат = 5 return } if timeCount > (600) { sf.времОстат = 600 } sf.SetCountDown(timeCount) } // Арсенал -- возвращает объект арсенала func (sf *База) Арсенал() types.ИАрсенал { return sf.арсенал } // Банк -- возвращает объект банка func (sf *База) Банк() types.ИБанк { sf.блок.Lock() defer sf.блок.Unlock() return sf.банк } // Полигон -- возвращает объект полигона func (sf *База) Полигон() types.ИПолигон { return sf.полигон } // Шахта -- возвращает объект шахты func (sf *База) Шахта() types.ИШахта { return sf.шахта } // Рынок -- возвращает объект рынка func (sf *База) Рынок() types.ИРынок { return sf.ранок } // Проверяет на забрать шахту func (sf *База) проверитьШахту() { if sf.шахта.Руда().Получ() == 0 { sf.шахтаСтатаОбновить() } sf.шахтаАпгрейдФорсаж() // Нужно ли ускорить апгрейд шахты if sf.шахта.РежимТекущ().Получ() == "upgrade" { return } sf.шахтаСтатаОбновить() sf.шахтаЗабрать() // Нужно ли забрать из шахты sf.шахтаДелать() // Нужно ли производство в шахте sf.checkMineTime() } // Проверяет время ожидания шахты func (sf *База) checkMineTime() { var ( lstBase = sf.СписПолучить() strOut string isFind bool ind int ) for ind, strOut = range lstBase { if !strings.Contains(strOut, `Шахта - `) { continue } ind += 11 strOut = lstBase[ind] isFind = true break } if !isFind { return } if !strings.Contains(strOut, `
`) { return } lstTime := strings.Split(strOut, `
`) strTime := lstTime[1] lstTime = strings.Split(strTime, `
`) strTime = lstTime[0] if err := sf.шахта.ParseCountDown(strTime); err != nil { log.Printf("ERRO Base.checkMineTime(): при установке обратного отсчёта(%v), err=\n\t%v\n", strTime, err) } } // Проверяет на забор из шахты func (sf *База) шахтаЗабрать() { var ( strOut string ind int isFind bool lstBase = sf.СписПолучить() ) for ind, strOut = range lstBase { if strings.Contains(strOut, `Шахта -`) { isFind = true break } } if !isFind { return } ind += 18 strOut = lstBase[ind] if !strings.Contains(strOut, `">Забрать`) { return } lstLink := strings.Split(strOut, `Забрать`) strLink = "https://wartank.ru/" + lstLink[0] lstBase1, err := sf.сеть.Get(strLink) if err != nil { // log._rintf("ERRO Base.checkMineGet(): при выполнении Get-запроса 'забрать', err=\n\t%v\n", err) return } if err = sf.шахта.СтрОбновить(lstBase1); err != nil { // log._rintf("ERRO Base.checkMineGet(): при обновлении lstMine, err=\n\t%v\n", err) return } sf.шахта.Сделать() } // Проверка статистики шахты func (sf *База) шахтаСтатаОбновить() { var ( lstMine = sf.СписПолучить() strOut string isFind bool ind int ) { // Ищем руду for _, strOut = range lstMine { if strings.Contains(strOut, `Руда`) { isFind = true break } } if isFind && strings.Contains(strOut, `Руда `) { lstRuda := strings.Split(strOut, `Руда `) strRuda := lstRuda[1] lstRuda = strings.Split(strRuda, `   `) strRuda = lstRuda[0] iRuda, err := strconv.Atoi(strRuda) if err != nil { log.Printf("ERRO Base.checkMineStat(): руда(%v) не число, err=\n\t%v\n", strRuda, err) return } sf.шахта.Руда().Уст(iRuda) } } { // Ищем железо for _, strOut = range lstMine { if strings.Contains(strOut, `Железо `) { isFind = true break } } if isFind && strings.Contains(strOut, `Железо `) { lstFerrum := strings.Split(strOut, `Железо `) strFerrum := lstFerrum[1] lstFerrum = strings.Split(strFerrum, `   `) 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 } sf.шахта.Железо().Уст(iFerrum) } } { // Ищем сталь for _, strOut = range lstMine { if strings.Contains(strOut, `Сталь `) { isFind = true break } } if isFind && strings.Contains(strOut, `Сталь `) { lstSteel := strings.Split(strOut, `Сталь `) strSteel := lstSteel[1] lstSteel = strings.Split(strSteel, `   `) 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 } sf.шахта.Сталь().Уст(iSteel) } } { // Ищем свинец for _, strOut = range lstMine { if strings.Contains(strOut, `Свинец `) { isFind = true break } } if isFind && strings.Contains(strOut, `Свинец `) { lstPlumbum := strings.Split(strOut, `Свинец `) strPlumbum := lstPlumbum[1] lstPlumbum = strings.Split(strPlumbum, `   `) 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 } sf.шахта.Свинец().Уст(iPlumbum) } } { // Ищем время обработки и режим lstBase := sf.СписПолучить() for ind, strOut = range lstBase { if strings.Contains(strOut, `Шахта - `) { isFind = true ind += 11 strOut = lstBase[ind] break } } if isFind && strings.Contains(strOut, `
`) { lstTime := strings.Split(strOut, `
`) strTime := lstTime[1] lstTime = strings.Split(strTime, `
`) strTime = lstTime[0] if err := sf.шахта.ParseCountDown(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, `
iron `) strNum := lstNum[1] lstNum = strings.Split(strNum, `
`) strNum = lstNum[0] sf.шахта.РежимТекущ().РежимУст("Железо-" + strNum) case strings.Contains(strOut, `/images/icons/ore.png`): // Руда lstNum := strings.Split(strOut, `
ore `) strNum := lstNum[1] lstNum = strings.Split(strNum, `
`) strNum = lstNum[0] sf.шахта.РежимТекущ().РежимУст("Руда-" + strNum) case strings.Contains(strOut, `/images/icons/steel.png`): // Руда lstNum := strings.Split(strOut, `
steel `) strNum := lstNum[1] lstNum = strings.Split(strNum, `
`) strNum = lstNum[0] sf.шахта.РежимТекущ().РежимУст("Сталь-" + strNum) } } } // Проверяет на необходимость производства (* здесь этого быть не должно *) func (sf *База) шахтаДелать() { var ( strOut string ind int isFind bool lstBase = sf.СписПолучить() ) for ind, strOut = range lstBase { if strings.Contains(strOut, `Шахта -`) { isFind = true ind += 12 strOut = lstBase[ind] break } } if !isFind { return } if !strings.Contains(strOut, `">Производство`) { return } sf.шахта.КолвоРаботаСейчас().Уст(0) } // Проверяет режимы арсенала func (sf *База) проверитьАрсенал() { // countTime := sf.арсенал.ВремяОпрос().Получ() // if countTime > 3 { // return // } if err := sf.арсенал.Обновить(); err != nil { // log._rintf("ERRO Base.checkArsenal(): при обновлении арсенала, err=\n\t%v\n", err) return } if mode := sf.арсенал.РежимТекущ().Режим(); mode == "" { sf.проверитьАрсеналРежим() } sf.проверитьАрсеналУскорение() // Нужно ли ускорить апгрейд арсенала if sf.арсенал.РежимТекущ().Получ() == "upgrade" { return } sf.проверитьАрсеналЗабрать() // Нужно ли забрать оружие sf.проверитьАрсеналВремя() sf.проверитьАрсеналРежим() } // Проверяет время готовности арсенала func (sf *База) проверитьАрсеналВремя() { var ( lstBase = sf.СписПолучить() ind int strOut string isFind bool ) for ind, strOut = range lstBase { if !strings.Contains(strOut, `Производит снаряды, ремкомплекты
`) { continue } ind += 10 strOut = lstBase[ind] isFind = true break } if !isFind { return } if !strings.Contains(strOut, ":") { return } lstTime := strings.Split(strOut, `
`) if len(lstTime) != 2 { // Возможно, производство return } strTime := lstTime[1] lstTime = strings.Split(strTime, `
`) strTime = lstTime[0] if err := sf.арсенал.ParseCountDown(strTime); err != nil { log.Printf("ERRO Base.checkArsenalTime(): при установке времени ожидания арсенала(%v)\n\terr=%v\n", strTime, err) } } // Проверяет на забрать оружейную func (sf *База) проверитьАрсеналЗабрать() { var ( strOut string ind int еслиНайдено bool lstBase = sf.СписПолучить() ) for ind, strOut = range lstBase { if strings.Contains(strOut, `Производит снаряды, ремкомплекты
`) { еслиНайдено = true ind += 17 strOut = lstBase[ind] break } } if !еслиНайдено { return } if !strings.Contains(strOut, `">Забрать`) { return } lstLink := strings.Split(strOut, `Забрать`) // https://wartank.ru/buildings?80-1.ILinkListener-buildings-0-building-rootBlock-actionPanel-takeProductionLink strLink = "https://wartank.ru/" + lstLink[0] var ( лстАрсенал []string ош error ) фнЗабрать := func() bool { time.Sleep(time.Millisecond * 100) лстАрсенал, ош = sf.сеть.Get(strLink) if ош != nil { // log._rintf("ERRO Base.checkArsenalGet(): при выполнении Get-запроса 'забрать', err=\n\t%v\n", err) return false } if len(лстАрсенал) == 0 { // log._rintf("ERRO Base.checkArsenalGet(): len lstBase(%v)==0", len(lstBase)) return false } for _, strOut = range лстАрсенал { if strings.Contains(strOut, `Производство`) { return false } } return true } for !фнЗабрать() { } sf.арсенал.SetCountDown(1) if ош = sf.СтрОбновить(лстАрсенал); ош != nil { log.Printf("ERRO Base.checkArsenalGet(): при обновлении lstBase, err=\n\t%v\n", ош) } if ош = sf.арсенал.СтрОбновить(лстАрсенал); ош != nil { log.Printf("ERRO Base.checkArsenalGet(): при обновлении lstArsenal, err=\n\t%v\n", ош) } } // Проверяет режим производства арсенала func (sf *База) проверитьАрсеналРежим() { var ( strOut string lstBase = sf.СписПолучить() ) for _, strOut = range lstBase { if strings.Contains(strOut, `HollowCharge.png`) { sf.арсенал.РежимТекущ().РежимУст("кумулятивы") return } if strings.Contains(strOut, `ArmorPiercing.png`) { sf.арсенал.РежимТекущ().РежимУст("бронебойки") return } if strings.Contains(strOut, `HighExplosive.png`) { sf.арсенал.РежимТекущ().РежимУст("фугасы") return } if strings.Contains(strOut, `repairkit.gif`) { sf.арсенал.РежимТекущ().РежимУст("ремка") return } } } // Проверяет на ускорение апгрейда арсенала func (sf *База) проверитьАрсеналУскорение() { var ( ind int strOut = "" isFind bool lstBase = sf.СписПолучить() ) { // Проверка на платное ускорение апгрейда + время for ind, strOut = range lstBase { if strings.Contains(strOut, `Производит снаряды, ремкомплекты
`) { // Убедиться что есть строка платного ускорения isFind = true ind += 29 strOut = lstBase[ind] break } } if !isFind { return } { // Платное ускорение if strings.Contains(strOut, `Ускорить за`) { if err := sf.арсенал.SetCountDown(времОжидПлат); err != nil { log.Printf("WARN Base.checkArsenalForce(): при установке платного времени ускорения апгрейда арсенала(%v)\n\terr=%v\n", времОжидПлат, err) } sf.арсенал.РежимТекущ().Уст("upgrade") sf.арсенал.РежимТекущ().РежимУст("апгрейд") return } } } { // Проверка на бесплатное ускорение апгрейда isFind = false for ind, strOut = range lstBase { if strings.Contains(strOut, `Производит снаряды, ремкомплекты
`) { // Убедиться что есть строка платного ускорения isFind = true ind += 26 strOut = lstBase[ind] break } } if !isFind { return } if !strings.Contains(strOut, `>Ускорение<`) { return } sf.арсенал.РежимТекущ().Уст("upgrade") lstLink := strings.Split(strOut, `Ускорение`) strLink = "https://wartank.ru/" + lstLink[0] lstBase, err := sf.сеть.Get(strLink) if err != nil { // log._rintf("ERRO NetBank.checkArsenalForce(): при GET-запросе на бесплатном ускорении апгрейда арсенала, err=\n\t%v\n", err) return } // sound.ArsenalForce() if err := sf.СтрОбновить(lstBase); err != nil { // log._rintf("ERRO NetBank.checkArsenalForce(): при обновлении lstBase, err=\n\t%v\n", err) return } sf.арсенал.РежимТекущ().Уст("upgrade") sf.арсенал.РежимТекущ().РежимУст("апгрейд") if err := sf.арсенал.SetCountDown(времОжидБесплат); err != nil { log.Printf("WARN Base.checkArsenalForce(): при установке бесплатного времени ускорения апгрейда арсенала(%v)\n\terr=%v\n", времОжидБесплат, err) } } // Все проверки прошли -- это просто работа sf.арсенал.РежимТекущ().Уст("work") } // Проверяет режим банка func (sf *База) проверитьБанк() error { if sf.банк.РежимТекущ().Режим() == "" { sf.checkBankMode() } sf.checkBankTime() // Проверка времени ожидания countTime := sf.банк.ВремяОпрос().Получ() if countTime > 5 { return nil } sf.checkBankForce() // Нужно ли ускорить апгрейд банка if sf.банк.РежимТекущ().Получ() == "upgrade" { return nil } sf.checkBankTake() // Нужно ли забрать банк sf.checkBankProduct() // Запуск производства в банке return nil } // Проверяет режим работы банка func (sf *База) checkBankMode() { var ( strOut string isFind bool lstBase = sf.СписПолучить() ) for _, strOut = range lstBase { if strings.Contains(strOut, `
silver `) { isFind = true break } } if !isFind { return } lstSilver := strings.Split(strOut, `
silver `) strSilver := lstSilver[1] lstSilver = strings.Split(strSilver, `
`) strSilver = "Серебро-" + lstSilver[0] sf.банк.РежимТекущ().РежимУст(strSilver) } // Проверяет на время ожидания банка func (sf *База) checkBankTime() { var ( strOut string ind int isFind bool lstBase = sf.СписПолучить() ) for ind, strOut = range lstBase { if strings.Contains(strOut, `Производит серебро
`) { isFind = true ind += 10 strOut = lstBase[ind] break } } if !isFind { return } if !strings.Contains(strOut, `
`) { return } lstTime := strings.Split(strOut, `
`) strTime := lstTime[1] lstTime = strings.Split(strTime, `
`) strTime = lstTime[0] if err := sf.банк.ParseCountDown(strTime); err != nil { log.Printf("ERRO Base.checkBankTime(): при установке времени ожидания банка(%v)\n\terr=%v\n", strTime, err) } } // Проверяет на произвести в банке func (sf *База) checkBankProduct() { var ( strOut string ind int isFind bool lstBase = sf.СписПолучить() ) for ind, strOut = range lstBase { if strings.Contains(strOut, `Производит серебро
`) { isFind = true ind += 11 strOut = lstBase[ind] break } } if !isFind { return } if !strings.Contains(strOut, `>Производство
`) { return } sf.банк.UpdateLst() sf.банк.SetCountDown(1) } // Проверка получения серебра из банка func (sf *База) checkBankTake() { var ( ind int strOut string isFind bool lstBank = sf.СписПолучить() strLink string ) for ind, strOut = range lstBank { if strings.Contains(strOut, `Банк - `) { ind += 18 strLink = lstBank[ind] isFind = true break } } if !isFind { return } if !strings.Contains(strLink, `">Забрать`) { return } lstLink := strings.Split(strLink, `Забрать`) strLink = "https://wartank.ru/" + lstLink[0] lstBank, err := sf.сеть.Get(strLink) if err != nil { // log._rintf("ERRO Base.checkBankTake(): при выполнении GET-запроса 'забрать серебро', err=\n\t%v\n", err) return } sound.BankTake() isFind = false for _, strOut = range lstBank { // Проверка на производство в банке if strings.Contains(strOut, `Производство`) { isFind = true break } } if isFind { if err := sf.банк.СтрОбновить(lstBank); err != nil { log.Printf("ERRO Base.checkBankTake(): при установке lstBank, err=\n\t%v'n", err) } sf.банк.SetCountDown(1) return } if err := sf.СтрОбновить(lstBank); err != nil { log.Printf("ERRO Base.checkBankTake(): при установке lstBase, err=\n\t%v'n", err) } sf.банк.SetCountDown(1) } // Проверяет на ускорение апгрейда банка func (sf *База) checkBankForce() { var ( ind int strOut = "" isOut bool lstBase = sf.СписПолучить() ) { // Проверка на платное ускорение апгрейда for ind, strOut = range lstBase { if strings.Contains(strOut, `Производит серебро
`) { // Убедиться что есть строка платного ускорения isOut = true ind += 29 strOut = lstBase[ind] break } } if isOut && strings.Contains(strOut, `Ускорить за`) { if err := sf.банк.SetCountDown(времОжидПлат); err != nil { log.Printf("WARN Base.checkBankForce(): при установке времени ожидания платного ускорения апгрейда банка(%v)\n\terr=%v\n", времОжидПлат, err) } sf.банк.РежимТекущ().Уст("upgrade") sf.банк.РежимТекущ().РежимУст("апгрейд") return } } { // Проверка на бесплатное ускорение апгрейда isOut = false for ind, strOut = range lstBase { if strings.Contains(strOut, `Производит серебро
`) { // Убедиться что есть строка платного ускорения isOut = true ind += 26 strOut = lstBase[ind] break } } if isOut && strings.Contains(strOut, `>Ускорение<`) { lstLink := strings.Split(strOut, `Ускорение`) strLink = "https://wartank.ru/" + lstLink[0] lstBase, err := sf.сеть.Get(strLink) if err != nil { // log._rintf("ERRO NetBank.checkBankForce(): при GET-запросе на бесплатном ускорении апгрейда банка, err=\n\t%v\n", err) return } if err := sf.СтрОбновить(lstBase); err != nil { // log._rintf("ERRO NetBank.checkBankForce(): при обновлении lstBase, err=\n\t%v\n", err) return } sf.банк.РежимТекущ().Уст("upgrade") sf.банк.РежимТекущ().РежимУст("апгрейд") if err := sf.банк.SetCountDown(времОжидБесплат); err != nil { log.Printf("WARN Base.checkBankForce(): при установке времени бесплатного ускорения агрейда банка(%v)\n\terr=%v\n", времОжидБесплат, err) } } } } // Проверяет на ускорение апгрейда шахты func (sf *База) шахтаАпгрейдФорсаж() { var ( ind int strOut = "" isOut bool lstBase = sf.СписПолучить() ) { // Проверка на платное ускорение апгрейда for ind, strOut = range lstBase { if strings.Contains(strOut, `Производит ресурсы
`) { // Убедиться что есть строка платного ускорения isOut = true ind += 29 strOut = lstBase[ind] break } } if isOut && strings.Contains(strOut, `Ускорить за`) { sf.шахта.РежимТекущ().Уст("upgrade") sf.шахта.РежимТекущ().РежимУст("апгрейд") if err := sf.шахта.SetCountDown(времОжидПлат); 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, `Производит ресурсы
`) { // Убедиться что есть строка платного ускорения isOut = true ind += 26 strOut = lstBase[ind] break } } if isOut && strings.Contains(strOut, `>Ускорение<`) { lstLink := strings.Split(strOut, `Ускорение`) strLink = "https://wartank.ru/" + lstLink[0] lstBase, err := sf.сеть.Get(strLink) if err != nil { // log._rintf("ERRO NetBank.checkMineForce(): при GET-запросе на бесплатном ускорении апгрейда шахты, err=\n\t%v\n", err) return } if err := sf.СтрОбновить(lstBase); err != nil { // log._rintf("ERRO NetBank.checkMineForce(): при обновлении lstBase, err=\n\t%v\n", err) return } if err := sf.шахта.SetCountDown(времОжидБесплат); err != nil { log.Printf("WARN Base.checkMineForce(): при установке времени апгрейда шахты(%v)\n\terr=%v\n", времОжидБесплат, err) } // sound.MineForce() sf.шахта.РежимТекущ().Уст("upgrade") sf.шахта.РежимТекущ().РежимУст("апгрейд") return } } // Все проверки прошли -- это просто работа sf.шахта.РежимТекущ().Уст("work") } // Проверяет на ускорение апгрейда полигона func (sf *База) проверитьПолигонУсиление() { var ( ind int strOut = "" isOut bool lstBase = sf.СписПолучить() ) countTime := sf.полигон.ВремяОпрос().Получ() if countTime > 3 { return } { // Проверка на платное ускорение апгрейда for ind, strOut = range lstBase { if strings.Contains(strOut, `Производит усиление танка
`) { // Убедиться что есть строка платного ускорения isOut = true ind += 29 strOut = lstBase[ind] break } } if isOut && strings.Contains(strOut, `Ускорить за`) { // strTime := lstBase[ind-21] // lstTime := strings.Split(strTime, `
`) // strTime = lstTime[1] // lstTime = strings.Split(strTime, `
`) // strTime = lstTime[0] // if err := sf.polygon.CountDown().Set(strTime); err != nil { // // log._rintf("WARN Base.checkMineForce(): при установке времени апгрейда полигона(%v)\n\terr=%v\n", strTime, err) // } sf.полигон.РежимТекущ().Уст("upgrade") sf.полигон.РежимТекущ().РежимУст("апгрейд") if err := sf.полигон.SetCountDown(времОжидПлат); 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, `Производит усиление танка
`) { // Убедиться что есть строка платного ускорения isOut = true ind += 26 strOut = lstBase[ind] break } } if isOut && strings.Contains(strOut, `>Ускорение<`) { lstLink := strings.Split(strOut, `Ускорение`) strLink = "https://wartank.ru/" + lstLink[0] lstBase, err := sf.сеть.Get(strLink) if err != nil { // log._rintf("ERRO NetBank.checkPolygonForce(): при GET-запросе на бесплатном ускорении апгрейда полигона, err=\n\t%v\n", err) return } if err := sf.СтрОбновить(lstBase); err != nil { // log._rintf("ERRO NetBank.checkPolygonForce(): при обновлении lstBase, err=\n\t%v\n", err) return } // sound.MineForce() sf.полигон.РежимТекущ().Уст("upgrade") sf.полигон.РежимТекущ().РежимУст("апгрейд") // Установить время ожидания для обновления if err := sf.полигон.SetCountDown(времОжидБесплат); err != nil { log.Printf("WARN Base.checkPolygonForce(): при установке времени бесплатного апгрейда полигона(%v)\n\terr=%v\n", времОжидБесплат, err) } // log._rintf("INFO NetBank.checkPolygonForce(): ускорено строительство полигона\n") return } } // Все проверки прошли -- это просто работа sf.полигон.РежимТекущ().Уст("work") }