Browse Source

d04 Исправление добычи в шахте

SVI 2 năm trước cách đây
mục cha
commit
0436df660f

+ 22 - 18
pakApp/pakGui/pakWinMain/pakFrmBot/modFrmBot.py

@@ -1,32 +1,36 @@
 """Фрейм для обновления статистики бота"""
 
 from typing import Dict, Any
-from tkinter import LabelFrame,Frame, Label, Button
+from tkinter import LabelFrame, Frame, Label, Button
 
 from pakApp.pakGui.pakWinState.modWinState import WinState
 
+
 class FrmBot(Frame):
-    def __init__(self, app:Any, frmListBot:LabelFrame, name:str)->None:
-        Frame.__init__(self, frmListBot, border=3,relief="sunken")
+    """Индикаторный фрейм для бота"""
+    def __init__(self, app: Any, frm_list_bot: LabelFrame, name: str) -> None:
+        Frame.__init__(self, frm_list_bot, border=3, relief="sunken")
         self.pack(fill="x", side="top")
-        self.app=app
-        self.lblState=Label(self)
-        self.lblState.pack(side="left")
-        self.name=name
-        self.btnStat=Button(self, text="Статистика",command=self.show_stat)
-        self.btnStat.pack(side="right")
+        self.app = app
+        self.lbl_state = Label(self)
+        self.lbl_state.pack(side="left")
+        self.name = name
+        self.btn_stat = Button(self, text="Статистика", command=self.show_stat)
+        self.btn_stat.pack(side="right")
 
     def show_stat(self):
+        """Показать полную статистику бота"""
         print(f"FrmBot.show_Stat: name={self.name}")
         WinState(self.app.gui.winMain, self.name)
 
-    def update_state(self, dictBot:Dict[str,str])->None:
-        strAuto:str=dictBot["isAuto"]
-        strIsWork:str=dictBot["isWork"]
-        gold:str=dictBot["gold"]
-        fuel:str=dictBot["fuel"]
-        self.lblState["text"]="["+self.name+"] "+\
-            "[АвтоИгра="+strAuto+"] "+\
-            "[Работа="+strIsWork+"] "+\
-            "[Золото="+gold+"] "+\
+    def update_state(self, dict_bot: Dict[str, str]) -> None:
+        """Обновить блиц-статус бота"""
+        str_auto: str = dict_bot["isAuto"]
+        str_is_work: str = dict_bot["isWork"]
+        gold: str = dict_bot["gold"]
+        fuel: str = dict_bot["fuel"]
+        self.lbl_state["text"] = "["+self.name+"] " +\
+            "[АвтоИгра="+str_auto+"] " +\
+            "[Работа="+str_is_work+"] " +\
+            "[Золото="+gold+"] " +\
             "[Топливо="+fuel+"] "

+ 155 - 78
pakApp/pakGui/pakWinState/modWinState.py

@@ -3,90 +3,167 @@
 from typing import Any
 from tkinter import Toplevel, LabelFrame, Label, Frame, Button
 
-class WinState(Toplevel):
-    def __init__(self, winMain:Any, nameBot:str)->None:
-        Toplevel.__init__(self, master=winMain)
-        self.title("Стаистика бта: "+nameBot)
-        self.geometry("800x600")
-        self.winMain=winMain
-        self.name=nameBot
-
-        self.frmCmd=Frame(self, border=3, relief="sunken")
-        self.frmCmd.pack(side="bottom", fill="x")
-        self.btnClose=Button(self.frmCmd, text="Закрыть", command=self.close)
-        self.btnClose.pack(side="right")
-
-        self.frmResource=LabelFrame(self,text="Ресурсы",border=3, relief="sunken")
-        self.frmResource.pack(side="top",fill="x")
-
-        self.lblAuto=Label(self.frmResource, text="Автоигра: false", border=3, relief="ridge", anchor="w")
-        self.lblAuto.pack(side="top", fill="x")
-
-        self.lblIsWork=Label(self.frmResource, text="В работе: false", border=3, relief="ridge", anchor="w")
-        self.lblIsWork.pack(side="top", fill="x")
-
-        self.lblFuel=Label(self.frmResource, text="Топливо: 0", border=3, relief="ridge", anchor="w")
-        self.lblFuel.pack(side="top", fill="x")
-
-        self.lblSlava=Label(self.frmResource, text="Слава: 0", border=3, relief="ridge", anchor="w")
-        self.lblSlava.pack(side="top", fill="x")
-
-        self.lblSerebro=Label(self.frmResource, text="Серебро: 0", border=3, relief="ridge", anchor="w")
-        self.lblSerebro.pack(side="top", fill="x")
-
-        self.lblZoloto=Label(self.frmResource, text="Золото: 0", border=3, relief="ridge", anchor="w")
-        self.lblZoloto.pack(side="top", fill="x")
 
