|
|
@@ -1,9 +1,9 @@
|
|
|
+// package mine -- объект шахты на базе
|
|
|
package mine
|
|
|
|
|
|
import (
|
|
|
"context"
|
|
|
"fmt"
|
|
|
- "log"
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
"time"
|
|
|
@@ -12,17 +12,14 @@ import (
|
|
|
"wartank/pkg/section"
|
|
|
"wartank/pkg/types"
|
|
|
"wartank/server/serv_bots/warbot/angar/base/mine/minenet"
|
|
|
- "wartank/server/serv_bots/warbot/tank/tankstat/static_param"
|
|
|
+ "wartank/server/serv_bots/warbot/tank_stat/static_param"
|
|
|
)
|
|
|
|
|
|
-/*
|
|
|
- Объект шахты на базе
|
|
|
-*/
|
|
|
-
|
|
|
// Шахта -- объект шахты на базе
|
|
|
type Шахта struct {
|
|
|
*section.Секция
|
|
|
сеть *minenet.MineNet
|
|
|
+ лог types.ИВебЛог
|
|
|
бот types.ИБот
|
|
|
база types.ИБаза
|
|
|
руда types.ИСтатПарам
|
|
|
@@ -38,7 +35,7 @@ type Шахта struct {
|
|
|
}
|
|
|
|
|
|
// НовШахта -- возвращает новый *Mine
|
|
|
-func НовШахта(база types.ИБаза) (*Шахта, error) {
|
|
|
+func НовШахта(база types.ИБаза) (types.ИБазаШахта, error) {
|
|
|
секция, ош := section.НовСекция(база.Бот(), "Шахта", `<span class="green2">Руда</span><br/>`)
|
|
|
if ош != nil {
|
|
|
return nil, fmt.Errorf("НовШахта(): in create *Section, err=\n\t%w", ош)
|
|
|
@@ -80,33 +77,29 @@ func НовШахта(база types.ИБаза) (*Шахта, error) {
|
|
|
уровень: уровень,
|
|
|
кнт: кнт,
|
|
|
фнОтмена: фнОтмена,
|
|
|
+ лог: секция.Лог(),
|
|
|
}
|
|
|
|
|
|
сам.сеть, ош = minenet.NewMineNet(сам)
|
|
|
if ош != nil {
|
|
|
return nil, fmt.Errorf("NewMine(): in create NetMine, err=\n\t%w", ош)
|
|
|
}
|
|
|
- _ = types.ИБазаШахта(сам)
|
|
|
- return сам, nil
|
|
|
-}
|
|
|
-
|
|
|
-func (сам *Шахта) Пуск() error {
|
|
|
go сам.пуск()
|
|
|
- return nil
|
|
|
+ сам.лог.ОтклВывод()
|
|
|
+ сам.лог.Добавить("Шахта.НовШахта(): бот=%q\n", сам.бот.Имя())
|
|
|
+ return сам, nil
|
|
|
}
|
|
|
|
|
|
// пуск -- запускает обработку шахты
|
|
|
func (сам *Шахта) пуск() {
|
|
|
- time.Sleep(time.Second * 3)
|
|
|
фнРабота := func() {
|
|
|
defer func() {
|
|
|
for сам.ВремяОстат().ПолучМилСек() > 0 {
|
|
|
time.Sleep(time.Second * 5)
|
|
|
}
|
|
|
}()
|
|
|
- сам.бот.Ангар().РесурсыОбновить()
|
|
|
+ сам.лог.Добавить("Шахта.пуск().фнРабота(): бот=%q\n", сам.бот.Имя())
|
|
|
{ // Построить
|
|
|
-
|
|
|
счёт := 5
|
|
|
for счёт > 0 {
|
|
|
еcлиНет := сам.построить()
|
|
|
@@ -116,7 +109,7 @@ func (сам *Шахта) пуск() {
|
|
|
счёт--
|
|
|
}
|
|
|
}
|
|
|
- {
|
|
|
+ { // Забрать из шахты
|
|
|
счёт := 5
|
|
|
for счёт > 0 { // Забрать из шахты
|
|
|
if сам.шахтаЗабрать() {
|
|
|
@@ -127,7 +120,7 @@ func (сам *Шахта) пуск() {
|
|
|
}
|
|
|
сам.уровеньОбновить()
|
|
|
сам.ускорениеПровер()
|
|
|
- {
|
|
|
+ { // Проапгрейдить
|
|
|
счёт := 5
|
|
|
for счёт > 0 {
|
|
|
if сам.проапгрейдить() {
|
|
|
@@ -136,11 +129,20 @@ func (сам *Шахта) пуск() {
|
|
|
счёт--
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- сам.количествоПолучить()
|
|
|
- сам.бот.Ангар().РесурсыОбновить()
|
|
|
+ { // Получить продукцию
|
|
|
+ счёт := 5
|
|
|
+ for счёт > 0 {
|
|
|
+ счёт--
|
|
|
+ еслиПолуч, ош := сам.количествоПолучить()
|
|
|
+ if ош != nil {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if еслиПолуч {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
сам.Сделать()
|
|
|
-
|
|
|
}
|
|
|
for {
|
|
|
select {
|
|
|
@@ -149,14 +151,14 @@ func (сам *Шахта) пуск() {
|
|
|
case <-сам.ВремяОстат().КаналСиг():
|
|
|
фнРабота()
|
|
|
default:
|
|
|
- log.Printf("Шахта.пуск()\n")
|
|
|
фнРабота()
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// Проверяет количество продукта в шахте
|
|
|
-func (сам *Шахта) количествоПолучить() {
|
|
|
+func (сам *Шахта) количествоПолучить() (bool, error) {
|
|
|
+ сам.лог.Добавить("Шахта.количествоПолучить()\n")
|
|
|
var (
|
|
|
ind int
|
|
|
strOut string
|
|
|
@@ -165,8 +167,8 @@ func (сам *Шахта) количествоПолучить() {
|
|
|
)
|
|
|
lstMine, err := сам.сеть.ВебВоркер().Получ("https://wartank.ru/buildings")
|
|
|
if err != nil {
|
|
|
- log.Printf("Шахта.количествоПолучить(): при обновлении строк шахты, ош=\n\t%v\n", err)
|
|
|
- return
|
|
|
+ сам.лог.Добавить("ОШИБКА Шахта.количествоПолучить(): при обновлении строк шахты, ош=\n\t%v\n", err)
|
|
|
+ return false, fmt.Errorf("")
|
|
|
}
|
|
|
/*
|
|
|
Режим (руда-1):
|
|
|
@@ -206,7 +208,8 @@ func (сам *Шахта) количествоПолучить() {
|
|
|
}
|
|
|
}
|
|
|
if !еслиНайдено {
|
|
|
- return
|
|
|
+ сам.лог.Добавить("Шахта.количествоПолучить(): не надо\n")
|
|
|
+ return true, nil
|
|
|
}
|
|
|
switch режим {
|
|
|
case "руда":
|
|
|
@@ -214,44 +217,48 @@ func (сам *Шахта) количествоПолучить() {
|
|
|
_число = strings.TrimSuffix(_число, `</div></td>`)
|
|
|
iNum, err := strconv.Atoi(_число)
|
|
|
if err != nil {
|
|
|
- log.Printf("Шахта.количествоПолучить(): кол-во руды (%v) не число, err=\n\t%v\n", _число, err)
|
|
|
- return
|
|
|
+ сам.лог.Добавить("ОШИБКА Шахта.количествоПолучить(): кол-во руды (%v) не число, err=\n\t%v\n", _число, err)
|
|
|
+ return false, fmt.Errorf("")
|
|
|
}
|
|
|
сам.продуктКол.Уст(iNum)
|
|
|
сам.продуктИмя = "руда"
|
|
|
+ сам.лог.Добавить("Шахта.количествоПолучить(): кол-во руды = %v\n", iNum)
|
|
|
case "железо":
|
|
|
_число := strings.TrimPrefix(strOut, `<td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/iron.png?2" alt="iron"/> `)
|
|
|
_число = strings.TrimSuffix(_число, `</div></td>`)
|
|
|
iNum, err := strconv.Atoi(_число)
|
|
|
if err != nil {
|
|
|
- log.Printf("Шахта.количествоПолучить(): кол-во железа (%v) не число, err=\n\t%v\n", _число, err)
|
|
|
- return
|
|
|
+ сам.лог.Добавить("ОШИБКА Шахта.количествоПолучить(): кол-во железа (%v) не число, err=\n\t%v\n", _число, err)
|
|
|
+ return false, fmt.Errorf("")
|
|
|
}
|
|
|
сам.продуктКол.Уст(iNum)
|
|
|
сам.продуктИмя = "железо"
|
|
|
+ сам.лог.Добавить("Шахта.количествоПолучить(): кол-во железа = %v\n", iNum)
|
|
|
case "сталь":
|
|
|
_число := strings.TrimPrefix(strOut, `<td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/steel.png?2" alt="steel"/> `)
|
|
|
_число = strings.TrimSuffix(_число, `</div></td>`)
|
|
|
iNum, err := strconv.Atoi(_число)
|
|
|
if err != nil {
|
|
|
- log.Printf("Шахта.количествоПолучить(): кол-во стали (%v) не число, err=\n\t%v\n", _число, err)
|
|
|
- return
|
|
|
+ сам.лог.Добавить("ОШИБКА Шахта.количествоПолучить(): кол-во стали (%v) не число, err=\n\t%v\n", _число, err)
|
|
|
+ return false, fmt.Errorf("")
|
|
|
}
|
|
|
сам.продуктКол.Уст(iNum)
|
|
|
сам.продуктИмя = "сталь"
|
|
|
+ сам.лог.Добавить("Шахта.количествоПолучить(): кол-во стали = %v\n", iNum)
|
|
|
case "свинец":
|
|
|
_число := strings.TrimPrefix(strOut, `<td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/plumbum.png?2" alt="plumbum"/> `)
|
|
|
_число = strings.TrimSuffix(_число, `</div></td>`)
|
|
|
iNum, err := strconv.Atoi(_число)
|
|
|
if err != nil {
|
|
|
- log.Printf("Шахта.количествоПолучить(): кол-во свинца (%v) не число, err=\n\t%v\n", _число, err)
|
|
|
- return
|
|
|
+ сам.лог.Добавить("ОШИБКА Шахта.количествоПолучить(): кол-во свинца (%v) не число, err=\n\t%v\n", _число, err)
|
|
|
+ return false, fmt.Errorf("")
|
|
|
}
|
|
|
сам.продуктКол.Уст(iNum)
|
|
|
сам.продуктИмя = "свинец"
|
|
|
+ сам.лог.Добавить("Шахта.количествоПолучить(): кол-во свинца = %v\n", iNum)
|
|
|
default:
|
|
|
- log.Printf("Шахта.количествоПолучить(): неизвестный режим (%v)\n", режим)
|
|
|
- return
|
|
|
+ сам.лог.Добавить("Шахта.количествоПолучить(): неизвестный режим (%v)\n", режим)
|
|
|
+ return false, fmt.Errorf("")
|
|
|
}
|
|
|
// <td><div class="value-block lh1"><span><span>00:00:34</span></span></div></td>
|
|
|
strTime := lstMine[ind+3]
|
|
|
@@ -260,19 +267,22 @@ func (сам *Шахта) количествоПолучить() {
|
|
|
strTime = strings.TrimSuffix(strTime, `</span></span></div></td>`)
|
|
|
сам.продуктВремя = strTime
|
|
|
if err := сам.Уст(alias.Время(strTime)); err != nil {
|
|
|
- log.Printf("Шахта.количествоПолучить(): при установке времени производства(%v), err=\n\t%v\n", strTime, err)
|
|
|
+ сам.лог.Добавить("ОШИБКА Шахта.количествоПолучить(): при установке времени производства(%v), err=\n\t%v\n", strTime, err)
|
|
|
}
|
|
|
+ сам.лог.Добавить("Шахта.количествоПолучить(): время=%q\n", strTime)
|
|
|
+ return true, nil
|
|
|
}
|
|
|
|
|
|
// Проверяет на забор из шахты
|
|
|
func (сам *Шахта) шахтаЗабрать() bool {
|
|
|
+ сам.лог.Добавить("Шахта.шахтаЗабрать()\n")
|
|
|
var (
|
|
|
strOut string
|
|
|
еслиНайдено bool
|
|
|
)
|
|
|
списШахта, ош := сам.сеть.ВебВоркер().Получ("https://wartank.ru/buildings")
|
|
|
if ош != nil {
|
|
|
- log.Printf("Шахта.шахтаЗабрать(): при обновлении списШахта, ош=\n\t%v\n", ош)
|
|
|
+ сам.лог.Добавить("ОШИБКА Шахта.шахтаЗабрать(): при GET-запросе, ош=\n\t%v\n", ош)
|
|
|
return false
|
|
|
}
|
|
|
// <a class="simple-but border" href="buildings?35-1.ILinkListener-buildings-0-building-rootBlock-actionPanel-takeProductionLink"><span><span>Забрать</span></span></a>
|
|
|
@@ -283,6 +293,7 @@ func (сам *Шахта) шахтаЗабрать() bool {
|
|
|
}
|
|
|
}
|
|
|
if !еслиНайдено {
|
|
|
+ сам.лог.Добавить("Шахта.шахтаЗабрать(): не надо\n")
|
|
|
return true
|
|
|
}
|
|
|
_ссылка := strings.TrimPrefix(strOut, `<a class="simple-but border" href="`)
|
|
|
@@ -291,21 +302,23 @@ func (сам *Шахта) шахтаЗабрать() bool {
|
|
|
// http://wartank.ru/buildings?5-1.ILinkListener-buildings-0-building-rootBlock-actionPanel-takeProductionLink
|
|
|
lstBase1, err := сам.сеть.ВебВоркер().Получ(ссылка)
|
|
|
if err != nil {
|
|
|
- log.Printf("Шахта.шахтаЗабрать(): при выполнении Get-запроса 'забрать', err=\n\t%v\n", err)
|
|
|
+ сам.лог.Добавить("ОШИБКА Шахта.шахтаЗабрать(): при выполнении GET-запроса 'забрать', err=\n\t%v\n", err)
|
|
|
return false
|
|
|
}
|
|
|
if err = сам.СтрОбновить(lstBase1); err != nil {
|
|
|
- log.Printf("Шахта.шахтаЗабрать(): при обновлении lstMine, err=\n\t%v\n", err)
|
|
|
+ сам.лог.Добавить("Шахта.шахтаЗабрать(): при обновлении lstMine, err=\n\t%v\n", err)
|
|
|
return false
|
|
|
}
|
|
|
+ сам.лог.Добавить("Шахта.шахтаЗабрать(): ОК\n")
|
|
|
return true
|
|
|
}
|
|
|
|
|
|
-// Проверяет ускорение строительства
|
|
|
+// Проверяет ускорение строительства FIXME: не работает
|
|
|
func (сам *Шахта) ускорениеПровер() {
|
|
|
+ сам.лог.Добавить("")
|
|
|
списСтр, ош := сам.сеть.ВебВоркер().Получ("http://wartank.ru/buildings")
|
|
|
if ош != nil {
|
|
|
- log.Printf("Шахта.ускорениеПровер(): in make request, err=\n\t%v\n", ош)
|
|
|
+ сам.лог.Добавить("ОШИБКА Шахта.ускорениеПровер(): при получении списка строк, err=\n\t%v\n", ош)
|
|
|
return
|
|
|
}
|
|
|
// <span class="green2">Шахта - 0</span><br/>
|
|
|
@@ -320,8 +333,10 @@ func (сам *Шахта) ускорениеПровер() {
|
|
|
}
|
|
|
}
|
|
|
if !еслиНайти {
|
|
|
+ сам.лог.Добавить("Шахта.ускорениеПровер(): не надо\n")
|
|
|
return
|
|
|
}
|
|
|
+ сам.лог.Добавить("Шахта.ускорениеПровер(): надо\n")
|
|
|
}
|
|
|
|
|
|
// Уровень -- возвращает уровень шахты
|
|
|
@@ -331,9 +346,10 @@ func (сам *Шахта) Уровень() types.ИСтатПарам {
|
|
|
|
|
|
// Обновляет текущий уровень шахты (может быть не построена)
|
|
|
func (сам *Шахта) уровеньОбновить() bool {
|
|
|
+ сам.лог.Добавить("Шахта.уровеньОбновить()\n")
|
|
|
списСтр, ош := сам.сеть.ВебВоркер().Получ("http://wartank.ru/buildings")
|
|
|
if ош != nil {
|
|
|
- log.Printf("Шахта.уровеньОбновить(): in make request, err=\n\t%v\n", ош)
|
|
|
+ сам.лог.Добавить("ОШИБКА Шахта.уровеньОбновить(): in make request, err=\n\t%v\n", ош)
|
|
|
return false
|
|
|
}
|
|
|
// <span class="green2">Шахта - 0</span><br/>
|
|
|
@@ -348,31 +364,24 @@ func (сам *Шахта) уровеньОбновить() bool {
|
|
|
}
|
|
|
}
|
|
|
if !еслиНайти {
|
|
|
+ сам.лог.Добавить("Шахта.уровеньОбновить(): нет уровня\n")
|
|
|
return false
|
|
|
}
|
|
|
_стр := strings.TrimPrefix(стр, `<span class="green2">Шахта - `)
|
|
|
_стр = strings.TrimSuffix(_стр, `</span><br/>`)
|
|
|
иУровень, ош := strconv.Atoi(_стр)
|
|
|
if ош != nil {
|
|
|
- log.Printf("Шахта.уровеньОбновить(): строка уровня сбойная, стр=%q, ош=\n\t%v\n", стр, ош)
|
|
|
+ сам.лог.Добавить("ОШИБКА Шахта.уровеньОбновить(): строка уровня сбойная, стр=%q, ош=\n\t%v\n", стр, ош)
|
|
|
return false
|
|
|
}
|
|
|
сам.уровень.Уст(иУровень)
|
|
|
- switch иУровень {
|
|
|
- default: // Пробуем проапгрейдить
|
|
|
- счёт := 5
|
|
|
- for счёт > 0 {
|
|
|
- if сам.проапгрейдить() {
|
|
|
- break
|
|
|
- }
|
|
|
- счёт--
|
|
|
- }
|
|
|
- }
|
|
|
+ сам.лог.Добавить("Шахта.уровеньОбновить(): уровень=%v\n", иУровень)
|
|
|
return true
|
|
|
}
|
|
|
|
|
|
// Строит шахту при нулевом уровне
|
|
|
func (сам *Шахта) построить() bool {
|
|
|
+ сам.лог.Добавить("Шахта.построить()\n")
|
|
|
// <td style="width:50%;padding-left:1px;"><a class="simple-but border mb5" href="building-upgrade/Mine"><span><span>Построить</span></span></a></td>
|
|
|
var (
|
|
|
еслиНайти = false
|
|
|
@@ -380,7 +389,7 @@ func (сам *Шахта) построить() bool {
|
|
|
)
|
|
|
списСтр, ош := сам.сеть.ВебВоркер().Получ("http://wartank.ru/buildings")
|
|
|
if ош != nil {
|
|
|
- log.Printf("Шахта.уровеньОбновить(): in make request, err=\n\t%v\n", ош)
|
|
|
+ сам.лог.Добавить("Шахта.уровеньОбновить(): при выполнении запроса, ош=\n\t%v\n", ош)
|
|
|
return false
|
|
|
}
|
|
|
for _, стр = range списСтр {
|
|
|
@@ -390,6 +399,7 @@ func (сам *Шахта) построить() bool {
|
|
|
}
|
|
|
}
|
|
|
if !еслиНайти {
|
|
|
+ сам.лог.Добавить("Шахта.построить(): не надо\n")
|
|
|
return true
|
|
|
}
|
|
|
// Пробуем построить шахту
|
|
|
@@ -398,7 +408,7 @@ func (сам *Шахта) построить() bool {
|
|
|
ссылка := "https://wartank.ru/" + _стр
|
|
|
списСтр, ош = сам.сеть.ВебВоркер().Получ(ссылка)
|
|
|
if ош != nil {
|
|
|
- log.Printf("ERRO Шахта.построить(): при GET-команде 'построить шахту', err=\n\t%v\n", ош)
|
|
|
+ сам.лог.Добавить("ОШИБКА Шахта.построить(): при выполнении GET-команды 'построить шахту', err=\n\t%v\n", ош)
|
|
|
return false
|
|
|
}
|
|
|
еслиНайти = false
|
|
|
@@ -410,6 +420,7 @@ func (сам *Шахта) построить() bool {
|
|
|
}
|
|
|
}
|
|
|
if !еслиНайти {
|
|
|
+ сам.лог.Добавить("Шахта.построить(): не найдена команда постройки\n")
|
|
|
return true
|
|
|
}
|
|
|
_стр = strings.TrimPrefix(стр, "<a class=\"simple-but border mb5\" href=\"")
|
|
|
@@ -418,7 +429,7 @@ func (сам *Шахта) построить() bool {
|
|
|
ссылка = "https://wartank.ru/building-upgrade/" + _стр
|
|
|
_, ош = сам.сеть.ВебВоркер().Получ(ссылка)
|
|
|
if ош != nil {
|
|
|
- log.Printf("ERRO Шахта.построить(): при GET-команде 'купить постройку шахты', err=\n\t%v\n", ош)
|
|
|
+ сам.лог.Добавить("ОШИБКА Шахта.построить(): при GET-команде 'купить постройку шахты', err=\n\t%v\n", ош)
|
|
|
return false
|
|
|
}
|
|
|
return true
|
|
|
@@ -426,19 +437,19 @@ func (сам *Шахта) построить() bool {
|
|
|
|
|
|
// Пытается проапгрейдить топливный склад
|
|
|
func (сам *Шахта) проапгрейдить() bool {
|
|
|
- time.Sleep(time.Millisecond * 1000)
|
|
|
+ сам.лог.Добавить("Шахта.проапгрейдить()\n")
|
|
|
var (
|
|
|
еслиНайти = false
|
|
|
списСтр []string
|
|
|
стр = ""
|
|
|
ош error
|
|
|
)
|
|
|
- фнКупить := func() bool {
|
|
|
+ фнКупить := func() (bool, error) {
|
|
|
defer time.Sleep(time.Millisecond * 1000)
|
|
|
списСтр, ош = сам.сеть.ВебВоркер().Получ("https://wartank.ru/building-upgrade/Mine")
|
|
|
if ош != nil {
|
|
|
- log.Printf("Шахта.проапгрейдить().фнКупить(): при GET-команде 'купить постройку шахты', err=\n\t%v\n", ош)
|
|
|
- return false
|
|
|
+ сам.лог.Добавить("ОШИБКА Шахта.проапгрейдить().фнКупить(): при GET-команде 'купить постройку шахты', err=\n\t%v\n", ош)
|
|
|
+ return false, fmt.Errorf("не получены строки")
|
|
|
}
|
|
|
for _, стр = range списСтр {
|
|
|
// <a class="simple-but border mb5" href="Mine?5-1.ILinkListener-upgradeLink-link">
|
|
|
@@ -448,7 +459,8 @@ func (сам *Шахта) проапгрейдить() bool {
|
|
|
}
|
|
|
}
|
|
|
if !еслиНайти {
|
|
|
- return true
|
|
|
+ сам.лог.Добавить("Шахта.проапгрейдить().фнКупить(): не надо\n")
|
|
|
+ return false, nil
|
|
|
}
|
|
|
// Пробуем улучшить шахту
|
|
|
_стр := strings.TrimPrefix(стр, "<a class=\"simple-but border mb5\" href=\"")
|
|
|
@@ -458,18 +470,18 @@ func (сам *Шахта) проапгрейдить() bool {
|
|
|
ссылка := "https://wartank.ru/building-upgrade/" + _стр
|
|
|
списСтр, ош = сам.сеть.ВебВоркер().Получ(ссылка)
|
|
|
if ош != nil {
|
|
|
- log.Printf("Шахта.проапгрейдить().фнКупить(): при GET-команде 'купить постройку шахты', err=\n\t%v\n", ош)
|
|
|
- return false
|
|
|
+ сам.лог.Добавить("ОШИБКА Шахта.проапгрейдить().фнКупить(): при GET-команде 'купить постройку шахты', err=\n\t%v\n", ош)
|
|
|
+ return false, fmt.Errorf("не получены строки")
|
|
|
}
|
|
|
// Проверить, что постройка состоялась
|
|
|
for _, стр := range списСтр {
|
|
|
if strings.Contains(стр, "ILinkListener-upgradeLink-link") {
|
|
|
- log.Printf("Шахта.проапгрейдить().фнКупить(): покупка шахты не прошла\n\tlink=%v\n\tстр=\n\t%v\n", ссылка, стр)
|
|
|
- return false // Покупка не оплачена
|
|
|
+ сам.лог.Добавить("ОШИБКА Шахта.проапгрейдить().фнКупить(): покупка шахты не прошла\n\tlink=%v\n\tстр=\n\t%v\n", ссылка, стр)
|
|
|
+ return false, fmt.Errorf("покупка шахты не прошла") // Покупка не оплачена
|
|
|
}
|
|
|
}
|
|
|
- log.Printf("+++++Шахта.проапгрейдить().фнКупить(): покупка шахты прошла\n")
|
|
|
- return true
|
|
|
+ сам.лог.Добавить("Шахта.проапгрейдить().фнКупить(): покупка шахты прошла\n")
|
|
|
+ return true, nil
|
|
|
}
|
|
|
|
|
|
фнПодтверждение := func() bool {
|
|
|
@@ -481,6 +493,7 @@ func (сам *Шахта) проапгрейдить() bool {
|
|
|
}
|
|
|
}
|
|
|
if !еслиНайти {
|
|
|
+ сам.лог.Добавить("Шахта.проапгрейдить().фнПодтверждение(): нет подтверждения\n")
|
|
|
return true
|
|
|
}
|
|
|
// Пробуем построить шахту
|
|
|
@@ -490,29 +503,35 @@ func (сам *Шахта) проапгрейдить() bool {
|
|
|
ссылка := "https://wartank.ru" + _стр
|
|
|
списСтр, ош = сам.сеть.ВебВоркер().Получ(ссылка)
|
|
|
if ош != nil {
|
|
|
- log.Printf("Шахта.проапгрейдить().фнПодтверждение(): при GET-команде 'подтвердить постройку шахты', err=\n\t%v\n", ош)
|
|
|
+ сам.лог.Добавить("Шахта.проапгрейдить().фнПодтверждение(): при GET-команде 'подтвердить постройку шахты', err=\n\t%v\n", ош)
|
|
|
return false
|
|
|
}
|
|
|
// Проверить, что постройка состоялась
|
|
|
for _, стр := range списСтр {
|
|
|
if strings.Contains(стр, "<title>Вы сделали слишком большую паузу</title>") {
|
|
|
- log.Printf("Шахта.проапгрейдить().фнПодтверждение(): подтверждение покупка шахты не прошла\n\tlink=%v\n\tстр=\n\t%v\n", ссылка, стр)
|
|
|
+ сам.лог.Добавить("Шахта.проапгрейдить().фнПодтверждение(): подтверждение покупка шахты не прошла\n\tlink=%v\n\tстр=\n\t%v\n", ссылка, стр)
|
|
|
return false // Покупка не оплачена
|
|
|
}
|
|
|
}
|
|
|
- log.Printf("+++++Шахта.проапгрейдить().фнПодтверждение(): подтверждение покупка шахты прошла\n")
|
|
|
+ сам.лог.Добавить("Шахта.проапгрейдить().фнПодтверждение(): подтверждение покупка шахты прошла\n")
|
|
|
return true
|
|
|
}
|
|
|
|
|
|
фнКомплекс := func() {
|
|
|
+ сам.лог.Добавить("Шахта.проапгрейдить().фнКомплекс()\n")
|
|
|
count := 5
|
|
|
for count > 0 {
|
|
|
- if фнКупить() {
|
|
|
+ еслиОк, ош := фнКупить()
|
|
|
+ switch {
|
|
|
+ case ош == nil && еслиОк: // покупка шахты прошла
|
|
|
if фнПодтверждение() {
|
|
|
- break
|
|
|
+ return
|
|
|
}
|
|
|
+ case ош == nil && !еслиОк: // покупка шахты не нужна
|
|
|
+ return
|
|
|
+ case ош != nil: // ошибка при работе с сетью
|
|
|
+ count--
|
|
|
}
|
|
|
- count--
|
|
|
}
|
|
|
}
|
|
|
фнКомплекс()
|
|
|
@@ -522,11 +541,11 @@ func (сам *Шахта) проапгрейдить() bool {
|
|
|
// Сделать -- вызывается с базы, если она обнаружила, что пора сделать продукцию
|
|
|
func (сам *Шахта) Сделать() {
|
|
|
if ош := сам.сеть.Обновить(); ош != nil {
|
|
|
- log.Printf("ERRO Шахта.Сделать(): при обновлении lstMine, err=\n\t%v\n", ош)
|
|
|
+ сам.лог.Добавить("ERRO Шахта.Сделать(): при обновлении lstMine, err=\n\t%v\n", ош)
|
|
|
return
|
|
|
}
|
|
|
if err := сам.выбратьМеталл(); err != nil {
|
|
|
- log.Printf("ERRO Шахта.Сделать(): при выборе продукции, err=\n\t%v\n", err)
|
|
|
+ сам.лог.Добавить("ERRO Шахта.Сделать(): при выборе продукции, err=\n\t%v\n", err)
|
|
|
return
|
|
|
}
|
|
|
работа := сам.СценаРежим().Работа()
|
|
|
@@ -544,7 +563,7 @@ func (сам *Шахта) Сделать() {
|
|
|
for !сам.свинецСделать() {
|
|
|
}
|
|
|
default:
|
|
|
- log.Printf("ERRO Шахта.Сделать(): неизвестный режим производства, режим=%q\n", работа)
|
|
|
+ сам.лог.Добавить("ERRO Шахта.Сделать(): неизвестный режим производства, режим=%q\n", работа)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -702,7 +721,7 @@ func (сам *Шахта) рудаСделать() bool {
|
|
|
return false
|
|
|
}
|
|
|
if err := сам.Уст(alias.Время(strTime)); err != nil {
|
|
|
- log.Printf("ERRO Шахта.сделатьРуду(): при установке времени ожидания добычи руды(%v)\n\terr=%v\n", strTime, err)
|
|
|
+ сам.лог.Добавить("ERRO Шахта.сделатьРуду(): при установке времени ожидания добычи руды(%v)\n\terr=%v\n", strTime, err)
|
|
|
}
|
|
|
lstNum := strings.Split(strNum, `Кол-во: <span class="green2">`)
|
|
|
strNum = lstNum[1]
|
|
|
@@ -764,7 +783,7 @@ func (сам *Шахта) железоСделать() bool {
|
|
|
return false
|
|
|
}
|
|
|
if err := сам.Уст(alias.Время(strTime)); err != nil {
|
|
|
- log.Printf("ERRO Mine.makeFerrum(): при установке времени производства железа(%v)\n\terr=%v\n", strTime, err)
|
|
|
+ сам.лог.Добавить("ERRO Mine.makeFerrum(): при установке времени производства железа(%v)\n\terr=%v\n", strTime, err)
|
|
|
}
|
|
|
lstNum := strings.Split(strNum, `Кол-во: <span class="green2">`)
|
|
|
strNum = lstNum[1]
|
|
|
@@ -823,7 +842,7 @@ func (сам *Шахта) стальСделать() bool {
|
|
|
return false
|
|
|
}
|
|
|
if err := сам.Уст(alias.Время(strTime)); err != nil {
|
|
|
- log.Printf("ERRO Mine.makeSteel(): при установке времени производства железа(%v)\n\terr=%v\n", strTime, err)
|
|
|
+ сам.лог.Добавить("ERRO Mine.makeSteel(): при установке времени производства железа(%v)\n\terr=%v\n", strTime, err)
|
|
|
}
|
|
|
lstNum := strings.Split(strNum, `Кол-во: <span class="green2">`)
|
|
|
strNum = lstNum[1]
|
|
|
@@ -882,7 +901,7 @@ func (сам *Шахта) свинецСделать() bool {
|
|
|
return false
|
|
|
}
|
|
|
if err := сам.Уст(alias.Время(strTime)); err != nil {
|
|
|
- log.Printf("ERRO Шахта.сделатьСвинец(): при установке времени производства железа(%v)\n\terr=%v\n", strTime, err)
|
|
|
+ сам.лог.Добавить("ERRO Шахта.сделатьСвинец(): при установке времени производства железа(%v)\n\terr=%v\n", strTime, err)
|
|
|
}
|
|
|
lstNum := strings.Split(strNum, `Кол-во: <span class="green2">`)
|
|
|
strNum = lstNum[1]
|