|
|
@@ -5,7 +5,7 @@ import (
|
|
|
"fmt"
|
|
|
|
|
|
// "log"
|
|
|
- "strconv"
|
|
|
+ // "strconv"
|
|
|
"strings"
|
|
|
"time"
|
|
|
|
|
|
@@ -32,9 +32,9 @@ type Health struct {
|
|
|
isEnd *safe_bool.БезопБул // Ссылка на признак конца сражения
|
|
|
login string // Для поиска контрольных строк
|
|
|
chTick chan int // Канал для ровной отправки тиков
|
|
|
- deltaOld int // Старая дельта потери здоровья
|
|
|
- countLow int
|
|
|
- ctxBattle context.Context // Конекст сражения
|
|
|
+ // deltaOld int // Старая дельта потери здоровья
|
|
|
+ // countLow int
|
|
|
+ ctxBattle context.Context // Конекст сражения
|
|
|
}
|
|
|
|
|
|
// NewHealth -- возвращает новый *Health
|
|
|
@@ -108,9 +108,9 @@ func (сам *Health) run() {
|
|
|
сам.isEnd.Уст()
|
|
|
return
|
|
|
case <-сам.chTick:
|
|
|
- if err := сам.findHealth(); err != nil { // Найти свой здоровье
|
|
|
- // log._rintf("ERRO Health.run(): при попытке найти здоровье, err=\n\t%v\n", err)
|
|
|
- }
|
|
|
+ // if err := сам.findHealth(); err != nil { // Найти свой здоровье
|
|
|
+ // // log._rintf("ERRO Health.run(): при попытке найти здоровье, err=\n\t%v\n", err)
|
|
|
+ // }
|
|
|
сам.findRepairTime()
|
|
|
if сам.ВыстрелБлок().Получ() {
|
|
|
if сам.isRepair.Получ() {
|
|
|
@@ -155,9 +155,9 @@ func (сам *Health) findRepairTime() {
|
|
|
if сам.repairTime.IsReady() {
|
|
|
return
|
|
|
}
|
|
|
- if сам.repairTime.IsChange() {
|
|
|
- // log._rintf("INFO Health.findRepair(): до ремки=%v\n", сам.repairTime.Get())
|
|
|
- }
|
|
|
+ // if сам.repairTime.IsChange() {
|
|
|
+ // log._rintf("INFO Health.findRepair(): до ремки=%v\n", сам.repairTime.Get())
|
|
|
+ // }
|
|
|
}()
|
|
|
if сам.repairTime.IsReady() {
|
|
|
return
|
|
|
@@ -191,12 +191,12 @@ func (сам *Health) findRepairTime() {
|
|
|
сам.CancelBattle()
|
|
|
return
|
|
|
}
|
|
|
- strTime := lstTime[1]
|
|
|
- lstTime = strings.Split(strTime, ` секунд</span></span></a>`)
|
|
|
- strTime = lstTime[0]
|
|
|
- if err := сам.repairTime.Set(strTime); err != nil {
|
|
|
- // log._rintf("ERRO Health.findRepair(): при установке времени восстановления ремки, err=\n\t%v\n", err)
|
|
|
- }
|
|
|
+ // strTime := lstTime[1]
|
|
|
+ // lstTime = strings.Split(strTime, ` секунд</span></span></a>`)
|
|
|
+ // strTime = lstTime[0]
|
|
|
+ // if err := сам.repairTime.Set(strTime); err != nil {
|
|
|
+ // log._rintf("ERRO Health.findRepair(): при установке времени восстановления ремки, err=\n\t%v\n", err)
|
|
|
+ // }
|
|
|
}
|
|
|
|
|
|
// Восстановливает здоровье (~)
|
|
|
@@ -242,117 +242,117 @@ func (сам *Health) repair() {
|
|
|
}
|
|
|
|
|
|
// Ищет своё здоровье (~)
|
|
|
-func (сам *Health) findHealth() error {
|
|
|
- var (
|
|
|
- ind int
|
|
|
- strOut string
|
|
|
- еслиНайдено bool
|
|
|
- lstBattle = сам.СписПолучить()
|
|
|
- )
|
|
|
- if len(lstBattle) == 0 { // Принудительно обновим сражение
|
|
|
- if err := сам.Сеть().Обновить(); err != nil {
|
|
|
- сам.isEnd.Уст()
|
|
|
- сам.fnCancel()
|
|
|
- return fmt.Errorf("Health.findHealth(): после принудительного обновления lsBattleOn, err=\n\t%w", err)
|
|
|
- }
|
|
|
- }
|
|
|
- for ind, strOut = range lstBattle {
|
|
|
- if strings.Contains(strOut, `alt="`+сам.login+`"`) {
|
|
|
- еслиНайдено = true
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if !еслиНайдено { // Свой танк не найден
|
|
|
- сам.isEnd.Уст()
|
|
|
- сам.fnCancel()
|
|
|
- return fmt.Errorf("Health.findHealth(): своё здоровье не найдено")
|
|
|
- }
|
|
|
- // Свой танк найден, ищем здоровье
|
|
|
- ind += 11
|
|
|
- strOut = lstBattle[ind]
|
|
|
- lstHealth := strings.Split(strOut, `<div class="value-block lh1"><span><span>`)
|
|
|
- strHealth := lstHealth[1]
|
|
|
- lstHealth = strings.Split(strHealth, `</span></span></div>`)
|
|
|
- strHealth = lstHealth[0]
|
|
|
- iHealth, err := strconv.Atoi(strHealth)
|
|
|
- if err != nil {
|
|
|
- сам.isEnd.Уст()
|
|
|
- сам.CancelBattle()
|
|
|
- return fmt.Errorf("Health.findHealth(): здоровье(%v) не число, err=%w", strHealth, err)
|
|
|
- }
|
|
|
- сам.setHealth(iHealth)
|
|
|
- return nil
|
|
|
-}
|
|
|
+// func (сам *Health) findHealth() error {
|
|
|
+// var (
|
|
|
+// ind int
|
|
|
+// strOut string
|
|
|
+// еслиНайдено bool
|
|
|
+// lstBattle = сам.СписПолучить()
|
|
|
+// )
|
|
|
+// if len(lstBattle) == 0 { // Принудительно обновим сражение
|
|
|
+// if err := сам.Сеть().Обновить(); err != nil {
|
|
|
+// сам.isEnd.Уст()
|
|
|
+// сам.fnCancel()
|
|
|
+// return fmt.Errorf("Health.findHealth(): после принудительного обновления lsBattleOn, err=\n\t%w", err)
|
|
|
+// }
|
|
|
+// }
|
|
|
+// for ind, strOut = range lstBattle {
|
|
|
+// if strings.Contains(strOut, `alt="`+сам.login+`"`) {
|
|
|
+// еслиНайдено = true
|
|
|
+// break
|
|
|
+// }
|
|
|
+// }
|
|
|
+// if !еслиНайдено { // Свой танк не найден
|
|
|
+// сам.isEnd.Уст()
|
|
|
+// сам.fnCancel()
|
|
|
+// return fmt.Errorf("Health.findHealth(): своё здоровье не найдено")
|
|
|
+// }
|
|
|
+// // Свой танк найден, ищем здоровье
|
|
|
+// ind += 11
|
|
|
+// strOut = lstBattle[ind]
|
|
|
+// lstHealth := strings.Split(strOut, `<div class="value-block lh1"><span><span>`)
|
|
|
+// strHealth := lstHealth[1]
|
|
|
+// lstHealth = strings.Split(strHealth, `</span></span></div>`)
|
|
|
+// strHealth = lstHealth[0]
|
|
|
+// iHealth, err := strconv.Atoi(strHealth)
|
|
|
+// if err != nil {
|
|
|
+// сам.isEnd.Уст()
|
|
|
+// сам.CancelBattle()
|
|
|
+// return fmt.Errorf("Health.findHealth(): здоровье(%v) не число, err=%w", strHealth, err)
|
|
|
+// }
|
|
|
+// сам.setHealth(iHealth)
|
|
|
+// return nil
|
|
|
+// }
|
|
|
|
|
|
// setHealth -- устанавливает текущее здоровье
|
|
|
-func (сам *Health) setHealth(val int) {
|
|
|
- if val < 0 {
|
|
|
- // log._rintf("WARN Health.setHealth(): кривое значение здоровья танка(%v)\n", val)
|
|
|
- val = 0
|
|
|
- }
|
|
|
+// func (сам *Health) setHealth(val int) {
|
|
|
+// if val < 0 {
|
|
|
+// // log._rintf("WARN Health.setHealth(): кривое значение здоровья танка(%v)\n", val)
|
|
|
+// val = 0
|
|
|
+// }
|
|
|
|
|
|
- if val > сам.full.Get() {
|
|
|
- // log._rintf("WARN Health.setHealth(): кривое текущее здоровье, %v/%v\n", val, сам.full.Get())
|
|
|
- сам.full.Set(val)
|
|
|
- сам.temp.Set(val)
|
|
|
- сам.deltaOld = 0
|
|
|
- сам.ВыстрелБлок().Сброс()
|
|
|
- сам.isRepair.Сброс()
|
|
|
- return
|
|
|
- }
|
|
|
+// if val > сам.full.Get() {
|
|
|
+// // log._rintf("WARN Health.setHealth(): кривое текущее здоровье, %v/%v\n", val, сам.full.Get())
|
|
|
+// сам.full.Set(val)
|
|
|
+// сам.temp.Set(val)
|
|
|
+// // сам.deltaOld = 0
|
|
|
+// сам.ВыстрелБлок().Сброс()
|
|
|
+// сам.isRepair.Сброс()
|
|
|
+// return
|
|
|
+// }
|
|
|
|
|
|
- delta := сам.temp.Get() - val
|
|
|
- if delta > 0 { // Дельта будет больше нуля, если только
|
|
|
- if delta != сам.deltaOld {
|
|
|
- // log._rintf("INFO Health.setHealth(): потеря здоровья=%v/%v\n", -delta, val)
|
|
|
- сам.deltaOld = delta
|
|
|
- сам.temp.Set(val)
|
|
|
- }
|
|
|
- }
|
|
|
+// delta := сам.temp.Get() - val
|
|
|
+// // if delta > 0 { // Дельта будет больше нуля, если только
|
|
|
+// // if delta != сам.deltaOld {
|
|
|
+// // // log._rintf("INFO Health.setHealth(): потеря здоровья=%v/%v\n", -delta, val)
|
|
|
+// // сам.deltaOld = delta
|
|
|
+// // сам.temp.Set(val)
|
|
|
+// // }
|
|
|
+// // }
|
|
|
|
|
|
- switch {
|
|
|
- case сам.isEnd.Получ():
|
|
|
- сам.temp.Set(0)
|
|
|
- сам.isEnd.Уст()
|
|
|
- сам.CancelBattle()
|
|
|
- return
|
|
|
- case val == 0:
|
|
|
- сам.temp.Set(0)
|
|
|
- сам.isEnd.Уст()
|
|
|
- сам.CancelBattle()
|
|
|
- return
|
|
|
- case val <= 500: // Запретить стрельбу
|
|
|
- сам.ВыстрелБлок().Уст() // Установить запрет стрельбы пока слабое здоровье
|
|
|
- сам.isRepair.Уст()
|
|
|
- // log._rintf("WARN Health.setHealth(): низкий уровень здоровья(%v)\n", val)
|
|
|
- сам.Манёвр()
|
|
|
- case val > 500: // Разрешить стрельбы
|
|
|
- сам.ВыстрелБлок().Сброс()
|
|
|
- сам.isRepair.Сброс()
|
|
|
- if delta > сам.full.Get()*4/10 { // Проверить на критичность падения здоровья на 40%
|
|
|
- // log._rintf("WARN Health.setHealth(): большая разовая потеря здоровья(%v)\n", delta)
|
|
|
- сам.Манёвр()
|
|
|
- сам.isRepair.Уст()
|
|
|
- return
|
|
|
- }
|
|
|
- }
|
|
|
+// switch {
|
|
|
+// case сам.isEnd.Получ():
|
|
|
+// сам.temp.Set(0)
|
|
|
+// сам.isEnd.Уст()
|
|
|
+// сам.CancelBattle()
|
|
|
+// return
|
|
|
+// case val == 0:
|
|
|
+// сам.temp.Set(0)
|
|
|
+// сам.isEnd.Уст()
|
|
|
+// сам.CancelBattle()
|
|
|
+// return
|
|
|
+// case val <= 500: // Запретить стрельбу
|
|
|
+// сам.ВыстрелБлок().Уст() // Установить запрет стрельбы пока слабое здоровье
|
|
|
+// сам.isRepair.Уст()
|
|
|
+// // log._rintf("WARN Health.setHealth(): низкий уровень здоровья(%v)\n", val)
|
|
|
+// сам.Манёвр()
|
|
|
+// case val > 500: // Разрешить стрельбы
|
|
|
+// сам.ВыстрелБлок().Сброс()
|
|
|
+// сам.isRepair.Сброс()
|
|
|
+// if delta > сам.full.Get()*4/10 { // Проверить на критичность падения здоровья на 40%
|
|
|
+// // log._rintf("WARN Health.setHealth(): большая разовая потеря здоровья(%v)\n", delta)
|
|
|
+// сам.Манёвр()
|
|
|
+// сам.isRepair.Уст()
|
|
|
+// return
|
|
|
+// }
|
|
|
+// }
|
|
|
|
|
|
- isMask := сам.ВыстрелБлок().Получ()
|
|
|
- switch isMask {
|
|
|
- case true:
|
|
|
- сам.countLow++
|
|
|
- if сам.countLow >= 200 {
|
|
|
- сам.isEnd.Уст()
|
|
|
- сам.CancelBattle()
|
|
|
- return
|
|
|
- }
|
|
|
- default:
|
|
|
- сам.countLow = 0
|
|
|
- }
|
|
|
- if val == сам.full.Get() {
|
|
|
- сам.temp.Set(val)
|
|
|
- сам.isRepair.Сброс()
|
|
|
- сам.ВыстрелБлок().Сброс()
|
|
|
- сам.countLow = 0
|
|
|
- }
|
|
|
-}
|
|
|
+// isMask := сам.ВыстрелБлок().Получ()
|
|
|
+// switch isMask {
|
|
|
+// case true:
|
|
|
+// // сам.countLow++
|
|
|
+// // if сам.countLow >= 200 {
|
|
|
+// // сам.isEnd.Уст()
|
|
|
+// // сам.CancelBattle()
|
|
|
+// // return
|
|
|
+// // }
|
|
|
+// default:
|
|
|
+// // сам.countLow = 0
|
|
|
+// }
|
|
|
+// if val == сам.full.Get() {
|
|
|
+// сам.temp.Set(val)
|
|
|
+// сам.isRepair.Сброс()
|
|
|
+// сам.ВыстрелБлок().Сброс()
|
|
|
+// // сам.countLow = 0
|
|
|
+// }
|
|
|
+// }
|