// 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/cons" . "wartank/app/lev0/types" ) const ( времОжидПлат = "05:00" // Время ожидания платного ускорения времОжидБесплат = "30:00" // Время ожидания бесплатного ускорения стрПрочность = "прочность" стрТочность = "точность" стрБроня = "броня" стрАтака = "атака" ) // ПолигонАктивировать -- активация усиления полигона func ПолигонАктивировать(конт ILocalCtx) { полигон_ := конт.Get("полигон") if полигон_ == nil { // Может быть ещё не построен return } полигон := полигон_.Val().(ИАренаПолигон) еслиОжидание := полигон.АренаСостояние().Получ() == cons.РежимОжидание if !еслиОжидание { 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 стрРез string еслиНайдено bool ) switch strParam { case стрАтака: // Усиливаем атаку for ind, стрРез = range lstPolygon { if strings.Contains(стрРез, `>усиление атаки<`) { еслиНайдено = true break } } if !еслиНайдено { return } ind += 8 стрРез = lstPolygon[ind] if стрРез == "" { return } if strings.Contains(стрРез, "Активировать за") { return } // Активировать за lstLink := strings.Split(стрРез, `Получить бесплатно`) 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, стрРез = range lstPolygon { if strings.Contains(стрРез, `>усиление брони<`) { еслиНайдено = true break } } if !еслиНайдено { return } ind += 8 стрРез = lstPolygon[ind] if стрРез == "" { return } lstLink := strings.Split(стрРез, `Получить бесплатно`) 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, стрРез = range lstPolygon { if strings.Contains(стрРез, `>улучшение точности<`) { еслиНайдено = true break } } if !еслиНайдено { return } ind += 8 стрРез = lstPolygon[ind] if стрРез == "" { return } lstLink := strings.Split(стрРез, `Получить бесплатно`) 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, стрРез = range lstPolygon { if strings.Contains(стрРез, `>увеличение прочности<`) { еслиНайдено = true break } } if !еслиНайдено { return } ind += 8 стрРез = lstPolygon[ind] lstLink := strings.Split(стрРез, `Получить бесплатно`) 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) } }