| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- // 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
- стрРез 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
- }
- // <a class="simple-but border" href="polygon?2-1.ILinkListener-buffs-0-buff-buyLink"><span><span>Активировать за
- lstLink := strings.Split(стрРез, `<a class="simple-but border" href="`)
- стрРез = lstLink[1]
- lstLink = strings.Split(стрРез, `"><span><span>Получить бесплатно</span></span></a>`)
- 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, `<span class="green2">+`)
- 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(стрРез, `<a class="simple-but border" href="`)
- стрРез = lstLink[1]
- lstLink = strings.Split(стрРез, `"><span><span>Получить бесплатно</span></span></a>`)
- 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, `<span class="green2">+`)
- 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(стрРез, `<a class="simple-but border" href="`)
- стрРез = lstLink[1]
- lstLink = strings.Split(стрРез, `"><span><span>Получить бесплатно</span></span></a>`)
- 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, `<span class="green2">+`)
- 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(стрРез, `<a class="simple-but border" href="`)
- стрРез = lstLink[1]
- lstLink = strings.Split(стрРез, `"><span><span>Получить бесплатно</span></span></a>`)
- 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, `<span class="green2">+`)
- 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)
- }
- }
|