Explorar el Código

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

SVI hace 11 meses
padre
commit
247c5c698b

+ 129 - 0
app/lev0/bfunc/bf_glory_make/bf_glory_make.go

@@ -0,0 +1,129 @@
+// package bf_glory_make -- бизнес-функция бой за славу
+package bf_glory_make
+
+import (
+	"strings"
+
+	. "gitp78su.ipnodns.ru/svi/kern/kc/helpers"
+	. "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
+
+	. "wartank/app/lev0/types"
+)
+
+// СлаваБой -- забрать славу в бою
+func СлаваБой(конт ILocalCtx) {
+	стрАтака := атакаПроверить(конт)
+	if стрАтака == "" {
+		return
+	}
+	атакаНачать(конт, стрАтака)
+}
+
+// Проводит атаку на конвой
+func атакаНачать(конт ILocalCtx, strOut string) {
+	конвой := конт.Get("конвой").Val().(ИАренаКонвой)
+	strLink := strOut
+	// Можно начать разведку
+	lstConvoy := конвой.Сеть().ВебВоркер().Получ(strLink)
+	if err := конвой.СтрОбновить(lstConvoy); err != nil {
+		for _, strOut = range lstConvoy {
+			if strings.Contains(strOut, `<title>Ошибка на сервере. Сообщение админу уже отправлено.</title>`) {
+				// log._rintf("ERRO Конвой.атакаНачать(): при обновлении lstConvoy, strOut=\n\t%v\n", strOut)
+				return
+			}
+		}
+		for _, strOut = range lstConvoy {
+			if strings.Contains(strOut, `<title>База</title>`) {
+				// log._rintf("ERRO Конвой.атакаНачать(): при обновлении lstConvoy (найдено lstBase), strOut=\n\t%v\n", strOut)
+				return
+			}
+		}
+		// log._rintf("ERRO Конвой.атакаНачать(): при обновлении lstConvoy, err=\n\t%v\n", err)
+		return
+	}
+	начатьРазведку(конт)
+	err := конвой.ОбратВремяУст("01")
+	Hassert(err == nil, "Конвой.атакаНачать(): при установке CountDown, err=\n\t%v", err)
+}
+
+func атакаПроверить(конт ILocalCtx) string {
+	конвой := конт.Get("конвой").Val().(ИАренаКонвой)
+	var (
+		strOut      = ""
+		еслиНайдено bool
+	)
+	lstConvoy := конвой.Сеть().ВебВоркер().Получ("https://wartank.ru/convoy")
+	for _, strOut = range lstConvoy {
+		// <div class="bot"><a class="simple-but border" w:id="findEnemy" href="convoy?50-1.ILinkListener-root-findEnemy"><span><span>Начать разведку</span></span></a></div>
+		если1 := strings.Contains(strOut, `.ILinkListener-root-findEnemy"`)
+		if если1 {
+			_ссылка := strings.TrimPrefix(strOut, `<div class="bot"><a class="simple-but border" w:id="findEnemy" href="`)
+			_ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Начать разведку</span></span></a></div>`)
+			strOut = "https://wartank.ru/" + _ссылка
+			еслиНайдено = true
+			break
+		}
+		если2 := strings.Contains(strOut, `<span>В БОЙ!</span>`)
+		if если2 {
+			lstLink := strings.Split(strOut, `<div class="bot"><a class="simple-but border" w:id="startMasking" href="`)
+			if len(lstLink) == 1 {
+				lstLink = strings.Split(strOut, `<div class="bot"><a class="simple-but border red" w:id="startFight" href="`)
+			}
+			strOut = lstLink[1]
+			lstLink = strings.Split(strOut, `"><span><span>В БОЙ!</span></span></a></div>`)
+			strOut = "https://wartank.ru/" + lstLink[0]
+			еслиНайдено = true
+			break
+		}
+		// <div class="bot"><a class="simple-but border" w:id="findEnemy" href="convoy?15-1.ILinkListener-root-findEnemy"><span><span>Начать разведку</span></span></a></div>
+		если3 := strings.Contains(strOut, "<span>Начать разведку</span>")
+		if если3 {
+			_ссылка := strings.TrimPrefix(strOut, `<<div class="bot"><a class="simple-but border" w:id="findEnemy" href="`)
+			_ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Начать разведку</span></span></a></div>`)
+			strOut = "https://wartank.ru/" + _ссылка
+			еслиНайдено = true
+			break
+		}
+		if strings.Contains(strOut, `>ОБЫЧНЫЕ<`) {
+			lstLink := strings.Split(strOut, `<a href="`)
+			strOut = lstLink[1]
+			lstLink = strings.Split(strOut, `" class="simple-but gray"><span><span>ОБЫЧНЫЕ</span></span></a>`)
+			strOut = "https://wartank.ru/" + lstLink[0]
+			еслиНайдено = true
+			break
+		}
+	}
+	if !еслиНайдено { // Время ожидания
+		return ""
+	}
+	return strOut
+}
+
+// Выполняет атаку на конвой
+func начатьРазведку(конт ILocalCtx) {
+	конвой := конт.Get("конвой").Val().(ИАренаКонвой)
+	// Вырезать ссылку на атаку
+	strOut := ""
+	еслиНайдено := false
+	lstConvoy := конвой.СписПолучить()
+	// <div class="bot"><a class="simple-but border" w:id="findEnemy" href="convoy?50-1.ILinkListener-root-findEnemy"><span><span>Начать разведку</span></span></a></div>
+	for _, strOut = range lstConvoy {
+		if strings.Contains(strOut, `.ILinkListener-root-findEnemy`) {
+			еслиНайдено = true
+			break
+		}
+	}
+	if !еслиНайдено { // Нечего атаковать
+		return
+	}
+	// Атакуем конвой
+	_link := strings.TrimPrefix(strOut, `<div class="bot"><a class="simple-but border" w:id="findEnemy" href="`)
+	_link = strings.TrimSuffix(_link, `"><span><span>Начать разведку</span></span></a></div>`)
+	// https://wartank.ru/convoy?52-1.ILinkListener-root-findEnemy
+	link := "https://wartank.ru/" + _link
+	{ // Выполнить атаку
+		lstConvoy = конвой.Сеть().ВебВоркер().Получ(link)
+		err := конвой.СтрОбновить(lstConvoy)
+		Hassert(err == nil, "Конвой.attack(): при обновлении lstConvoy, err=\n\t%v", err)
+	}
+}

