From dde3c27eb009591404fad83ba8629dd897d47c9a Mon Sep 17 00:00:00 2001 From: Katboi01 Date: Thu, 26 Dec 2024 16:02:30 +0100 Subject: [PATCH] uncommited changes --- app.py | 2 + .../JapariSling/classes/construct_level.py | 7 +++ .../classes/construct_serialized.py | 13 ++++++ modules/JapariSling/database.py | 15 +++++++ modules/JapariSling/endpoints/get.py | 23 ++++++++++ modules/JapariSling/endpoints/upload.py | 29 ++++++++++++ modules/KF3/database.py | 29 +++++++----- modules/KF3/downloader.py | 44 ++++++++++++++++++- run.sh | 2 + update.sh | 2 + 10 files changed, 154 insertions(+), 12 deletions(-) create mode 100644 modules/JapariSling/classes/construct_level.py create mode 100644 modules/JapariSling/classes/construct_serialized.py create mode 100644 modules/JapariSling/database.py create mode 100644 modules/JapariSling/endpoints/get.py create mode 100644 modules/JapariSling/endpoints/upload.py create mode 100644 run.sh create mode 100644 update.sh diff --git a/app.py b/app.py index e1c1010..a575f72 100644 --- a/app.py +++ b/app.py @@ -3,6 +3,7 @@ from flask_restful import Api from modules.KF3.database import Database as KF3DB from modules.Kingdom.database import Database as KFKDB +from modules.JapariSling.database import Database as KFSL app = Flask(__name__) app.config['JSON_AS_ASCII'] = False @@ -12,6 +13,7 @@ api = Api(app) KF3DB(api) KFKDB(api) +KFSL(api) if __name__ == '__main__': app.run(host='127.0.0.1', port=8080, debug=True) \ No newline at end of file diff --git a/modules/JapariSling/classes/construct_level.py b/modules/JapariSling/classes/construct_level.py new file mode 100644 index 0000000..da8b64b --- /dev/null +++ b/modules/JapariSling/classes/construct_level.py @@ -0,0 +1,7 @@ +from typing import List +from .construct_serialized import ConstructSerialized + +class ConstructLevel: + Name : str + Description : str + Objects : List[ConstructSerialized] \ No newline at end of file diff --git a/modules/JapariSling/classes/construct_serialized.py b/modules/JapariSling/classes/construct_serialized.py new file mode 100644 index 0000000..910c432 --- /dev/null +++ b/modules/JapariSling/classes/construct_serialized.py @@ -0,0 +1,13 @@ +class SVector3: + x : float + y : float + z : float + +class ConstructSerialized: + Id : int + Variant : int + Position : SVector3 + Rotation : SVector3 + Width : float + Height : float + Properties : int \ No newline at end of file diff --git a/modules/JapariSling/database.py b/modules/JapariSling/database.py new file mode 100644 index 0000000..9ede6b6 --- /dev/null +++ b/modules/JapariSling/database.py @@ -0,0 +1,15 @@ + +from .endpoints.get import Get +from .endpoints.upload import Upload + +class Database: + + def __init__(self, api) -> None: + app = api.app + if "JapariSling" in app.databases: + del app.databases["JapariSling"] + + app.databases["JapariSling"] = self + + api.add_resource(Upload, "/JapariSling/Upload") + api.add_resource(Get, "/JapariSling/Get") diff --git a/modules/JapariSling/endpoints/get.py b/modules/JapariSling/endpoints/get.py new file mode 100644 index 0000000..4ab36ce --- /dev/null +++ b/modules/JapariSling/endpoints/get.py @@ -0,0 +1,23 @@ +import os +import json +from flask_restful import Resource +from flask import abort, request, current_app as app + +class Get(Resource): + def get(self): + dir_name = os.path.join(app.root_path, 'data', 'JapariSling') + files = [json.loads(read_file(os.path.join(dir_name, f))) for f in os.listdir(dir_name) if os.path.isfile(os.path.join(dir_name, f))] + files = files[:10] + files = {"levels": files} + + response = app.response_class( + response = json.dumps(files), + status=200, + mimetype='application/json' + ) + response.headers.add("Access-Control-Allow-Origin", "*") + return response + +def read_file(path): + with open(path, 'r') as f: + return f.read() diff --git a/modules/JapariSling/endpoints/upload.py b/modules/JapariSling/endpoints/upload.py new file mode 100644 index 0000000..276d4c4 --- /dev/null +++ b/modules/JapariSling/endpoints/upload.py @@ -0,0 +1,29 @@ +import os +import json +from flask_restful import Resource +from ..classes.construct_level import ConstructLevel +from flask import abort, request, current_app as app + +class Upload(Resource): + def post(self): + cl = request.content_length + if cl is not None and cl > 1024: + abort(413) + + content = request.json + + if "Name" not in content: + abort(400) + + filename = os.path.join(app.root_path, 'data', 'JapariSling', content["Name"] + '.json') + + with open(filename, "wt") as text_file: + text_file.write(json.dumps(content, ensure_ascii=False, indent=1)) + + response = app.response_class( + response="level uploaded", + status=200, + mimetype='text/plain' + ) + response.headers.add("Access-Control-Allow-Origin", "*") + return response \ No newline at end of file diff --git a/modules/KF3/database.py b/modules/KF3/database.py index 4411895..ba6ee35 100644 --- a/modules/KF3/database.py +++ b/modules/KF3/database.py @@ -123,7 +123,7 @@ class Database: chara = {} charaData = self.charaData[id] - alphaBase = self.paramAlphaBases[id] + alphaBase = self.paramAlphaBases[id] if id in self.paramAlphaBases else None wrLocked = False promoIds = [] @@ -190,16 +190,23 @@ class Database: else: level_curve = self.limitlevel_rising_status[patternId] if patternId != 0 else None - chara["stats_min"] = get_all_stats(chara, alphaBase, max_level = False, rising_status_pattern=level_curve) - chara["stats_max"] = get_all_stats(chara, alphaBase, max_level = True, rising_status_pattern=level_curve) - chara["plasmPoint"] = alphaBase["plasmPoint"] - chara["cards"] = [ - {"type":alphaBase["orderCardType00"], "value":alphaBase["orderCardValue00"]}, - {"type":alphaBase["orderCardType01"], "value":alphaBase["orderCardValue01"]}, - {"type":alphaBase["orderCardType02"], "value":alphaBase["orderCardValue02"]}, - {"type":alphaBase["orderCardType03"], "value":alphaBase["orderCardValue03"]}, - {"type":alphaBase["orderCardType04"], "value":alphaBase["orderCardValue04"]} - ] + if alphaBase is None: + chara["stats_min"] = {"level" : 0,"status" : 0,"wr" : 0,"hp" : 0,"atk" : 0,"def" : 0,"evd" : 0,"beat" : 0,"act" : 0,"try" : 0} + chara["stats_max"] = {"level" : 0,"status" : 0,"wr" : 0,"hp" : 0,"atk" : 0,"def" : 0,"evd" : 0,"beat" : 0,"act" : 0,"try" : 0} + chara["plasmPoint"] = 0 + chara["cards"] = {0,0,0,0,0} + else: + chara["stats_min"] = get_all_stats(chara, alphaBase, max_level = False, rising_status_pattern=level_curve) + chara["stats_max"] = get_all_stats(chara, alphaBase, max_level = True, rising_status_pattern=level_curve) + chara["plasmPoint"] = alphaBase["plasmPoint"] + chara["cards"] = [ + {"type":alphaBase["orderCardType00"], "value":alphaBase["orderCardValue00"]}, + {"type":alphaBase["orderCardType01"], "value":alphaBase["orderCardValue01"]}, + {"type":alphaBase["orderCardType02"], "value":alphaBase["orderCardValue02"]}, + {"type":alphaBase["orderCardType03"], "value":alphaBase["orderCardValue03"]}, + {"type":alphaBase["orderCardType04"], "value":alphaBase["orderCardValue04"]} + ] + chara["synergy_flag"] = self.paramArts[id]["authParam"]["SynergyFlag"] if id in self.paramArts else 0 chara["arts"] = self.paramArts[id] if id in self.paramArts else None diff --git a/modules/KF3/downloader.py b/modules/KF3/downloader.py index dff781a..1951f65 100644 --- a/modules/KF3/downloader.py +++ b/modules/KF3/downloader.py @@ -82,7 +82,10 @@ async def download_cache(server_name, server : str): file.write(data) with open(file_path_json, "wt", encoding="utf-8") as out_file: data = gzip.decompress(data) - json.dump(json.loads(data), out_file, ensure_ascii=False, indent=1) + data = json.loads(data) + # if key == "GACHA_DATA": + # download_banners(data, server_name) + json.dump(data, out_file, ensure_ascii=False, indent=1) old_mst_ver[key] = new_mst_ver[key] @@ -93,6 +96,36 @@ async def download_cache(server_name, server : str): await session.close() return downloaded_files +async def download_banners(gacha_data, server_name, session): + path = f"/var/www/html/Katworks/KF/assets/KF3/{server_name}/banners/" + os.makedirs(path, exist_ok=True) + + for entry in gacha_data: + banner_name = entry["banner"] + if banner_name == "" or banner_name == None: + continue + banner_name += ".png" + file_path = path + banner_name + if os.path.exists(file_path): + continue + + file_url = "https://parade-mobile-prod-cdn.kemono-friends-3.jp/Texture2D/GachaTop/" + banner_name + file_url_alt = "https://parade-mobile-develop01-app.kemono-friends-3.jp/Texture2D/GachaTop/" + banner_name + + status = 0 + async with session.get(file_url) as resp: + response = await resp.read() + status = resp.status + if status != 200: + async with session.get(file_url_alt) as resp: + response = await resp.read() + status = resp.status + if status != 200: continue + + with open(file_path, "wb") as file: + file.write(response) + + async def download_files(server_name, asset_bundle_url, srv_platform : str): def parse_ab_list(filecontent : str): out = {} @@ -194,6 +227,15 @@ async def convert_files(): print("Conversion failed", f) async def manual(): + + # session = aiohttp.ClientSession() + + # path = f"/var/www/html/Katworks/KF/assets/KF3/{server_name}/cache/" + + # await session.close() + + # return + downloaded_cache = {} downloaded_files = {} diff --git a/run.sh b/run.sh new file mode 100644 index 0000000..7b8f933 --- /dev/null +++ b/run.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +gunicorn --bind 127.0.0.1:8081 --config gunicorn_config.py wsgi:app diff --git a/update.sh b/update.sh new file mode 100644 index 0000000..4b8b86a --- /dev/null +++ b/update.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +python -m modules.KF3.downloader