wrag.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package wrag
  2. import (
  3. "strconv"
  4. "strings"
  5. "wartank/pkg/components/kernel/logger"
  6. "wartank/pkg/types"
  7. )
  8. /*
  9. Танк враг на битве, сражении, дуэли, войне
  10. */
  11. // Враг -- объект врага
  12. type Враг struct {
  13. сервер types.ИСервер
  14. лог types.ИЛоггер
  15. health int // здоровье вражины
  16. }
  17. // НовВраг -- возвращает новый объект врага
  18. func НовВраг(app types.ИСервер, lstBattle []string) *Враг {
  19. лог := logger.НовЛоггер("Враг")
  20. лог.Отладка("НовВраг()\n")
  21. сам := &Враг{
  22. сервер: app,
  23. лог: лог,
  24. }
  25. сам.update(lstBattle)
  26. return сам
  27. }
  28. // Обновляет вражину
  29. func (сам *Враг) update(lstBattleOn []string) {
  30. // <img class="tank-img" src="/tankimg?c=2&amp;k=1&amp;m=0-2,1-2,2-0,3-2,5-2,6-0&amp;t=png" alt="Тень Брата">
  31. var (
  32. ind int
  33. strOut string
  34. еслиНайдено bool
  35. )
  36. for ind, strOut = range lstBattleOn {
  37. if strings.Contains(strOut, `<img class="tank-img" src="/`) {
  38. // Убедиться, что это не свой танк
  39. if strings.Contains(strOut, "prospero tank") {
  40. continue
  41. }
  42. еслиНайдено = true
  43. break
  44. }
  45. }
  46. if !еслиНайдено { // Не нашёл метку врага
  47. сам.лог.Ошибка("update(): не нашёл метку врага\n")
  48. сам.health = 800
  49. return
  50. }
  51. // Вражина найдена, ищем настоящее здоровье
  52. ind += 13
  53. strOut = lstBattleOn[ind]
  54. lstHealth := strings.Split(strOut, `<span>`)
  55. strHealth := lstHealth[1]
  56. lstHealth = strings.Split(strHealth, `</span>`)
  57. strHealth = lstHealth[0]
  58. iHealth, err := strconv.Atoi(strHealth)
  59. if err != nil {
  60. сам.лог.Ошибка("update(): здоровье(%v) не число, err=\n\t%v\n", strHealth, err)
  61. сам.health = 800
  62. return
  63. }
  64. сам.health = iHealth
  65. }