wrag.go 1.7 KB

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