arena_bank.go 6.3 KB

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