arena_market.go 4.8 KB

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