Browse Source

SVI Нормализация бизнес-функций

SVI 1 year ago
parent
commit
973e5dedbb

+ 4 - 146
app/lev2/arena/arena_market/arena_market.go

@@ -13,7 +13,9 @@ import (
 	. "wartank/app/lev0/types"
 	"wartank/app/lev2/arena"
 	"wartank/app/lev2/arena/arena_build"
+	"wartank/app/lev2/arena/arena_market/bf_gold_by"
 	"wartank/app/lev2/arena/arena_market/bf_market_build"
+	"wartank/app/lev2/arena/arena_market/bf_market_upgrade"
 )
 
 // АренаРынок -- объект рынка
@@ -49,6 +51,8 @@ func (сам *АренаРынок) Пуск() {
 	}
 	фнОбновить()
 	bf_market_build.РынокПостроить(сам.конт)
+	bf_market_upgrade.РынокАпгрейд(сам.конт)
+	bf_gold_by.ЗолотоКупить(сам.конт)
 }
 
 // выполняет опрос рынка базы, должен работать как горутина
@@ -60,8 +64,6 @@ func (сам *АренаРынок) пуск() {
 		}
 		сам.ускорениеПровер()
 		сам.проверОжидание()
-		for сам.купитьЗолото() {
-		}
 	}
 	for {
 		select {
@@ -121,89 +123,6 @@ func (сам *АренаРынок) уровеньОбновить() bool {
 	return true
 }
 
-/*
-// Строит шахту при нулевом уровне
-func (сам *АренаРынок) построить() bool {
-	time.Sleep(time.Millisecond * 1000)
-	// <td style="width:50%;padding-left:1px;"><a class="simple-but border mb5" href="building-upgrade/Market"><span><span>Построить</span></span></a></td>
-	var (
-		еслиНайти = false
-		списСтр   []string
-		стр       = ""
-	)
-	фнКупить := func() bool {
-		defer time.Sleep(time.Millisecond * 1000)
-		списСтр = сам.Сеть().ВебВоркер().Получ("https://wartank.ru/building-upgrade/Market")
-		for _, стр = range списСтр {
-			// <a class="simple-but border mb5" href="Market?19-1.ILinkListener-upgradeLink-link">
-			if strings.Contains(стр, `ILinkListener-upgradeLink-link`) {
-				еслиНайти = true
-				break
-			}
-		}
-		if !еслиНайти {
-			return true
-		}
-		// Пробуем построить шахту
-		_стр := strings.TrimPrefix(стр, "<a class=\"simple-but border mb5\" href=\"")
-		_стр = strings.TrimSuffix(_стр, "\">")
-		// https://wartank.ru/building-upgrade/Market?18-1.ILinkListener-upgradeLink-link
-		// <a class="simple-but border mb5" href="Market?19-1.ILinkListener-upgradeLink-link">
-		ссылка := "https://wartank.ru/building-upgrade/" + _стр
-		списСтр = сам.Сеть().ВебВоркер().Получ(ссылка)
-		// Проверить, что постройка состоялась
-		for _, стр := range списСтр {
-			if strings.Contains(стр, "ILinkListener-upgradeLink-link") {
-				log.Printf("Рынок.построить().фнКупить(): покупка склада топлива не прошла\n\tlink=%v\n\tстр=\n\t%v\n", ссылка, стр)
-				return false // Покупка не оплачена
-			}
-		}
-		log.Printf("+++++Рынок.построить().фнКупить(): покупка склада топлива прошла\n")
-		return true
-	}
-
-	фнПодтверждение := func() bool {
-		for _, стр = range списСтр {
-			// <a class="simple-but border w50 mXa mb10" w:id="confirmLink" href="../wicket/page?21-1.ILinkListener-confirmLink"><span><span>да, подтверждаю</span></span></a>
-			if strings.Contains(стр, `ILinkListener-confirmLink`) {
-				еслиНайти = true
-				break
-			}
-		}
-		if !еслиНайти {
-			return true
-		}
-		// Пробуем построить шахту
-		_стр := strings.TrimPrefix(стр, `<a class="simple-but border w50 mXa mb10" w:id="confirmLink" href="..`)
-		_стр = strings.TrimSuffix(_стр, `"><span><span>да, подтверждаю</span></span></a>`)
-		// https://wartank.ru/wicket/page?20-1.ILinkListener-confirmLink
-		ссылка := "https://wartank.ru" + _стр
-		списСтр = сам.Сеть().ВебВоркер().Получ(ссылка)
-		// Проверить, что постройка состоялась
-		for _, стр := range списСтр {
-			if strings.Contains(стр, "<title>Вы сделали слишком большую паузу</title>") {
-				log.Printf("Рынок.построить().фнПодтверждение(): подтверждение покупка склада топлива не прошла\n\tlink=%v\n\tстр=\n\t%v\n", ссылка, стр)
-				return false // Покупка не оплачена
-			}
-		}
-		log.Printf("+++++Рынок.построить().фнПодтверждение(): подтверждение покупка склада топлива прошла\n")
-		return true
-	}
-
-	фнКомплекс := func() {
-		for {
-			if фнКупить() {
-				if фнПодтверждение() {
-					break
-				}
-			}
-		}
-	}
-	фнКомплекс()
-	return true
-}
-*/
-
 // Проверяет  время ожидания рынка
 func (сам *АренаРынок) проверОжидание() {
 	var (
@@ -259,64 +178,3 @@ func (сам *АренаРынок) проверОжидание() {
 	}
 	fnGetCountDown()
 }
-
-// Проверяет рынок на режим покупки
-func (сам *АренаРынок) купитьЗолото() bool {
-	var (
-		ind         int
-		еслиНайдено bool
-		strOut      string
-		lstMarket   = сам.СписПолучить()
-		strSilver   string
-	)
-	for ind, strOut = range lstMarket {
-		if strings.Contains(strOut, `alt="Серебро" title="Серебро"> `) {
-			еслиНайдено = true
-			break
-		}
-	}
-	if !еслиНайдено { // Не найдена продажа золота за серебро
-		return false
-	}
-	lstSilver := strings.Split(strOut, `<img class="ico vm" src="/images/icons/silver.png?2" alt="Серебро" title="Серебро"> `)
-	strSilver = lstSilver[1]
-	серебро := сам.конт.Get("серебро").Val().(int)
-	еслиКупить := false
-	switch strSilver {
-	case "10", "50", "100", "500": // Допустимые суммы трат
-		еслиКупить = true
-	case "1000": // Если стоит тысяча серебра
-		if серебро > 500_000 { // Если серебра больше полумиллиона -- покупаем
-			еслиКупить = true
-		}
-	case "5000", "10000": // Если большая сумма -- можно купить и больше
-		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 = "https://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
-		}
-	}
-	сам.СтрОбновить(lstMarket)
-	return true
-}

+ 83 - 0
app/lev2/arena/arena_market/bf_gold_by/bf_gold_by.go

@@ -0,0 +1,83 @@
+// package bf_gold_by -- бизнес-функция покупки золота на рынке
+package bf_gold_by
+
+import (
+	"strings"
+
+	. "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
+
+	"wartank/app/lev0/cons"
+	. "wartank/app/lev0/types"
+)
+
+// БанкПостроить -- покупка золота на рынке
+func ЗолотоКупить(конт ILocalCtx) {
+	рынок := конт.Get("рынок").Val().(ИАренаРынок)
+	еслиПостроен := рынок.Состояние().Получ() == cons.РежимПостроено
+	еслиОжидание := рынок.Состояние().Получ() == cons.РежимОжидание
+	if !(еслиОжидание || еслиПостроен) {
+		return
+	}
+	золотоКупить(конт)
+}
+
+func золотоКупить(конт ILocalCtx) {
+	рынок := конт.Get("рынок").Val().(ИАренаРынок)
+	var (
+		ind         int
+		еслиНайдено bool
+		strOut      string
+		lstMarket   = рынок.СписПолучить()
+		strSilver   string
+	)
+	for ind, strOut = range lstMarket {
+		if strings.Contains(strOut, `alt="Серебро" title="Серебро"> `) {
+			еслиНайдено = true
+			break
+		}
+	}
+	if !еслиНайдено { // Не найдена продажа золота за серебро
+		return
+	}
+	lstSilver := strings.Split(strOut, `<img class="ico vm" src="/images/icons/silver.png?2" alt="Серебро" title="Серебро"> `)
+	strSilver = lstSilver[1]
+	ангар:=конт.Get("ангар").Val().(ИАренаАнгар)
+	серебро := ангар.Серебро().Получ()
+	еслиКупить := false
+	switch strSilver {
+	case "10", "50", "100", "500": // Допустимые суммы трат
+		еслиКупить = true
+	case "1000": // Если стоит тысяча серебра
+		if серебро > 500_000 { // Если серебра больше полумиллиона -- покупаем
+			еслиКупить = true
+		}
+	case "5000", "10000": // Если большая сумма -- можно купить и больше
+		if серебро > 1_000_000 {
+			еслиКупить = true
+		}
+	}
+	if !еслиКупить {
+		return
+	}
+	ind -= 15
+	strOut = lstMarket[ind]
+	lstLink := strings.Split(strOut, `<a class="simple-but border mb5" href="`)
+	if len(lstLink) < 2 {
+		return
+	}
+	strLink := lstLink[1]
+	lstLink = strings.Split(strLink, `"><span><span>Получить `)
+	strLink = "https://wartank.ru/" + lstLink[0]
+	lstMarket, err := рынок.Сеть().Get(strLink)
+	if err != nil {
+		// log._rintf("ERRO Market.buyGold(): при выполнении GET-команды на покупку золота, err=\n\t%v\n", err)
+		return
+	}
+	for _, strOut = range lstMarket {
+		if strings.Contains(strOut, `Ошибка на сервере. Сообщение админу уже отправлено.`) {
+			// log._rintf("ERRO Market.buyGold(): при получении lstMarket, strHTML=%v, err=\nt%v\n", strOut, err)
+			return
+		}
+	}
+	рынок.СтрОбновить(lstMarket)
+}

+ 89 - 0
app/lev2/arena/arena_market/bf_market_upgrade/bf_market_upgrade.go

@@ -0,0 +1,89 @@
+// package bf_market_upgrade -- бизнес-функция апгрейда рынка
+package bf_market_upgrade
+
+import (
+	"strings"
+
+	. "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
+
+	"wartank/app/lev0/cons"
+	. "wartank/app/lev0/types"
+)
+
+// БанкАпгрейд -- повышает уровень рынка
+func РынокАпгрейд(конт ILocalCtx) {
+	рынок := конт.Get("рынок").Val().(ИАренаРынок)
+	еслиПостроено := рынок.Состояние().Получ() == cons.РежимПостроено
+	еслиОжидание := рынок.Состояние().Получ() == cons.РежимОжидание
+	if !(еслиПостроено || еслиОжидание) {
+		return
+	}
+	рынокАпгрейд(конт)
+}
+
+func рынокАпгрейд(конт ILocalCtx) {
+	рынок := конт.Get("рынок").Val().(ИАренаРынок)
+	var (
+		еслиНайти = false
+		списСтр   []string
+		стр       = ""
+	)
+	фнКупить := func() bool {
+		списСтр = рынок.Сеть().ВебВоркер().Получ("https://wartank.ru/building-upgrade/Market")
+		for _, стр = range списСтр {
+			// <a class="simple-but border mb5" href="Market?5-1.ILinkListener-upgradeLink-link">
+			if strings.Contains(стр, `ILinkListener-upgradeLink-link`) {
+				еслиНайти = true
+				break
+			}
+		}
+		if !еслиНайти {
+			return true
+		}
+		// Пробуем улучшить здание
+		_стр := strings.TrimPrefix(стр, "<a class=\"simple-but border mb5\" href=\"")
+		_стр = strings.TrimSuffix(_стр, "\">")
+		// https://wartank.ru/building-upgrade/Market?4-1.ILinkListener-upgradeLink-link
+		// <a class="simple-but border mb5" href="Market?50-1.ILinkListener-upgradeLink-link">
+		ссылка := "https://wartank.ru/building-upgrade/" + _стр
+		списСтр = рынок.Сеть().ВебВоркер().Получ(ссылка)
+		// Проверить, что покупка состоялась
+		for _, стр := range списСтр {
+			if strings.Contains(стр, "ILinkListener-upgradeLink-link") {
+				return false // Покупка не оплачена
+			}
+		}
+		return true
+	}
+
+	фнПодтверждение := func() {
+		for _, стр = range списСтр {
+			// <a class="simple-but border w50 mXa mb10" w:id="confirmLink" href="../wicket/page?7-1.ILinkListener-confirmLink"><span><span>да, подтверждаю</span></span></a>
+			if strings.Contains(стр, `ILinkListener-confirmLink`) {
+				еслиНайти = true
+				break
+			}
+		}
+		if !еслиНайти {
+			return
+		}
+		// Пробуем оплатить апгрейд
+		_стр := strings.TrimPrefix(стр, `<a class="simple-but border w50 mXa mb10" w:id="confirmLink" href="..`)
+		_стр = strings.TrimSuffix(_стр, `"><span><span>да, подтверждаю</span></span></a>`)
+		// https://wartank.ru/wicket/page?6-1.ILinkListener-confirmLink
+		ссылка := "https://wartank.ru" + _стр
+		списСтр = рынок.Сеть().ВебВоркер().Получ(ссылка)
+		// Проверить, что оплата состоялась
+		for _, стр := range списСтр {
+			if strings.Contains(стр, "<title>Вы сделали слишком большую паузу</title>") {
+				return // Покупка не оплачена
+			}
+		}
+		рынок.Состояние().Уст(cons.РежимАпгрейдПлатный)
+	}
+
+	if !фнКупить() {
+		return
+	}
+	фнПодтверждение()
+}

+ 1 - 1
app/lev2/arena/arena_mine/bf_mine_time_work/bf_mine_time_work.go

@@ -41,7 +41,7 @@ func ШахтаРаботаВремя(конт ILocalCtx) {
 	// <td><div class="value-block lh1"><span><span>00:00:34</span></span></div></td>
 	strTime := lstMine[ind+11]
 	if !strings.Contains(strTime, ":"){ // Уже время производства закончилось
-		шахта.Состояние().Уст(cons.РежимОжидание)
+		шахта.Состояние().Уст(cons.РежимЗабрать)
 		return
 	}
 	// <td><div class="value-block lh1"><span><span>00:19:53</span></span></div></td>