| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- // 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 {
- server types.IServer
- angar types.IAngar
- bot types.IServBot
- fuel types.IStatParam
- }
- // NewFuel -- возвращает новый топливный бак
- func NewFuel(server types.IServer, bot types.IServBot) (*Fuel, error) {
- { // Предусловия
- if server == nil {
- return nil, fmt.Errorf("NewFuel(): IServer == nil")
- }
- if bot == nil {
- return nil, fmt.Errorf("NewFuel(): IServBot == nil")
- }
- }
- sf := &Fuel{
- server: server,
- angar: bot.Angar(),
- bot: bot,
- fuel: static_param.NewStaticParam("fuel"),
- }
- return sf, nil
- }
- // Run -- должен работать в отдельном потоке, контролит топливо
- func (sf *Fuel) Run() {
- count := 0 // Каждые 1500 сек (100 топлива проверять принудительно)
- for {
- time.Sleep(time.Second * 15)
- if sf.fuel.Get() == 0 || count >= 100 {
- sf.findFuel()
- count = 0
- continue
- }
- count++
- fuel := sf.angar.Fuel().Get()
- fuel++
- sf.angar.Fuel().Set(fuel)
- // log.Printf("Fuel.Run: val=%v\n", fuel)
- }
- }
- // Ищет в теле текста ангара топливо
- func (sf *Fuel) findFuel() {
- // _mt.Println("\tAngarNet.findFuel()")
- if sf.fuel.Get() > 314 {
- return
- }
- lstAngar := sf.bot.Angar().GetLst()
- 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"/> `)
- 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.bot.Angar().Fuel().Set(iFuel)
- if iFuel <= 314 { // Минимальное значение "топливного склада-1" -- 315
- return
- }
- // log._rintf("Fuel.findFuel():iFuel=%v\n", iFuel)
- }
- // Fuel -- возвращает объект сстатическог опараметра топлива
- func (sf *Fuel) Fuel() types.IStatParam {
- return sf.fuel
- }
|