// 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)
_ = арсенал.Сеть().ВебВоркер().Получ(ссылка)
арсенал.ПродуктСейчас().ИмяУст(стрРемки)
}