-        self.lblLevel=Label(self.frmResource, text="Уровень: 0", border=3, relief="ridge", anchor="w")
-        self.lblLevel.pack(side="top", fill="x")
-
-        self.lblProgress=Label(self.frmResource, text="Прогресс: 0", border=3, relief="ridge", anchor="w")
-        self.lblProgress.pack(side="top", fill="x")
-
-        self.frmTank=LabelFrame(self, text="Танк", border=3, relief="sunken")
-        self.frmTank.pack(side="top",fill="x")
-
-        self.lblAtaka=Label(self.frmTank, text="Атака: 0", border=3, relief="ridge", anchor="w")
-        self.lblAtaka.pack(side="top", fill="x")
-
-        self.lblBrona=Label(self.frmTank, text="Броня: 0", border=3, relief="ridge", anchor="w")
-        self.lblBrona.pack(side="top", fill="x")
-
-        self.лблТочность=Label(self.frmTank, text="Точность: 0", border=3, relief="ridge", anchor="w")
-        self.лблТочность.pack(side="top", fill="x")
-
-        self.лблПрочность=Label(self.frmTank, text="Прочность: 0", border=3, relief="ridge", anchor="w")
-        self.лблПрочность.pack(side="top", fill="x")
-
-        self.лблМощь=Label(self.frmTank, text="Танковая мощь: 0", border=3, relief="ridge", anchor="w")
-        self.лблМощь.pack(side="top", fill="x")
-
-        self.фрмБаза=LabelFrame(self, text="База", border=3, relief="sunken")
-        self.фрмБаза.pack(side="top",fill="x")
+class WinState(Toplevel):
+    """Окно состояния бота"""
 
-        self.лблШахта=Label(self.фрмБаза, text="Шахта: 0", border=3, relief="ridge", anchor="w")
-        self.лблШахта.pack(side="top", fill="x")
+    def __init__(self, win_main: Any, name_bot: str) -> None:
+        Toplevel.__init__(self, master=win_main)
+        self.title("Стаистика бта: "+name_bot)
+        self.geometry("800x600")
+        self.win_main = win_main
+        self.name = name_bot
+        if True:  # Кнопки команд
+            self.frm_cmd = Frame(self, border=3, relief="sunken")
+            self.frm_cmd.pack(side="bottom", fill="x")
+            self.btn_close = Button(self.frm_cmd,
+                                    text="Закрыть",
+                                    command=self.close)
+            self.btn_close.pack(side="right")
+        if True:  # Ресурсы танка
+            self.frm_resource = LabelFrame(self,
+                                           text="Ресурсы",
+                                           border=3,
+                                           relief="sunken")
+            self.frm_resource.pack(side="top", fill="x")
+
+            self.lbl_auto = Label(self.frm_resource,
+                                  text="Автоигра: false",
+                                  border=3,
+                                  relief="ridge",
+                                  anchor="w")
+            self.lbl_auto.pack(side="top", fill="x")
+
+            self.lbl_is_work = Label(self.frm_resource,
+                                     text="В работе: false",
+                                     border=3,
+                                     relief="ridge",
+                                     anchor="w")
+            self.lbl_is_work.pack(side="top", fill="x")
+
+            self.lbl_toplivo = Label(self.frm_resource,
+                                     text="Топливо: 0",
+                                     border=3,
+                                     relief="ridge",
+                                     anchor="w")
+            self.lbl_toplivo.pack(side="top", fill="x")
+
+            self.lbl_slava = Label(self.frm_resource,
+                                   text="Слава: 0",
+                                   border=3,
+                                   relief="ridge",
+                                   anchor="w")
+            self.lbl_slava.pack(side="top", fill="x")
+
+            self.lbl_serebro = Label(self.frm_resource,
+                                     text="Серебро: 0",
+                                     border=3,
+                                     relief="ridge",
+                                     anchor="w")
+            self.lbl_serebro.pack(side="top", fill="x")
+
+            self.lbl_zoloto = Label(self.frm_resource,
+                                    text="Золото: 0",
+                                    border=3,
+                                    relief="ridge",
+                                    anchor="w")
+            self.lbl_zoloto.pack(side="top", fill="x")
+
+            self.lbl_level = Label(self.frm_resource,
+                                   text="Уровень: 0",
+                                   border=3,
+                                   relief="ridge",
+                                   anchor="w")
+            self.lbl_level.pack(side="top", fill="x")
+
+            self.lbl_progress = Label(self.frm_resource,
+                                      text="Прогресс: 0",
+                                      border=3,
+                                      relief="ridge",
+                                      anchor="w")
+            self.lbl_progress.pack(side="top", fill="x")
+        if True:  # Статистика танка
+            self.frm_tank = LabelFrame(self,
+                                       text="Танк",
+                                       border=3,
+                                       relief="sunken")
+            self.frm_tank.pack(side="top", fill="x")
+            self.frm_tank_stat = LabelFrame(self.frm_tank,
+                                            text="Параметры",
+                                            border=3,
+                                            relief="sunken")
+            self.frm_tank_stat.pack(side="left")
+
+            self.lbl_ataka = Label(self.frm_tank_stat,
+                                   text="Атака: 0",
+                                   border=3,
+                                   relief="ridge",
+                                   anchor="w")
+            self.lbl_ataka.pack(side="top", fill="x")
+
+            self.lbl_brona = Label(self.frm_tank_stat,
+                                   text="Броня: 0",
+                                   border=3,
+                                   relief="ridge",
+                                   anchor="w")
+            self.lbl_brona.pack(side="top", fill="x")
+
+            self.lbl_tochnost = Label(self.frm_tank_stat,
+                                      text="Точность: 0",
+                                      border=3,
+                                      relief="ridge",
+                                      anchor="w")
+            self.lbl_tochnost.pack(side="top", fill="x")
+
+            self.lbl_prochnost = Label(self.frm_tank_stat,
+                                       text="Прочность: 0",
+                                       border=3,
+                                       relief="ridge",
+                                       anchor="w")
+            self.lbl_prochnost.pack(side="top", fill="x")
+
+            self.lbl_mosh = Label(self.frm_tank_stat,
+                                  text="Танковая мощь: 0",
+                                  border=3,
+                                  relief="ridge",
+                                  anchor="w")
+            self.lbl_mosh.pack(side="top", fill="x")
+
+        self.frm_basa = LabelFrame(self,
+                                   text="База",
+                                   border=3,
+                                   relief="sunken")
+        self.frm_basa.pack(side="top", fill="x")
+
+        self.lbl_shahta = Label(self.frm_basa,
+                                text="Шахта: 0",
+                                border=3,
+                                relief="ridge",
+                                anchor="w")
+        self.lbl_shahta.pack(side="top", fill="x")
 
         self.auto_update()
 
     def auto_update(self):
