Explorar el Código

SVI Исправление забора шихты и банка

SVI hace 2 años
padre
commit
d75b9e0054

+ 4 - 4
server/serv_bots/warbot/angar/base/bank/bank.go

@@ -70,13 +70,14 @@ func (сам *Банк) UpdateLst() {
 func (сам *Банк) пуск() {
 	log.Printf("Банк.пуск()\n")
 	fnRun := func() {
-		time.Sleep(time.Minute * 5)
+		defer time.Sleep(time.Minute * 5)
 		сам.забрать()
 		if сам.построитьУлучшить() {
-			time.Sleep(time.Minute * 30)
+			time.Sleep(time.Minute * 25)
+			return
 		}
 		if сам.проверитьУскорить() {
-			time.Sleep(time.Minute * 30)
+			time.Sleep(time.Minute * 25)
 			return
 		}
 		if ош := сам.сеть.Обновить(); ош != nil {
@@ -91,7 +92,6 @@ func (сам *Банк) пуск() {
 		if ош != nil {
 			log.Printf("ERRO Банк.пуск(): при пуске производства банка, err=\n\t%v\n", ош)
 		}
-
 	}
 	for {
 		// <-сам.ВремяОпрос().КаналСиг()

+ 62 - 46
server/serv_bots/warbot/angar/base/mine/mine.go

@@ -99,6 +99,7 @@ func (сам *Шахта) Пуск() error {
 func (сам *Шахта) пуск() {
 	time.Sleep(time.Second * 3)
 	фнРабота := func() {
+		defer time.Sleep(time.Minute * 5)
 		сам.шахтаЗабрать()
 		сам.уровеньОбновить()
 		сам.Сделать()
@@ -112,11 +113,9 @@ func (сам *Шахта) пуск() {
 		case <-сам.кнт.Done():
 			return
 		case <-сам.ВремяОстат().КаналСиг():
-
 		default:
 			log.Printf("Шахта.пуск()\n")
 			фнРабота()
-			time.Sleep(time.Minute * 5)
 		}
 	}
 }
@@ -340,13 +339,17 @@ func (сам *Шахта) Сделать() {
 	работа := сам.СценаРежим().Работа()
 	switch работа {
 	case "руда":
-		сам.рудаСделать()
+		for !сам.рудаСделать() {
+		}
 	case "железо":
-		сам.железоСделать()
+		for !сам.железоСделать() {
+		}
 	case "сталь":
-		сам.стальСделать()
+		for !сам.стальСделать() {
+		}
 	case "свинец":
-		сам.свинецСделать()
+		for !сам.свинецСделать() {
+		}
 	default:
 		log.Printf("ERRO Шахта.Сделать(): неизвестный режим производства, режим=%q\n", работа)
 	}
@@ -454,51 +457,57 @@ func (сам *Шахта) выбратьМеталл() error {
 }
 
 // Создаёт руду
-func (сам *Шахта) рудаСделать() {
+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 (
-		lstMine     = сам.СписПолучить()
-		ind         int
-		strOut      string
+		инд         int
+		стрВых      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]
+	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
+		return false
 	}
 	if !strings.Contains(strLink, `>Начать производство<`) {
-		return
+		return false
 	}
 	// "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
-	lstMine, err := сам.сеть.Get(strLink)
+	// 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
+		return false
 	}
 	еслиНайдено = false
-	for _, strOut = range lstMine {
-		if strings.Contains(strOut, `<title>База</title>`) {
-			// log._rintf("WARN Шахта.сделатьРуду(): при обновлении lstMine обнаружено lstBase\n")
-			return
+	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
+		return false
 	}
 	if err := сам.Уст(alias.Время(strTime)); err != nil {
 		log.Printf("ERRO Шахта.сделатьРуду(): при установке времени ожидания добычи руды(%v)\n\terr=%v\n", strTime, err)
@@ -510,13 +519,14 @@ func (сам *Шахта) рудаСделать() {
 	iNum, err := strconv.Atoi(strNum)
 	if err != nil {
 		// log._rintf("ERRO Шахта.сделатьРуду(): кол-во(%v) не число, err=\n\t%v\n", strNum, err)
-		return
+		return false
 	}
 	сам.продуктКол.Уст(iNum)
+	return true
 }
 
 // Создаёт железо
-func (сам *Шахта) железоСделать() {
+func (сам *Шахта) железоСделать() bool {
 	var (
 		lstMine     = сам.СписПолучить()
 		ind         int
@@ -536,29 +546,30 @@ func (сам *Шахта) железоСделать() {
 		}
 	}
 	if !еслиНайдено {
-		return
+		return false
 	}
 	if !strings.Contains(strLink, `>Начать производство<`) {
-		return
+		return false
 	}
 	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.makeFerrum(): при GET-команде 'начать производство железа', err=\n\t%v\n", err)
-		return
+		return false
 	}
 	for _, strOut := range lstMine { // Проверка на базу
 		if strings.Contains(strOut, `<title>База</title>`) {
 			// log._rintf("ERRO MineNet.makeFerrum(): при обновлении lstMine найден lstBase")
-			return
+			return false
 		}
 	}
 	if err = сам.СтрОбновить(lstMine); err != nil {
 		// log._rintf("ERRO MineNet.makeFerrum(): при обновлении lstMine, err=\n\t%v\n", err)
-		return
+		return false
 	}
 	if err := сам.Уст(alias.Время(strTime)); err != nil {
 		log.Printf("ERRO Mine.makeFerrum(): при установке времени производства железа(%v)\n\terr=%v\n", strTime, err)
@@ -570,13 +581,14 @@ func (сам *Шахта) железоСделать() {
 	iNum, err := strconv.Atoi(strNum)
 	if err != nil {
 		// log._rintf("ERRO MineNet.makeFerrum(): кол-во(%v) не число, err=\n\t%v\n", strNum, err)
-		return
+		return false
 	}
 	сам.продуктКол.Уст(iNum)
+	return true
 }
 
 // Создаёт сталь
-func (сам *Шахта) стальСделать() {
+func (сам *Шахта) стальСделать() bool {
 	var (
 		lstMine     = сам.СписПолучить()
 		ind         int
@@ -596,29 +608,30 @@ func (сам *Шахта) стальСделать() {
 		}
 	}
 	if !еслиНайдено {
-		return
+		return false
 	}
 	if !strings.Contains(strLink, `>Начать производство<`) {
-		return
+		return false
 	}
 	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
+		return false
 	}
 	for _, strOut := range lstMine { // Проверка на базу
 		if strings.Contains(strOut, `<title>База</title>`) {
 			// log._rintf("ERRO MineNet.makeSteel(): при обновлении lstMine найден lstBase")
-			return
+			return false
 		}
 	}
 	if err = сам.СтрОбновить(lstMine); err != nil {
 		// log._rintf("ERRO MineNet.makeSteel(): при обновлении lstMine, err=\n\t%v\n", err)
-		return
+		return false
 	}
 	if err := сам.Уст(alias.Время(strTime)); err != nil {
 		log.Printf("ERRO Mine.makeSteel(): при установке времени производства железа(%v)\n\terr=%v\n", strTime, err)
@@ -630,13 +643,14 @@ func (сам *Шахта) стальСделать() {
 	iNum, err := strconv.Atoi(strNum)
 	if err != nil {
 		// log._rintf("ERRO MineNet.makeSteel(): кол-во(%v) не число, err=\n\t%v\n", strNum, err)
-		return
+		return false
 	}
 	сам.продуктКол.Уст(iNum)
+	return true
 }
 
 // Создаёт свинец
-func (сам *Шахта) свинецСделать() {
+func (сам *Шахта) свинецСделать() bool {
 	var (
 		lstMine     = сам.СписПолучить()
 		ind         int
@@ -656,29 +670,30 @@ func (сам *Шахта) свинецСделать() {
 		}
 	}
 	if !еслиНайдено {
-		return
+		return false
 	}
 	if !strings.Contains(strLink, `>Начать производство<`) {
-		return
+		return false
 	}
 	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
+		return false
 	}
 	for _, strOut := range lstMine { // Проверка на базу
 		if strings.Contains(strOut, `<title>База</title>`) {
 			// log._rintf("ERRO Шахта.сделатьСвинец(): при обновлении lstMine найден lstBase")
-			return
+			return false
 		}
 	}
 	if err = сам.СтрОбновить(lstMine); err != nil {
 		// log._rintf("ERRO Шахта.сделатьСвинец(): при обновлении lstMine, err=\n\t%v\n", err)
-		return
+		return false
 	}
 	if err := сам.Уст(alias.Время(strTime)); err != nil {
 		log.Printf("ERRO Шахта.сделатьСвинец(): при установке времени производства железа(%v)\n\terr=%v\n", strTime, err)
@@ -690,7 +705,8 @@ func (сам *Шахта) свинецСделать() {
 	iNum, err := strconv.Atoi(strNum)
 	if err != nil {
 		// log._rintf("ERRO Шахта.сделатьСвинец(): кол-во(%v) не число, err=\n\t%v\n", strNum, err)
-		return
+		return false
 	}
 	сам.продуктКол.Уст(iNum)
+	return true
 }