fuel.go 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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/stat_tank/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. сам := &Топливо{
  23. ангар: ангар,
  24. топливо: static_param.НовСтатПарам("fuel"),
  25. }
  26. return сам, nil
  27. }
  28. // Run -- должен работать в отдельном потоке, контролит топливо
  29. func (сам *Топливо) Run() {
  30. // Каждые 15 сек +1 топливо
  31. for {
  32. time.Sleep(time.Second * 15)
  33. топливо := сам.топливо.Получ()
  34. топливо++
  35. сам.топливо.Уст(топливо)
  36. // log.Printf("Fuel.Run: val=%v\n", fuel)
  37. }
  38. }
  39. // Обновить -- ищет в теле текста ангара топливо
  40. func (сам *Топливо) Обновить() {
  41. // _mt.Println("\tAngarNet.findFuel()")
  42. lstAngar := сам.ангар.СписПолучить()
  43. var strOut string
  44. for _, strFuel := range lstAngar {
  45. if strings.Contains(strFuel, `<img title="Топливо" `) {
  46. strOut = strFuel
  47. break
  48. }
  49. }
  50. // Выделить топливо
  51. lstFuel := strings.Split(strOut, `<img title="Топливо" alt="Топливо" src="/images/icons/fuel.png?2"/> `)
  52. // Здесь бывает ошибка (когда возвращена пустая строка)
  53. if len(lstFuel) != 2 {
  54. log.Printf("ERRO Топливо.Обновить(): %q, при поиске строки топлива, стр=\n\t%v\n", сам.ангар.Бот().Имя(), strOut)
  55. return
  56. }
  57. if lstFuel[1] == "" {
  58. log.Printf("ERRO Топливо.Обновить(): %q, пустое значение в строке тплива, стр=\n\t%v\n", сам.ангар.Бот().Имя(), strOut)
  59. return
  60. }
  61. strFuel := lstFuel[1]
  62. iFuel, err := strconv.Atoi(strFuel)
  63. if err != nil {
  64. // log._rintf("ERRO Fuel.findFuel(): fuel(%v) not number, err=\n\t%v\n", strFuel, err)
  65. return
  66. }
  67. сам.топливо.Уст(iFuel)
  68. if iFuel <= 314 { // Минимальное значение "топливного склада-1" -- 315
  69. return
  70. }
  71. // log._rintf("Fuel.findFuel():iFuel=%v\n", iFuel)
  72. }
  73. // Fuel -- возвращает объект сстатическог опараметра топлива
  74. func (сам *Топливо) Fuel() types.ИСтатПарам {
  75. return сам.топливо
  76. }