что-то делал с модами (не доделал)
This commit is contained in:
parent
a35018b264
commit
4760700190
79
hlna.py
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())
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user