Browse Source

d04 Добавление постройки оружейки; банк доделать

SVI 2 years ago
parent
commit
a94dd8f73b

+ 132 - 41
server/serv_bots/warbot/angar/base/arsenal/arsenal.go

@@ -2,6 +2,7 @@ package arsenal
 
 
 import (
 import (
 	"fmt"
 	"fmt"
+	"log"
 	"strconv"
 	"strconv"
 	"strings"
 	"strings"
 	"time"
 	"time"
@@ -95,41 +96,131 @@ func (сам *Оружейная) пуск() {
 				continue
 				continue
 			}
 			}
 			сам.Обновить()
 			сам.Обновить()
+			сам.проверитьПостроить()
 			сам.сделать()
 			сам.сделать()
 			time.Sleep(time.Second * 305) // Интервал 5 минут и ещё 5 секунд (кратно интервалу производства -- от 40 минут до 1 часа)
 			time.Sleep(time.Second * 305) // Интервал 5 минут и ещё 5 секунд (кратно интервалу производства -- от 40 минут до 1 часа)
 		}
 		}
 	}
 	}
 }
 }
 
 
+// Проверяет необходимость постройки полигона
+func (сам *Оружейная) проверитьПостроить() {
+	фнПостроить := func() bool {
+		var (
+			списПолигон []string
+			ош          error
+		)
+		{ // Зайти на страницу постройки
+			// https://wartank.ru/building-upgrade/Armory
+			списПолигон, ош = сам.сеть.Клиент().Get("https://wartank.ru/building-upgrade/Armory")
+			if ош != nil {
+				log.Printf("Оружейная.построитьПровер(): при чтении страницы строительства оружейки, ош=\n\t%v\n", ош)
+				return false
+			}
+			стрСсылка := ""
+			еслиНайти := false
+			// <a class="simple-but border mb5" href="Armory?163-1.ILinkListener-upgradeLink-link">
+			for _, стрСсылка = range списПолигон {
+				if strings.Contains(стрСсылка, `href="Armory?`) {
+					еслиНайти = 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/Armory?162-1.ILinkListener-upgradeLink-link
+			списПолигон, ош = сам.сеть.Клиент().Get(ссылка)
+			if ош != nil {
+				log.Printf("Оружейная.построитьПровер(): при выполнении запроса на строительство, ош=\n\t%v\n", ош)
+				return false
+			}
+		}
+		{ // Заказать постройку
+			// https://wartank.ru/building-upgrade/Armory
+			стрСсылка := ""
+			еслиНайти := false
+			// <a class="simple-but border mb5" href="Armory?163-1.ILinkListener-upgradeLink-link">
+			for _, стрСсылка = range списПолигон {
+				if strings.Contains(стрСсылка, `href="Armory?`) {
+					еслиНайти = 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/Armory?162-1.ILinkListener-upgradeLink-link
+			списПолигон, ош = сам.сеть.Клиент().Get(ссылка)
+			if ош != nil {
+				log.Printf("Оружейная.построитьПровер(): при выполнении запроса на строительство, ош=\n\t%v\n", ош)
+				return false
+			}
+		}
+		{ // подтверждение постройки
+			// <a class="simple-but border w50 mXa mb10" w:id="confirmLink" href="../wicket/page?165-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 *Оружейная) Фугасы() types.ИСтатПарам {
-	return sf.фугас
+func (сам *Оружейная) Фугасы() types.ИСтатПарам {
+	return сам.фугас
 }
 }
 
 
 // Бронебойки -- возвращает объект бронебойных снарядов
 // Бронебойки -- возвращает объект бронебойных снарядов
-func (sf *Оружейная) Бронебойки() types.ИСтатПарам {
-	return sf.бронебойка
+func (сам *Оружейная) Бронебойки() types.ИСтатПарам {
+	return сам.бронебойка
 }
 }
 
 
 // Кумулятивы -- возвращает объект бронебойных снарядов
 // Кумулятивы -- возвращает объект бронебойных снарядов
-func (sf *Оружейная) Кумулятивы() types.ИСтатПарам {
-	return sf.кумулятив
+func (сам *Оружейная) Кумулятивы() types.ИСтатПарам {
+	return сам.кумулятив
 }
 }
 
 
 // Ремки -- возвращает объект ремкомплектов
 // Ремки -- возвращает объект ремкомплектов
-func (sf *Оружейная) Ремки() types.ИСтатПарам {
-	return sf.ремка
+func (сам *Оружейная) Ремки() types.ИСтатПарам {
+	return сам.ремка
 }
 }
 
 
 // Обновляет состояние арсенала по требованию
 // Обновляет состояние арсенала по требованию
-func (sf *Оружейная) Обновить() (err error) {
+func (сам *Оружейная) Обновить() (err error) {
 	// _mt.Println("\tArsenalNet.updateArsenal()")
 	// _mt.Println("\tArsenalNet.updateArsenal()")
-	if err := sf.сеть.UpdateLst(); err != nil {
+	if err := сам.сеть.UpdateLst(); err != nil {
 		return fmt.Errorf("Оружейная.Обновить(): при обновлении lstArsenal, err=%w", err)
 		return fmt.Errorf("Оружейная.Обновить(): при обновлении lstArsenal, err=%w", err)
 	}
 	}
 	var (
 	var (
 		strOut     string
 		strOut     string
-		lstArsenal = sf.СписПолучить()
+		lstArsenal = сам.СписПолучить()
 	)
 	)
 	{ // Найти маркер фугасного снаряда
 	{ // Найти маркер фугасного снаряда
 		for _, strFugas := range lstArsenal {
 		for _, strFugas := range lstArsenal {
@@ -146,7 +237,7 @@ func (sf *Оружейная) Обновить() (err error) {
 		if err != nil {
 		if err != nil {
 			return fmt.Errorf("Оружейная.Обновить(): 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)
+		сам.Фугасы().Уст(iFugas)
 	}
 	}
 	{ // Найти маркер бронебойного снаряда
 	{ // Найти маркер бронебойного снаряда
 		for _, strArmor := range lstArsenal {
 		for _, strArmor := range lstArsenal {
@@ -163,7 +254,7 @@ func (sf *Оружейная) Обновить() (err error) {
 		if err != nil {
 		if err != nil {
 			return fmt.Errorf("Оружейная.Обновить(): 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)
+		сам.Бронебойки().Уст(iArmor)
 	}
 	}
 	{ // Найти маркер кумулятивного снаряда
 	{ // Найти маркер кумулятивного снаряда
 		for _, strKumul := range lstArsenal {
 		for _, strKumul := range lstArsenal {
@@ -180,7 +271,7 @@ func (sf *Оружейная) Обновить() (err error) {
 		if err != nil {
 		if err != nil {
 			return fmt.Errorf("Оружейная.Обновить(): 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)
+		сам.Кумулятивы().Уст(iKumul)
 	}
 	}
 	{ // Найти маркер ремкомплекта
 	{ // Найти маркер ремкомплекта
 		for ind, strRemka := range lstArsenal {
 		for ind, strRemka := range lstArsenal {
@@ -197,36 +288,36 @@ func (sf *Оружейная) Обновить() (err error) {
 		if err != nil {
 		if err != nil {
 			return fmt.Errorf("Оружейная.Обновить(): 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)
+		сам.Ремки().Уст(iRemka)
 	}
 	}
 	return nil
 	return nil
 }
 }
 
 
 // Выбирает что надо делать, запускает процесс изготовления
 // Выбирает что надо делать, запускает процесс изготовления
-func (sf *Оружейная) сделать() {
-	err := sf.сеть.UpdateLst()
+func (сам *Оружейная) сделать() {
+	err := сам.сеть.UpdateLst()
 	if err != nil {
 	if err != nil {
 		// log._rintf("ERRO Оружейная.сделать(): при обновлении lstArsenal, err=\n\t%v\n", err)
 		// log._rintf("ERRO Оружейная.сделать(): при обновлении lstArsenal, err=\n\t%v\n", err)
 		return
 		return
 	}
 	}
 	fnMakeRemka := func() {
 	fnMakeRemka := func() {
-		if err = sf.makeRemka(); err != nil {
+		if err = сам.сделатьРемку(); err != nil {
 			// log._rintf("ERRO Оружейная.сделать(): in make remka, err=\n\t%v\n", err)
 			// log._rintf("ERRO Оружейная.сделать(): in make remka, err=\n\t%v\n", err)
 			return
 			return
 		}
 		}
 	}
 	}
 	// _mt.Println("\tArsenalNet.сделать()")
 	// _mt.Println("\tArsenalNet.сделать()")
 	{ // Контроль ремки по времени суток и минимальному количеству
 	{ // Контроль ремки по времени суток и минимальному количеству
-		iRemka := sf.Ремки().Получ()
+		iRemka := сам.Ремки().Получ()
 		if iRemka < 70 {
 		if iRemka < 70 {
 			fnMakeRemka()
 			fnMakeRemka()
 			return
 			return
 		}
 		}
 	}
 	}
 	{ // Контроль по числу снарядов. В равных долях без приоритетов
 	{ // Контроль по числу снарядов. В равных долях без приоритетов
-		iFugas := sf.Фугасы().Получ()
-		iKumul := sf.Кумулятивы().Получ()
-		iArmor := sf.Бронебойки().Получ()
+		iFugas := сам.Фугасы().Получ()
+		iKumul := сам.Кумулятивы().Получ()
+		iArmor := сам.Бронебойки().Получ()
 
 
 		typeArmor := "fugas"
 		typeArmor := "fugas"
 		typeVal := iFugas
 		typeVal := iFugas
@@ -241,11 +332,11 @@ func (sf *Оружейная) сделать() {
 		}
 		}
 		switch typeArmor {
 		switch typeArmor {
 		case "fugas": // Мало фугасов
 		case "fugas": // Мало фугасов
-			sf.makeFugas()
+			сам.сдлатьФугасы()
 		case "kumul": // Мало кумулятивов
 		case "kumul": // Мало кумулятивов
-			sf.makeKumul()
+			сам.сделатьКумули()
 		case "armor": // Мало бронебойных
 		case "armor": // Мало бронебойных
-			sf.makeArmor()
+			сам.сделатьБронебойки()
 		default:
 		default:
 			// log._rintf("ERRO Оружейная.сделать(): неизвестный тип арсенала(%v)", typeArmor)
 			// log._rintf("ERRO Оружейная.сделать(): неизвестный тип арсенала(%v)", typeArmor)
 		}
 		}
@@ -253,10 +344,10 @@ func (sf *Оружейная) сделать() {
 }
 }
 
 
 // Создать бронебойные
 // Создать бронебойные
-func (sf *Оружейная) makeArmor() {
+func (сам *Оружейная) сделатьБронебойки() {
 	var (
 	var (
 		strOut     string
 		strOut     string
-		lstArsenal = sf.СписПолучить()
+		lstArsenal = сам.СписПолучить()
 		isFind     bool
 		isFind     bool
 	)
 	)
 	for ind, strArmor := range lstArsenal {
 	for ind, strArmor := range lstArsenal {
@@ -280,18 +371,18 @@ func (sf *Оружейная) makeArmor() {
 	strLink := lstArmor[1]
 	strLink := lstArmor[1]
 	lstArmor = strings.Split(strLink, `"><span><span>Начать производство</span></span></a>`)
 	lstArmor = strings.Split(strLink, `"><span><span>Начать производство</span></span></a>`)
 	strLink = "https://wartank.ru/production/" + lstArmor[0]
 	strLink = "https://wartank.ru/production/" + lstArmor[0]
-	if _, err := sf.сеть.Get(strLink); err != nil {
+	if _, err := сам.сеть.Get(strLink); err != nil {
 		// log._rintf("ERRO ArsenalNet.makeArmor(): in update lstArsenal,  err=\n\t%v\n", err)
 		// log._rintf("ERRO ArsenalNet.makeArmor(): in update lstArsenal,  err=\n\t%v\n", err)
 		return
 		return
 	}
 	}
-	sf.РежимТекущ().РежимУст("бронебойные")
+	сам.РежимТекущ().РежимУст("бронебойные")
 }
 }
 
 
 // Создать кумулятивные
 // Создать кумулятивные
-func (sf *Оружейная) makeKumul() {
+func (сам *Оружейная) сделатьКумули() {
 	var (
 	var (
 		strOut     string
 		strOut     string
-		lstArsenal = sf.СписПолучить()
+		lstArsenal = сам.СписПолучить()
 		isFind     bool
 		isFind     bool
 		ind        int
 		ind        int
 	)
 	)
@@ -314,17 +405,17 @@ func (sf *Оружейная) makeKumul() {
 	strLink := lstKumul[1]
 	strLink := lstKumul[1]
 	lstKumul = strings.Split(strLink, `"><span><span>Начать производство</span></span></a>`)
 	lstKumul = strings.Split(strLink, `"><span><span>Начать производство</span></span></a>`)
 	strLink = "https://wartank.ru/production/" + lstKumul[0]
 	strLink = "https://wartank.ru/production/" + lstKumul[0]
-	if _, err := sf.сеть.Get(strLink); err != nil {
+	if _, err := сам.сеть.Get(strLink); err != nil {
 		// log._rintf("ERRO ArsenalNet.makeKumul(): in make product arsenal kumul , err=\n\t%v\n", err)
 		// log._rintf("ERRO ArsenalNet.makeKumul(): in make product arsenal kumul , err=\n\t%v\n", err)
 		return
 		return
 	}
 	}
-	sf.РежимТекущ().РежимУст("кумулятивы")
+	сам.РежимТекущ().РежимУст("кумулятивы")
 }
 }
 
 
 // Создать фугасы
 // Создать фугасы
-func (sf *Оружейная) makeFugas() {
+func (сам *Оружейная) сдлатьФугасы() {
 	var (
 	var (
-		lstArsenal = sf.СписПолучить()
+		lstArsenal = сам.СписПолучить()
 		strOut     = ""
 		strOut     = ""
 		isFind     bool
 		isFind     bool
 		ind        int
 		ind        int
@@ -348,21 +439,21 @@ func (sf *Оружейная) makeFugas() {
 	strLink := lstKumul[1]
 	strLink := lstKumul[1]
 	lstKumul = strings.Split(strLink, `"><span><span>Начать производство</span></span></a>`)
 	lstKumul = strings.Split(strLink, `"><span><span>Начать производство</span></span></a>`)
 	strLink = "https://wartank.ru/production/" + lstKumul[0]
 	strLink = "https://wartank.ru/production/" + lstKumul[0]
-	if _, err := sf.сеть.Get(strLink); err != nil {
+	if _, err := сам.сеть.Get(strLink); err != nil {
 		// log._rintf("ERRO ArsenalNet.makeFugas(): in make request arsenal product, err=\n\t%v\n", err)
 		// log._rintf("ERRO ArsenalNet.makeFugas(): in make request arsenal product, err=\n\t%v\n", err)
 		return
 		return
 	}
 	}
-	sf.РежимТекущ().РежимУст("фугасы")
+	сам.РежимТекущ().РежимУст("фугасы")
 	// log._rintf("INFO Оружейная.makeFugas()\n")
 	// log._rintf("INFO Оружейная.makeFugas()\n")
 }
 }
 
 
 // Создать ремку. Выполняется если подходят условия
 // Создать ремку. Выполняется если подходят условия
-func (sf *Оружейная) makeRemka() (err error) {
+func (сам *Оружейная) сделатьРемку() (err error) {
 	// _mt.Println("\tArsenalNet.makeRemka()")
 	// _mt.Println("\tArsenalNet.makeRemka()")
 	var (
 	var (
 		strOut     = ""
 		strOut     = ""
 		isFind     bool
 		isFind     bool
-		lstArsenal = sf.СписПолучить()
+		lstArsenal = сам.СписПолучить()
 	)
 	)
 
 
 	for ind, strRemka := range lstArsenal {
 	for ind, strRemka := range lstArsenal {
@@ -384,9 +475,9 @@ func (sf *Оружейная) makeRemka() (err error) {
 	strLink := lstRemka[1]
 	strLink := lstRemka[1]
 	lstRemka = strings.Split(strLink, `"><span><span>Начать производство</span></span></a>`)
 	lstRemka = strings.Split(strLink, `"><span><span>Начать производство</span></span></a>`)
 	strLink = "https://wartank.ru/production/Armory" + lstRemka[0]
 	strLink = "https://wartank.ru/production/Armory" + lstRemka[0]
-	if _, err = sf.сеть.Get(strLink); err != nil {
+	if _, err = сам.сеть.Get(strLink); err != nil {
 		return fmt.Errorf("ArsenalNet.makeRemka(): in getpagebank product, err=\n\t%w", err)
 		return fmt.Errorf("ArsenalNet.makeRemka(): in getpagebank product, err=\n\t%w", err)
 	}
 	}
-	sf.РежимТекущ().РежимУст("ремка")
+	сам.РежимТекущ().РежимУст("ремка")
 	return nil
 	return nil
 }
 }

+ 111 - 20
server/serv_bots/warbot/angar/base/bank/bank.go

@@ -21,15 +21,15 @@ import (
 // Банк -- объект банка на базе
 // Банк -- объект банка на базе
 type Банк struct {
 type Банк struct {
 	*section.Секция
 	*section.Секция
-	net        *banknet.BankNet
+	сеть       *banknet.BankNet
 	сереброБот types.ИСтатПарам
 	сереброБот types.ИСтатПарам
-	mode1      *bankmode.BankMode // 1 режим работы на выбор
-	mode2      *bankmode.BankMode // 2 режим работы на выбор
+	режим1     *bankmode.BankMode // 1 режим работы на выбор
+	режим2     *bankmode.BankMode // 2 режим работы на выбор
 }
 }
 
 
 // НовБанк -- возвращает новый *Bank
 // НовБанк -- возвращает новый *Bank
-func НовБанк(base types.ИБаза) (*Банк, error) {
-	section, ош := section.NewSection(base.Бот(), "Банк", `<span class="green2">Серебро</span><br/>`)
+func НовБанк(база types.ИБаза) (*Банк, error) {
+	section, ош := section.NewSection(база.Бот(), "Банк", `<span class="green2">Серебро</span><br/>`)
 	if ош != nil {
 	if ош != nil {
 		return nil, fmt.Errorf("НовБанк(): при создании секции банка, ош=\n\t%w", ош)
 		return nil, fmt.Errorf("НовБанк(): при создании секции банка, ош=\n\t%w", ош)
 	}
 	}
@@ -41,10 +41,10 @@ func НовБанк(base types.ИБаза) (*Банк, error) {
 	sf := &Банк{
 	sf := &Банк{
 		Секция:     section,
 		Секция:     section,
 		сереброБот: сереброБот,
 		сереброБот: сереброБот,
-		mode1:      bankmode.NewBankMode(),
-		mode2:      bankmode.NewBankMode(),
+		режим1:     bankmode.NewBankMode(),
+		режим2:     bankmode.NewBankMode(),
 	}
 	}
-	sf.net, ош = banknet.NewBankNet(sf)
+	sf.сеть, ош = banknet.NewBankNet(sf)
 	if ош != nil {
 	if ош != nil {
 		return nil, fmt.Errorf("NewBank(): in create NetBank, err=\n\t%w", ош)
 		return nil, fmt.Errorf("NewBank(): in create NetBank, err=\n\t%w", ош)
 	}
 	}
@@ -52,32 +52,34 @@ func НовБанк(base types.ИБаза) (*Банк, error) {
 }
 }
 
 
 // Пуск -- запускает банк в работу
 // Пуск -- запускает банк в работу
-func (sf *Банк) Пуск() error {
+func (сам *Банк) Пуск() error {
 	log.Printf("Банк.Run()\n")
 	log.Printf("Банк.Run()\n")
-	go sf.пуск()
+	go сам.пуск()
 	return nil
 	return nil
 }
 }
 
 
 // UpdateLst -- принудительно обновляет состояние банка
 // UpdateLst -- принудительно обновляет состояние банка
-func (sf *Банк) UpdateLst() {
-	if err := sf.net.UpdateLst(); err != nil {
+func (сам *Банк) UpdateLst() {
+	if err := сам.сеть.UpdateLst(); err != nil {
 		log.Printf("Банк.UpdateLst(): err=\n\t%v\n", err)
 		log.Printf("Банк.UpdateLst(): err=\n\t%v\n", err)
 	}
 	}
 }
 }
 
 
 // запускает банк в опрос
 // запускает банк в опрос
-func (sf *Банк) пуск() {
+func (сам *Банк) пуск() {
 	log.Printf("Банк.пуск()\n")
 	log.Printf("Банк.пуск()\n")
 	fnRun := func() {
 	fnRun := func() {
-		defer time.Sleep(time.Minute * 1)
-		if ош := sf.net.UpdateLst(); ош != nil {
+		defer time.Sleep(time.Minute * 2)
+		сам.проверитьПостроить()
+		if ош := сам.сеть.UpdateLst(); ош != nil {
 			// log._rintf("ERRO Банк.пуск():  при обновлении lstBank, err=\n\t%v\n", err)
 			// log._rintf("ERRO Банк.пуск():  при обновлении lstBank, err=\n\t%v\n", err)
 			return
 			return
 		}
 		}
-		if ош := sf.получитьВсеРежимы(); ош != nil {
+
+		if ош := сам.получитьВсеРежимы(); ош != nil {
 			log.Printf("ERRO Банк.пуск(): при получении списка режимов банка, err=\n\t%v\n", ош)
 			log.Printf("ERRO Банк.пуск(): при получении списка режимов банка, err=\n\t%v\n", ош)
 		}
 		}
-		_, ош := sf.сделатьСеребро()
+		_, ош := сам.сделатьСеребро()
 		if ош != nil {
 		if ош != nil {
 			log.Printf("ERRO Банк.пуск(): при пуске производства банка, err=\n\t%v\n", ош)
 			log.Printf("ERRO Банк.пуск(): при пуске производства банка, err=\n\t%v\n", ош)
 		}
 		}
@@ -89,14 +91,103 @@ func (sf *Банк) пуск() {
 	}
 	}
 }
 }
 
 
+// Проверяет необходимость постройки полигона
+func (сам *Банк) проверитьПостроить() {
+	фнПостроить := func() bool {
+		var (
+			списБанк []string
+			ош       error
+		)
+		{ // Зайти на страницу постройки
+			// https://wartank.ru/building-upgrade/Bank
+			списБанк, ош = сам.сеть.Клиент().Get("https://wartank.ru/building-upgrade/Bank")
+			if ош != nil {
+				log.Printf("Банк.построитьПровер(): при чтении страницы строительства банка, ош=\n\t%v\n", ош)
+				return false
+			}
+			стрСсылка := ""
+			еслиНайти := false
+			// <a class="simple-but border mb5" href="Bank?192-1.ILinkListener-upgradeLink-link">
+			for _, стрСсылка = range списБанк {
+				if strings.Contains(стрСсылка, `href="Bank?`) {
+					еслиНайти = 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/Bank?162-1.ILinkListener-upgradeLink-link
+			списБанк, ош = сам.сеть.Клиент().Get(ссылка)
+			if ош != nil {
+				log.Printf("Банк.построитьПровер(): при выполнении запроса на строительство, ош=\n\t%v\n", ош)
+				return false
+			}
+		}
+		{ // Заказать постройку
+			// https://wartank.ru/building-upgrade/Bank
+			стрСсылка := ""
+			еслиНайти := false
+			// <a class="simple-but border mb5" href="Bank?163-1.ILinkListener-upgradeLink-link">
+			for _, стрСсылка = range списБанк {
+				if strings.Contains(стрСсылка, `href="Bank?`) {
+					еслиНайти = 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/Bank?162-1.ILinkListener-upgradeLink-link
+			списБанк, ош = сам.сеть.Клиент().Get(ссылка)
+			if ош != nil {
+				log.Printf("Банк.построитьПровер(): при выполнении запроса на строительство, ош=\n\t%v\n", ош)
+				return false
+			}
+		}
+		{ // подтверждение постройки
+			// <a class="simple-but border w50 mXa mb10" w:id="confirmLink" href="../wicket/page?187-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")
+}
+
 // РежимРаботы2 -- возвращает объект режима2
 // РежимРаботы2 -- возвращает объект режима2
 func (sf *Банк) РежимРаботы2() types.ИБанкРежим {
 func (sf *Банк) РежимРаботы2() types.ИБанкРежим {
-	return sf.mode2
+	return sf.режим2
 }
 }
 
 
 // РежимРаботы1 -- возвращает объект режима1
 // РежимРаботы1 -- возвращает объект режима1
 func (sf *Банк) РежимРаботы1() types.ИБанкРежим {
 func (sf *Банк) РежимРаботы1() types.ИБанкРежим {
-	return sf.mode1
+	return sf.режим1
 }
 }
 
 
 // СереброБот -- возвращает серебро от бота
 // СереброБот -- возвращает серебро от бота
@@ -131,7 +222,7 @@ func (sf *Банк) сделатьСеребро() (int, error) {
 		strLink = lstLink[1]
 		strLink = lstLink[1]
 		lstLink = strings.Split(strLink, `"><span><span>Начать производство</span></span></a>`)
 		lstLink = strings.Split(strLink, `"><span><span>Начать производство</span></span></a>`)
 		strLink = "https://wartank.ru/production/" + lstLink[0]
 		strLink = "https://wartank.ru/production/" + lstLink[0]
-		lstBank, err := sf.net.Get(strLink)
+		lstBank, err := sf.сеть.Get(strLink)
 		if err != nil {
 		if err != nil {
 			return -1, fmt.Errorf("BankNet.makeProduct(): при выполнении GET-запроса начать производство, err=%w", err)
 			return -1, fmt.Errorf("BankNet.makeProduct(): при выполнении GET-запроса начать производство, err=%w", err)
 		}
 		}