| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- // package fuel -- топливо в баке
- package fuel
- import (
- "fmt"
- "log"
- "strconv"
- "strings"
- "time"
- "wartank/pkg/types"
- "wartank/server/serv_bots/warbot/tank/tankstat/static_param"
- )
- // Топливо -- топливо в баке, +1 каждые 15 сек
- type Топливо struct {
- ангар types.ИАнгар
- топливо types.ИСтатПарам
- }
- // НовТопливо -- возвращает новый топливный бак
- func НовТопливо(ангар types.ИАнгар) (*Топливо, error) {
- if ангар == nil {
- return nil, fmt.Errorf("NewFuel(): IAngar == nil")
- }
- топливо, ош := static_param.НовСтатПарам("fuel")
- if ош != nil {
- return nil, fmt.Errorf("NewFuel(): при создании стат топливо, ош=\n\t%w", ош)
- }
- сам := &Топливо{
- ангар: ангар,
- топливо: топливо,
- }
- return сам, nil
- }
- // Run -- должен работать в отдельном потоке, контролит топливо
- func (сам *Топливо) Run() {
- // Каждые 15 сек +1 топливо
- for {
- time.Sleep(time.Second * 15)
- топливо := сам.топливо.Получ()
- топливо++
- сам.топливо.Уст(топливо)
- // log.Printf("Fuel.Run: val=%v\n", fuel)
- }
- }
- // Обновить -- ищет в теле текста ангара топливо
- func (сам *Топливо) Обновить() {
- // _mt.Println("\tAngarNet.findFuel()")
- lstAngar := сам.ангар.СписПолучить()
- var strOut string
- for _, strFuel := range lstAngar {
- if strings.Contains(strFuel, `<img title="Топливо" `) {
- strOut = strFuel
- break
- }
- }
- // Выделить топливо
- lstFuel := strings.Split(strOut, `<img title="Топливо" alt="Топливо" src="/images/icons/fuel.png?2"/> `)
- // Здесь бывает ошибка (когда возвращена пустая строка)
- if len(lstFuel) != 2 {
- log.Printf("ERRO Топливо.Обновить(): %q, при поиске строки топлива, стр=\n\t%v\n", сам.ангар.Бот().Имя(), strOut)
- return
- }
- if lstFuel[1] == "" {
- log.Printf("ERRO Топливо.Обновить(): %q, пустое значение в строке тплива, стр=\n\t%v\n", сам.ангар.Бот().Имя(), strOut)
- return
- }
- strFuel := lstFuel[1]
- iFuel, err := strconv.Atoi(strFuel)
- if err != nil {
- // log._rintf("ERRO Fuel.findFuel(): fuel(%v) not number, err=\n\t%v\n", strFuel, err)
- return
- }
- сам.топливо.Уст(iFuel)
- if iFuel <= 314 { // Минимальное значение "топливного склада-1" -- 315
- return
- }
- // log._rintf("Fuel.findFuel():iFuel=%v\n", iFuel)
- }
- // Fuel -- возвращает объект сстатическог опараметра топлива
- func (сам *Топливо) Fuel() types.ИСтатПарам {
- return сам.топливо
- }
|