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.Секция
сеть *basenet.BaseNet
арсенал *arsenal.Оружейная
банк *bank.Банк
полигон *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,
}
{ // База в сети
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.НовПолигон(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.Minute * 1)
}
for {
select {
case <-sf.Кнт().Done():
sf.ВремяОпрос().Стоп()
return
// case <-sf.ВремяОпрос().КаналСиг():
// фнЦикл()
default:
фнЦикл()
}
}
}
// Запускает компоненты
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.полигон.Пуск(); 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, `  `)
strNum := lstNum[1]
lstNum = strings.Split(strNum, ` | `)
strNum = lstNum[0]
sf.шахта.РежимТекущ().РежимУст("Железо-" + strNum)
case strings.Contains(strOut, `/images/icons/ore.png`): // Руда
lstNum := strings.Split(strOut, `  `)
strNum := lstNum[1]
lstNum = strings.Split(strNum, ` | `)
strNum = lstNum[0]
sf.шахта.РежимТекущ().РежимУст("Руда-" + strNum)
case strings.Contains(strOut, `/images/icons/steel.png`): // Руда
lstNum := strings.Split(strOut, `  `)
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, ` |  `) {
isFind = true
break
}
}
if !isFind {
return
}
lstSilver := strings.Split(strOut, `  `)
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")
}
| | | | |