bf_polygon_activate.go 8.8 KB

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