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 НовАнгар(конт ИБотКонтекст) ИАренаАнгар { бот := конт.Получ("бот").(ИБот) сам := &АренаАнгар{ бот: бот, progress: stat_param.НовСтатПарам("прогресс"), игроковОнлайн: stat_param.НовСтатПарам("онлайн"), сереброСессия: stat_param.НовСтатПарам("серебро сессия"), танкСтат: конт.Получ("танкПарам").(ИТанкСтат), серебро: stat_param.НовСтатПарам("серебро"), } аренаКонф := arena.АренаКонфиг{ Бот_: бот, АренаИмя_: "Ангар", СтрКонтроль_: "Ангар", ФнПуск_: сам.пуск, СтрУрл_: "https://wartank.ru/angar", } конт.Уст("ангар", сам) сам.ИАрена = arena.НовАрена(конт, аренаКонф) сам.ресурсы = bot_resurs.НовБотРесурсы(конт, сам) return сам } // Золото -- возвращает объект топлива в ангаре func (сам *АренаАнгар) Золото() ИСтатПарам { return сам.золото } // Топливо -- возвращает объект топлива в ангаре func (сам *АренаАнгар) Топливо() ИСтатПарам { return сам.топливо } // СереброСессия -- возвращает объект серебра за текущую сессию func (сам *АренаАнгар) СереброСессия() ИСтатПарам { return сам.сереброСессия } // Серебро -- возвращает объект серебра в ангаре func (сам *АренаАнгар) Серебро() ИСтатПарам { return сам.серебро } // Обновить -- обновить ангар принудительно func (сам *АренаАнгар) Обновить() { сам.РесурсыОбновить() } // Запускает обработку ангара func (сам *АренаАнгар) пуск() { { // Запуск компонентов } фнЦикл := func() bool { сам.Обновить() // сам.конвойПроверить() if err := сам.ОбратВремяУст("01:00"); err != nil { сам.Отменить() 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", ош) сам.прилож.Отменить() return } for { select { case <-сам.прилож.Конт().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) }