+        """Само-обновление окна"""
         self.after(5000, self.auto_update)
-        app=self.winMain.app
-        res=app.logic.get_stat_bot(self.name)
-        self.lblAuto["text"]="АвтоИгра: "+ res["isAuto"]
-        self.lblIsWork["text"]="В работе: "+ res["isWork"]
-        self.lblFuel["text"]="Топливо: "+ res["топливо"]
-        self.lblSlava["text"]="Слава: "+ res["слава"]
-        self.lblSerebro["text"]="Серебро: "+ res["серебро"]
-        self.lblZoloto["text"]="Золото: "+ res["золото"]
-        self.lblLevel["text"]="Уровень: "+ res["уровень"]
-        self.lblProgress["text"]="Прогресс: "+ res["прогресс"]
-        self.lblAtaka["text"]="Атака: "+ res["атака"]
-        self.lblBrona["text"]="Броня: "+ res["броня"]
-        self.лблТочность["text"]="Точность: "+ res["точность"]
-        self.лблПрочность["text"]="Прочность: "+ res["прочность"]
-        self.лблМощь["text"]="Танковая мощь: "+ res["мощь"]
-        self.лблШахта["text"]="Шахта: уровень="+ res["шахта_уровень"]
+        app = self.win_main.app
+        res = app.logic.get_stat_bot(self.name)
+        self.lbl_auto["text"] = "АвтоИгра: " + res["isAuto"]
+        self.lbl_is_work["text"] = "В работе: " + res["isWork"]
+        self.lbl_toplivo["text"] = "Топливо: " + res["топливо"]
+        self.lbl_slava["text"] = "Слава: " + res["слава"]
+        self.lbl_serebro["text"] = "Серебро: " + res["серебро"]
+        self.lbl_zoloto["text"] = "Золото: " + res["золото"]
+        self.lbl_level["text"] = "Уровень: " + res["уровень"]
+        self.lbl_progress["text"] = "Прогресс: " + res["прогресс"]
+        self.lbl_ataka["text"] = "Атака: " + res["атака"]
+        self.lbl_brona["text"] = "Броня: " + res["броня"]
+        self.lbl_tochnost["text"] = "Точность: " + res["точность"]
+        self.lbl_prochnost["text"] = "Прочность: " + res["прочность"]
+        self.lbl_mosh["text"] = "Танковая мощь: " + res["мощь"]
+        self.lbl_shahta["text"] = "Шахта: уровень=" + res["шахта_уровень"]
 
     def close(self):
