arena_bank.go 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. package arena_bank
  2. import (
  3. "log"
  4. "strings"
  5. "time"
  6. . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
  7. . "wartank/app/lev0/types"
  8. "wartank/app/lev1"
  9. "wartank/app/lev2/arena"
  10. "wartank/app/lev2/arena/arena_bank/bank_mode"
  11. )
  12. /*
  13. Предоставляет объект банка на базе
  14. */
  15. // Банк -- объект банка на базе
  16. type АренаБанк struct {
  17. ИАрена
  18. сереброБот ИСтатПарам
  19. режим1 *bank_mode.BankMode // 1 режим работы на выбор
  20. режим2 *bank_mode.BankMode // 2 режим работы на выбор
  21. }
  22. // НовБанк -- возвращает новый арену банка
  23. func НовБанк(конт ILocalCtx) ИАренаБанк {
  24. сам := &АренаБанк{
  25. сереброБот: lev1.НовСтатПарам("серебро бота"),
  26. режим1: bank_mode.NewBankMode(конт),
  27. режим2: bank_mode.NewBankMode(конт),
  28. }
  29. аренаКонфиг := arena.АренаКонфиг{
  30. Бот_: конт.Get("бот").Val().(ИБот),
  31. АренаИмя_: "Банк",
  32. СтрКонтроль_: `<span class="green2">Серебро</span><br/>`,
  33. ФнПуск_: сам.пуск,
  34. СтрУрл_: "https://wartank.ru/production/Bank",
  35. }
  36. сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
  37. конт.Set("арена_банк", сам, "Арена банка бота")
  38. return сам
  39. }
  40. // запускает банк в опрос
  41. func (сам *АренаБанк) пуск() {
  42. log.Printf("Банк.пуск()\n")
  43. fnRun := func() {
  44. defer time.Sleep(time.Minute * 5)
  45. if сам.построитьУлучшить() {
  46. time.Sleep(time.Minute * 25)
  47. return
  48. }
  49. if сам.проверитьУскорить() {
  50. time.Sleep(time.Minute * 25)
  51. return
  52. }
  53. сам.Обновить()
  54. }
  55. for {
  56. // <-сам.ВремяОпрос().КаналСиг()
  57. fnRun()
  58. }
  59. }
  60. // Проверка на ускорение строительства
  61. func (сам *АренаБанк) проверитьУскорить() bool {
  62. var (
  63. стрСсылка = ""
  64. еслиНайдено = false
  65. )
  66. списБанк := сам.Сеть().ВебВоркер().Получ("https://wartank.ru/buildings")
  67. // <td style="width:50%;padding-left:1px;"><a class="simple-but border" href="buildings?1-1.ILinkListener-buildings-1-building-rootBlock-actionPanel-freeBoostLink"><span><span>Ускорение</span></span></a>
  68. for _, стрСсылка = range списБанк {
  69. if strings.Contains(стрСсылка, `.ILinkListener-buildings-1-building-rootBlock-actionPanel-freeBoostLink`) {
  70. еслиНайдено = true
  71. break
  72. }
  73. }
  74. if !еслиНайдено {
  75. return false
  76. }
  77. _ссылка := strings.TrimPrefix(стрСсылка, `<td style="width:50%;padding-left:1px;"><a class="simple-but border" href="`)
  78. _ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Ускорение</span></span></a>`)
  79. ссылка := "https://wartank.ru/" + _ссылка
  80. _ = сам.Сеть().ВебВоркер().Получ(ссылка)
  81. return true
  82. }
  83. // Проверяет необходимость постройки полигона
  84. func (сам *АренаБанк) построитьУлучшить() bool {
  85. var списБанк []string
  86. { // Зайти на страницу постройки
  87. // https://wartank.ru/building-upgrade/Bank
  88. списБанк = сам.Сеть().ВебВоркер().Получ("https://wartank.ru/building-upgrade/Bank")
  89. стрСсылка := ""
  90. еслиНайти := false
  91. // <a class="simple-but border mb5" href="Bank?192-1.ILinkListener-upgradeLink-link">
  92. for _, стрСсылка = range списБанк {
  93. if strings.Contains(стрСсылка, `href="Bank?`) {
  94. еслиНайти = true
  95. break
  96. }
  97. }
  98. if !еслиНайти { // Время полигона вышло
  99. return false
  100. }
  101. _ссылка := strings.TrimPrefix(стрСсылка, `<a class="simple-but border mb5" href="`)
  102. _ссылка = strings.TrimSuffix(_ссылка, `">`)
  103. ссылка := "https://wartank.ru/building-upgrade/" + _ссылка
  104. // https://wartank.ru/building-upgrade/Bank?162-1.ILinkListener-upgradeLink-link
  105. списБанк = сам.Сеть().ВебВоркер().Получ(ссылка)
  106. }
  107. { // Заказать постройку
  108. // https://wartank.ru/building-upgrade/Bank
  109. стрСсылка := ""
  110. еслиНайти := false
  111. // <a class="simple-but border mb5" href="Bank?163-1.ILinkListener-upgradeLink-link">
  112. for _, стрСсылка = range списБанк {
  113. if strings.Contains(стрСсылка, `href="Bank?`) {
  114. еслиНайти = true
  115. break
  116. }
  117. }
  118. if еслиНайти { // Время полигона вышло
  119. _ссылка := strings.TrimPrefix(стрСсылка, `<a class="simple-but border mb5" href="`)
  120. _ссылка = strings.TrimSuffix(_ссылка, `">`)
  121. ссылка := "https://wartank.ru/building-upgrade/" + _ссылка
  122. // https://wartank.ru/building-upgrade/Bank?162-1.ILinkListener-upgradeLink-link
  123. списБанк = сам.Сеть().ВебВоркер().Получ(ссылка)
  124. }
  125. }
  126. { // подтверждение постройки
  127. // <a class="simple-but border w50 mXa mb10" w:id="confirmLink" href="../wicket/page?187-1.ILinkListener-confirmLink"><span><span>да, подтверждаю</span></span></a>
  128. стрСсылка := ""
  129. еслиНайти := false
  130. for _, стрСсылка = range списБанк {
  131. if strings.Contains(стрСсылка, `.ILinkListener-confirmLink`) {
  132. еслиНайти = true
  133. break
  134. }
  135. }
  136. if !еслиНайти { // Время полигона вышло
  137. return false
  138. }
  139. _ссылка := strings.TrimPrefix(стрСсылка, `<a class="simple-but border w50 mXa mb10" w:id="confirmLink" href="../`)
  140. _ссылка = strings.TrimSuffix(_ссылка, "\"><span><span>да, подтверждаю</span></span></a>")
  141. ссылка := "https://wartank.ru/" + _ссылка
  142. // https://wartank.ru/wicket/page?135-1.ILinkListener-confirmLink
  143. _ = сам.Сеть().ВебВоркер().Получ(ссылка)
  144. }
  145. log.Printf("Банк.построитьПровер(): построен успешно\n")
  146. return true
  147. }
  148. // РежимРаботы2 -- возвращает объект режима2
  149. func (сам *АренаБанк) РежимРаботы2() ИБанкРежим {
  150. return сам.режим2
  151. }
  152. // РежимРаботы1 -- возвращает объект режима1
  153. func (сам *АренаБанк) РежимРаботы1() ИБанкРежим {
  154. return сам.режим1
  155. }
  156. // СереброБот -- возвращает серебро от бота
  157. func (сам *АренаБанк) СереброБот() ИСтатПарам {
  158. return сам.сереброБот
  159. }