arena_upgrade.go 4.4 KB

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