что-то делал с модами (не доделал)

This commit is contained in:
Евгений Храмов 2023-05-21 21:56:14 +03:00
parent a35018b264
commit 4760700190

79
hlna.py

@ -6,15 +6,18 @@ import zlib
import struct import struct
import logging import logging
import datetime import datetime
import requests
import subprocess import subprocess
import yaml import yaml
import click import click
import colorama import colorama
import hlnaui
from pathlib import Path from pathlib import Path
from rcon.source import Client from rcon.source import Client
from PyQt6.QtWidgets import QApplication, QWidget, QMainWindow, QLabel, QPushButton from PyQt6 import QtWidgets
home_dir = Path.home() home_dir = Path.home()
@ -501,38 +504,75 @@ WantedBy=default.target
@hlna.command(help='Скачивание и установка модов <hlna ark -m all -i 111111111>') @hlna.command(help='Скачивание и установка модов <hlna ark -m all -i 111111111>')
@click.argument('g', nargs=1) @click.argument('g', nargs=1)
@click.option('-m', default='all', help="Название карты для запуска или all для запуска всех карт") @click.option('-m', default='all', help="Название карты для запуска или all для запуска всех карт")
@click.option("-i/-u", default=True, help="-i установить моды, -u удалить моды") @click.option("-i/-u", default=True, help="-i установить/обновить моды, -u удалить моды")
@click.argument('id_mods_ark', nargs=-1) @click.argument('id_mods_ark', nargs=-1)
def mod(g, m, i, id_mods_ark): def mod(g, m, i, id_mods_ark):
if g == "ark": if g == "ark":
id_game_workshop = "346110"
if not os.path.isdir(dir_mods_ark): if not os.path.isdir(dir_mods_ark):
create_dir(dir_mods_ark) create_dir(dir_mods_ark)
id_game_workshop = "346110"
id_mods_ark = id_mods_ark[0].split(',') id_mods_ark = id_mods_ark[0].split(',')
for id_mod in id_mods_ark: for id_mod in id_mods_ark:
dir_ark_mods = f"{dir_mods_ark}/{id_mod}" dir_ark_mods = f"{dir_mods_ark}/{id_mod}"
if not os.path.isfile(f"{dir_ark_mods}.mod"):
if i: if i:
os.system(f"steamcmd +login anonymous +workshop_download_item {id_game_workshop} {id_mod} +quit") moddownload(id_mod, id_game_workshop, dir_ark_mods)
modextract(id_mod, id_game_workshop, dir_ark_mods)
else: else:
os.system(f"rm -rf {dir_ark_mods}") os.system(f"rm -rf {dir_ark_mods}")
print_line(f"{dir_ark_mods} удалён") print_line(f"{dir_ark_mods} удалён")
os.system(f"rm {dir_mods_ark}/{id_mod}.mod") os.system(f"rm {dir_mods_ark}/{id_mod}.mod")
print_line(f"{dir_mods_ark}/{id_mod}.mod удалён") print_line(f"{dir_mods_ark}/{id_mod}.mod удалён")
os.system(f"mv {dir_workshop_ark}/appworkshop_{id_game_workshop}.acf {dir_ark_mods}") os.system(f"mv {dir_workshop_ark}/appworkshop_{id_game_workshop}.acf {dir_ark_mods}/appworkshop_{id_game_workshop}.acf")
else:
modupdate(g, m, id_mod, dir_ark_mods)
def modupdate(dir_ark_mods, id_game_workshop): def modupdate(g, m, id_mod, dir_ark_mods):
if os.path.exists(f"{dir_ark_mods}/appworkshop_{id_game_workshop}.acf"): if g == "ark":
# тут будет проверка необходимости обновления if not os.path.isfile(os.path.join(dir_ark_mods, f"appworkshop_{id_mod}.acf")):
return
with open(os.path.join(dir_ark_mods, f"appworkshop_{id_mod}.acf"), "r") as f:
content = f.readlines()
content = "".join(content)
locale_date = ""
for line in content.split("\n"):
if '\t"WorkshopItemsInstalled"' in line:
for line in content.split("\n"):
if f'\t\t"{id_mod}"' in line:
locale_date = line.split('"')[5]
if '}' in line:
break
break
data = {
'itemcount': 1,
'publishedfileids[0]': id_mod
}
zapros = requests.post('http://api.steampowered.com/ISteamRemoteStorage/GetPublishedFileDetails/v1', data=data)
json_zapros = zapros.json()
steam_date = json_zapros['response']['publishedfiledetails'][0]['time_updated']
if steam_date and locale_date == steam_date:
return
if steam_date and locale_date != steam_date:
print_line("хз")
def modupdateall():
for file in os.listdir(dir_mods_ark):
if os.path.isfile(os.path.join(dir_mods_ark, file)):
if file.endswith('.mod'):
print(file)
def modextract(id_mod, id_game_workshop, dir_ark_mods): def moddownload(id_mod, id_game_workshop, dir_ark_mods):
"""Распаковывает файлы мода и создаёт .mod файл для него""" """Распаковывает файлы мода и создаёт .mod файл для него"""
dir_steam_workshop = f"{dir_workshop_ark}/content/{id_game_workshop}/{id_mod}/WindowsNoEditor" dir_steam_workshop = f"{dir_workshop_ark}/content/{id_game_workshop}/{id_mod}/WindowsNoEditor"
dir_extract = dir_ark_mods dir_extract = dir_ark_mods
if id_mod == "111111111": if id_mod == "111111111":
return return
os.system(f"steamcmd +login anonymous +workshop_download_item {id_game_workshop} {id_mod} +quit")
try: try:
for curdir, subdirs, files in os.walk(os.path.join(dir_steam_workshop)): for curdir, subdirs, files in os.walk(os.path.join(dir_steam_workshop)):
for file in files: for file in files:
@ -860,27 +900,18 @@ create_dir(dir_unit)
create_dir(dir_logs) create_dir(dir_logs)
class MainWindow(QMainWindow): class HlnaApp(QtWidgets.QMainWindow, hlnaui.Ui_MainWindow):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.setupUi(self)
self.setWindowTitle("HLN-A")
button = QPushButton("Выход")
button.setCheckable(True)
button.clicked.connect(self.button_click)
self.setCentralWidget(button)
def button_click(self):
exit()
def hlnag(): def hlnag():
if len(sys.argv) > 1: if len(sys.argv) > 1:
hlna() hlna()
else: else:
app = QApplication(sys.argv) app = QtWidgets.QApplication(sys.argv)
hlnag_gui_window = MainWindow() window = HlnaApp()
hlnag_gui_window.show() window.show()
sys.exit(app.exec()) sys.exit(app.exec())