-        self.destroy()
+        """Закрывает окно по требованию"""
+        self.destroy()

+ 22 - 18
pakApp/pakLogic/modLogic.py

@@ -1,41 +1,45 @@
 """Содержит всю логику работы с ботами"""
 
 from typing import Any
-import requests
 import json
+import requests
 
 
 class Logic():
-    def __init__(self, app:Any)->None:
-        self.app=app
-        self.port="18061"# Для прода -- 18060
+    """Логика монитора"""
+    def __init__(self, app: Any) -> None:
+        self.app = app
+        self.port = "18061"  # Для прода -- 18060
         if app.isProd:
-            self.port="18060"
+            self.port = "18060"
 
-    def add_new_bot(self, login:str, _pass:str)->None:
+    def add_new_bot(self, login: str, _pass: str) -> None:
         """Добавляет нового бота на бото ферму"""
-        data:dict[str,str]={
-            "login":login,
-            "pass":_pass,
-            "is_auto":"true",
+        data: dict[str, str] = {
+            "login": login,
+            "pass": _pass,
+            "is_auto": "true",
         }
-        res=requests.post("http://localhost:"+self.port+"/list_bot/add", data=data)
+        res = requests.post("http://localhost:"+self.port +
+                            "/list_bot/add", data=data, timeout=2.0)
         print(f"Logic.add_new_bot(): result={res}")
         self.app.gui.winMain.update_list_bot()
 
     def get_list_bot(self):
         """Возвращает список ботов"""
-        res=requests.get("http://localhost:"+self.port+"/list_bot/get")
+        res = requests.get("http://localhost:"+self.port+"/list_bot/get",
+                           timeout=2.0)
         print(f"Logic.add_new_bot(): result={res.text}")
-        content=json.loads(res.content)
+        content = json.loads(res.content)
         return content
 
-    def get_stat_bot(self, name:str):
+    def get_stat_bot(self, name: str):
         """Возвращает статистику бота"""
-        data={
-            "name":name,
+        data = {
+            "name": name,
         }
-        res=requests.post("http://localhost:"+self.port+"/bot/stat", data=data)
+        res = requests.post("http://localhost:" +
+                            self.port+"/bot/stat", data=data, timeout=2.0)
         print(f"Logic.get_stat_bot(): result={res.text}")
-        content=json.loads(res.content)
+        content = json.loads(res.content)
         return content

+ 9 - 12
server/serv_bots/warbot/angar/base/mine/mine.go

@@ -139,14 +139,10 @@ func (сам *Шахта) Уровень() types.ИСтатПарам {
 
 // Обновляет текущий уровень шахты (может быть не построена)
 func (сам *Шахта) уровеньОбновить() bool {
-	списСтр := сам.СписПолучить()
-	if len(списСтр) == 0 {
-		var ош error
-		списСтр, ош = сам.сеть.Клиент().Get("http://wartank.ru/buildings")
-		if ош != nil {
-			log.Printf("Шахта.уровеньОбновить(): in make request, err=\n\t%v\n", ош)
-			return false
-		}
+	списСтр, ош := сам.сеть.Клиент().Get("http://wartank.ru/buildings")
+	if ош != nil {
+		log.Printf("Шахта.уровеньОбновить(): in make request, err=\n\t%v\n", ош)
+		return false
 	}
 	// <span class="green2">Шахта - 0</span><br/>
 	var (
@@ -372,10 +368,11 @@ func (сам *Шахта) рудаСделать() {
 	if !strings.Contains(strLink, `>Начать производство<`) {
 		return
 	}
-	lstLink := strings.Split(strLink, `<a class="simple-but border" href="`)
-	strLink = lstLink[1]
-	lstLink = strings.Split(strLink, `"><span><span>Начать производство</span></span></a>`)
-	strLink = "https://wartank.ru/production/" + lstLink[0]
+	// "Mine?16-1.ILinkListener-productions-0-production-startProduceLink\"><span><span>Начать производство</span></span></a>"
+	// "<a class=\"simple-but border\" href=\"Mine?16-1.ILinkListener-productions-0-production-startProduceLink\"><span><span>Начать производство</span></span></a>"
+	_link := strings.TrimPrefix(strLink, `<a class="simple-but border" href="`)
+	_link = strings.TrimSuffix(_link, "\"><span><span>Начать производство</span></span></a>")
+	strLink = "https://wartank.ru/production/" + _link
 	lstMine, err := сам.сеть.Get(strLink)
 	if err != nil {
 		// log._rintf("ERRO Шахта.сделатьРуду(): при GET-команде 'начать производство руды', err=\n\t%v\n", err)