// 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, `Топливо `) // Здесь бывает ошибка (когда возвращена пустая строка) 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 сам.топливо }