arena_base.go 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. }
  36. сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
  37. конт.Set("база", сам, "База бота")
  38. go сам.счётОбновВремя()
  39. _ = ИАренаБаза(сам)
  40. return сам
  41. }
  42. // Обновить -- обновляет базу (с кэшированием результата)
  43. func (сам *АренаБаза) Обновить() {
  44. списСтр := сам.СписПолучить()
  45. if len(списСтр) == 0 {
  46. сам.ИАрена.Обновить()
  47. сам.счётОбнов.Reset()
  48. return
  49. }
  50. if сам.счётОбнов.Get() < 5000 {
  51. return
  52. }
  53. сам.ИАрена.Обновить()
  54. }
  55. // ОбновитьПринуд -- обновляет базу принудительно (без учёта кэша)
  56. func (сам *АренаБаза) ОбновитьПринуд() {
  57. сам.ИАрена.Обновить()
  58. сам.счётОбнов.Reset()
  59. }
  60. // Запускает базу в обработку
  61. func (сам *АренаБаза) Пуск() {
  62. сам.ИАрена.Пуск()
  63. if сам.Состояние().Получ() == cons.РежимНеСуществует {
  64. сам.Состояние().Уст(cons.РежимПостроено)
  65. }
  66. }
  67. // Считает время до устаревания базы
  68. func (сам *АренаБаза) счётОбновВремя() {
  69. for {
  70. time.Sleep(time.Millisecond * 1000)
  71. счёт := сам.счётОбнов.Get()
  72. сам.счётОбнов.Set(счёт + 1000)
  73. }
  74. }