+ 11 - 138
app/lev2/arena/arena_convoy/arena_convoy.go

@@ -1,7 +1,6 @@
 package arena_convoy
 
 import (
-	"fmt"
 	"log"
 	"strconv"
 	"strings"
@@ -27,9 +26,9 @@ type АренаКонвой struct {
 }
 
 // НовКонвой -- возвращает новый *Convoy
-func НовКонвой(конт ILocalCtx, бот ИБот) *АренаКонвой {
+func НовКонвой(конт ILocalCtx) *АренаКонвой {
 	сам := &АренаКонвой{
-		бот:   бот,
+		бот:   конт.Get("бот").Val().(ИБот),
 		слава: lev1.НовСтатПарам("слава"),
 	}
 	аренаКонфиг := arena.АренаКонфиг{
@@ -40,26 +39,28 @@ func НовКонвой(конт ILocalCtx, бот ИБот) *АренаКонв
 		СтрУрл_:      "https://wartank.ru/convoy",
 	}
 	сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
+	конт.Set("конвой", сам, "Арена конвоя бота")
+	_ = ИАренаКонвой(сам)
 	return сам
 }
 
+// Слава -- возвращает славу конвоя
+func (сам *АренаКонвой) Слава() ИСтатПарам {
+	return сам.слава
+}
+
 // UpdateLst -- принудительно обновляет состояние конвоя
 func (сам *АренаКонвой) UpdateLst() {
 	сам.Обновить()
 }
 
-// Слава --возвращает счётчик славы конвоя
-func (сам *АренаКонвой) Слава() ИСтатПарам {
-	return сам.слава
-}
-
 // обрабатывает конвой
 func (сам *АренаКонвой) пуск() {
 	фнЦикл := func() {
 		сам.проверитьМиссия6фрагов()
 		сам.проверитьМиссияРазведкаКонвой()
 		сам.проверитьМиссияМастерРазведки()
-		сам.атаковать()
+		сам.призыВзять()
 	}
 	for {
 		select {
@@ -74,16 +75,11 @@ func (сам *АренаКонвой) пуск() {
 	}
 }
 
-func (сам *АренаКонвой) атаковать() {
+func (сам *АренаКонвой) призыВзять() {
 	if false {
 		сам.обновитьВремя()
 	}
 	for {
-		стрВбой := сам.найтиВбой()
-		if стрВбой == "" {
-			return
-		}
-		сам.атакаНачать() // в этом месте только атаковать
 		сам.проверитьМиссияРазведкаКонвой()
 		сам.проверитьМиссияМастерРазведки()
 		сам.проверитьМиссия6фрагов()
@@ -188,129 +184,6 @@ func (сам *АренаКонвой) обновитьВремя() {
 	}
 }
 
-func (сам *АренаКонвой) найтиВбой() string {
-	var (
-		strOut      = ""
-		еслиНайдено bool
-	)
-	lstConvoy := сам.Сеть().ВебВоркер().Получ("https://wartank.ru/convoy")
-	if сам.бот.Имя() == "prospero tank" {
-		log.Printf("")
-	}
-	for _, strOut = range lstConvoy {
-		// <div class="bot"><a class="simple-but border" w:id="findEnemy" href="convoy?50-1.ILinkListener-root-findEnemy"><span><span>Начать разведку</span></span></a></div>
-		если1 := strings.Contains(strOut, `.ILinkListener-root-findEnemy"`)
-		if если1 {
-			_ссылка := strings.TrimPrefix(strOut, `<div class="bot"><a class="simple-but border" w:id="findEnemy" href="`)
-			_ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Начать разведку</span></span></a></div>`)
-			strOut = "https://wartank.ru/" + _ссылка
-			еслиНайдено = true
-			break
-		}
-		если2 := strings.Contains(strOut, `<span>В БОЙ!</span>`)
-		if если2 {
-			lstLink := strings.Split(strOut, `<div class="bot"><a class="simple-but border" w:id="startMasking" href="`)
-			if len(lstLink) == 1 {
-				lstLink = strings.Split(strOut, `<div class="bot"><a class="simple-but border red" w:id="startFight" href="`)
-			}
-			strOut = lstLink[1]
-			lstLink = strings.Split(strOut, `"><span><span>В БОЙ!</span></span></a></div>`)
-			strOut = "https://wartank.ru/" + lstLink[0]
-			еслиНайдено = true
-			break
-		}
-		// <div class="bot"><a class="simple-but border" w:id="findEnemy" href="convoy?15-1.ILinkListener-root-findEnemy"><span><span>Начать разведку</span></span></a></div>
-		если3 := strings.Contains(strOut, "<span>Начать разведку</span>")
-		if если3 {
-			_ссылка := strings.TrimPrefix(strOut, `<<div class="bot"><a class="simple-but border" w:id="findEnemy" href="`)
-			_ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Начать разведку</span></span></a></div>`)
-			strOut = "https://wartank.ru/" + _ссылка
-			еслиНайдено = true
-			break
-		}
-		if strings.Contains(strOut, `>ОБЫЧНЫЕ<`) {
-			lstLink := strings.Split(strOut, `<a href="`)
-			strOut = lstLink[1]
-			lstLink = strings.Split(strOut, `" class="simple-but gray"><span><span>ОБЫЧНЫЕ</span></span></a>`)
-			strOut = "https://wartank.ru/" + lstLink[0]
-			еслиНайдено = true
-			break
-		}
-	}
-	if !еслиНайдено { // Время ожидания
-		// if err := сам.SetCountDown(1); err != nil {
-		// 	panic(fmt.Errorf("Конвой.атакаНачать(): прb установке CountDown, err=\n\t%w", err))
-		// }
-		return ""
-	}
-	return strOut
-}
-
-// Проводит атаку на конвой
-func (сам *АренаКонвой) атакаНачать() {
-	// Найти контрольную строку
-	strOut := сам.найтиВбой()
-	if strOut == "" { // Время ожидания
-		// if err := сам.SetCountDown(1); err != nil {
-		// 	panic(fmt.Errorf("Конвой.атакаНачать(): прb установке CountDown, err=\n\t%w", err))
-		// }
-		return
-	}
-	strLink := strOut
-	// Можно начать разведку
-	lstConvoy := сам.Сеть().ВебВоркер().Получ(strLink)
-	if err := сам.СтрОбновить(lstConvoy); err != nil {
-		for _, strOut = range lstConvoy {
-			if strings.Contains(strOut, `<title>Ошибка на сервере. Сообщение админу уже отправлено.</title>`) {
-				// log._rintf("ERRO Конвой.атакаНачать(): при обновлении lstConvoy, strOut=\n\t%v\n", strOut)
-				return
-			}
-		}
-		for _, strOut = range lstConvoy {
-			if strings.Contains(strOut, `<title>База</title>`) {
-				// log._rintf("ERRO Конвой.атакаНачать(): при обновлении lstConvoy (найдено lstBase), strOut=\n\t%v\n", strOut)
-				return
-			}
-		}
-		// log._rintf("ERRO Конвой.атакаНачать(): при обновлении lstConvoy, err=\n\t%v\n", err)
-		return
-	}
-	сам.начатьРазведку()
-	if err := сам.ОбратВремяУст("01"); err != nil {
-		panic(fmt.Errorf("Конвой.атакаНачать(): при установке CountDown, err=\n\t%w", err))
-	}
-}
-
-// Выполняет атаку на конвой
-func (сам *АренаКонвой) начатьРазведку() {
-	// Вырезать ссылку на атаку
-	strOut := ""
-	еслиНайдено := false
-	lstConvoy := сам.СписПолучить()
-	// <div class="bot"><a class="simple-but border" w:id="findEnemy" href="convoy?50-1.ILinkListener-root-findEnemy"><span><span>Начать разведку</span></span></a></div>
-	for _, strOut = range lstConvoy {
-		if strings.Contains(strOut, `.ILinkListener-root-findEnemy`) {
-			еслиНайдено = true
-			break
-		}
-	}
-	if !еслиНайдено { // Нечего атаковать
-		return
-	}
-	// Атакуем конвой
-	_link := strings.TrimPrefix(strOut, `<div class="bot"><a class="simple-but border" w:id="findEnemy" href="`)
-	_link = strings.TrimSuffix(_link, `"><span><span>Начать разведку</span></span></a></div>`)
-	// https://wartank.ru/convoy?52-1.ILinkListener-root-findEnemy
-	link := "https://wartank.ru/" + _link
-	{ // Выполнить атаку
-		lstConvoy = сам.Сеть().ВебВоркер().Получ(link)
-		if err := сам.СтрОбновить(lstConvoy); err != nil {
-			log.Printf("Конвой.attack(): при обновлении lstConvoy, err=\n\t%v\n", err)
-			return
-		}
-	}
-}
-
 // Забирает награду в конвое "Активируй боевую силу"
 func (сам *АренаКонвой) проверитьМиссияРазведкаКонвой() {
 	var (

+ 7 - 0
app/lev2/lev2.go

@@ -9,12 +9,19 @@ import (
 	"wartank/app/lev2/arena/arena_arsenal"
 	"wartank/app/lev2/arena/arena_bank"
 	"wartank/app/lev2/arena/arena_base"
+	"wartank/app/lev2/arena/arena_convoy"
 	"wartank/app/lev2/arena/arena_fuel"
 	"wartank/app/lev2/arena/arena_mine"
 	"wartank/app/lev2/arena/arena_missions"
 	"wartank/app/lev2/arena/arena_polygon"
 )
 
+// НовКонвой -- возвращает новый конвой
+func НовКонвой(конт ILocalCtx) ИАренаКонвой {
+	конвой := arena_convoy.НовКонвой(конт)
+	return конвой
+}
+
 // НовБанк -- возвращает новый банк бота
 func НовБанк(конт ILocalCtx) ИАренаБанк {
 	банк := arena_bank.НовБанк(конт)

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

@@ -16,6 +16,7 @@ import (
 	"wartank/app/lev0/bfunc/bf_ammo_stat"
 	"wartank/app/lev0/bfunc/bf_fuel_attack"
 	"wartank/app/lev0/bfunc/bf_fuel_find"
+	"wartank/app/lev0/bfunc/bf_glory_make"
 	"wartank/app/lev0/bfunc/bf_gold_find"
 	"wartank/app/lev0/bfunc/bf_mission_simple"
 	"wartank/app/lev0/bfunc/bf_polygon_activate"
@@ -122,6 +123,7 @@ func создатьЯдроВарБот(конфиг *bot_config.БотКонф
 		сам.Пуск()
 	}
 	сам.ангар = lev2.НовАнгар(сам.конт)
+	_ = lev2.НовКонвой(сам.конт)
 	_ = lev2.НовБанк(сам.конт)
 	_ = lev2.НовМиссииПростые(сам.конт)
 	_ = lev2.НовПолигон(сам.конт)
@@ -181,6 +183,7 @@ func (сам *Бот) пуск() {
 			bf_tank_stat.ТанкСтатПолучить(сам.конт)
 			bf_ammo_stat.СнарядыСтат(сам.конт)
 			bf_ammo_make.СнарядыСделать(сам.конт)
+			bf_glory_make.СлаваБой(сам.конт)
 		}
 	}
 }