arena_base.go 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // package arena_base -- база в игре
  2. package arena_base
  3. import (
  4. "time"
  5. . "gitp78su.ipnodns.ru/svi/kern"
  6. . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
  7. "wartank/app/lev0/cons"
  8. . "wartank/app/lev0/types"
  9. "wartank/app/lev2/arena"
  10. )
  11. /*
  12. Объект базы в игре.
  13. */
  14. const (
  15. // времОжидПлат = "01:00" // Время ожидания платного ускорения
  16. // времОжидБесплат = "30:00" // Время ожидания бесплатного ускорения
  17. )
  18. // База -- объект базы
  19. type АренаБаза struct {
  20. ИАрена
  21. конт ILocalCtx
  22. счётОбнов ISafeInt // Счётчик времени до обновления
  23. }
  24. // НовБаза -- возвращает новую базу бота
  25. func НовБаза(конт ILocalCtx) *АренаБаза {
  26. сам := &АренаБаза{
  27. конт: конт,
  28. счётОбнов: NewSafeInt(),
  29. }
  30. аренаКонфиг := arena.АренаКонфиг{
  31. Конт_: конт,
  32. АренаИмя_: "База",
  33. СтрКонтроль_: `<title>База</title>`,
  34. СтрУрл_: "https://wartank.ru/buildings",
  35. ВремОстат_: 1,
  36. }
  37. сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
  38. конт.Set("база", сам, "База бота")
  39. go сам.счётОбновВремя()
  40. _ = ИАренаБаза(сам)
  41. return сам
  42. }
  43. // Обновить -- обновляет базу (с кэшированием результата)
  44. func (сам *АренаБаза) Обновить() {
  45. списСтр := сам.СписПолучить()
  46. if len(списСтр) == 0 {
  47. сам.ИАрена.Обновить()
  48. сам.счётОбнов.Reset()
  49. return
  50. }
  51. if сам.счётОбнов.Get() < 5000 {
  52. return
  53. }
  54. сам.ИАрена.Обновить()
  55. }
  56. // ОбновитьПринуд -- обновляет базу принудительно (без учёта кэша)
  57. func (сам *АренаБаза) ОбновитьПринуд() {
  58. сам.ИАрена.Обновить()
  59. сам.счётОбнов.Reset()
  60. }
  61. // Запускает базу в обработку
  62. func (сам *АренаБаза) Пуск() {
  63. сам.ИАрена.Пуск()
  64. if сам.Состояние().Получ() == cons.РежимНеСуществует {
  65. сам.Состояние().Уст(cons.РежимПостроено)
  66. }
  67. }
  68. // Считает время до устаревания базы
  69. func (сам *АренаБаза) счётОбновВремя() {
  70. for {
  71. time.Sleep(time.Millisecond * 1000)
  72. счёт := сам.счётОбнов.Get()
  73. сам.счётОбнов.Set(счёт + 1000)
  74. }
  75. }