From d3ed9eba653b2b43695b69ff1aa84805415efe56 Mon Sep 17 00:00:00 2001 From: Naruse <71993948+DevilProMT@users.noreply.github.com> Date: Mon, 11 Nov 2024 10:52:08 +0800 Subject: [PATCH] feat: Add Memorial Arena --- Battle.json | 14 ++++ Endless.json | 6 -- README.md | 12 +++- .../packet/handlers/ExBossStageBeginReq.py | 11 ++++ .../packet/handlers/ExBossStageEndReq.py | 13 ++++ .../packet/handlers/GetExBossInfoReq.py | 17 +++-- .../packet/handlers/GetExBossRankReq.py | 32 +++++++++ .../packet/handlers/GetExBossScheduleReq.py | 9 ++- .../packet/handlers/GetGodWarLobbyReq.py | 10 +++ .../packet/handlers/GodWarEventNotify.py | 66 +++++++++++++++++++ .../packet/handlers/TriggerGodWarEventReq.py | 17 +++++ .../handlers/UltraEndlessGetMainDataReq.py | 11 ++-- 12 files changed, 194 insertions(+), 24 deletions(-) create mode 100644 Battle.json delete mode 100644 Endless.json create mode 100644 game_server/packet/handlers/ExBossStageBeginReq.py create mode 100644 game_server/packet/handlers/ExBossStageEndReq.py create mode 100644 game_server/packet/handlers/GetExBossRankReq.py create mode 100644 game_server/packet/handlers/GetGodWarLobbyReq.py create mode 100644 game_server/packet/handlers/GodWarEventNotify.py create mode 100644 game_server/packet/handlers/TriggerGodWarEventReq.py diff --git a/Battle.json b/Battle.json new file mode 100644 index 0000000..05e8814 --- /dev/null +++ b/Battle.json @@ -0,0 +1,14 @@ +{ + "endless": + { + "area1":791005, + "grouplevel":8, + "dynamic":510, + "cupnum":1800 + }, + "memo": + { + "boss_ids": [51021,15026,18225] + } + +} \ No newline at end of file diff --git a/Endless.json b/Endless.json deleted file mode 100644 index e40636f..0000000 --- a/Endless.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "area1":791005, - "grouplevel":8, - "dynamic":510, - "cupnum":1600 -} \ No newline at end of file diff --git a/README.md b/README.md index 6fa1465..2778020 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ A Server emulator for version 7.9 of a certain adventure anime game - Universial Mirage - Story Chapter 1 - 42 - Character Tutorial +- Memorial Arena ## Requirements @@ -55,10 +56,15 @@ To run the project use cmd or vscode and run ```python py hi3 ``` +## Changing Stage in Abyss/Memorial Using JSON -## Change Stage Superstring Dimension (Abyss) +- **Superstring Dimension (Abyss)** -edit `Endless.json` and set area1 to desire `SiteID` from `UltraEndlessSite.json` + Open the `Battle.json` file and update `area1` to the preferred `SiteID` from `UltraEndlessSite.json`. + +- **Memorial Arena** + + Open the `Battle.json` file and update the `boss_ids` as needed. You can find `boss_id` values in the `BossIdList` within `ExBossMonsterSchedule.json`. ## Use Local Patch Assets @@ -72,7 +78,7 @@ Join [Discord](https://discord.gg/MdHC4AJvec) for support - Commands -- Memorial Arena +- ~~Memorial Arena~~ - Elysian Realm diff --git a/game_server/packet/handlers/ExBossStageBeginReq.py b/game_server/packet/handlers/ExBossStageBeginReq.py new file mode 100644 index 0000000..2010ff5 --- /dev/null +++ b/game_server/packet/handlers/ExBossStageBeginReq.py @@ -0,0 +1,11 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + ExBossStageBeginReq, + ExBossStageBeginRsp +) + +async def handle(session: Session, msg: ExBossStageBeginReq) -> betterproto.Message: + return ExBossStageBeginRsp( + retcode=0 + ) diff --git a/game_server/packet/handlers/ExBossStageEndReq.py b/game_server/packet/handlers/ExBossStageEndReq.py new file mode 100644 index 0000000..63ca2d3 --- /dev/null +++ b/game_server/packet/handlers/ExBossStageEndReq.py @@ -0,0 +1,13 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + ExBossStageEndReq, + ExBossStageEndRsp +) + +async def handle(session: Session, msg: ExBossStageEndReq) -> betterproto.Message: + return ExBossStageEndRsp( + retcode=0, + boss_id=msg.boss_id, + end_status=msg.end_status + ) diff --git a/game_server/packet/handlers/GetExBossInfoReq.py b/game_server/packet/handlers/GetExBossInfoReq.py index 7e4d9af..6a248c2 100644 --- a/game_server/packet/handlers/GetExBossInfoReq.py +++ b/game_server/packet/handlers/GetExBossInfoReq.py @@ -1,4 +1,5 @@ import betterproto +import json from game_server.net.session import Session from lib.proto import ( GetExBossInfoReq, @@ -8,22 +9,20 @@ from lib.proto import ( ) async def handle(session: Session, msg: GetExBossInfoReq) -> betterproto.Message: + with open("Battle.json", "r") as file: + data = json.load(file) return GetExBossInfoRsp( retcode=0, boss_info=ExBossInfo( boss_id_list=[ ExBossIdInfo( - boss_id=48016 - ), - ExBossIdInfo( - boss_id=41021 - ), - ExBossIdInfo( - boss_id=13021 + boss_id=id ) + for id in data.get("memo", {}).get("boss_ids", []) ], - cur_max_enter_times=714, + cur_max_enter_times=18, rank_id=104, - schedule_id=10359 + schedule_id=10377, + now_schedule_id=10377 ) ) diff --git a/game_server/packet/handlers/GetExBossRankReq.py b/game_server/packet/handlers/GetExBossRankReq.py new file mode 100644 index 0000000..0f1fca2 --- /dev/null +++ b/game_server/packet/handlers/GetExBossRankReq.py @@ -0,0 +1,32 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetExBossRankReq, + GetExBossRankRsp, + RankShowData, + UserRankData +) + +async def handle(session: Session, msg: GetExBossRankReq) -> betterproto.Message: + return GetExBossRankRsp( + retcode=0, + rank_id=104, + rank_data=RankShowData( + my_rank=104, + my_rank_type=2, + my_score=116330, + rank_list=[ + UserRankData( + avatar_id=3101, + custom_head_id=161099, + dress_id=50217, + frame_id=200080, + nick_name="Miku", + rank=1, + score=119727, + uid=1337 + ) + ] + ), + boss_id=51016 + ) diff --git a/game_server/packet/handlers/GetExBossScheduleReq.py b/game_server/packet/handlers/GetExBossScheduleReq.py index ccee55d..e3466da 100644 --- a/game_server/packet/handlers/GetExBossScheduleReq.py +++ b/game_server/packet/handlers/GetExBossScheduleReq.py @@ -3,4 +3,11 @@ from game_server.net.session import Session from lib.proto import GetExBossScheduleReq, GetExBossScheduleRsp async def handle(session: Session, msg: GetExBossScheduleReq) -> betterproto.Message: - return GetExBossScheduleRsp(retcode=0) + return GetExBossScheduleRsp( + retcode=0, + begin_time=1730750400, + end_time=1931268799, + min_level=38, + rank_id=104, + schedule_id=10377 + ) diff --git a/game_server/packet/handlers/GetGodWarLobbyReq.py b/game_server/packet/handlers/GetGodWarLobbyReq.py new file mode 100644 index 0000000..f5d75f9 --- /dev/null +++ b/game_server/packet/handlers/GetGodWarLobbyReq.py @@ -0,0 +1,10 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetGodWarLobbyReq,GetGodWarLobbyRsp + +async def handle(session: Session, msg: GetGodWarLobbyReq) -> betterproto.Message: + return GetGodWarLobbyRsp( + retcode=0, + god_war_id=1, + lobby_id=2 + ) diff --git a/game_server/packet/handlers/GodWarEventNotify.py b/game_server/packet/handlers/GodWarEventNotify.py new file mode 100644 index 0000000..21ee9eb --- /dev/null +++ b/game_server/packet/handlers/GodWarEventNotify.py @@ -0,0 +1,66 @@ +import betterproto +import random +from game_server.net.session import Session +from lib.proto import ( + GodWarEventNotify, + GodWarEventInfo +) + +async def handle(session: Session, msg: GodWarEventNotify) -> betterproto.Message: + return GodWarEventNotify( + god_war_id=1, + tale_id=30, + event_list=[ + GodWarEventInfo( + event_id=570018, + event_param_list=[ + 418, + 0 + ], + event_type=33, + source_event_id=57000, + source_type=1 + ), + GodWarEventInfo( + event_id=3000045, + event_type=10, + source_event_id=5910000, + source_type=1 + ), + GodWarEventInfo( + event_id=5910000, + event_type=99, + source_event_id=57000, + source_type=1 + ), + GodWarEventInfo( + event_id=3000045, + event_type=10, + source_event_id=570000, + source_type=1 + ), + GodWarEventInfo( + event_id=5600145, + event_param_list=[ + 10, + 718, + 1 + ], + event_type=49, + source_event_id=570000, + source_type=1 + ), + GodWarEventInfo( + event_id=570000, + event_type=99, + source_event_id=57000, + source_type=1 + ), + GodWarEventInfo( + event_id=57000, + event_type=99, + source_event_id=57000, + source_type=1 + ) + ] + ) diff --git a/game_server/packet/handlers/TriggerGodWarEventReq.py b/game_server/packet/handlers/TriggerGodWarEventReq.py new file mode 100644 index 0000000..4978831 --- /dev/null +++ b/game_server/packet/handlers/TriggerGodWarEventReq.py @@ -0,0 +1,17 @@ +import betterproto +import random +from game_server.net.session import Session +from lib.proto import ( + TriggerGodWarEventReq, + TriggerGodWarEventRsp, + GodWarEventNotify, + GodWarEventInfo +) + +async def handle(session: Session, msg: TriggerGodWarEventReq) -> betterproto.Message: + return TriggerGodWarEventRsp( + retcode=0, + event_id_list=msg.event_id_list, + god_war_id=1, + tale_id=30 + ) diff --git a/game_server/packet/handlers/UltraEndlessGetMainDataReq.py b/game_server/packet/handlers/UltraEndlessGetMainDataReq.py index d9f9289..913fadf 100644 --- a/game_server/packet/handlers/UltraEndlessGetMainDataReq.py +++ b/game_server/packet/handlers/UltraEndlessGetMainDataReq.py @@ -13,13 +13,14 @@ from lib.proto import ( ) async def handle(session: Session, msg: UltraEndlessGetMainDataReq) -> betterproto.Message: - with open("Endless.json", "r") as file: + with open("Battle.json", "r") as file: data = json.load(file) - site = data.get("area1",781009) - group = data.get("grouplevel",9) - dynamic = data.get("dynamic",500) - cupnum = data.get("cupnum",1600) + endless_data = data.get("endless", {}) + site = endless_data.get("area1", 781009) + group = endless_data.get("grouplevel", 9) + dynamic = endless_data.get("dynamic", 500) + cupnum = endless_data.get("cupnum", 1600) return UltraEndlessGetMainDataRsp( retcode=0, dynamic_hard_level=dynamic,