package arena_polygon import ( "strconv" "strings" . "gitp78su.ipnodns.ru/svi/kern" . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes" . "wartank/app/lev0/alias" . "wartank/app/lev0/types" "wartank/app/lev2/arena" "wartank/app/lev2/arena/arena_build" "wartank/app/lev2/arena/arena_polygon/bf_polygon_build" "wartank/app/lev2/arena/arena_polygon/bf_polygon_level" "wartank/app/lev2/arena/arena_polygon/bf_polygon_make" "wartank/app/lev2/arena/arena_polygon/bf_polygon_upgrade" "wartank/app/lev2/arena/arena_polygon/bf_polygon_upgrade_fast" ) /* Объект полигона на базе */ const ( времОжидПлат = "05:00" // Время ожидания платного ускорения времОжидБесплат = "30:00" // Время ожидания бесплатного ускорения стрПрочность = "прочность" стрТочность = "точность" стрБроня = "броня" стрАтака = "атака" ) // АренаПолигон -- объект полигона на базе type АренаПолигон struct { ИАренаСтроение конт ILocalCtx танкСтат ИТанкСтат лог ILogBuf } // НовПолигон -- возвращает новый *Polygon func НовПолигон(конт ILocalCtx) *АренаПолигон { лог := NewLogBuf() бот := конт.Get("бот").Val().(ИБот) лог.Info("НовПолигон(): бот=%s\n", бот.Имя()) сам := &АренаПолигон{ танкСтат: бот.Стата(), лог: лог, конт: конт, } аренаКонфиг := arena.АренаКонфиг{ Конт_: конт, АренаИмя_: "Полигон", СтрКонтроль_: `Полигон`, СтрУрл_: "https://wartank.ru/polygon", } сам.ИАренаСтроение = arena_build.НовАренаСтроение(конт, аренаКонфиг) конт.Set("полигон", сам, "Полигон бота") _ = ИАренаПолигон(сам) return сам } func (сам *АренаПолигон) Пуск() { сам.ИАренаСтроение.Пуск() bf_polygon_build.ПолигонПостроить(сам.конт) bf_polygon_upgrade.ПолигонАпгрейд(сам.конт) bf_polygon_upgrade_fast.ПолигонАпгрейдБесплатно(сам.конт) bf_polygon_make.ПолигонВключить(сам.конт) bf_polygon_level.ПолигонУровень(сам.конт) bf_polygon_upgrade.ПолигонАпгрейд(сам.конт) сам.времяОбнов() сам.усилениеПровер() } // Обновляет оставшееся время полигона // // Этот объект сам описывает своё время func (сам *АренаПолигон) времяОбнов() { var ( strLastTime string еслиНайдено bool isSet bool lstPolygon = сам.СписПолучить() ) defer func() { if !isSet { сам.ОбратВремяУст("05") } }() for _, lastTime := range lstPolygon { if strings.Contains(lastTime, `>Осталось: `) { strLastTime = lastTime еслиНайдено = true break } } if !еслиНайдено { // Время полигона вышло return } lstTime := strings.Split(strLastTime, `>Осталось: `) strLastTime = lstTime[1] lstTime = strings.Split(strLastTime, ``) strLastTime = lstTime[0] сам.ОбратВремяУст(АВремя(strLastTime)) isSet = true } // Проверяет что именно активировано func (сам *АренаПолигон) усилениеПровер() { var ( еслиНайдено bool lstPolygon = сам.СписПолучить() ind = 0 strOut string ) for ind, strOut = range lstPolygon { if strings.Contains(strOut, `Активно`) { ind -= 9 еслиНайдено = true break } } if !еслиНайдено { return } strOut = lstPolygon[ind] форсажИмя := "" switch { // Вычисляем контрольную строку case strings.Contains(strOut, `>улучшение точности<`): форсажИмя = стрТочность case strings.Contains(strOut, `>увеличение прочности<`): форсажИмя = стрПрочность case strings.Contains(strOut, `>усиление брони<`): форсажИмя = стрБроня case strings.Contains(strOut, `>усиление атаки<`): форсажИмя = стрАтака } // Вычислим на сколько strOut = lstPolygon[ind+1] lstOut := strings.Split(strOut, `+`) strOut = lstOut[1] lstOut = strings.Split(strOut, ` на `) strOut = lstOut[0] iForce, err := strconv.Atoi(strOut) if err != nil { // log._rintf("NetPolygon.checkTime(): force(%v) not number, err=\n\t%v\n", strOut, err) return } сам.танкСтат.ФорсажОбнов(форсажИмя, iForce) сам.ПродуктСейчас().ИмяУст("усиление-" + форсажИмя) сам.ПродуктСейчас().Уст(iForce) }