|
@@ -28,6 +28,7 @@ type Шахта struct {
|
|
|
сталь types.ИСтатПарам
|
|
сталь types.ИСтатПарам
|
|
|
свинец types.ИСтатПарам
|
|
свинец types.ИСтатПарам
|
|
|
numProduct types.ИСтатПарам
|
|
numProduct types.ИСтатПарам
|
|
|
|
|
+ уровень types.ИСтатПарам
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// НовШахта -- возвращает новый *Mine
|
|
// НовШахта -- возвращает новый *Mine
|
|
@@ -56,6 +57,10 @@ func НовШахта(база types.ИБаза) (*Шахта, error) {
|
|
|
if ош != nil {
|
|
if ош != nil {
|
|
|
return nil, fmt.Errorf("НовШахта(): при создании статистики числа добычи, ош=\n\t%w", ош)
|
|
return nil, fmt.Errorf("НовШахта(): при создании статистики числа добычи, ош=\n\t%w", ош)
|
|
|
}
|
|
}
|
|
|
|
|
+ уровень, ош := static_param.НовСтатПарам("уровень")
|
|
|
|
|
+ if ош != nil {
|
|
|
|
|
+ return nil, fmt.Errorf("НовШахта(): при создании статистики числа добычи, ош=\n\t%w", ош)
|
|
|
|
|
+ }
|
|
|
сам := &Шахта{
|
|
сам := &Шахта{
|
|
|
Секция: секция,
|
|
Секция: секция,
|
|
|
бот: база.Бот(),
|
|
бот: база.Бот(),
|
|
@@ -65,6 +70,7 @@ func НовШахта(база types.ИБаза) (*Шахта, error) {
|
|
|
сталь: сталь,
|
|
сталь: сталь,
|
|
|
свинец: свинец,
|
|
свинец: свинец,
|
|
|
numProduct: добычаЧисло,
|
|
numProduct: добычаЧисло,
|
|
|
|
|
+ уровень: уровень,
|
|
|
}
|
|
}
|
|
|
сам.сеть, ош = minenet.NewMineNet(сам)
|
|
сам.сеть, ош = minenet.NewMineNet(сам)
|
|
|
if ош != nil {
|
|
if ош != nil {
|
|
@@ -80,7 +86,7 @@ func (сам *Шахта) Пуск() error {
|
|
|
|
|
|
|
|
// пуск -- запускает обработку шахты
|
|
// пуск -- запускает обработку шахты
|
|
|
func (сам *Шахта) пуск() {
|
|
func (сам *Шахта) пуск() {
|
|
|
- сам.SetCountDown(1)
|
|
|
|
|
|
|
+ time.Sleep(time.Second * 3)
|
|
|
for {
|
|
for {
|
|
|
select {
|
|
select {
|
|
|
case <-сам.бот.Кнт().Done():
|
|
case <-сам.бот.Кнт().Done():
|
|
@@ -89,17 +95,135 @@ func (сам *Шахта) пуск() {
|
|
|
case <-сам.ВремяОпрос().КаналСиг():
|
|
case <-сам.ВремяОпрос().КаналСиг():
|
|
|
default:
|
|
default:
|
|
|
log.Printf("Шахта.пуск()\n")
|
|
log.Printf("Шахта.пуск()\n")
|
|
|
- руда := сам.Руда().Получ()
|
|
|
|
|
- if руда == 0 {
|
|
|
|
|
- time.Sleep(time.Second * 5)
|
|
|
|
|
- сам.бот.Ангар().РесурсыОбновить()
|
|
|
|
|
|
|
+ if сам.уровеньОбновить() {
|
|
|
|
|
+ сам.ускорениеПровер()
|
|
|
|
|
+ руда := сам.Руда().Получ()
|
|
|
|
|
+ if руда == 0 {
|
|
|
|
|
+ time.Sleep(time.Second * 5)
|
|
|
|
|
+ сам.бот.Ангар().РесурсыОбновить()
|
|
|
|
|
+ }
|
|
|
|
|
+ сам.Сделать()
|
|
|
}
|
|
}
|
|
|
- сам.Сделать()
|
|
|
|
|
time.Sleep(time.Minute * 5)
|
|
time.Sleep(time.Minute * 5)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// Проверяет ускорение строительства
|
|
|
|
|
+func (сам *Шахта) ускорениеПровер() {
|
|
|
|
|
+ списСтр, ош := сам.сеть.Клиент().Get("http://wartank.ru/buildings")
|
|
|
|
|
+ if ош != nil {
|
|
|
|
|
+ log.Printf("Шахта.ускорениеПровер(): in make request, err=\n\t%v\n", ош)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ // <span class="green2">Шахта - 0</span><br/>
|
|
|
|
|
+ var (
|
|
|
|
|
+ еслиНайти = false
|
|
|
|
|
+ стр = ""
|
|
|
|
|
+ )
|
|
|
|
|
+ for _, стр = range списСтр {
|
|
|
|
|
+ if strings.Contains(стр, `<span class="green2">Шахта - `) {
|
|
|
|
|
+ еслиНайти = true
|
|
|
|
|
+ break
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if !еслиНайти {
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// Уровень -- возвращает уровень шахты
|
|
|
|
|
+func (сам *Шахта) Уровень() types.ИСтатПарам {
|
|
|
|
|
+ return сам.уровень
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// Обновляет текущий уровень шахты (может быть не построена)
|
|
|
|
|
+func (сам *Шахта) уровеньОбновить() bool {
|
|
|
|
|
+ списСтр := сам.СписПолучить()
|
|
|
|
|
+ if len(списСтр) == 0 {
|
|
|
|
|
+ var ош error
|
|
|
|
|
+ списСтр, ош = сам.сеть.Клиент().Get("http://wartank.ru/buildings")
|
|
|
|
|
+ if ош != nil {
|
|
|
|
|
+ log.Printf("Шахта.уровеньОбновить(): in make request, err=\n\t%v\n", ош)
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // <span class="green2">Шахта - 0</span><br/>
|
|
|
|
|
+ var (
|
|
|
|
|
+ еслиНайти = false
|
|
|
|
|
+ стр = ""
|
|
|
|
|
+ )
|
|
|
|
|
+ for _, стр = range списСтр {
|
|
|
|
|
+ if strings.Contains(стр, `<span class="green2">Шахта - `) {
|
|
|
|
|
+ еслиНайти = true
|
|
|
|
|
+ break
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if !еслиНайти {
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+ _стр := strings.TrimPrefix(стр, `<span class="green2">Шахта - `)
|
|
|
|
|
+ _стр = strings.TrimSuffix(_стр, `</span><br/>`)
|
|
|
|
|
+ иУровень, ош := strconv.Atoi(_стр)
|
|
|
|
|
+ if ош != nil {
|
|
|
|
|
+ log.Printf("Шахта.уровеньОбновить(): строка уровня сбойная, стр=%q, ош=\n\t%v\n", стр, ош)
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+ сам.уровень.Уст(иУровень)
|
|
|
|
|
+ if иУровень == 0 { // шахту надо построить
|
|
|
|
|
+ сам.построить(списСтр)
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+ return true
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// Строит шахту принулевом уровне
|
|
|
|
|
+func (сам *Шахта) построить(списСтр []string) {
|
|
|
|
|
+ // <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
|
|
|
|
|
+ стр = ""
|
|
|
|
|
+ )
|
|
|
|
|
+ for _, стр = range списСтр {
|
|
|
|
|
+ if strings.Contains(стр, `href="building-upgrade/Mine"><span><span>Построить</span></span>`) {
|
|
|
|
|
+ еслиНайти = true
|
|
|
|
|
+ break
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if !еслиНайти {
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ // Пробуем построить шахту
|
|
|
|
|
+ _стр := strings.TrimPrefix(стр, `<td style="width:50%;padding-left:1px;"><a class="simple-but border mb5" href="`)
|
|
|
|
|
+ _стр = strings.TrimSuffix(_стр, `"><span><span>Построить</span></span></a></td>`)
|
|
|
|
|
+ ссылка := "https://wartank.ru/" + _стр
|
|
|
|
|
+ списСтр, ош := сам.сеть.Клиент().Get(ссылка)
|
|
|
|
|
+ if ош != nil {
|
|
|
|
|
+ log.Printf("ERRO Шахта.построить(): при GET-команде 'построить шахту', err=\n\t%v\n", ош)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ еслиНайти = false
|
|
|
|
|
+ // "<a class=\"simple-but border mb5\" href=\"Mine?14-1.ILinkListener-upgradeLink-link\">"
|
|
|
|
|
+ for _, стр = range списСтр {
|
|
|
|
|
+ if strings.Contains(стр, `ILinkListener-upgradeLink-link`) {
|
|
|
|
|
+ еслиНайти = true
|
|
|
|
|
+ break
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if !еслиНайти {
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ _стр = strings.TrimPrefix(стр, "<a class=\"simple-but border mb5\" href=\"")
|
|
|
|
|
+ _стр = strings.TrimSuffix(_стр, "\">")
|
|
|
|
|
+ // http://wartank.ru/building-upgrade/Mine?16-1.ILinkListener-upgradeLink-link
|
|
|
|
|
+ ссылка = "https://wartank.ru/building-upgrade/" + _стр
|
|
|
|
|
+ _, ош = сам.сеть.Клиент().Get(ссылка)
|
|
|
|
|
+ if ош != nil {
|
|
|
|
|
+ log.Printf("ERRO Шахта.построить(): при GET-команде 'купить постройку шахты', err=\n\t%v\n", ош)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// Сделать -- вызывается с базы, если она обнаружила, что пора сделать продукцию
|
|
// Сделать -- вызывается с базы, если она обнаружила, что пора сделать продукцию
|
|
|
func (сам *Шахта) Сделать() {
|
|
func (сам *Шахта) Сделать() {
|
|
|
работа := сам.РежимТекущ().Режим()
|
|
работа := сам.РежимТекущ().Режим()
|
|
@@ -111,6 +235,9 @@ func (сам *Шахта) Сделать() {
|
|
|
log.Printf("ERRO Шахта.Сделать(): при обновлении lstMine, err=\n\t%v\n", err)
|
|
log.Printf("ERRO Шахта.Сделать(): при обновлении lstMine, err=\n\t%v\n", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
+ if !сам.уровеньОбновить() {
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
if err := сам.выбратьМеталл(); err != nil {
|
|
if err := сам.выбратьМеталл(); err != nil {
|
|
|
log.Printf("ERRO Шахта.Сделать(): при выборе продукции, err=\n\t%v\n", err)
|
|
log.Printf("ERRO Шахта.Сделать(): при выборе продукции, err=\n\t%v\n", err)
|
|
|
return
|
|
return
|