fuel.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // package fuel -- топливо в баке
  2. package fuel
  3. import (
  4. "fmt"
  5. "log"
  6. "strconv"
  7. "strings"
  8. "time"
  9. "wartank/pkg/types"
  10. "wartank/server/serv_bots/warbot/tank/tankstat/static_param"
  11. )
  12. // Топливо -- топливо в баке, +1 каждые 15 сек
  13. type Топливо struct {
  14. ангар types.ИАнгар
  15. топливо types.ИСтатПарам
  16. }
  17. // НовТопливо -- возвращает новый топливный бак
  18. func НовТопливо(ангар types.ИАнгар) (*Топливо, error) {
  19. if ангар == nil {
  20. return nil, fmt.Errorf("NewFuel(): IAngar == nil")
  21. }
  22. топливо, ош := static_param.НовСтатПарам("fuel")
  23. if ош != nil {
  24. return nil, fmt.Errorf("NewFuel(): при создании стат топливо, ош=\n\t%w", ош)
  25. }
  26. сам := &Топливо{
  27. ангар: ангар,
  28. топливо: топливо,
  29. }
  30. return сам, nil
  31. }
  32. // Run -- должен работать в отдельном потоке, контролит топливо
  33. func (сам *Топливо) Run() {
  34. // Каждые 15 сек +1 топливо
  35. for {
  36. time.Sleep(time.Second * 15)
  37. топливо := сам.топливо.Получ()
  38. топливо++
  39. сам.топливо.Уст(топливо)
  40. // log.Printf("Fuel.Run: val=%v\n", fuel)
  41. }
  42. }
  43. // Обновить -- ищет в теле текста ангара топливо
  44. func (сам *Топливо) Обновить() {
  45. // _mt.Println("\tAngarNet.findFuel()")
  46. lstAngar := сам.ангар.СписПолучить()
  47. var strOut string
  48. for _, strFuel := range lstAngar {
  49. if strings.Contains(strFuel, `<img title="Топливо" `) {
  50. strOut = strFuel
  51. break
  52. }
  53. }
  54. // Выделить топливо
  55. lstFuel := strings.Split(strOut, `<img title="Топливо" alt="Топливо" src="/images/icons/fuel.png?2"/> `)
  56. // Здесь бывает ошибка (когда возвращена пустая строка)
  57. if len(lstFuel) != 2 {
  58. log.Printf("ERRO Топливо.Обновить(): %q, при поиске строки топлива, стр=\n\t%v\n", сам.ангар.Бот().Имя(), strOut)
  59. return
  60. }
  61. if lstFuel[1] == "" {
  62. log.Printf("ERRO Топливо.Обновить(): %q, пустое значение в строке тплива, стр=\n\t%v\n", сам.ангар.Бот().Имя(), strOut)
  63. return
  64. }
  65. strFuel := lstFuel[1]
  66. iFuel, err := strconv.Atoi(strFuel)
  67. if err != nil {
  68. // log._rintf("ERRO Fuel.findFuel(): fuel(%v) not number, err=\n\t%v\n", strFuel, err)
  69. return
  70. }
  71. сам.топливо.Уст(iFuel)
  72. if iFuel <= 314 { // Минимальное значение "топливного склада-1" -- 315
  73. return
  74. }
  75. // log._rintf("Fuel.findFuel():iFuel=%v\n", iFuel)
  76. }
  77. // Fuel -- возвращает объект сстатическог опараметра топлива
  78. func (сам *Топливо) Fuel() types.ИСтатПарам {
  79. return сам.топливо
  80. }