| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- // 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.АренаКонфиг{
- Конт_: конт,
- АренаИмя_: "База",
- СтрКонтроль_: `<title>База</title>`,
- СтрУрл_: "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)
- }
- }
|