// package arena_base -- база в игре package arena_base import ( "fmt" "log" "sync" "time" . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes" . "wartank/app/lev0/types" "wartank/app/lev2/arena" ) /* Объект базы в игре. */ const ( // времОжидПлат = "01:00" // Время ожидания платного ускорения // времОжидБесплат = "30:00" // Время ожидания бесплатного ускорения ) // База -- объект базы type АренаБаза struct { ИАрена бот ИБот блок sync.Mutex } // НовБаза -- возвращает новую базу бота func НовБаза(конт ILocalCtx) ИАренаБаза { бот := конт.Get("бот").Val().(ИБот) log.Printf("НовБаза(): %q\n", бот.Имя()) сам := &АренаБаза{ бот: бот, } аренаКонфиг := arena.АренаКонфиг{ Бот_: бот, АренаИмя_: "База", СтрКонтроль_: `База`, ФнПуск_: сам.пуск, СтрУрл_: "https://wartank.ru/buildings", } сам.ИАрена = arena.НовАрена(конт, аренаКонфиг) конт.Set("база", сам, "База бота") return сам } // Запускает базу в обработку func (сам *АренаБаза) Пуск() { log.Printf("Base.Run()\n") if err := сам.runComponent(); err != nil { panic(fmt.Errorf("Base.Run(): run, err=\n\t%w", err)) } go сам.пуск() } // Собственная работа func (сам *АренаБаза) пуск() { фнЦикл := func() { defer time.Sleep(time.Minute * 2) сам.Обновить() } for { select { case <-сам.Контекст().Done(): return // case <-сам.ВремяОпрос().КаналСиг(): // фнЦикл() default: log.Printf("База.пуск()\n") фнЦикл() } } } // Запускает компоненты func (сам *АренаБаза) runComponent() error { log.Printf("Base.runComponent()\n") сам.блок.Lock() defer сам.блок.Unlock() return nil }