// package bf_ammo_make -- бизнес-функция производства снарядов package bf_ammo_make import ( "strings" "time" . "gitp78su.ipnodns.ru/svi/kern/kc/helpers" . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes" . "wartank/app/lev0/types" ) const ( стрКумулятивы = "кумулятивы" стрБронебойки = "бронебойки" стрФугасы = "фугасы" стрРемки = "ремки" ) // СнарядыСделать -- делает снаряды в арсенале func СнарядыСделать(конт ILocalCtx) { арсенал:=конт.Get("арсенал") if арсенал==nil{ // Арсенала может и не быть return } приоритет(конт) } // ищет приоритет производства func приоритет(конт ILocalCtx){ арсенал:=конт.Get("арсенал").Val().(ИАренаАрсенал) var ( ремкаКол = арсенал.Ремки().Получ() фугасКол = арсенал.Фугасы().Получ() кумульКол = арсенал.Кумулятивы().Получ() ббКол = арсенал.Бронебойки().Получ() снарядТип string ) if ремкаКол < 70 { // Контроль ремки по времени суток и минимальному количеству ремок сделатьРемку(конт) арсенал.ПродуктСейчас().ИмяУст(стрРемки) return } { // Контроль по числу снарядов. В равных долях без приоритетов // снарядТип = стрФугасы снарядТип = стрБронебойки if ббКол > фугасКол { снарядТип = стрФугасы } if фугасКол > кумульКол { снарядТип = стрКумулятивы } switch снарядТип { case стрФугасы: // Мало фугасов сделатьФугасы(конт) case стрКумулятивы: // Мало кумулятивов сделатьКумули(конт) case стрБронебойки: // Мало бронебойных сделатьБронебойки(конт) default: // log._rintf("ERRO Арсенал.сделать(): неизвестный тип арсенала(%v)", typeArmor) } арсенал.ПродуктСейчас().ИмяУст(снарядТип) } } // Создать бронебойные func сделатьБронебойки(конт ILocalCtx) { арсенал:=конт.Get("арсенал").Val().(ИАренаАрсенал) var ( стрВых string lstArsenal = арсенал.СписПолучить() еслиНайдено bool инд int ) for инд, стрВых = range lstArsenal { if strings.Contains(стрВых, `Бронебойный снаряд
`) { еслиНайдено = true break } } if !еслиНайдено { return } стрВых = lstArsenal[инд+10] // Получить ссылку на бронебойные lstArmor := strings.Split(стрВых, `Начать производство`) strLink = "https://wartank.ru/production/" + lstArmor[0] time.Sleep(time.Millisecond * 50) if _, err := арсенал.Сеть().Get(strLink); err != nil { // log._rintf("ERRO ArsenalNet.makeArmor(): in update lstArsenal, err=\n\t%v\n", err) return } арсенал.ПродуктСейчас().ИмяУст(стрБронебойки) } // Создать кумулятивные func сделатьКумули(конт ILocalCtx) { арсенал:=конт.Get("арсенал").Val().(ИАренаАрсенал) var ( стрВых string lstArsenal = арсенал.СписПолучить() еслиНайдено bool инд int ) for инд, стрВых = range lstArsenal { if strings.Contains(стрВых, `Кумулятивный снаряд
`) { еслиНайдено = true break } } if !еслиНайдено { return } стрВых = lstArsenal[инд+10] if !strings.Contains(стрВых, `>Начать производство<`) { return } // Получить ссылку на кумулятив списКумул := strings.Split(стрВых, `Начать производство`) strLink = "https://wartank.ru/production/" + списКумул[0] time.Sleep(time.Millisecond * 50) if _, err := арсенал.Сеть().Get(strLink); err != nil { // log._rintf("ERRO ArsenalNet.makeКумуль(): in make product arsenal кумуль , err=\n\t%v\n", err) return } арсенал.ПродуктСейчас().ИмяУст(стрКумулятивы) } // Создать фугасы func сделатьФугасы(конт ILocalCtx) { арсенал:=конт.Get("арсенал").Val().(ИАренаАрсенал) var ( lstArsenal = арсенал.СписПолучить() стрВых string еслиНайдено bool инд int ) for инд, стрВых = range lstArsenal { if strings.Contains(стрВых, `Фугасный снаряд
`) { еслиНайдено = true break } } if !еслиНайдено { return } стрВых = lstArsenal[инд+10] if !strings.Contains(стрВых, `">Начать производство`) { return } // Получить ссылку на ремку списКумул := strings.Split(стрВых, `Начать производство`) strLink = "https://wartank.ru/production/" + списКумул[0] time.Sleep(time.Millisecond * 50) if _, err := арсенал.Сеть().Get(strLink); err != nil { // log._rintf("ERRO ArsenalNet.makeФугас(): in make request arsenal product, err=\n\t%v\n", err) return } арсенал.ПродуктСейчас().ИмяУст(стрФугасы) } // Создать ремку. Выполняется если подходят условия func сделатьРемку(конт ILocalCtx) { арсенал:=конт.Get("арсенал").Val().(ИАренаАрсенал) var ( стрВых string еслиНайдено bool инд int ) lstArsenal := арсенал.Сеть().ВебВоркер().Получ("https://wartank.ru/production/Armory") // Ремкомплект
for инд, стрВых = range lstArsenal { if strings.Contains(стрВых, `Ремкомплект
`) { еслиНайдено = true break } } Hassert(еслиНайдено, "сделатьРемку():Не найдена контрольная строка ремок") стрВых = lstArsenal[инд+10] // Если кривая строка, то надо вернуться if strings.Contains(стрВых, ``) { return } // Получить ссылку на ремку _ссылка := strings.TrimPrefix(стрВых, `Начать производство`) // https://wartank.ru/production/Armory?37-1.ILinkListener-productions-3-production-startProduceLink ссылка := "https://wartank.ru/production/" + _ссылка time.Sleep(time.Millisecond * 50) _ = арсенал.Сеть().ВебВоркер().Получ(ссылка) арсенал.ПродуктСейчас().ИмяУст(стрРемки) }