bf_polygon_activate.go 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. // package bf_polygon_activate -- бизнес-процесс активации усиления полигона
  2. package bf_polygon_activate
  3. import (
  4. "strconv"
  5. "strings"
  6. . "gitp78su.ipnodns.ru/svi/kern/kc/helpers"
  7. . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
  8. . "wartank/app/lev0/types"
  9. )
  10. const (
  11. времОжидПлат = "05:00" // Время ожидания платного ускорения
  12. времОжидБесплат = "30:00" // Время ожидания бесплатного ускорения
  13. стрПрочность = "прочность"
  14. стрТочность = "точность"
  15. стрБроня = "броня"
  16. стрАтака = "атака"
  17. )
  18. // ПолигонАктивировать -- активация усиления полигона
  19. func ПолигонАктивировать(конт ILocalCtx) {
  20. полигон_ := конт.Get("полигон")
  21. if полигон_ == nil { // Может быть ещё не построен
  22. return
  23. }
  24. усилениеДобавить(конт)
  25. }
  26. // Выбирает самый слабый параметр и усиливает его
  27. func усилениеДобавить(конт ILocalCtx) {
  28. полигон := конт.Get("полигон").Val().(ИАренаПолигон)
  29. lstPolygon := полигон.СписПолучить()
  30. if len(lstPolygon) == 0 {
  31. полигон.Обновить()
  32. lstPolygon = полигон.СписПолучить()
  33. }
  34. танкСтат := конт.Get("танкСтат").Val().(ИТанкСтат)
  35. цАтака := танкСтат.Атака().Получ()
  36. цБроня := танкСтат.Броня().Получ()
  37. цТочность := танкСтат.Точность().Получ()
  38. цПрочность := танкСтат.Прочность().Получ()
  39. strParam := стрАтака
  40. iParam := цПрочность
  41. {
  42. /*
  43. Вычислить самый слабый параметр.
  44. Политика вычислений:
  45. 1) hard -- прочность, самый низкоприоритетный параметр
  46. 2) armor -- броня, чуть лучше power
  47. 3) fyne -- точность, чуть лучше armor
  48. 4) attack -- атака, самый важный
  49. */
  50. if цБроня <= iParam {
  51. iParam = цБроня
  52. strParam = стрБроня
  53. }
  54. if цТочность <= iParam {
  55. iParam = цТочность
  56. strParam = стрТочность
  57. }
  58. if цАтака < iParam {
  59. strParam = стрАтака
  60. }
  61. }
  62. // Найти нужную строку активации
  63. var (
  64. ind int
  65. strOut string
  66. еслиНайдено bool
  67. )
  68. switch strParam {
  69. case стрАтака: // Усиливаем атаку
  70. for ind, strOut = range lstPolygon {
  71. if strings.Contains(strOut, `>усиление атаки<`) {
  72. еслиНайдено = true
  73. break
  74. }
  75. }
  76. if !еслиНайдено {
  77. return
  78. }
  79. ind += 8
  80. strOut = lstPolygon[ind]
  81. if strOut == "" {
  82. return
  83. }
  84. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  85. strOut = lstLink[1]
  86. lstLink = strings.Split(strOut, `"><span><span>Получить бесплатно</span></span></a>`)
  87. strLink := "https://wartank.ru/" + lstLink[0]
  88. _, err := полигон.Сеть().Get(strLink)
  89. Hassert(err == nil, "усилениеДобавить(): при активации атаки полигона, err=\n\t%v", err)
  90. { // Узнать на сколько форсирована атака
  91. strForce := lstPolygon[ind-7]
  92. lstForce := strings.Split(strForce, `<span class="green2">+`)
  93. strForce = lstForce[1]
  94. lstForce = strings.Split(strForce, ` на `)
  95. strForce = lstForce[0]
  96. iForce, err := strconv.Atoi(strForce)
  97. Hassert(err == nil, "усилениеДобавить(): strForceAttack(%v) not int, err=\n\t%v", strForce, err)
  98. танкСтат.ФорсажОбнов("attack", iForce)
  99. полигон.АренаСостояние().РаботаИмяУст(стрАтака)
  100. }
  101. case стрБроня: // Усиливаем броню
  102. еслиНайдено = false
  103. for ind, strOut = range lstPolygon {
  104. if strings.Contains(strOut, `>усиление брони<`) {
  105. еслиНайдено = true
  106. break
  107. }
  108. }
  109. if !еслиНайдено {
  110. return
  111. }
  112. ind += 8
  113. strOut = lstPolygon[ind]
  114. if strOut == "" {
  115. return
  116. }
  117. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  118. strOut = lstLink[1]
  119. lstLink = strings.Split(strOut, `"><span><span>Получить бесплатно</span></span></a>`)
  120. strLink := "https://wartank.ru/" + lstLink[0]
  121. _, err := полигон.Сеть().Get(strLink)
  122. Hassert(err == nil, "усилениеДобавить(): in make request force броня, err=\n\t%v", err)
  123. { // Узнать на сколько форсирована броня
  124. strForce := lstPolygon[ind-7]
  125. lstForce := strings.Split(strForce, `<span class="green2">+`)
  126. strForce = lstForce[1]
  127. lstForce = strings.Split(strForce, ` на `)
  128. strForce = lstForce[0]
  129. iForce, err := strconv.Atoi(strForce)
  130. Hassert(err == nil, "усилениеДобавить(): стрБроня(%v) not int, err=\n\t%v\n", strForce, err)
  131. танкСтат.ФорсажОбнов(стрБроня, iForce)
  132. полигон.АренаСостояние().РаботаИмяУст(стрБроня)
  133. }
  134. case стрТочность: // Усиливаем точность
  135. еслиНайдено = false
  136. for ind, strOut = range lstPolygon {
  137. if strings.Contains(strOut, `>улучшение точности<`) {
  138. еслиНайдено = true
  139. break
  140. }
  141. }
  142. if !еслиНайдено {
  143. return
  144. }
  145. ind += 8
  146. strOut = lstPolygon[ind]
  147. if strOut == "" {
  148. return
  149. }
  150. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  151. strOut = lstLink[1]
  152. lstLink = strings.Split(strOut, `"><span><span>Получить бесплатно</span></span></a>`)
  153. strLink := "https://wartank.ru/" + lstLink[0]
  154. _, err := полигон.Сеть().Get(strLink)
  155. Hassert(err == nil, "усилениеДобавить(): in make request force точность, err=\n\t%v", err)
  156. { // Узнать на сколько форсирована точность
  157. strForce := lstPolygon[ind-7]
  158. lstForce := strings.Split(strForce, `<span class="green2">+`)
  159. strForce = lstForce[1]
  160. lstForce = strings.Split(strForce, ` на `)
  161. strForce = lstForce[0]
  162. iForce, err := strconv.Atoi(strForce)
  163. Hassert(err == nil, "усилениеДобавить(): стрТочность(%v) not int, err=\n\t%v", strForce, err)
  164. танкСтат.ФорсажОбнов(стрТочность, iForce)
  165. полигон.АренаСостояние().РаботаИмяУст(стрТочность)
  166. }
  167. case стрПрочность: // Усиливаем мощность
  168. еслиНайдено = false
  169. for ind, strOut = range lstPolygon {
  170. if strings.Contains(strOut, `>увеличение прочности<`) {
  171. еслиНайдено = true
  172. break
  173. }
  174. }
  175. if !еслиНайдено {
  176. return
  177. }
  178. ind += 8
  179. strOut = lstPolygon[ind]
  180. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  181. strOut = lstLink[1]
  182. lstLink = strings.Split(strOut, `"><span><span>Получить бесплатно</span></span></a>`)
  183. strLink := "https://wartank.ru/" + lstLink[0]
  184. _, err := полигон.Сеть().Get(strLink)
  185. Hassert(err == nil, "усилениеДобавить(): in make request force прочность, err=\n\t%v", err)
  186. { // Узнать на сколько форсирована прочность
  187. strForce := lstPolygon[ind-7]
  188. lstForce := strings.Split(strForce, `<span class="green2">+`)
  189. strForce = lstForce[1]
  190. lstForce = strings.Split(strForce, ` на `)
  191. strForce = lstForce[0]
  192. iForce, err := strconv.Atoi(strForce)
  193. Hassert(err == nil, "усилениеДобавить(): стрПрочность(%v) not int, err=\n\t%v", strForce, err)
  194. танкСтат.ФорсажОбнов(стрПрочность, iForce)
  195. полигон.АренаСостояние().РаботаИмяУст(стрПрочность)
  196. }
  197. default: // Неизвестно что
  198. Hassert(false, "усилениеДобавить(): усиление(%v) неизвестно", strParam)
  199. }
  200. }