Browse Source

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

SVI 1 year ago
parent
commit
1d0cde2454

+ 124 - 0
app/lev0/bfunc/bf_ammo_stat/bf_ammo_stat.go

@@ -0,0 +1,124 @@
+// package bf_ammo_stat -- бизнес-процесс статистики снарядов
+package bf_ammo_stat
+
+import (
+	"strconv"
+	"strings"
+
+	. "gitp78su.ipnodns.ru/svi/kern/kc/helpers"
+	. "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
+
+	. "wartank/app/lev0/types"
+)
+
+// СнарядыСтат -- получает статистику снарядов
+func СнарядыСтат(конт ILocalCtx) {
+	арсенал := конт.Get("арсенал")
+	if арсенал == nil { // Может быть не построен
+		return
+	}
+	фугасыНайти(конт)
+	бронейбойкиНайти(конт)
+	кумульНайти(конт)
+	ремкаНайти(конт)
+}
+
+func ремкаНайти(конт ILocalCtx) {
+	арсенал := конт.Get("арсенал").Val().(ИАренаАрсенал)
+	lstArsenal := арсенал.СписПолучить()
+	if len(lstArsenal) == 0 {
+		арсенал.Обновить()
+		lstArsenal = арсенал.СписПолучить()
+	}
+	strOut := ""
+	isFind := false
+	// <span class="nwr"><img class="rico vm" src="/images/shells/repairkit.gif"/> 282</span>
+	for _, стрСнаряд := range lstArsenal {
+		if strings.Contains(стрСнаряд, `<span class="nwr"><img class="rico vm" src="/images/shells/repairkit.gif"/> `) {
+			strOut = стрСнаряд
+			isFind = true
+			break
+		}
+	}
+	Hassert(isFind, "ремкаНайти(): не найдена контрольная строка")
+	strOut = strings.TrimPrefix(strOut, `<span class="nwr"><img class="rico vm" src="/images/shells/repairkit.gif"/> `)
+	strOut = strings.TrimSuffix(strOut, `</span>`)
+	целФугас, err := strconv.Atoi(strOut)
+	Hassert(err == nil, "ремкаНайти(): strOut(%v), err=\n\t%v", strOut, err)
+	арсенал.Ремки().Уст(целФугас)
+}
+
+func кумульНайти(конт ILocalCtx) {
+	арсенал := конт.Get("арсенал").Val().(ИАренаАрсенал)
+	lstArsenal := арсенал.СписПолучить()
+	if len(lstArsenal) == 0 {
+		арсенал.Обновить()
+		lstArsenal = арсенал.СписПолучить()
+	}
+	strOut := ""
+	isFind := false
+	// <span class="nwr"><img class="rico vm" src="/images/shells/HollowCharge.png" alt="Кумулятивный снаряд" title="Кумулятивный снаряд"/> 7340 &nbsp;&nbsp;</span>
+	for _, стрСнаряд := range lstArsenal {
+		if strings.Contains(стрСнаряд, `<span class="nwr"><img class="rico vm" src="/images/shells/HollowCharge.png" alt="Кумулятивный снаряд" title="Кумулятивный снаряд"/> `) {
+			strOut = стрСнаряд
+			isFind = true
+			break
+		}
+	}
+	Hassert(isFind, "кумульНайти(): не найдена контрольная строка")
+	strOut = strings.TrimPrefix(strOut, `<span class="nwr"><img class="rico vm" src="/images/shells/HollowCharge.png" alt="Кумулятивный снаряд" title="Кумулятивный снаряд"/> `)
+	strOut = strings.TrimSuffix(strOut, ` &nbsp;&nbsp;</span>`)
+	целФугас, err := strconv.Atoi(strOut)
+	Hassert(err == nil, "кумульНайти(): strOut(%v), err=\n\t%v", strOut, err)
+	арсенал.Кумулятивы().Уст(целФугас)
+}
+
+func бронейбойкиНайти(конт ILocalCtx) {
+	арсенал := конт.Get("арсенал").Val().(ИАренаАрсенал)
+	lstArsenal := арсенал.СписПолучить()
+	if len(lstArsenal) == 0 {
+		арсенал.Обновить()
+		lstArsenal = арсенал.СписПолучить()
+	}
+	strOut := ""
+	isFind := false
+	// <span class="nwr"><img class="rico vm" src="/images/shells/ArmorPiercing.png" alt="Бронебойный снаряд" title="Бронебойный снаряд"/> 7335 &nbsp;&nbsp;</span>
+	for _, стрСнаряд := range lstArsenal {
+		if strings.Contains(стрСнаряд, `<span class="nwr"><img class="rico vm" src="/images/shells/ArmorPiercing.png" alt="Бронебойный снаряд" title="Бронебойный снаряд"/> `) {
+			strOut = стрСнаряд
+			isFind = true
+			break
+		}
+	}
+	Hassert(isFind, "бронейбойкиНайти(): не найдена контрольная строка")
+	strOut = strings.TrimPrefix(strOut, `<span class="nwr"><img class="rico vm" src="/images/shells/ArmorPiercing.png" alt="Бронебойный снаряд" title="Бронебойный снаряд"/> `)
+	strOut = strings.TrimSuffix(strOut, ` &nbsp;&nbsp;</span>`)
+	целФугас, err := strconv.Atoi(strOut)
+	Hassert(err == nil, "бронейбойкиНайти(): strOut(%v), err=\n\t%v", strOut, err)
+	арсенал.Бронебойки().Уст(целФугас)
+}
+
+func фугасыНайти(конт ILocalCtx) {
+	арсенал := конт.Get("арсенал").Val().(ИАренаАрсенал)
+	lstArsenal := арсенал.СписПолучить()
+	if len(lstArsenal) == 0 {
+		арсенал.Обновить()
+		lstArsenal = арсенал.СписПолучить()
+	}
+	strOut := ""
+	isFind := false
+	// <span class="nwr"><img class="rico vm" src="/images/shells/HighExplosive.png" alt="Фугасный снаряд" title="Фугасный снаряд"/> 7343 &nbsp;&nbsp;</span>
+	for _, стрФугас := range lstArsenal {
+		if strings.Contains(стрФугас, `<span class="nwr"><img class="rico vm" src="/images/shells/HighExplosive.png" alt="Фугасный снаряд" title="Фугасный снаряд"/> `) {
+			strOut = стрФугас
+			isFind = true
+			break
+		}
+	}
+	Hassert(isFind, "фугасыНайти(): не найдена контрольная строка")
+	strOut = strings.TrimPrefix(strOut, `<span class="nwr"><img class="rico vm" src="/images/shells/HighExplosive.png" alt="Фугасный снаряд" title="Фугасный снаряд"/> `)
+	strOut = strings.TrimSuffix(strOut, ` &nbsp;&nbsp;</span>`)
+	целФугас, err := strconv.Atoi(strOut)
+	Hassert(err == nil, "фугасыНайти(): strOut(%v), err=\n\t%v", strOut, err)
+	арсенал.Фугасы().Уст(целФугас)
+}

