| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- // package fuel -- топливо в баке
- package fuel
- import (
- "fmt"
- "strconv"
- "strings"
- "time"
- "wartank/pkg/types"
- "wartank/server/serv_bots/warbot/tank/tankstat/static_param"
- )
- // Fuel -- топливо в баке
- type Fuel struct {
- ангар types.ИАнгар
- топливо types.ИСтатПарам
- }
- // NewFuel -- возвращает новый топливный бак
- func NewFuel(angar types.ИАнгар) (*Fuel, error) {
- if angar == nil {
- return nil, fmt.Errorf("NewFuel(): IAngar == nil")
- }
- топливо, ош := static_param.НовСтатПарам("fuel")
- if ош != nil {
- return nil, fmt.Errorf("NewFuel(): при создании стат топливо, ош=\n\t%w", ош)
- }
- sf := &Fuel{
- ангар: angar,
- топливо: топливо,
- }
- return sf, nil
- }
- // Run -- должен работать в отдельном потоке, контролит топливо
- func (sf *Fuel) Run() {
- count := 0 // Каждые 1500 сек (100 топлива проверять принудительно)
- for {
- time.Sleep(time.Second * 15)
- if sf.топливо.Получ() == 0 || count >= 100 {
- sf.findFuel()
- count = 0
- continue
- }
- count++
- fuel := sf.топливо.Получ()
- fuel++
- sf.топливо.Уст(fuel)
- // log.Printf("Fuel.Run: val=%v\n", fuel)
- }
- }
- // Ищет в теле текста ангара топливо
- func (sf *Fuel) findFuel() {
- // _mt.Println("\tAngarNet.findFuel()")
- if sf.топливо.Получ() > 314 {
- return
- }
- lstAngar := sf.ангар.СписПолучить()
- 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) == 0 || lstFuel[0] == "" {
- 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
- }
- sf.топливо.Уст(iFuel)
- if iFuel <= 314 { // Минимальное значение "топливного склада-1" -- 315
- return
- }
- // log._rintf("Fuel.findFuel():iFuel=%v\n", iFuel)
- }
- // Fuel -- возвращает объект сстатическог опараметра топлива
- func (sf *Fuel) Fuel() types.ИСтатПарам {
- return sf.топливо
- }
|