arena_market.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. // package arena_market -- объект рынка
  2. package arena_market
  3. import (
  4. "log"
  5. "strconv"
  6. "strings"
  7. . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
  8. . "wartank/app/lev0/alias"
  9. . "wartank/app/lev0/types"
  10. "wartank/app/lev2/arena"
  11. "wartank/app/lev2/arena/arena_build"
  12. "wartank/app/lev2/arena/arena_market/bf_gold_by"
  13. "wartank/app/lev2/arena/arena_market/bf_market_build"
  14. "wartank/app/lev2/arena/arena_market/bf_market_upgrade"
  15. )
  16. // АренаРынок -- объект рынка
  17. type АренаРынок struct {
  18. ИАренаСтроение
  19. конт ILocalCtx
  20. }
  21. // НовРынок -- возвращает новый рынок
  22. func НовРынок(конт ILocalCtx) ИАренаРынок {
  23. сам := &АренаРынок{
  24. конт: конт,
  25. }
  26. аренаКонфиг := arena.АренаКонфиг{
  27. Конт_: конт,
  28. АренаИмя_: "Рынок",
  29. СтрКонтроль_: `<title>Рынок</title>`,
  30. СтрУрл_: "https://wartank.ru/market",
  31. }
  32. конт.Set("рынок", сам, "Рынок бота")
  33. сам.ИАренаСтроение = arena_build.НовАренаСтроение(конт, аренаКонфиг)
  34. return сам
  35. }
  36. // Пуск -- запускает всю работу рынка в отдельном потоке
  37. func (сам *АренаРынок) Пуск() {
  38. сам.ИАренаСтроение.Пуск()
  39. bf_market_build.РынокПостроить(сам.конт)
  40. bf_market_upgrade.РынокАпгрейд(сам.конт)
  41. bf_gold_by.ЗолотоКупить(сам.конт)
  42. }
  43. // Проверяет ускорение строительства
  44. func (сам *АренаРынок) ускорениеПровер() {
  45. списСтр := сам.Сеть().ВебВоркер().Получ("http://wartank.ru/buildings")
  46. // <span class="green2">Склад топлива -
  47. var (
  48. еслиНайти = false
  49. стр string
  50. )
  51. for _, стр = range списСтр {
  52. if strings.Contains(стр, `<span class="green2">Склад топлива - `) {
  53. еслиНайти = true
  54. break
  55. }
  56. }
  57. if !еслиНайти {
  58. return
  59. }
  60. }
  61. // Обновляет текущий уровень рынка (может быть не построен)
  62. func (сам *АренаРынок) уровеньОбновить() bool {
  63. списСтр := сам.Сеть().ВебВоркер().Получ("http://wartank.ru/buildings")
  64. // <span class="green2">Рынок -
  65. var (
  66. еслиНайти = false
  67. стр = ""
  68. )
  69. for _, стр = range списСтр {
  70. if strings.Contains(стр, `<span class="green2">Рынок -`) {
  71. еслиНайти = true
  72. break
  73. }
  74. }
  75. if !еслиНайти {
  76. return false
  77. }
  78. // <span class="green2">Рынок - 0</span><br/>
  79. _стр := strings.TrimPrefix(стр, `<span class="green2">Рынок - `)
  80. _стр = strings.TrimSuffix(_стр, `</span><br/>`)
  81. иУровень, ош := strconv.Atoi(_стр)
  82. if ош != nil {
  83. log.Printf("Рынок.уровеньОбновить(): строка уровня сбойная, стр=%q, ош=\n\t%v\n", стр, ош)
  84. return false
  85. }
  86. сам.Уровень().Уст(иУровень)
  87. return true
  88. }
  89. // Проверяет время ожидания рынка
  90. func (сам *АренаРынок) проверОжидание() {
  91. var (
  92. strOut string
  93. еслиНайдено bool
  94. )
  95. // countDown := сам.CountDown().Get()
  96. фнЕслиСеребро := func() bool { // Найти счётчик цены серебра
  97. сам.Обновить()
  98. еслиНайдено := false
  99. lstMarket := сам.СписПолучить()
  100. for _, strOut = range lstMarket {
  101. if strings.Contains(strOut, `alt="Серебро" title="Серебро"> `) {
  102. еслиНайдено = true
  103. break
  104. }
  105. }
  106. if еслиНайдено {
  107. lstSilver := strings.Split(strOut, `<img class="ico vm" src="/images/icons/silver.png?2" alt="Серебро" title="Серебро"> `)
  108. strSilver := lstSilver[1]
  109. switch strSilver {
  110. case "10", "50", "100", "500":
  111. return true
  112. default:
  113. серебро := сам.конт.Get("серебро").Val().(int)
  114. if серебро > 1_000_000 {
  115. return true
  116. }
  117. return false
  118. }
  119. }
  120. return false
  121. }
  122. fnGetCountDown := func() { // Искать счётчик времени
  123. lstMarket := сам.СписПолучить()
  124. // Найти счётчик времени
  125. for _, strOut = range lstMarket {
  126. if strings.Contains(strOut, `Минимальная цена через `) {
  127. еслиНайдено = true
  128. break
  129. }
  130. }
  131. if !еслиНайдено {
  132. return // Минимальная цена
  133. }
  134. lstTime := strings.Split(strOut, `Минимальная цена через `)
  135. strTime := lstTime[1]
  136. сам.ОбратВремяУст(АВремя(strTime))
  137. }
  138. if фнЕслиСеребро() {
  139. return
  140. }
  141. fnGetCountDown()
  142. }