arena_upgrade.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. // package arena_upgrade -- арена улучшения параметров
  2. package arena_upgrade
  3. import (
  4. "fmt"
  5. "log"
  6. "strconv"
  7. "strings"
  8. "time"
  9. . "wartank/app/lev0/types"
  10. "wartank/kernel"
  11. . "wartank/kernel/kernel_types"
  12. )
  13. // ТанкПараметры -- параметры танка повышение
  14. type АренаАпгрейд struct {
  15. конт ИБотКонтекст
  16. прилож ИПриложение
  17. номер string // Номер танка в игре
  18. лог ИЯдроЛог
  19. }
  20. // НовТанкПараметры -- возвращает новые параметры танка
  21. func НовТанкПараметры(конт ИБотКонтекст) *АренаАпгрейд {
  22. лог := kernel.НовЛог("ТанкПараметры")
  23. лог.Инфо("НовТанкПараметры()\n")
  24. сам := &АренаАпгрейд{
  25. конт: конт,
  26. прилож: конт.Получ("прилож").(ИПриложение),
  27. лог: лог,
  28. }
  29. return сам
  30. }
  31. // Пуск -- запуск в работу
  32. func (сам *АренаАпгрейд) Пуск() {
  33. go сам.пуск()
  34. }
  35. // Запускает в работу в отдельном потоке
  36. func (сам *АренаАпгрейд) пуск() {
  37. time.Sleep(time.Second * 4)
  38. ош := сам.номерПолуч()
  39. if ош != nil {
  40. log.Printf("ТанкПараметры.пуск(): при получении параметров танка, ош=\n\t%v\n", ош)
  41. сам.прилож.Отменить()
  42. return
  43. }
  44. for {
  45. select {
  46. case <-сам.прилож.Конт().Done():
  47. return
  48. default:
  49. сам.работать()
  50. }
  51. }
  52. }
  53. // Основной метод работы
  54. func (сам *АренаАпгрейд) работать() {
  55. defer time.Sleep(time.Second * 300)
  56. сам.улучшить()
  57. }
  58. // Улучшает параметры танка
  59. func (сам *АренаАпгрейд) улучшить() {
  60. // https://wartank.ru/pimp/34479487
  61. клиент := сам.конт.Получ("хттпВоркер").(ИХттпВоркер)
  62. фнУлучшить := func() bool {
  63. лстСтр := клиент.Получ("https://wartank.ru/pimp/" + сам.номер)
  64. var (
  65. стрВых string
  66. еслиНашли bool
  67. )
  68. // <a class="simple-but border mb5" href="34479487?22-1.ILinkListener-modules-slots-0-slot-root-pimpLink-link">
  69. for _, стрВых = range лстСтр {
  70. if strings.Contains(стрВых, `<a class="simple-but border mb5" href="`+сам.номер) {
  71. еслиНашли = true
  72. break
  73. }
  74. }
  75. сам.лог.Паника(!еслиНашли, "ТанкПараметры.улучшить(): не нашёл кнопку улучшения")
  76. стрВых = strings.TrimPrefix(стрВых, `<a class="simple-but border mb5" href="`)
  77. стрВых = strings.TrimSuffix(стрВых, `">`)
  78. // https://wartank.ru/pimp/34479487?21-1.ILinkListener-modules-slots-0-slot-root-pimpLink-link
  79. стрСсылка := "https://wartank.ru/pimp/" + стрВых
  80. _ = клиент.Получ(стрСсылка)
  81. return true
  82. }
  83. счётОш := 5
  84. for счётОш > 0 {
  85. if фнУлучшить() {
  86. break
  87. }
  88. счётОш--
  89. time.Sleep(time.Millisecond * 350)
  90. }
  91. }
  92. // Получает собственный номер танка с сервера
  93. func (сам *АренаАпгрейд) номерПолуч() error {
  94. клиент := сам.конт.Получ("хттпВоркер").(ИХттпВоркер)
  95. лстСтр := клиент.Получ("https://wartank.ru/angar")
  96. var (
  97. стрНомер string
  98. еслиНашёл bool
  99. )
  100. // https://wartank.ru/power/34479487
  101. for _, стрНомер = range лстСтр {
  102. if strings.Contains(стрНомер, `href="power/`) {
  103. еслиНашёл = true
  104. break
  105. }
  106. }
  107. if !еслиНашёл {
  108. return fmt.Errorf("ТанкПараметры.номерПолуч(): не нашёл собственный номер на сервере")
  109. }
  110. стрВыход := strings.TrimPrefix(стрНомер, `<a class="simple-but border" href="power/`)
  111. стрВыход = strings.TrimSuffix(стрВыход, `"><span><span>Повысить параметры</span></span></a>`)
  112. _, ош := strconv.Atoi(стрВыход)
  113. if ош != nil {
  114. return fmt.Errorf("ТанкПараметры.номерПолуч(): ошибка преобразования собственного номера(%s), ош=\n\t%w", стрВыход, ош)
  115. }
  116. сам.номер = стрВыход
  117. return nil
  118. }