bf_mine_accelerate.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. // package bf_mine_accelerate -- бизнес-функция ускорения строительства или апгрейда
  2. package bf_mine_accelerate
  3. import (
  4. "fmt"
  5. "strings"
  6. . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
  7. "wartank/app/lev0/cons"
  8. . "wartank/app/lev0/types"
  9. )
  10. // ШахтаУскорить -- пробует ускорить строительство шахты или апгрейда
  11. func ШахтаУскорить(конт ILocalCtx) {
  12. шахта := конт.Get("шахта").Val().(ИАренаШахта)
  13. еслиАпгрейд := шахта.АренаСостояние().Получ() == cons.РежимАпгрейд
  14. еслиПлатный := шахта.АренаСостояние().Получ() == cons.РежимАпгрейдПлатный
  15. if !(еслиАпгрейд || еслиПлатный) {
  16. return
  17. }
  18. шахтаАпгрейд(конт)
  19. }
  20. func шахтаАпгрейд(конт ILocalCtx) {
  21. база := конт.Get("база").Val().(ИАренаБаза)
  22. шахта := конт.Get("шахта").Val().(ИАренаШахта)
  23. var (
  24. еслиНайти = false
  25. списСтр []string
  26. стр = ""
  27. )
  28. фнКупитьАпгрейд := func() (bool, error) {
  29. списСтр = база.Сеть().ВебВоркер().Получ("https://wartank.ru/building-upgrade/Mine")
  30. for _, стр = range списСтр {
  31. // <a class="simple-but border mb5" href="Mine?5-1.ILinkListener-upgradeLink-link">
  32. if strings.Contains(стр, `ILinkListener-upgradeLink-link`) {
  33. еслиНайти = true
  34. break
  35. }
  36. }
  37. if !еслиНайти {
  38. return false, nil
  39. }
  40. // Пробуем улучшить шахту
  41. _стр := strings.TrimPrefix(стр, "<a class=\"simple-but border mb5\" href=\"")
  42. _стр = strings.TrimSuffix(_стр, "\">")
  43. // https://wartank.ru/building-upgrade/Mine?4-1.ILinkListener-upgradeLink-link
  44. // <a class="simple-but border mb5" href="FuelStorage?50-1.ILinkListener-upgradeLink-link">
  45. ссылка := "https://wartank.ru/building-upgrade/" + _стр
  46. списСтр = база.Сеть().ВебВоркер().Получ(ссылка)
  47. // Проверить, что постройка состоялась
  48. for _, стр := range списСтр {
  49. if strings.Contains(стр, "ILinkListener-upgradeLink-link") {
  50. return false, fmt.Errorf("покупка шахты не прошла") // Покупка не оплачена
  51. }
  52. }
  53. return true, nil
  54. }
  55. фнПодтверждение := func() bool {
  56. for _, стр = range списСтр {
  57. // <a class="simple-but border w50 mXa mb10" w:id="confirmLink" href="../wicket/page?7-1.ILinkListener-confirmLink"><span><span>да, подтверждаю</span></span></a>
  58. if strings.Contains(стр, `ILinkListener-confirmLink`) {
  59. еслиНайти = true
  60. break
  61. }
  62. }
  63. if !еслиНайти {
  64. return true
  65. }
  66. // Пробуем построить шахту
  67. _стр := strings.TrimPrefix(стр, `<a class="simple-but border w50 mXa mb10" w:id="confirmLink" href="..`)
  68. _стр = strings.TrimSuffix(_стр, `"><span><span>да, подтверждаю</span></span></a>`)
  69. // https://wartank.ru/wicket/page?6-1.ILinkListener-confirmLink
  70. ссылка := "https://wartank.ru" + _стр
  71. списСтр = база.Сеть().ВебВоркер().Получ(ссылка)
  72. // Проверить, что постройка состоялась
  73. for _, стр := range списСтр {
  74. if strings.Contains(стр, "<title>Вы сделали слишком большую паузу</title>") {
  75. return false // Покупка не оплачена
  76. }
  77. }
  78. return true
  79. }
  80. фнКомплекс := func() {
  81. еслиОк, ош := фнКупитьАпгрейд()
  82. switch {
  83. case ош == nil && еслиОк: // покупка апгрейда шахты прошла
  84. if фнПодтверждение() {
  85. шахта.АренаСостояние().Уст(cons.РежимАпгрейдПлатный)
  86. return
  87. }
  88. case ош == nil && !еслиОк: // покупка шахты не нужна
  89. шахта.АренаСостояние().Уст(cons.РежимОжидание)
  90. return
  91. case ош != nil: // ошибка при работе с сетью
  92. шахта.АренаСостояние().Уст(cons.РежимАпгрейд)
  93. return
  94. }
  95. }
  96. фнКомплекс()
  97. }