package arena_angar
import (
"log"
"strconv"
"strings"
"time"
. "wartank/app/lev0/types"
"wartank/app/lev1/stat_param"
"wartank/app/lev2/arena"
"wartank/app/lev3/bot/bot_stat/bot_resurs"
)
/*
Объект ангара приложения
*/
// Ангар -- ангар для танка
type АренаАнгар struct {
ИАрена
прилож ИПриложение
бот ИБот
progress ИСтатПарам
топливо ИСтатПарам
серебро ИСтатПарам
золото ИСтатПарам
игроковОнлайн ИСтатПарам
сереброСессия ИСтатПарам
ресурсы ИБотРесурсы
танкСтат ИТанкСтат
}
// НовАнгар -- возвращает новый *Angar
func НовАнгар(конт ИБотКонтекст) ИАренаАнгар {
бот := конт.Get("бот").(ИБот)
сам := &АренаАнгар{
бот: бот,
progress: stat_param.НовСтатПарам_("прогресс"),
игроковОнлайн: stat_param.НовСтатПарам_("онлайн"),
сереброСессия: stat_param.НовСтатПарам_("серебро сессия"),
танкСтат: конт.Get("танкПарам").(ИТанкСтат),
серебро: stat_param.НовСтатПарам_("серебро"),
}
аренаКонф := arena.АренаКонфиг{
Бот_: бот,
АренаИмя_: "Ангар",
СтрКонтроль_: "
Ангар",
ФнПуск_: сам.пуск,
СтрУрл_: "https://wartank.ru/angar",
}
конт.Set("ангар", сам, "Объект ангара бота")
сам.ИАрена = arena.НовАрена(конт, аренаКонф)
сам.ресурсы = bot_resurs.НовБотРесурсы(конт, сам)
return сам
}
// Золото -- возвращает объект топлива в ангаре
func (сам *АренаАнгар) Золото() ИСтатПарам {
return сам.золото
}
// Топливо -- возвращает объект топлива в ангаре
func (сам *АренаАнгар) Топливо() ИСтатПарам {
return сам.топливо
}
// СереброСессия -- возвращает объект серебра за текущую сессию
func (сам *АренаАнгар) СереброСессия() ИСтатПарам {
return сам.сереброСессия
}
// Серебро -- возвращает объект серебра в ангаре
func (сам *АренаАнгар) Серебро() ИСтатПарам {
return сам.серебро
}
// Обновить -- обновить ангар принудительно
func (сам *АренаАнгар) Обновить() {
сам.РесурсыОбновить()
}
// Запускает обработку ангара
func (сам *АренаАнгар) пуск() {
{ // Запуск компонентов
}
фнЦикл := func() bool {
сам.Обновить()
// сам.конвойПроверить()
if err := сам.ОбратВремяУст("01:00"); err != nil {
сам.прилож.Cancel()
log.Printf("Ангар.Run(): in update ICountTime, err=\n\t%v\n", err)
return false
}
return true
}
go func() {
ош := сам.ОбратВремяУст("01")
if ош != nil {
log.Printf("Ангар.Run(): in update ICountTime, ош=\n\t%v\n", ош)
сам.прилож.Cancel()
return
}
for {
select {
case <-сам.прилож.Ctx().Done(): // Отмена контекста
return
case <-сам.ВремяОстат().КаналСиг(): // Метка времени
if !фнЦикл() {
return
}
default: // Запускается раз в минуту
if !фнЦикл() {
return
}
time.Sleep(time.Minute * 1)
}
}
}()
}
// Обновляет ресурсы ангара
func (сам *АренаАнгар) РесурсыОбновить() {
сам.ИАрена.Обновить()
сам.золотоНайти()
сам.сереброНайти()
}
// Прогресс -- возвращает прогресс уровня игрока
func (сам *АренаАнгар) Прогресс() ИСтатПарам {
return сам.progress
}
// ИгрокиОнлайн -- возвращает количество игроков онлайн
func (сам *АренаАнгар) ИгрокиОнлайн() ИСтатПарам {
return сам.игроковОнлайн
}
// Ищет в теле текста ангара серебро
func (сам *АренаАнгар) сереброНайти() {
// _mt.Println("\tAngarNet.findSilver()")
lstAngar := сам.СписПолучить()
var strOut string
for _, strSilver := range lstAngar {
if strings.Contains(strSilver, `
`)
strSilver := lstSilver[1]
_, err := strconv.Atoi(strSilver)
if err != nil {
// log._rintf("ERRO AngarNet.findSilver(): silver(%v) not number, err=\n\t%v\n", strSilver, err)
return
}
}
// Ищет в теле текста ангара золото
func (сам *АренаАнгар) золотоНайти() {
var (
lstAngar = сам.бот.Ангар().СписПолучить()
strOut string
еслиНайдено bool
)
for _, strGold := range lstAngar {
if strings.Contains(strGold, `
`)
strGold := lstGold[1]
iGold, err := strconv.Atoi(strGold)
if err != nil {
// log._rintf("ERRO AngarNet.findGold(): gold(%v) not number, err=\n\t%v\n", strGold, err)
return
}
сам.бот.Ангар().Золото().Уст(iGold)
}