arena_polygon.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package arena_polygon
  2. import (
  3. "strconv"
  4. "strings"
  5. . "gitp78su.ipnodns.ru/svi/kern"
  6. . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
  7. . "wartank/app/lev0/alias"
  8. . "wartank/app/lev0/types"
  9. "wartank/app/lev2/arena"
  10. "wartank/app/lev2/arena/arena_build"
  11. "wartank/app/lev2/arena/arena_polygon/bf_polygon_build"
  12. "wartank/app/lev2/arena/arena_polygon/bf_polygon_level"
  13. "wartank/app/lev2/arena/arena_polygon/bf_polygon_make"
  14. "wartank/app/lev2/arena/arena_polygon/bf_polygon_upgrade"
  15. "wartank/app/lev2/arena/arena_polygon/bf_polygon_upgrade_fast"
  16. )
  17. /*
  18. Объект полигона на базе
  19. */
  20. const (
  21. времОжидПлат = "05:00" // Время ожидания платного ускорения
  22. времОжидБесплат = "30:00" // Время ожидания бесплатного ускорения
  23. стрПрочность = "прочность"
  24. стрТочность = "точность"
  25. стрБроня = "броня"
  26. стрАтака = "атака"
  27. )
  28. // АренаПолигон -- объект полигона на базе
  29. type АренаПолигон struct {
  30. ИАренаСтроение
  31. конт ILocalCtx
  32. танкСтат ИТанкСтат
  33. лог ILogBuf
  34. }
  35. // НовПолигон -- возвращает новый *Polygon
  36. func НовПолигон(конт ILocalCtx) *АренаПолигон {
  37. лог := NewLogBuf()
  38. бот := конт.Get("бот").Val().(ИБот)
  39. лог.Info("НовПолигон(): бот=%s\n", бот.Имя())
  40. сам := &АренаПолигон{
  41. танкСтат: бот.Стата(),
  42. лог: лог,
  43. конт: конт,
  44. }
  45. аренаКонфиг := arena.АренаКонфиг{
  46. Конт_: конт,
  47. АренаИмя_: "Полигон",
  48. СтрКонтроль_: `<title>Полигон</title>`,
  49. СтрУрл_: "https://wartank.ru/polygon",
  50. }
  51. сам.ИАренаСтроение = arena_build.НовАренаСтроение(конт, аренаКонфиг)
  52. конт.Set("полигон", сам, "Полигон бота")
  53. _ = ИАренаПолигон(сам)
  54. return сам
  55. }
  56. func (сам *АренаПолигон) Пуск() {
  57. сам.ИАренаСтроение.Пуск()
  58. bf_polygon_build.ПолигонПостроить(сам.конт)
  59. bf_polygon_upgrade.ПолигонАпгрейд(сам.конт)
  60. bf_polygon_upgrade_fast.ПолигонАпгрейдБесплатно(сам.конт)
  61. bf_polygon_make.ПолигонВключить(сам.конт)
  62. bf_polygon_level.ПолигонУровень(сам.конт)
  63. bf_polygon_upgrade.ПолигонАпгрейд(сам.конт)
  64. сам.времяОбнов()
  65. сам.усилениеПровер()
  66. }
  67. // Обновляет оставшееся время полигона
  68. //
  69. // Этот объект сам описывает своё время
  70. func (сам *АренаПолигон) времяОбнов() {
  71. var (
  72. strLastTime string
  73. еслиНайдено bool
  74. isSet bool
  75. lstPolygon = сам.СписПолучить()
  76. )
  77. defer func() {
  78. if !isSet {
  79. сам.ОбратВремяУст("05")
  80. }
  81. }()
  82. for _, lastTime := range lstPolygon {
  83. if strings.Contains(lastTime, `>Осталось: `) {
  84. strLastTime = lastTime
  85. еслиНайдено = true
  86. break
  87. }
  88. }
  89. if !еслиНайдено { // Время полигона вышло
  90. return
  91. }
  92. lstTime := strings.Split(strLastTime, `>Осталось: `)
  93. strLastTime = lstTime[1]
  94. lstTime = strings.Split(strLastTime, `</span>`)
  95. strLastTime = lstTime[0]
  96. сам.ОбратВремяУст(АВремя(strLastTime))
  97. isSet = true
  98. }
  99. // Проверяет что именно активировано
  100. func (сам *АренаПолигон) усилениеПровер() {
  101. var (
  102. еслиНайдено bool
  103. lstPolygon = сам.СписПолучить()
  104. ind = 0
  105. strOut string
  106. )
  107. for ind, strOut = range lstPolygon {
  108. if strings.Contains(strOut, `<span>Активно</span>`) {
  109. ind -= 9
  110. еслиНайдено = true
  111. break
  112. }
  113. }
  114. if !еслиНайдено {
  115. return
  116. }
  117. strOut = lstPolygon[ind]
  118. форсажИмя := ""
  119. switch { // Вычисляем контрольную строку
  120. case strings.Contains(strOut, `>улучшение точности<`):
  121. форсажИмя = стрТочность
  122. case strings.Contains(strOut, `>увеличение прочности<`):
  123. форсажИмя = стрПрочность
  124. case strings.Contains(strOut, `>усиление брони<`):
  125. форсажИмя = стрБроня
  126. case strings.Contains(strOut, `>усиление атаки<`):
  127. форсажИмя = стрАтака
  128. }
  129. // Вычислим на сколько
  130. strOut = lstPolygon[ind+1]
  131. lstOut := strings.Split(strOut, `<span class="green2">+`)
  132. strOut = lstOut[1]
  133. lstOut = strings.Split(strOut, ` на `)
  134. strOut = lstOut[0]
  135. iForce, err := strconv.Atoi(strOut)
  136. if err != nil {
  137. // log._rintf("NetPolygon.checkTime(): force(%v) not number, err=\n\t%v\n", strOut, err)
  138. return
  139. }
  140. сам.танкСтат.ФорсажОбнов(форсажИмя, iForce)
  141. сам.ПродуктСейчас().ИмяУст("усиление-" + форсажИмя)
  142. сам.ПродуктСейчас().Уст(iForce)
  143. }