Преглед на файлове

d04 Исправление логики бота

SVI преди 2 години
родител
ревизия
ca5f5dd525

+ 3 - 3
server/serv_bots/warbot/angar/angar.go

@@ -10,12 +10,12 @@ import (
 
 	"wartank/pkg/components/section"
 	"wartank/pkg/types"
-	"wartank/server/serv_bots/warbot/angar/angar_attack"
 	"wartank/server/serv_bots/warbot/angar/angarnet"
 	"wartank/server/serv_bots/warbot/angar/base"
 	"wartank/server/serv_bots/warbot/angar/battle"
 	"wartank/server/serv_bots/warbot/angar/convoy"
 	"wartank/server/serv_bots/warbot/angar/fuel"
+	"wartank/server/serv_bots/warbot/angar/fuel_attack"
 	"wartank/server/serv_bots/warbot/angar/masters"
 	"wartank/server/serv_bots/warbot/angar/missions"
 	"wartank/server/serv_bots/warbot/angar/netstat"
@@ -32,7 +32,7 @@ import (
 type Ангар struct {
 	*section.Секция
 	сеть       *angarnet.AngarNet
-	топливоБой *angar_attack.ТопливоБой
+	топливоБой *fuel_attack.ТопливоБой
 
 	бот      types.ИБот
 	конвой   *convoy.Конвой
@@ -103,7 +103,7 @@ func НовАнгар(bot types.ИБот) (*Ангар, error) {
 		}
 	}
 	{ // Сеть атаки
-		сам.топливоБой, err = angar_attack.НовТопливоБой(сам)
+		сам.топливоБой, err = fuel_attack.НовТопливоБой(сам)
 		if err != nil {
 			return nil, fmt.Errorf("НовАнгар(): in create <AngarAttackNet>, err=\n\t%w", err)
 		}

+ 80 - 27
server/serv_bots/warbot/angar/base/arsenal/arsenal.go

@@ -95,6 +95,7 @@ func (сам *Оружейная) пуск() {
 			if сам.РежимТекущ().Получ() == "upgrade" {
 				continue
 			}
+			сам.проверитьЗабрать()
 			сам.Обновить()
 			сам.проверитьПостроить()
 			сам.сделать()
@@ -103,7 +104,66 @@ func (сам *Оружейная) пуск() {
 	}
 }
 
-// Проверяет необходимость постройки полигона
+// Проверяет на забрать оружейную
+func (сам *Оружейная) проверитьЗабрать() {
+	var (
+		strOut      string
+		ind         int
+		еслиНайдено bool
+		lstBase     = сам.СписПолучить()
+	)
+	for ind, strOut = range lstBase {
+		if strings.Contains(strOut, `Производит снаряды, ремкомплекты<br/>`) {
+			еслиНайдено = true
+			ind += 17
+			strOut = lstBase[ind]
+			break
+		}
+	}
+	if !еслиНайдено {
+		return
+	}
+	if !strings.Contains(strOut, `"><span><span>Забрать</span></span></a>`) {
+		return
+	}
+	lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
+	strLink := lstLink[1]
+	lstLink = strings.Split(strLink, `"><span><span>Забрать</span></span></a>`)
+	// https://wartank.ru/buildings?80-1.ILinkListener-buildings-0-building-rootBlock-actionPanel-takeProductionLink
+	strLink = "https://wartank.ru/" + lstLink[0]
+	var (
+		лстАрсенал []string
+		ош         error
+	)
+	фнЗабрать := func() bool {
+		time.Sleep(time.Millisecond * 100)
+		лстАрсенал, ош = сам.сеть.Get(strLink)
+		if ош != nil {
+			log.Printf("Оружейная.проверитьЗабрать(): при выполнении Get-запроса? err=\n\t%v\n", ош)
+			return false
+		}
+		if len(лстАрсенал) == 0 {
+			log.Printf("Оружейная.проверитьЗабрать(): len lstBase(%v)==0", len(lstBase))
+			return false
+		}
+		for _, strOut = range лстАрсенал {
+			if strings.Contains(strOut, `<title>Производство</title>`) {
+				return false
+			}
+		}
+		return true
+	}
+	for !фнЗабрать() {
+	}
+	if ош = сам.СтрОбновить(лстАрсенал); ош != nil {
+		log.Printf("Оружейная.checkArsenalGet(): при обновлении lstBase, err=\n\t%v\n", ош)
+	}
+	if ош = сам.СтрОбновить(лстАрсенал); ош != nil {
+		log.Printf("Оружейная.checkArsenalGet(): при обновлении lstArsenal, err=\n\t%v\n", ош)
+	}
+}
+
+// Проверяет необходимость постройки оружейной
 func (сам *Оружейная) проверитьПостроить() {
 	фнПостроить := func() bool {
 		var (
@@ -300,17 +360,11 @@ func (сам *Оружейная) сделать() {
 		// log._rintf("ERRO Оружейная.сделать(): при обновлении lstArsenal, err=\n\t%v\n", err)
 		return
 	}
-	fnMakeRemka := func() {
-		if err = сам.сделатьРемку(); err != nil {
-			// log._rintf("ERRO Оружейная.сделать(): in make remka, err=\n\t%v\n", err)
-			return
-		}
-	}
 	// _mt.Println("\tArsenalNet.сделать()")
 	{ // Контроль ремки по времени суток и минимальному количеству
 		iRemka := сам.Ремки().Получ()
 		if iRemka < 70 {
-			fnMakeRemka()
+			сам.сделатьРемку()
 			return
 		}
 	}
@@ -448,36 +502,35 @@ func (сам *Оружейная) сдлатьФугасы() {
 }
 
 // Создать ремку. Выполняется если подходят условия
-func (сам *Оружейная) сделатьРемку() (err error) {
+func (сам *Оружейная) сделатьРемку() {
 	// _mt.Println("\tArsenalNet.makeRemka()")
 	var (
-		strOut     = ""
-		isFind     bool
-		lstArsenal = сам.СписПолучить()
+		strOut = ""
+		isFind bool
 	)
-
-	for ind, strRemka := range lstArsenal {
-		if strings.Contains(strRemka, `<span class="green2">Ремкомплект</span><br/>`) {
-			ind += 10
-			strOut = lstArsenal[ind]
+	lstArsenal, ош := сам.сеть.Клиент().Get("https://wartank.ru/production/Armory")
+	if ош != nil {
+		log.Printf("Оружейная.сделатьРемку(): при получении страницы оружейки, err=\n\t%v\n", ош)
+		return
+	}
+	// <a class="simple-but border" href="Armory?55-1.ILinkListener-productions-0-production-startProduceLink"><span><span>Начать производство</span></span></a>
+	for _, strOut = range lstArsenal {
+		if strings.Contains(strOut, `.ILinkListener-productions-0-production-startProduceLink`) {
 			isFind = true
 			break
 		}
 	}
 	if !isFind {
-		return nil
+		return
 	}
 	// Получить ссылку на ремку
-	lstRemka := strings.Split(strOut, `<a class="simple-but border" href="`)
-	if len(lstRemka) < 2 { // Значит уже запущено в производство
+	_ссылка := strings.TrimPrefix(strOut, `<a class="simple-but border" href="`)
+	_ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Начать производство</span></span></a>`)
+	// https://wartank.ru/production/Armory?54-1.ILinkListener-productions-0-production-startProduceLink
+	ссылка := "https://wartank.ru/production/" + _ссылка
+	if _, err := сам.сеть.Клиент().Get(ссылка); err != nil {
+		log.Printf("Оружейная.сделатьРемку(): при отдаче команды сделать ремку, err=\n\t%v\n", err)
 		return
 	}
-	strLink := lstRemka[1]
-	lstRemka = strings.Split(strLink, `"><span><span>Начать производство</span></span></a>`)
-	strLink = "https://wartank.ru/production/Armory" + lstRemka[0]
-	if _, err = сам.сеть.Get(strLink); err != nil {
-		return fmt.Errorf("ArsenalNet.makeRemka(): in getpagebank product, err=\n\t%w", err)
-	}
 	сам.РежимТекущ().РежимУст("ремка")
-	return nil
 }

+ 1 - 101
server/serv_bots/warbot/angar/base/base.go

@@ -211,8 +211,7 @@ func (sf *База) проверитьШахту() {
 		return
 	}
 	sf.шахтаСтатаОбновить()
-	sf.шахтаЗабрать() // Нужно ли забрать из шахты
-	sf.шахтаДелать()  // Нужно ли производство в шахте
+	sf.шахтаДелать() // Нужно ли производство в шахте
 
 	sf.checkMineTime()
 }
@@ -249,44 +248,6 @@ func (sf *База) checkMineTime() {
 	}
 }
 
-// Проверяет на забор из шахты
-func (sf *База) шахтаЗабрать() {
-	var (
-		strOut  string
-		ind     int
-		isFind  bool
-		lstBase = sf.СписПолучить()
-	)
-	for ind, strOut = range lstBase {
-		if strings.Contains(strOut, `<span class="green2">Шахта -`) {
-			isFind = true
-			break
-		}
-	}
-	if !isFind {
-		return
-	}
-	ind += 18
-	strOut = lstBase[ind]
-	if !strings.Contains(strOut, `"><span><span>Забрать</span></span></a>`) {
-		return
-	}
-	lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
-	strLink := lstLink[1]
-	lstLink = strings.Split(strLink, `"><span><span>Забрать</span></span></a>`)
-	strLink = "https://wartank.ru/" + lstLink[0]
-	lstBase1, err := sf.сеть.Get(strLink)
-	if err != nil {
-		// log._rintf("ERRO Base.checkMineGet(): при выполнении Get-запроса 'забрать', err=\n\t%v\n", err)
-		return
-	}
-	if err = sf.шахта.СтрОбновить(lstBase1); err != nil {
-		// log._rintf("ERRO Base.checkMineGet(): при обновлении lstMine, err=\n\t%v\n", err)
-		return
-	}
-	sf.шахта.Сделать()
-}
-
 // Проверка статистики шахты
 func (sf *База) шахтаСтатаОбновить() {
 	var (
@@ -466,7 +427,6 @@ func (sf *База) проверитьАрсенал() {
 	if sf.арсенал.РежимТекущ().Получ() == "upgrade" {
 		return
 	}
-	sf.проверитьАрсеналЗабрать() // Нужно ли забрать оружие
 	sf.проверитьАрсеналВремя()
 	sf.проверитьАрсеналРежим()
 }
@@ -506,66 +466,6 @@ func (sf *База) проверитьАрсеналВремя() {
 	}
 }
 
-// Проверяет на забрать оружейную
-func (sf *База) проверитьАрсеналЗабрать() {
-	var (
-		strOut      string
-		ind         int
-		еслиНайдено bool
-		lstBase     = sf.СписПолучить()
-	)
-	for ind, strOut = range lstBase {
-		if strings.Contains(strOut, `Производит снаряды, ремкомплекты<br/>`) {
-			еслиНайдено = true
-			ind += 17
-			strOut = lstBase[ind]
-			break
-		}
-	}
-	if !еслиНайдено {
-		return
-	}
-	if !strings.Contains(strOut, `"><span><span>Забрать</span></span></a>`) {
-		return
-	}
-	lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
-	strLink := lstLink[1]
-	lstLink = strings.Split(strLink, `"><span><span>Забрать</span></span></a>`)
-	// https://wartank.ru/buildings?80-1.ILinkListener-buildings-0-building-rootBlock-actionPanel-takeProductionLink
-	strLink = "https://wartank.ru/" + lstLink[0]
-	var (
-		лстАрсенал []string
-		ош         error
-	)
-	фнЗабрать := func() bool {
-		time.Sleep(time.Millisecond * 100)
-		лстАрсенал, ош = sf.сеть.Get(strLink)
-		if ош != nil {
-			// log._rintf("ERRO Base.checkArsenalGet(): при выполнении Get-запроса 'забрать', err=\n\t%v\n", err)
-			return false
-		}
-		if len(лстАрсенал) == 0 {
-			// log._rintf("ERRO Base.checkArsenalGet(): len lstBase(%v)==0", len(lstBase))
-			return false
-		}
-		for _, strOut = range лстАрсенал {
-			if strings.Contains(strOut, `<title>Производство</title>`) {
-				return false
-			}
-		}
-		return true
-	}
-	for !фнЗабрать() {
-	}
-	sf.арсенал.SetCountDown(1)
-	if ош = sf.СтрОбновить(лстАрсенал); ош != nil {
-		log.Printf("ERRO Base.checkArsenalGet(): при обновлении lstBase, err=\n\t%v\n", ош)
-	}
-	if ош = sf.арсенал.СтрОбновить(лстАрсенал); ош != nil {
-		log.Printf("ERRO Base.checkArsenalGet(): при обновлении lstArsenal, err=\n\t%v\n", ош)
-	}
-}
-
 // Проверяет режим производства арсенала
 func (sf *База) проверитьАрсеналРежим() {
 	var (

+ 41 - 9
server/serv_bots/warbot/angar/base/mine/mine.go

@@ -95,20 +95,52 @@ func (сам *Шахта) пуск() {
 		case <-сам.ВремяОпрос().КаналСиг():
 		default:
 			log.Printf("Шахта.пуск()\n")
-			if сам.уровеньОбновить() {
-				сам.ускорениеПровер()
-				руда := сам.Руда().Получ()
-				if руда == 0 {
-					time.Sleep(time.Second * 5)
-					сам.бот.Ангар().РесурсыОбновить()
-				}
-				сам.Сделать()
-			}
+			сам.шахтаЗабрать()
+			сам.уровеньОбновить()
+			сам.Сделать()
+			сам.ускорениеПровер()
+			сам.бот.Ангар().РесурсыОбновить()
+			сам.Сделать()
 			time.Sleep(time.Minute * 5)
 		}
 	}
 }
 
+// Проверяет на забор из шахты
+func (сам *Шахта) шахтаЗабрать() {
+	var (
+		strOut string
+		isFind bool
+	)
+	списШахта, ош := сам.сеть.Клиент().Get("https://wartank.ru/buildings")
+	if ош != nil {
+		log.Printf("Шахта.шахтаЗабрать(): при обновлении списШахта, ош=\n\t%v\n", ош)
+		return
+	}
+	// <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`) {
+			isFind = true
+			break
+		}
+	}
+	if !isFind {
+		return
+	}
+	_ссылка := strings.TrimPrefix(strOut, `<a class="simple-but border" href="`)
+	_ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Забрать</span></span></a>`)
+	ссылка := "https://wartank.ru/" + _ссылка
+	lstBase1, err := сам.сеть.Клиент().Get(ссылка)
+	if err != nil {
+		log.Printf("Шахта.шахтаЗабрать(): при выполнении Get-запроса 'забрать', err=\n\t%v\n", err)
+		return
+	}
+	if err = сам.СтрОбновить(lstBase1); err != nil {
+		log.Printf("Шахта.шахтаЗабрать(): при обновлении lstMine, err=\n\t%v\n", err)
+		return
+	}
+}
+
 // Проверяет ускорение строительства
 func (сам *Шахта) ускорениеПровер() {
 	списСтр, ош := сам.сеть.Клиент().Get("http://wartank.ru/buildings")

+ 81 - 0
server/serv_bots/warbot/angar/base/polygon/polygon.go

@@ -16,6 +16,12 @@ import (
 	Объект полигона на базе
 */
 
+const (
+	времОжидПлат    = 60   // Время ожидания платного ускорения
+	времОжидБесплат = 1810 // Время ожидания бесплатного ускорения
+
+)
+
 // Полигон -- объект полигона на базе
 type Полигон struct {
 	*section.Секция
@@ -66,11 +72,86 @@ func (сам *Полигон) пуск() {
 			сам.усилениеПровер()
 			сам.времяОбнов()
 			сам.построитьПровер()
+			сам.проверитьУскорение()
 			time.Sleep(time.Minute * 20)
 		}
 	}
 }
 
+// Проверяет на ускорение апгрейда полигона
+func (сам *Полигон) проверитьУскорение() {
+	var (
+		strOut = ""
+		isFind bool
+	)
+	lstBase, err := сам.сеть.Клиент().Get("https://wartank.ru/buildings")
+	if err != nil {
+		log.Printf("Полигон.проверитьУскорение(): при обновлении строк базы, err=\n\t%v\n", err)
+		return
+	}
+	{ // Проверка на платное ускорение апгрейда + время
+
+		for _, strOut = range lstBase {
+			if strings.Contains(strOut, `Производит снаряды, ремкомплекты<br/>`) {
+				// Убедиться что есть строка платного ускорения
+				isFind = true
+				break
+			}
+		}
+		if !isFind {
+			return
+		}
+		{ // Платное ускорение
+			if strings.Contains(strOut, `Ускорить за`) {
+				if err := сам.SetCountDown(времОжидПлат); err != nil {
+					log.Printf("WARN Base.checkArsenalForce(): при установке платного времени ускорения апгрейда арсенала(%v)\n\terr=%v\n", времОжидПлат, err)
+				}
+				сам.РежимТекущ().Уст("upgrade")
+				сам.РежимТекущ().РежимУст("апгрейд")
+				return
+			}
+		}
+	}
+	{ // Проверка на бесплатное ускорение апгрейда
+		isFind = false
+		for _, strOut = range lstBase {
+			if strings.Contains(strOut, `Производит снаряды, ремкомплекты<br/>`) {
+				// Убедиться что есть строка платного ускорения
+				isFind = true
+				break
+			}
+		}
+		if !isFind {
+			return
+		}
+		if !strings.Contains(strOut, `>Ускорение<`) {
+			return
+		}
+		сам.РежимТекущ().Уст("upgrade")
+		lstLink := strings.Split(strOut, `<td style="width:50%;padding-left:1px;"><a class="simple-but border" href="`)
+		strLink := lstLink[1]
+		lstLink = strings.Split(strLink, `"><span><span>Ускорение</span></span></a>`)
+		strLink = "https://wartank.ru/" + lstLink[0]
+		lstBase, err := сам.сеть.Get(strLink)
+		if err != nil {
+			// log._rintf("ERRO NetBank.checkArsenalForce(): при GET-запросе на бесплатном ускорении апгрейда арсенала, err=\n\t%v\n", err)
+			return
+		}
+		// sound.ArsenalForce()
+		if err := сам.СтрОбновить(lstBase); err != nil {
+			// log._rintf("ERRO NetBank.checkArsenalForce(): при обновлении lstBase, err=\n\t%v\n", err)
+			return
+		}
+		сам.РежимТекущ().Уст("upgrade")
+		сам.РежимТекущ().РежимУст("апгрейд")
+		if err := сам.SetCountDown(времОжидБесплат); err != nil {
+			log.Printf("WARN Base.checkArsenalForce(): при установке бесплатного времени ускорения апгрейда арсенала(%v)\n\terr=%v\n", времОжидБесплат, err)
+		}
+	}
+	// Все проверки прошли -- это просто работа
+	сам.РежимТекущ().Уст("work")
+}
+
 // Проверяет необходимость постройки полигона
 func (сам *Полигон) построитьПровер() {
 	фнПостроить := func() bool { // Поиск кнопки строительства

+ 50 - 69
server/serv_bots/warbot/angar/convoy/convoy.go

@@ -58,7 +58,7 @@ func (sf *Конвой) Пуск() error {
 // UpdateLst -- принудительно обновляет состояние конвоя
 func (sf *Конвой) UpdateLst() {
 	if err := sf.net.UpdateLst(); err != nil {
-		log.Printf("Convoy.UpdateLst(): err=\n\t%v\n", err)
+		log.Printf("Конвой.UpdateLst(): err=\n\t%v\n", err)
 	}
 }
 
@@ -193,21 +193,17 @@ func (сам *Конвой) найтиВбой() string {
 		lstConvoy = сам.СписПолучить()
 		isFind    bool
 	)
+	lstConvoy, err := сам.net.Клиент().Get("https://wartank.ru/convoy")
+	if err != nil {
+		log.Printf("Конвой.атакаНачать(): при обновлении lstConvoy, ош=\n\t%v\n", err)
+		return ""
+	}
 	if сам.бот.Имя() == "prospero tank" {
 		log.Printf("")
 	}
-	for len(lstConvoy) == 0 {
-		ош := сам.net.UpdateLst()
-		if ош != nil {
-			log.Printf("Конвой.атакаНачать(): при обновлении lstConvoy, ош=\n\t%v\n", ош)
-			return ""
-		}
-		lstConvoy = сам.СписПолучить()
-	}
-	for _, strLink := range lstConvoy {
-		если1 := strings.Contains(strLink, `<span>Начать разведку</span>`)
+	for _, strOut = range lstConvoy {
+		если1 := strings.Contains(strOut, `<span>Начать разведку</span>`)
 		if если1 {
-			strOut = strLink
 			lstLink := strings.Split(strOut, `<div class="bot"><a class="simple-but border" w:id="findEnemy" href="`)
 			strOut = lstLink[1]
 			lstLink = strings.Split(strOut, `"><span><span>Начать разведку</span></span></a></div>`)
@@ -215,9 +211,8 @@ func (сам *Конвой) найтиВбой() string {
 			isFind = true
 			break
 		}
-		если2 := strings.Contains(strLink, `<span>В БОЙ!</span>`)
+		если2 := strings.Contains(strOut, `<span>В БОЙ!</span>`)
 		if если2 {
-			strOut = strLink
 			lstLink := strings.Split(strOut, `<div class="bot"><a class="simple-but border" w:id="startMasking" href="`)
 			if len(lstLink) == 1 {
 				lstLink = strings.Split(strOut, `<div class="bot"><a class="simple-but border red" w:id="startFight" href="`)
@@ -229,17 +224,15 @@ func (сам *Конвой) найтиВбой() string {
 			break
 		}
 		// <div class="bot"><a class="simple-but border" w:id="findEnemy" href="convoy?15-1.ILinkListener-root-findEnemy"><span><span>Начать разведку</span></span></a></div>
-		если3 := strings.Contains(strLink, "<span>Начать разведку</span>")
+		если3 := strings.Contains(strOut, "<span>Начать разведку</span>")
 		if если3 {
-			strOut = strLink
 			_ссылка := strings.TrimPrefix(strOut, `<<div class="bot"><a class="simple-but border" w:id="findEnemy" href="`)
 			_ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Начать разведку</span></span></a></div>`)
 			strOut = "https://wartank.ru/" + _ссылка
 			isFind = true
 			break
 		}
-		if strings.Contains(strLink, `>ОБЫЧНЫЕ<`) {
-			strOut = strLink
+		if strings.Contains(strOut, `>ОБЫЧНЫЕ<`) {
 			lstLink := strings.Split(strOut, `<a href="`)
 			strOut = lstLink[1]
 			lstLink = strings.Split(strOut, `" class="simple-but gray"><span><span>ОБЫЧНЫЕ</span></span></a>`)
@@ -332,7 +325,7 @@ func (sf *Конвой) атакаИскать() (isNext bool) {
 			return false
 		}
 		if err = sf.СтрОбновить(lstConvoy); err != nil {
-			logrus.WithError(err).Error("Convoy.attack(): при обновлении lstConvoy")
+			logrus.WithError(err).Error("Конвой.attack(): при обновлении lstConvoy")
 			return false
 		}
 	}
@@ -342,20 +335,17 @@ func (sf *Конвой) атакаИскать() (isNext bool) {
 // Забирает награду в конвое "Активируй боевую силу"
 func (sf *Конвой) проверитьМиссияРазведкаКонвой() {
 	var (
-		strOut    string
-		isFind    bool
-		lstConvoy = sf.СписПолучить()
+		strOut string
+		isFind bool
 	)
-	if len(lstConvoy) == 0 {
-		if err := sf.net.UpdateLst(); err != nil {
-			// log._rintf("Convoy.check6frage(): при обновлении пустого lstConvoy, err=\n\t%v\n", err)
-			return
-		}
-		lstConvoy = sf.СписПолучить()
+	if err := sf.net.UpdateLst(); err != nil {
+		// log._rintf("Конвой.проверитьМиссияРазведкаКонвой(): при обновлении пустого lstConvoy, err=\n\t%v\n", err)
+		return
 	}
-	// <a class="simple-but border" href="convoy?8-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
+	lstConvoy := sf.СписПолучить()
+	// <a class="simple-but border" href="convoy?21-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
 	for _, strOut = range lstConvoy {
-		if strings.Contains(strOut, `<span>Получить награду</span>`) {
+		if strings.Contains(strOut, `.ILinkListener-missions-cc-0-c-awardLink`) {
 			isFind = true
 			break
 		}
@@ -363,21 +353,21 @@ func (sf *Конвой) проверитьМиссияРазведкаКонво
 	if !isFind {
 		return
 	}
-	// <a class="simple-but border" href="convoy?70-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
+	// <a class="simple-but border" href="convoy?21-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
 	_ссылка := strings.TrimPrefix(strOut, `<a class="simple-but border" href="`)
 	_ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Получить награду</span></span></a>`)
-	// https://wartank.ru/convoy?80-1.ILinkListener-missions-cc-0-c-awardLink
-	strLink := "https://wartank.ru/" + _ссылка
-	lstConvoy, err := sf.net.Get(strLink)
+	// https://wartank.ru/convoy?23-1.ILinkListener-missions-cc-0-c-awardLink
+	ссылка := "https://wartank.ru/" + _ссылка
+	lstConvoy, err := sf.net.Клиент().Get(ссылка)
 	if err != nil {
-		// log._rintf("ERRO Convoy.checkWarForce(): при выполнени команды GET, err=\n\t%v\n", err)
+		log.Printf("Конвой.проверитьМиссияРазведкаКонвой(): при выполнени команды GET, err=\n\t%v\n", err)
 		return
 	}
 	if err := sf.СтрОбновить(lstConvoy); err != nil {
-		// log._rintf("ERRO Convoy.checkWarForce(): пр обновлении lstConvoy, err=\n\t%v\n", err)
+		log.Printf("Конвой.проверитьМиссияРазведкаКонвой(): пр обновлении lstConvoy, err=\n\t%v\n", err)
 		return
 	}
-	// log._rintf("INFO Convoy.checkWarForce(): награда получена\n")
+	log.Printf("Конвой.проверитьМиссияРазведкаКонвой(): награда получена\n")
 }
 
 // Забирает награду в конвое "Мастер дозора"
@@ -390,7 +380,7 @@ func (sf *Конвой) проверитьМиссияМастерРазведк
 	)
 	if len(lstConvoy) == 0 {
 		if err := sf.net.UpdateLst(); err != nil {
-			// log._rintf("Convoy.check6frage(): при обновлении пустого lstConvoy, err=\n\t%v\n", err)
+			// log._rintf("Конвой.проверитьМиссияМастерРазведки(): при обновлении пустого lstConvoy, err=\n\t%v\n", err)
 			return
 		}
 		lstConvoy = sf.СписПолучить()
@@ -417,59 +407,50 @@ func (sf *Конвой) проверитьМиссияМастерРазведк
 	strLink = "https://wartank.ru/" + lstLink[0]
 	lstConvoy, err := sf.net.Get(strLink)
 	if err != nil {
-		// log._rintf("ERRO Convoy.checkMaster(): при выполнени команды GET, err=\n\t%v\n", err)
+		// log._rintf("ERRO Конвой.checkMaster(): при выполнени команды GET, err=\n\t%v\n", err)
 		return
 	}
 	if err := sf.СтрОбновить(lstConvoy); err != nil {
-		// log._rintf("ERRO Convoy.checkMaster(): пр обновлении lstConvoy, err=\n\t%v\n", err)
+		// log._rintf("ERRO Конвой.checkMaster(): пр обновлении lstConvoy, err=\n\t%v\n", err)
 		return
 	}
-	// log._rintf("INFO Convoy.checkMaster(): награда получена\n")
+	// log._rintf("INFO Конвой.checkMaster(): награда получена\n")
 }
 
 // Забирает награду в конвое "Уничтожь 6 врагов в конвое"
 func (sf *Конвой) проверитьМиссия6фрагов() {
 	var (
-		strOut    string
-		isFind    bool
-		lstConvoy = sf.СписПолучить()
-		ind       int
+		strOut string
+		isFind bool
 	)
-	if len(lstConvoy) == 0 {
-		if err := sf.net.UpdateLst(); err != nil {
-			// log._rintf("Convoy.check6frage(): при обновлении пустого lstConvoy, err=\n\t%v\n", err)
-			return
-		}
-		lstConvoy = sf.СписПолучить()
+	if err := sf.net.UpdateLst(); err != nil {
+		// log._rintf("Конвой.check6frage(): при обновлении пустого lstConvoy, err=\n\t%v\n", err)
+		return
 	}
-	for ind, strOut = range lstConvoy {
-		if strings.Contains(strOut, `Уничтожь 6 врагов в конвое<br/>`) {
+	lstConvoy := sf.СписПолучить()
+	// <a class="simple-but border" href="convoy?8-1.ILinkListener-missions-cc-1-c-awardLink"><span><span>Получить награду</span></span></a>
+	for _, strOut = range lstConvoy {
+		if strings.Contains(strOut, `.ILinkListener-missions-cc-1-c-awardLink`) {
 			isFind = true
-			ind += 23
-			strOut = lstConvoy[ind]
 			break
 		}
 	}
 	if !isFind {
 		return
 	}
-	// <a class="simple-but border" href="convoy?61-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
-	if !strings.Contains(strOut, `ILinkListener-missions-cc-0-c-awardLink`) {
-		return
-	}
-	lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
-	strLink := lstLink[1]
-	lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
-	// https://wartank.ru/convoy?61-1.ILinkListener-missions-cc-0-c-awardLink
-	strLink = "https://wartank.ru/" + lstLink[0]
-	lstConvoy, err := sf.net.Get(strLink)
-	if err != nil {
-		// log._rintf("ERRO Convoy.check6frage(): при выполнени команды GET, err=\n\t%v\n", err)
+	// <a class="simple-but border" href="convoy?8-1.ILinkListener-missions-cc-1-c-awardLink"><span><span>Получить награду</span></span></a>
+	_ссылка := strings.TrimPrefix(strOut, `<a class="simple-but border" href="`)
+	_ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Получить награду</span></span></a>`)
+	// https://wartank.ru/convoy?15-1.ILinkListener-missions-cc-1-c-awardLink
+	ссылка := "https://wartank.ru/" + _ссылка
+	lstConvoy, ош := sf.net.Клиент().Get(ссылка)
+	if ош != nil {
+		log.Printf("Конвой.проверитьМиссия6фрагов(): при выполнени команды GET, err=\n\t%v\n", ош)
 		return
 	}
 	if err := sf.СтрОбновить(lstConvoy); err != nil {
-		// log._rintf("ERRO Convoy.check6frage(): пр обновлении lstConvoy, err=\n\t%v\n", err)
+		log.Printf("Конвой.проверитьМиссия6фрагов(): при обновлении lstConvoy, ош=\n\t%v\n", err)
 		return
 	}
-	// log._rintf("INFO Convoy.check6frage(): награда получена\n")
+	log.Printf("Конвой.проверитьМиссия6фрагов(): награда получена\n")
 }

+ 12 - 10
server/serv_bots/warbot/angar/angar_attack/angar_attack.go → server/serv_bots/warbot/angar/fuel_attack/fuel_attack.go

@@ -1,5 +1,5 @@
-// package angar_attack -- объект боя на топливе
-package angar_attack
+// package fuel_attack -- объект боя на топливе
+package fuel_attack
 
 import (
 	"fmt"
@@ -32,36 +32,38 @@ func НовТопливоБой(angar types.ИАнгар) (*ТопливоБой
 	return sf, nil
 }
 
-func (sf *ТопливоБой) Пуск() error {
-	go sf.пуск()
+func (сам *ТопливоБой) Пуск() error {
+	go сам.пуск()
 	return nil
 }
 
-func (sf *ТопливоБой) пуск() {
+func (сам *ТопливоБой) пуск() {
 	for {
 		time.Sleep(time.Second * 30) // Минимальный интервал ожттдания прибавки топлива
-		топливо := sf.ангар.Топливо().Получ()
+		// сам.топливоПолуч()
+		топливо := сам.ангар.Топливо().Получ()
 		if топливо < cons.ТопливоМин { // Минимальная ёмкость бака -- 315
 			continue
 		}
 		log.Printf("Fuel.Run: val=%v\n", топливо)
-		списСтрБой, err := sf.начатьБой()
+		списСтрБой, err := сам.начатьБой()
 		if err != nil {
 			// log._rintf("ERRO ТопливоБой.findFuel(): in get page battle, err=\n\t%v\n", err)
 			continue
 		}
-		списВыстрел1, err := sf.выбратьБойСлабый(списСтрБой)
+		списВыстрел1, err := сам.выбратьБойСлабый(списСтрБой)
 		if err != nil {
 			// log._rintf("ERRO ТопливоБой.findFuel(): in get page shooting, err=\n\t%v\n", err)
 			continue
 		}
-		if err := sf.сделатьВыстрелы(списВыстрел1); err != nil {
+		if err := сам.сделатьВыстрелы(списВыстрел1); err != nil {
 			log.Printf("ERRO ТопливоБой.findFuel(): in make shooting, err=\n\t%v\n", err)
 		}
 	}
-
 }
 
+// Получает количество топлива
+
 // Идёт в атаку, если топлива больше cons.ТопливоМин
 func (sf *ТопливоБой) начатьБой() (спискСтрБой []string, err error) {
 	// Получить ссылку на атаку