+ 0 - 90
app/lev2/arena/arena_arsenal/arena_arsenal.go

@@ -2,7 +2,6 @@
 package arena_arsenal
 
 import (
-	"fmt"
 	"log"
 	"strconv"
 	"strings"
@@ -125,11 +124,6 @@ func (сам *АренаАрсенал) пуск() {
 			}
 		}
 		_ = сам.уровеньОбновить()
-		ош := сам.СтатаОбновить()
-		if ош != nil {
-			сам.лог.Err("пуск(): при обновлении статы, ош=\n\t%v\n", ош)
-			сам.вЛог.Добавить("пуск(): при обновлении статы, ош=\n\t%w", ош)
-		}
 		сам.забрать()
 		сам.сделать()
 		сам.лог.Info("пуск(): бот=%q, цикл завершён\n", сам.бот.Имя())
@@ -381,90 +375,6 @@ func (сам *АренаАрсенал) Ремки() ИСтатПарам {
 	return сам.ремка
 }
 
-// Обновляет состояние арсенала по требованию
-func (сам *АренаАрсенал) СтатаОбновить() (err error) {
-	сам.вЛог.Добавить("Арсенал.СтатаОбновить()\n")
-	сам.Сеть().Обновить()
-	var (
-		strOut     string
-		lstArsenal = сам.СписПолучить()
-	)
-	{ // Найти маркер фугасного снаряда
-		for _, стрФугас := range lstArsenal {
-			if strings.Contains(стрФугас, `<span class="nwr"><img class="rico vm" src="/images/shells/HighExplosive.png" alt="Фугасный снаряд" title="Фугасный снаряд"/> `) {
-				strOut = стрФугас
-				break
-			}
-		}
-		списФугас := strings.Split(strOut, `<span class="nwr"><img class="rico vm" src="/images/shells/HighExplosive.png" alt="Фугасный снаряд" title="Фугасный снаряд"/> `)
-		стрФугас := списФугас[1]
-		списФугас = strings.Split(стрФугас, ` &nbsp;&nbsp;</span>`)
-		стрФугас = списФугас[0]
-		целФугас, err := strconv.Atoi(стрФугас)
-		if err != nil {
-			ош := fmt.Errorf("ОШИБКА Арсенал.СтатаОбновить(): фугас(%v) not number, err=\n\t%w", стрФугас, err)
-			сам.вЛог.Добавить("%v\n", ош)
-			return ош
-		}
-		сам.Фугасы().Уст(целФугас)
-	}
-	{ // Найти маркер бронебойного снаряда
-		for _, strArmor := range lstArsenal {
-			if strings.Contains(strArmor, `alt="Бронебойный снаряд"`) {
-				strOut = strArmor
-				break
-			}
-		}
-		lstArmor := strings.Split(strOut, `<span class="nwr"><img class="rico vm" src="/images/shells/ArmorPiercing.png" alt="Бронебойный снаряд" title="Бронебойный снаряд"/> `)
-		strArmor := lstArmor[1]
-		lstArmor = strings.Split(strArmor, ` &nbsp;&nbsp;</span>`)
-		strArmor = lstArmor[0]
-		iArmor, err := strconv.Atoi(strArmor)
-		if err != nil {
-			ош := fmt.Errorf("Арсенал.СтатаОбновить(): armor(%v) not number, err=\n\t%w", strArmor, err)
-			сам.вЛог.Добавить("%v\n", ош)
-			return ош
-		}
-		сам.Бронебойки().Уст(iArmor)
-		сам.вЛог.Добавить("Арсенал.СтатаОбновить(): бронебойки=%v\n", iArmor)
-	}
-	{ // Найти маркер кумулятивного снаряда
-		for _, стрКумул := range lstArsenal {
-			if strings.Contains(стрКумул, `<span class="nwr"><img class="rico vm" src="/images/shells/HollowCharge.png" alt="Кумулятивный снаряд" title="Кумулятивный снаряд"/> `) {
-				strOut = стрКумул
-				break
-			}
-		}
-		списКумул := strings.Split(strOut, `<span class="nwr"><img class="rico vm" src="/images/shells/HollowCharge.png" alt="Кумулятивный снаряд" title="Кумулятивный снаряд"/> `)
-		стрКумул := списКумул[1]
-		списКумул = strings.Split(стрКумул, ` &nbsp;&nbsp;</span>`)
-		стрКумул = списКумул[0]
-		целКумул, err := strconv.Atoi(стрКумул)
-		if err != nil {
-			return fmt.Errorf("Арсенал.СтатаОбновить(): кумул(%v) not number, err=\n\t%w", стрКумул, err)
-		}
-		сам.Кумулятивы().Уст(целКумул)
-	}
-	{ // Найти маркер ремкомплекта
-		for ind, стрРемка := range lstArsenal {
-			if strings.Contains(стрРемка, `<span class="nwr"><img class="rico vm" src="/images/shells/repairkit.gif"/> `) {
-				strOut = lstArsenal[ind]
-				break
-			}
-		}
-		списРемка := strings.Split(strOut, `<span class="nwr"><img class="rico vm" src="/images/shells/repairkit.gif"/> `)
-		стрРемка := списРемка[1]
-		списРемка = strings.Split(стрРемка, `</span>`)
-		стрРемка = списРемка[0]
-		целРемка, err := strconv.Atoi(стрРемка)
-		if err != nil {
-			return fmt.Errorf("Арсенал.СтатаОбновить(): ремка(%v) not number, err=\n\t%w", стрРемка, err)
-		}
-		сам.Ремки().Уст(целРемка)
-	}
-	return nil
-}
-
 // Выбирает что надо делать, запускает процесс изготовления
 func (сам *АренаАрсенал) сделать() bool {
 	сам.Обновить()

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

@@ -12,6 +12,7 @@ import (
 	. "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
 
 	. "wartank/app/lev0/alias"
+	"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_gold_find"
@@ -177,6 +178,7 @@ func (сам *Бот) пуск() {
 			bf_silver_prod.СереброПроизводить(сам.конт)
 			bf_polygon_activate.ПолигонАктивировать(сам.конт)
 			bf_tank_stat.ТанкСтатПолучить(сам.конт)
+			bf_ammo_stat.СнарядыСтат(сам.конт)
 		}
 	}
 }

