arena_polygon.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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. ВремОстат_: 1,
  51. }
  52. сам.ИАренаСтроение = arena_build.НовАренаСтроение(конт, аренаКонфиг)
  53. конт.Set("полигон", сам, "Полигон бота")
  54. _ = ИАренаПолигон(сам)
  55. return сам
  56. }
  57. func (сам *АренаПолигон) Пуск() {
  58. сам.ИАренаСтроение.Пуск()
  59. bf_polygon_build.ПолигонПостроить(сам.конт)
  60. bf_polygon_upgrade.ПолигонАпгрейд(сам.конт)
  61. bf_polygon_upgrade_fast.ПолигонАпгрейдБесплатно(сам.конт)
  62. bf_polygon_make.ПолигонВключить(сам.конт)
  63. bf_polygon_level.ПолигонУровень(сам.конт)
  64. bf_polygon_upgrade.ПолигонАпгрейд(сам.конт)
  65. сам.времяОбнов()
  66. сам.усилениеПровер()
  67. }
  68. // Обновляет оставшееся время полигона
  69. //
  70. // Этот объект сам описывает своё время
  71. func (сам *АренаПолигон) времяОбнов() {
  72. var (
  73. strLastTime string
  74. еслиНайдено bool
  75. isSet bool
  76. lstPolygon = сам.СписПолучить()
  77. )
  78. defer func() {
  79. if !isSet {
  80. сам.ОбратВремяУст("05")
  81. }
  82. }()
  83. for _, lastTime := range lstPolygon {
  84. if strings.Contains(lastTime, `>Осталось: `) {
  85. strLastTime = lastTime
  86. еслиНайдено = true
  87. break
  88. }
  89. }
  90. if !еслиНайдено { // Время полигона вышло
  91. return
  92. }
  93. lstTime := strings.Split(strLastTime, `>Осталось: `)
  94. strLastTime = lstTime[1]
  95. lstTime = strings.Split(strLastTime, `</span>`)
  96. strLastTime = lstTime[0]
  97. сам.ОбратВремяУст(АВремя(strLastTime))
  98. isSet = true
  99. }
  100. // Проверяет что именно активировано
  101. func (сам *АренаПолигон) усилениеПровер() {
  102. var (
  103. еслиНайдено bool
  104. lstPolygon = сам.СписПолучить()
  105. ind = 0
  106. strOut string
  107. )
  108. for ind, strOut = range lstPolygon {
  109. if strings.Contains(strOut, `<span>Активно</span>`) {
  110. ind -= 9
  111. еслиНайдено = true
  112. break
  113. }
  114. }
  115. if !еслиНайдено {
  116. return
  117. }
  118. strOut = lstPolygon[ind]
  119. форсажИмя := ""
  120. switch { // Вычисляем контрольную строку
  121. case strings.Contains(strOut, `>улучшение точности<`):
  122. форсажИмя = стрТочность
  123. case strings.Contains(strOut, `>увеличение прочности<`):
  124. форсажИмя = стрПрочность
  125. case strings.Contains(strOut, `>усиление брони<`):
  126. форсажИмя = стрБроня
  127. case strings.Contains(strOut, `>усиление атаки<`):
  128. форсажИмя = стрАтака
  129. }
  130. // Вычислим на сколько
  131. strOut = lstPolygon[ind+1]
  132. lstOut := strings.Split(strOut, `<span class="green2">+`)
  133. strOut = lstOut[1]
  134. lstOut = strings.Split(strOut, ` на `)
  135. strOut = lstOut[0]
  136. iForce, err := strconv.Atoi(strOut)
  137. if err != nil {
  138. // log._rintf("NetPolygon.checkTime(): force(%v) not number, err=\n\t%v\n", strOut, err)
  139. return
  140. }
  141. сам.танкСтат.ФорсажОбнов(форсажИмя, iForce)
  142. сам.ПродуктСейчас().ИмяУст("усиление-" + форсажИмя)
  143. сам.ПродуктСейчас().Уст(iForce)
  144. }