Prechádzať zdrojové kódy

d03 Исправления под покупку золота, топлива

SVI 2 rokov pred
rodič
commit
53d08b49e3

+ 1 - 1
server/serv_bots/warbot/angar/angar_attack/angar_attack.go

@@ -146,7 +146,7 @@ func (sf *ТопливоБой) выбратьБойСлабый(списСтр
 // Ведёт бой в 2 выстрела (здесь только 2 и 3 выстрел -- первый сделан при слабом противнике)
 func (sf *ТопливоБой) сделатьВыстрелы(lstShoot2 []string) error {
 	// _mt.Println("\tAngarNet.makeShooting()")
-	var списВыстрел3 []string           // Тело страницы для третьего выстрела
+	var списВыстрел3 []string          // Тело страницы для третьего выстрела
 	фнВыстрел2 := func() (err error) { // Второй выстрел
 		// _mt.Println("\tAngarNet.makeShooting().fnShoot2()")
 		defer func() {

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

@@ -32,14 +32,14 @@ const (
 // База -- объект базы
 type База struct {
 	*section.Section
-	сеть       *basenet.BaseNet
+	сеть      *basenet.BaseNet
 	арсенал   *arsenal.Арсенал
 	банк      *bank.Bank
 	полигон   *polygon.Polygon
-	шахта      *mine.Шахта
-	ранок    *market.Market
+	шахта     *mine.Шахта
+	ранок     *market.Рынок
 	времОстат int // Сколько времени спать до опроса базы
-	блок     sync.Mutex
+	блок      sync.Mutex
 }
 
 // НовБаза -- возвращает новую базу бота
@@ -77,7 +77,7 @@ func НовБаза(ангар types.ИАнгар) (*База, error) {
 		}
 	}
 	{ // Market
-		sf.ранок, err = market.NewMarket(sf)
+		sf.ранок, err = market.НовРынок(sf)
 		if err != nil {
 			return nil, fmt.Errorf("NewBase(): при создании IMarket, err=\n\t%w", err)
 		}
@@ -139,7 +139,7 @@ func (sf *База) runComponent() error {
 	if err := sf.шахта.Run(); err != nil {
 		return fmt.Errorf("Base.run(): in run IMine, err=\n\t%w", err)
 	}
-	if err := sf.ранок.Run(); err != nil {
+	if err := sf.ранок.Пуск(); err != nil {
 		return fmt.Errorf("Base.run(): in run IMarket, err=\n\t%w", err)
 	}
 	if err := sf.полигон.Run(); err != nil {

+ 83 - 61
server/serv_bots/warbot/angar/base/market/market.go

@@ -4,6 +4,7 @@ import (
 	"fmt"
 	"log"
 	"strings"
+	"time"
 
 	"wartank/pkg/components/section"
 	"wartank/pkg/types"
@@ -14,25 +15,25 @@ import (
 	Объект рынка
 */
 
-// Market -- объект рынка
-type Market struct {
+// Рынок -- объект рынка
+type Рынок struct {
 	*section.Section
-	bot types.ИБот
-	net *marketnet.MarketNet
+	бот  types.ИБот
+	сеть *marketnet.MarketNet
 }
 
-// NewMarket -- возвращает новый рынок
-func NewMarket(base types.ИБаза) (*Market, error) {
-	section, err := section.NewSection(base.Бот(), "Рынок", `<title>Рынок</title>`)
+// НовРынок -- возвращает новый рынок
+func НовРынок(база types.ИБаза) (*Рынок, error) {
+	section, err := section.NewSection(база.Бот(), "Рынок", `<title>Рынок</title>`)
 	if err != nil {
 		return nil, fmt.Errorf("NewMarket(): in create *Section, err=\n\t%w", err)
 	}
-	sf := &Market{
+	sf := &Рынок{
 		Section: section,
-		bot:     base.Бот(),
+		бот:     база.Бот(),
 	}
 	{ // Маркет
-		sf.net, err = marketnet.NewMarketNet(sf)
+		sf.сеть, err = marketnet.NewMarketNet(sf)
 		if err != nil {
 			return nil, fmt.Errorf("NewMarket(): in create NetMarket, err=\n\t%w", err)
 		}
@@ -40,44 +41,48 @@ func NewMarket(base types.ИБаза) (*Market, error) {
 	return sf, nil
 }
 
-// Run -- запускает всю работу рынка в отдельном потоке
-func (sf *Market) Run() error {
-	go sf.run()
+// Пуск -- запускает всю работу рынка в отдельном потоке
+func (сам *Рынок) Пуск() error {
+	go сам.пуск()
 	return nil
 }
 
 // выполняет опрос рынка базы, должен работать как горутина
-func (sf *Market) run() {
-	sf.SetCountDown(25)
+func (сам *Рынок) пуск() {
+	сам.SetCountDown(25)
 	for {
 		select {
-		case <-sf.bot.Кнт().Done():
-			sf.ВремяОпрос().Стоп()
+		case <-сам.бот.Кнт().Done():
+			сам.ВремяОпрос().Стоп()
 			return
-		case <-sf.ВремяОпрос().КаналСиг():
-			log.Printf("Market.run(): timeCount=%v\n", sf.ВремяОпрос().Получ())
-			_ = sf.buyGold()
+		case <-сам.ВремяОпрос().КаналСиг():
+			log.Printf("Market.run(): timeCount=%v\n", сам.ВремяОпрос().Получ())
+			_ = сам.купитьЗолото()
 			// Если золото не куплено -- обновить время ожидания
-			sf.checkTime()
-			sf.SetCountDown(120)
+			сам.SetCountDown(120)
 		}
+		сам.проверОжидание()
+		for сам.купитьЗолото() {
+
+		}
+		time.Sleep(time.Minute * 1)
 	}
 }
 
 // Проверяет  время ожидания рынка
-func (sf *Market) checkTime() {
+func (сам *Рынок) проверОжидание() {
 	var (
 		strOut string
 		isFind bool
 	)
 	// countDown := sf.CountDown().Get()
-	fnIsSilver := func() bool { // Найти счётчик цены серебра
-		if err := sf.net.UpdateLst(); err != nil { // Принудительное ПЕРВОЕ обновление рынка
+	фнЕслиСеребро := func() bool { // Найти счётчик цены серебра
+		if err := сам.сеть.UpdateLst(); err != nil { // Принудительное ПЕРВОЕ обновление рынка
 			log.Printf("Market.checkTime(): при обновлении lstMarket, err=\n\t%v\n", err)
 			return false
 		}
 		isFind := false
-		lstMarket := sf.СписПолучить()
+		lstMarket := сам.СписПолучить()
 		for _, strOut = range lstMarket {
 			if strings.Contains(strOut, `alt="Серебро" title="Серебро"> `) {
 				isFind = true
@@ -91,13 +96,18 @@ func (sf *Market) checkTime() {
 			case "10", "50", "100", "500":
 				return true
 			default:
+				серебро := сам.бот.Ангар().СереброВсего()
+				if серебро.Получ() > 1_000_000 {
+					return true
+				}
 				return false
 			}
 		}
 		return false
 	}
+
 	fnGetCountDown := func() { // Искать счётчик времени
-		lstMarket := sf.СписПолучить()
+		lstMarket := сам.СписПолучить()
 		// Найти счётчик времени
 		for _, strOut = range lstMarket {
 			if strings.Contains(strOut, `Минимальная цена через `) {
@@ -110,24 +120,24 @@ func (sf *Market) checkTime() {
 		}
 		lstTime := strings.Split(strOut, `Минимальная цена через `)
 		strTime := lstTime[1]
-		if err := sf.ParseCountDown(strTime); err != nil {
+		if err := сам.ParseCountDown(strTime); err != nil {
 			// log._rintf("ERRO Market.checkTime(): при установке времени ожидания рынка(%v)\n\terr=%v\n", strTime, err)
 			return // Возможно минимальная цена
 		}
 	}
-	if fnIsSilver() {
+	if фнЕслиСеребро() {
 		return
 	}
 	fnGetCountDown()
 }
 
 // Проверяет рынок на режим покупки
-func (sf *Market) buyGold() bool {
+func (сам *Рынок) купитьЗолото() bool {
 	var (
 		ind       int
 		isFind    bool
 		strOut    string
-		lstMarket = sf.СписПолучить()
+		lstMarket = сам.СписПолучить()
 		strSilver string
 	)
 	for ind, strOut = range lstMarket {
@@ -136,38 +146,50 @@ func (sf *Market) buyGold() bool {
 			break
 		}
 	}
-	if isFind { // Найдена продажа золота за серебро
-		lstSilver := strings.Split(strOut, `<img class="ico vm" src="/images/icons/silver.png?2" alt="Серебро" title="Серебро"> `)
-		strSilver = lstSilver[1]
-		switch strSilver {
-		case "10", "50", "100", "500": // Допустимые суммы трат
-			ind -= 15
-			strOut = lstMarket[ind]
-			lstLink := strings.Split(strOut, `<a class="simple-but border mb5" href="`)
-			if len(lstLink) < 2 {
-				return false
-			}
-			strLink := lstLink[1]
-			lstLink = strings.Split(strLink, `"><span><span>Получить `)
-			strLink = "http://wartank.ru/" + lstLink[0]
-			lstMarket, err := sf.net.Get(strLink)
-			if err != nil {
-				// log._rintf("ERRO Market.buyGold(): при выполнении GET-команды на покупку золота, err=\n\t%v\n", err)
-				return true
-			}
-			for _, strOut = range lstMarket {
-				if strings.Contains(strOut, `Ошибка на сервере. Сообщение админу уже отправлено.`) {
-					// log._rintf("ERRO Market.buyGold(): при получении lstMarket, strHTML=%v, err=\nt%v\n", strOut, err)
-					return false
-				}
-			}
-			if err = sf.СтрОбновить(lstMarket); err != nil {
-				// log._rintf("Market.buyGold(): при обновлении lstMarket, err=\n\t%v\n", err)
-				return true
-			}
-		default: // Недопустимая сумма, либо больше чем надо
+	if !isFind { // Не найдена продажа золота за серебро
+		return false
+	}
+	lstSilver := strings.Split(strOut, `<img class="ico vm" src="/images/icons/silver.png?2" alt="Серебро" title="Серебро"> `)
+	strSilver = lstSilver[1]
+	серебро := сам.бот.Ангар().СереброВсего().Получ()
+	еслиКупить := false
+	switch strSilver {
+	case "10", "50", "100", "500": // Допустимые суммы трат
+		еслиКупить = true
+	case "1000": // Если стоит тысяча серебра
+		if серебро > 500_000 { // Если серебра больше полумиллона -- покупаем
+			еслиКупить = true
+		}
+	}
+	if серебро > 1_000_000 { // Если серебра больше миллиона то покупаем, пока не будет меньше миллиона
+		еслиКупить = true
+	}
+	if !еслиКупить {
+		return false
+	}
+	ind -= 15
+	strOut = lstMarket[ind]
+	lstLink := strings.Split(strOut, `<a class="simple-but border mb5" href="`)
+	if len(lstLink) < 2 {
+		return false
+	}
+	strLink := lstLink[1]
+	lstLink = strings.Split(strLink, `"><span><span>Получить `)
+	strLink = "http://wartank.ru/" + lstLink[0]
+	lstMarket, err := сам.сеть.Get(strLink)
+	if err != nil {
+		// log._rintf("ERRO Market.buyGold(): при выполнении GET-команды на покупку золота, err=\n\t%v\n", err)
+		return true
+	}
+	for _, strOut = range lstMarket {
+		if strings.Contains(strOut, `Ошибка на сервере. Сообщение админу уже отправлено.`) {
+			// log._rintf("ERRO Market.buyGold(): при получении lstMarket, strHTML=%v, err=\nt%v\n", strOut, err)
 			return false
 		}
 	}
+	if err = сам.СтрОбновить(lstMarket); err != nil {
+		// log._rintf("Market.buyGold(): при обновлении lstMarket, err=\n\t%v\n", err)
+		return true
+	}
 	return true
 }

+ 2 - 2
server/serv_bots/warbot/angar/fuel/fuel.go

@@ -3,10 +3,10 @@ package fuel
 
 import (
 	"fmt"
+	"log"
 	"strconv"
 	"strings"
 	"time"
-	"log"
 
 	"wartank/pkg/types"
 	"wartank/server/serv_bots/warbot/tank/tankstat/static_param"
@@ -66,7 +66,7 @@ func (sf *Топливо) топливоНайти() {
 	// Выделить топливо
 	lstFuel := strings.Split(strOut, `<img title="Топливо" alt="Топливо" src="/images/icons/fuel.png?2"/> `)
 	// Здесь бывает ошибка (когда возвращена пустая строка)
-	if len(lstFuel) != 2{
+	if len(lstFuel) != 2 {
 		log.Printf("ERRO Топливо.топливоНайти(): при поиске строки тплива, стр=\n\t%v\n", strOut)
 		return
 	}