// package bf_polygon_activate -- бизнес-процесс активации усиления полигона
package bf_polygon_activate
import (
"strconv"
"strings"
. "gitp78su.ipnodns.ru/svi/kern/kc/helpers"
. "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
. "wartank/app/lev0/types"
)
const (
времОжидПлат = "05:00" // Время ожидания платного ускорения
времОжидБесплат = "30:00" // Время ожидания бесплатного ускорения
стрПрочность = "прочность"
стрТочность = "точность"
стрБроня = "броня"
стрАтака = "атака"
)
// ПолигонАктивировать -- активация усиления полигона
func ПолигонАктивировать(конт ILocalCtx) {
полигон_ := конт.Get("полигон")
if полигон_ == nil { // Может быть ещё не построен
return
}
усилениеДобавить(конт)
}
// Выбирает самый слабый параметр и усиливает его
func усилениеДобавить(конт ILocalCtx) {
полигон := конт.Get("полигон").Val().(ИАренаПолигон)
lstPolygon := полигон.СписПолучить()
if len(lstPolygon) == 0 {
полигон.Обновить()
lstPolygon = полигон.СписПолучить()
}
танкСтат := конт.Get("танкСтат").Val().(ИТанкСтат)
цАтака := танкСтат.Атака().Получ()
цБроня := танкСтат.Броня().Получ()
цТочность := танкСтат.Точность().Получ()
цПрочность := танкСтат.Прочность().Получ()
strParam := стрАтака
iParam := цПрочность
{
/*
Вычислить самый слабый параметр.
Политика вычислений:
1) hard -- прочность, самый низкоприоритетный параметр
2) armor -- броня, чуть лучше power
3) fyne -- точность, чуть лучше armor
4) attack -- атака, самый важный
*/
if цБроня <= iParam {
iParam = цБроня
strParam = стрБроня
}
if цТочность <= iParam {
iParam = цТочность
strParam = стрТочность
}
if цАтака < iParam {
strParam = стрАтака
}
}
// Найти нужную строку активации
var (
ind int
strOut string
еслиНайдено bool
)
switch strParam {
case стрАтака: // Усиливаем атаку
for ind, strOut = range lstPolygon {
if strings.Contains(strOut, `>усиление атаки<`) {
еслиНайдено = true
break
}
}
if !еслиНайдено {
return
}
ind += 8
strOut = lstPolygon[ind]
if strOut == "" {
return
}
lstLink := strings.Split(strOut, `Получить бесплатно`)
strLink := "https://wartank.ru/" + lstLink[0]
_, err := полигон.Сеть().Get(strLink)
Hassert(err == nil, "усилениеДобавить(): при активации атаки полигона, err=\n\t%v", err)
{ // Узнать на сколько форсирована атака
strForce := lstPolygon[ind-7]
lstForce := strings.Split(strForce, `+`)
strForce = lstForce[1]
lstForce = strings.Split(strForce, ` на `)
strForce = lstForce[0]
iForce, err := strconv.Atoi(strForce)
Hassert(err == nil, "усилениеДобавить(): strForceAttack(%v) not int, err=\n\t%v", strForce, err)
танкСтат.ФорсажОбнов("attack", iForce)
полигон.АренаСостояние().РаботаИмяУст(стрАтака)
}
case стрБроня: // Усиливаем броню
еслиНайдено = false
for ind, strOut = range lstPolygon {
if strings.Contains(strOut, `>усиление брони<`) {
еслиНайдено = true
break
}
}
if !еслиНайдено {
return
}
ind += 8
strOut = lstPolygon[ind]
if strOut == "" {
return
}
lstLink := strings.Split(strOut, `Получить бесплатно`)
strLink := "https://wartank.ru/" + lstLink[0]
_, err := полигон.Сеть().Get(strLink)
Hassert(err == nil, "усилениеДобавить(): in make request force броня, err=\n\t%v", err)
{ // Узнать на сколько форсирована броня
strForce := lstPolygon[ind-7]
lstForce := strings.Split(strForce, `+`)
strForce = lstForce[1]
lstForce = strings.Split(strForce, ` на `)
strForce = lstForce[0]
iForce, err := strconv.Atoi(strForce)
Hassert(err == nil, "усилениеДобавить(): стрБроня(%v) not int, err=\n\t%v\n", strForce, err)
танкСтат.ФорсажОбнов(стрБроня, iForce)
полигон.АренаСостояние().РаботаИмяУст(стрБроня)
}
case стрТочность: // Усиливаем точность
еслиНайдено = false
for ind, strOut = range lstPolygon {
if strings.Contains(strOut, `>улучшение точности<`) {
еслиНайдено = true
break
}
}
if !еслиНайдено {
return
}
ind += 8
strOut = lstPolygon[ind]
if strOut == "" {
return
}
lstLink := strings.Split(strOut, `Получить бесплатно`)
strLink := "https://wartank.ru/" + lstLink[0]
_, err := полигон.Сеть().Get(strLink)
Hassert(err == nil, "усилениеДобавить(): in make request force точность, err=\n\t%v", err)
{ // Узнать на сколько форсирована точность
strForce := lstPolygon[ind-7]
lstForce := strings.Split(strForce, `+`)
strForce = lstForce[1]
lstForce = strings.Split(strForce, ` на `)
strForce = lstForce[0]
iForce, err := strconv.Atoi(strForce)
Hassert(err == nil, "усилениеДобавить(): стрТочность(%v) not int, err=\n\t%v", strForce, err)
танкСтат.ФорсажОбнов(стрТочность, iForce)
полигон.АренаСостояние().РаботаИмяУст(стрТочность)
}
case стрПрочность: // Усиливаем мощность
еслиНайдено = false
for ind, strOut = range lstPolygon {
if strings.Contains(strOut, `>увеличение прочности<`) {
еслиНайдено = true
break
}
}
if !еслиНайдено {
return
}
ind += 8
strOut = lstPolygon[ind]
lstLink := strings.Split(strOut, `Получить бесплатно`)
strLink := "https://wartank.ru/" + lstLink[0]
_, err := полигон.Сеть().Get(strLink)
Hassert(err == nil, "усилениеДобавить(): in make request force прочность, err=\n\t%v", err)
{ // Узнать на сколько форсирована прочность
strForce := lstPolygon[ind-7]
lstForce := strings.Split(strForce, `+`)
strForce = lstForce[1]
lstForce = strings.Split(strForce, ` на `)
strForce = lstForce[0]
iForce, err := strconv.Atoi(strForce)
Hassert(err == nil, "усилениеДобавить(): стрПрочность(%v) not int, err=\n\t%v", strForce, err)
танкСтат.ФорсажОбнов(стрПрочность, iForce)
полигон.АренаСостояние().РаботаИмяУст(стрПрочность)
}
default: // Неизвестно что
Hassert(false, "усилениеДобавить(): усиление(%v) неизвестно", strParam)
}
}