bf_polygon_activate.go 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  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. стрРез string
  66. еслиНайдено bool
  67. )
  68. switch strParam {
  69. case стрАтака: // Усиливаем атаку
  70. for ind, стрРез = range lstPolygon {
  71. if strings.Contains(стрРез, `>усиление атаки<`) {
  72. еслиНайдено = true
  73. break
  74. }
  75. }
  76. if !еслиНайдено {
  77. return
  78. }
  79. ind += 8
  80. стрРез = lstPolygon[ind]
  81. if стрРез == "" {
  82. return
  83. }
  84. if strings.Contains(стрРез, "Активировать за") {
  85. return
  86. }
  87. // <a class="simple-but border" href="polygon?2-1.ILinkListener-buffs-0-buff-buyLink"><span><span>Активировать за
  88. lstLink := strings.Split(стрРез, `<a class="simple-but border" href="`)
  89. стрРез = lstLink[1]
  90. lstLink = strings.Split(стрРез, `"><span><span>Получить бесплатно</span></span></a>`)
  91. strLink := "https://wartank.ru/" + lstLink[0]
  92. _, err := полигон.Сеть().Get(strLink)
  93. Hassert(err == nil, "усилениеДобавить(): при активации атаки полигона, err=\n\t%v", err)
  94. { // Узнать на сколько форсирована атака
  95. strForce := lstPolygon[ind-7]
  96. lstForce := strings.Split(strForce, `<span class="green2">+`)
  97. strForce = lstForce[1]
  98. lstForce = strings.Split(strForce, ` на `)
  99. strForce = lstForce[0]
  100. iForce, err := strconv.Atoi(strForce)
  101. Hassert(err == nil, "усилениеДобавить(): strForceAttack(%v) not int, err=\n\t%v", strForce, err)
  102. танкСтат.ФорсажОбнов("attack", iForce)
  103. полигон.АренаСостояние().РаботаИмяУст(стрАтака)
  104. }
  105. case стрБроня: // Усиливаем броню
  106. еслиНайдено = false
  107. for ind, стрРез = range lstPolygon {
  108. if strings.Contains(стрРез, `>усиление брони<`) {
  109. еслиНайдено = true
  110. break
  111. }
  112. }
  113. if !еслиНайдено {
  114. return
  115. }
  116. ind += 8
  117. стрРез = lstPolygon[ind]
  118. if стрРез == "" {
  119. return
  120. }
  121. lstLink := strings.Split(стрРез, `<a class="simple-but border" href="`)
  122. стрРез = lstLink[1]
  123. lstLink = strings.Split(стрРез, `"><span><span>Получить бесплатно</span></span></a>`)
  124. strLink := "https://wartank.ru/" + lstLink[0]
  125. _, err := полигон.Сеть().Get(strLink)
  126. Hassert(err == nil, "усилениеДобавить(): in make request force броня, err=\n\t%v", err)
  127. { // Узнать на сколько форсирована броня
  128. strForce := lstPolygon[ind-7]
  129. lstForce := strings.Split(strForce, `<span class="green2">+`)
  130. strForce = lstForce[1]
  131. lstForce = strings.Split(strForce, ` на `)
  132. strForce = lstForce[0]
  133. iForce, err := strconv.Atoi(strForce)
  134. Hassert(err == nil, "усилениеДобавить(): стрБроня(%v) not int, err=\n\t%v\n", strForce, err)
  135. танкСтат.ФорсажОбнов(стрБроня, iForce)
  136. полигон.АренаСостояние().РаботаИмяУст(стрБроня)
  137. }
  138. case стрТочность: // Усиливаем точность
  139. еслиНайдено = false
  140. for ind, стрРез = range lstPolygon {
  141. if strings.Contains(стрРез, `>улучшение точности<`) {
  142. еслиНайдено = true
  143. break
  144. }
  145. }
  146. if !еслиНайдено {
  147. return
  148. }
  149. ind += 8
  150. стрРез = lstPolygon[ind]
  151. if стрРез == "" {
  152. return
  153. }
  154. lstLink := strings.Split(стрРез, `<a class="simple-but border" href="`)
  155. стрРез = lstLink[1]
  156. lstLink = strings.Split(стрРез, `"><span><span>Получить бесплатно</span></span></a>`)
  157. strLink := "https://wartank.ru/" + lstLink[0]
  158. _, err := полигон.Сеть().Get(strLink)
  159. Hassert(err == nil, "усилениеДобавить(): in make request force точность, err=\n\t%v", err)
  160. { // Узнать на сколько форсирована точность
  161. strForce := lstPolygon[ind-7]
  162. lstForce := strings.Split(strForce, `<span class="green2">+`)
  163. strForce = lstForce[1]
  164. lstForce = strings.Split(strForce, ` на `)
  165. strForce = lstForce[0]
  166. iForce, err := strconv.Atoi(strForce)
  167. Hassert(err == nil, "усилениеДобавить(): стрТочность(%v) not int, err=\n\t%v", strForce, err)
  168. танкСтат.ФорсажОбнов(стрТочность, iForce)
  169. полигон.АренаСостояние().РаботаИмяУст(стрТочность)
  170. }
  171. case стрПрочность: // Усиливаем мощность
  172. еслиНайдено = false
  173. for ind, стрРез = range lstPolygon {
  174. if strings.Contains(стрРез, `>увеличение прочности<`) {
  175. еслиНайдено = true
  176. break
  177. }
  178. }
  179. if !еслиНайдено {
  180. return
  181. }
  182. ind += 8
  183. стрРез = lstPolygon[ind]
  184. lstLink := strings.Split(стрРез, `<a class="simple-but border" href="`)
  185. стрРез = lstLink[1]
  186. lstLink = strings.Split(стрРез, `"><span><span>Получить бесплатно</span></span></a>`)
  187. strLink := "https://wartank.ru/" + lstLink[0]
  188. _, err := полигон.Сеть().Get(strLink)
  189. Hassert(err == nil, "усилениеДобавить(): in make request force прочность, err=\n\t%v", err)
  190. { // Узнать на сколько форсирована прочность
  191. strForce := lstPolygon[ind-7]
  192. lstForce := strings.Split(strForce, `<span class="green2">+`)
  193. strForce = lstForce[1]
  194. lstForce = strings.Split(strForce, ` на `)
  195. strForce = lstForce[0]
  196. iForce, err := strconv.Atoi(strForce)
  197. Hassert(err == nil, "усилениеДобавить(): стрПрочность(%v) not int, err=\n\t%v", strForce, err)
  198. танкСтат.ФорсажОбнов(стрПрочность, iForce)
  199. полигон.АренаСостояние().РаботаИмяУст(стрПрочность)
  200. }
  201. default: // Неизвестно что
  202. Hassert(false, "усилениеДобавить(): усиление(%v) неизвестно", strParam)
  203. }
  204. }