|
|
@@ -20,15 +20,17 @@ import (
|
|
|
// Шахта -- объект шахты на базе
|
|
|
type Шахта struct {
|
|
|
*section.Секция
|
|
|
- сеть *minenet.MineNet
|
|
|
- бот types.ИБот
|
|
|
- база types.ИБаза
|
|
|
- руда types.ИСтатПарам
|
|
|
- железо types.ИСтатПарам
|
|
|
- сталь types.ИСтатПарам
|
|
|
- свинец types.ИСтатПарам
|
|
|
- numProduct types.ИСтатПарам
|
|
|
- уровень types.ИСтатПарам
|
|
|
+ сеть *minenet.MineNet
|
|
|
+ бот types.ИБот
|
|
|
+ база types.ИБаза
|
|
|
+ руда types.ИСтатПарам
|
|
|
+ железо types.ИСтатПарам
|
|
|
+ сталь types.ИСтатПарам
|
|
|
+ свинец types.ИСтатПарам
|
|
|
+ уровень types.ИСтатПарам
|
|
|
+ продуктИмя string // Что сейчас делается
|
|
|
+ продуктКол types.ИСтатПарам // Сколько делается прямо сейчас
|
|
|
+ продуктВремя string // Сколько осталось времени прямо сейчас
|
|
|
}
|
|
|
|
|
|
// НовШахта -- возвращает новый *Mine
|
|
|
@@ -37,23 +39,23 @@ func НовШахта(база types.ИБаза) (*Шахта, error) {
|
|
|
if ош != nil {
|
|
|
return nil, fmt.Errorf("НовШахта(): in create *Section, err=\n\t%w", ош)
|
|
|
}
|
|
|
- руда, ош := static_param.НовСтатПарам("ruda")
|
|
|
+ руда, ош := static_param.НовСтатПарам("руда")
|
|
|
if ош != nil {
|
|
|
return nil, fmt.Errorf("НовШахта(): при создании статистики руды, ош=\n\t%w", ош)
|
|
|
}
|
|
|
- железо, ош := static_param.НовСтатПарам("ferrum")
|
|
|
+ железо, ош := static_param.НовСтатПарам("железо")
|
|
|
if ош != nil {
|
|
|
return nil, fmt.Errorf("НовШахта(): при создании статистики железа, ош=\n\t%w", ош)
|
|
|
}
|
|
|
- сталь, ош := static_param.НовСтатПарам("steel")
|
|
|
+ сталь, ош := static_param.НовСтатПарам("сталь")
|
|
|
if ош != nil {
|
|
|
return nil, fmt.Errorf("НовШахта(): при создании статистики стали, ош=\n\t%w", ош)
|
|
|
}
|
|
|
- свинец, ош := static_param.НовСтатПарам("plumbum")
|
|
|
+ свинец, ош := static_param.НовСтатПарам("свинец")
|
|
|
if ош != nil {
|
|
|
return nil, fmt.Errorf("НовШахта(): при создании статистики свинца, ош=\n\t%w", ош)
|
|
|
}
|
|
|
- добычаЧисло, ош := static_param.НовСтатПарам("plumbum")
|
|
|
+ добычаЧисло, ош := static_param.НовСтатПарам("свинец")
|
|
|
if ош != nil {
|
|
|
return nil, fmt.Errorf("НовШахта(): при создании статистики числа добычи, ош=\n\t%w", ош)
|
|
|
}
|
|
|
@@ -69,7 +71,7 @@ func НовШахта(база types.ИБаза) (*Шахта, error) {
|
|
|
железо: железо,
|
|
|
сталь: сталь,
|
|
|
свинец: свинец,
|
|
|
- numProduct: добычаЧисло,
|
|
|
+ продуктКол: добычаЧисло,
|
|
|
уровень: уровень,
|
|
|
}
|
|
|
сам.сеть, ош = minenet.NewMineNet(сам)
|
|
|
@@ -99,6 +101,7 @@ func (сам *Шахта) пуск() {
|
|
|
сам.уровеньОбновить()
|
|
|
сам.Сделать()
|
|
|
сам.ускорениеПровер()
|
|
|
+ сам.количествоПолучить()
|
|
|
сам.бот.Ангар().РесурсыОбновить()
|
|
|
сам.Сделать()
|
|
|
time.Sleep(time.Minute * 5)
|
|
|
@@ -106,6 +109,62 @@ func (сам *Шахта) пуск() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+// Проверяет количество продукта в шахте
|
|
|
+func (сам *Шахта) количествоПолучить() {
|
|
|
+ var (
|
|
|
+ ind int
|
|
|
+ strOut string
|
|
|
+ isFind bool
|
|
|
+ режим string
|
|
|
+ )
|
|
|
+ lstMine, err := сам.сеть.Клиент().Get("https://wartank.ru/buildings")
|
|
|
+ if err != nil {
|
|
|
+ log.Printf("Шахта.количествоПолучить(): при обновлении строк шахты, ош=\n\t%v\n", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ /*
|
|
|
+ Режим (руда-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>
|
|
|
+ isFind = true
|
|
|
+ режим = "руда"
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !isFind {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ 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 {
|
|
|
+ log.Printf("Шахта.количествоПолучить(): кол-во руды (%v) не число, err=\n\t%v\n", _число, err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ сам.продуктКол.Уст(iNum)
|
|
|
+ сам.продуктИмя = "руда"
|
|
|
+ default:
|
|
|
+ }
|
|
|
+ // <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 := сам.ParseCountDown(strTime); err != nil {
|
|
|
+ log.Printf("Шахта.количествоПолучить(): при установке времени производства(%v), err=\n\t%v\n", strTime, err)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
// Проверяет на забор из шахты
|
|
|
func (сам *Шахта) шахтаЗабрать() {
|
|
|
var (
|
|
|
@@ -254,11 +313,6 @@ func (сам *Шахта) построить(списСтр []string) {
|
|
|
|
|
|
// Сделать -- вызывается с базы, если она обнаружила, что пора сделать продукцию
|
|
|
func (сам *Шахта) Сделать() {
|
|
|
- работа := сам.РежимТекущ().Режим()
|
|
|
- log.Printf("Шахта.Сделать(): work=%v\n", работа)
|
|
|
- if работа == "upgrade" {
|
|
|
- return
|
|
|
- }
|
|
|
if err := сам.сеть.UpdateLst(); err != nil {
|
|
|
log.Printf("ERRO Шахта.Сделать(): при обновлении lstMine, err=\n\t%v\n", err)
|
|
|
return
|
|
|
@@ -270,7 +324,7 @@ func (сам *Шахта) Сделать() {
|
|
|
log.Printf("ERRO Шахта.Сделать(): при выборе продукции, err=\n\t%v\n", err)
|
|
|
return
|
|
|
}
|
|
|
- работа = сам.РежимТекущ().Режим()
|
|
|
+ работа := сам.РежимТекущ().Режим()
|
|
|
switch работа {
|
|
|
case "руда":
|
|
|
сам.рудаСделать()
|
|
|
@@ -305,44 +359,56 @@ func (сам *Шахта) Руда() types.ИСтатПарам {
|
|
|
return сам.руда
|
|
|
}
|
|
|
|
|
|
-// КолвоРаботаСейчас -- возвращает количество прозводимого продукта
|
|
|
-func (сам *Шахта) КолвоРаботаСейчас() types.ИСтатПарам {
|
|
|
- return сам.numProduct
|
|
|
+// ПродуктКолСейчас -- возвращает количество прозводимого продукта
|
|
|
+func (сам *Шахта) ПродуктКолСейчас() int {
|
|
|
+ return сам.продуктКол.Получ()
|
|
|
+}
|
|
|
+
|
|
|
+// ПродуктИмяСейчас -- возвращает имя прозводимого продукта
|
|
|
+func (сам *Шахта) ПродуктИмяСейчас() string {
|
|
|
+ return сам.продуктИмя
|
|
|
+}
|
|
|
+
|
|
|
+// ПродуктВремяСейчас -- сколько осталось времени до производства продукта
|
|
|
+func (сам *Шахта) ПродуктВремяСейчас() string {
|
|
|
+ сам.количествоПолучить()
|
|
|
+ return сам.продуктВремя
|
|
|
+ // return сам.Секция.ВремяОпрос().Стр()
|
|
|
}
|
|
|
|
|
|
// Выбирает продукцию по возможности произвести и её количеству
|
|
|
func (сам *Шахта) выбратьМеталл() error {
|
|
|
var (
|
|
|
- mapProduct = make(map[string]bool) // Словарь известной продукции
|
|
|
- lstMine = сам.СписПолучить()
|
|
|
+ диктПродукция = make(map[string]bool) // Словарь известной продукции
|
|
|
+ lstMine = сам.СписПолучить()
|
|
|
)
|
|
|
|
|
|
фнВыбратьПродукт := func() { // вычисляет список допустимой продукции
|
|
|
- mapProduct["ruda"] = true // Руда есть всегда
|
|
|
- mapProduct["ferrum"] = false
|
|
|
- mapProduct["steel"] = false
|
|
|
- mapProduct["plumbum"] = false
|
|
|
+ диктПродукция["руда"] = true // Руда есть всегда
|
|
|
+ диктПродукция["железо"] = false
|
|
|
+ диктПродукция["сталь"] = false
|
|
|
+ диктПродукция["свинец"] = false
|
|
|
for _, strProd := range lstMine { // Проверить руду
|
|
|
if strings.Contains(strProd, `<span class="green2">Руда</span><br/>`) {
|
|
|
- mapProduct["ruda"] = true
|
|
|
+ диктПродукция["руда"] = true
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
for _, strProd := range lstMine { // Проверить руду
|
|
|
if strings.Contains(strProd, `<span class="green2">Железо</span><br/>`) {
|
|
|
- mapProduct["ferrum"] = true
|
|
|
+ диктПродукция["железо"] = true
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
for _, strProd := range lstMine { // Проверить сталь
|
|
|
if strings.Contains(strProd, `<span class="green2">Сталь</span><br/>`) {
|
|
|
- mapProduct["steel"] = true
|
|
|
+ диктПродукция["сталь"] = true
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
for _, strProd := range lstMine { // Проверить свинец
|
|
|
if strings.Contains(strProd, `<span class="green2">Свинец</span><br/>`) {
|
|
|
- mapProduct["plumbum"] = true
|
|
|
+ диктПродукция["свинец"] = true
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
@@ -351,21 +417,21 @@ func (сам *Шахта) выбратьМеталл() error {
|
|
|
сам.РежимТекущ().РежимУст("руда")
|
|
|
руда := сам.Руда().Получ()
|
|
|
железо := сам.Железо().Получ()
|
|
|
- if mapProduct["ferrum"] {
|
|
|
+ if диктПродукция["железо"] {
|
|
|
if руда > железо*2 {
|
|
|
сам.РежимТекущ().РежимУст("железо")
|
|
|
}
|
|
|
}
|
|
|
|
|
|
сталь := сам.Сталь().Получ()
|
|
|
- if mapProduct["steel"] {
|
|
|
+ if диктПродукция["сталь"] {
|
|
|
if железо > сталь*2 {
|
|
|
сам.РежимТекущ().РежимУст("сталь")
|
|
|
}
|
|
|
}
|
|
|
|
|
|
свинец := сам.Свинец().Получ()
|
|
|
- if mapProduct["plumbum"] {
|
|
|
+ if диктПродукция["свинец"] {
|
|
|
if сталь > свинец*2 {
|
|
|
сам.РежимТекущ().РежимУст("свинец")
|
|
|
}
|
|
|
@@ -433,7 +499,7 @@ func (сам *Шахта) рудаСделать() {
|
|
|
// log._rintf("ERRO Шахта.сделатьРуду(): кол-во(%v) не число, err=\n\t%v\n", strNum, err)
|
|
|
return
|
|
|
}
|
|
|
- сам.КолвоРаботаСейчас().Уст(iNum)
|
|
|
+ сам.продуктКол.Уст(iNum)
|
|
|
}
|
|
|
|
|
|
// Создаёт железо
|
|
|
@@ -493,7 +559,7 @@ func (сам *Шахта) железоСделать() {
|
|
|
// log._rintf("ERRO MineNet.makeFerrum(): кол-во(%v) не число, err=\n\t%v\n", strNum, err)
|
|
|
return
|
|
|
}
|
|
|
- сам.КолвоРаботаСейчас().Уст(iNum)
|
|
|
+ сам.продуктКол.Уст(iNum)
|
|
|
}
|
|
|
|
|
|
// Создаёт сталь
|
|
|
@@ -553,7 +619,7 @@ func (сам *Шахта) стальСделать() {
|
|
|
// log._rintf("ERRO MineNet.makeSteel(): кол-во(%v) не число, err=\n\t%v\n", strNum, err)
|
|
|
return
|
|
|
}
|
|
|
- сам.КолвоРаботаСейчас().Уст(iNum)
|
|
|
+ сам.продуктКол.Уст(iNum)
|
|
|
}
|
|
|
|
|
|
// Создаёт свинец
|
|
|
@@ -613,5 +679,5 @@ func (сам *Шахта) свинецСделать() {
|
|
|
// log._rintf("ERRO Шахта.сделатьСвинец(): кол-во(%v) не число, err=\n\t%v\n", strNum, err)
|
|
|
return
|
|
|
}
|
|
|
- сам.КолвоРаботаСейчас().Уст(iNum)
|
|
|
+ сам.продуктКол.Уст(iNum)
|
|
|
}
|