Przeglądaj źródła

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

SVI 2 lat temu
rodzic
commit
d0712bbcd8

+ 34 - 34
server/serv_bots/warbot/angar/base/arsenal/arsenal.go

@@ -13,11 +13,11 @@ import (
 )
 
 /*
-	Объект арсенала на базе
+	Объект оружейной на базе
 */
 
-// Арсенал -- объект арсенала на базе
-type Арсенал struct {
+// Оружейная -- объект оружейной на базе
+type Оружейная struct {
 	*section.Секция
 	бот        types.ИБот
 	база       types.ИБаза
@@ -28,30 +28,30 @@ type Арсенал struct {
 	ремка      types.ИСтатПарам
 }
 
-// НовАрсенал -- возвращает новый *Arsenal
-func НовАрсенал(base types.ИБаза) (*Арсенал, error) {
+// НовОружейная -- возвращает новый *Arsenal
+func НовОружейная(base types.ИБаза) (*Оружейная, error) {
 	section, err := section.NewSection(base.Бот(), "Арсенал", `<span class="green2">Ремкомплект</span><br/>`)
 	if err != nil {
-		return nil, fmt.Errorf("NewArsenal(): in create ISection, err=\n\t%w", err)
+		return nil, fmt.Errorf("НовОружейная(): in create ISection, err=\n\t%w", err)
 	}
 
 	фугас, ош := static_param.НовСтатПарам("fugas")
 	if ош != nil {
-		return nil, fmt.Errorf("NewArsenal(): при создании статистики фугасов, ош=\n\t%w", ош)
+		return nil, fmt.Errorf("НовОружейная(): при создании статистики фугасов, ош=\n\t%w", ош)
 	}
 	бронейбойки, ош := static_param.НовСтатПарам("armor")
 	if ош != nil {
-		return nil, fmt.Errorf("NewArsenal(): при создании статистики бронебоек, ош=\n\t%w", ош)
+		return nil, fmt.Errorf("НовОружейная(): при создании статистики бронебоек, ош=\n\t%w", ош)
 	}
 	кумулятив, ош := static_param.НовСтатПарам("kumul")
 	if ош != nil {
-		return nil, fmt.Errorf("NewArsenal(): при создании статистики  кумулятивов, ош=\n\t%w", ош)
+		return nil, fmt.Errorf("НовОружейная(): при создании статистики  кумулятивов, ош=\n\t%w", ош)
 	}
 	ремка, ош := static_param.НовСтатПарам("remka")
 	if ош != nil {
-		return nil, fmt.Errorf("NewArsenal(): при создании статистики  ремок, ош=\n\t%w", ош)
+		return nil, fmt.Errorf("НовОружейная(): при создании статистики  ремок, ош=\n\t%w", ош)
 	}
-	сам := &Арсенал{
+	сам := &Оружейная{
 		Секция:     section,
 		бот:        base.Бот(),
 		база:       base,
@@ -63,20 +63,20 @@ func НовАрсенал(base types.ИБаза) (*Арсенал, error) {
 	{ // ArsenalNet
 		сам.сеть, err = arsenalnet.НовАрсеналСеть(сам)
 		if err != nil {
-			return nil, fmt.Errorf("NewArsenal(): in create NetArsenal, err=\n\t%w", err)
+			return nil, fmt.Errorf("НовОружейная(): in create NetArsenal, err=\n\t%w", err)
 		}
 	}
 	_ = types.ИАрсенал(сам)
 	return сам, nil
 }
 
-func (сам *Арсенал) Пуск() error {
+func (сам *Оружейная) Пуск() error {
 	go сам.пуск()
 	return nil
 }
 
 // запускает обработку арсенала
-func (сам *Арсенал) пуск() {
+func (сам *Оружейная) пуск() {
 	// sf.getTime()
 	time.Sleep(time.Second * 3)
 	for {
@@ -102,30 +102,30 @@ func (сам *Арсенал) пуск() {
 }
 
 // Фугасы -- возвращает объект числа фугасов
-func (sf *Арсенал) Фугасы() types.ИСтатПарам {
+func (sf *Оружейная) Фугасы() types.ИСтатПарам {
 	return sf.фугас
 }
 
 // Бронебойки -- возвращает объект бронебойных снарядов
-func (sf *Арсенал) Бронебойки() types.ИСтатПарам {
+func (sf *Оружейная) Бронебойки() types.ИСтатПарам {
 	return sf.бронебойка
 }
 
 // Кумулятивы -- возвращает объект бронебойных снарядов
-func (sf *Арсенал) Кумулятивы() types.ИСтатПарам {
+func (sf *Оружейная) Кумулятивы() types.ИСтатПарам {
 	return sf.кумулятив
 }
 
 // Ремки -- возвращает объект ремкомплектов
-func (sf *Арсенал) Ремки() types.ИСтатПарам {
+func (sf *Оружейная) Ремки() types.ИСтатПарам {
 	return sf.ремка
 }
 
 // Обновляет состояние арсенала по требованию
-func (sf *Арсенал) Обновить() (err error) {
+func (sf *Оружейная) Обновить() (err error) {
 	// _mt.Println("\tArsenalNet.updateArsenal()")
 	if err := sf.сеть.UpdateLst(); err != nil {
-		return fmt.Errorf("Arsenal.UpdateArsenal(): при обновлении lstArsenal, err=%w", err)
+		return fmt.Errorf("Оружейная.Обновить(): при обновлении lstArsenal, err=%w", err)
 	}
 	var (
 		strOut     string
@@ -144,7 +144,7 @@ func (sf *Арсенал) Обновить() (err error) {
 		strFugas = lstFugas[0]
 		iFugas, err := strconv.Atoi(strFugas)
 		if err != nil {
-			return fmt.Errorf("ArsenalNet.updateArsenal(): fugas(%v) not number, err=\n\t%w", strFugas, err)
+			return fmt.Errorf("Оружейная.Обновить(): fugas(%v) not number, err=\n\t%w", strFugas, err)
 		}
 		sf.Фугасы().Уст(iFugas)
 	}
@@ -161,7 +161,7 @@ func (sf *Арсенал) Обновить() (err error) {
 		strArmor = lstArmor[0]
 		iArmor, err := strconv.Atoi(strArmor)
 		if err != nil {
-			return fmt.Errorf("ArsenalNet.updateArsenal(): armor(%v) not number, err=\n\t%w", strArmor, err)
+			return fmt.Errorf("Оружейная.Обновить(): armor(%v) not number, err=\n\t%w", strArmor, err)
 		}
 		sf.Бронебойки().Уст(iArmor)
 	}
@@ -178,7 +178,7 @@ func (sf *Арсенал) Обновить() (err error) {
 		strKumul = lstKumul[0]
 		iKumul, err := strconv.Atoi(strKumul)
 		if err != nil {
-			return fmt.Errorf("ArsenalNet.updateArsenal(): kumul(%v) not number, err=\n\t%w", strKumul, err)
+			return fmt.Errorf("Оружейная.Обновить(): kumul(%v) not number, err=\n\t%w", strKumul, err)
 		}
 		sf.Кумулятивы().Уст(iKumul)
 	}
@@ -195,7 +195,7 @@ func (sf *Арсенал) Обновить() (err error) {
 		strRemka = lstRemka[0]
 		iRemka, err := strconv.Atoi(strRemka)
 		if err != nil {
-			return fmt.Errorf("ArsenalNet.updateArsenal(): remka(%v) not number, err=\n\t%w", strRemka, err)
+			return fmt.Errorf("Оружейная.Обновить(): remka(%v) not number, err=\n\t%w", strRemka, err)
 		}
 		sf.Ремки().Уст(iRemka)
 	}
@@ -203,19 +203,19 @@ func (sf *Арсенал) Обновить() (err error) {
 }
 
 // Выбирает что надо делать, запускает процесс изготовления
-func (sf *Арсенал) сделать() {
+func (sf *Оружейная) сделать() {
 	err := sf.сеть.UpdateLst()
 	if err != nil {
-		// log._rintf("ERRO Arsenal.Run(): при обновлении lstArsenal, err=\n\t%v\n", err)
+		// log._rintf("ERRO Оружейная.сделать(): при обновлении lstArsenal, err=\n\t%v\n", err)
 		return
 	}
 	fnMakeRemka := func() {
 		if err = sf.makeRemka(); err != nil {
-			// log._rintf("ERRO ArsenalNet.makeArsenal(): in make remka, err=\n\t%v\n", err)
+			// log._rintf("ERRO Оружейная.сделать(): in make remka, err=\n\t%v\n", err)
 			return
 		}
 	}
-	// _mt.Println("\tArsenalNet.makeArsenal()")
+	// _mt.Println("\tArsenalNet.сделать()")
 	{ // Контроль ремки по времени суток и минимальному количеству
 		iRemka := sf.Ремки().Получ()
 		if iRemka < 70 {
@@ -247,13 +247,13 @@ func (sf *Арсенал) сделать() {
 		case "armor": // Мало бронебойных
 			sf.makeArmor()
 		default:
-			// log._rintf("ERRO ArsenalNet.makeArsenal(): неизвестный тип арсенала(%v)", typeArmor)
+			// log._rintf("ERRO Оружейная.сделать(): неизвестный тип арсенала(%v)", typeArmor)
 		}
 	}
 }
 
 // Создать бронебойные
-func (sf *Арсенал) makeArmor() {
+func (sf *Оружейная) makeArmor() {
 	var (
 		strOut     string
 		lstArsenal = sf.СписПолучить()
@@ -288,7 +288,7 @@ func (sf *Арсенал) makeArmor() {
 }
 
 // Создать кумулятивные
-func (sf *Арсенал) makeKumul() {
+func (sf *Оружейная) makeKumul() {
 	var (
 		strOut     string
 		lstArsenal = sf.СписПолучить()
@@ -322,7 +322,7 @@ func (sf *Арсенал) makeKumul() {
 }
 
 // Создать фугасы
-func (sf *Арсенал) makeFugas() {
+func (sf *Оружейная) makeFugas() {
 	var (
 		lstArsenal = sf.СписПолучить()
 		strOut     = ""
@@ -353,11 +353,11 @@ func (sf *Арсенал) makeFugas() {
 		return
 	}
 	sf.РежимТекущ().РежимУст("фугасы")
-	// log._rintf("INFO Arsenal.makeFugas()\n")
+	// log._rintf("INFO Оружейная.makeFugas()\n")
 }
 
 // Создать ремку. Выполняется если подходят условия
-func (sf *Арсенал) makeRemka() (err error) {
+func (sf *Оружейная) makeRemka() (err error) {
 	// _mt.Println("\tArsenalNet.makeRemka()")
 	var (
 		strOut     = ""

+ 5 - 5
server/serv_bots/warbot/angar/base/base.go

@@ -33,9 +33,9 @@ const (
 type База struct {
 	*section.Секция
 	сеть      *basenet.BaseNet
-	арсенал   *arsenal.Арсенал
+	арсенал   *arsenal.Оружейная
 	банк      *bank.Банк
-	полигон   *polygon.Polygon
+	полигон   *polygon.Полигон
 	шахта     *mine.Шахта
 	ранок     *market.Рынок
 	времОстат int // Сколько времени спать до опроса базы
@@ -59,7 +59,7 @@ func НовБаза(ангар types.ИАнгар) (*База, error) {
 		}
 	}
 	{ // Arsenal
-		sf.арсенал, err = arsenal.НовАрсенал(sf)
+		sf.арсенал, err = arsenal.НовОружейная(sf)
 		if err != nil {
 			return nil, fmt.Errorf("NewBase(): in create IArsenal, err=\n\t%w", err)
 		}
@@ -83,7 +83,7 @@ func НовБаза(ангар types.ИАнгар) (*База, error) {
 		}
 	}
 	{ // Polygon
-		sf.полигон, err = polygon.NewPolygon(sf)
+		sf.полигон, err = polygon.НовПолигон(sf)
 		if err != nil {
 			return nil, fmt.Errorf("NewBase(): in create IPolygon, err=\n\t%w", err)
 		}
@@ -146,7 +146,7 @@ func (sf *База) runComponent() error {
 	if err := sf.ранок.Пуск(); err != nil {
 		return fmt.Errorf("Base.run(): in run IMarket, err=\n\t%w", err)
 	}
-	if err := sf.полигон.Run(); err != nil {
+	if err := sf.полигон.Пуск(); err != nil {
 		return fmt.Errorf("Base.run(): in run IPolygon, err=\n\t%w", err)
 	}
 	return nil

+ 124 - 55
server/serv_bots/warbot/angar/base/polygon/polygon.go

@@ -2,8 +2,10 @@ package polygon
 
 import (
 	"fmt"
+	"log"
 	"strconv"
 	"strings"
+	"time"
 
 	"wartank/pkg/components/section"
 	"wartank/pkg/types"
@@ -14,71 +16,138 @@ import (
 	Объект полигона на базе
 */
 
-// Polygon -- объект полигона на базе
-type Polygon struct {
+// Полигон -- объект полигона на базе
+type Полигон struct {
 	*section.Секция
-	bot      types.ИБот
-	tankStat types.ИТанкСтат
-	net      *polygonnet.PolygonNet
+	бот      types.ИБот
+	танкСтат types.ИТанкСтат
+	сеть     *polygonnet.ПолигонСеть
 }
 
-// NewPolygon -- возвращает новый *Polygon
-func NewPolygon(base types.ИБаза) (*Polygon, error) {
-	section, err := section.NewSection(base.Бот(), "Полигон", `<title>Полигон</title>`)
-	if err != nil {
-		return nil, fmt.Errorf("NewPolygon(): in create *Section, err=\n\t%w", err)
+// НовПолигон -- возвращает новый *Polygon
+func НовПолигон(base types.ИБаза) (*Полигон, error) {
+	секция, ош := section.NewSection(base.Бот(), "Полигон", `<title>Полигон</title>`)
+	if ош != nil {
+		return nil, fmt.Errorf("NewPolygon(): in create *Section, err=\n\t%w", ош)
 	}
-	sf := &Polygon{
-		Секция:   section,
-		bot:      base.Бот(),
-		tankStat: base.Бот().Танк().ТанкСтат(),
+	сам := &Полигон{
+		Секция:   секция,
+		бот:      base.Бот(),
+		танкСтат: base.Бот().Танк().ТанкСтат(),
 	}
-	sf.net, err = polygonnet.NewPolygonNet(sf)
-	if err != nil {
-		return nil, fmt.Errorf("NewPolygon(): in create NetPolygon, err=\n\t%w", err)
+	сам.сеть, ош = polygonnet.НовПолигонСеть(сам)
+	if ош != nil {
+		return nil, fmt.Errorf("NewPolygon(): in create NetPolygon, err=\n\t%w", ош)
 	}
-	return sf, nil
+	return сам, nil
 }
 
-// Run -- запускает работу полигона в отдельном потоке
-func (sf *Polygon) Run() error {
-	go sf.run()
+// Пуск -- запускает работу полигона в отдельном потоке
+func (sf *Полигон) Пуск() error {
+	go sf.пуск()
 	return nil
 }
 
 // выполняет опрос полигона базы.
-func (sf *Polygon) run() {
-	sf.SetCountDown(2)
+func (сам *Полигон) пуск() {
+	сам.SetCountDown(2)
 	for {
 		select {
-		case <-sf.bot.Кнт().Done():
-			sf.ВремяОпрос().Стоп()
+		case <-сам.бот.Кнт().Done():
+			сам.ВремяОпрос().Стоп()
 			return
-		case <-sf.ВремяОпрос().КаналСиг():
-			mode := sf.РежимТекущ().Получ()
+		case <-сам.ВремяОпрос().КаналСиг():
+		default:
+			mode := сам.РежимТекущ().Получ()
 			if mode == "upgrade" {
 				continue
 			}
-			sf.addForce()
-			sf.checkForce()
-			sf.updateTime()
+			сам.усилениеДобавить()
+			сам.усилениеПровер()
+			сам.времяОбнов()
+			сам.построитьПровер()
+			time.Sleep(time.Minute * 20)
+		}
+	}
+}
+
+// Проверяет необходимость постройки полигона
+func (сам *Полигон) построитьПровер() {
+	фнПостроить := func() bool { // Поиск кнопки строительства
+		// https://wartank.ru/building-upgrade/Polygon
+		списПолигон, ош := сам.сеть.Клиент().Get("https://wartank.ru/building-upgrade/Polygon")
+		if ош != nil {
+			log.Printf("Полигон.построитьПровер(): при чтении страницы строительства полигона, ош=\n\t%v\n", ош)
+			return false
+		}
+		стрСсылка := ""
+		еслиНайти := false
+		// <a class="simple-but border mb5" href="Polygon?66-1.ILinkListener-upgradeLink-link">
+		for _, стрСсылка = range списПолигон {
+			if strings.Contains(стрСсылка, `href="Polygon?`) {
+				еслиНайти = true
+				break
+			}
+		}
+		if !еслиНайти { // Время полигона вышло
+			return false
+		}
+		_ссылка := strings.TrimPrefix(стрСсылка, `<a class="simple-but border mb5" href="`)
+		_ссылка = strings.TrimSuffix(_ссылка, `">`)
+		ссылка := "https://wartank.ru/building-upgrade/" + _ссылка
+		// https://wartank.ru/building-upgrade/Polygon?83-1.ILinkListener-upgradeLink-link
+		списПолигон, ош = сам.сеть.Клиент().Get(ссылка)
+		if ош != nil {
+			log.Printf("Полигон.построитьПровер(): при выполнении запроса на строительство, ош=\n\t%v\n", ош)
+			return false
+		}
+		for _, стр := range списПолигон {
+			if strings.Contains(стр, `href="Polygon?`) {
+				return false
+			}
+		}
+		{ // подтверждение постройки
+			// "<a class=\"simple-but border w50 mXa mb10\" w:id=\"confirmLink\" href=\"../wicket/page?13-1.ILinkListener-confirmLink\"><span><span>да, подтверждаю</span></span></a>"
+			стрСсылка := ""
+			еслиНайти := false
+			for _, стрСсылка = range списПолигон {
+				if strings.Contains(стрСсылка, `.ILinkListener-confirmLink`) {
+					еслиНайти = true
+					break
+				}
+			}
+			if !еслиНайти { // Время полигона вышло
+				return false
+			}
+			_ссылка := strings.TrimPrefix(стрСсылка, "<a class=\"simple-but border w50 mXa mb10\" w:id=\"confirmLink\" href=\"../")
+			_ссылка = strings.TrimSuffix(_ссылка, "\"><span><span>да, подтверждаю</span></span></a>")
+			ссылка := "https://wartank.ru/" + _ссылка
+			// https://wartank.ru/wicket/page?135-1.ILinkListener-confirmLink
+			_, ош = сам.сеть.Клиент().Get(ссылка)
+			if ош != nil {
+				log.Printf("Полигон.построитьПровер(): при выполнении запроса на строительство, ош=\n\t%v\n", ош)
+				return false
+			}
 		}
+		return true
 	}
+	фнПостроить()
+	log.Printf("Полигон.построитьПровер(): построен упешно\n")
 }
 
 // Обновляет оставшееся время полигона
 //
 //	Этот объект сам описывает своё время
-func (sf *Polygon) updateTime() {
+func (сам *Полигон) времяОбнов() {
 	var (
 		strLastTime string
 		isFind      bool
 		isSet       bool
-		lstPolygon  = sf.СписПолучить()
+		lstPolygon  = сам.СписПолучить()
 	)
 	defer func() {
 		if !isSet {
-			sf.SetCountDown(5)
+			сам.SetCountDown(5)
 		}
 	}()
 	for _, lastTime := range lstPolygon {
@@ -95,7 +164,7 @@ func (sf *Polygon) updateTime() {
 	strLastTime = lstTime[1]
 	lstTime = strings.Split(strLastTime, `</span>`)
 	strLastTime = lstTime[0]
-	if err := sf.ParseCountDown(strLastTime); err != nil {
+	if err := сам.ParseCountDown(strLastTime); err != nil {
 		// log._rintf("ERRO Polygon.updateTime(): при установке времени ожидания полигона(%v)\n\terr=%v\n", strLastTime, err)
 		return
 	}
@@ -103,10 +172,10 @@ func (sf *Polygon) updateTime() {
 }
 
 // Проверяет что именно активировано
-func (sf *Polygon) checkForce() {
+func (сам *Полигон) усилениеПровер() {
 	var (
 		isFind     bool
-		lstPolygon = sf.СписПолучить()
+		lstPolygon = сам.СписПолучить()
 		ind        = 0
 		strOut     string
 	)
@@ -144,21 +213,21 @@ func (sf *Polygon) checkForce() {
 		// log._rintf("NetPolygon.checkTime(): force(%v) not number, err=\n\t%v\n", strOut, err)
 		return
 	}
-	sf.tankStat.ФорсажОбнов(форсажИмя, iForce)
+	сам.танкСтат.ФорсажОбнов(форсажИмя, iForce)
 }
 
 // Выбирает самый слабый параметр и усиливает его
-func (sf *Polygon) addForce() {
-	if err := sf.net.UpdateLst(); err != nil {
+func (сам *Полигон) усилениеДобавить() {
+	if err := сам.сеть.UpdateLst(); err != nil {
 		// log._rintf("Polygon.checkPolygon(): при принудительном обновлении lstPlygon, mode=%s\terr=\n\t%v\n", sf.ModeCurrent().Get(), err)
-		sf.SetCountDown(5)
+		сам.SetCountDown(5)
 		return
 	}
-	lstPoligon := sf.СписПолучить()
+	lstPoligon := сам.СписПолучить()
 	if len(lstPoligon) == 0 {
 		return
 	}
-	stat := sf.tankStat
+	stat := сам.танкСтат
 	iAttack := stat.Атака().Получ()
 	iArmor := stat.Броня().Получ()
 	iFyne := stat.Точность().Получ()
@@ -216,7 +285,7 @@ func (sf *Polygon) addForce() {
 		strOut = lstLink[1]
 		lstLink = strings.Split(strOut, `"><span><span>Получить бесплатно</span></span></a>`)
 		strLink := "https://wartank.ru/" + lstLink[0]
-		if _, err := sf.net.Get(strLink); err != nil {
+		if _, err := сам.сеть.Get(strLink); err != nil {
 			// log._rintf("ERRO NetPolygon.addForce(): in make request force attack, err=\n\t%v\n", err)
 			return
 		}
@@ -231,8 +300,8 @@ func (sf *Polygon) addForce() {
 				// log._rintf("ERRO NetPolygon.addForce(): strForceAttack(%v) not int, err=\n\t%v\n", strForce, err)
 				return
 			}
-			sf.tankStat.ФорсажОбнов("attack", iForce)
-			sf.РежимТекущ().Уст("атака")
+			сам.танкСтат.ФорсажОбнов("attack", iForce)
+			сам.РежимТекущ().Уст("атака")
 		}
 	case "armor": // Усиливаем броню
 		isFind = false
@@ -254,7 +323,7 @@ func (sf *Polygon) addForce() {
 		strOut = lstLink[1]
 		lstLink = strings.Split(strOut, `"><span><span>Получить бесплатно</span></span></a>`)
 		strLink := "https://wartank.ru/" + lstLink[0]
-		if _, err := sf.net.Get(strLink); err != nil {
+		if _, err := сам.сеть.Get(strLink); err != nil {
 			// log._rintf("NetPolygon.addForce(): in make request force armor, err=\n\t%v\n", err)
 			return
 		}
@@ -269,8 +338,8 @@ func (sf *Polygon) addForce() {
 				// log._rintf("ERRO NetPolygon.addForce(): strForceArmor(%v) not int, err=\n\t%v\n", strForce, err)
 				return
 			}
-			sf.tankStat.ФорсажОбнов("armor", iForce)
-			sf.РежимТекущ().Уст("броня")
+			сам.танкСтат.ФорсажОбнов("armor", iForce)
+			сам.РежимТекущ().Уст("броня")
 		}
 	case "fyne": // Усиливаем точность
 		isFind = false
@@ -292,7 +361,7 @@ func (sf *Polygon) addForce() {
 		strOut = lstLink[1]
 		lstLink = strings.Split(strOut, `"><span><span>Получить бесплатно</span></span></a>`)
 		strLink := "https://wartank.ru/" + lstLink[0]
-		if _, err := sf.net.Get(strLink); err != nil {
+		if _, err := сам.сеть.Get(strLink); err != nil {
 			// log._rintf("ERRO NetPolygon.addForce(): in make request force fyne, err=\n\t%v\n", err)
 			return
 		}
@@ -307,8 +376,8 @@ func (sf *Polygon) addForce() {
 				// log._rintf("ERRO NetPolygon.addForce(): strForceFyne(%v) not int, err=\n\t%v\n", strForce, err)
 				return
 			}
-			sf.tankStat.ФорсажОбнов("fyne", iForce)
-			sf.РежимТекущ().Уст("точность")
+			сам.танкСтат.ФорсажОбнов("fyne", iForce)
+			сам.РежимТекущ().Уст("точность")
 		}
 	case "hard": // Усиливаем мощность
 		isFind = false
@@ -327,7 +396,7 @@ func (sf *Polygon) addForce() {
 		strOut = lstLink[1]
 		lstLink = strings.Split(strOut, `"><span><span>Получить бесплатно</span></span></a>`)
 		strLink := "https://wartank.ru/" + lstLink[0]
-		if _, err := sf.net.Get(strLink); err != nil {
+		if _, err := сам.сеть.Get(strLink); err != nil {
 			// log._rintf("NetPolygon.addForce(): in make request force hard, err=\n\t%v\n", err)
 			return
 		}
@@ -342,11 +411,11 @@ func (sf *Polygon) addForce() {
 				// log._rintf("ERRO NetPolygon.addForce(): strForceHard(%v) not int, err=\n\t%v\n", strForce, err)
 				return
 			}
-			sf.tankStat.ФорсажОбнов("hard", iForce)
-			sf.РежимТекущ().Уст("прочность")
+			сам.танкСтат.ФорсажОбнов("hard", iForce)
+			сам.РежимТекущ().Уст("прочность")
 		}
 	default: // Неизвестно что
-		sf.РежимТекущ().Уст("неизвестно")
+		сам.РежимТекущ().Уст("неизвестно")
 		// log._rintf("ERRO NetPolygon.addForce(): неизвестно что это, strParam=%q", strParam)
 		return
 	}

+ 5 - 5
server/serv_bots/warbot/angar/base/polygon/polygonnet/polygonnet.go

@@ -11,19 +11,19 @@ import (
 	Опрашивает полигон в сети
 */
 
-// PolygonNet -- опрашивает полигон на базе
-type PolygonNet struct {
+// ПолигонСеть -- опрашивает полигон на базе
+type ПолигонСеть struct {
 	*sectionnet.SectionNet
 }
 
-// NewPolygonNet -- возвращает новый *PolygonNet
-func NewPolygonNet(polygon types.ИПолигон) (*PolygonNet, error) {
+// НовПолигонСеть -- возвращает новый *PolygonNet
+func НовПолигонСеть(polygon types.ИПолигон) (*ПолигонСеть, error) {
 	sectionNet, err := sectionnet.NewSectionNet(polygon, "https://wartank.ru/polygon")
 	if err != nil {
 		return nil, fmt.Errorf("NewPolygonNet(): in create *SectionNet, err=\n\t%w", err)
 	}
 
-	sf := &PolygonNet{
+	sf := &ПолигонСеть{
 		SectionNet: sectionNet,
 	}
 

+ 18 - 23
server/serv_bots/warbot/angar/missions/missions.go

@@ -52,11 +52,7 @@ func (sf *Миссии) пуск() {
 		// time.Sleep(time.Minute * 1)
 		select {
 		case <-sf.бот.Кнт().Done():
-		// if err := sf.сеть.UpdateLst(); err != nil {
-		// 	// log._rintf("ERRO Миссии.run(): при обновлении lstMissions, err=\n\t%v\n", err)
-		// 	return
-		// }
-		// sf.проверНаграда()
+			return
 		default:
 			sf.проверНаграда()
 			time.Sleep(time.Minute * 1)
@@ -118,15 +114,20 @@ func (sf *Миссии) kill3tanks() {
 }
 
 // Проверяет награду оборонительного сражения
-func (sf *Миссии) сражениеЗащита() {
+func (сам *Миссии) сражениеЗащита() {
 	var (
-		strOut      string
-		lstMissions = sf.СписПолучить()
-		isFind      bool
-		ind         int
+		strOut string
+		isFind bool
 	)
-	for ind, strOut = range lstMissions {
-		if strings.Contains(strOut, `Проведи одно оборонительное сражение<br/>`) {
+	ош := сам.сеть.UpdateLst()
+	if ош != nil {
+		log.Printf("Миссии.сражениеЗащита(): при обновлении списка строк миссий, ош:=\n\t%v\n", ош)
+		return
+	}
+	списМиссия := сам.СписПолучить()
+	// <a class="simple-but border" href="?23-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
+	for _, strOut = range списМиссия {
+		if strings.Contains(strOut, `.ILinkListener-missions-cc-0-c-awardLink`) {
 			isFind = true
 			break
 		}
@@ -135,21 +136,15 @@ func (sf *Миссии) сражениеЗащита() {
 		return
 	}
 	// <a class="simple-but border" href="?70-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
-	ind += 23
-	strOut = lstMissions[ind]
-	if !strings.Contains(strOut, `>Получить награду<`) {
-		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/missions/" + lstLink[0]
-	lstMissions, err := sf.сеть.Get(strLink)
+	_ссылка := strings.TrimPrefix(strOut, `<a class="simple-but border" href="`)
+	_ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Получить награду</span></span></a>`)
+	strLink := "https://wartank.ru/missions/" + _ссылка
+	списМиссия, err := сам.сеть.Get(strLink)
 	if err != nil {
 		// log._rintf("ERRO Миссии.battleDefence(): при выполнении GET-запроса, err=\n\t%v\n", err)
 		return
 	}
-	if err := sf.СтрОбновить(lstMissions); err != nil {
+	if err := сам.СтрОбновить(списМиссия); err != nil {
 		// log._rintf("ERRO Миссии.battleDefence(): при обновлении lstMissions, err=\n\t%v\n", err)
 		return
 	}