|
|
@@ -5,7 +5,6 @@ import (
|
|
|
"log"
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
- "sync"
|
|
|
"time"
|
|
|
"wartank/pkg/alias"
|
|
|
"wartank/pkg/arena"
|
|
|
@@ -14,13 +13,13 @@ import (
|
|
|
"wartank/server/serv_bots/warbot/angar/base"
|
|
|
"wartank/server/serv_bots/warbot/angar/battle"
|
|
|
"wartank/server/serv_bots/warbot/angar/convoy"
|
|
|
- "wartank/server/serv_bots/warbot/angar/fuel"
|
|
|
"wartank/server/serv_bots/warbot/angar/fuel_attack"
|
|
|
"wartank/server/serv_bots/warbot/angar/masters"
|
|
|
"wartank/server/serv_bots/warbot/angar/missions"
|
|
|
"wartank/server/serv_bots/warbot/angar/netstat"
|
|
|
"wartank/server/serv_bots/warbot/angar/tank_params"
|
|
|
- "wartank/server/serv_bots/warbot/tank_stat/static_param"
|
|
|
+ "wartank/server/serv_bots/warbot/stat_resurs"
|
|
|
+ "wartank/server/serv_bots/warbot/stat_tank/static_param"
|
|
|
)
|
|
|
|
|
|
/*
|
|
|
@@ -30,30 +29,21 @@ import (
|
|
|
// Ангар -- ангар для танка
|
|
|
type Ангар struct {
|
|
|
types.ИАрена
|
|
|
- слог types.ИЛоггер
|
|
|
- сеть types.ИАренаСеть
|
|
|
- топливоБой *fuel_attack.ТопливоБой
|
|
|
+ слог types.ИЛоггер
|
|
|
+ сеть types.ИАренаСеть
|
|
|
+ бот types.ИБот
|
|
|
|
|
|
- бот types.ИБот
|
|
|
- // конвой *convoy.Конвой
|
|
|
- сражение *battle.Сражение
|
|
|
- битва *masters.БитваМастеров
|
|
|
- база *base.База
|
|
|
- миссии types.ИМиссии
|
|
|
-
|
|
|
- золото types.ИСтатПарам
|
|
|
- уровень types.ИСтатПарам
|
|
|
- progress types.ИСтатПарам
|
|
|
- топливо *fuel.Топливо
|
|
|
+ уровень types.ИСтатПарам
|
|
|
+ progress types.ИСтатПарам
|
|
|
+ // топливо *fuel.Топливо
|
|
|
игроковОнлайн types.ИСтатПарам
|
|
|
|
|
|
- сереброВсего types.ИСтатПарам
|
|
|
silverOnline types.ИСтатПарам
|
|
|
|
|
|
сетьТанкСтат *netstat.NetStat
|
|
|
танкПарам *tank_params.ТанкПараметры
|
|
|
- блок sync.Mutex
|
|
|
словАрена map[alias.АренаИмя]types.ИАрена
|
|
|
+ ресурсы *stat_resurs.СтатРесурсы
|
|
|
}
|
|
|
|
|
|
// НовАнгар -- возвращает новый *Angar
|
|
|
@@ -66,11 +56,9 @@ func НовАнгар(бот types.ИБот) (*Ангар, error) {
|
|
|
сам := &Ангар{
|
|
|
слог: бот.Сервер().Слог(),
|
|
|
бот: бот,
|
|
|
- золото: static_param.НовСтатПарам("gold"),
|
|
|
уровень: static_param.НовСтатПарам("level"),
|
|
|
progress: static_param.НовСтатПарам("progress"),
|
|
|
игроковОнлайн: static_param.НовСтатПарам("online"),
|
|
|
- сереброВсего: static_param.НовСтатПарам("silver_all"),
|
|
|
silverOnline: static_param.НовСтатПарам("silver_online"),
|
|
|
танкПарам: танкПарам,
|
|
|
словАрена: make(map[alias.АренаИмя]types.ИАрена),
|
|
|
@@ -80,16 +68,16 @@ func НовАнгар(бот types.ИБот) (*Ангар, error) {
|
|
|
АренаИмя_: "Ангар",
|
|
|
СтрКонтроль_: "<title>Ангар</title>",
|
|
|
ФнПуск_: сам.пуск,
|
|
|
+ СтрУрл_: "https://wartank.ru/angar",
|
|
|
}
|
|
|
сам.ИАрена = arena.НовАрена(аренаКонф)
|
|
|
сам.сеть = arena_net.НовАренаСеть(сам, "https://wartank.ru/angar")
|
|
|
var err error
|
|
|
- { // Сеть атаки
|
|
|
- сам.топливоБой, err = fuel_attack.НовТопливоБой(сам)
|
|
|
- if err != nil {
|
|
|
- return nil, fmt.Errorf("НовАнгар(): in create <AngarAttackNet>, err=\n\t%w", err)
|
|
|
- }
|
|
|
+ топливоБой, err := fuel_attack.НовТопливоБой(сам)
|
|
|
+ if err != nil {
|
|
|
+ return nil, fmt.Errorf("НовАнгар(): in create <AngarAttackNet>, err=\n\t%w", err)
|
|
|
}
|
|
|
+ сам.словАрена["топливоБой"] = топливоБой
|
|
|
{ // Статистика
|
|
|
сам.сетьТанкСтат, err = netstat.NewNetStat(сам.бот)
|
|
|
if err != nil {
|
|
|
@@ -98,30 +86,21 @@ func НовАнгар(бот types.ИБот) (*Ангар, error) {
|
|
|
}
|
|
|
конвой := convoy.НовКонвой(сам.бот)
|
|
|
сам.словАрена["конвой"] = конвой
|
|
|
- // Сражение
|
|
|
- сам.сражение = battle.НовСражение(сам.бот)
|
|
|
- { // Битва мастеров
|
|
|
- сам.битва = masters.НовБитваМастеров(сам.бот)
|
|
|
- // go сам.batMas.Run()
|
|
|
- }
|
|
|
- { // База
|
|
|
- сам.база, err = base.НовБаза(сам)
|
|
|
- if err != nil {
|
|
|
- return nil, fmt.Errorf("НовАнгар(): in make IBase, err=\n\t%w", err)
|
|
|
- }
|
|
|
- }
|
|
|
- { // Миссии
|
|
|
- сам.миссии, err = missions.НовМиссии(сам.бот)
|
|
|
- if err != nil {
|
|
|
- return nil, fmt.Errorf("НовАнгар(): in make *Missions, err=\n\t%w", err)
|
|
|
- }
|
|
|
+ сражение := battle.НовСражение(сам.бот)
|
|
|
+ сам.словАрена["сражение"] = сражение
|
|
|
+ битваМастеров := masters.НовБитваМастеров(сам.бот)
|
|
|
+ сам.словАрена["битваМастеров"] = битваМастеров
|
|
|
+ база, err := base.НовБаза(сам)
|
|
|
+ if err != nil {
|
|
|
+ return nil, fmt.Errorf("НовАнгар(): in make IBase, err=\n\t%w", err)
|
|
|
}
|
|
|
- { // Топливо
|
|
|
- сам.топливо, err = fuel.НовТопливо(сам)
|
|
|
- if err != nil {
|
|
|
- return nil, fmt.Errorf("НовАнгар(): in make *Missions, err=\n\t%w", err)
|
|
|
- }
|
|
|
+ сам.словАрена["база"] = база
|
|
|
+ миссии, err := missions.НовМиссии(сам.бот)
|
|
|
+ if err != nil {
|
|
|
+ return nil, fmt.Errorf("НовАнгар(): in make *Missions, err=\n\t%w", err)
|
|
|
}
|
|
|
+ сам.словАрена["миссии"] = миссии
|
|
|
+ сам.ресурсы = stat_resurs.НовСтатРесурсы(сам)
|
|
|
_ = types.ИАнгар(сам)
|
|
|
return сам, nil
|
|
|
}
|
|
|
@@ -136,19 +115,14 @@ func (сам *Ангар) Обновить() {
|
|
|
return
|
|
|
}
|
|
|
сам.словАрена["конвой"].Пуск()
|
|
|
- сам.топливо.Обновить()
|
|
|
+ сам.ресурсы.Топливо().Обновить()
|
|
|
}
|
|
|
|
|
|
// Запускает обработку ангара
|
|
|
func (сам *Ангар) пуск() {
|
|
|
{ // Запуск компонентов
|
|
|
- сам.топливоБой.Пуск()
|
|
|
- сам.сражение.Пуск()
|
|
|
- сам.битва.Пуск()
|
|
|
- сам.база.Пуск()
|
|
|
- сам.миссии.Пуск()
|
|
|
сам.танкПарам.Пуск()
|
|
|
- go сам.топливо.Run()
|
|
|
+ go сам.ресурсы.Топливо().Run()
|
|
|
}
|
|
|
фнЦикл := func() bool {
|
|
|
сам.Обновить()
|
|
|
@@ -158,6 +132,9 @@ func (сам *Ангар) пуск() {
|
|
|
log.Printf("Ангар.Run(): in update ICountTime, err=\n\t%v\n", err)
|
|
|
return false
|
|
|
}
|
|
|
+ for _, арена := range сам.словАрена {
|
|
|
+ арена.Пуск()
|
|
|
+ }
|
|
|
return true
|
|
|
}
|
|
|
go func() {
|
|
|
@@ -194,12 +171,12 @@ func (сам *Ангар) РесурсыОбновить() {
|
|
|
|
|
|
// IMissions -- возвращает ссылку на объект миссий
|
|
|
func (сам *Ангар) Миссии() types.ИМиссии {
|
|
|
- return сам.миссии
|
|
|
+ return сам.словАрена["миссии"].(types.ИМиссии)
|
|
|
}
|
|
|
|
|
|
// Сражение -- возвращает объект сражения
|
|
|
func (сам *Ангар) Сражение() types.ИСражениеСцена {
|
|
|
- return сам.сражение
|
|
|
+ return сам.словАрена["сражение"].(types.ИСражениеСцена)
|
|
|
}
|
|
|
|
|
|
// Конвой -- возвращает объект конвоя
|
|
|
@@ -209,12 +186,12 @@ func (сам *Ангар) Конвой() types.ИКонвой {
|
|
|
|
|
|
// Золото -- возвращает объект золота
|
|
|
func (сам *Ангар) Золото() types.ИСтатПарам {
|
|
|
- return сам.золото
|
|
|
+ return сам.ресурсы.Золото()
|
|
|
}
|
|
|
|
|
|
// Топливо -- возвращает объект топлива
|
|
|
func (сам *Ангар) Топливо() types.ИСтатПарам {
|
|
|
- return сам.топливо.Fuel()
|
|
|
+ return сам.ресурсы.Топливо().Fuel()
|
|
|
}
|
|
|
|
|
|
// Уровень -- возвращает объект уровня игрока
|
|
|
@@ -234,7 +211,7 @@ func (сам *Ангар) ИгрокиОнлайн() types.ИСтатПарам
|
|
|
|
|
|
// СереброВсего -- возвращает объект всего серебра в ангаре
|
|
|
func (сам *Ангар) СереброВсего() types.ИСтатПарам {
|
|
|
- return сам.сереброВсего
|
|
|
+ return сам.ресурсы.СереброВсего()
|
|
|
}
|
|
|
|
|
|
// СереброЗаработаноСессия -- возвращает объект серебра за сессию в ангаре
|
|
|
@@ -244,27 +221,25 @@ func (сам *Ангар) СереброЗаработаноСессия() types
|
|
|
|
|
|
// СереброОбновить -- на основе фактического серебра -- обновляет выработанное серебро
|
|
|
func (сам *Ангар) СереброОбновить(silverFact int) {
|
|
|
- if сам.сереброВсего.Получ() == 0 { // Если запуск
|
|
|
- сам.сереброВсего.Уст(silverFact)
|
|
|
+ if сам.СереброВсего().Получ() == 0 { // Если запуск
|
|
|
+ сам.СереброВсего().Уст(silverFact)
|
|
|
return
|
|
|
}
|
|
|
- if сам.сереброВсего.Получ() > silverFact { // Если потрачено серебро
|
|
|
- сам.сереброВсего.Уст(silverFact)
|
|
|
+ if сам.СереброВсего().Получ() > silverFact { // Если потрачено серебро
|
|
|
+ сам.СереброВсего().Уст(silverFact)
|
|
|
return
|
|
|
}
|
|
|
- if сам.сереброВсего.Получ() < silverFact { // Если заработано
|
|
|
+ if сам.СереброВсего().Получ() < silverFact { // Если заработано
|
|
|
so := сам.silverOnline.Получ()
|
|
|
- sd := silverFact - сам.сереброВсего.Получ()
|
|
|
+ sd := silverFact - сам.СереброВсего().Получ()
|
|
|
сам.silverOnline.Уст(so + sd)
|
|
|
}
|
|
|
- сам.сереброВсего.Уст(silverFact)
|
|
|
+ сам.СереброВсего().Уст(silverFact)
|
|
|
}
|
|
|
|
|
|
// База -- возвращает базу
|
|
|
func (сам *Ангар) База() types.ИБаза {
|
|
|
- сам.блок.Lock()
|
|
|
- defer сам.блок.Unlock()
|
|
|
- return сам.база
|
|
|
+ return сам.словАрена["база"].(types.ИБаза)
|
|
|
}
|
|
|
|
|
|
/* Проверяет на исполнение конвоя
|
|
|
@@ -309,7 +284,7 @@ func (сам *Ангар) сереброНайти() {
|
|
|
// log._rintf("ERRO AngarNet.findSilver(): silver(%v) not number, err=\n\t%v\n", strSilver, err)
|
|
|
return
|
|
|
}
|
|
|
- сам.сереброВсего.Уст(iSilver)
|
|
|
+ сам.СереброВсего().Уст(iSilver)
|
|
|
}
|
|
|
|
|
|
// Ищет в теле текста ангара золото
|