|
|
@@ -34,8 +34,7 @@ type АренаАрсенал struct {
|
|
|
бронебойка ИСтатПарам
|
|
|
кумулятив ИСтатПарам
|
|
|
ремка ИСтатПарам
|
|
|
- продуктИмя string // Что сейчас делается
|
|
|
- продуктКол ИСтатПарам // Сколько делается прямо сейчас
|
|
|
+ продукт ИСтатПарам // Что делается прямо сейчас
|
|
|
продуктВремя string // Сколько осталось времени прямо сейчас
|
|
|
конт ILocalCtx
|
|
|
}
|
|
|
@@ -52,7 +51,7 @@ func НовАрсенал(конт ILocalCtx) ИАренаАрсенал {
|
|
|
бронебойка: lev1.НовСтатПарам(стрБронебойки),
|
|
|
кумулятив: lev1.НовСтатПарам(стрКумулятивы),
|
|
|
ремка: lev1.НовСтатПарам(стрРемки),
|
|
|
- продуктКол: lev1.НовСтатПарам("свинец"),
|
|
|
+ продукт: lev1.НовСтатПарам("свинец"),
|
|
|
конт: конт,
|
|
|
|
|
|
лог: лог,
|
|
|
@@ -72,14 +71,9 @@ func НовАрсенал(конт ILocalCtx) ИАренаАрсенал {
|
|
|
return сам
|
|
|
}
|
|
|
|
|
|
-// ПродуктКолСейчас -- возвращает количество производимого продукта
|
|
|
-func (сам *АренаАрсенал) ПродуктКолСейчас() int {
|
|
|
- return сам.продуктКол.Получ()
|
|
|
-}
|
|
|
-
|
|
|
-// ПродуктИмяСейчас -- возвращает имя производимого продукта
|
|
|
-func (сам *АренаАрсенал) ПродуктИмяСейчас() string {
|
|
|
- return сам.продуктИмя
|
|
|
+// ПродуктКолСейчас -- возвращает производимый продукт
|
|
|
+func (сам *АренаАрсенал) ПродуктСейчас() ИСтатПарам {
|
|
|
+ return сам.продукт
|
|
|
}
|
|
|
|
|
|
// ПродуктВремяСейчас -- сколько осталось времени до производства продукта
|
|
|
@@ -125,7 +119,6 @@ func (сам *АренаАрсенал) пуск() {
|
|
|
}
|
|
|
_ = сам.уровеньОбновить()
|
|
|
сам.забрать()
|
|
|
- сам.сделать()
|
|
|
сам.лог.Info("пуск(): бот=%q, цикл завершён\n", сам.бот.Имя())
|
|
|
}
|
|
|
for {
|
|
|
@@ -374,191 +367,3 @@ func (сам *АренаАрсенал) Кумулятивы() ИСтатПар
|
|
|
func (сам *АренаАрсенал) Ремки() ИСтатПарам {
|
|
|
return сам.ремка
|
|
|
}
|
|
|
-
|
|
|
-// Выбирает что надо делать, запускает процесс изготовления
|
|
|
-func (сам *АренаАрсенал) сделать() bool {
|
|
|
- сам.Обновить()
|
|
|
- // _mt.Println("\tArsenalNet.сделать()")
|
|
|
- var (
|
|
|
- ремкаКол = сам.Ремки().Получ()
|
|
|
- фугасКол = сам.Фугасы().Получ()
|
|
|
- кумульКол = сам.Кумулятивы().Получ()
|
|
|
- ббКол = сам.Бронебойки().Получ()
|
|
|
- снарядТип string
|
|
|
- )
|
|
|
- if ремкаКол < 70 { // Контроль ремки по времени суток и минимальному количеству ремок
|
|
|
- for !сам.сделатьРемку() {
|
|
|
- }
|
|
|
- сам.продуктИмя = стрРемки
|
|
|
- return true
|
|
|
- }
|
|
|
- { // Контроль по числу снарядов. В равных долях без приоритетов
|
|
|
- // снарядТип = стрФугасы
|
|
|
- снарядТип = стрБронебойки
|
|
|
- if ббКол > фугасКол {
|
|
|
- снарядТип = стрФугасы
|
|
|
- }
|
|
|
-
|
|
|
- if фугасКол > кумульКол {
|
|
|
- снарядТип = стрКумулятивы
|
|
|
- }
|
|
|
-
|
|
|
- switch снарядТип {
|
|
|
- case стрФугасы: // Мало фугасов
|
|
|
- for !сам.сделатьФугасы() {
|
|
|
- }
|
|
|
- case стрКумулятивы: // Мало кумулятивов
|
|
|
- for !сам.сделатьКумули() {
|
|
|
- }
|
|
|
- case стрБронебойки: // Мало бронебойных
|
|
|
- for !сам.сделатьБронебойки() {
|
|
|
- }
|
|
|
- default:
|
|
|
- // log._rintf("ERRO Арсенал.сделать(): неизвестный тип арсенала(%v)", typeArmor)
|
|
|
- }
|
|
|
- сам.продуктИмя = снарядТип
|
|
|
- }
|
|
|
- return true
|
|
|
-}
|
|
|
-
|
|
|
-// Создать бронебойные
|
|
|
-func (сам *АренаАрсенал) сделатьБронебойки() bool {
|
|
|
- var (
|
|
|
- стрВых string
|
|
|
- lstArsenal = сам.СписПолучить()
|
|
|
- еслиНайдено bool
|
|
|
- инд int
|
|
|
- )
|
|
|
- for инд, стрВых = range lstArsenal {
|
|
|
- if strings.Contains(стрВых, `<span class="green2">Бронебойный снаряд</span><br/>`) {
|
|
|
- еслиНайдено = true
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if !еслиНайдено {
|
|
|
- return false
|
|
|
- }
|
|
|
- стрВых = lstArsenal[инд+10]
|
|
|
- // Получить ссылку на бронебойные
|
|
|
- lstArmor := strings.Split(стрВых, `<a class="simple-but border" href="`)
|
|
|
- if len(lstArmor) <= 1 { // Тут возможно есть пустая строка
|
|
|
- return true // Считаем, что производство уже запущено
|
|
|
- }
|
|
|
- strLink := lstArmor[1]
|
|
|
- lstArmor = strings.Split(strLink, `"><span><span>Начать производство</span></span></a>`)
|
|
|
- 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 false
|
|
|
- }
|
|
|
- сам.АренаСостояние().СостояниеУст(стрБронебойки)
|
|
|
- return true
|
|
|
-}
|
|
|
-
|
|
|
-// Создать кумулятивные
|
|
|
-func (сам *АренаАрсенал) сделатьКумули() bool {
|
|
|
- var (
|
|
|
- стрВых string
|
|
|
- lstArsenal = сам.СписПолучить()
|
|
|
- еслиНайдено bool
|
|
|
- инд int
|
|
|
- )
|
|
|
- for инд, стрВых = range lstArsenal {
|
|
|
- if strings.Contains(стрВых, `<span class="green2">Кумулятивный снаряд</span><br/>`) {
|
|
|
- еслиНайдено = true
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if !еслиНайдено {
|
|
|
- return false
|
|
|
- }
|
|
|
- стрВых = lstArsenal[инд+10]
|
|
|
- if !strings.Contains(стрВых, `>Начать производство<`) {
|
|
|
- return false
|
|
|
- }
|
|
|
- // Получить ссылку на кумулятив
|
|
|
- списКумул := strings.Split(стрВых, `<a class="simple-but border" href="`)
|
|
|
- strLink := списКумул[1]
|
|
|
- списКумул = strings.Split(strLink, `"><span><span>Начать производство</span></span></a>`)
|
|
|
- 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 false
|
|
|
- }
|
|
|
- сам.АренаСостояние().СостояниеУст(стрКумулятивы)
|
|
|
- return true
|
|
|
-}
|
|
|
-
|
|
|
-// Создать фугасы
|
|
|
-func (сам *АренаАрсенал) сделатьФугасы() bool {
|
|
|
- var (
|
|
|
- lstArsenal = сам.СписПолучить()
|
|
|
- стрВых string
|
|
|
- еслиНайдено bool
|
|
|
- инд int
|
|
|
- )
|
|
|
-
|
|
|
- for инд, стрВых = range lstArsenal {
|
|
|
- if strings.Contains(стрВых, `<span class="green2">Фугасный снаряд</span><br/>`) {
|
|
|
- еслиНайдено = true
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if !еслиНайдено {
|
|
|
- return false
|
|
|
- }
|
|
|
- стрВых = lstArsenal[инд+10]
|
|
|
- if !strings.Contains(стрВых, `"><span><span>Начать производство</span></span></a>`) {
|
|
|
- return false
|
|
|
- }
|
|
|
- // Получить ссылку на ремку
|
|
|
- списКумул := strings.Split(стрВых, `<a class="simple-but border" href="`)
|
|
|
- strLink := списКумул[1]
|
|
|
- списКумул = strings.Split(strLink, `"><span><span>Начать производство</span></span></a>`)
|
|
|
- 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 false
|
|
|
- }
|
|
|
- сам.АренаСостояние().СостояниеУст(стрФугасы)
|
|
|
- // log._rintf("INFO Арсенал.makeФугас()\n")
|
|
|
- return true
|
|
|
-}
|
|
|
-
|
|
|
-// Создать ремку. Выполняется если подходят условия
|
|
|
-func (сам *АренаАрсенал) сделатьРемку() bool {
|
|
|
- // _mt.Println("\tArsenalNet.makeРемка()")
|
|
|
- var (
|
|
|
- стрВых string
|
|
|
- еслиНайдено bool
|
|
|
- инд int
|
|
|
- )
|
|
|
- lstArsenal := сам.Сеть().ВебВоркер().Получ("https://wartank.ru/production/Armory")
|
|
|
- // <span class="green2">Ремкомплект</span><br/>
|
|
|
- for инд, стрВых = range lstArsenal {
|
|
|
- if strings.Contains(стрВых, `<span class="green2">Ремкомплект</span><br/>`) {
|
|
|
- еслиНайдено = true
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if !еслиНайдено {
|
|
|
- return false
|
|
|
- }
|
|
|
- стрВых = lstArsenal[инд+10]
|
|
|
- // Если кривая строка, то надо вернуться
|
|
|
- if strings.Contains(стрВых, `</div></div></div></div></div></div></div></div>`) {
|
|
|
- return true
|
|
|
- }
|
|
|
- // Получить ссылку на ремку
|
|
|
- _ссылка := strings.TrimPrefix(стрВых, `<a class="simple-but border" href="`)
|
|
|
- _ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Начать производство</span></span></a>`)
|
|
|
- // https://wartank.ru/production/Armory?37-1.ILinkListener-productions-3-production-startProduceLink
|
|
|
- ссылка := "https://wartank.ru/production/" + _ссылка
|
|
|
- time.Sleep(time.Millisecond * 50)
|
|
|
- _ = сам.Сеть().ВебВоркер().Получ(ссылка)
|
|
|
- сам.АренаСостояние().СостояниеУст(стрРемки)
|
|
|
- return true
|
|
|
-}
|