package net_stat
import (
"strconv"
"strings"
"wartank/pkg/components/kernel/logger"
"wartank/pkg/types"
)
/*
Исходник предоставляет тип для парсинга статистики уровня танка и сервера.
*/
// NetStat -- статистика уровня танка и сервера
type NetStat struct {
server types.ИСервер
бот types.ИБот
лог types.ИЛоггер
}
// NewNetStat -- возвращает новый *NetStat
func NewNetStat(bot types.ИБот) *NetStat {
лог := logger.НовЛоггер("NetStat")
лог.Инфо("NewNetStat()\n")
лог.Паника(bot == nil, "NewNetStat(): ИБот == nil")
сам := &NetStat{
server: bot.Сервер(),
бот: bot,
лог: лог,
}
return сам
}
func (сам *NetStat) Update() {
// _mt.Println("\n===NetStat.Update()===")
сам.findLevelTank()
сам.findLevelProgress()
сам.атакаНайти()
сам.броняНайти()
сам.точностьНайти()
сам.прочностьНайти()
сам.мощностьНайти()
сам.игроковОнлайнНайти()
}
// Ищет в теле текста ангара мощность танка
func (сам *NetStat) мощностьНайти() {
lstAngar := сам.бот.Ангар().СписПолучить()
if len(lstAngar) == 0 {
// log._rintf("WARN NetStat.findPower(): lstAngar is empty\n")
return
}
var strOut string
for _, strPower := range lstAngar {
if strings.Contains(strPower, `/images/icons/power.png?2`) {
strOut = strPower
break
}
}
// Выделить мощность
lstPower := strings.Split(strOut, `
Танковая мощь: `)
strPower := lstPower[1]
lstPower = strings.Split(strPower, ``)
strPower = lstPower[0]
iPower, ош := strconv.Atoi(strPower)
сам.лог.Паника(ош != nil, "NetStat.мощностьНайти(): мощность(%v) не число, ош=\n\t%v\n", strPower, ош)
сам.бот.Стата().Мощь().Уст(iPower)
}
// Ищет в теле текста ангара прочность танка
func (сам *NetStat) прочностьНайти() {
var (
strOut string
lstAngar = сам.бот.Ангар().СписПолучить()
еслиНайдено bool
)
if len(lstAngar) == 0 {
// log._rintf("WARN NetStat.findHard(): lstAngar пустой\n")
return
}
for _, strOut = range lstAngar {
if strings.Contains(strOut, `/images/icons/durability.png?1`) {
еслиНайдено = true
break
}
}
if !еслиНайдено {
return
}
// Выделить прочность
lstHard := strings.Split(strOut, `
Прочность `)
strHard := lstHard[1]
lstHard = strings.Split(strHard, `
`)
strHard = lstHard[0]
iHard, ош := strconv.Atoi(strHard)
сам.лог.Паника(ош != nil, "NetStat.прочностьНайти(): прочность(%v) не число, ош=\n\t%v\n", strHard, ош)
сам.бот.Стата().Прочность().Уст(iHard)
}
// Ищет в теле текста ангара точность танка
func (сам *NetStat) точностьНайти() {
var (
strOut string
lstAngar = сам.бот.Ангар().СписПолучить()
еслиНайдено bool
)
if len(lstAngar) == 0 {
// log._rintf("WARN NetStat.findFyne(): lstAngar пустой\n")
return
}
for _, strOut = range lstAngar {
if strings.Contains(strOut, `/images/icons/accuracy.png?1`) {
еслиНайдено = true
break
}
}
if !еслиНайдено {
return
}
// Выделить броню
lstFyne := strings.Split(strOut, `
Точность `)
strFyne := lstFyne[1]
lstFyne = strings.Split(strFyne, `
`)
strFyne = lstFyne[0]
iFyne, ош := strconv.Atoi(strFyne)
сам.лог.Паника(ош != nil, "NetStat.точностьНайти(): точность(%v) не число, ош=\n\t%v\n", strFyne, ош)
сам.бот.Стата().Точность().Уст(iFyne)
}
// Ищет в теле текста ангара броню танка
func (сам *NetStat) броняНайти() {
var (
strOut string
lstAngar = сам.бот.Ангар().СписПолучить()
еслиНайдено bool
)
if len(lstAngar) == 0 {
return
}
for _, strOut = range lstAngar {
if strings.Contains(strOut, `/images/icons/armor.png?1`) {
еслиНайдено = true
break
}
}
if !еслиНайдено {
return
}
// Выделить броню
lstArmor := strings.Split(strOut, `
Броня `)
strArmor := lstArmor[1]
lstArmor = strings.Split(strArmor, `
`)
strArmor = lstArmor[0]
iArmor, ош := strconv.Atoi(strArmor)
сам.лог.Паника(ош != nil, "NetStat.броняНайти(): броня(%v) не число, ош=\n\t%v\n", strArmor, ош)
сам.бот.Стата().Броня().Уст(iArmor)
}
// Ищет в теле текста ангара уровень танка
func (сам *NetStat) findLevelTank() {
lstAngar := сам.бот.Ангар().СписПолучить()
if len(lstAngar) == 0 {
// log._rintf("ERRO NetStat.findLevelTank(): пустой lstAngar")
return
}
var strOut string
for _, strLevel := range lstAngar {
if strings.Contains(strLevel, "/images/icons/level.png?2") {
strOut = strLevel
break
}
}
// Выделить уровень
lstLevel := strings.Split(strOut, `