| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- 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.АренаКонфиг{
- Бот_: бот,
- АренаИмя_: "Ангар",
- СтрКонтроль_: "<title>Ангар</title>",
- ФнПуск_: сам.пуск,
- СтрУрл_: "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, `<img title="Серебро" `) {
- strOut = strSilver
- break
- }
- }
- // Выделить топливо
- lstSilver := strings.Split(strOut, `<img title="Серебро" alt="Серебро" src="/images/icons/silver.png?2"/> `)
- 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, `<img title="Золото" `) {
- strOut = strGold
- еслиНайдено = true
- break
- }
- }
- if !еслиНайдено {
- return
- }
- // Выделить топливо
- lstGold := strings.Split(strOut, `<img title="Золото" alt="Золото" src="/images/icons/gold.png?2"/> `)
- 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)
- }
|