|
@@ -1,841 +0,0 @@
|
|
|
-// package mine -- объект шахты на базе
|
|
|
|
|
-package mine
|
|
|
|
|
-
|
|
|
|
|
-import (
|
|
|
|
|
- "context"
|
|
|
|
|
- "fmt"
|
|
|
|
|
- "strconv"
|
|
|
|
|
- "strings"
|
|
|
|
|
- "time"
|
|
|
|
|
-
|
|
|
|
|
- "wartank/app/lev0/alias"
|
|
|
|
|
- . "wartank/app/lev0/types"
|
|
|
|
|
- "wartank/app/lev1/stat_param"
|
|
|
|
|
- "wartank/app/lev2/arena"
|
|
|
|
|
-)
|
|
|
|
|
-
|
|
|
|
|
-// Шахта -- объект шахты на базе
|
|
|
|
|
-type Шахта struct {
|
|
|
|
|
- ИАрена
|
|
|
|
|
- лог ИВебЛог
|
|
|
|
|
- бот ИБот
|
|
|
|
|
- база ИАренаБаза
|
|
|
|
|
- руда ИСтатПарам
|
|
|
|
|
- железо ИСтатПарам
|
|
|
|
|
- сталь ИСтатПарам
|
|
|
|
|
- свинец ИСтатПарам
|
|
|
|
|
- уровень ИСтатПарам
|
|
|
|
|
- продуктИмя string // Что сейчас делается
|
|
|
|
|
- продуктКол ИСтатПарам // Сколько делается прямо сейчас
|
|
|
|
|
- продуктВремя string // Сколько осталось времени прямо сейчас
|
|
|
|
|
- кнт context.Context // контекст шахты
|
|
|
|
|
- фнОтмена func() // Функция отмены шахты
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// НовШахта -- возвращает новый *Mine
|
|
|
|
|
-func НовШахта(конт ИБотКонтекст, база ИАренаБаза) (ИАренаШахта, error) {
|
|
|
|
|
- кнт, фнОтмена := context.WithCancel(база.Контекст())
|
|
|
|
|
- сам := &Шахта{
|
|
|
|
|
- бот: база.Бот(),
|
|
|
|
|
- база: база,
|
|
|
|
|
- руда: stat_param.НовСтатПарам("руда"),
|
|
|
|
|
- железо: stat_param.НовСтатПарам("железо"),
|
|
|
|
|
- сталь: stat_param.НовСтатПарам("сталь"),
|
|
|
|
|
- свинец: stat_param.НовСтатПарам("свинец"),
|
|
|
|
|
- продуктКол: stat_param.НовСтатПарам("кол-во"),
|
|
|
|
|
- уровень: stat_param.НовСтатПарам("уровень"),
|
|
|
|
|
- кнт: кнт,
|
|
|
|
|
- фнОтмена: фнОтмена,
|
|
|
|
|
- }
|
|
|
|
|
- аренаКонфиг := arena.АренаКонфиг{
|
|
|
|
|
- Бот_: сам.бот,
|
|
|
|
|
- АренаИмя_: "Шахта",
|
|
|
|
|
- СтрКонтроль_: `<span class="green2">Руда</span><br/>`,
|
|
|
|
|
- ФнПуск_: сам.пуск,
|
|
|
|
|
- СтрУрл_: "https://wartank.ru/production/Mine",
|
|
|
|
|
- }
|
|
|
|
|
- сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
|
|
|
|
|
- сам.лог = сам.ВебЛог()
|
|
|
|
|
- go сам.пуск()
|
|
|
|
|
- сам.лог.ОтклВывод()
|
|
|
|
|
- сам.лог.Добавить("Шахта.НовШахта(): бот=%q\n", сам.бот.Имя())
|
|
|
|
|
- return сам, nil
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// пуск -- запускает обработку шахты
|
|
|
|
|
-func (сам *Шахта) пуск() {
|
|
|
|
|
- фнРабота := func() {
|
|
|
|
|
- defer func() {
|
|
|
|
|
- for сам.ВремяОстат().ПолучМилСек() > 0 {
|
|
|
|
|
- time.Sleep(time.Second * 5)
|
|
|
|
|
- }
|
|
|
|
|
- }()
|
|
|
|
|
- сам.лог.Добавить("Шахта.пуск().фнРабота(): бот=%q\n", сам.бот.Имя())
|
|
|
|
|
- { // Построить
|
|
|
|
|
- счёт := 5
|
|
|
|
|
- for счёт > 0 {
|
|
|
|
|
- еcлиНет := сам.построить()
|
|
|
|
|
- if еcлиНет {
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- счёт--
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- { // Забрать из шахты
|
|
|
|
|
- счёт := 5
|
|
|
|
|
- for счёт > 0 { // Забрать из шахты
|
|
|
|
|
- if сам.шахтаЗабрать() {
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- счёт--
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- сам.уровеньОбновить()
|
|
|
|
|
- сам.ускорениеПровер()
|
|
|
|
|
- { // Проапгрейдить
|
|
|
|
|
- счёт := 5
|
|
|
|
|
- for счёт > 0 {
|
|
|
|
|
- if сам.проапгрейдить() {
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- счёт--
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- { // Получить продукцию
|
|
|
|
|
- счёт := 5
|
|
|
|
|
- for счёт > 0 {
|
|
|
|
|
- счёт--
|
|
|
|
|
- еслиПолуч, ош := сам.количествоПолучить()
|
|
|
|
|
- if ош != nil {
|
|
|
|
|
- continue
|
|
|
|
|
- }
|
|
|
|
|
- if еслиПолуч {
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- сам.Сделать()
|
|
|
|
|
- }
|
|
|
|
|
- for {
|
|
|
|
|
- select {
|
|
|
|
|
- case <-сам.кнт.Done():
|
|
|
|
|
- return
|
|
|
|
|
- case <-сам.ВремяОстат().КаналСиг():
|
|
|
|
|
- фнРабота()
|
|
|
|
|
- default:
|
|
|
|
|
- фнРабота()
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// Проверяет количество продукта в шахте
|
|
|
|
|
-func (сам *Шахта) количествоПолучить() (bool, error) {
|
|
|
|
|
- сам.лог.Добавить("Шахта.количествоПолучить()\n")
|
|
|
|
|
- var (
|
|
|
|
|
- ind int
|
|
|
|
|
- strOut string
|
|
|
|
|
- еслиНайдено bool
|
|
|
|
|
- режим string
|
|
|
|
|
- )
|
|
|
|
|
- lstMine := сам.Сеть().ВебВоркер().Получ("https://wartank.ru/buildings")
|
|
|
|
|
- /*
|
|
|
|
|
- Режим (руда-1):
|
|
|
|
|
- <td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/ore.png?2" alt="ore"/> 1</div></td>
|
|
|
|
|
-
|
|
|
|
|
- Время (+8 строк):
|
|
|
|
|
- <td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/ore.png?2" alt="ore"/> 1</div></td>
|
|
|
|
|
- */
|
|
|
|
|
- for ind, strOut = range lstMine {
|
|
|
|
|
- // Руда текущее
|
|
|
|
|
- if strings.Contains(strOut, `src="/images/icons/ore.png?2" alt="ore"`) {
|
|
|
|
|
- // <td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/ore.png?2" alt="ore"/> 1</div></td>
|
|
|
|
|
- еслиНайдено = true
|
|
|
|
|
- режим = "руда"
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- // Железо текущее
|
|
|
|
|
- if strings.Contains(strOut, `src="/images/icons/iron.png?2" alt="iron"`) {
|
|
|
|
|
- // <td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/iron.png?2" alt="iron"/> 2</div></td>
|
|
|
|
|
- еслиНайдено = true
|
|
|
|
|
- режим = "железо"
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- // Сталь текущее
|
|
|
|
|
- if strings.Contains(strOut, `src="/images/icons/steel.png?2" alt="steel"`) {
|
|
|
|
|
- // <td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/steel.png?2" alt="iron"/> 2</div></td>
|
|
|
|
|
- еслиНайдено = true
|
|
|
|
|
- режим = "сталь"
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- // Свинец текущее
|
|
|
|
|
- if strings.Contains(strOut, `src="/images/icons/plumbum.png?2" alt="plumbum"`) {
|
|
|
|
|
- // <td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/plumbum.png?2" alt="iron"/> 2</div></td>
|
|
|
|
|
- еслиНайдено = true
|
|
|
|
|
- режим = "свинец"
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- if !еслиНайдено {
|
|
|
|
|
- сам.лог.Добавить("Шахта.количествоПолучить(): не надо\n")
|
|
|
|
|
- return true, nil
|
|
|
|
|
- }
|
|
|
|
|
- switch режим {
|
|
|
|
|
- case "руда":
|
|
|
|
|
- _число := strings.TrimPrefix(strOut, `<td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/ore.png?2" alt="ore"/> `)
|
|
|
|
|
- _число = strings.TrimSuffix(_число, `</div></td>`)
|
|
|
|
|
- iNum, err := strconv.Atoi(_число)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- сам.лог.Добавить("ОШИБКА Шахта.количествоПолучить(): кол-во руды (%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 {
|
|
|
|
|
- сам.лог.Добавить("ОШИБКА Шахта.количествоПолучить(): кол-во железа (%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 {
|
|
|
|
|
- сам.лог.Добавить("ОШИБКА Шахта.количествоПолучить(): кол-во стали (%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 {
|
|
|
|
|
- сам.лог.Добавить("ОШИБКА Шахта.количествоПолучить(): кол-во свинца (%v) не число, err=\n\t%v\n", _число, err)
|
|
|
|
|
- return false, fmt.Errorf("")
|
|
|
|
|
- }
|
|
|
|
|
- сам.продуктКол.Уст(iNum)
|
|
|
|
|
- сам.продуктИмя = "свинец"
|
|
|
|
|
- сам.лог.Добавить("Шахта.количествоПолучить(): кол-во свинца = %v\n", iNum)
|
|
|
|
|
- default:
|
|
|
|
|
- сам.лог.Добавить("Шахта.количествоПолучить(): неизвестный режим (%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]
|
|
|
|
|
- // <td><div class="value-block lh1"><span><span>00:19:53</span></span></div></td>
|
|
|
|
|
- strTime = strings.TrimPrefix(strTime, `<td><div class="value-block lh1"><span><span>`)
|
|
|
|
|
- strTime = strings.TrimSuffix(strTime, `</span></span></div></td>`)
|
|
|
|
|
- сам.продуктВремя = strTime
|
|
|
|
|
- if err := сам.ОбратВремяУст(alias.Время(strTime)); err != nil {
|
|
|
|
|
- сам.лог.Добавить("ОШИБКА Шахта.количествоПолучить(): при установке времени производства(%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")
|
|
|
|
|
- // <a class="simple-but border" href="buildings?35-1.ILinkListener-buildings-0-building-rootBlock-actionPanel-takeProductionLink"><span><span>Забрать</span></span></a>
|
|
|
|
|
- for _, strOut = range списШахта {
|
|
|
|
|
- if strings.Contains(strOut, `.ILinkListener-buildings-0-building-rootBlock-actionPanel-takeProductionLink`) {
|
|
|
|
|
- еслиНайдено = true
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- if !еслиНайдено {
|
|
|
|
|
- сам.лог.Добавить("Шахта.шахтаЗабрать(): не надо\n")
|
|
|
|
|
- return true
|
|
|
|
|
- }
|
|
|
|
|
- _ссылка := strings.TrimPrefix(strOut, `<a class="simple-but border" href="`)
|
|
|
|
|
- _ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Забрать</span></span></a>`)
|
|
|
|
|
- ссылка := "https://wartank.ru/" + _ссылка
|
|
|
|
|
- // http://wartank.ru/buildings?5-1.ILinkListener-buildings-0-building-rootBlock-actionPanel-takeProductionLink
|
|
|
|
|
- lstBase1 := сам.Сеть().ВебВоркер().Получ(ссылка)
|
|
|
|
|
- if err := сам.СтрОбновить(lstBase1); err != nil {
|
|
|
|
|
- сам.лог.Добавить("Шахта.шахтаЗабрать(): при обновлении lstMine, err=\n\t%v\n", err)
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- сам.лог.Добавить("Шахта.шахтаЗабрать(): ОК\n")
|
|
|
|
|
- return true
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// Проверяет ускорение строительства FIXME: не работает
|
|
|
|
|
-func (сам *Шахта) ускорениеПровер() {
|
|
|
|
|
- сам.лог.Добавить("")
|
|
|
|
|
- списСтр := сам.Сеть().ВебВоркер().Получ("http://wartank.ru/buildings")
|
|
|
|
|
- // <span class="green2">Шахта - 0</span><br/>
|
|
|
|
|
- var (
|
|
|
|
|
- еслиНайти bool
|
|
|
|
|
- стр string
|
|
|
|
|
- )
|
|
|
|
|
- for _, стр = range списСтр {
|
|
|
|
|
- if strings.Contains(стр, `<span class="green2">Шахта - `) {
|
|
|
|
|
- еслиНайти = true
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- if !еслиНайти {
|
|
|
|
|
- сам.лог.Добавить("Шахта.ускорениеПровер(): не надо\n")
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
- сам.лог.Добавить("Шахта.ускорениеПровер(): надо\n")
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// Уровень -- возвращает уровень шахты
|
|
|
|
|
-func (сам *Шахта) Уровень() ИСтатПарам {
|
|
|
|
|
- return сам.уровень
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// Обновляет текущий уровень шахты (может быть не построена)
|
|
|
|
|
-func (сам *Шахта) уровеньОбновить() bool {
|
|
|
|
|
- сам.лог.Добавить("Шахта.уровеньОбновить()\n")
|
|
|
|
|
- списСтр := сам.Сеть().ВебВоркер().Получ("http://wartank.ru/buildings")
|
|
|
|
|
- // <span class="green2">Шахта - 0</span><br/>
|
|
|
|
|
- var (
|
|
|
|
|
- еслиНайти = false
|
|
|
|
|
- стр = ""
|
|
|
|
|
- )
|
|
|
|
|
- for _, стр = range списСтр {
|
|
|
|
|
- if strings.Contains(стр, `<span class="green2">Шахта - `) {
|
|
|
|
|
- еслиНайти = true
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- if !еслиНайти {
|
|
|
|
|
- сам.лог.Добавить("Шахта.уровеньОбновить(): нет уровня\n")
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- _стр := strings.TrimPrefix(стр, `<span class="green2">Шахта - `)
|
|
|
|
|
- _стр = strings.TrimSuffix(_стр, `</span><br/>`)
|
|
|
|
|
- иУровень, ош := strconv.Atoi(_стр)
|
|
|
|
|
- if ош != nil {
|
|
|
|
|
- сам.лог.Добавить("ОШИБКА Шахта.уровеньОбновить(): строка уровня сбойная, стр=%q, ош=\n\t%v\n", стр, ош)
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- сам.уровень.Уст(иУровень)
|
|
|
|
|
- сам.лог.Добавить("Шахта.уровеньОбновить(): уровень=%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
|
|
|
|
|
- стр = ""
|
|
|
|
|
- )
|
|
|
|
|
- списСтр := сам.Сеть().ВебВоркер().Получ("http://wartank.ru/buildings")
|
|
|
|
|
- for _, стр = range списСтр {
|
|
|
|
|
- if strings.Contains(стр, `href="building-upgrade/Mine"><span><span>Построить</span></span>`) {
|
|
|
|
|
- еслиНайти = true
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- if !еслиНайти {
|
|
|
|
|
- сам.лог.Добавить("Шахта.построить(): не надо\n")
|
|
|
|
|
- return true
|
|
|
|
|
- }
|
|
|
|
|
- // Пробуем построить шахту
|
|
|
|
|
- _стр := 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/" + _стр
|
|
|
|
|
- списСтр = сам.Сеть().ВебВоркер().Получ(ссылка)
|
|
|
|
|
- еслиНайти = 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 !еслиНайти {
|
|
|
|
|
- сам.лог.Добавить("Шахта.построить(): не найдена команда постройки\n")
|
|
|
|
|
- return true
|
|
|
|
|
- }
|
|
|
|
|
- _стр = 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/" + _стр
|
|
|
|
|
- _ = сам.Сеть().ВебВоркер().Получ(ссылка)
|
|
|
|
|
- return true
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// Пытается проапгрейдить топливный склад
|
|
|
|
|
-func (сам *Шахта) проапгрейдить() bool {
|
|
|
|
|
- сам.лог.Добавить("Шахта.проапгрейдить()\n")
|
|
|
|
|
- var (
|
|
|
|
|
- еслиНайти = false
|
|
|
|
|
- списСтр []string
|
|
|
|
|
- стр = ""
|
|
|
|
|
- )
|
|
|
|
|
- фнКупить := func() (bool, error) {
|
|
|
|
|
- defer time.Sleep(time.Millisecond * 1000)
|
|
|
|
|
- списСтр = сам.Сеть().ВебВоркер().Получ("https://wartank.ru/building-upgrade/Mine")
|
|
|
|
|
- for _, стр = range списСтр {
|
|
|
|
|
- // <a class="simple-but border mb5" href="Mine?5-1.ILinkListener-upgradeLink-link">
|
|
|
|
|
- if strings.Contains(стр, `ILinkListener-upgradeLink-link`) {
|
|
|
|
|
- еслиНайти = true
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- if !еслиНайти {
|
|
|
|
|
- сам.лог.Добавить("Шахта.проапгрейдить().фнКупить(): не надо\n")
|
|
|
|
|
- return false, nil
|
|
|
|
|
- }
|
|
|
|
|
- // Пробуем улучшить шахту
|
|
|
|
|
- _стр := strings.TrimPrefix(стр, "<a class=\"simple-but border mb5\" href=\"")
|
|
|
|
|
- _стр = strings.TrimSuffix(_стр, "\">")
|
|
|
|
|
- // https://wartank.ru/building-upgrade/Mine?4-1.ILinkListener-upgradeLink-link
|
|
|
|
|
- // <a class="simple-but border mb5" href="FuelStorage?50-1.ILinkListener-upgradeLink-link">
|
|
|
|
|
- ссылка := "https://wartank.ru/building-upgrade/" + _стр
|
|
|
|
|
- списСтр = сам.Сеть().ВебВоркер().Получ(ссылка)
|
|
|
|
|
- // Проверить, что постройка состоялась
|
|
|
|
|
- for _, стр := range списСтр {
|
|
|
|
|
- if strings.Contains(стр, "ILinkListener-upgradeLink-link") {
|
|
|
|
|
- сам.лог.Добавить("ОШИБКА Шахта.проапгрейдить().фнКупить(): покупка шахты не прошла\n\tlink=%v\n\tстр=\n\t%v\n", ссылка, стр)
|
|
|
|
|
- return false, fmt.Errorf("покупка шахты не прошла") // Покупка не оплачена
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- сам.лог.Добавить("Шахта.проапгрейдить().фнКупить(): покупка шахты прошла\n")
|
|
|
|
|
- return true, nil
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- фнПодтверждение := func() bool {
|
|
|
|
|
- for _, стр = range списСтр {
|
|
|
|
|
- // <a class="simple-but border w50 mXa mb10" w:id="confirmLink" href="../wicket/page?7-1.ILinkListener-confirmLink"><span><span>да, подтверждаю</span></span></a>
|
|
|
|
|
- if strings.Contains(стр, `ILinkListener-confirmLink`) {
|
|
|
|
|
- еслиНайти = true
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- if !еслиНайти {
|
|
|
|
|
- сам.лог.Добавить("Шахта.проапгрейдить().фнПодтверждение(): нет подтверждения\n")
|
|
|
|
|
- return true
|
|
|
|
|
- }
|
|
|
|
|
- // Пробуем построить шахту
|
|
|
|
|
- _стр := strings.TrimPrefix(стр, `<a class="simple-but border w50 mXa mb10" w:id="confirmLink" href="..`)
|
|
|
|
|
- _стр = strings.TrimSuffix(_стр, `"><span><span>да, подтверждаю</span></span></a>`)
|
|
|
|
|
- // https://wartank.ru/wicket/page?6-1.ILinkListener-confirmLink
|
|
|
|
|
- ссылка := "https://wartank.ru" + _стр
|
|
|
|
|
- списСтр = сам.Сеть().ВебВоркер().Получ(ссылка)
|
|
|
|
|
- // Проверить, что постройка состоялась
|
|
|
|
|
- for _, стр := range списСтр {
|
|
|
|
|
- if strings.Contains(стр, "<title>Вы сделали слишком большую паузу</title>") {
|
|
|
|
|
- сам.лог.Добавить("Шахта.проапгрейдить().фнПодтверждение(): подтверждение покупка шахты не прошла\n\tlink=%v\n\tстр=\n\t%v\n", ссылка, стр)
|
|
|
|
|
- return false // Покупка не оплачена
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- сам.лог.Добавить("Шахта.проапгрейдить().фнПодтверждение(): подтверждение покупка шахты прошла\n")
|
|
|
|
|
- return true
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- фнКомплекс := func() {
|
|
|
|
|
- сам.лог.Добавить("Шахта.проапгрейдить().фнКомплекс()\n")
|
|
|
|
|
- count := 5
|
|
|
|
|
- for count > 0 {
|
|
|
|
|
- еслиОк, ош := фнКупить()
|
|
|
|
|
- switch {
|
|
|
|
|
- case ош == nil && еслиОк: // покупка шахты прошла
|
|
|
|
|
- if фнПодтверждение() {
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
- case ош == nil && !еслиОк: // покупка шахты не нужна
|
|
|
|
|
- return
|
|
|
|
|
- case ош != nil: // ошибка при работе с сетью
|
|
|
|
|
- count--
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- фнКомплекс()
|
|
|
|
|
- return true
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// Сделать -- вызывается с базы, если она обнаружила, что пора сделать продукцию
|
|
|
|
|
-func (сам *Шахта) Сделать() {
|
|
|
|
|
- сам.Обновить()
|
|
|
|
|
- if err := сам.выбратьМеталл(); err != nil {
|
|
|
|
|
- сам.лог.Добавить("ERRO Шахта.Сделать(): при выборе продукции, err=\n\t%v\n", err)
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
- работа := сам.АренаСостояние().РаботаИмя()
|
|
|
|
|
- switch работа {
|
|
|
|
|
- case "руда":
|
|
|
|
|
- for !сам.рудаСделать() {
|
|
|
|
|
- }
|
|
|
|
|
- case "железо":
|
|
|
|
|
- for !сам.железоСделать() {
|
|
|
|
|
- }
|
|
|
|
|
- case "сталь":
|
|
|
|
|
- for !сам.стальСделать() {
|
|
|
|
|
- }
|
|
|
|
|
- case "свинец":
|
|
|
|
|
- for !сам.свинецСделать() {
|
|
|
|
|
- }
|
|
|
|
|
- default:
|
|
|
|
|
- сам.лог.Добавить("ERRO Шахта.Сделать(): неизвестный режим производства, режим=%q\n", работа)
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// Свинец -- возвращает объект свинца
|
|
|
|
|
-func (сам *Шахта) Свинец() ИСтатПарам {
|
|
|
|
|
- return сам.свинец
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// Сталь -- возвращает объект стали
|
|
|
|
|
-func (сам *Шахта) Сталь() ИСтатПарам {
|
|
|
|
|
- return сам.сталь
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// Железо -- возвращает объект железа
|
|
|
|
|
-func (сам *Шахта) Железо() ИСтатПарам {
|
|
|
|
|
- return сам.железо
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// Руда -- возвращает объект руды
|
|
|
|
|
-func (сам *Шахта) Руда() ИСтатПарам {
|
|
|
|
|
- return сам.руда
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// ПродуктКолСейчас -- возвращает количество производимого продукта
|
|
|
|
|
-func (сам *Шахта) ПродуктКолСейчас() int {
|
|
|
|
|
- return сам.продуктКол.Получ()
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// ПродуктИмяСейчас -- возвращает имя производимого продукта
|
|
|
|
|
-func (сам *Шахта) ПродуктИмяСейчас() string {
|
|
|
|
|
- return сам.продуктИмя
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// ПродуктВремяСейчас -- сколько осталось времени до производства продукта
|
|
|
|
|
-func (сам *Шахта) ПродуктВремяСейчас() string {
|
|
|
|
|
- // сам.количествоПолучить()
|
|
|
|
|
- return сам.продуктВремя
|
|
|
|
|
- // return сам.Секция.ВремяОпрос().Стр()
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// Выбирает продукцию по возможности произвести и её количеству
|
|
|
|
|
-func (сам *Шахта) выбратьМеталл() error {
|
|
|
|
|
- var (
|
|
|
|
|
- диктПродукция = make(map[string]bool) // Словарь известной продукции
|
|
|
|
|
- lstMine = сам.СписПолучить()
|
|
|
|
|
- )
|
|
|
|
|
-
|
|
|
|
|
- фнВыбратьПродукт := func() { // вычисляет список допустимой продукции
|
|
|
|
|
- диктПродукция["руда"] = true // Руда есть всегда
|
|
|
|
|
- диктПродукция["железо"] = false
|
|
|
|
|
- диктПродукция["сталь"] = false
|
|
|
|
|
- диктПродукция["свинец"] = false
|
|
|
|
|
- for _, strProd := range lstMine { // Проверить руду
|
|
|
|
|
- if strings.Contains(strProd, `<span class="green2">Руда</span><br/>`) {
|
|
|
|
|
- диктПродукция["руда"] = true
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- for _, strProd := range lstMine { // Проверить руду
|
|
|
|
|
- if strings.Contains(strProd, `<span class="green2">Железо</span><br/>`) {
|
|
|
|
|
- диктПродукция["железо"] = true
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- for _, strProd := range lstMine { // Проверить сталь
|
|
|
|
|
- if strings.Contains(strProd, `<span class="green2">Сталь</span><br/>`) {
|
|
|
|
|
- диктПродукция["сталь"] = true
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- for _, strProd := range lstMine { // Проверить свинец
|
|
|
|
|
- if strings.Contains(strProd, `<span class="green2">Свинец</span><br/>`) {
|
|
|
|
|
- диктПродукция["свинец"] = true
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- фнВыбратьПродукт()
|
|
|
|
|
- сам.АренаСостояние().РаботаИмяУст("руда")
|
|
|
|
|
- руда := сам.Руда().Получ()
|
|
|
|
|
- железо := сам.Железо().Получ()
|
|
|
|
|
- if диктПродукция["железо"] {
|
|
|
|
|
- if руда > железо*2 {
|
|
|
|
|
- сам.АренаСостояние().РаботаИмяУст("железо")
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- сталь := сам.Сталь().Получ()
|
|
|
|
|
- if диктПродукция["сталь"] {
|
|
|
|
|
- if железо > сталь*2 {
|
|
|
|
|
- сам.АренаСостояние().РаботаИмяУст("сталь")
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- свинец := сам.Свинец().Получ()
|
|
|
|
|
- if диктПродукция["свинец"] {
|
|
|
|
|
- if сталь > свинец*2 {
|
|
|
|
|
- сам.АренаСостояние().РаботаИмяУст("свинец")
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- return nil
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// Создаёт руду
|
|
|
|
|
-func (сам *Шахта) рудаСделать() bool {
|
|
|
|
|
- time.Sleep(time.Millisecond * 55)
|
|
|
|
|
- lstMine, err := сам.Сеть().Get("https://wartank.ru/production/Mine")
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- // log._rintf("ERRO Шахта.сделатьРуду(): при GET-команде 'начать производство руды', err=\n\t%v\n", err)
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- var (
|
|
|
|
|
- инд int
|
|
|
|
|
- стрВых string
|
|
|
|
|
- strTime string
|
|
|
|
|
- strLink string
|
|
|
|
|
- strNum string
|
|
|
|
|
- еслиНайдено bool
|
|
|
|
|
- )
|
|
|
|
|
- for инд, стрВых = range lstMine {
|
|
|
|
|
- if strings.Contains(стрВых, `<span class="green2">Руда</span><br/>`) { // <span class="green2">Руда</span><br/>
|
|
|
|
|
- strNum = lstMine[инд+1]
|
|
|
|
|
- strTime = lstMine[инд+3]
|
|
|
|
|
- strLink = lstMine[инд+10]
|
|
|
|
|
- еслиНайдено = true
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- if !еслиНайдено {
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- if !strings.Contains(strLink, `>Начать производство<`) {
|
|
|
|
|
- return true
|
|
|
|
|
- }
|
|
|
|
|
- // "Mine?16-1.ILinkListener-productions-0-production-startProduceLink\"><span><span>Начать производство</span></span></a>"
|
|
|
|
|
- // "<a class=\"simple-but border\" href=\"Mine?16-1.ILinkListener-productions-0-production-startProduceLink\"><span><span>Начать производство</span></span></a>"
|
|
|
|
|
- _link := strings.TrimPrefix(strLink, `<a class="simple-but border" href="`)
|
|
|
|
|
- _link = strings.TrimSuffix(_link, "\"><span><span>Начать производство</span></span></a>")
|
|
|
|
|
- strLink = "https://wartank.ru/production/" + _link
|
|
|
|
|
- // https://wartank.ru/production/Mine?19-1.ILinkListener-productions-0-production-startProduceLink
|
|
|
|
|
- time.Sleep(time.Millisecond * 55)
|
|
|
|
|
- lstMine, err = сам.Сеть().Get(strLink)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- // log._rintf("ERRO Шахта.сделатьРуду(): при GET-команде 'начать производство руды', err=\n\t%v\n", err)
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- for _, стрВых = range lstMine {
|
|
|
|
|
- if strings.Contains(стрВых, `><span><span>Начать производство</span></span></a>`) {
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- if err = сам.СтрОбновить(lstMine); err != nil {
|
|
|
|
|
- // log._rintf("ERRO Шахта.сделатьРуду(): при обновлении lstMine, err=\n\t%v\n", err)
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- if err := сам.ОбратВремяУст(alias.Время(strTime)); err != nil {
|
|
|
|
|
- сам.лог.Добавить("ERRO Шахта.сделатьРуду(): при установке времени ожидания добычи руды(%v)\n\terr=%v\n", strTime, err)
|
|
|
|
|
- }
|
|
|
|
|
- lstNum := strings.Split(strNum, `Кол-во: <span class="green2">`)
|
|
|
|
|
- strNum = lstNum[1]
|
|
|
|
|
- lstNum = strings.Split(strNum, `</span><br/>`)
|
|
|
|
|
- strNum = lstNum[0]
|
|
|
|
|
- iNum, err := strconv.Atoi(strNum)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- // log._rintf("ERRO Шахта.сделатьРуду(): кол-во(%v) не число, err=\n\t%v\n", strNum, err)
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- сам.продуктКол.Уст(iNum)
|
|
|
|
|
- return true
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// Создаёт железо
|
|
|
|
|
-func (сам *Шахта) железоСделать() bool {
|
|
|
|
|
- var (
|
|
|
|
|
- lstMine = сам.СписПолучить()
|
|
|
|
|
- ind int
|
|
|
|
|
- strOut string
|
|
|
|
|
- strTime string
|
|
|
|
|
- strLink string
|
|
|
|
|
- strNum string
|
|
|
|
|
- еслиНайдено bool
|
|
|
|
|
- )
|
|
|
|
|
- for ind, strOut = range lstMine {
|
|
|
|
|
- if strings.Contains(strOut, `<span class="green2">Железо</span><br/>`) {
|
|
|
|
|
- // <span class="green2">Железо</span><br/>
|
|
|
|
|
- strNum = lstMine[ind+1]
|
|
|
|
|
- // Кол-во: <span class="green2">1</span><br/>
|
|
|
|
|
- strTime = lstMine[ind+3]
|
|
|
|
|
- // <a class="simple-but border" href="Mine?4-1.ILinkListener-productions-1-production-startProduceLink"><span><span>Начать производство</span></span></a>
|
|
|
|
|
- strLink = lstMine[ind+10]
|
|
|
|
|
- еслиНайдено = true
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- if !еслиНайдено {
|
|
|
|
|
- return true
|
|
|
|
|
- }
|
|
|
|
|
- lstLink := strings.Split(strLink, `<a class="simple-but border" href="`)
|
|
|
|
|
- strLink = lstLink[1]
|
|
|
|
|
- lstLink = strings.Split(strLink, `"><span><span>Начать производство</span></span></a>`)
|
|
|
|
|
- strLink = "https://wartank.ru/production/" + lstLink[0]
|
|
|
|
|
- // https://wartank.ru/production/Mine?4-1.ILinkListener-productions-1-production-startProduceLink
|
|
|
|
|
- lstMine, err := сам.Сеть().Get(strLink)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- // log._rintf("ERRO MineNet.makeFerrum(): при GET-команде 'начать производство железа', err=\n\t%v\n", err)
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- for _, strOut := range lstMine { // Проверка на базу
|
|
|
|
|
- if strings.Contains(strOut, `<title>База</title>`) {
|
|
|
|
|
- // log._rintf("ERRO MineNet.makeFerrum(): при обновлении lstMine найден lstBase")
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- if err = сам.СтрОбновить(lstMine); err != nil {
|
|
|
|
|
- // log._rintf("ERRO MineNet.makeFerrum(): при обновлении lstMine, err=\n\t%v\n", err)
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- if err := сам.ОбратВремяУст(alias.Время(strTime)); err != nil {
|
|
|
|
|
- сам.лог.Добавить("ERRO Mine.makeFerrum(): при установке времени производства железа(%v)\n\terr=%v\n", strTime, err)
|
|
|
|
|
- }
|
|
|
|
|
- lstNum := strings.Split(strNum, `Кол-во: <span class="green2">`)
|
|
|
|
|
- strNum = lstNum[1]
|
|
|
|
|
- lstNum = strings.Split(strNum, `</span><br/>`)
|
|
|
|
|
- strNum = lstNum[0]
|
|
|
|
|
- iNum, err := strconv.Atoi(strNum)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- // log._rintf("ERRO MineNet.makeFerrum(): кол-во(%v) не число, err=\n\t%v\n", strNum, err)
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- сам.продуктКол.Уст(iNum)
|
|
|
|
|
- return true
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// Создаёт сталь
|
|
|
|
|
-func (сам *Шахта) стальСделать() bool {
|
|
|
|
|
- var (
|
|
|
|
|
- lstMine = сам.СписПолучить()
|
|
|
|
|
- ind int
|
|
|
|
|
- strOut string
|
|
|
|
|
- strTime string
|
|
|
|
|
- strLink string
|
|
|
|
|
- strNum string
|
|
|
|
|
- еслиНайдено bool
|
|
|
|
|
- )
|
|
|
|
|
- for ind, strOut = range lstMine {
|
|
|
|
|
- if strings.Contains(strOut, `<span class="green2">Сталь</span><br/>`) {
|
|
|
|
|
- strNum = lstMine[ind+1]
|
|
|
|
|
- strTime = lstMine[ind+3]
|
|
|
|
|
- strLink = lstMine[ind+10]
|
|
|
|
|
- еслиНайдено = true
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- if !еслиНайдено {
|
|
|
|
|
- return true
|
|
|
|
|
- }
|
|
|
|
|
- lstLink := strings.Split(strLink, `<a class="simple-but border" href="`)
|
|
|
|
|
- strLink = lstLink[1]
|
|
|
|
|
- lstLink = strings.Split(strLink, `"><span><span>Начать производство</span></span></a>`)
|
|
|
|
|
- strLink = "https://wartank.ru/production/" + lstLink[0]
|
|
|
|
|
- time.Sleep(time.Millisecond * 55)
|
|
|
|
|
- lstMine, err := сам.Сеть().Get(strLink)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- // log._rintf("ERRO MineNet.makeSteel(): при GET-команде 'начать производство стали', err=\n\t%v\n", err)
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- for _, strOut := range lstMine { // Проверка на базу
|
|
|
|
|
- if strings.Contains(strOut, `<title>База</title>`) {
|
|
|
|
|
- // log._rintf("ERRO MineNet.makeSteel(): при обновлении lstMine найден lstBase")
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- if err = сам.СтрОбновить(lstMine); err != nil {
|
|
|
|
|
- // log._rintf("ERRO MineNet.makeSteel(): при обновлении lstMine, err=\n\t%v\n", err)
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- if err := сам.ОбратВремяУст(alias.Время(strTime)); err != nil {
|
|
|
|
|
- сам.лог.Добавить("ERRO Mine.makeSteel(): при установке времени производства железа(%v)\n\terr=%v\n", strTime, err)
|
|
|
|
|
- }
|
|
|
|
|
- lstNum := strings.Split(strNum, `Кол-во: <span class="green2">`)
|
|
|
|
|
- strNum = lstNum[1]
|
|
|
|
|
- lstNum = strings.Split(strNum, `</span><br/>`)
|
|
|
|
|
- strNum = lstNum[0]
|
|
|
|
|
- iNum, err := strconv.Atoi(strNum)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- // log._rintf("ERRO MineNet.makeSteel(): кол-во(%v) не число, err=\n\t%v\n", strNum, err)
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- сам.продуктКол.Уст(iNum)
|
|
|
|
|
- return true
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// Создаёт свинец
|
|
|
|
|
-func (сам *Шахта) свинецСделать() bool {
|
|
|
|
|
- var (
|
|
|
|
|
- lstMine = сам.СписПолучить()
|
|
|
|
|
- ind int
|
|
|
|
|
- strOut string
|
|
|
|
|
- strTime string
|
|
|
|
|
- strLink string
|
|
|
|
|
- strNum string
|
|
|
|
|
- еслиНайдено bool
|
|
|
|
|
- )
|
|
|
|
|
- for ind, strOut = range lstMine {
|
|
|
|
|
- if strings.Contains(strOut, `<span class="green2">Свинец</span><br/>`) {
|
|
|
|
|
- strNum = lstMine[ind+1]
|
|
|
|
|
- strTime = lstMine[ind+3]
|
|
|
|
|
- strLink = lstMine[ind+10]
|
|
|
|
|
- еслиНайдено = true
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- if !еслиНайдено {
|
|
|
|
|
- return true
|
|
|
|
|
- }
|
|
|
|
|
- lstLink := strings.Split(strLink, `<a class="simple-but border" href="`)
|
|
|
|
|
- strLink = lstLink[1]
|
|
|
|
|
- lstLink = strings.Split(strLink, `"><span><span>Начать производство</span></span></a>`)
|
|
|
|
|
- strLink = "https://wartank.ru/production/" + lstLink[0]
|
|
|
|
|
- time.Sleep(time.Millisecond * 55)
|
|
|
|
|
- lstMine, err := сам.Сеть().Get(strLink)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- // log._rintf("ERRO Шахта.сделатьСвинец(): при GET-команде 'начать производство стали', err=\n\t%v\n", err)
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- for _, strOut := range lstMine { // Проверка на базу
|
|
|
|
|
- if strings.Contains(strOut, `<title>База</title>`) {
|
|
|
|
|
- // log._rintf("ERRO Шахта.сделатьСвинец(): при обновлении lstMine найден lstBase")
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- if err = сам.СтрОбновить(lstMine); err != nil {
|
|
|
|
|
- // log._rintf("ERRO Шахта.сделатьСвинец(): при обновлении lstMine, err=\n\t%v\n", err)
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- if err := сам.ОбратВремяУст(alias.Время(strTime)); err != nil {
|
|
|
|
|
- сам.лог.Добавить("ERRO Шахта.сделатьСвинец(): при установке времени производства железа(%v)\n\terr=%v\n", strTime, err)
|
|
|
|
|
- }
|
|
|
|
|
- lstNum := strings.Split(strNum, `Кол-во: <span class="green2">`)
|
|
|
|
|
- strNum = lstNum[1]
|
|
|
|
|
- lstNum = strings.Split(strNum, `</span><br/>`)
|
|
|
|
|
- strNum = lstNum[0]
|
|
|
|
|
- iNum, err := strconv.Atoi(strNum)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- // log._rintf("ERRO Шахта.сделатьСвинец(): кол-во(%v) не число, err=\n\t%v\n", strNum, err)
|
|
|
|
|
- return false
|
|
|
|
|
- }
|
|
|
|
|
- сам.продуктКол.Уст(iNum)
|
|
|
|
|
- return true
|
|
|
|
|
-}
|
|
|