// package base -- база в игре package 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.АренаКонфиг{ Бот_: ангар.Бот(), АренаИмя_: "База", СтрКонтроль_: `База`, ФнПуск_: сам.пуск, СтрУрл_: "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, `Шахта - `) { continue } ind += 11 strOut = lstBase[ind] еслиНайдено = true break } if !еслиНайдено { return } if !strings.Contains(strOut, `
`) { return } /* lstTime := strings.Split(strOut, `
`) strTime := lstTime[1] lstTime = strings.Split(strTime, `
`) 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, `Руда`) { еслиНайдено = true break } } if еслиНайдено && strings.Contains(strOut, `Руда `) { списРуда := strings.Split(strOut, `Руда `) стрРуда := списРуда[1] списРуда = strings.Split(стрРуда, `   `) стрРуда = списРуда[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, `Железо `) { еслиНайдено = true break } } if еслиНайдено && 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 } сам.шахта.Железо().Уст(iFerrum) } } { // Ищем сталь for _, strOut = range lstMine { if strings.Contains(strOut, `Сталь `) { еслиНайдено = true break } } if еслиНайдено && 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 } сам.шахта.Сталь().Уст(iSteel) } } { // Ищем свинец for _, strOut = range lstMine { if strings.Contains(strOut, `Свинец `) { еслиНайдено = true break } } if еслиНайдено && 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 } сам.шахта.Свинец().Уст(iPlumbum) } } { // Ищем время обработки и режим lstBase := сам.СписПолучить() /* for ind, strOut = range lstBase { if strings.Contains(strOut, `Шахта - `) { еслиНайдено = true ind += 11 strOut = lstBase[ind] break } } /* /* if еслиНайдено && strings.Contains(strOut, `
`) { lstTime := strings.Split(strOut, `
`) strTime := lstTime[1] lstTime = strings.Split(strTime, `
`) 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, `
iron `) strNum := lstNum[1] lstNum = strings.Split(strNum, `
`) strNum = lstNum[0] работа := alias.АренаРаботаИмя("Железо-" + strNum) сам.шахта.АренаСостояние().РаботаИмяУст(работа) case strings.Contains(strOut, `/images/icons/ore.png`): // Руда lstNum := strings.Split(strOut, `
ore `) strNum := lstNum[1] lstNum = strings.Split(strNum, `
`) strNum = lstNum[0] работа := alias.АренаРаботаИмя("Руда-" + strNum) сам.шахта.АренаСостояние().РаботаИмяУст(работа) case strings.Contains(strOut, `/images/icons/steel.png`): // Руда lstNum := strings.Split(strOut, `
steel `) strNum := lstNum[1] lstNum = strings.Split(strNum, `
`) 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, `Производит снаряды, ремкомплекты
`) { continue } ind += 10 strOut = lstBase[ind] еслиНайдено = true break } if !еслиНайдено { 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 := сам.арсенал.Уст(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, `Производит снаряды, ремкомплекты
`) { // Убедиться что есть строка платного ускорения еслиНайдено = 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, `Производит снаряды, ремкомплекты
`) { // Убедиться что есть строка платного ускорения еслиНайдено = true ind += 26 strOut = lstBase[ind] break } } if !еслиНайдено { return } if !strings.Contains(strOut, `>Ускорение<`) { return } сам.арсенал.АренаСостояние().СостояниеУст(cons.РежимАпгрейд) lstLink := strings.Split(strOut, `Ускорение`) 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, `
silver `) { еслиНайдено = true break } } if !еслиНайдено { return } lstSilver := strings.Split(strOut, `
silver `) strSilver := lstSilver[1] lstSilver = strings.Split(strSilver, `
`) работа := alias.АренаРаботаИмя("Серебро-" + lstSilver[0]) сам.банк.АренаСостояние().РаботаИмяУст(работа) сам.банк.АренаСостояние().СостояниеУст(cons.РежимРабота) } // Проверяет на время ожидания банка func (сам *База) checkBankTime() { var ( strOut string ind int еслиНайдено bool lstBase = сам.СписПолучить() ) for ind, strOut = range lstBase { if strings.Contains(strOut, `Производит серебро
`) { еслиНайдено = true ind += 10 strOut = lstBase[ind] break } } if !еслиНайдено { return } if !strings.Contains(strOut, `
`) { return } lstTime := strings.Split(strOut, `
`) strTime := lstTime[1] lstTime = strings.Split(strTime, `
`) 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, `Производит серебро
`) { еслиНайдено = true ind += 11 strOut = lstBase[ind] break } } if !еслиНайдено { return } if !strings.Contains(strOut, `>Производство
`) { 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, `Производит серебро
`) { // Убедиться что есть строка платного ускорения 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, `Производит серебро
`) { // Убедиться что есть строка платного ускорения 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 := сам.Сеть().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, `Производит ресурсы
`) { // Убедиться что есть строка платного ускорения 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, `Производит ресурсы
`) { // Убедиться что есть строка платного ускорения 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 := сам.Сеть().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, `Производит усиление танка
`) { // Убедиться что есть строка платного ускорения 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 := сам.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, `Производит усиление танка
`) { // Убедиться что есть строка платного ускорения 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 := сам.Сеть().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.РежимРабота) }