|
@@ -2,8 +2,10 @@ package polygon
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
"fmt"
|
|
"fmt"
|
|
|
|
|
+ "log"
|
|
|
"strconv"
|
|
"strconv"
|
|
|
"strings"
|
|
"strings"
|
|
|
|
|
+ "time"
|
|
|
|
|
|
|
|
"wartank/pkg/components/section"
|
|
"wartank/pkg/components/section"
|
|
|
"wartank/pkg/types"
|
|
"wartank/pkg/types"
|
|
@@ -14,71 +16,138 @@ import (
|
|
|
Объект полигона на базе
|
|
Объект полигона на базе
|
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
-// Polygon -- объект полигона на базе
|
|
|
|
|
-type Polygon struct {
|
|
|
|
|
|
|
+// Полигон -- объект полигона на базе
|
|
|
|
|
+type Полигон struct {
|
|
|
*section.Секция
|
|
*section.Секция
|
|
|
- bot types.ИБот
|
|
|
|
|
- tankStat types.ИТанкСтат
|
|
|
|
|
- net *polygonnet.PolygonNet
|
|
|
|
|
|
|
+ бот types.ИБот
|
|
|
|
|
+ танкСтат types.ИТанкСтат
|
|
|
|
|
+ сеть *polygonnet.ПолигонСеть
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// NewPolygon -- возвращает новый *Polygon
|
|
|
|
|
-func NewPolygon(base types.ИБаза) (*Polygon, error) {
|
|
|
|
|
- section, err := section.NewSection(base.Бот(), "Полигон", `<title>Полигон</title>`)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return nil, fmt.Errorf("NewPolygon(): in create *Section, err=\n\t%w", err)
|
|
|
|
|
|
|
+// НовПолигон -- возвращает новый *Polygon
|
|
|
|
|
+func НовПолигон(base types.ИБаза) (*Полигон, error) {
|
|
|
|
|
+ секция, ош := section.NewSection(base.Бот(), "Полигон", `<title>Полигон</title>`)
|
|
|
|
|
+ if ош != nil {
|
|
|
|
|
+ return nil, fmt.Errorf("NewPolygon(): in create *Section, err=\n\t%w", ош)
|
|
|
}
|
|
}
|
|
|
- sf := &Polygon{
|
|
|
|
|
- Секция: section,
|
|
|
|
|
- bot: base.Бот(),
|
|
|
|
|
- tankStat: base.Бот().Танк().ТанкСтат(),
|
|
|
|
|
|
|
+ сам := &Полигон{
|
|
|
|
|
+ Секция: секция,
|
|
|
|
|
+ бот: base.Бот(),
|
|
|
|
|
+ танкСтат: base.Бот().Танк().ТанкСтат(),
|
|
|
}
|
|
}
|
|
|
- sf.net, err = polygonnet.NewPolygonNet(sf)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return nil, fmt.Errorf("NewPolygon(): in create NetPolygon, err=\n\t%w", err)
|
|
|
|
|
|
|
+ сам.сеть, ош = polygonnet.НовПолигонСеть(сам)
|
|
|
|
|
+ if ош != nil {
|
|
|
|
|
+ return nil, fmt.Errorf("NewPolygon(): in create NetPolygon, err=\n\t%w", ош)
|
|
|
}
|
|
}
|
|
|
- return sf, nil
|
|
|
|
|
|
|
+ return сам, nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// Run -- запускает работу полигона в отдельном потоке
|
|
|
|
|
-func (sf *Polygon) Run() error {
|
|
|
|
|
- go sf.run()
|
|
|
|
|
|
|
+// Пуск -- запускает работу полигона в отдельном потоке
|
|
|
|
|
+func (sf *Полигон) Пуск() error {
|
|
|
|
|
+ go sf.пуск()
|
|
|
return nil
|
|
return nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// выполняет опрос полигона базы.
|
|
// выполняет опрос полигона базы.
|
|
|
-func (sf *Polygon) run() {
|
|
|
|
|
- sf.SetCountDown(2)
|
|
|
|
|
|
|
+func (сам *Полигон) пуск() {
|
|
|
|
|
+ сам.SetCountDown(2)
|
|
|
for {
|
|
for {
|
|
|
select {
|
|
select {
|
|
|
- case <-sf.bot.Кнт().Done():
|
|
|
|
|
- sf.ВремяОпрос().Стоп()
|
|
|
|
|
|
|
+ case <-сам.бот.Кнт().Done():
|
|
|
|
|
+ сам.ВремяОпрос().Стоп()
|
|
|
return
|
|
return
|
|
|
- case <-sf.ВремяОпрос().КаналСиг():
|
|
|
|
|
- mode := sf.РежимТекущ().Получ()
|
|
|
|
|
|
|
+ case <-сам.ВремяОпрос().КаналСиг():
|
|
|
|
|
+ default:
|
|
|
|
|
+ mode := сам.РежимТекущ().Получ()
|
|
|
if mode == "upgrade" {
|
|
if mode == "upgrade" {
|
|
|
continue
|
|
continue
|
|
|
}
|
|
}
|
|
|
- sf.addForce()
|
|
|
|
|
- sf.checkForce()
|
|
|
|
|
- sf.updateTime()
|
|
|
|
|
|
|
+ сам.усилениеДобавить()
|
|
|
|
|
+ сам.усилениеПровер()
|
|
|
|
|
+ сам.времяОбнов()
|
|
|
|
|
+ сам.построитьПровер()
|
|
|
|
|
+ time.Sleep(time.Minute * 20)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// Проверяет необходимость постройки полигона
|
|
|
|
|
+func (сам *Полигон) построитьПровер() {
|
|
|
|
|
+ фнПостроить := func() bool { // Поиск кнопки строительства
|
|
|
|
|
+ // https://wartank.ru/building-upgrade/Polygon
|
|
|
|
|
+ списПолигон, ош := сам.сеть.Клиент().Get("https://wartank.ru/building-upgrade/Polygon")
|
|
|
|
|
+ if ош != nil {
|
|
|
|
|
+ log.Printf("Полигон.построитьПровер(): при чтении страницы строительства полигона, ош=\n\t%v\n", ош)
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+ стрСсылка := ""
|
|
|
|
|
+ еслиНайти := false
|
|
|
|
|
+ // <a class="simple-but border mb5" href="Polygon?66-1.ILinkListener-upgradeLink-link">
|
|
|
|
|
+ for _, стрСсылка = range списПолигон {
|
|
|
|
|
+ if strings.Contains(стрСсылка, `href="Polygon?`) {
|
|
|
|
|
+ еслиНайти = true
|
|
|
|
|
+ break
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if !еслиНайти { // Время полигона вышло
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+ _ссылка := strings.TrimPrefix(стрСсылка, `<a class="simple-but border mb5" href="`)
|
|
|
|
|
+ _ссылка = strings.TrimSuffix(_ссылка, `">`)
|
|
|
|
|
+ ссылка := "https://wartank.ru/building-upgrade/" + _ссылка
|
|
|
|
|
+ // https://wartank.ru/building-upgrade/Polygon?83-1.ILinkListener-upgradeLink-link
|
|
|
|
|
+ списПолигон, ош = сам.сеть.Клиент().Get(ссылка)
|
|
|
|
|
+ if ош != nil {
|
|
|
|
|
+ log.Printf("Полигон.построитьПровер(): при выполнении запроса на строительство, ош=\n\t%v\n", ош)
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+ for _, стр := range списПолигон {
|
|
|
|
|
+ if strings.Contains(стр, `href="Polygon?`) {
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ { // подтверждение постройки
|
|
|
|
|
+ // "<a class=\"simple-but border w50 mXa mb10\" w:id=\"confirmLink\" href=\"../wicket/page?13-1.ILinkListener-confirmLink\"><span><span>да, подтверждаю</span></span></a>"
|
|
|
|
|
+ стрСсылка := ""
|
|
|
|
|
+ еслиНайти := false
|
|
|
|
|
+ for _, стрСсылка = range списПолигон {
|
|
|
|
|
+ if strings.Contains(стрСсылка, `.ILinkListener-confirmLink`) {
|
|
|
|
|
+ еслиНайти = true
|
|
|
|
|
+ break
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if !еслиНайти { // Время полигона вышло
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+ _ссылка := strings.TrimPrefix(стрСсылка, "<a class=\"simple-but border w50 mXa mb10\" w:id=\"confirmLink\" href=\"../")
|
|
|
|
|
+ _ссылка = strings.TrimSuffix(_ссылка, "\"><span><span>да, подтверждаю</span></span></a>")
|
|
|
|
|
+ ссылка := "https://wartank.ru/" + _ссылка
|
|
|
|
|
+ // https://wartank.ru/wicket/page?135-1.ILinkListener-confirmLink
|
|
|
|
|
+ _, ош = сам.сеть.Клиент().Get(ссылка)
|
|
|
|
|
+ if ош != nil {
|
|
|
|
|
+ log.Printf("Полигон.построитьПровер(): при выполнении запроса на строительство, ош=\n\t%v\n", ош)
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
+ return true
|
|
|
}
|
|
}
|
|
|
|
|
+ фнПостроить()
|
|
|
|
|
+ log.Printf("Полигон.построитьПровер(): построен упешно\n")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Обновляет оставшееся время полигона
|
|
// Обновляет оставшееся время полигона
|
|
|
//
|
|
//
|
|
|
// Этот объект сам описывает своё время
|
|
// Этот объект сам описывает своё время
|
|
|
-func (sf *Polygon) updateTime() {
|
|
|
|
|
|
|
+func (сам *Полигон) времяОбнов() {
|
|
|
var (
|
|
var (
|
|
|
strLastTime string
|
|
strLastTime string
|
|
|
isFind bool
|
|
isFind bool
|
|
|
isSet bool
|
|
isSet bool
|
|
|
- lstPolygon = sf.СписПолучить()
|
|
|
|
|
|
|
+ lstPolygon = сам.СписПолучить()
|
|
|
)
|
|
)
|
|
|
defer func() {
|
|
defer func() {
|
|
|
if !isSet {
|
|
if !isSet {
|
|
|
- sf.SetCountDown(5)
|
|
|
|
|
|
|
+ сам.SetCountDown(5)
|
|
|
}
|
|
}
|
|
|
}()
|
|
}()
|
|
|
for _, lastTime := range lstPolygon {
|
|
for _, lastTime := range lstPolygon {
|
|
@@ -95,7 +164,7 @@ func (sf *Polygon) updateTime() {
|
|
|
strLastTime = lstTime[1]
|
|
strLastTime = lstTime[1]
|
|
|
lstTime = strings.Split(strLastTime, `</span>`)
|
|
lstTime = strings.Split(strLastTime, `</span>`)
|
|
|
strLastTime = lstTime[0]
|
|
strLastTime = lstTime[0]
|
|
|
- if err := sf.ParseCountDown(strLastTime); err != nil {
|
|
|
|
|
|
|
+ if err := сам.ParseCountDown(strLastTime); err != nil {
|
|
|
// log._rintf("ERRO Polygon.updateTime(): при установке времени ожидания полигона(%v)\n\terr=%v\n", strLastTime, err)
|
|
// log._rintf("ERRO Polygon.updateTime(): при установке времени ожидания полигона(%v)\n\terr=%v\n", strLastTime, err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
@@ -103,10 +172,10 @@ func (sf *Polygon) updateTime() {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Проверяет что именно активировано
|
|
// Проверяет что именно активировано
|
|
|
-func (sf *Polygon) checkForce() {
|
|
|
|
|
|
|
+func (сам *Полигон) усилениеПровер() {
|
|
|
var (
|
|
var (
|
|
|
isFind bool
|
|
isFind bool
|
|
|
- lstPolygon = sf.СписПолучить()
|
|
|
|
|
|
|
+ lstPolygon = сам.СписПолучить()
|
|
|
ind = 0
|
|
ind = 0
|
|
|
strOut string
|
|
strOut string
|
|
|
)
|
|
)
|
|
@@ -144,21 +213,21 @@ func (sf *Polygon) checkForce() {
|
|
|
// log._rintf("NetPolygon.checkTime(): force(%v) not number, err=\n\t%v\n", strOut, err)
|
|
// log._rintf("NetPolygon.checkTime(): force(%v) not number, err=\n\t%v\n", strOut, err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
- sf.tankStat.ФорсажОбнов(форсажИмя, iForce)
|
|
|
|
|
|
|
+ сам.танкСтат.ФорсажОбнов(форсажИмя, iForce)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Выбирает самый слабый параметр и усиливает его
|
|
// Выбирает самый слабый параметр и усиливает его
|
|
|
-func (sf *Polygon) addForce() {
|
|
|
|
|
- if err := sf.net.UpdateLst(); err != nil {
|
|
|
|
|
|
|
+func (сам *Полигон) усилениеДобавить() {
|
|
|
|
|
+ if err := сам.сеть.UpdateLst(); err != nil {
|
|
|
// log._rintf("Polygon.checkPolygon(): при принудительном обновлении lstPlygon, mode=%s\terr=\n\t%v\n", sf.ModeCurrent().Get(), err)
|
|
// log._rintf("Polygon.checkPolygon(): при принудительном обновлении lstPlygon, mode=%s\terr=\n\t%v\n", sf.ModeCurrent().Get(), err)
|
|
|
- sf.SetCountDown(5)
|
|
|
|
|
|
|
+ сам.SetCountDown(5)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
- lstPoligon := sf.СписПолучить()
|
|
|
|
|
|
|
+ lstPoligon := сам.СписПолучить()
|
|
|
if len(lstPoligon) == 0 {
|
|
if len(lstPoligon) == 0 {
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
- stat := sf.tankStat
|
|
|
|
|
|
|
+ stat := сам.танкСтат
|
|
|
iAttack := stat.Атака().Получ()
|
|
iAttack := stat.Атака().Получ()
|
|
|
iArmor := stat.Броня().Получ()
|
|
iArmor := stat.Броня().Получ()
|
|
|
iFyne := stat.Точность().Получ()
|
|
iFyne := stat.Точность().Получ()
|
|
@@ -216,7 +285,7 @@ func (sf *Polygon) addForce() {
|
|
|
strOut = lstLink[1]
|
|
strOut = lstLink[1]
|
|
|
lstLink = strings.Split(strOut, `"><span><span>Получить бесплатно</span></span></a>`)
|
|
lstLink = strings.Split(strOut, `"><span><span>Получить бесплатно</span></span></a>`)
|
|
|
strLink := "https://wartank.ru/" + lstLink[0]
|
|
strLink := "https://wartank.ru/" + lstLink[0]
|
|
|
- if _, err := sf.net.Get(strLink); err != nil {
|
|
|
|
|
|
|
+ if _, err := сам.сеть.Get(strLink); err != nil {
|
|
|
// log._rintf("ERRO NetPolygon.addForce(): in make request force attack, err=\n\t%v\n", err)
|
|
// log._rintf("ERRO NetPolygon.addForce(): in make request force attack, err=\n\t%v\n", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
@@ -231,8 +300,8 @@ func (sf *Polygon) addForce() {
|
|
|
// log._rintf("ERRO NetPolygon.addForce(): strForceAttack(%v) not int, err=\n\t%v\n", strForce, err)
|
|
// log._rintf("ERRO NetPolygon.addForce(): strForceAttack(%v) not int, err=\n\t%v\n", strForce, err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
- sf.tankStat.ФорсажОбнов("attack", iForce)
|
|
|
|
|
- sf.РежимТекущ().Уст("атака")
|
|
|
|
|
|
|
+ сам.танкСтат.ФорсажОбнов("attack", iForce)
|
|
|
|
|
+ сам.РежимТекущ().Уст("атака")
|
|
|
}
|
|
}
|
|
|
case "armor": // Усиливаем броню
|
|
case "armor": // Усиливаем броню
|
|
|
isFind = false
|
|
isFind = false
|
|
@@ -254,7 +323,7 @@ func (sf *Polygon) addForce() {
|
|
|
strOut = lstLink[1]
|
|
strOut = lstLink[1]
|
|
|
lstLink = strings.Split(strOut, `"><span><span>Получить бесплатно</span></span></a>`)
|
|
lstLink = strings.Split(strOut, `"><span><span>Получить бесплатно</span></span></a>`)
|
|
|
strLink := "https://wartank.ru/" + lstLink[0]
|
|
strLink := "https://wartank.ru/" + lstLink[0]
|
|
|
- if _, err := sf.net.Get(strLink); err != nil {
|
|
|
|
|
|
|
+ if _, err := сам.сеть.Get(strLink); err != nil {
|
|
|
// log._rintf("NetPolygon.addForce(): in make request force armor, err=\n\t%v\n", err)
|
|
// log._rintf("NetPolygon.addForce(): in make request force armor, err=\n\t%v\n", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
@@ -269,8 +338,8 @@ func (sf *Polygon) addForce() {
|
|
|
// log._rintf("ERRO NetPolygon.addForce(): strForceArmor(%v) not int, err=\n\t%v\n", strForce, err)
|
|
// log._rintf("ERRO NetPolygon.addForce(): strForceArmor(%v) not int, err=\n\t%v\n", strForce, err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
- sf.tankStat.ФорсажОбнов("armor", iForce)
|
|
|
|
|
- sf.РежимТекущ().Уст("броня")
|
|
|
|
|
|
|
+ сам.танкСтат.ФорсажОбнов("armor", iForce)
|
|
|
|
|
+ сам.РежимТекущ().Уст("броня")
|
|
|
}
|
|
}
|
|
|
case "fyne": // Усиливаем точность
|
|
case "fyne": // Усиливаем точность
|
|
|
isFind = false
|
|
isFind = false
|
|
@@ -292,7 +361,7 @@ func (sf *Polygon) addForce() {
|
|
|
strOut = lstLink[1]
|
|
strOut = lstLink[1]
|
|
|
lstLink = strings.Split(strOut, `"><span><span>Получить бесплатно</span></span></a>`)
|
|
lstLink = strings.Split(strOut, `"><span><span>Получить бесплатно</span></span></a>`)
|
|
|
strLink := "https://wartank.ru/" + lstLink[0]
|
|
strLink := "https://wartank.ru/" + lstLink[0]
|
|
|
- if _, err := sf.net.Get(strLink); err != nil {
|
|
|
|
|
|
|
+ if _, err := сам.сеть.Get(strLink); err != nil {
|
|
|
// log._rintf("ERRO NetPolygon.addForce(): in make request force fyne, err=\n\t%v\n", err)
|
|
// log._rintf("ERRO NetPolygon.addForce(): in make request force fyne, err=\n\t%v\n", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
@@ -307,8 +376,8 @@ func (sf *Polygon) addForce() {
|
|
|
// log._rintf("ERRO NetPolygon.addForce(): strForceFyne(%v) not int, err=\n\t%v\n", strForce, err)
|
|
// log._rintf("ERRO NetPolygon.addForce(): strForceFyne(%v) not int, err=\n\t%v\n", strForce, err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
- sf.tankStat.ФорсажОбнов("fyne", iForce)
|
|
|
|
|
- sf.РежимТекущ().Уст("точность")
|
|
|
|
|
|
|
+ сам.танкСтат.ФорсажОбнов("fyne", iForce)
|
|
|
|
|
+ сам.РежимТекущ().Уст("точность")
|
|
|
}
|
|
}
|
|
|
case "hard": // Усиливаем мощность
|
|
case "hard": // Усиливаем мощность
|
|
|
isFind = false
|
|
isFind = false
|
|
@@ -327,7 +396,7 @@ func (sf *Polygon) addForce() {
|
|
|
strOut = lstLink[1]
|
|
strOut = lstLink[1]
|
|
|
lstLink = strings.Split(strOut, `"><span><span>Получить бесплатно</span></span></a>`)
|
|
lstLink = strings.Split(strOut, `"><span><span>Получить бесплатно</span></span></a>`)
|
|
|
strLink := "https://wartank.ru/" + lstLink[0]
|
|
strLink := "https://wartank.ru/" + lstLink[0]
|
|
|
- if _, err := sf.net.Get(strLink); err != nil {
|
|
|
|
|
|
|
+ if _, err := сам.сеть.Get(strLink); err != nil {
|
|
|
// log._rintf("NetPolygon.addForce(): in make request force hard, err=\n\t%v\n", err)
|
|
// log._rintf("NetPolygon.addForce(): in make request force hard, err=\n\t%v\n", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
@@ -342,11 +411,11 @@ func (sf *Polygon) addForce() {
|
|
|
// log._rintf("ERRO NetPolygon.addForce(): strForceHard(%v) not int, err=\n\t%v\n", strForce, err)
|
|
// log._rintf("ERRO NetPolygon.addForce(): strForceHard(%v) not int, err=\n\t%v\n", strForce, err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
- sf.tankStat.ФорсажОбнов("hard", iForce)
|
|
|
|
|
- sf.РежимТекущ().Уст("прочность")
|
|
|
|
|
|
|
+ сам.танкСтат.ФорсажОбнов("hard", iForce)
|
|
|
|
|
+ сам.РежимТекущ().Уст("прочность")
|
|
|
}
|
|
}
|
|
|
default: // Неизвестно что
|
|
default: // Неизвестно что
|
|
|
- sf.РежимТекущ().Уст("неизвестно")
|
|
|
|
|
|
|
+ сам.РежимТекущ().Уст("неизвестно")
|
|
|
// log._rintf("ERRO NetPolygon.addForce(): неизвестно что это, strParam=%q", strParam)
|
|
// log._rintf("ERRO NetPolygon.addForce(): неизвестно что это, strParam=%q", strParam)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|