Browse Source

SVI Переделка на новую архитектуру

SVI 1 year ago
parent
commit
00dab5a30c

+ 2 - 6
app/lev0/bfunc/bf_silver_get/bf_silver_get.go

@@ -11,11 +11,7 @@ import (
 
 // СереброЗабрать -- забирает серебро из банка
 func СереброЗабрать(конт ILocalCtx) {
-	база_:=конт.Get("база")
-	if база_==nil{
-		return
-	}
-	база:=база_.Val().(ИАренаБаза)
+	база:=конт.Get("база").Val().(ИАренаБаза)
 	var (
 		strOut      string
 		еслиНайдено bool
@@ -33,7 +29,7 @@ func СереброЗабрать(конт ILocalCtx) {
 	}
 	_ссылка := strings.TrimPrefix(strOut, `<a class="simple-but border" href="`)
 	_ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Забрать</span></span></a>`)
-	// https://wartank.ru/buildings?3-1.ILinkListener-buildings-1-building-rootBlock-actionPanel-takeProductionLink
+	// https://wartank.ru/buildings?3-1.ILinkListener-buildings-2-building-rootBlock-actionPanel-takeProductionLink
 	ссылка := "https://wartank.ru/" + _ссылка
 	_ = база.Сеть().ВебВоркер().Получ(ссылка)
 }

+ 116 - 0
app/lev0/bfunc/bf_silver_prod/bf_silver_prod.go

@@ -0,0 +1,116 @@
+// package bf_silver_prod -- бизнес-процесс производить серебро
+package bf_silver_prod
+
+import (
+	"strconv"
+	"strings"
+
+	. "gitp78su.ipnodns.ru/svi/kern/kc/helpers"
+	. "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
+
+	. "wartank/app/lev0/alias"
+	. "wartank/app/lev0/types"
+)
+
+// СереброПроизводить -- заставляет банк производить серебро
+func СереброПроизводить(конт ILocalCtx) {
+	банк_ := конт.Get("арена_банк")
+	if банк_ == nil { // Возможно ещё не построен
+		return
+	}
+	получитьВсеРежимы(конт)
+	сделатьСеребро(конт)
+}
+
+// Получает все режимы банка
+func получитьВсеРежимы(конт ILocalCtx) {
+	банк := конт.Get("арена_банк").Val().(ИАренаБанк)
+
+	var (
+		lstBank  = банк.СписПолучить()
+		ind      int
+		strMode  string
+		strMode1 string
+		strMode2 string
+	)
+	if len(lstBank) == 0 {
+		банк.Обновить()
+		lstBank = банк.СписПолучить()
+	}
+	{ // Получить первый режим
+		for ind, strMode = range lstBank {
+			if strings.Contains(strMode, `Кол-во: <span class="green2">`) {
+				strMode1 = strMode
+				break
+			}
+		}
+		lstMode := strings.Split(strMode1, `Кол-во: <span class="green2">`)
+		strMode1 = lstMode[1]
+		lstMode = strings.Split(strMode1, `</span><br/>`)
+		strMode1 = lstMode[0]
+		iNum1, err := strconv.Atoi(strMode1)
+		Hassert(err == nil, "получитьВсеРежимы(): ошибка в режиме-1 банка, ош=\n\t%v", err)
+		банк.РежимРаботы1().Серебро().Уст(iNum1)
+		// Установить время производства
+		strTime1 := lstBank[ind+2]
+		банк.РежимРаботы1().ВремяСделатьУст(strTime1)
+		if iNum1 <= 2 { // Если банк слишком слабый
+			return
+		}
+	}
+	{ // Получить второй режим
+		for _ind := ind + 2; _ind < len(lstBank); _ind++ {
+			strMode := lstBank[_ind]
+			if strings.Contains(strMode, `Кол-во: <span class="green2">`) {
+				strMode2 = strMode
+				ind = _ind
+				break
+			}
+		}
+		lstMode := strings.Split(strMode2, `Кол-во: <span class="green2">`)
+		strMode2 = lstMode[1]
+		lstMode = strings.Split(strMode2, `</span><br/>`)
+		strMode2 = lstMode[0]
+		iNum2, err := strconv.Atoi(strMode2)
+		Hassert(err == nil, "получитьВсеРежимы(): ошибка в режиме-2 банка, ош=\n\t%v", err)
+		банк.РежимРаботы2().Серебро().Уст(iNum2)
+		// Установить время производства
+		strTime2 := lstBank[ind+2]
+		банк.РежимРаботы2().ВремяСделатьУст(strTime2)
+	}
+}
+
+// Запускает в производство серебро
+func сделатьСеребро(конт ILocalCtx) {
+	банк := конт.Get("арена_банк").Val().(ИАренаБанк)
+	var (
+		lstBank     = банк.СписПолучить()
+		ind         int
+		strOut      string
+		strLink     string
+		еслиНайдено bool
+	)
+	time1 := банк.РежимРаботы1().ВремяСделать()
+	time2 := банк.РежимРаботы2().ВремяСделать()
+	if time1 > time2 {
+		time1 = time2
+	}
+	for ind, strOut = range lstBank {
+		if strings.Contains(strOut, time1) {
+			ind += 7
+			strLink = lstBank[ind]
+			еслиНайдено = true
+			break
+		}
+	}
+	if еслиНайдено && strings.Contains(strLink, `>Начать производство</span>`) {
+		lstLink := strings.Split(strLink, `<a class="simple-but border" href="`)
+		strLink = lstLink[1]
+		lstLink = strings.Split(strLink, `"><span><span>Начать производство</span></span></a>`)
+		strLink = "https://wartank.ru/production/" + lstLink[0]
+		_, err := банк.Сеть().Get(strLink)
+		Hassert(err == nil, "сделатьСеребро(): при выполнении GET-запроса, ош=\n\t%v", err)
+		err = банк.ОбратВремяУст(АВремя(time1))
+		Hassert(err == nil, "сделатьСеребро(): при установке времени производства банка(%v), err=\n\t%v", time1, err)
+	}
+}

+ 0 - 114
app/lev2/arena/arena_bank/arena_bank.go

@@ -1,15 +1,12 @@
 package arena_bank
 
 import (
-	"fmt"
 	"log"
-	"strconv"
 	"strings"
 	"time"
 
 	. "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
 
-	. "wartank/app/lev0/alias"
 	. "wartank/app/lev0/types"
 	"wartank/app/lev1"
 	"wartank/app/lev2/arena"
@@ -62,14 +59,6 @@ func (сам *АренаБанк) пуск() {
 			return
 		}
 		сам.Обновить()
-
-		if ош := сам.получитьВсеРежимы(); ош != nil {
-			log.Printf("ERRO Банк.пуск(): при получении списка режимов банка, err=\n\t%v\n", ош)
-		}
-		_, ош := сам.сделатьСеребро()
-		if ош != nil {
-			log.Printf("ERRO Банк.пуск(): при пуске производства банка, err=\n\t%v\n", ош)
-		}
 	}
 	for {
 		// <-сам.ВремяОпрос().КаналСиг()
@@ -182,106 +171,3 @@ func (сам *АренаБанк) РежимРаботы1() ИБанкРежим
 func (сам *АренаБанк) СереброБот() ИСтатПарам {
 	return сам.сереброБот
 }
-
-// Запускает в производство серебро
-func (сам *АренаБанк) сделатьСеребро() (АМилСек, error) {
-	var (
-		lstBank     = сам.СписПолучить()
-		ind         int
-		strOut      string
-		strLink     string
-		еслиНайдено bool
-	)
-	time1 := сам.РежимРаботы1().ВремяСделать()
-	time2 := сам.РежимРаботы2().ВремяСделать()
-	if time1 > time2 {
-		time1 = time2
-	}
-	for ind, strOut = range lstBank {
-		if strings.Contains(strOut, time1) {
-			ind += 7
-			strLink = lstBank[ind]
-			еслиНайдено = true
-			break
-		}
-	}
-	if еслиНайдено && strings.Contains(strLink, `>Начать производство</span>`) {
-		lstLink := strings.Split(strLink, `<a class="simple-but border" href="`)
-		strLink = lstLink[1]
-		lstLink = strings.Split(strLink, `"><span><span>Начать производство</span></span></a>`)
-		strLink = "https://wartank.ru/production/" + lstLink[0]
-		lstBank, err := сам.Сеть().Get(strLink)
-		if err != nil {
-			return 0, fmt.Errorf("BankNet.makeProduct(): при выполнении GET-запроса начать производство, err=%w", err)
-		}
-		for _, strOut := range lstBank {
-			if strings.Contains(strOut, `<title>База</title>`) { // Это база, а не банк
-				return 30, nil
-			}
-		}
-		if err = сам.СтрОбновить(lstBank); err != nil {
-			return 0, fmt.Errorf("BankNet.makeProduct(): при обновлении lstBank, err=%w", err)
-		}
-		if err := сам.ОбратВремяУст(АВремя(time1)); err != nil {
-			log.Printf("WARN Банк.makeProduct(): при установке времени производства банка(%v)\n\terr=%v\n", time1, err)
-		}
-	}
-	return сам.ВремяОстат().ПолучМилСек(), nil
-}
-
-// Получает все режимы банка
-func (сам *АренаБанк) получитьВсеРежимы() error {
-	var (
-		lstBank  = сам.СписПолучить()
-		ind      int
-		strMode  string
-		strMode1 string
-		strMode2 string
-	)
-	{ // Получить первый режим
-		for ind, strMode = range lstBank {
-			if strings.Contains(strMode, `Кол-во: <span class="green2">`) {
-				strMode1 = strMode
-				break
-			}
-		}
-		lstMode := strings.Split(strMode1, `Кол-во: <span class="green2">`)
-		strMode1 = lstMode[1]
-		lstMode = strings.Split(strMode1, `</span><br/>`)
-		strMode1 = lstMode[0]
-		iNum1, err := strconv.Atoi(strMode1)
-		if err != nil {
-			return fmt.Errorf("BankNet.getAllMode(): numSilver1(%v) not number, err=\n\t%w", strMode1, err)
-		}
-		сам.РежимРаботы1().Серебро().Уст(iNum1)
-		// Установить время производства
-		strTime1 := lstBank[ind+2]
-		сам.РежимРаботы1().ВремяСделатьУст(strTime1)
-		if iNum1 <= 2 { // Если банк слишком слабый
-			return nil
-		}
-	}
-	{ // Получить второй режим
-		for _ind := ind + 2; _ind < len(lstBank); _ind++ {
-			strMode := lstBank[_ind]
-			if strings.Contains(strMode, `Кол-во: <span class="green2">`) {
-				strMode2 = strMode
-				ind = _ind
-				break
-			}
-		}
-		lstMode := strings.Split(strMode2, `Кол-во: <span class="green2">`)
-		strMode2 = lstMode[1]
-		lstMode = strings.Split(strMode2, `</span><br/>`)
-		strMode2 = lstMode[0]
-		iNum2, err := strconv.Atoi(strMode2)
-		if err != nil {
-			return fmt.Errorf("BankNet.getAllMode(): numSilver2(%v) not number, err=\n\t%w", strMode2, err)
-		}
-		сам.РежимРаботы2().Серебро().Уст(iNum2)
-		// Установить время производства
-		strTime2 := lstBank[ind+2]
-		сам.РежимРаботы2().ВремяСделатьУст(strTime2)
-	}
-	return nil
-}

+ 2 - 0
app/lev3/bot/bot.go

@@ -18,6 +18,7 @@ import (
 	"wartank/app/lev0/bfunc/bf_mission_simple"
 	"wartank/app/lev0/bfunc/bf_silver_find"
 	"wartank/app/lev0/bfunc/bf_silver_get"
+	"wartank/app/lev0/bfunc/bf_silver_prod"
 	. "wartank/app/lev0/types"
 	"wartank/app/lev2"
 	"wartank/app/lev3/bot/bot_config"
@@ -171,6 +172,7 @@ func (сам *Бот) пуск() {
 			bf_fuel_attack.ТопливоАтаковать(сам.конт)
 			bf_mission_simple.МиссииПростыеЗабрать(сам.конт)
 			bf_silver_get.СереброЗабрать(сам.конт)
+			bf_silver_prod.СереброПроизводить(сам.конт)
 		}
 	}
 }