// package arena_base -- база в игре package arena_base import ( "time" . "gitp78su.ipnodns.ru/svi/kern" . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes" "wartank/app/lev0/cons" . "wartank/app/lev0/types" "wartank/app/lev2/arena" ) /* Объект базы в игре. */ const ( // времОжидПлат = "01:00" // Время ожидания платного ускорения // времОжидБесплат = "30:00" // Время ожидания бесплатного ускорения ) // База -- объект базы type АренаБаза struct { ИАрена конт ILocalCtx счётОбнов ISafeInt // Счётчик времени до обновления } // НовБаза -- возвращает новую базу бота func НовБаза(конт ILocalCtx) *АренаБаза { сам := &АренаБаза{ конт: конт, счётОбнов: NewSafeInt(), } аренаКонфиг := arena.АренаКонфиг{ Конт_: конт, АренаИмя_: "База", СтрКонтроль_: `База`, СтрУрл_: "https://wartank.ru/buildings", } сам.ИАрена = arena.НовАрена(конт, аренаКонфиг) конт.Set("база", сам, "База бота") go сам.счётОбновВремя() _ = ИАренаБаза(сам) return сам } // Обновить -- обновляет базу (с кэшированием результата) func (сам *АренаБаза) Обновить() { списСтр := сам.СписПолучить() if len(списСтр) == 0 { сам.ИАрена.Обновить() сам.счётОбнов.Reset() return } if сам.счётОбнов.Get() < 5000 { return } сам.ИАрена.Обновить() } // ОбновитьПринуд -- обновляет базу принудительно (без учёта кэша) func (сам *АренаБаза) ОбновитьПринуд() { сам.ИАрена.Обновить() сам.счётОбнов.Reset() } // Запускает базу в обработку func (сам *АренаБаза) Пуск() { сам.ИАрена.Пуск() if сам.Состояние().Получ() == cons.РежимНеСуществует { сам.Состояние().Уст(cons.РежимПостроено) } } // Считает время до устаревания базы func (сам *АренаБаза) счётОбновВремя() { for { time.Sleep(time.Millisecond * 1000) счёт := сам.счётОбнов.Get() сам.счётОбнов.Set(счёт + 1000) } }