+ 108 - 1
app/lev3/serv_web/web_api/web_api.go

@@ -56,13 +56,99 @@ func НовВебАпи() *ВебАпи {
 
 	файбер.Post("/api/bot/:number/arsenal/level", сам.арсеналУровень)
 	файбер.Post("/api/bot/:number/arsenal/mode", сам.арсеналРежим)
-	файбер.Post("/api/bot/:number/arsenal/count_product", сам.полигонРаботаКоличество)
+	файбер.Post("/api/bot/:number/arsenal/count_product", сам.арсеналРаботаКоличество)
 	файбер.Post("/api/bot/:number/arsenal/name_product", сам.арсеналРаботаИмя)
 	файбер.Post("/api/bot/:number/arsenal/back_time", сам.арсеналВремяОсталось)
 	файбер.Post("/api/bot/:number/arsenal/log", сам.арсеналЛог)
+
+	файбер.Post("/api/bot/:number/arsenal/kumul", сам.арсеналКумуль)
+	файбер.Post("/api/bot/:number/arsenal/bron", сам.арсеналБронебойка)
+	файбер.Post("/api/bot/:number/arsenal/fugas", сам.арсеналФугас)
+	файбер.Post("/api/bot/:number/arsenal/remka", сам.арсеналРемка)
+
 	return сам
 }
 
