Browse Source

d04 Доработка конвоя

SVI 2 years ago
parent
commit
a6527c491b
1 changed files with 57 additions and 26 deletions
  1. 57 26
      server/serv_bots/warbot/angar/convoy/convoy.go

+ 57 - 26
server/serv_bots/warbot/angar/convoy/convoy.go

@@ -51,7 +51,7 @@ func НовКонвой(bot types.ИБот) (*Конвой, error) {
 
 
 // Пуск -- запускает конвой в работу
 // Пуск -- запускает конвой в работу
 func (sf *Конвой) Пуск() error {
 func (sf *Конвой) Пуск() error {
-	go sf.run()
+	go sf.пуск()
 	return nil
 	return nil
 }
 }
 
 
@@ -68,7 +68,7 @@ func (sf *Конвой) Слава() types.ИСтатПарам {
 }
 }
 
 
 // обрабатывает конвой
 // обрабатывает конвой
-func (сам *Конвой) run() {
+func (сам *Конвой) пуск() {
 	for {
 	for {
 		select {
 		select {
 		case <-сам.бот.Кнт().Done():
 		case <-сам.бот.Кнт().Done():
@@ -81,12 +81,20 @@ func (сам *Конвой) run() {
 }
 }
 
 
 func (сам *Конвой) атаковать() {
 func (сам *Конвой) атаковать() {
-	сам.updateTime()
-	сам.атакаНачать() // в этом месте только атаковать
-	сам.проверитьМиссияКонвой()
-	сам.проверитьМиссияМастерДозора()
-	сам.проверитьМиссия6фрагов()
-	сам.славаОбновить()
+	if false {
+		сам.обновитьВремя()
+	}
+	for {
+		стрВбой := сам.найтиВбой()
+		if стрВбой == "" {
+			return
+		}
+		сам.атакаНачать() // в этом месте только атаковать
+		сам.проверитьМиссияКонвой()
+		сам.проверитьМиссияМастерДозора()
+		сам.проверитьМиссия6фрагов()
+		сам.славаОбновить()
+	}
 }
 }
 
 
 // Обновляет славу по требованию
 // Обновляет славу по требованию
@@ -119,10 +127,10 @@ func (sf *Конвой) славаОбновить() {
 }
 }
 
 
 // Обновляет оставшееся время конвоя
 // Обновляет оставшееся время конвоя
-func (sf *Конвой) updateTime() {
+func (sf *Конвой) обновитьВремя() {
 	// Время подходит надо обновляться
 	// Время подходит надо обновляться
 	if err := sf.net.UpdateLst(); err != nil {
 	if err := sf.net.UpdateLst(); err != nil {
-		logrus.WithError(err).Error("ConvoyNet.updateTime(): при выполнении GET-команды обновления")
+		logrus.WithError(err).Error("Конвой.обновитьВремя(): при выполнении GET-команды обновления")
 		sf.SetCountDown(20)
 		sf.SetCountDown(20)
 		return
 		return
 	}
 	}
@@ -162,7 +170,7 @@ func (sf *Конвой) updateTime() {
 		lstTime := strings.Split(strLastTime, `До следующего конвоя: `)
 		lstTime := strings.Split(strLastTime, `До следующего конвоя: `)
 		strLastTime = lstTime[1]
 		strLastTime = lstTime[1]
 		if err := sf.ParseCountDown(strLastTime); err != nil {
 		if err := sf.ParseCountDown(strLastTime); err != nil {
-			// log._rintf("WARN Convoy.updateTime(): при установке времени ожидания конвоя(%v)\n\terr=%v\n", strLastTime, err)
+			// log._rintf("WARN Конвой.обновитьВремя(): при установке времени ожидания конвоя(%v)\n\terr=%v\n", strLastTime, err)
 			sf.SetCountDown(10)
 			sf.SetCountDown(10)
 		}
 		}
 	case isMask: // Если маскировка между конвоями
 	case isMask: // Если маскировка между конвоями
@@ -170,23 +178,33 @@ func (sf *Конвой) updateTime() {
 		lstTime := strings.Split(strLastTime, `Полная маскировка через `)
 		lstTime := strings.Split(strLastTime, `Полная маскировка через `)
 		strLastTime = lstTime[1]
 		strLastTime = lstTime[1]
 		if err := sf.ParseCountDown(strLastTime); err != nil {
 		if err := sf.ParseCountDown(strLastTime); err != nil {
-			// log._rintf("ERRO Bank.getAllMode(): при установке времени банка для 1го режима(%v)\n\terr=%v\n", strLastTime, err)
+			// log._rintf("ERRO BКонвой.обновитьВремя(): при установке времени банка для 1го режима(%v)\n\terr=%v\n", strLastTime, err)
 			sf.SetCountDown(10)
 			sf.SetCountDown(10)
 		}
 		}
 	}
 	}
 }
 }
 
 
-// Проводит атаку на конвой
-func (сам *Конвой) атакаНачать() {
-	// Найти контрольную строку
+func (сам *Конвой) найтиВбой() string {
 	var (
 	var (
 		strOut    = ""
 		strOut    = ""
 		lstConvoy = сам.СписПолучить()
 		lstConvoy = сам.СписПолучить()
 		isFind    bool
 		isFind    bool
 	)
 	)
-
+	if сам.бот.Имя() == "prospero tank" {
+		log.Printf("")
+	}
+	if len(lstConvoy) == 0 {
+		ош := сам.net.UpdateLst()
+		if ош != nil {
+			log.Printf("Конвой.атакаНачать(): при обновлении lstConvoy, ош=\n\t%v\n", ош)
+			return ""
+		}
+		lstConvoy = сам.СписПолучить()
+	}
 	for _, strLink := range lstConvoy {
 	for _, strLink := range lstConvoy {
-		if strings.Contains(strLink, `>Начать разведку<`) {
+		если1 := strings.Contains(strLink, `>Начать разведку<`)
+		если2 := strings.Contains(strLink, `<span>В БОЙ!</span>`)
+		if если1 {
 			strOut = strLink
 			strOut = strLink
 			lstLink := strings.Split(strOut, `<div class="bot"><a class="simple-but border" w:id="findEnemy" href="`)
 			lstLink := strings.Split(strOut, `<div class="bot"><a class="simple-but border" w:id="findEnemy" href="`)
 			strOut = lstLink[1]
 			strOut = lstLink[1]
@@ -195,7 +213,7 @@ func (сам *Конвой) атакаНачать() {
 			isFind = true
 			isFind = true
 			break
 			break
 		}
 		}
-		if strings.Contains(strLink, `<span>В БОЙ!</span>`) {
+		if если2 {
 			strOut = strLink
 			strOut = strLink
 			lstLink := strings.Split(strOut, `<div class="bot"><a class="simple-but border" w:id="startMasking" href="`)
 			lstLink := strings.Split(strOut, `<div class="bot"><a class="simple-but border" w:id="startMasking" href="`)
 			if len(lstLink) == 1 {
 			if len(lstLink) == 1 {
@@ -218,38 +236,51 @@ func (сам *Конвой) атакаНачать() {
 		}
 		}
 	}
 	}
 	if !isFind { // Время ожидания
 	if !isFind { // Время ожидания
-		if err := сам.SetCountDown(1); err != nil {
-			panic(fmt.Errorf("ConvoyNet.attackConvoy(): пр установке CountDown, err=\n\t%w", err))
-		}
+		// if err := сам.SetCountDown(1); err != nil {
+		// 	panic(fmt.Errorf("Конвой.атакаНачать(): прb установке CountDown, err=\n\t%w", err))
+		// }
+		return ""
+	}
+	return strOut
+}
+
+// Проводит атаку на конвой
+func (сам *Конвой) атакаНачать() {
+	// Найти контрольную строку
+	strOut := сам.найтиВбой()
+	if strOut == "" { // Время ожидания
+		// if err := сам.SetCountDown(1); err != nil {
+		// 	panic(fmt.Errorf("Конвой.атакаНачать(): прb установке CountDown, err=\n\t%w", err))
+		// }
 		return
 		return
 	}
 	}
 	strLink := strOut
 	strLink := strOut
 	// Можно начать разведку
 	// Можно начать разведку
 	lstConvoy, err := сам.net.Get(strLink)
 	lstConvoy, err := сам.net.Get(strLink)
 	if err != nil {
 	if err != nil {
-		// log._rintf("ERRO ConvoyNet.attackConvoy(): при выполнении GET-команды 'В атаку!', err=\n\t%v\n", err)
+		log.Printf("ERRO Конвой.атакаНачать(): при выполнении GET-команды 'В атаку!', err=\n\t%v\n", err)
 		return
 		return
 	}
 	}
 	if err = сам.СтрОбновить(lstConvoy); err != nil {
 	if err = сам.СтрОбновить(lstConvoy); err != nil {
 		for _, strOut = range lstConvoy {
 		for _, strOut = range lstConvoy {
 			if strings.Contains(strOut, `<title>Ошибка на сервере. Сообщение админу уже отправлено.</title>`) {
 			if strings.Contains(strOut, `<title>Ошибка на сервере. Сообщение админу уже отправлено.</title>`) {
-				// log._rintf("ERRO ConvoyNet.attackConvoy(): при обновлении lstConvoy, strOut=\n\t%v\n", strOut)
+				// log._rintf("ERRO Конвой.атакаНачать(): при обновлении lstConvoy, strOut=\n\t%v\n", strOut)
 				return
 				return
 			}
 			}
 		}
 		}
 		for _, strOut = range lstConvoy {
 		for _, strOut = range lstConvoy {
 			if strings.Contains(strOut, `<title>База</title>`) {
 			if strings.Contains(strOut, `<title>База</title>`) {
-				// log._rintf("ERRO ConvoyNet.attackConvoy(): при обновлении lstConvoy (найдено lstBase), strOut=\n\t%v\n", strOut)
+				// log._rintf("ERRO Конвой.атакаНачать(): при обновлении lstConvoy (найдено lstBase), strOut=\n\t%v\n", strOut)
 				return
 				return
 			}
 			}
 		}
 		}
-		// log._rintf("ERRO ConvoyNet.attackConvoy(): при обновлении lstConvoy, err=\n\t%v\n", err)
+		// log._rintf("ERRO Конвой.атакаНачать(): при обновлении lstConvoy, err=\n\t%v\n", err)
 		return
 		return
 	}
 	}
 	for сам.атакаИскать() {
 	for сам.атакаИскать() {
 	}
 	}
 	if err := сам.SetCountDown(1); err != nil {
 	if err := сам.SetCountDown(1); err != nil {
-		panic(fmt.Errorf("ConvoyNet.attackConvoy(): при установке CountDown, err=\n\t%w", err))
+		panic(fmt.Errorf("Конвой.атакаНачать(): при установке CountDown, err=\n\t%w", err))
 	}
 	}
 }
 }