+// Возвращает ремки на арсенале
+func (сам *ВебАпи) арсеналРемка(кнт *fiber.Ctx) error {
+	номер, ош := кнт.ParamsInt("number")
+	if ош != nil {
+		сообщ := fmt.Sprintf("[Ремка: неправильный номер бота(%q), err=%v]", номер, ош.Error())
+		return кнт.SendString(сообщ)
+	}
+	ботНомер := АБотНомер(номер)
+	бот := сам.прилож.ServBots().Get(ботНомер)
+	if бот == nil {
+		return кнт.SendString("[Ремка: нет такого бота]")
+	}
+	арсенал := бот.КонтБот().Get("арсенал").Val().(ИАренаАрсенал)
+	стрСнаряды := арсенал.Ремки().ЗначСтр()
+	if стрСнаряды == "" {
+		return кнт.SendString("[Ремка: пустое значение]")
+	}
+	return кнт.SendString("[Ремка: " + стрСнаряды + "]")
+}
+
+// Возвращает фугасы на арсенале
+func (сам *ВебАпи) арсеналФугас(кнт *fiber.Ctx) error {
+	номер, ош := кнт.ParamsInt("number")
+	if ош != nil {
+		сообщ := fmt.Sprintf("[Фугас: неправильный номер бота(%q), err=%v]", номер, ош.Error())
+		return кнт.SendString(сообщ)
+	}
+	ботНомер := АБотНомер(номер)
+	бот := сам.прилож.ServBots().Get(ботНомер)
+	if бот == nil {
+		return кнт.SendString("[Фугас: нет такого бота]")
+	}
+	арсенал := бот.КонтБот().Get("арсенал").Val().(ИАренаАрсенал)
+	стрСнаряды := арсенал.Фугасы().ЗначСтр()
+	if стрСнаряды == "" {
+		return кнт.SendString("[Фугас: пустое значение]")
+	}
+	return кнт.SendString("[Фугас: " + стрСнаряды + "]")
+}
+
+// Возвращает бронебойки на арсенале
+func (сам *ВебАпи) арсеналБронебойка(кнт *fiber.Ctx) error {
+	номер, ош := кнт.ParamsInt("number")
+	if ош != nil {
+		сообщ := fmt.Sprintf("[Броне: неправильный номер бота(%q), err=%v]", номер, ош.Error())
+		return кнт.SendString(сообщ)
+	}
+	ботНомер := АБотНомер(номер)
+	бот := сам.прилож.ServBots().Get(ботНомер)
+	if бот == nil {
+		return кнт.SendString("[Броне: нет такого бота]")
+	}
+	арсенал := бот.КонтБот().Get("арсенал").Val().(ИАренаАрсенал)
+	стрСнаряды := арсенал.Бронебойки().ЗначСтр()
+	if стрСнаряды == "" {
+		return кнт.SendString("[Броне: пустое значение]")
+	}
+	return кнт.SendString("[Броне: " + стрСнаряды + "]")
+}
+
+// Возвращает кумули на арсенале
+func (сам *ВебАпи) арсеналКумуль(кнт *fiber.Ctx) error {
+	номер, ош := кнт.ParamsInt("number")
+	if ош != nil {
+		сообщ := fmt.Sprintf("[Кумуль: неправильный номер бота(%q), err=%v]", номер, ош.Error())
+		return кнт.SendString(сообщ)
+	}
+	ботНомер := АБотНомер(номер)
+	бот := сам.прилож.ServBots().Get(ботНомер)
+	if бот == nil {
+		return кнт.SendString("[Кумуль: нет такого бота]")
+	}
+	арсенал := бот.КонтБот().Get("арсенал").Val().(ИАренаАрсенал)
+	стрСнаряды := арсенал.Кумулятивы().ЗначСтр()
+	if стрСнаряды == "" {
+		return кнт.SendString("[Кумуль: пустое значение]")
+	}
+	return кнт.SendString("[Кумуль: " + стрСнаряды + "]")
+}
+
 // Возвращает силу мощности бота
 func (сам *ВебАпи) статаМощность(кнт *fiber.Ctx) error {
 	номер, ош := кнт.ParamsInt("number")
@@ -268,6 +354,27 @@ func (сам *ВебАпи) арсеналЛог(кнт *fiber.Ctx) error {
 	return кнт.SendString(лог)
 }
 
+// Возвращает количество производства на арсенале
+func (сам *ВебАпи) арсеналРаботаКоличество(кнт *fiber.Ctx) error {
+	номер, ош := кнт.ParamsInt("number")
+	if ош != nil {
+		сообщ := fmt.Sprintf("[Кол: неправильный номер бота(%q), err=%v]", номер, ош.Error())
+		return кнт.SendString(сообщ)
+	}
+	ботНомер := АБотНомер(номер)
+	бот := сам.прилож.ServBots().Get(ботНомер)
+	if бот == nil {
+		return кнт.SendString("[Кол: нет такого бота]")
+	}
+	арсенал := бот.КонтБот().Get("арсенал").Val().(ИАренаПолигон)
+	колич := арсенал.ПродуктКолСейчас()
+	стрКолич := fmt.Sprint(колич)
+	if стрКолич == "" {
+		return кнт.SendString("[Кол: пустое кол]")
+	}
+	return кнт.SendString("[Кол: +" + стрКолич + "]")
+}
+
 // Возвращает время, которое осталось на полигоне
 func (сам *ВебАпи) полигонВремяОсталось(кнт *fiber.Ctx) error {
 	номер, ош := кнт.ParamsInt("number")

+ 4 - 4
app/lev3/serv_web/web_gui/page_bot_show/bot_show.tmpl.html

@@ -90,10 +90,10 @@
                 {.оружейная_работа}</p>
             <p class="card-text" hx-post="/api/bot/{.id}/arsenal/name_product" hx-trigger="every 5s">Тип:
                 {.оружейная_режим}</p>
-            <p class="card-text">Кумул: {.оружейная_кумул}</p>
-            <p class="card-text">Бронебойки: {.оружейная_бронебойки}</p>
-            <p class="card-text">Фугасы: {.оружейная_фугасы}</p>
-            <p class="card-text">Ремки: {.оружейная_ремки}</p>
+            <p class="card-text" hx-post="/api/bot/{.id}/arsenal/kumul" hx-trigger="every 5s">Кумул: {.оружейная_кумул}</p>
+            <p class="card-text" hx-post="/api/bot/{.id}/arsenal/bron" hx-trigger="every 5s">Бронебойки: {.оружейная_бронебойки}</p>
+            <p class="card-text" hx-post="/api/bot/{.id}/arsenal/fugas" hx-trigger="every 5s">Фугасы: {.оружейная_фугасы}</p>
+            <p class="card-text" hx-post="/api/bot/{.id}/arsenal/remka" hx-trigger="every 5s">Ремки: {.оружейная_ремки}</p>
         </div>
         <div class="card-footer border-success" hx-post="/api/bot/{.id}/arsenal/back_time" hx-trigger="every 5s">
             Время: {.оружейная_время}</div>